context_menus_controller.rb
66 lines
| 2.5 KiB
| text/x-ruby
|
RubyLexer
|
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 | ||||
|
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 | ||
|
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 | ||||
|
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 | ||