You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

context_menus_controller.rb 2.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. class ContextMenusController < ApplicationController
  2. helper :watchers
  3. helper :issues
  4. def issues
  5. @issues = Issue.visible.all(:conditions => {:id => params[:ids]}, :include => :project)
  6. if (@issues.size == 1)
  7. @issue = @issues.first
  8. end
  9. @allowed_statuses = @issues.map(&:new_statuses_allowed_to).reduce(:&)
  10. @projects = @issues.collect(&:project).compact.uniq
  11. @project = @projects.first if @projects.size == 1
  12. @can = {:edit => User.current.allowed_to?(:edit_issues, @projects),
  13. :log_time => (@project && User.current.allowed_to?(:log_time, @project)),
  14. :update => (User.current.allowed_to?(:edit_issues, @projects) || (User.current.allowed_to?(:change_status, @projects) && !@allowed_statuses.blank?)),
  15. :move => (@project && User.current.allowed_to?(:move_issues, @project)),
  16. :copy => (@issue && @project.trackers.include?(@issue.tracker) && User.current.allowed_to?(:add_issues, @project)),
  17. :delete => User.current.allowed_to?(:delete_issues, @projects)
  18. }
  19. if @project
  20. if @issue
  21. @assignables = @issue.assignable_users
  22. else
  23. @assignables = @project.assignable_users
  24. end
  25. @trackers = @project.trackers
  26. else
  27. #when multiple projects, we only keep the intersection of each set
  28. @assignables = @projects.map(&:assignable_users).reduce(:&)
  29. @trackers = @projects.map(&:trackers).reduce(:&)
  30. end
  31. @priorities = IssuePriority.active.reverse
  32. @back = back_url
  33. @options_by_custom_field = {}
  34. if @can[:edit]
  35. custom_fields = @issues.map(&:available_custom_fields).reduce(:&).select do |f|
  36. %w(bool list user version).include?(f.field_format) && !f.multiple?
  37. end
  38. custom_fields.each do |field|
  39. values = field.possible_values_options(@projects)
  40. if values.any?
  41. @options_by_custom_field[field] = values
  42. end
  43. end
  44. end
  45. render :layout => false
  46. end
  47. def time_entries
  48. @time_entries = TimeEntry.all(
  49. :conditions => {:id => params[:ids]}, :include => :project)
  50. @projects = @time_entries.collect(&:project).compact.uniq
  51. @project = @projects.first if @projects.size == 1
  52. @activities = TimeEntryActivity.shared.active
  53. @can = {:edit => User.current.allowed_to?(:edit_time_entries, @projects),
  54. :delete => User.current.allowed_to?(:edit_time_entries, @projects)
  55. }
  56. @back = back_url
  57. render :layout => false
  58. end
  59. end