| 
									
										
										
										
											2009-10-25 11:10:35 +00:00
										 |  |  | # Redmine - project management software | 
					
						
							| 
									
										
										
										
											2011-03-16 17:29:30 +00:00
										 |  |  | # Copyright (C) 2006-2011  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. | 
					
						
							| 
									
										
										
										
											2011-08-31 12:02:48 +00:00
										 |  |  | # | 
					
						
							| 
									
										
										
										
											2007-03-12 17:59:02 +00:00
										 |  |  | # 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. | 
					
						
							| 
									
										
										
										
											2011-08-31 12:02:48 +00:00
										 |  |  | # | 
					
						
							| 
									
										
										
										
											2007-03-12 17:59:02 +00:00
										 |  |  | # 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 ProjectsController < ApplicationController | 
					
						
							| 
									
										
										
										
											2008-01-19 11:53:43 +00:00
										 |  |  |   menu_item :overview | 
					
						
							|  |  |  |   menu_item :roadmap, :only => :roadmap | 
					
						
							|  |  |  |   menu_item :settings, :only => :settings | 
					
						
							| 
									
										
										
										
											2011-08-31 12:02:48 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-07 15:00:27 +00:00
										 |  |  |   before_filter :find_project, :except => [ :index, :list, :new, :create, :copy ] | 
					
						
							|  |  |  |   before_filter :authorize, :except => [ :index, :list, :new, :create, :copy, :archive, :unarchive, :destroy] | 
					
						
							|  |  |  |   before_filter :authorize_global, :only => [:new, :create] | 
					
						
							| 
									
										
										
										
											2009-05-17 12:59:14 +00:00
										 |  |  |   before_filter :require_admin, :only => [ :copy, :archive, :unarchive, :destroy ] | 
					
						
							| 
									
										
										
										
											2011-07-09 08:56:07 +00:00
										 |  |  |   accept_rss_auth :index | 
					
						
							|  |  |  |   accept_api_auth :index, :show, :create, :update, :destroy | 
					
						
							| 
									
										
										
										
											2010-09-08 16:01:51 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   after_filter :only => [:create, :edit, :update, :archive, :unarchive, :destroy] do |controller| | 
					
						
							| 
									
										
										
										
											2009-01-27 17:27:50 +00:00
										 |  |  |     if controller.request.post? | 
					
						
							| 
									
										
										
										
											2011-12-12 18:05:13 +00:00
										 |  |  |       controller.send :expire_action, :controller => 'welcome', :action => 'robots' | 
					
						
							| 
									
										
										
										
											2009-01-27 17:27:50 +00:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2010-09-08 16:01:51 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-03-12 17:59:02 +00:00
										 |  |  |   helper :sort | 
					
						
							|  |  |  |   include SortHelper | 
					
						
							|  |  |  |   helper :custom_fields | 
					
						
							| 
									
										
										
										
											2011-08-31 12:02:48 +00:00
										 |  |  |   include CustomFieldsHelper | 
					
						
							| 
									
										
										
										
											2007-10-03 17:20:04 +00:00
										 |  |  |   helper :issues | 
					
						
							| 
									
										
										
										
											2007-03-12 17:59:02 +00:00
										 |  |  |   helper :queries | 
					
						
							|  |  |  |   include QueriesHelper | 
					
						
							| 
									
										
										
										
											2007-06-12 20:12:05 +00:00
										 |  |  |   helper :repositories | 
					
						
							|  |  |  |   include RepositoriesHelper | 
					
						
							| 
									
										
										
										
											2007-08-26 07:55:57 +00:00
										 |  |  |   include ProjectsHelper | 
					
						
							| 
									
										
										
										
											2011-08-31 12:02:48 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-09-14 19:55:51 +00:00
										 |  |  |   # Lists visible projects | 
					
						
							| 
									
										
										
										
											2008-05-26 20:10:32 +00:00
										 |  |  |   def index | 
					
						
							| 
									
										
										
										
											2008-05-27 16:49:18 +00:00
										 |  |  |     respond_to do |format| | 
					
						
							| 
									
										
										
										
											2011-08-31 12:02:48 +00:00
										 |  |  |       format.html { | 
					
						
							|  |  |  |         @projects = Project.visible.find(:all, :order => 'lft') | 
					
						
							| 
									
										
										
										
											2008-05-27 16:49:18 +00:00
										 |  |  |       } | 
					
						
							| 
									
										
										
										
											2010-12-03 12:06:14 +00:00
										 |  |  |       format.api  { | 
					
						
							| 
									
										
										
										
											2010-12-23 13:34:44 +00:00
										 |  |  |         @offset, @limit = api_offset_and_limit | 
					
						
							|  |  |  |         @project_count = Project.visible.count | 
					
						
							|  |  |  |         @projects = Project.visible.all(:offset => @offset, :limit => @limit, :order => 'lft') | 
					
						
							| 
									
										
										
										
											2010-01-14 20:00:17 +00:00
										 |  |  |       } | 
					
						
							| 
									
										
										
										
											2008-05-27 16:49:18 +00:00
										 |  |  |       format.atom { | 
					
						
							| 
									
										
										
										
											2009-01-24 11:31:15 +00:00
										 |  |  |         projects = Project.visible.find(:all, :order => 'created_on DESC', | 
					
						
							|  |  |  |                                               :limit => Setting.feeds_limit.to_i) | 
					
						
							|  |  |  |         render_feed(projects, :title => "#{Setting.app_title}: #{l(:label_project_latest)}") | 
					
						
							| 
									
										
										
										
											2008-05-27 16:49:18 +00:00
										 |  |  |       } | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2007-03-12 17:59:02 +00:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2011-08-31 12:02:48 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-07 15:00:27 +00:00
										 |  |  |   def new | 
					
						
							| 
									
										
										
										
											2008-06-27 20:13:56 +00:00
										 |  |  |     @issue_custom_fields = IssueCustomField.find(:all, :order => "#{CustomField.table_name}.position") | 
					
						
							| 
									
										
										
										
											2007-11-20 20:29:03 +00:00
										 |  |  |     @trackers = Tracker.all | 
					
						
							| 
									
										
										
										
											2007-03-12 17:59:02 +00:00
										 |  |  |     @project = Project.new(params[:project]) | 
					
						
							| 
									
										
										
										
											2010-09-06 14:53:08 +00:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-01-06 20:46:22 +00:00
										 |  |  |   verify :method => :post, :only => :create, :render => {:nothing => true, :status => :method_not_allowed } | 
					
						
							| 
									
										
										
										
											2010-09-06 14:53:08 +00:00
										 |  |  |   def create | 
					
						
							|  |  |  |     @issue_custom_fields = IssueCustomField.find(:all, :order => "#{CustomField.table_name}.position") | 
					
						
							|  |  |  |     @trackers = Tracker.all | 
					
						
							| 
									
										
										
										
											2010-12-12 13:19:07 +00:00
										 |  |  |     @project = Project.new | 
					
						
							|  |  |  |     @project.safe_attributes = params[:project] | 
					
						
							| 
									
										
										
										
											2010-09-06 14:53:08 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     if validate_parent_id && @project.save | 
					
						
							|  |  |  |       @project.set_allowed_parent!(params[:project]['parent_id']) if params[:project].has_key?('parent_id') | 
					
						
							|  |  |  |       # Add current user as a project member if he is not admin | 
					
						
							|  |  |  |       unless User.current.admin? | 
					
						
							|  |  |  |         r = Role.givable.find_by_id(Setting.new_project_user_role_id.to_i) || Role.givable.first | 
					
						
							|  |  |  |         m = Member.new(:user => User.current, :roles => [r]) | 
					
						
							|  |  |  |         @project.members << m | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |       respond_to do |format| | 
					
						
							| 
									
										
										
										
											2011-08-31 12:02:48 +00:00
										 |  |  |         format.html { | 
					
						
							| 
									
										
										
										
											2010-09-06 14:53:08 +00:00
										 |  |  |           flash[:notice] = l(:notice_successful_create) | 
					
						
							| 
									
										
										
										
											2011-07-21 15:51:58 +00:00
										 |  |  |           redirect_to(params[:continue] ? | 
					
						
							|  |  |  |             {:controller => 'projects', :action => 'new', :project => {:parent_id => @project.parent_id}.reject {|k,v| v.nil?}} : | 
					
						
							|  |  |  |             {:controller => 'projects', :action => 'settings', :id => @project} | 
					
						
							|  |  |  |           ) | 
					
						
							| 
									
										
										
										
											2010-09-06 14:53:08 +00:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2010-12-04 17:43:39 +00:00
										 |  |  |         format.api  { render :action => 'show', :status => :created, :location => url_for(:controller => 'projects', :action => 'show', :id => @project.id) } | 
					
						
							| 
									
										
										
										
											2010-09-06 14:53:08 +00:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2007-03-12 17:59:02 +00:00
										 |  |  |     else | 
					
						
							| 
									
										
										
										
											2010-09-06 14:53:08 +00:00
										 |  |  |       respond_to do |format| | 
					
						
							| 
									
										
										
										
											2010-09-07 15:00:27 +00:00
										 |  |  |         format.html { render :action => 'new' } | 
					
						
							| 
									
										
										
										
											2010-12-03 12:06:14 +00:00
										 |  |  |         format.api  { render_validation_errors(@project) } | 
					
						
							| 
									
										
										
										
											2009-05-17 12:59:14 +00:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2010-09-06 14:53:08 +00:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2011-08-31 12:02:48 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-03-12 17:59:02 +00:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2011-08-31 12:02:48 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-03 21:25:37 +00:00
										 |  |  |   def copy | 
					
						
							|  |  |  |     @issue_custom_fields = IssueCustomField.find(:all, :order => "#{CustomField.table_name}.position") | 
					
						
							|  |  |  |     @trackers = Tracker.all | 
					
						
							|  |  |  |     @root_projects = Project.find(:all, | 
					
						
							|  |  |  |                                   :conditions => "parent_id IS NULL AND status = #{Project::STATUS_ACTIVE}", | 
					
						
							|  |  |  |                                   :order => 'name') | 
					
						
							| 
									
										
										
										
											2009-10-25 11:10:35 +00:00
										 |  |  |     @source_project = Project.find(params[:id]) | 
					
						
							| 
									
										
										
										
											2009-05-03 21:25:37 +00:00
										 |  |  |     if request.get? | 
					
						
							| 
									
										
										
										
											2009-10-25 11:10:35 +00:00
										 |  |  |       @project = Project.copy_from(@source_project) | 
					
						
							| 
									
										
										
										
											2009-05-03 21:25:37 +00:00
										 |  |  |       if @project | 
					
						
							|  |  |  |         @project.identifier = Project.next_identifier if Setting.sequential_project_identifiers? | 
					
						
							|  |  |  |       else | 
					
						
							|  |  |  |         redirect_to :controller => 'admin', :action => 'projects' | 
					
						
							| 
									
										
										
										
											2011-08-31 12:02:48 +00:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2009-05-03 21:25:37 +00:00
										 |  |  |     else | 
					
						
							| 
									
										
										
										
											2010-03-21 11:17:29 +00:00
										 |  |  |       Mailer.with_deliveries(params[:notifications] == '1') do | 
					
						
							| 
									
										
										
										
											2010-12-12 13:19:07 +00:00
										 |  |  |         @project = Project.new | 
					
						
							|  |  |  |         @project.safe_attributes = params[:project] | 
					
						
							| 
									
										
										
										
											2010-03-21 11:17:29 +00:00
										 |  |  |         if validate_parent_id && @project.copy(@source_project, :only => params[:only]) | 
					
						
							|  |  |  |           @project.set_allowed_parent!(params[:project]['parent_id']) if params[:project].has_key?('parent_id') | 
					
						
							|  |  |  |           flash[:notice] = l(:notice_successful_create) | 
					
						
							| 
									
										
										
										
											2011-01-02 11:42:37 +00:00
										 |  |  |           redirect_to :controller => 'projects', :action => 'settings', :id => @project | 
					
						
							| 
									
										
										
										
											2010-03-21 11:17:29 +00:00
										 |  |  |         elsif !@project.new_record? | 
					
						
							|  |  |  |           # Project was created | 
					
						
							|  |  |  |           # But some objects were not copied due to validation failures | 
					
						
							|  |  |  |           # (eg. issues from disabled trackers) | 
					
						
							|  |  |  |           # TODO: inform about that | 
					
						
							| 
									
										
										
										
											2011-01-02 11:42:37 +00:00
										 |  |  |           redirect_to :controller => 'projects', :action => 'settings', :id => @project | 
					
						
							| 
									
										
										
										
											2010-03-21 11:17:29 +00:00
										 |  |  |         end | 
					
						
							| 
									
										
										
										
											2009-12-26 10:18:28 +00:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2009-10-29 18:51:10 +00:00
										 |  |  |     end | 
					
						
							|  |  |  |   rescue ActiveRecord::RecordNotFound | 
					
						
							|  |  |  |     redirect_to :controller => 'admin', :action => 'projects' | 
					
						
							| 
									
										
										
										
											2009-05-03 21:25:37 +00:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2007-03-12 17:59:02 +00:00
										 |  |  | 	 | 
					
						
							|  |  |  |   # Show @project | 
					
						
							|  |  |  |   def show | 
					
						
							| 
									
										
										
										
											2008-12-30 14:24:51 +00:00
										 |  |  |     if params[:jump] | 
					
						
							|  |  |  |       # try to redirect to the requested menu item | 
					
						
							|  |  |  |       redirect_to_project_menu_item(@project, params[:jump]) && return | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2011-08-31 12:02:48 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-12 19:04:52 +00:00
										 |  |  |     @users_by_role = @project.users_by_role | 
					
						
							| 
									
										
										
										
											2011-04-02 11:46:20 +00:00
										 |  |  |     @subprojects = @project.children.visible.all | 
					
						
							| 
									
										
										
										
											2007-03-15 22:11:02 +00:00
										 |  |  |     @news = @project.news.find(:all, :limit => 5, :include => [ :author, :project ], :order => "#{News.table_name}.created_on DESC") | 
					
						
							| 
									
										
										
										
											2008-02-28 21:57:03 +00:00
										 |  |  |     @trackers = @project.rolled_up_trackers | 
					
						
							| 
									
										
										
										
											2011-08-31 12:02:48 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-03-27 18:22:12 +00:00
										 |  |  |     cond = @project.project_condition(Setting.display_subprojects_issues?) | 
					
						
							| 
									
										
										
										
											2011-08-31 12:02:48 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-31 12:48:09 +00:00
										 |  |  |     @open_issues_by_tracker = Issue.visible.count(:group => :tracker, | 
					
						
							| 
									
										
										
										
											2008-02-28 21:57:03 +00:00
										 |  |  |                                             :include => [:project, :status, :tracker], | 
					
						
							| 
									
										
										
										
											2008-03-27 18:22:12 +00:00
										 |  |  |                                             :conditions => ["(#{cond}) AND #{IssueStatus.table_name}.is_closed=?", false]) | 
					
						
							| 
									
										
										
										
											2009-01-31 12:48:09 +00:00
										 |  |  |     @total_issues_by_tracker = Issue.visible.count(:group => :tracker, | 
					
						
							| 
									
										
										
										
											2008-02-28 21:57:03 +00:00
										 |  |  |                                             :include => [:project, :status, :tracker], | 
					
						
							| 
									
										
										
										
											2008-03-27 18:22:12 +00:00
										 |  |  |                                             :conditions => cond) | 
					
						
							| 
									
										
										
										
											2011-08-31 12:02:48 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-16 17:29:30 +00:00
										 |  |  |     if User.current.allowed_to?(:view_time_entries, @project) | 
					
						
							|  |  |  |       @total_hours = TimeEntry.visible.sum(:hours, :include => :project, :conditions => cond).to_f | 
					
						
							| 
									
										
										
										
											2008-02-27 20:50:19 +00:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2011-08-31 12:02:48 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-08-29 16:52:35 +00:00
										 |  |  |     @key = User.current.rss_key | 
					
						
							| 
									
										
										
										
											2011-08-31 12:02:48 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-14 20:00:17 +00:00
										 |  |  |     respond_to do |format| | 
					
						
							|  |  |  |       format.html | 
					
						
							| 
									
										
										
										
											2010-12-04 17:43:39 +00:00
										 |  |  |       format.api | 
					
						
							| 
									
										
										
										
											2010-01-14 20:00:17 +00:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2006-07-09 16:30:01 +00:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2007-03-12 17:59:02 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   def settings | 
					
						
							| 
									
										
										
										
											2008-06-27 20:13:56 +00:00
										 |  |  |     @issue_custom_fields = IssueCustomField.find(:all, :order => "#{CustomField.table_name}.position") | 
					
						
							| 
									
										
										
										
											2007-03-12 17:59:02 +00:00
										 |  |  |     @issue_category ||= IssueCategory.new | 
					
						
							|  |  |  |     @member ||= @project.members.new | 
					
						
							| 
									
										
										
										
											2007-11-20 20:29:03 +00:00
										 |  |  |     @trackers = Tracker.all | 
					
						
							| 
									
										
										
										
											2007-09-14 11:34:08 +00:00
										 |  |  |     @repository ||= @project.repository | 
					
						
							|  |  |  |     @wiki ||= @project.wiki | 
					
						
							| 
									
										
										
										
											2007-03-12 17:59:02 +00:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2011-08-31 12:02:48 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-03-12 17:59:02 +00:00
										 |  |  |   def edit | 
					
						
							| 
									
										
										
										
											2010-09-08 16:01:51 +00:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-01-06 20:46:22 +00:00
										 |  |  |   # TODO: convert to PUT only | 
					
						
							|  |  |  |   verify :method => [:post, :put], :only => :update, :render => {:nothing => true, :status => :method_not_allowed } | 
					
						
							| 
									
										
										
										
											2010-09-08 16:01:51 +00:00
										 |  |  |   def update | 
					
						
							| 
									
										
										
										
											2010-12-12 13:19:07 +00:00
										 |  |  |     @project.safe_attributes = params[:project] | 
					
						
							| 
									
										
										
										
											2010-09-08 16:01:51 +00:00
										 |  |  |     if validate_parent_id && @project.save | 
					
						
							|  |  |  |       @project.set_allowed_parent!(params[:project]['parent_id']) if params[:project].has_key?('parent_id') | 
					
						
							|  |  |  |       respond_to do |format| | 
					
						
							| 
									
										
										
										
											2011-08-31 12:02:48 +00:00
										 |  |  |         format.html { | 
					
						
							| 
									
										
										
										
											2010-09-08 16:01:51 +00:00
										 |  |  |           flash[:notice] = l(:notice_successful_update) | 
					
						
							|  |  |  |           redirect_to :action => 'settings', :id => @project | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2010-12-03 12:06:14 +00:00
										 |  |  |         format.api  { head :ok } | 
					
						
							| 
									
										
										
										
											2010-09-08 16:01:51 +00:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2010-01-14 20:00:17 +00:00
										 |  |  |     else | 
					
						
							| 
									
										
										
										
											2010-09-08 16:01:51 +00:00
										 |  |  |       respond_to do |format| | 
					
						
							| 
									
										
										
										
											2011-08-31 12:02:48 +00:00
										 |  |  |         format.html { | 
					
						
							| 
									
										
										
										
											2010-09-08 16:01:51 +00:00
										 |  |  |           settings | 
					
						
							|  |  |  |           render :action => 'settings' | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2010-12-03 12:06:14 +00:00
										 |  |  |         format.api  { render_validation_errors(@project) } | 
					
						
							| 
									
										
										
										
											2007-03-12 17:59:02 +00:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2006-07-09 16:30:01 +00:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2007-03-12 17:59:02 +00:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2011-01-06 20:57:17 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   verify :method => :post, :only => :modules, :render => {:nothing => true, :status => :method_not_allowed } | 
					
						
							| 
									
										
										
										
											2007-09-14 11:34:08 +00:00
										 |  |  |   def modules | 
					
						
							| 
									
										
										
										
											2011-01-06 20:57:17 +00:00
										 |  |  |     @project.enabled_module_names = params[:enabled_module_names] | 
					
						
							| 
									
										
										
										
											2010-03-12 13:51:00 +00:00
										 |  |  |     flash[:notice] = l(:notice_successful_update) | 
					
						
							| 
									
										
										
										
											2007-09-14 11:34:08 +00:00
										 |  |  |     redirect_to :action => 'settings', :id => @project, :tab => 'modules' | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2007-03-12 17:59:02 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-05-27 17:42:04 +00:00
										 |  |  |   def archive | 
					
						
							| 
									
										
										
										
											2009-12-06 10:28:20 +00:00
										 |  |  |     if request.post? | 
					
						
							|  |  |  |       unless @project.archive | 
					
						
							|  |  |  |         flash[:error] = l(:error_can_not_archive_project) | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2009-07-04 13:14:28 +00:00
										 |  |  |     redirect_to(url_for(:controller => 'admin', :action => 'projects', :status => params[:status])) | 
					
						
							| 
									
										
										
										
											2007-05-27 17:42:04 +00:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2011-08-31 12:02:48 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-05-27 17:42:04 +00:00
										 |  |  |   def unarchive | 
					
						
							|  |  |  |     @project.unarchive if request.post? && !@project.active? | 
					
						
							| 
									
										
										
										
											2009-07-04 13:14:28 +00:00
										 |  |  |     redirect_to(url_for(:controller => 'admin', :action => 'projects', :status => params[:status])) | 
					
						
							| 
									
										
										
										
											2007-05-27 17:42:04 +00:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2011-08-31 12:02:48 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-10 09:32:41 +00:00
										 |  |  |   verify :method => :delete, :only => :destroy, :render => {:nothing => true, :status => :method_not_allowed } | 
					
						
							| 
									
										
										
										
											2006-07-29 09:32:58 +00:00
										 |  |  |   # Delete @project | 
					
						
							| 
									
										
										
										
											2007-03-12 17:59:02 +00:00
										 |  |  |   def destroy | 
					
						
							| 
									
										
										
										
											2007-05-27 17:42:04 +00:00
										 |  |  |     @project_to_destroy = @project | 
					
						
							| 
									
										
										
										
											2011-12-10 09:32:41 +00:00
										 |  |  |     if api_request? || params[:confirm] | 
					
						
							|  |  |  |       @project_to_destroy.destroy | 
					
						
							|  |  |  |       respond_to do |format| | 
					
						
							|  |  |  |         format.html { redirect_to :controller => 'admin', :action => 'projects' } | 
					
						
							|  |  |  |         format.api  { head :ok } | 
					
						
							| 
									
										
										
										
											2010-01-14 20:00:17 +00:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2007-03-12 17:59:02 +00:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2007-05-27 17:42:04 +00:00
										 |  |  |     # hide project in layout | 
					
						
							|  |  |  |     @project = nil | 
					
						
							| 
									
										
										
										
											2007-03-12 17:59:02 +00:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | private | 
					
						
							| 
									
										
										
										
											2008-03-11 19:33:38 +00:00
										 |  |  |   def find_optional_project | 
					
						
							|  |  |  |     return true unless params[:id] | 
					
						
							|  |  |  |     @project = Project.find(params[:id]) | 
					
						
							|  |  |  |     authorize | 
					
						
							|  |  |  |   rescue ActiveRecord::RecordNotFound | 
					
						
							|  |  |  |     render_404 | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-12-24 16:18:15 +00:00
										 |  |  |   # Validates parent_id param according to user's permissions | 
					
						
							|  |  |  |   # TODO: move it to Project model in a validation that depends on User.current | 
					
						
							|  |  |  |   def validate_parent_id | 
					
						
							|  |  |  |     return true if User.current.admin? | 
					
						
							|  |  |  |     parent_id = params[:project] && params[:project][:parent_id] | 
					
						
							|  |  |  |     if parent_id || @project.new_record? | 
					
						
							|  |  |  |       parent = parent_id.blank? ? nil : Project.find_by_id(parent_id.to_i) | 
					
						
							|  |  |  |       unless @project.allowed_parents.include?(parent) | 
					
						
							|  |  |  |         @project.errors.add :parent_id, :invalid | 
					
						
							|  |  |  |         return false | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |     true | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2006-06-28 18:11:03 +00:00
										 |  |  | end |