##// END OF EJS Templates
When copying issues, let the status be changed to default or left unchanged....
When copying issues, let the status be changed to default or left unchanged. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9404 e93f8b46-1217-0410-a6f0-8f06a7374b81

File last commit:

r9015:0ee1de568697
r9270:09375960d69d
Show More
projects_controller.rb
257 lines | 9.3 KiB | text/x-ruby | RubyLexer
/ app / controllers / projects_controller.rb
Jean-Philippe Lang
Display stats about objects that can be copied....
r2861 # Redmine - project management software
Jean-Philippe Lang
Replaces TimeEntry.visible_by with a visible scope....
r5029 # Copyright (C) 2006-2011 Jean-Philippe Lang
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 #
# 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.
Toshi MARUYAMA
remove trailing white-spaces from app/controllers/projects_controller.rb....
r6773 #
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 # 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.
Toshi MARUYAMA
remove trailing white-spaces from app/controllers/projects_controller.rb....
r6773 #
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 # 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
Jean-Philippe Lang
Highlight the current item of the main menu....
r1062 menu_item :overview
menu_item :roadmap, :only => :roadmap
menu_item :settings, :only => :settings
Toshi MARUYAMA
remove trailing white-spaces from app/controllers/projects_controller.rb....
r6773
Eric Davis
Refactor: rename method ProjectsController#add to ProjectsController#new...
r3955 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]
Jean-Philippe Lang
Ability to allow non-admin users to create projects (#1007)....
r2651 before_filter :require_admin, :only => [ :copy, :archive, :unarchive, :destroy ]
Jean-Philippe Lang
Separation of RSS/API auth actions....
r6077 accept_rss_auth :index
accept_api_auth :index, :show, :create, :update, :destroy
Eric Davis
Refactor: split method ProjectsController#edit to ProjectsController#update....
r3956
after_filter :only => [:create, :edit, :update, :archive, :unarchive, :destroy] do |controller|
Jean-Philippe Lang
Replaces the obsolete robots.txt with a cached action (#2491)....
r2317 if controller.request.post?
Jean-Philippe Lang
Fixed error on project creation due to unrecognized route....
r8072 controller.send :expire_action, :controller => 'welcome', :action => 'robots'
Jean-Philippe Lang
Replaces the obsolete robots.txt with a cached action (#2491)....
r2317 end
end
Eric Davis
Refactor: split method ProjectsController#edit to ProjectsController#update....
r3956
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 helper :sort
include SortHelper
helper :custom_fields
Toshi MARUYAMA
remove trailing white-spaces from app/controllers/projects_controller.rb....
r6773 include CustomFieldsHelper
Jean-Philippe Lang
Performance improvement on calendar and gantt (about 45% on gantt for large number of issues)....
r783 helper :issues
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 helper :queries
include QueriesHelper
Jean-Philippe Lang
Added basic support for CVS and Mercurial SCMs....
r556 helper :repositories
include RepositoriesHelper
Jean-Philippe Lang
Gantt chart can now be exported to a graphic file (png)....
r660 include ProjectsHelper
Toshi MARUYAMA
remove trailing white-spaces from app/controllers/projects_controller.rb....
r6773
Jean-Philippe Lang
Main project list now displays root projects with their subprojects....
r718 # Lists visible projects
Jean-Philippe Lang
Moved ProjectsController#list to ProjectsController#index....
r1450 def index
Jean-Philippe Lang
Adds new projects atom feed (#1290)....
r1451 respond_to do |format|
Toshi MARUYAMA
remove trailing white-spaces from app/controllers/projects_controller.rb....
r6773 format.html {
@projects = Project.visible.find(:all, :order => 'lft')
Jean-Philippe Lang
Adds new projects atom feed (#1290)....
r1451 }
Jean-Philippe Lang
Converts ProjectsController to use the new API template system....
r4342 format.api {
Jean-Philippe Lang
Makes /projects API accept same pagination parameters as other API collection resources....
r4458 @offset, @limit = api_offset_and_limit
@project_count = Project.visible.count
@projects = Project.visible.all(:offset => @offset, :limit => @limit, :order => 'lft')
Jean-Philippe Lang
XML REST API for Projects (#296)....
r3199 }
Jean-Philippe Lang
Adds new projects atom feed (#1290)....
r1451 format.atom {
Jean-Philippe Lang
Merged nested projects branch. Removes limit on subproject nesting (#594)....
r2302 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)}")
Jean-Philippe Lang
Adds new projects atom feed (#1290)....
r1451 }
end
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
Toshi MARUYAMA
remove trailing white-spaces from app/controllers/projects_controller.rb....
r6773
Eric Davis
Refactor: rename method ProjectsController#add to ProjectsController#new...
r3955 def new
Jean-Philippe Lang
Custom fields refactoring: most of code moved from controllers to models (using new module ActsAsCustomizable)....
r1578 @issue_custom_fields = IssueCustomField.find(:all, :order => "#{CustomField.table_name}.position")
Jean-Philippe Lang
Added per-project tracker selection. Trackers can be selected on project settings....
r907 @trackers = Tracker.all
Jean-Philippe Lang
Use safe_attributes= just like in #create....
r9015 @project = Project.new
@project.safe_attributes = params[:project]
Eric Davis
Refactor: split ProjectsController#add into #add (GET) and #create (POST)....
r3953 end
def create
@issue_custom_fields = IssueCustomField.find(:all, :order => "#{CustomField.table_name}.position")
@trackers = Tracker.all
Jean-Philippe Lang
Declare safe attributes for User and Projects models....
r4378 @project = Project.new
@project.safe_attributes = params[:project]
Eric Davis
Refactor: split ProjectsController#add into #add (GET) and #create (POST)....
r3953
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|
Toshi MARUYAMA
remove trailing white-spaces from app/controllers/projects_controller.rb....
r6773 format.html {
Eric Davis
Refactor: split ProjectsController#add into #add (GET) and #create (POST)....
r3953 flash[:notice] = l(:notice_successful_create)
Jean-Philippe Lang
Adds a 'Create and continue' button on project form....
r6183 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}
)
Eric Davis
Refactor: split ProjectsController#add into #add (GET) and #create (POST)....
r3953 }
Jean-Philippe Lang
Adds a pseudo format to api template names and overrides ActionController#default_template so that api templates are chosen automatically....
r4352 format.api { render :action => 'show', :status => :created, :location => url_for(:controller => 'projects', :action => 'show', :id => @project.id) }
Eric Davis
Refactor: split ProjectsController#add into #add (GET) and #create (POST)....
r3953 end
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 else
Eric Davis
Refactor: split ProjectsController#add into #add (GET) and #create (POST)....
r3953 respond_to do |format|
Eric Davis
Refactor: rename method ProjectsController#add to ProjectsController#new...
r3955 format.html { render :action => 'new' }
Jean-Philippe Lang
Converts ProjectsController to use the new API template system....
r4342 format.api { render_validation_errors(@project) }
Jean-Philippe Lang
Ability to allow non-admin users to create projects (#1007)....
r2651 end
Eric Davis
Refactor: split ProjectsController#add into #add (GET) and #create (POST)....
r3953 end
Toshi MARUYAMA
remove trailing white-spaces from app/controllers/projects_controller.rb....
r6773
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
Toshi MARUYAMA
remove trailing white-spaces from app/controllers/projects_controller.rb....
r6773
Eric Davis
Added the ability to copy a project in the Project Administration panel....
r2608 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')
Jean-Philippe Lang
Display stats about objects that can be copied....
r2861 @source_project = Project.find(params[:id])
Eric Davis
Added the ability to copy a project in the Project Administration panel....
r2608 if request.get?
Jean-Philippe Lang
Display stats about objects that can be copied....
r2861 @project = Project.copy_from(@source_project)
Eric Davis
Added the ability to copy a project in the Project Administration panel....
r2608 if @project
@project.identifier = Project.next_identifier if Setting.sequential_project_identifiers?
else
redirect_to :controller => 'admin', :action => 'projects'
Toshi MARUYAMA
remove trailing white-spaces from app/controllers/projects_controller.rb....
r6773 end
Eric Davis
Added the ability to copy a project in the Project Administration panel....
r2608 else
Jean-Philippe Lang
Adds an option to enable/disable email notifications during a project copy (#4672)....
r3494 Mailer.with_deliveries(params[:notifications] == '1') do
Jean-Philippe Lang
Declare safe attributes for User and Projects models....
r4378 @project = Project.new
@project.safe_attributes = params[:project]
Jean-Philippe Lang
Adds an option to enable/disable email notifications during a project copy (#4672)....
r3494 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)
Jean-Philippe Lang
Fixed: should redirect to the new project when copying a project....
r4496 redirect_to :controller => 'projects', :action => 'settings', :id => @project
Jean-Philippe Lang
Adds an option to enable/disable email notifications during a project copy (#4672)....
r3494 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
Jean-Philippe Lang
Fixed: should redirect to the new project when copying a project....
r4496 redirect_to :controller => 'projects', :action => 'settings', :id => @project
Jean-Philippe Lang
Adds an option to enable/disable email notifications during a project copy (#4672)....
r3494 end
Jean-Philippe Lang
Do not display the copy form when project copy is created....
r3128 end
Jean-Philippe Lang
Fixed a test failure....
r2878 end
rescue ActiveRecord::RecordNotFound
redirect_to :controller => 'admin', :action => 'projects'
Eric Davis
Added the ability to copy a project in the Project Administration panel....
r2608 end
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330
# Show @project
def show
Jean-Philippe Lang
Jump to the current tab when using the project quick-jump combo (#2364)....
r2208 if params[:jump]
# try to redirect to the requested menu item
redirect_to_project_menu_item(@project, params[:jump]) && return
end
Toshi MARUYAMA
remove trailing white-spaces from app/controllers/projects_controller.rb....
r6773
Jean-Philippe Lang
Display all users roles on project overview (#3339)....
r2635 @users_by_role = @project.users_by_role
Jean-Philippe Lang
Skip a count(*) SQL query....
r5174 @subprojects = @project.children.visible.all
Jean-Philippe Lang
fixed #9308 table_name pre/suffix support...
r334 @news = @project.news.find(:all, :limit => 5, :include => [ :author, :project ], :order => "#{News.table_name}.created_on DESC")
Jean-Philippe Lang
Include subprojects on the issue list, calendar and gantt by default....
r1164 @trackers = @project.rolled_up_trackers
Toshi MARUYAMA
remove trailing white-spaces from app/controllers/projects_controller.rb....
r6773
Jean-Philippe Lang
If 'Display subprojects issues on main projects' is set to false:...
r1283 cond = @project.project_condition(Setting.display_subprojects_issues?)
Toshi MARUYAMA
remove trailing white-spaces from app/controllers/projects_controller.rb....
r6773
Jean-Philippe Lang
Removes Issue.visible_by...
r2340 @open_issues_by_tracker = Issue.visible.count(:group => :tracker,
Jean-Philippe Lang
Include subprojects on the issue list, calendar and gantt by default....
r1164 :include => [:project, :status, :tracker],
Jean-Philippe Lang
If 'Display subprojects issues on main projects' is set to false:...
r1283 :conditions => ["(#{cond}) AND #{IssueStatus.table_name}.is_closed=?", false])
Jean-Philippe Lang
Removes Issue.visible_by...
r2340 @total_issues_by_tracker = Issue.visible.count(:group => :tracker,
Jean-Philippe Lang
Include subprojects on the issue list, calendar and gantt by default....
r1164 :include => [:project, :status, :tracker],
Jean-Philippe Lang
If 'Display subprojects issues on main projects' is set to false:...
r1283 :conditions => cond)
Toshi MARUYAMA
remove trailing white-spaces from app/controllers/projects_controller.rb....
r6773
Jean-Philippe Lang
Replaces TimeEntry.visible_by with a visible scope....
r5029 if User.current.allowed_to?(:view_time_entries, @project)
@total_hours = TimeEntry.visible.sum(:hours, :include => :project, :conditions => cond).to_f
Jean-Philippe Lang
Propagates time tracking to the parent project (closes #433). Time report enhancements....
r1162 end
Toshi MARUYAMA
remove trailing white-spaces from app/controllers/projects_controller.rb....
r6773
Jean-Philippe Lang
Merged 0.6 branch into trunk....
r663 @key = User.current.rss_key
Toshi MARUYAMA
remove trailing white-spaces from app/controllers/projects_controller.rb....
r6773
Jean-Philippe Lang
XML REST API for Projects (#296)....
r3199 respond_to do |format|
format.html
Jean-Philippe Lang
Adds a pseudo format to api template names and overrides ActionController#default_template so that api templates are chosen automatically....
r4352 format.api
Jean-Philippe Lang
XML REST API for Projects (#296)....
r3199 end
Jean-Philippe Lang
v0.2.0...
r5 end
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330
def settings
Jean-Philippe Lang
Custom fields refactoring: most of code moved from controllers to models (using new module ActsAsCustomizable)....
r1578 @issue_custom_fields = IssueCustomField.find(:all, :order => "#{CustomField.table_name}.position")
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 @issue_category ||= IssueCategory.new
@member ||= @project.members.new
Jean-Philippe Lang
Added per-project tracker selection. Trackers can be selected on project settings....
r907 @trackers = Tracker.all
Jean-Philippe Lang
Added project module concept....
r714 @wiki ||= @project.wiki
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
Toshi MARUYAMA
remove trailing white-spaces from app/controllers/projects_controller.rb....
r6773
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 def edit
Eric Davis
Refactor: split method ProjectsController#edit to ProjectsController#update....
r3956 end
def update
Jean-Philippe Lang
Declare safe attributes for User and Projects models....
r4378 @project.safe_attributes = params[:project]
Eric Davis
Refactor: split method ProjectsController#edit to ProjectsController#update....
r3956 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|
Toshi MARUYAMA
remove trailing white-spaces from app/controllers/projects_controller.rb....
r6773 format.html {
Eric Davis
Refactor: split method ProjectsController#edit to ProjectsController#update....
r3956 flash[:notice] = l(:notice_successful_update)
redirect_to :action => 'settings', :id => @project
}
Jean-Philippe Lang
Converts ProjectsController to use the new API template system....
r4342 format.api { head :ok }
Eric Davis
Refactor: split method ProjectsController#edit to ProjectsController#update....
r3956 end
Jean-Philippe Lang
XML REST API for Projects (#296)....
r3199 else
Eric Davis
Refactor: split method ProjectsController#edit to ProjectsController#update....
r3956 respond_to do |format|
Toshi MARUYAMA
remove trailing white-spaces from app/controllers/projects_controller.rb....
r6773 format.html {
Eric Davis
Refactor: split method ProjectsController#edit to ProjectsController#update....
r3956 settings
render :action => 'settings'
}
Jean-Philippe Lang
Converts ProjectsController to use the new API template system....
r4342 format.api { render_validation_errors(@project) }
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
Jean-Philippe Lang
v0.2.0...
r5 end
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
Jean-Philippe Lang
Changes ProjectsController#modules param name and add tests....
r4527
Jean-Philippe Lang
Added project module concept....
r714 def modules
Jean-Philippe Lang
Changes ProjectsController#modules param name and add tests....
r4527 @project.enabled_module_names = params[:enabled_module_names]
Jean-Philippe Lang
Adds missing flash messages on project settings (#5043)....
r3451 flash[:notice] = l(:notice_successful_update)
Jean-Philippe Lang
Added project module concept....
r714 redirect_to :action => 'settings', :id => @project, :tab => 'modules'
end
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330
Jean-Philippe Lang
Added the ability to archive projects:...
r546 def archive
Jean-Philippe Lang
Version sharing (#465) + optional inclusion of subprojects in the roadmap view (#2666)....
r3009 if request.post?
unless @project.archive
flash[:error] = l(:error_can_not_archive_project)
end
end
Jean-Philippe Lang
Keep status filter on the projects list when un/archiving a project (#3530)....
r2706 redirect_to(url_for(:controller => 'admin', :action => 'projects', :status => params[:status]))
Jean-Philippe Lang
Added the ability to archive projects:...
r546 end
Toshi MARUYAMA
remove trailing white-spaces from app/controllers/projects_controller.rb....
r6773
Jean-Philippe Lang
Added the ability to archive projects:...
r546 def unarchive
@project.unarchive if request.post? && !@project.active?
Jean-Philippe Lang
Keep status filter on the projects list when un/archiving a project (#3530)....
r2706 redirect_to(url_for(:controller => 'admin', :action => 'projects', :status => params[:status]))
Jean-Philippe Lang
Added the ability to archive projects:...
r546 end
Toshi MARUYAMA
remove trailing white-spaces from app/controllers/projects_controller.rb....
r6773
Jean-Philippe Lang
0.3 unstable...
r10 # Delete @project
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 def destroy
Jean-Philippe Lang
Added the ability to archive projects:...
r546 @project_to_destroy = @project
Jean-Philippe Lang
Changed ProjectsController#destroy to DELETE only....
r8032 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 }
Jean-Philippe Lang
XML REST API for Projects (#296)....
r3199 end
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
Jean-Philippe Lang
Added the ability to archive projects:...
r546 # hide project in layout
@project = nil
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
Jean-Philippe Lang
Removed dead code....
r8826 private
Jean-Philippe Lang
Activity enhancements:...
r1213
Jean-Philippe Lang
Adds a 'Add subprojects' permission....
r3124 # 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
Jean-Philippe Lang
Initial commit...
r2 end