##// END OF EJS Templates
Removed :update key and use :edit instead....
Jean-Philippe Lang -
r13571:defd3f439f33
parent child
Show More
@@ -1,99 +1,98
1 1 # Redmine - project management software
2 2 # Copyright (C) 2006-2015 Jean-Philippe Lang
3 3 #
4 4 # This program is free software; you can redistribute it and/or
5 5 # modify it under the terms of the GNU General Public License
6 6 # as published by the Free Software Foundation; either version 2
7 7 # of the License, or (at your option) any later version.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU General Public License
15 15 # along with this program; if not, write to the Free Software
16 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 17
18 18 class ContextMenusController < ApplicationController
19 19 helper :watchers
20 20 helper :issues
21 21
22 22 before_filter :find_issues, :only => :issues
23 23
24 24 def issues
25 25 if (@issues.size == 1)
26 26 @issue = @issues.first
27 27 end
28 28 @issue_ids = @issues.map(&:id).sort
29 29
30 30 @allowed_statuses = @issues.map(&:new_statuses_allowed_to).reduce(:&)
31 31
32 32 @can = {:edit => User.current.allowed_to?(:edit_issues, @projects),
33 33 :log_time => (@project && User.current.allowed_to?(:log_time, @project)),
34 :update => User.current.allowed_to?(:edit_issues, @projects),
35 34 :move => (@project && User.current.allowed_to?(:move_issues, @project)),
36 35 :copy => (@issue && @project.trackers.include?(@issue.tracker) && User.current.allowed_to?(:add_issues, @project)),
37 36 :delete => User.current.allowed_to?(:delete_issues, @projects)
38 37 }
39 38 if @project
40 39 if @issue
41 40 @assignables = @issue.assignable_users
42 41 else
43 42 @assignables = @project.assignable_users
44 43 end
45 44 @trackers = @project.trackers
46 45 else
47 46 #when multiple projects, we only keep the intersection of each set
48 47 @assignables = @projects.map(&:assignable_users).reduce(:&)
49 48 @trackers = @projects.map(&:trackers).reduce(:&)
50 49 end
51 50 @versions = @projects.map {|p| p.shared_versions.open}.reduce(:&)
52 51
53 52 @priorities = IssuePriority.active.reverse
54 53 @back = back_url
55 54
56 55 @options_by_custom_field = {}
57 56 if @can[:edit]
58 57 custom_fields = @issues.map(&:editable_custom_fields).reduce(:&).reject(&:multiple?)
59 58 custom_fields.each do |field|
60 59 values = field.possible_values_options(@projects)
61 60 if values.present?
62 61 @options_by_custom_field[field] = values
63 62 end
64 63 end
65 64 end
66 65
67 66 @safe_attributes = @issues.map(&:safe_attribute_names).reduce(:&)
68 67 render :layout => false
69 68 end
70 69
71 70 def time_entries
72 71 @time_entries = TimeEntry.where(:id => params[:ids]).preload(:project).to_a
73 72 (render_404; return) unless @time_entries.present?
74 73 if (@time_entries.size == 1)
75 74 @time_entry = @time_entries.first
76 75 end
77 76
78 77 @projects = @time_entries.collect(&:project).compact.uniq
79 78 @project = @projects.first if @projects.size == 1
80 79 @activities = TimeEntryActivity.shared.active
81 80 @can = {:edit => User.current.allowed_to?(:edit_time_entries, @projects),
82 81 :delete => User.current.allowed_to?(:edit_time_entries, @projects)
83 82 }
84 83 @back = back_url
85 84
86 85 @options_by_custom_field = {}
87 86 if @can[:edit]
88 87 custom_fields = @time_entries.map(&:editable_custom_fields).reduce(:&).reject(&:multiple?)
89 88 custom_fields.each do |field|
90 89 values = field.possible_values_options(@projects)
91 90 if values.present?
92 91 @options_by_custom_field[field] = values
93 92 end
94 93 end
95 94 end
96 95
97 96 render :layout => false
98 97 end
99 98 end
@@ -1,139 +1,139
1 1 <ul>
2 2 <%= call_hook(:view_issues_context_menu_start, {:issues => @issues, :can => @can, :back => @back }) %>
3 3
4 4 <% if @issue -%>
5 5 <li><%= context_menu_link l(:button_edit), edit_issue_path(@issue),
6 6 :class => 'icon-edit', :disabled => !@can[:edit] %></li>
7 7 <% else %>
8 8 <li><%= context_menu_link l(:button_edit), bulk_edit_issues_path(:ids => @issue_ids),
9 9 :class => 'icon-edit', :disabled => !@can[:edit] %></li>
10 10 <% end %>
11 11
12 12 <% if @allowed_statuses.present? %>
13 13 <li class="folder">
14 14 <a href="#" class="submenu"><%= l(:field_status) %></a>
15 15 <ul>
16 16 <% @allowed_statuses.each do |s| -%>
17 17 <li><%= context_menu_link h(s.name), bulk_update_issues_path(:ids => @issue_ids, :issue => {:status_id => s}, :back_url => @back), :method => :post,
18 :selected => (@issue && s == @issue.status), :disabled => !@can[:update] %></li>
18 :selected => (@issue && s == @issue.status), :disabled => !@can[:edit] %></li>
19 19 <% end -%>
20 20 </ul>
21 21 </li>
22 22 <% end %>
23 23
24 24 <% if @trackers.present? %>
25 25 <li class="folder">
26 26 <a href="#" class="submenu"><%= l(:field_tracker) %></a>
27 27 <ul>
28 28 <% @trackers.each do |t| -%>
29 29 <li><%= context_menu_link h(t.name), bulk_update_issues_path(:ids => @issue_ids, :issue => {'tracker_id' => t}, :back_url => @back), :method => :post,
30 30 :selected => (@issue && t == @issue.tracker), :disabled => !@can[:edit] %></li>
31 31 <% end -%>
32 32 </ul>
33 33 </li>
34 34 <% end %>
35 35
36 36 <% if @safe_attributes.include?('priority_id') && @priorities.present? -%>
37 37 <li class="folder">
38 38 <a href="#" class="submenu"><%= l(:field_priority) %></a>
39 39 <ul>
40 40 <% @priorities.each do |p| -%>
41 41 <li><%= context_menu_link h(p.name), bulk_update_issues_path(:ids => @issue_ids, :issue => {'priority_id' => p}, :back_url => @back), :method => :post,
42 42 :selected => (@issue && p == @issue.priority), :disabled => (!@can[:edit] || @issues.detect {|i| !i.leaf?}) %></li>
43 43 <% end -%>
44 44 </ul>
45 45 </li>
46 46 <% end %>
47 47
48 48 <% if @safe_attributes.include?('fixed_version_id') && @versions.present? -%>
49 49 <li class="folder">
50 50 <a href="#" class="submenu"><%= l(:field_fixed_version) %></a>
51 51 <ul>
52 52 <% @versions.sort.each do |v| -%>
53 53 <li><%= context_menu_link format_version_name(v), bulk_update_issues_path(:ids => @issue_ids, :issue => {'fixed_version_id' => v}, :back_url => @back), :method => :post,
54 :selected => (@issue && v == @issue.fixed_version), :disabled => !@can[:update] %></li>
54 :selected => (@issue && v == @issue.fixed_version), :disabled => !@can[:edit] %></li>
55 55 <% end -%>
56 56 <li><%= context_menu_link l(:label_none), bulk_update_issues_path(:ids => @issue_ids, :issue => {'fixed_version_id' => 'none'}, :back_url => @back), :method => :post,
57 :selected => (@issue && @issue.fixed_version.nil?), :disabled => !@can[:update] %></li>
57 :selected => (@issue && @issue.fixed_version.nil?), :disabled => !@can[:edit] %></li>
58 58 </ul>
59 59 </li>
60 60 <% end %>
61 61
62 62 <% if @safe_attributes.include?('assigned_to_id') && @assignables.present? -%>
63 63 <li class="folder">
64 64 <a href="#" class="submenu"><%= l(:field_assigned_to) %></a>
65 65 <ul>
66 66 <% if @assignables.include?(User.current) %>
67 67 <li><%= context_menu_link "<< #{l(:label_me)} >>", bulk_update_issues_path(:ids => @issue_ids, :issue => {'assigned_to_id' => User.current}, :back_url => @back), :method => :post,
68 :disabled => !@can[:update] %></li>
68 :disabled => !@can[:edit] %></li>
69 69 <% end %>
70 70 <% @assignables.each do |u| -%>
71 71 <li><%= context_menu_link h(u.name), bulk_update_issues_path(:ids => @issue_ids, :issue => {'assigned_to_id' => u}, :back_url => @back), :method => :post,
72 :selected => (@issue && u == @issue.assigned_to), :disabled => !@can[:update] %></li>
72 :selected => (@issue && u == @issue.assigned_to), :disabled => !@can[:edit] %></li>
73 73 <% end -%>
74 74 <li><%= context_menu_link l(:label_nobody), bulk_update_issues_path(:ids => @issue_ids, :issue => {'assigned_to_id' => 'none'}, :back_url => @back), :method => :post,
75 :selected => (@issue && @issue.assigned_to.nil?), :disabled => !@can[:update] %></li>
75 :selected => (@issue && @issue.assigned_to.nil?), :disabled => !@can[:edit] %></li>
76 76 </ul>
77 77 </li>
78 78 <% end %>
79 79
80 80 <% if @safe_attributes.include?('category_id') && @project && @project.issue_categories.any? -%>
81 81 <li class="folder">
82 82 <a href="#" class="submenu"><%= l(:field_category) %></a>
83 83 <ul>
84 84 <% @project.issue_categories.each do |u| -%>
85 85 <li><%= context_menu_link h(u.name), bulk_update_issues_path(:ids => @issue_ids, :issue => {'category_id' => u}, :back_url => @back), :method => :post,
86 :selected => (@issue && u == @issue.category), :disabled => !@can[:update] %></li>
86 :selected => (@issue && u == @issue.category), :disabled => !@can[:edit] %></li>
87 87 <% end -%>
88 88 <li><%= context_menu_link l(:label_none), bulk_update_issues_path(:ids => @issue_ids, :issue => {'category_id' => 'none'}, :back_url => @back), :method => :post,
89 :selected => (@issue && @issue.category.nil?), :disabled => !@can[:update] %></li>
89 :selected => (@issue && @issue.category.nil?), :disabled => !@can[:edit] %></li>
90 90 </ul>
91 91 </li>
92 92 <% end -%>
93 93
94 94 <% if @safe_attributes.include?('done_ratio') && Issue.use_field_for_done_ratio? %>
95 95 <li class="folder">
96 96 <a href="#" class="submenu"><%= l(:field_done_ratio) %></a>
97 97 <ul>
98 98 <% (0..10).map{|x|x*10}.each do |p| -%>
99 99 <li><%= context_menu_link "#{p}%", bulk_update_issues_path(:ids => @issue_ids, :issue => {'done_ratio' => p}, :back_url => @back), :method => :post,
100 100 :selected => (@issue && p == @issue.done_ratio), :disabled => (!@can[:edit] || @issues.detect {|i| !i.leaf?}) %></li>
101 101 <% end -%>
102 102 </ul>
103 103 </li>
104 104 <% end %>
105 105
106 106 <% @options_by_custom_field.each do |field, options| %>
107 107 <li class="folder cf_<%= field.id %>">
108 108 <a href="#" class="submenu"><%= h(field.name) %></a>
109 109 <ul>
110 110 <% options.each do |text, value| %>
111 111 <li><%= bulk_update_custom_field_context_menu_link(field, text, value || text) %></li>
112 112 <% end %>
113 113 <% unless field.is_required? %>
114 114 <li><%= bulk_update_custom_field_context_menu_link(field, l(:label_none), '__none__') %></li>
115 115 <% end %>
116 116 </ul>
117 117 </li>
118 118 <% end %>
119 119
120 120 <% if User.current.logged? %>
121 121 <li><%= watcher_link(@issues, User.current) %></li>
122 122 <% end %>
123 123
124 124 <% if @issue.present? %>
125 125 <% if @can[:log_time] -%>
126 126 <li><%= context_menu_link l(:button_log_time), new_issue_time_entry_path(@issue),
127 127 :class => 'icon-time-add' %></li>
128 128 <% end %>
129 129 <li><%= context_menu_link l(:button_copy), project_copy_issue_path(@project, @issue),
130 130 :class => 'icon-copy', :disabled => !@can[:copy] %></li>
131 131 <% else %>
132 132 <li><%= context_menu_link l(:button_copy), bulk_edit_issues_path(:ids => @issue_ids, :copy => '1'),
133 133 :class => 'icon-copy', :disabled => !@can[:move] %></li>
134 134 <% end %>
135 135 <li><%= context_menu_link l(:button_delete), issues_path(:ids => @issue_ids, :back_url => @back),
136 136 :method => :delete, :data => {:confirm => issues_destroy_confirmation_message(@issues)}, :class => 'icon-del', :disabled => !@can[:delete] %></li>
137 137
138 138 <%= call_hook(:view_issues_context_menu_end, {:issues => @issues, :can => @can, :back => @back }) %>
139 139 </ul>
General Comments 0
You need to be logged in to leave comments. Login now