From 46d67cb349fb48a5eb7812dcd9d66832de5ce8ab Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Wed, 4 Apr 2007 21:52:53 +0000 Subject: [PATCH] Fixed a regression (crash when an admin with no role on the project try to create an issue) git-svn-id: http://redmine.rubyforge.org/svn/trunk@420 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/controllers/projects_controller.rb | 3 ++- app/models/issue_status.rb | 10 ++++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 5d55a880..bbbfa426 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -214,7 +214,8 @@ class ProjectsController < ApplicationController @priorities = Enumeration::get_values('IPRI') default_status = IssueStatus.default - @issue = Issue.new(:project => @project, :tracker => @tracker, :status => default_status) + @issue = Issue.new(:project => @project, :tracker => @tracker) + @issue.status = default_status @allowed_statuses = default_status.find_new_statuses_allowed_to(logged_in_user.role_for_project(@project), @issue.tracker) if logged_in_user if request.get? @issue.start_date = Date.today diff --git a/app/models/issue_status.rb b/app/models/issue_status.rb index 337aa589..de8a1391 100644 --- a/app/models/issue_status.rb +++ b/app/models/issue_status.rb @@ -38,16 +38,18 @@ class IssueStatus < ActiveRecord::Base # Returns an array of all statuses the given role can switch to # Uses association cache when called more than one time def new_statuses_allowed_to(role, tracker) - new_statuses = [self] + workflows.select {|w| w.role_id == role.id && w.tracker_id == tracker.id}.collect{|w| w.new_status} + new_statuses = [self] + new_statuses += workflows.select {|w| w.role_id == role.id && w.tracker_id == tracker.id}.collect{|w| w.new_status} if role && tracker new_statuses.sort{|x, y| x.position <=> y.position } end # Same thing as above but uses a database query # More efficient than the previous method if called just once def find_new_statuses_allowed_to(role, tracker) - new_statuses = [self] + workflows.find(:all, - :include => :new_status, - :conditions => ["role_id=? and tracker_id=?", role.id, tracker.id]).collect{ |w| w.new_status } + new_statuses = [self] + new_statuses += workflows.find(:all, + :include => :new_status, + :conditions => ["role_id=? and tracker_id=?", role.id, tracker.id]).collect{ |w| w.new_status } if role && tracker new_statuses.sort{|x, y| x.position <=> y.position } end