File: app/controllers/context_menus_controller.rb

Overview
Module Structure
Class Hierarchy
Code

Overview

Module Structure

  module: <Toplevel Module>
  class: ContextMenusController#1
inherits from
  ApplicationController   
has properties
method: issues #5
method: time_entries #54

Class Hierarchy

Code

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