scrum2b/scrum2b

View on GitHub
app/controllers/s2b_application_controller.rb

Summary

Maintainability
A
3 hrs
Test Coverage
class S2bApplicationController < ApplicationController
  unloadable

  protect_from_forgery with: :exception
  skip_before_action :verify_authenticity_token
  before_action :set_status_settings
  before_action :find_project
  
  helper :journals
  helper :projects
  include ProjectsHelper
  helper :custom_fields
  include CustomFieldsHelper
  helper :issue_relations
  include IssueRelationsHelper
  helper :watchers
  include WatchersHelper
  helper :attachments
  include AttachmentsHelper
  helper :queries
  include QueriesHelper
  helper :repositories
  include RepositoriesHelper
  helper :sort
  include SortHelper
  include IssuesHelper
  helper :timelog
  include Redmine::Export::PDF
  helper :issues
  include IssuesHelper
  helper_method :editable_for_project?
  helper_method :viewable_for_project?
  self.allow_forgery_protection = false
  
  DEFAULT_STATUS_IDS = {}
  STATUS_IDS = {'status_no_start' => [], 'status_inprogress' => [], 
                'status_completed' => [], 'status_closed' => []}
                
  SELECT_ISSUE_OPTIONS = {:all_working => 1,
                          :my => 2, 
                          :my_completed => 3, 
                          :new => 4, 
                          :completed => 5,
                          :closed => 6,
                          :all => 7}
  
  def editable_for_project?
    return @editable_for_project if @editable_for_project.present?
    @viewable_for_project = true and return true if User.current.admin?

    @user_roles = @user_roles || User.current.roles_for_project(@project)
    @editable_for_project = false
    @user_roles.each do |role|
      @editable_for_project = true and break if role.permissions.include?(:s2b_edit_issue)
    end
    return @editable_for_project  
  end
  
  def viewable_for_project?
    return @viewable_for_project if @viewable_for_project.present? 
    @viewable_for_project = true and return true if User.current.admin?
    
    @user_roles = @user_roles || User.current.roles_for_project(@project)
    @viewable_for_project = false
    @user_roles.each do |role|
      @viewable_for_project = true and break if role.permissions.include?(:s2b_view_issue)
    end
    return @viewable_for_project
  end

  def check_permission(permission_type = :view)
    redirect_to :back if permission_type == :view && !viewable_for_project?
    redirect_to :back if permission_type == :edit && !editable_for_project?
  end
      
  protected
  
  def opened_versions_list
    find_project unless @project
    return @project.versions.where(:status => "open")
  end
  
  def closed_versions_list 
    find_project unless @project
    return @project.versions.where(:status => "closed")
  end
  
  def find_project
    # @project variable must be set before calling the authorize filter
    project_id = params[:project_id] || (params[:issue] && params[:issue][:project_id])
    @project = Project.find(project_id)
    @hierarchy_project =  Project.where(:parent_id => @project.id).to_a << @project; 
    @hierarchy_project_id = @hierarchy_project.collect{|project| project.id}
  end
  
  def get_members
    @members = []
    @hierarchy_project.each do |project|
      project.assignable_users.each do |user|
        @members.push(user) unless @members.include?(user)
      end
    end
  end
  
  def set_status_settings
    @plugin = Redmine::Plugin.find("scrum2b")
    @settings = Setting["plugin_#{@plugin.id}"]   
    # Loop to set default of settings items
    need_to_resetting = false
    STATUS_IDS.keys.each do |column_name|
      @settings[column_name].keys.each { |setting| 
        STATUS_IDS[column_name].push(setting.to_i) 
      } if @settings[column_name]
      
      if STATUS_IDS[column_name].empty?
        need_to_resetting = true;
      else
        DEFAULT_STATUS_IDS[column_name] = STATUS_IDS[column_name].first.to_i
      end
    end
     
    if need_to_resetting
      flash[:notice] = "The system has not been setup to use Scrum2B Tool. Please contact to Administrator " + 
                       "or go to the Settings page of the plugin: <a href='/settings/plugin/scrum2b'>/settings/plugin/scrum2b</a> to config."
      redirect_to "/projects/#{@project.to_param}"
    end
  end
end