diff --git a/app/controllers/reports_controller.rb b/app/controllers/reports_controller.rb index cfef2f200..f8f2bc03f 100644 --- a/app/controllers/reports_controller.rb +++ b/app/controllers/reports_controller.rb @@ -17,16 +17,32 @@ class ReportsController < ApplicationController menu_item :issues - before_action :find_project, :authorize, :find_issue_statuses + before_action :find_project, :authorize, :if => proc { params[:id].present? } + before_action :find_issue_statuses def issue_report - @trackers = @project.rolled_up_trackers(false).visible - @versions = @project.shared_versions.sort - @priorities = IssuePriority.all.reverse - @categories = @project.issue_categories - @assignees = (Setting.issue_group_assignment? ? @project.principals : @project.users).sort - @authors = @project.users.sort - @subprojects = @project.descendants.visible + if @project + @trackers = @project.rolled_up_trackers(false).visible + @versions = @project.shared_versions.sort + @priorities = IssuePriority.all.reverse + @categories = @project.issue_categories + @assignees = (Setting.issue_group_assignment? ? @project.principals : @project.users).sort + @authors = @project.users.sort + @subprojects = @project.descendants.visible + + @issues_by_subproject = Issue.by_subproject(@project) || [] + else + @trackers = Tracker.visible.sorted + @versions = [] + @priorities = IssuePriority.all.reverse + @categories = [] + @assignees = (Setting.issue_group_assignment? ? Principal.active : User.active).sort + @authors = User.active.sort + @projects = Project.visible.sorted + + @issues_by_project = Issue.count_and_group_by(:association => :project) + end + with_subprojects = Setting.display_subprojects_issues? @issues_by_tracker = Issue.by_tracker(@project, with_subprojects) @issues_by_version = Issue.by_version(@project, with_subprojects) @@ -34,7 +50,6 @@ class ReportsController < ApplicationController @issues_by_category = Issue.by_category(@project, with_subprojects) @issues_by_assigned_to = Issue.by_assigned_to(@project, with_subprojects) @issues_by_author = Issue.by_author(@project, with_subprojects) - @issues_by_subproject = Issue.by_subproject(@project) || [] render :template => "reports/issue_report" end @@ -44,10 +59,11 @@ class ReportsController < ApplicationController case params[:detail] when "tracker" @field = "tracker_id" - @rows = @project.rolled_up_trackers(false).visible + @rows = @project ? @project.rolled_up_trackers(false).visible : Tracker.visible.sorted @data = Issue.by_tracker(@project, with_subprojects) @report_title = l(:field_tracker) when "version" + (render_404; return) unless @project.present? @field = "fixed_version_id" @rows = @project.shared_versions.sort @data = Issue.by_version(@project, with_subprojects) @@ -58,25 +74,33 @@ class ReportsController < ApplicationController @data = Issue.by_priority(@project, with_subprojects) @report_title = l(:field_priority) when "category" + (render_404; return) unless @project.present? @field = "category_id" @rows = @project.issue_categories @data = Issue.by_category(@project, with_subprojects) @report_title = l(:field_category) when "assigned_to" @field = "assigned_to_id" - @rows = (Setting.issue_group_assignment? ? @project.principals : @project.users).sort + @rows = @project ? (Setting.issue_group_assignment? ? @project.principals : @project.users).sort : + (Setting.issue_group_assignment? ? Principal.active : User.active).sort @data = Issue.by_assigned_to(@project, with_subprojects) @report_title = l(:field_assigned_to) when "author" @field = "author_id" - @rows = @project.users.sort + @rows = @project ? @project.users.sort : User.active.sort @data = Issue.by_author(@project, with_subprojects) @report_title = l(:field_author) when "subproject" + (render_404; return) unless @project.present? @field = "project_id" @rows = @project.descendants.visible @data = Issue.by_subproject(@project) || [] @report_title = l(:field_subproject) + when "project" + @field = "project_id" + @rows = Project.visible.sorted + @data = Issue.count_and_group_by(:association => :project) + @report_title = l(:field_project) else render_404 end @@ -85,6 +109,6 @@ class ReportsController < ApplicationController private def find_issue_statuses - @statuses = @project.rolled_up_statuses.sorted.to_a + @statuses = @project ? @project.rolled_up_statuses.sorted.to_a : IssueStatus.sorted.to_a end end diff --git a/app/helpers/reports_helper.rb b/app/helpers/reports_helper.rb index 201c99024..47911b441 100644 --- a/app/helpers/reports_helper.rb +++ b/app/helpers/reports_helper.rb @@ -38,6 +38,17 @@ module ReportsHelper def aggregate_path(project, field, row, options={}) parameters = {:set_filter => 1, :subproject_id => '!*', field => row.id}.merge(options) - project_issues_path(row.is_a?(Project) ? row : project, parameters) + parameters[:subproject_id] = nil if project + return project_issues_path(row, parameters) if row.is_a?(Project) + return project_issues_path(project, parameters) if project.is_a?(Project) + return issues_path(parameters) + end + + def report_details_path(project, options) + if project + project_issues_report_details_path(project, options) + else + issues_report_details_path(options) + end end end diff --git a/app/models/issue.rb b/app/models/issue.rb index b20da8d91..a89d56029 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -1486,11 +1486,13 @@ class Issue < ActiveRecord::Base # * with_subprojects - Includes subprojects issues if set to true. # * association - Symbol. Association for grouping. def self.count_and_group_by(options) + visible_conditions = {:project => options[:project], :with_subprojects => options[:with_subprojects]} + visible_conditions.delete(:project) if options[:project].nil? assoc = reflect_on_association(options[:association]) select_field = assoc.foreign_key Issue. - visible(User.current, :project => options[:project], :with_subprojects => options[:with_subprojects]). + visible(User.current, visible_conditions). joins(:status, assoc.name). group(:status_id, :is_closed, select_field). count. diff --git a/app/views/issues/_sidebar.html.erb b/app/views/issues/_sidebar.html.erb index 38d682b04..42ebd6904 100644 --- a/app/views/issues/_sidebar.html.erb +++ b/app/views/issues/_sidebar.html.erb @@ -2,9 +2,7 @@