Addressing concerns that projects with no issues display broken graph pages.

This commit is contained in:
Brad Beattie 2009-05-13 10:52:47 -07:00
parent 49400f166e
commit ce3c62c251
2 changed files with 50 additions and 16 deletions

View File

@ -2,6 +2,10 @@ require 'SVG/Graph/TimeSeries'
class GraphsController < ApplicationController class GraphsController < ApplicationController
############################################################################
# Initialization
############################################################################
menu_item :issues, :only => [:issue_growth, :old_issues] menu_item :issues, :only => [:issue_growth, :old_issues]
before_filter :find_version, :only => [:target_version_graph] before_filter :find_version, :only => [:target_version_graph]
@ -10,6 +14,12 @@ class GraphsController < ApplicationController
helper IssuesHelper helper IssuesHelper
############################################################################
# My Page block graphs
############################################################################
# Displays a ring of issue assignement changes around the current user
def recent_assigned_to_changes_graph def recent_assigned_to_changes_graph
# Get the top visible projects by issue count # Get the top visible projects by issue count
sql = " select u1.id as old_user, u2.id as new_user, count(*) as changes_count" sql = " select u1.id as old_user, u2.id as new_user, count(*) as changes_count"
@ -25,11 +35,11 @@ class GraphsController < ApplicationController
user_ids = @assigned_to_changes.collect { |change| [change["old_user"].to_i, change["new_user"].to_i] }.flatten.uniq user_ids = @assigned_to_changes.collect { |change| [change["old_user"].to_i, change["new_user"].to_i] }.flatten.uniq
user_ids.delete(User.current.id) user_ids.delete(User.current.id)
@users = User.find(:all, :conditions => "id IN ("+user_ids.join(',')+")").index_by { |user| user.id } unless user_ids.empty? @users = User.find(:all, :conditions => "id IN ("+user_ids.join(',')+")").index_by { |user| user.id } unless user_ids.empty?
headers["Content-Type"] = "image/svg+xml" headers["Content-Type"] = "image/svg+xml"
render :layout => false render :layout => false
end end
# Displays a ring of issue status changes
def recent_status_changes_graph def recent_status_changes_graph
# Get the top visible projects by issue count # Get the top visible projects by issue count
sql = " select is1.id as old_status, is2.id as new_status, count(*) as changes_count" sql = " select is1.id as old_status, is2.id as new_status, count(*) as changes_count"
@ -42,14 +52,32 @@ class GraphsController < ApplicationController
sql << " order by is1.position, is2.position" sql << " order by is1.position, is2.position"
@status_changes = ActiveRecord::Base.connection.select_all(sql) @status_changes = ActiveRecord::Base.connection.select_all(sql)
@issue_statuses = IssueStatus.find(:all).sort { |a,b| a.position<=>b.position } @issue_statuses = IssueStatus.find(:all).sort { |a,b| a.position<=>b.position }
headers["Content-Type"] = "image/svg+xml" headers["Content-Type"] = "image/svg+xml"
render :layout => false render :layout => false
end end
############################################################################
# Graph pages
############################################################################
# Displays total number of issues over time
def issue_growth def issue_growth
render_404 if @project && @project.issues.empty?
end end
# Displays created vs update date on open issues over time
def old_issues
render_404 if @project && @project.issues.empty?
@issues_by_created_on = @issues.sort {|a,b| a.created_on<=>b.created_on}
@issues_by_updated_on = @issues.sort {|a,b| a.updated_on<=>b.updated_on}
end
############################################################################
# Embedded graphs for graph pages
############################################################################
# Displays projects by total issues over time # Displays projects by total issues over time
def issue_growth_graph def issue_growth_graph
@ -107,10 +135,6 @@ class GraphsController < ApplicationController
send_data(graph.burn, :type => "image/svg+xml", :disposition => "inline") send_data(graph.burn, :type => "image/svg+xml", :disposition => "inline")
end end
def old_issues
@issues_by_created_on = @issues.sort {|a,b| a.created_on<=>b.created_on}
@issues_by_updated_on = @issues.sort {|a,b| a.updated_on<=>b.updated_on}
end
# Displays issues by creation date, cumulatively # Displays issues by creation date, cumulatively
def issue_age_graph def issue_age_graph
@ -226,6 +250,9 @@ class GraphsController < ApplicationController
end end
############################################################################
# Private methods
############################################################################
private private
def find_open_issues def find_open_issues

View File

@ -1,13 +1,20 @@
# Provides a link to the issue age graph on the issue index page # Provides a link to the issue age graph on the issue index page
class IssuesSidebarGraphHook < Redmine::Hook::ViewListener class IssuesSidebarGraphHook < Redmine::Hook::ViewListener
def view_issues_sidebar_issues_bottom(context = { }) def view_issues_sidebar_issues_bottom(context = { })
output = "<h3>#{l(:label_graphs)}</h3>" if context[:project].nil?
output << link_to(l(:label_graphs_old_issues), {:controller => 'graphs', :action => 'old_issues', :only_path => true}) if context[:project].nil? output = "<h3>#{l(:label_graphs)}</h3>"
output << link_to(l(:label_graphs_old_issues), {:controller => 'graphs', :action => 'old_issues', :project_id => context[:project], :only_path => true}) unless context[:project].nil? output << link_to(l(:label_graphs_old_issues), {:controller => 'graphs', :action => 'old_issues', :only_path => true})
output << "<br/>" output << "<br/>"
output << link_to(l(:label_graphs_issue_growth), {:controller => 'graphs', :action => 'issue_growth', :only_path => true}) if context[:project].nil? output << link_to(l(:label_graphs_issue_growth), {:controller => 'graphs', :action => 'issue_growth', :only_path => true})
output << link_to(l(:label_graphs_issue_growth), {:controller => 'graphs', :action => 'issue_growth', :project_id => context[:project], :only_path => true}) unless context[:project].nil? output << "<br/>"
output << "<br/>" return output
return output elsif !context[:project].nil? && !context[:project].issues.empty?
output = "<h3>#{l(:label_graphs)}</h3>"
output << link_to(l(:label_graphs_old_issues), {:controller => 'graphs', :action => 'old_issues', :project_id => context[:project], :only_path => true})
output << "<br/>"
output << link_to(l(:label_graphs_issue_growth), {:controller => 'graphs', :action => 'issue_growth', :project_id => context[:project], :only_path => true})
output << "<br/>"
return output
end
end end
end end