context_menus_controller.rb
86 lines
| 3.4 KiB
| text/x-ruby
|
RubyLexer
|
r9453 | # Redmine - project management software | ||
# Copyright (C) 2006-2012 Jean-Philippe Lang | ||||
# | ||||
# This program is free software; you can redistribute it and/or | ||||
# modify it under the terms of the GNU General Public License | ||||
# as published by the Free Software Foundation; either version 2 | ||||
# of the License, or (at your option) any later version. | ||||
# | ||||
# This program is distributed in the hope that it will be useful, | ||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||||
# GNU General Public License for more details. | ||||
# | ||||
# You should have received a copy of the GNU General Public License | ||||
# along with this program; if not, write to the Free Software | ||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||||
|
r3892 | class ContextMenusController < ApplicationController | ||
helper :watchers | ||||
|
r5375 | helper :issues | ||
|
r6677 | |||
|
r3892 | def issues | ||
|
r4466 | @issues = Issue.visible.all(:conditions => {:id => params[:ids]}, :include => :project) | ||
|
r3892 | if (@issues.size == 1) | ||
@issue = @issues.first | ||||
end | ||||
|
r9779 | @issue_ids = @issues.map(&:id).sort | ||
|
r8706 | |||
|
r8707 | @allowed_statuses = @issues.map(&:new_statuses_allowed_to).reduce(:&) | ||
|
r3945 | @projects = @issues.collect(&:project).compact.uniq | ||
@project = @projects.first if @projects.size == 1 | ||||
|
r3892 | |||
|
r4128 | @can = {:edit => User.current.allowed_to?(:edit_issues, @projects), | ||
|
r3892 | :log_time => (@project && User.current.allowed_to?(:log_time, @project)), | ||
|
r4128 | :update => (User.current.allowed_to?(:edit_issues, @projects) || (User.current.allowed_to?(:change_status, @projects) && !@allowed_statuses.blank?)), | ||
|
r3892 | :move => (@project && User.current.allowed_to?(:move_issues, @project)), | ||
:copy => (@issue && @project.trackers.include?(@issue.tracker) && User.current.allowed_to?(:add_issues, @project)), | ||||
|
r4122 | :delete => User.current.allowed_to?(:delete_issues, @projects) | ||
|
r3892 | } | ||
if @project | ||||
|
r6190 | if @issue | ||
@assignables = @issue.assignable_users | ||||
else | ||||
@assignables = @project.assignable_users | ||||
end | ||||
|
r3892 | @trackers = @project.trackers | ||
|
r4128 | else | ||
#when multiple projects, we only keep the intersection of each set | ||||
|
r8707 | @assignables = @projects.map(&:assignable_users).reduce(:&) | ||
@trackers = @projects.map(&:trackers).reduce(:&) | ||||
|
r3892 | end | ||
|
r9778 | @versions = @projects.map {|p| p.shared_versions.open}.reduce(:&) | ||
|
r6677 | |||
|
r5950 | @priorities = IssuePriority.active.reverse | ||
|
r3892 | @back = back_url | ||
|
r6677 | |||
|
r8704 | @options_by_custom_field = {} | ||
if @can[:edit] | ||||
|
r8707 | custom_fields = @issues.map(&:available_custom_fields).reduce(:&).select do |f| | ||
|
r8704 | %w(bool list user version).include?(f.field_format) && !f.multiple? | ||
end | ||||
custom_fields.each do |field| | ||||
values = field.possible_values_options(@projects) | ||||
if values.any? | ||||
@options_by_custom_field[field] = values | ||||
end | ||||
end | ||||
end | ||||
|
r9729 | @safe_attributes = @issues.map(&:safe_attribute_names).reduce(:&) | ||
|
r3892 | render :layout => false | ||
end | ||||
|
r5192 | |||
def time_entries | ||||
@time_entries = TimeEntry.all( | ||||
:conditions => {:id => params[:ids]}, :include => :project) | ||||
@projects = @time_entries.collect(&:project).compact.uniq | ||||
@project = @projects.first if @projects.size == 1 | ||||
@activities = TimeEntryActivity.shared.active | ||||
|
r7802 | @can = {:edit => User.current.allowed_to?(:edit_time_entries, @projects), | ||
:delete => User.current.allowed_to?(:edit_time_entries, @projects) | ||||
|
r5192 | } | ||
@back = back_url | ||||
render :layout => false | ||||
|
r6677 | end | ||
|
r3892 | end | ||