8286: add "star" route for projects. Update projects dropdown in breadcrumbs to displ...
authorradhika <radhika@curoverse.com>
Tue, 2 Feb 2016 23:22:18 +0000 (18:22 -0500)
committerradhika <radhika@curoverse.com>
Tue, 2 Feb 2016 23:22:18 +0000 (18:22 -0500)
apps/workbench/app/controllers/application_controller.rb
apps/workbench/app/views/application/_projects_tree_menu.html.erb
apps/workbench/app/views/projects/show.html.erb
apps/workbench/config/routes.rb

index db3d43040c416bef846a19d8ee0b4009a9e8f622..5d8f1d8e1db63213fc262c64d2a3e1d0440be465 100644 (file)
@@ -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
index 77b9d45f93587e1d1102582f62a0bda24e32fb0c..7eefc66a6f5ecd028e1dba6f56aceda9fd55e69b 100644 (file)
@@ -6,11 +6,10 @@
     <span style="padding-left: 0">Home</span>
   <% end %>
 </li>
-<% my_project_tree.each do |pnode| %>
-  <% next if pnode[:object].class != Group %>
+<% my_starred_projects.each do |pnode| %>
   <li>
-    <%= project_link_to.call pnode do %>
-      <span style="padding-left: <%= pnode[:depth] %>em"></span><%= pnode[:object].name %>
+    <%= project_link_to.call({object: pnode, depth: 0}) do%>
+      <span style="padding-left: 0em"></span><%= pnode[:name] %>
     <% end %>
   </li>
 <% end %>
index 2a85da83214303fed625725dea1a334067691ee2..2b0a5740e42560ea7cf4ca0d1b08d6f6a7cf1687 100644 (file)
@@ -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 %>
+            <i class="fa fa-fw fa-star"></i>
+          <% 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 %>
+            <i class="fa fa-fw fa-star-o"></i>
+          <% end %>
+      <% end %>
       <%= render_editable_attribute @object, 'name', nil, { 'data-emptytext' => "New project" } %>
     <% end %>
   </h2>
index 10426099937e2bdda42b6f7fb0976c0ada764a51..b1119e72c1b4a3a34bc9859b8633fe284237260b 100644 (file)
@@ -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