2008-09-11 17:03:26 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# Redmine - project management software  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# Copyright (C) 2006-2008  Jean-Philippe Lang  
						 
					
						
							
								
									
										
										
										
											2007-03-12 17:59:02 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								#  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# This program is free software; you can redistribute it and/or  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# modify it under the terms of the GNU General Public License  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# as published by the Free Software Foundation; either version 2  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# of the License, or (at your option) any later version.  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								#   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# This program is distributed in the hope that it will be useful,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# but WITHOUT ANY WARRANTY; without even the implied warranty of  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# GNU General Public License for more details.  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								#   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# You should have received a copy of the GNU General Public License  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# along with this program; if not, write to the Free Software  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  IssuesController  <  ApplicationController  
						 
					
						
							
								
									
										
										
										
											2008-01-20 13:07:19 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  menu_item  :new_issue ,  :only  = >  :new 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  
							 
						 
					
						
							
								
									
										
										
										
											2008-12-09 16:54:46 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  before_filter  :find_issue ,  :only  = >  [ :show ,  :edit ,  :reply ] 
							 
						 
					
						
							
								
									
										
										
										
											2008-02-10 13:17:41 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  before_filter  :find_issues ,  :only  = >  [ :bulk_edit ,  :move ,  :destroy ] 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-05 15:41:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  before_filter  :find_project ,  :only  = >  [ :new ,  :update_form ,  :preview ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  before_filter  :authorize ,  :except  = >  [ :index ,  :changes ,  :gantt ,  :calendar ,  :preview ,  :update_form ,  :context_menu ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  before_filter  :find_optional_project ,  :only  = >  [ :index ,  :changes ,  :gantt ,  :calendar ] 
							 
						 
					
						
							
								
									
										
										
										
											2007-11-05 18:38:42 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  accept_key_auth  :index ,  :changes 
							 
						 
					
						
							
								
									
										
										
										
											2007-03-12 17:59:02 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-02-02 10:50:31 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  helper  :journals 
							 
						 
					
						
							
								
									
										
										
										
											2007-06-12 23:07:00 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  helper  :projects 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  include  ProjectsHelper    
							 
						 
					
						
							
								
									
										
										
										
											2007-03-12 17:59:02 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  helper  :custom_fields 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  include  CustomFieldsHelper 
							 
						 
					
						
							
								
									
										
										
										
											2007-05-05 13:22:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  helper  :issue_relations 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  include  IssueRelationsHelper 
							 
						 
					
						
							
								
									
										
										
										
											2007-05-13 19:43:35 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  helper  :watchers 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  include  WatchersHelper 
							 
						 
					
						
							
								
									
										
										
										
											2007-05-26 15:42:37 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  helper  :attachments 
							 
						 
					
						
							
								
									
										
										
										
											2007-08-31 17:02:44 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  include  AttachmentsHelper 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  helper  :queries 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  helper  :sort 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  include  SortHelper 
							 
						 
					
						
							
								
									
										
										
										
											2007-11-05 18:38:42 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  include  IssuesHelper 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-29 12:01:20 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  helper  :timelog 
							 
						 
					
						
							
								
									
										
										
										
											2009-01-04 12:03:39 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  include  Redmine :: Export :: PDF 
							 
						 
					
						
							
								
									
										
										
										
											2006-09-09 16:07:02 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2007-08-31 17:02:44 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  def  index 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    retrieve_query 
							 
						 
					
						
							
								
									
										
										
										
											2009-03-12 18:06:54 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    sort_init ( @query . sort_criteria . empty?  ?  [ [ 'id' ,  'desc' ] ]  :  @query . sort_criteria ) 
							 
						 
					
						
							
								
									
										
										
										
											2009-04-04 10:00:22 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    sort_update ( { 'id'  = >  " #{ Issue . table_name } .id " } . merge ( @query . available_columns . inject ( { } )  { | h ,  c |  h [ c . name . to_s ]  =  c . sortable ;  h } ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-24 10:03:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    
							 
						 
					
						
							
								
									
										
										
										
											2007-08-31 17:02:44 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  @query . valid? 
							 
						 
					
						
							
								
									
										
										
										
											2008-03-05 08:25:22 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      limit  =  per_page_option 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      respond_to  do  | format | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        format . html  {  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        format . atom  {  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        format . csv   {  limit  =  Setting . issues_export_limit . to_i  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        format . pdf   {  limit  =  Setting . issues_export_limit . to_i  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      end 
							 
						 
					
						
							
								
									
										
										
										
											2007-11-05 18:38:42 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      @issue_count  =  Issue . count ( :include  = >  [ :status ,  :project ] ,  :conditions  = >  @query . statement ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      @issue_pages  =  Paginator . new  self ,  @issue_count ,  limit ,  params [ 'page' ] 
							 
						 
					
						
							
								
									
										
										
										
											2009-04-26 13:09:14 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      @issues  =  Issue . find  :all ,  :order  = >  [ @query . group_by_sort_order ,  sort_clause ] . compact . join ( ',' ) , 
							 
						 
					
						
							
								
									
										
										
										
											2007-11-18 15:53:58 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                           :include  = >  [  :assigned_to ,  :status ,  :tracker ,  :project ,  :priority ,  :category ,  :fixed_version  ] , 
							 
						 
					
						
							
								
									
										
										
										
											2007-08-31 17:02:44 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                           :conditions  = >  @query . statement , 
							 
						 
					
						
							
								
									
										
										
										
											2007-11-05 18:38:42 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                           :limit   = >   limit , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                           :offset  = >   @issue_pages . current . offset 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      respond_to  do  | format | 
							 
						 
					
						
							
								
									
										
										
										
											2009-04-26 13:09:14 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        format . html  {  
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          if  @query . grouped? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            # Retrieve the issue count by group 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            @issue_count_by_group  =  begin 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              Issue . count ( :group  = >  @query . group_by ,  :include  = >  [ :status ,  :project ] ,  :conditions  = >  @query . statement ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            # Rails will raise an (unexpected) error if there's only a nil group value 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            rescue  ActiveRecord :: RecordNotFound 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              { nil  = >  @issue_count } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          render  :template  = >  'issues/index.rhtml' ,  :layout  = >  ! request . xhr? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-06 13:47:59 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        format . atom  {  render_feed ( @issues ,  :title  = >  " #{ @project  ||  Setting . app_title } :  #{ l ( :label_issue_plural ) } " )  } 
							 
						 
					
						
							
								
									
										
										
										
											2007-11-05 18:38:42 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        format . csv   {  send_data ( issues_to_csv ( @issues ,  @project ) . read ,  :type  = >  'text/csv; header=present' ,  :filename  = >  'export.csv' )  } 
							 
						 
					
						
							
								
									
										
										
										
											2009-04-26 13:09:14 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        format . pdf   {  send_data ( issues_to_pdf ( @issues ,  @project ,  @query ) ,  :type  = >  'application/pdf' ,  :filename  = >  'export.pdf' )  } 
							 
						 
					
						
							
								
									
										
										
										
											2007-11-05 18:38:42 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      # Send html if the query is not valid 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      render ( :template  = >  'issues/index.rhtml' ,  :layout  = >  ! request . xhr? ) 
							 
						 
					
						
							
								
									
										
										
										
											2007-08-31 17:02:44 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
									
										
										
										
											2008-03-30 12:29:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  rescue  ActiveRecord :: RecordNotFound 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    render_404 
							 
						 
					
						
							
								
									
										
										
										
											2007-11-05 18:38:42 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  def  changes 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    retrieve_query 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-24 10:03:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    sort_init  'id' ,  'desc' 
							 
						 
					
						
							
								
									
										
										
										
											2009-04-04 10:01:31 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    sort_update ( { 'id'  = >  " #{ Issue . table_name } .id " } . merge ( @query . available_columns . inject ( { } )  { | h ,  c |  h [ c . name . to_s ]  =  c . sortable ;  h } ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-24 10:03:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    
							 
						 
					
						
							
								
									
										
										
										
											2007-11-05 18:38:42 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  @query . valid? 
							 
						 
					
						
							
								
									
										
										
										
											2008-03-05 08:25:22 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      @journals  =  Journal . find  :all ,  :include  = >  [  :details ,  :user ,  { :issue  = >  [ :project ,  :author ,  :tracker ,  :status ] }  ] , 
							 
						 
					
						
							
								
									
										
										
										
											2007-11-05 18:38:42 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                                     :conditions  = >  @query . statement , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                     :limit  = >  25 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                     :order  = >  " #{ Journal . table_name } .created_on DESC " 
							 
						 
					
						
							
								
									
										
										
										
											2007-08-31 20:22:36 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
									
										
										
										
											2007-11-05 18:38:42 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    @title  =  ( @project  ?  @project . name  :  Setting . app_title )  +  " :  "  +  ( @query . new_record?  ?  l ( :label_changes_details )  :  @query . name ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    render  :layout  = >  false ,  :content_type  = >  'application/atom+xml' 
							 
						 
					
						
							
								
									
										
										
										
											2008-03-30 12:29:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  rescue  ActiveRecord :: RecordNotFound 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    render_404 
							 
						 
					
						
							
								
									
										
										
										
											2007-08-31 17:02:44 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  
							 
						 
					
						
							
								
									
										
										
										
											2006-09-09 16:07:02 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  def  show 
							 
						 
					
						
							
								
									
										
										
										
											2007-08-14 09:02:40 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    @journals  =  @issue . journals . find ( :all ,  :include  = >  [ :user ,  :details ] ,  :order  = >  " #{ Journal . table_name } .created_on ASC " ) 
							 
						 
					
						
							
								
									
										
										
										
											2008-03-05 15:41:54 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    @journals . each_with_index  { | j , i |  j . indice  =  i + 1 } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    @journals . reverse!  if  User . current . wants_comments_in_reverse_order? 
							 
						 
					
						
							
								
									
										
										
										
											2009-02-22 15:16:18 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    @changesets  =  @issue . changesets 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    @changesets . reverse!  if  User . current . wants_comments_in_reverse_order? 
							 
						 
					
						
							
								
									
										
										
										
											2008-02-09 16:11:18 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    @allowed_statuses  =  @issue . new_statuses_allowed_to ( User . current ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    @edit_allowed  =  User . current . allowed_to? ( :edit_issues ,  @project ) 
							 
						 
					
						
							
								
									
										
										
										
											2009-02-15 13:33:09 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    @priorities  =  Enumeration . priorities 
							 
						 
					
						
							
								
									
										
										
										
											2008-05-26 17:12:11 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    @time_entry  =  TimeEntry . new 
							 
						 
					
						
							
								
									
										
										
										
											2007-11-05 18:38:42 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    respond_to  do  | format | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      format . html  {  render  :template  = >  'issues/show.rhtml'  } 
							 
						 
					
						
							
								
									
										
										
										
											2008-03-05 08:25:22 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      format . atom  {  render  :action  = >  'changes' ,  :layout  = >  false ,  :content_type  = >  'application/atom+xml'  } 
							 
						 
					
						
							
								
									
										
										
										
											2009-01-04 12:03:39 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      format . pdf   {  send_data ( issue_to_pdf ( @issue ) ,  :type  = >  'application/pdf' ,  :filename  = >  " #{ @project . identifier } - #{ @issue . id } .pdf " )  } 
							 
						 
					
						
							
								
									
										
										
										
											2007-10-05 23:17:49 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
									
										
										
										
											2006-09-09 16:07:02 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  end 
							 
						 
					
						
							
								
									
										
										
										
											2006-06-28 18:11:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-01-20 11:30:57 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  # Add a new issue 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  # The new issue will be created from an existing one if copy_from parameter is given 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  def  new 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-27 20:13:56 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    @issue  =  Issue . new 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    @issue . copy_from ( params [ :copy_from ] )  if  params [ :copy_from ] 
							 
						 
					
						
							
								
									
										
										
										
											2008-01-20 11:30:57 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    @issue . project  =  @project 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-30 17:57:53 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # Tracker must be set before custom field values 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    @issue . tracker  || =  @project . trackers . find ( ( params [ :issue ]  &&  params [ :issue ] [ :tracker_id ] )  ||  params [ :tracker_id ]  ||  :first ) 
							 
						 
					
						
							
								
									
										
										
										
											2008-01-20 11:30:57 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  @issue . tracker . nil? 
							 
						 
					
						
							
								
									
										
										
										
											2009-03-01 10:15:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      render_error  'No tracker is associated to this project. Please check the Project settings.' 
							 
						 
					
						
							
								
									
										
										
										
											2008-01-20 11:30:57 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      return 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-22 19:21:02 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  params [ :issue ] . is_a? ( Hash ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      @issue . attributes  =  params [ :issue ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      @issue . watcher_user_ids  =  params [ :issue ] [ 'watcher_user_ids' ]  if  User . current . allowed_to? ( :add_issue_watchers ,  @project ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-27 20:13:56 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    @issue . author  =  User . current 
							 
						 
					
						
							
								
									
										
										
										
											2008-01-20 11:30:57 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    default_status  =  IssueStatus . default 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    unless  default_status 
							 
						 
					
						
							
								
									
										
										
										
											2009-03-01 10:15:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      render_error  'No default issue status is defined. Please check your configuration (Go to "Administration -> Issue statuses").' 
							 
						 
					
						
							
								
									
										
										
										
											2008-01-20 11:30:57 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      return 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    end     
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    @issue . status  =  default_status 
							 
						 
					
						
							
								
									
										
										
										
											2008-02-28 22:00:56 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    @allowed_statuses  =  ( [ default_status ]  +  default_status . find_new_statuses_allowed_to ( User . current . role_for_project ( @project ) ,  @issue . tracker ) ) . uniq 
							 
						 
					
						
							
								
									
										
										
										
											2008-01-20 11:30:57 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  request . get?  ||  request . xhr? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      @issue . start_date  || =  Date . today 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      requested_status  =  IssueStatus . find_by_id ( params [ :issue ] [ :status_id ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      # Check that the user is allowed to apply the requested status 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      @issue . status  =  ( @allowed_statuses . include?  requested_status )  ?  requested_status  :  default_status 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      if  @issue . save 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        attach_files ( @issue ,  params [ :attachments ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        flash [ :notice ]  =  l ( :notice_successful_create ) 
							 
						 
					
						
							
								
									
										
										
										
											2009-01-12 04:52:56 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        call_hook ( :controller_issues_new_after_save ,  {  :params  = >  params ,  :issue  = >  @issue } ) 
							 
						 
					
						
							
								
									
										
										
										
											2009-01-16 17:20:41 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        redirect_to ( params [ :continue ]  ?  {  :action  = >  'new' ,  :tracker_id  = >  @issue . tracker  }  : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                        {  :action  = >  'show' ,  :id  = >  @issue  } ) 
							 
						 
					
						
							
								
									
										
										
										
											2008-01-20 11:30:57 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      end 		
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    end 	
							 
						 
					
						
							
								
									
										
										
										
											2009-02-15 13:33:09 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    @priorities  =  Enumeration . priorities 
							 
						 
					
						
							
								
									
										
										
										
											2008-01-20 11:30:57 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    render  :layout  = >  ! request . xhr? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  
							 
						 
					
						
							
								
									
										
										
										
											2008-02-09 16:11:18 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  # Attributes that can be updated on workflow transition (without :edit permission) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  # TODO: make it configurable (at least per role) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  UPDATABLE_ATTRS_ON_TRANSITION  =  %w( status_id assigned_to_id fixed_version_id done_ratio )  unless  const_defined? ( :UPDATABLE_ATTRS_ON_TRANSITION ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  
							 
						 
					
						
							
								
									
										
										
										
											2007-03-12 17:59:02 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  def  edit 
							 
						 
					
						
							
								
									
										
										
										
											2008-02-09 16:11:18 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    @allowed_statuses  =  @issue . new_statuses_allowed_to ( User . current ) 
							 
						 
					
						
							
								
									
										
										
										
											2009-02-15 13:33:09 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    @priorities  =  Enumeration . priorities 
							 
						 
					
						
							
								
									
										
										
										
											2008-02-09 16:11:18 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    @edit_allowed  =  User . current . allowed_to? ( :edit_issues ,  @project ) 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-22 18:52:00 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    @time_entry  =  TimeEntry . new 
							 
						 
					
						
							
								
									
										
										
										
											2008-02-10 13:17:41 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    @notes  =  params [ :notes ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    journal  =  @issue . init_journal ( User . current ,  @notes ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # User can change issue attributes only if he has :edit permission or if a workflow transition is allowed 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( @edit_allowed  ||  ! @allowed_statuses . empty? )  &&  params [ :issue ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      attrs  =  params [ :issue ] . dup 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      attrs . delete_if  { | k , v |  ! UPDATABLE_ATTRS_ON_TRANSITION . include? ( k )  }  unless  @edit_allowed 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      attrs . delete ( :status_id )  unless  @allowed_statuses . detect  { | s |  s . id . to_s  ==  attrs [ :status_id ] . to_s } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      @issue . attributes  =  attrs 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-06-27 20:13:56 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  request . post? 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-14 14:10:47 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      @time_entry  =  TimeEntry . new ( :project  = >  @project ,  :issue  = >  @issue ,  :user  = >  User . current ,  :spent_on  = >  Date . today ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      @time_entry . attributes  =  params [ :time_entry ] 
							 
						 
					
						
							
								
									
										
										
										
											2008-01-06 17:06:14 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      attachments  =  attach_files ( @issue ,  params [ :attachments ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      attachments . each  { | a |  journal . details  <<  JournalDetail . new ( :property  = >  'attachment' ,  :prop_key  = >  a . id ,  :value  = >  a . filename ) } 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-03 23:18:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      call_hook ( :controller_issues_edit_before_save ,  {  :params  = >  params ,  :issue  = >  @issue ,  :time_entry  = >  @time_entry ,  :journal  = >  journal } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-06-29 12:16:58 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      if  ( @time_entry . hours . nil?  ||  @time_entry . valid? )  &&  @issue . save 
							 
						 
					
						
							
								
									
										
										
										
											2008-01-06 17:06:14 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        # Log spend time 
							 
						 
					
						
							
								
									
										
										
										
											2009-02-13 17:59:45 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  User . current . allowed_to? ( :log_time ,  @project ) 
							 
						 
					
						
							
								
									
										
										
										
											2008-01-06 17:06:14 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          @time_entry . save 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ! journal . new_record? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          # Only send notification if something was actually changed 
							 
						 
					
						
							
								
									
										
										
										
											2007-03-12 17:59:02 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          flash [ :notice ]  =  l ( :notice_successful_update ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        end 
							 
						 
					
						
							
								
									
										
										
										
											2009-01-12 04:52:56 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        call_hook ( :controller_issues_edit_after_save ,  {  :params  = >  params ,  :issue  = >  @issue ,  :time_entry  = >  @time_entry ,  :journal  = >  journal } ) 
							 
						 
					
						
							
								
									
										
										
										
											2008-01-06 17:06:14 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        redirect_to ( params [ :back_to ]  ||  { :action  = >  'show' ,  :id  = >  @issue } ) 
							 
						 
					
						
							
								
									
										
										
										
											2007-03-12 17:59:02 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      end 
							 
						 
					
						
							
								
									
										
										
										
											2008-01-06 17:06:14 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  rescue  ActiveRecord :: StaleObjectError 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Optimistic locking exception 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    flash . now [ :error ]  =  l ( :notice_locking_conflict ) 
							 
						 
					
						
							
								
									
										
										
										
											2006-09-09 16:07:02 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-05-30 17:42:25 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  def  reply 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    journal  =  Journal . find ( params [ :journal_id ] )  if  params [ :journal_id ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  journal 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      user  =  journal . user 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      text  =  journal . notes 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      user  =  @issue . author 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      text  =  @issue . description 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-07 11:42:37 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    content  =  " #{ ll ( Setting . default_language ,  :text_user_wrote ,  user ) } \\ n>  " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    content  <<  text . to_s . strip . gsub ( %r{ <pre>((.| \ s)*?)</pre> }m ,  '[...]' ) . gsub ( '"' ,  '\"' ) . gsub ( / ( \ r? \ n| \ r \ n?) / ,  " \\ n>  " )  +  " \\ n \\ n " 
							 
						 
					
						
							
								
									
										
										
										
											2008-05-30 17:42:25 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    render ( :update )  {  | page | 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-07 11:42:37 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      page . <<  " $('notes').value =  \" #{ content } \" ; " 
							 
						 
					
						
							
								
									
										
										
										
											2008-05-30 17:42:25 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      page . show  'update' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      page  <<  " Form.Element.focus('notes'); " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      page  <<  " Element.scrollTo('update'); " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      page  <<  " $('notes').scrollTop = $('notes').scrollHeight - $('notes').clientHeight; " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  
							 
						 
					
						
							
								
									
										
										
										
											2008-02-10 13:17:41 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  # Bulk edit a set of issues 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  def  bulk_edit 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  request . post? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      status  =  params [ :status_id ] . blank?  ?  nil  :  IssueStatus . find_by_id ( params [ :status_id ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      priority  =  params [ :priority_id ] . blank?  ?  nil  :  Enumeration . find_by_id ( params [ :priority_id ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2008-03-26 22:22:45 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      assigned_to  =  ( params [ :assigned_to_id ] . blank?  ||  params [ :assigned_to_id ]  ==  'none' )  ?  nil  :  User . find_by_id ( params [ :assigned_to_id ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      category  =  ( params [ :category_id ] . blank?  ||  params [ :category_id ]  ==  'none' )  ?  nil  :  @project . issue_categories . find_by_id ( params [ :category_id ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      fixed_version  =  ( params [ :fixed_version_id ] . blank?  ||  params [ :fixed_version_id ]  ==  'none' )  ?  nil  :  @project . versions . find_by_id ( params [ :fixed_version_id ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2009-01-25 16:04:28 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      custom_field_values  =  params [ :custom_field_values ]  ?  params [ :custom_field_values ] . reject  { | k , v |  v . blank? }  :  nil 
							 
						 
					
						
							
								
									
										
										
										
											2008-02-10 13:17:41 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      unsaved_issue_ids  =  [ ]       
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      @issues . each  do  | issue | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        journal  =  issue . init_journal ( User . current ,  params [ :notes ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        issue . priority  =  priority  if  priority 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        issue . assigned_to  =  assigned_to  if  assigned_to  ||  params [ :assigned_to_id ]  ==  'none' 
							 
						 
					
						
							
								
									
										
										
										
											2008-03-26 22:22:45 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        issue . category  =  category  if  category  ||  params [ :category_id ]  ==  'none' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        issue . fixed_version  =  fixed_version  if  fixed_version  ||  params [ :fixed_version_id ]  ==  'none' 
							 
						 
					
						
							
								
									
										
										
										
											2008-02-10 13:17:41 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        issue . start_date  =  params [ :start_date ]  unless  params [ :start_date ] . blank? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        issue . due_date  =  params [ :due_date ]  unless  params [ :due_date ] . blank? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        issue . done_ratio  =  params [ :done_ratio ]  unless  params [ :done_ratio ] . blank? 
							 
						 
					
						
							
								
									
										
										
										
											2009-01-25 16:04:28 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        issue . custom_field_values  =  custom_field_values  if  custom_field_values  &&  ! custom_field_values . empty? 
							 
						 
					
						
							
								
									
										
										
										
											2008-09-05 10:31:06 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        call_hook ( :controller_issues_bulk_edit_before_save ,  {  :params  = >  params ,  :issue  = >  issue  } ) 
							 
						 
					
						
							
								
									
										
										
										
											2008-02-10 13:17:41 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        # Don't save any change to the issue if the user is not authorized to apply the requested status 
							 
						 
					
						
							
								
									
										
										
										
											2009-03-28 00:38:57 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        unless  ( status . nil?  ||  ( issue . status . new_status_allowed_to? ( status ,  current_role ,  issue . tracker )  &&  issue . status  =  status ) )  &&  issue . save 
							 
						 
					
						
							
								
									
										
										
										
											2008-02-10 13:17:41 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          # Keep unsaved issue ids to display them in flash error 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          unsaved_issue_ids  <<  issue . id 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      if  unsaved_issue_ids . empty? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        flash [ :notice ]  =  l ( :notice_successful_update )  unless  @issues . empty? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      else 
							 
						 
					
						
							
								
									
										
										
										
											2009-02-21 11:04:50 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        flash [ :error ]  =  l ( :notice_failed_to_save_issues ,  :count  = >  unsaved_issue_ids . size , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                                         :total  = >  @issues . size , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                                         :ids  = >  '#'  +  unsaved_issue_ids . join ( ', #' ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2008-02-10 13:17:41 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      end 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-26 10:34:26 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      redirect_to ( params [ :back_to ]  ||  { :controller  = >  'issues' ,  :action  = >  'index' ,  :project_id  = >  @project } ) 
							 
						 
					
						
							
								
									
										
										
										
											2008-02-10 13:17:41 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      return 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Find potential statuses the user could be allowed to switch issues to 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    @available_statuses  =  Workflow . find ( :all ,  :include  = >  :new_status , 
							 
						 
					
						
							
								
									
										
										
										
											2008-09-28 08:41:17 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                                              :conditions  = >  { :role_id  = >  current_role . id } ) . collect ( & :new_status ) . compact . uniq . sort 
							 
						 
					
						
							
								
									
										
										
										
											2009-01-25 16:04:28 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    @custom_fields  =  @project . issue_custom_fields . select  { | f |  f . field_format  ==  'list' } 
							 
						 
					
						
							
								
									
										
										
										
											2008-02-10 13:17:41 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  def  move 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    @allowed_projects  =  [ ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # find projects to which the user is allowed to move the issue 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  User . current . admin? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      # admin is allowed to move issues to any active (visible) project 
							 
						 
					
						
							
								
									
										
										
										
											2009-01-25 13:52:40 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      @allowed_projects  =  Project . find ( :all ,  :conditions  = >  Project . visible_by ( User . current ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2008-02-10 13:17:41 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      User . current . memberships . each  { | m |  @allowed_projects  <<  m . project  if  m . role . allowed_to? ( :move_issues ) } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    @target_project  =  @allowed_projects . detect  { | p |  p . id . to_s  ==  params [ :new_project_id ] }  if  params [ :new_project_id ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    @target_project  || =  @project     
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    @trackers  =  @target_project . trackers 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  request . post? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      new_tracker  =  params [ :new_tracker_id ] . blank?  ?  nil  :  @target_project . trackers . find_by_id ( params [ :new_tracker_id ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      unsaved_issue_ids  =  [ ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      @issues . each  do  | issue | 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-19 18:52:20 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        issue . init_journal ( User . current ) 
							 
						 
					
						
							
								
									
										
										
										
											2009-01-25 13:12:56 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        unsaved_issue_ids  <<  issue . id  unless  issue . move_to ( @target_project ,  new_tracker ,  params [ :copy_options ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2008-02-10 13:17:41 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      if  unsaved_issue_ids . empty? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        flash [ :notice ]  =  l ( :notice_successful_update )  unless  @issues . empty? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      else 
							 
						 
					
						
							
								
									
										
										
										
											2009-02-21 11:04:50 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        flash [ :error ]  =  l ( :notice_failed_to_save_issues ,  :count  = >  unsaved_issue_ids . size , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                                         :total  = >  @issues . size , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                                         :ids  = >  '#'  +  unsaved_issue_ids . join ( ', #' ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2008-02-10 13:17:41 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      redirect_to  :controller  = >  'issues' ,  :action  = >  'index' ,  :project_id  = >  @project 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      return 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    render  :layout  = >  false  if  request . xhr? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  
							 
						 
					
						
							
								
									
										
										
										
											2006-09-09 16:07:02 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  def  destroy 
							 
						 
					
						
							
								
									
										
										
										
											2008-02-29 22:54:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    @hours  =  TimeEntry . sum ( :hours ,  :conditions  = >  [ 'issue_id IN (?)' ,  @issues ] ) . to_f 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  @hours  >  0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      case  params [ :todo ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      when  'destroy' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        # nothing to do 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      when  'nullify' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        TimeEntry . update_all ( 'issue_id = NULL' ,  [ 'issue_id IN (?)' ,  @issues ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      when  'reassign' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        reassign_to  =  @project . issues . find_by_id ( params [ :reassign_to_id ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  reassign_to . nil? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          flash . now [ :error ]  =  l ( :error_issue_not_found_in_project ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          return 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          TimeEntry . update_all ( " issue_id =  #{ reassign_to . id } " ,  [ 'issue_id IN (?)' ,  @issues ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        # display the destroy form 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
									
										
										
										
											2008-02-10 13:17:41 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    @issues . each ( & :destroy ) 
							 
						 
					
						
							
								
									
										
										
										
											2007-11-05 18:38:42 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    redirect_to  :action  = >  'index' ,  :project_id  = >  @project 
							 
						 
					
						
							
								
									
										
										
										
											2007-03-12 17:59:02 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  end 
							 
						 
					
						
							
								
									
										
										
										
											2007-10-28 10:55:59 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  
							 
						 
					
						
							
								
									
										
										
										
											2008-09-10 18:26:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  def  gantt 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    @gantt  =  Redmine :: Helpers :: Gantt . new ( params ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    retrieve_query 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  @query . valid? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      events  =  [ ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      # Issues that have start and due dates 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      events  +=  Issue . find ( :all ,  
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                           :order  = >  " start_date, due_date " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                           :include  = >  [ :tracker ,  :status ,  :assigned_to ,  :priority ,  :project ] ,  
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                           :conditions  = >  [ " ( #{ @query . statement } ) AND (((start_date>=? and start_date<=?) or (due_date>=? and due_date<=?) or (start_date<? and due_date>?)) and start_date is not null and due_date is not null) " ,  @gantt . date_from ,  @gantt . date_to ,  @gantt . date_from ,  @gantt . date_to ,  @gantt . date_from ,  @gantt . date_to ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                           ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      # Issues that don't have a due date but that are assigned to a version with a date 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      events  +=  Issue . find ( :all ,  
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                           :order  = >  " start_date, effective_date " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                           :include  = >  [ :tracker ,  :status ,  :assigned_to ,  :priority ,  :project ,  :fixed_version ] ,  
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                           :conditions  = >  [ " ( #{ @query . statement } ) AND (((start_date>=? and start_date<=?) or (effective_date>=? and effective_date<=?) or (start_date<? and effective_date>?)) and start_date is not null and due_date is null and effective_date is not null) " ,  @gantt . date_from ,  @gantt . date_to ,  @gantt . date_from ,  @gantt . date_to ,  @gantt . date_from ,  @gantt . date_to ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                           ) 
							 
						 
					
						
							
								
									
										
										
										
											2008-09-11 17:08:00 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      # Versions 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      events  +=  Version . find ( :all ,  :include  = >  :project , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                   :conditions  = >  [ " ( #{ @query . project_statement } ) AND effective_date BETWEEN ? AND ? " ,  @gantt . date_from ,  @gantt . date_to ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                   
							 
						 
					
						
							
								
									
										
										
										
											2008-09-10 18:26:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      @gantt . events  =  events 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    
							 
						 
					
						
							
								
									
										
										
										
											2009-04-25 09:05:31 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    basename  =  ( @project  ?  " #{ @project . identifier } - "  :  '' )  +  'gantt' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    
							 
						 
					
						
							
								
									
										
										
										
											2008-09-10 18:26:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    respond_to  do  | format | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      format . html  {  render  :template  = >  " issues/gantt.rhtml " ,  :layout  = >  ! request . xhr?  } 
							 
						 
					
						
							
								
									
										
										
										
											2009-04-25 09:05:31 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      format . png   {  send_data ( @gantt . to_image ,  :disposition  = >  'inline' ,  :type  = >  'image/png' ,  :filename  = >  " #{ basename } .png " )  }  if  @gantt . respond_to? ( 'to_image' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      format . pdf   {  send_data ( gantt_to_pdf ( @gantt ,  @project ) ,  :type  = >  'application/pdf' ,  :filename  = >  " #{ basename } .pdf " )  } 
							 
						 
					
						
							
								
									
										
										
										
											2008-09-10 18:26:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  
							 
						 
					
						
							
								
									
										
										
										
											2008-09-11 17:03:26 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  def  calendar 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  params [ :year ]  and  params [ :year ] . to_i  >  1900 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      @year  =  params [ :year ] . to_i 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      if  params [ :month ]  and  params [ :month ] . to_i  >  0  and  params [ :month ] . to_i  <  13 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        @month  =  params [ :month ] . to_i 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      end     
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    @year  || =  Date . today . year 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    @month  || =  Date . today . month 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    @calendar  =  Redmine :: Helpers :: Calendar . new ( Date . civil ( @year ,  @month ,  1 ) ,  current_language ,  :month ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    retrieve_query 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  @query . valid? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      events  =  [ ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      events  +=  Issue . find ( :all ,  
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                           :include  = >  [ :tracker ,  :status ,  :assigned_to ,  :priority ,  :project ] ,  
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                           :conditions  = >  [ " ( #{ @query . statement } ) AND ((start_date BETWEEN ? AND ?) OR (due_date BETWEEN ? AND ?)) " ,  @calendar . startdt ,  @calendar . enddt ,  @calendar . startdt ,  @calendar . enddt ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                           ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      events  +=  Version . find ( :all ,  :include  = >  :project , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                   :conditions  = >  [ " ( #{ @query . project_statement } ) AND effective_date BETWEEN ? AND ? " ,  @calendar . startdt ,  @calendar . enddt ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                     
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      @calendar . events  =  events 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    render  :layout  = >  false  if  request . xhr? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  
							 
						 
					
						
							
								
									
										
										
										
											2007-10-28 10:55:59 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  def  context_menu 
							 
						 
					
						
							
								
									
										
										
										
											2008-02-10 13:17:41 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    @issues  =  Issue . find_all_by_id ( params [ :ids ] ,  :include  = >  :project ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( @issues . size  ==  1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      @issue  =  @issues . first 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      @allowed_statuses  =  @issue . new_statuses_allowed_to ( User . current ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    projects  =  @issues . collect ( & :project ) . compact . uniq 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    @project  =  projects . first  if  projects . size  ==  1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    @can  =  { :edit  = >  ( @project  &&  User . current . allowed_to? ( :edit_issues ,  @project ) ) , 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-16 19:22:09 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            :log_time  = >  ( @project  &&  User . current . allowed_to? ( :log_time ,  @project ) ) , 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-26 10:34:26 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            :update  = >  ( @project  &&  ( User . current . allowed_to? ( :edit_issues ,  @project )  ||  ( User . current . allowed_to? ( :change_status ,  @project )  &&  @allowed_statuses  &&  ! @allowed_statuses . empty? ) ) ) , 
							 
						 
					
						
							
								
									
										
										
										
											2008-02-10 13:17:41 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            :move  = >  ( @project  &&  User . current . allowed_to? ( :move_issues ,  @project ) ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            :copy  = >  ( @issue  &&  @project . trackers . include? ( @issue . tracker )  &&  User . current . allowed_to? ( :add_issues ,  @project ) ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            :delete  = >  ( @project  &&  User . current . allowed_to? ( :delete_issues ,  @project ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-26 10:34:26 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  @project 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      @assignables  =  @project . assignable_users 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      @assignables  <<  @issue . assigned_to  if  @issue  &&  @issue . assigned_to  &&  ! @assignables . include? ( @issue . assigned_to ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    
							 
						 
					
						
							
								
									
										
										
										
											2009-02-15 13:33:09 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    @priorities  =  Enumeration . priorities . reverse 
							 
						 
					
						
							
								
									
										
										
										
											2007-10-28 10:55:59 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    @statuses  =  IssueStatus . find ( :all ,  :order  = >  'position' ) 
							 
						 
					
						
							
								
									
										
										
										
											2008-02-10 13:17:41 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    @back  =  request . env [ 'HTTP_REFERER' ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    
							 
						 
					
						
							
								
									
										
										
										
											2007-10-28 10:55:59 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    render  :layout  = >  false 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  end 
							 
						 
					
						
							
								
									
										
										
										
											2007-03-12 17:59:02 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-01-20 11:30:57 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  def  update_form 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    @issue  =  Issue . new ( params [ :issue ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    render  :action  = >  :new ,  :layout  = >  false 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  
							 
						 
					
						
							
								
									
										
										
										
											2007-10-06 08:54:05 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  def  preview 
							 
						 
					
						
							
								
									
										
										
										
											2008-04-24 17:35:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    @issue  =  @project . issues . find_by_id ( params [ :id ] )  unless  params [ :id ] . blank? 
							 
						 
					
						
							
								
									
										
										
										
											2008-04-09 17:52:41 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    @attachements  =  @issue . attachments  if  @issue 
							 
						 
					
						
							
								
									
										
										
										
											2008-02-09 16:11:18 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    @text  =  params [ :notes ]  ||  ( params [ :issue ]  ?  params [ :issue ] [ :description ]  :  nil ) 
							 
						 
					
						
							
								
									
										
										
										
											2007-10-06 08:54:05 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    render  :partial  = >  'common/preview' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  
							 
						 
					
						
							
								
									
										
										
										
											2007-03-12 17:59:02 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								private  
						 
					
						
							
								
									
										
										
										
											2008-01-20 11:30:57 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  def  find_issue 
							 
						 
					
						
							
								
									
										
										
										
											2007-03-12 17:59:02 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    @issue  =  Issue . find ( params [ :id ] ,  :include  = >  [ :project ,  :tracker ,  :status ,  :author ,  :priority ,  :category ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    @project  =  @issue . project 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  rescue  ActiveRecord :: RecordNotFound 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    render_404 
							 
						 
					
						
							
								
									
										
										
										
											2007-08-31 17:02:44 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  
							 
						 
					
						
							
								
									
										
										
										
											2008-02-10 13:17:41 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  # Filter for bulk operations 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  def  find_issues 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    @issues  =  Issue . find_all_by_id ( params [ :id ]  ||  params [ :ids ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    raise  ActiveRecord :: RecordNotFound  if  @issues . empty? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    projects  =  @issues . collect ( & :project ) . compact . uniq 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  projects . size  ==  1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      @project  =  projects . first 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      # TODO: let users bulk edit/move/destroy issues from different projects 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      render_error  'Can not bulk edit/move/destroy issues from different projects'  and  return  false 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  rescue  ActiveRecord :: RecordNotFound 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    render_404 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  
							 
						 
					
						
							
								
									
										
										
										
											2008-01-20 11:30:57 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  def  find_project 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    @project  =  Project . find ( params [ :project_id ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  rescue  ActiveRecord :: RecordNotFound 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    render_404 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  
							 
						 
					
						
							
								
									
										
										
										
											2007-11-05 18:38:42 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  def  find_optional_project 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-05 15:41:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    @project  =  Project . find ( params [ :project_id ] )  unless  params [ :project_id ] . blank? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    allowed  =  User . current . allowed_to? ( { :controller  = >  params [ :controller ] ,  :action  = >  params [ :action ] } ,  @project ,  :global  = >  true ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    allowed  ?  true  :  deny_access 
							 
						 
					
						
							
								
									
										
										
										
											2007-11-05 18:38:42 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  rescue  ActiveRecord :: RecordNotFound 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    render_404 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  
							 
						 
					
						
							
								
									
										
										
										
											2007-08-31 17:02:44 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  # Retrieve query from session or build a new query 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  def  retrieve_query 
							 
						 
					
						
							
								
									
										
										
										
											2008-02-02 10:54:31 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ! params [ :query_id ] . blank? 
							 
						 
					
						
							
								
									
										
										
										
											2008-03-30 12:29:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      cond  =  " project_id IS NULL " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      cond  <<  "  OR project_id =  #{ @project . id } "  if  @project 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      @query  =  Query . find ( params [ :query_id ] ,  :conditions  = >  cond ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      @query . project  =  @project 
							 
						 
					
						
							
								
									
										
										
										
											2007-12-30 10:46:09 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      session [ :query ]  =  { :id  = >  @query . id ,  :project_id  = >  @query . project_id } 
							 
						 
					
						
							
								
									
										
										
										
											2009-03-12 18:06:54 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      sort_clear 
							 
						 
					
						
							
								
									
										
										
										
											2007-11-05 18:38:42 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    else 
							 
						 
					
						
							
								
									
										
										
										
											2007-12-30 10:46:09 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      if  params [ :set_filter ]  ||  session [ :query ] . nil?  ||  session [ :query ] [ :project_id ]  !=  ( @project  ?  @project . id  :  nil ) 
							 
						 
					
						
							
								
									
										
										
										
											2007-11-05 18:38:42 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        # Give it a name, required to be valid 
							 
						 
					
						
							
								
									
										
										
										
											2007-11-20 15:40:16 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        @query  =  Query . new ( :name  = >  " _ " ) 
							 
						 
					
						
							
								
									
										
										
										
											2007-11-05 18:38:42 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        @query . project  =  @project 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  params [ :fields ]  and  params [ :fields ] . is_a?  Array 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          params [ :fields ] . each  do  | field | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            @query . add_filter ( field ,  params [ :operators ] [ field ] ,  params [ :values ] [ field ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          @query . available_filters . keys . each  do  | field | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            @query . add_short_filter ( field ,  params [ field ] )  if  params [ field ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          end 
							 
						 
					
						
							
								
									
										
										
										
											2007-08-31 17:02:44 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        end 
							 
						 
					
						
							
								
									
										
										
										
											2009-04-26 13:09:14 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        @query . group_by  =  params [ :group_by ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        session [ :query ]  =  { :project_id  = >  @query . project_id ,  :filters  = >  @query . filters ,  :group_by  = >  @query . group_by } 
							 
						 
					
						
							
								
									
										
										
										
											2007-08-31 17:02:44 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      else 
							 
						 
					
						
							
								
									
										
										
										
											2007-12-30 10:46:09 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        @query  =  Query . find_by_id ( session [ :query ] [ :id ] )  if  session [ :query ] [ :id ] 
							 
						 
					
						
							
								
									
										
										
										
											2009-04-26 13:09:14 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        @query  || =  Query . new ( :name  = >  " _ " ,  :project  = >  @project ,  :filters  = >  session [ :query ] [ :filters ] ,  :group_by  = >  session [ :query ] [ :group_by ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2008-04-14 19:21:58 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        @query . project  =  @project 
							 
						 
					
						
							
								
									
										
										
										
											2007-08-31 17:02:44 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  end 
							 
						 
					
						
							
								
									
										
										
										
											2006-06-28 18:11:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								end