##// END OF EJS Templates
Do not display items without valid selection in context menu when on different projects. #4998...
Jean-Baptiste Barth -
r3945:a9f5a17c678d
parent child
Show More
@@ -1,39 +1,39
1 class ContextMenusController < ApplicationController
1 class ContextMenusController < ApplicationController
2 helper :watchers
2 helper :watchers
3
3
4 def issues
4 def issues
5 @issues = Issue.find_all_by_id(params[:ids], :include => :project)
5 @issues = Issue.find_all_by_id(params[:ids], :include => :project)
6 if (@issues.size == 1)
6 if (@issues.size == 1)
7 @issue = @issues.first
7 @issue = @issues.first
8 @allowed_statuses = @issue.new_statuses_allowed_to(User.current)
8 @allowed_statuses = @issue.new_statuses_allowed_to(User.current)
9 else
9 else
10 @allowed_statuses = @issues.map do |i|
10 @allowed_statuses = @issues.map do |i|
11 i.new_statuses_allowed_to(User.current)
11 i.new_statuses_allowed_to(User.current)
12 end.inject do |memo,s|
12 end.inject do |memo,s|
13 memo & s
13 memo & s
14 end
14 end
15 end
15 end
16 projects = @issues.collect(&:project).compact.uniq
16 @projects = @issues.collect(&:project).compact.uniq
17 @project = projects.first if projects.size == 1
17 @project = @projects.first if @projects.size == 1
18
18
19 @can = {:edit => (@project && User.current.allowed_to?(:edit_issues, @project)),
19 @can = {:edit => (@project && User.current.allowed_to?(:edit_issues, @project)),
20 :log_time => (@project && User.current.allowed_to?(:log_time, @project)),
20 :log_time => (@project && User.current.allowed_to?(:log_time, @project)),
21 :update => (@project && (User.current.allowed_to?(:edit_issues, @project) || (User.current.allowed_to?(:change_status, @project) && @allowed_statuses && !@allowed_statuses.empty?))),
21 :update => (@project && (User.current.allowed_to?(:edit_issues, @project) || (User.current.allowed_to?(:change_status, @project) && @allowed_statuses && !@allowed_statuses.empty?))),
22 :move => (@project && User.current.allowed_to?(:move_issues, @project)),
22 :move => (@project && User.current.allowed_to?(:move_issues, @project)),
23 :copy => (@issue && @project.trackers.include?(@issue.tracker) && User.current.allowed_to?(:add_issues, @project)),
23 :copy => (@issue && @project.trackers.include?(@issue.tracker) && User.current.allowed_to?(:add_issues, @project)),
24 :delete => (@project && User.current.allowed_to?(:delete_issues, @project))
24 :delete => (@project && User.current.allowed_to?(:delete_issues, @project))
25 }
25 }
26 if @project
26 if @project
27 @assignables = @project.assignable_users
27 @assignables = @project.assignable_users
28 @assignables << @issue.assigned_to if @issue && @issue.assigned_to && !@assignables.include?(@issue.assigned_to)
28 @assignables << @issue.assigned_to if @issue && @issue.assigned_to && !@assignables.include?(@issue.assigned_to)
29 @trackers = @project.trackers
29 @trackers = @project.trackers
30 end
30 end
31
31
32 @priorities = IssuePriority.all.reverse
32 @priorities = IssuePriority.all.reverse
33 @statuses = IssueStatus.find(:all, :order => 'position')
33 @statuses = IssueStatus.find(:all, :order => 'position')
34 @back = back_url
34 @back = back_url
35
35
36 render :layout => false
36 render :layout => false
37 end
37 end
38
38
39 end
39 end
@@ -1,116 +1,122
1 <ul>
1 <ul>
2 <%= call_hook(:view_issues_context_menu_start, {:issues => @issues, :can => @can, :back => @back }) %>
2 <%= call_hook(:view_issues_context_menu_start, {:issues => @issues, :can => @can, :back => @back }) %>
3
3
4 <% if !@issue.nil? -%>
4 <% if !@issue.nil? -%>
5 <li><%= context_menu_link l(:button_edit), {:controller => 'issues', :action => 'edit', :id => @issue},
5 <li><%= context_menu_link l(:button_edit), {:controller => 'issues', :action => 'edit', :id => @issue},
6 :class => 'icon-edit', :disabled => !@can[:edit] %></li>
6 :class => 'icon-edit', :disabled => !@can[:edit] %></li>
7 <% else %>
7 <% else %>
8 <li><%= context_menu_link l(:button_edit), {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id)},
8 <li><%= context_menu_link l(:button_edit), {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id)},
9 :class => 'icon-edit', :disabled => !@can[:edit] %></li>
9 :class => 'icon-edit', :disabled => !@can[:edit] %></li>
10 <% end %>
10 <% end %>
11
11
12 <% unless @allowed_statuses.empty? %>
12 <% unless @allowed_statuses.empty? %>
13 <li class="folder">
13 <li class="folder">
14 <a href="#" class="submenu" onclick="return false;"><%= l(:field_status) %></a>
14 <a href="#" class="submenu" onclick="return false;"><%= l(:field_status) %></a>
15 <ul>
15 <ul>
16 <% @statuses.each do |s| -%>
16 <% @statuses.each do |s| -%>
17 <li><%= context_menu_link s.name, {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), :issue => {:status_id => s}, :back_url => @back}, :method => :post,
17 <li><%= context_menu_link s.name, {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), :issue => {:status_id => s}, :back_url => @back}, :method => :post,
18 :selected => (@issue && s == @issue.status), :disabled => !(@can[:update] && @allowed_statuses.include?(s)) %></li>
18 :selected => (@issue && s == @issue.status), :disabled => !(@can[:update] && @allowed_statuses.include?(s)) %></li>
19 <% end -%>
19 <% end -%>
20 </ul>
20 </ul>
21 </li>
21 </li>
22 <% end %>
22 <% end %>
23
23
24 <% unless @trackers.nil? %>
24 <% unless @trackers.nil? %>
25 <li class="folder">
25 <li class="folder">
26 <a href="#" class="submenu"><%= l(:field_tracker) %></a>
26 <a href="#" class="submenu"><%= l(:field_tracker) %></a>
27 <ul>
27 <ul>
28 <% @trackers.each do |t| -%>
28 <% @trackers.each do |t| -%>
29 <li><%= context_menu_link t.name, {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), :issue => {'tracker_id' => t}, :back_url => @back}, :method => :post,
29 <li><%= context_menu_link t.name, {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), :issue => {'tracker_id' => t}, :back_url => @back}, :method => :post,
30 :selected => (@issue && t == @issue.tracker), :disabled => !@can[:edit] %></li>
30 :selected => (@issue && t == @issue.tracker), :disabled => !@can[:edit] %></li>
31 <% end -%>
31 <% end -%>
32 </ul>
32 </ul>
33 </li>
33 </li>
34 <% end %>
34 <% end %>
35
36 <% if @projects.size == 1 %>
35 <li class="folder">
37 <li class="folder">
36 <a href="#" class="submenu"><%= l(:field_priority) %></a>
38 <a href="#" class="submenu"><%= l(:field_priority) %></a>
37 <ul>
39 <ul>
38 <% @priorities.each do |p| -%>
40 <% @priorities.each do |p| -%>
39 <li><%= context_menu_link p.name, {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), :issue => {'priority_id' => p}, :back_url => @back}, :method => :post,
41 <li><%= context_menu_link p.name, {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), :issue => {'priority_id' => p}, :back_url => @back}, :method => :post,
40 :selected => (@issue && p == @issue.priority), :disabled => (!@can[:edit] || @issues.detect {|i| !i.leaf?}) %></li>
42 :selected => (@issue && p == @issue.priority), :disabled => (!@can[:edit] || @issues.detect {|i| !i.leaf?}) %></li>
41 <% end -%>
43 <% end -%>
42 </ul>
44 </ul>
43 </li>
45 </li>
46 <% end %>
47
44 <% unless @project.nil? || @project.shared_versions.open.empty? -%>
48 <% unless @project.nil? || @project.shared_versions.open.empty? -%>
45 <li class="folder">
49 <li class="folder">
46 <a href="#" class="submenu"><%= l(:field_fixed_version) %></a>
50 <a href="#" class="submenu"><%= l(:field_fixed_version) %></a>
47 <ul>
51 <ul>
48 <% @project.shared_versions.open.sort.each do |v| -%>
52 <% @project.shared_versions.open.sort.each do |v| -%>
49 <li><%= context_menu_link format_version_name(v), {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), :issue => {'fixed_version_id' => v}, :back_url => @back}, :method => :post,
53 <li><%= context_menu_link format_version_name(v), {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), :issue => {'fixed_version_id' => v}, :back_url => @back}, :method => :post,
50 :selected => (@issue && v == @issue.fixed_version), :disabled => !@can[:update] %></li>
54 :selected => (@issue && v == @issue.fixed_version), :disabled => !@can[:update] %></li>
51 <% end -%>
55 <% end -%>
52 <li><%= context_menu_link l(:label_none), {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), :issue => {'fixed_version_id' => 'none'}, :back_url => @back}, :method => :post,
56 <li><%= context_menu_link l(:label_none), {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), :issue => {'fixed_version_id' => 'none'}, :back_url => @back}, :method => :post,
53 :selected => (@issue && @issue.fixed_version.nil?), :disabled => !@can[:update] %></li>
57 :selected => (@issue && @issue.fixed_version.nil?), :disabled => !@can[:update] %></li>
54 </ul>
58 </ul>
55 </li>
59 </li>
56 <% end %>
60 <% end %>
57 <% unless @assignables.nil? || @assignables.empty? -%>
61 <% unless @assignables.nil? || @assignables.empty? -%>
58 <li class="folder">
62 <li class="folder">
59 <a href="#" class="submenu"><%= l(:field_assigned_to) %></a>
63 <a href="#" class="submenu"><%= l(:field_assigned_to) %></a>
60 <ul>
64 <ul>
61 <% @assignables.each do |u| -%>
65 <% @assignables.each do |u| -%>
62 <li><%= context_menu_link u.name, {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), :issue => {'assigned_to_id' => u}, :back_url => @back}, :method => :post,
66 <li><%= context_menu_link u.name, {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), :issue => {'assigned_to_id' => u}, :back_url => @back}, :method => :post,
63 :selected => (@issue && u == @issue.assigned_to), :disabled => !@can[:update] %></li>
67 :selected => (@issue && u == @issue.assigned_to), :disabled => !@can[:update] %></li>
64 <% end -%>
68 <% end -%>
65 <li><%= context_menu_link l(:label_nobody), {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), :issue => {'assigned_to_id' => 'none'}, :back_url => @back}, :method => :post,
69 <li><%= context_menu_link l(:label_nobody), {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), :issue => {'assigned_to_id' => 'none'}, :back_url => @back}, :method => :post,
66 :selected => (@issue && @issue.assigned_to.nil?), :disabled => !@can[:update] %></li>
70 :selected => (@issue && @issue.assigned_to.nil?), :disabled => !@can[:update] %></li>
67 </ul>
71 </ul>
68 </li>
72 </li>
69 <% end %>
73 <% end %>
70 <% unless @project.nil? || @project.issue_categories.empty? -%>
74 <% unless @project.nil? || @project.issue_categories.empty? -%>
71 <li class="folder">
75 <li class="folder">
72 <a href="#" class="submenu"><%= l(:field_category) %></a>
76 <a href="#" class="submenu"><%= l(:field_category) %></a>
73 <ul>
77 <ul>
74 <% @project.issue_categories.each do |u| -%>
78 <% @project.issue_categories.each do |u| -%>
75 <li><%= context_menu_link u.name, {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), :issue => {'category_id' => u}, :back_url => @back}, :method => :post,
79 <li><%= context_menu_link u.name, {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), :issue => {'category_id' => u}, :back_url => @back}, :method => :post,
76 :selected => (@issue && u == @issue.category), :disabled => !@can[:update] %></li>
80 :selected => (@issue && u == @issue.category), :disabled => !@can[:update] %></li>
77 <% end -%>
81 <% end -%>
78 <li><%= context_menu_link l(:label_none), {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), :issue => {'category_id' => 'none'}, :back_url => @back}, :method => :post,
82 <li><%= context_menu_link l(:label_none), {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), :issue => {'category_id' => 'none'}, :back_url => @back}, :method => :post,
79 :selected => (@issue && @issue.category.nil?), :disabled => !@can[:update] %></li>
83 :selected => (@issue && @issue.category.nil?), :disabled => !@can[:update] %></li>
80 </ul>
84 </ul>
81 </li>
85 </li>
82 <% end -%>
86 <% end -%>
83 <% if Issue.use_field_for_done_ratio? %>
87
88 <% if Issue.use_field_for_done_ratio? && @projects.size == 1 %>
84 <li class="folder">
89 <li class="folder">
85 <a href="#" class="submenu"><%= l(:field_done_ratio) %></a>
90 <a href="#" class="submenu"><%= l(:field_done_ratio) %></a>
86 <ul>
91 <ul>
87 <% (0..10).map{|x|x*10}.each do |p| -%>
92 <% (0..10).map{|x|x*10}.each do |p| -%>
88 <li><%= context_menu_link "#{p}%", {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), :issue => {'done_ratio' => p}, :back_url => @back}, :method => :post,
93 <li><%= context_menu_link "#{p}%", {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), :issue => {'done_ratio' => p}, :back_url => @back}, :method => :post,
89 :selected => (@issue && p == @issue.done_ratio), :disabled => (!@can[:edit] || @issues.detect {|i| !i.leaf?}) %></li>
94 :selected => (@issue && p == @issue.done_ratio), :disabled => (!@can[:edit] || @issues.detect {|i| !i.leaf?}) %></li>
90 <% end -%>
95 <% end -%>
91 </ul>
96 </ul>
92 </li>
97 </li>
93 <% end %>
98 <% end %>
99
94 <% if !@issue.nil? %>
100 <% if !@issue.nil? %>
95 <% if @can[:log_time] -%>
101 <% if @can[:log_time] -%>
96 <li><%= context_menu_link l(:button_log_time), {:controller => 'timelog', :action => 'edit', :issue_id => @issue},
102 <li><%= context_menu_link l(:button_log_time), {:controller => 'timelog', :action => 'edit', :issue_id => @issue},
97 :class => 'icon-time-add' %></li>
103 :class => 'icon-time-add' %></li>
98 <% end %>
104 <% end %>
99 <% if User.current.logged? %>
105 <% if User.current.logged? %>
100 <li><%= watcher_link(@issue, User.current) %></li>
106 <li><%= watcher_link(@issue, User.current) %></li>
101 <% end %>
107 <% end %>
102 <% end %>
108 <% end %>
103
109
104 <% if @issue.present? %>
110 <% if @issue.present? %>
105 <li><%= context_menu_link l(:button_duplicate), {:controller => 'issues', :action => 'new', :project_id => @project, :copy_from => @issue},
111 <li><%= context_menu_link l(:button_duplicate), {:controller => 'issues', :action => 'new', :project_id => @project, :copy_from => @issue},
106 :class => 'icon-duplicate', :disabled => !@can[:copy] %></li>
112 :class => 'icon-duplicate', :disabled => !@can[:copy] %></li>
107 <% end %>
113 <% end %>
108 <li><%= context_menu_link l(:button_copy), new_issue_move_path(:ids => @issues.collect(&:id), :copy_options => {:copy => 't'}),
114 <li><%= context_menu_link l(:button_copy), new_issue_move_path(:ids => @issues.collect(&:id), :copy_options => {:copy => 't'}),
109 :class => 'icon-copy', :disabled => !@can[:move] %></li>
115 :class => 'icon-copy', :disabled => !@can[:move] %></li>
110 <li><%= context_menu_link l(:button_move), new_issue_move_path(:ids => @issues.collect(&:id)),
116 <li><%= context_menu_link l(:button_move), new_issue_move_path(:ids => @issues.collect(&:id)),
111 :class => 'icon-move', :disabled => !@can[:move] %></li>
117 :class => 'icon-move', :disabled => !@can[:move] %></li>
112 <li><%= context_menu_link l(:button_delete), {:controller => 'issues', :action => 'destroy', :ids => @issues.collect(&:id)},
118 <li><%= context_menu_link l(:button_delete), {:controller => 'issues', :action => 'destroy', :ids => @issues.collect(&:id)},
113 :method => :post, :confirm => l(:text_issues_destroy_confirmation), :class => 'icon-del', :disabled => !@can[:delete] %></li>
119 :method => :post, :confirm => l(:text_issues_destroy_confirmation), :class => 'icon-del', :disabled => !@can[:delete] %></li>
114
120
115 <%= call_hook(:view_issues_context_menu_end, {:issues => @issues, :can => @can, :back => @back }) %>
121 <%= call_hook(:view_issues_context_menu_end, {:issues => @issues, :can => @can, :back => @back }) %>
116 </ul>
122 </ul>
General Comments 0
You need to be logged in to leave comments. Login now