2006-06-28 18:11:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								# redMine - project management software  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# Copyright (C) 2006  Jean-Philippe Lang  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								#  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# 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  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									layout  'base' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									before_filter  :find_project ,  :authorize 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									helper  :custom_fields 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									include  CustomFieldsHelper 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									def  show 
							 
						 
					
						
							
								
									
										
										
										
											2006-07-29 09:32:58 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    @status_options  =  @issue . status . workflows . find ( :all ,  :conditions  = >  [ " role_id=? and tracker_id=? " ,  self . logged_in_user . role_for_project ( @project . id ) ,  @issue . tracker . id ] ) . collect {  | w |  w . new_status  }  if  self . logged_in_user 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    @custom_values  =  @issue . custom_values . find ( :all ,  :include  = >  :custom_field ) 
							 
						 
					
						
							
								
									
										
										
										
											2006-06-28 18:11:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2006-07-29 09:32:58 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									def  edit 
							 
						 
					
						
							
								
									
										
										
										
											2006-06-28 18:11:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										@priorities  =  Enumeration :: get_values ( 'IPRI' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  request . get? 
							 
						 
					
						
							
								
									
										
										
										
											2006-07-29 09:32:58 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											@custom_values  =  @project . custom_fields_for_issues ( @issue . tracker ) . collect  {  | x |  @issue . custom_values . find_by_custom_field_id ( x . id )  ||  CustomValue . new ( :custom_field  = >  x ,  :customized  = >  @issue )  } 
							 
						 
					
						
							
								
									
										
										
										
											2006-06-28 18:11:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											# Retrieve custom fields and values 
							 
						 
					
						
							
								
									
										
										
										
											2006-07-29 09:32:58 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											@custom_values  =  @project . custom_fields_for_issues ( @issue . tracker ) . collect  {  | x |  CustomValue . new ( :custom_field  = >  x ,  :customized  = >  @issue ,  :value  = >  params [ " custom_fields " ] [ x . id . to_s ] )  } 
							 
						 
					
						
							
								
									
										
										
										
											2006-06-28 18:11:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											@issue . custom_values  =  @custom_values 
							 
						 
					
						
							
								
									
										
										
										
											2006-07-29 09:32:58 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											@issue . attributes  =  params [ :issue ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											if  @issue . save 
							 
						 
					
						
							
								
									
										
										
										
											2006-06-28 18:11:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
												flash [ :notice ]  =  'Issue was successfully updated.' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												redirect_to  :action  = >  'show' ,  :id  = >  @issue 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										end 		
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									def  change_status 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										@history  =  @issue . histories . build ( params [ :history ] ) 	
							 
						 
					
						
							
								
									
										
										
										
											2006-07-29 09:32:58 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    @status_options  =  @issue . status . workflows . find ( :all ,  :conditions  = >  [ " role_id=? and tracker_id=? " ,  self . logged_in_user . role_for_project ( @project . id ) ,  @issue . tracker . id ] ) . collect {  | w |  w . new_status  }  if  self . logged_in_user 
							 
						 
					
						
							
								
									
										
										
										
											2006-06-28 18:11:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  params [ :confirm ] 
							 
						 
					
						
							
								
									
										
										
										
											2006-07-29 09:32:58 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												@history . author_id  =  self . logged_in_user . id  if  self . logged_in_user 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									
							 
						 
					
						
							
								
									
										
										
										
											2006-06-28 18:11:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											if  @history . save 			
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												@issue . status  =  @history . status 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												@issue . fixed_version_id  =  ( params [ :issue ] [ :fixed_version_id ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												@issue . assigned_to_id  =  ( params [ :issue ] [ :assigned_to_id ] ) 	
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												if  @issue . save 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													flash [ :notice ]  =  'Issue was successfully updated.' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													Mailer . deliver_issue_change_status ( @issue )  if  Permission . find_by_controller_and_action ( @params [ :controller ] ,  @params [ :action ] ) . mail_enabled? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													redirect_to  :action  = >  'show' ,  :id  = >  @issue 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										end     
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    @assignable_to  =  @project . members . find ( :all ,  :include  = >  :user ) . collect {  | m |  m . user  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									def  destroy 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										@issue . destroy 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										redirect_to  :controller  = >  'projects' ,  :action  = >  'list_issues' ,  :id  = >  @project 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  def  add_attachment 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Save the attachment 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  params [ :attachment ] [ :file ] . size  >  0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      @attachment  =  @issue . attachments . build ( params [ :attachment ] )       
							 
						 
					
						
							
								
									
										
										
										
											2006-07-29 09:32:58 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      @attachment . author_id  =  self . logged_in_user . id  if  self . logged_in_user 
							 
						 
					
						
							
								
									
										
										
										
											2006-06-28 18:11:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								      @attachment . save 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    redirect_to  :action  = >  'show' ,  :id  = >  @issue 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  def  destroy_attachment 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    @issue . attachments . find ( params [ :attachment_id ] ) . destroy 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    redirect_to  :action  = >  'show' ,  :id  = >  @issue 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  end 
							 
						 
					
						
							
								
									
										
										
										
											2006-07-29 09:32:58 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  # Send the file in stream mode 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  def  download 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    @attachment  =  @issue . attachments . find ( params [ :attachment_id ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    send_file  @attachment . diskfile ,  :filename  = >  @attachment . filename 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2006-06-28 18:11:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								private  
						 
					
						
							
								
									
										
										
										
											2006-07-29 09:32:58 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  def  find_project 
							 
						 
					
						
							
								
									
										
										
										
											2006-06-28 18:11:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    @issue  =  Issue . find ( params [ :id ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2006-07-29 09:32:58 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    @project  =  @issue . project 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  end   
							 
						 
					
						
							
								
									
										
										
										
											2006-06-28 18:11:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								end