From a6310e8b0eedce1323f02d285c0709516558f937 Mon Sep 17 00:00:00 2001 From: radhika Date: Tue, 2 Feb 2016 18:22:18 -0500 Subject: [PATCH] 8286: add "star" route for projects. Update projects dropdown in breadcrumbs to display only starred projects instead of all my_projects. --- .../app/controllers/application_controller.rb | 47 +++++++++++++++++++ .../application/_projects_tree_menu.html.erb | 7 ++- .../app/views/projects/show.html.erb | 11 +++++ apps/workbench/config/routes.rb | 1 + 4 files changed, 62 insertions(+), 4 deletions(-) diff --git a/apps/workbench/app/controllers/application_controller.rb b/apps/workbench/app/controllers/application_controller.rb index db3d43040c..5d8f1d8e1d 100644 --- a/apps/workbench/app/controllers/application_controller.rb +++ b/apps/workbench/app/controllers/application_controller.rb @@ -94,6 +94,7 @@ class ApplicationController < ActionController::Base # Fall back to the default-setting code later. end end + @starred_projects ||= [] @my_project_tree ||= [] @shared_project_tree ||= [] render_error(err_opts) @@ -444,6 +445,41 @@ class ApplicationController < ActionController::Base end end + def star + links = Link.where(tail_uuid: current_user.uuid, + head_uuid: @object.uuid, + link_class: 'star') + + if params['status'] == 'create' + # create 'star' link if one does not already exist + if !links.andand.any? + dst = Link.new(owner_uuid: @object.uuid, + tail_uuid: current_user.uuid, + head_uuid: @object.uuid, + link_class: 'star', + name: @object.uuid) + dst.save! + end + else # delete any existing 'star' links + if links.andand.any? + links.each do |link| + link.destroy + end + end + end + + show + end + + helper_method :is_starred + def is_starred + links = Link.where(tail_uuid: current_user.uuid, + head_uuid: @object.uuid, + link_class: 'star') + + return links.andand.any? + end + protected helper_method :strip_token_from_path @@ -833,6 +869,17 @@ class ApplicationController < ActionController::Base {collections: c, owners: own} end + helper_method :my_starred_projects + def my_starred_projects + return if @starred_projects + links = Link.filter([['tail_uuid', '=', current_user.uuid], + ['link_class', '=', 'star'], + ['head_uuid', 'is_a', 'arvados#group']]).select(%w(head_uuid)) + uuids =links.collect { |x| x.head_uuid } + starred_projects = Group.filter([['uuid', 'in', uuids]]).order('name') + @starred_projects = starred_projects.results + end + helper_method :my_project_tree def my_project_tree build_project_trees diff --git a/apps/workbench/app/views/application/_projects_tree_menu.html.erb b/apps/workbench/app/views/application/_projects_tree_menu.html.erb index 77b9d45f93..7eefc66a6f 100644 --- a/apps/workbench/app/views/application/_projects_tree_menu.html.erb +++ b/apps/workbench/app/views/application/_projects_tree_menu.html.erb @@ -6,11 +6,10 @@ Home <% end %> -<% my_project_tree.each do |pnode| %> - <% next if pnode[:object].class != Group %> +<% my_starred_projects.each do |pnode| %>
  • - <%= project_link_to.call pnode do %> - <%= pnode[:object].name %> + <%= project_link_to.call({object: pnode, depth: 0}) do%> + <%= pnode[:name] %> <% end %>
  • <% end %> diff --git a/apps/workbench/app/views/projects/show.html.erb b/apps/workbench/app/views/projects/show.html.erb index 2a85da8321..2b0a5740e4 100644 --- a/apps/workbench/app/views/projects/show.html.erb +++ b/apps/workbench/app/views/projects/show.html.erb @@ -3,6 +3,17 @@ <% if @object.uuid == current_user.andand.uuid %> Home <% else %> + <% starred = false %> + <% starred = true if is_starred %> + <% if starred %> + <%= link_to(url_for({action: 'star', status: 'delete', id: @object.uuid, controller: 'projects'}), method: :post, class: "btn btn-xs", title: "Undo favorite") do %> + + <% end %> + <% else %> + <%= link_to(url_for({action: 'star', status: 'create', id: @object.uuid, controller: 'projects'}), method: :post, class: "btn btn-xs", title: "Mark favorite") do %> + + <% end %> + <% end %> <%= render_editable_attribute @object, 'name', nil, { 'data-emptytext' => "New project" } %> <% end %> diff --git a/apps/workbench/config/routes.rb b/apps/workbench/config/routes.rb index 1042609993..b1119e72c1 100644 --- a/apps/workbench/config/routes.rb +++ b/apps/workbench/config/routes.rb @@ -89,6 +89,7 @@ ArvadosWorkbench::Application.routes.draw do post 'share_with', on: :member get 'tab_counts', on: :member get 'public', on: :collection + post 'star', on: :member end resources :search do -- 2.30.2