Mercurial > hg > soundsoftware-site
comparison app/controllers/projects_controller.rb @ 1295:622f24f53b42 redmine-2.3
Update to Redmine SVN revision 11972 on 2.3-stable branch
author | Chris Cannam |
---|---|
date | Fri, 14 Jun 2013 09:02:21 +0100 |
parents | 433d4f72a19b |
children | 4f746d8966dd |
comparison
equal
deleted
inserted
replaced
1294:3e4c3460b6ca | 1295:622f24f53b42 |
---|---|
1 # Redmine - project management software | 1 # Redmine - project management software |
2 # Copyright (C) 2006-2012 Jean-Philippe Lang | 2 # Copyright (C) 2006-2013 Jean-Philippe Lang |
3 # | 3 # |
4 # This program is free software; you can redistribute it and/or | 4 # This program is free software; you can redistribute it and/or |
5 # modify it under the terms of the GNU General Public License | 5 # modify it under the terms of the GNU General Public License |
6 # as published by the Free Software Foundation; either version 2 | 6 # as published by the Free Software Foundation; either version 2 |
7 # of the License, or (at your option) any later version. | 7 # of the License, or (at your option) any later version. |
41 helper :queries | 41 helper :queries |
42 include QueriesHelper | 42 include QueriesHelper |
43 helper :repositories | 43 helper :repositories |
44 include RepositoriesHelper | 44 include RepositoriesHelper |
45 include ProjectsHelper | 45 include ProjectsHelper |
46 helper :members | |
46 | 47 |
47 # Lists visible projects | 48 # Lists visible projects |
48 def index | 49 def index |
49 respond_to do |format| | 50 respond_to do |format| |
50 format.html { | 51 format.html { |
55 @projects = scope.visible.order('lft').all | 56 @projects = scope.visible.order('lft').all |
56 } | 57 } |
57 format.api { | 58 format.api { |
58 @offset, @limit = api_offset_and_limit | 59 @offset, @limit = api_offset_and_limit |
59 @project_count = Project.visible.count | 60 @project_count = Project.visible.count |
60 @projects = Project.visible.all(:offset => @offset, :limit => @limit, :order => 'lft') | 61 @projects = Project.visible.offset(@offset).limit(@limit).order('lft').all |
61 } | 62 } |
62 format.atom { | 63 format.atom { |
63 projects = Project.visible.find(:all, :order => 'created_on DESC', | 64 projects = Project.visible.order('created_on DESC').limit(Setting.feeds_limit.to_i).all |
64 :limit => Setting.feeds_limit.to_i) | |
65 render_feed(projects, :title => "#{Setting.app_title}: #{l(:label_project_latest)}") | 65 render_feed(projects, :title => "#{Setting.app_title}: #{l(:label_project_latest)}") |
66 } | 66 } |
67 end | 67 end |
68 end | 68 end |
69 | 69 |
70 def new | 70 def new |
71 @issue_custom_fields = IssueCustomField.find(:all, :order => "#{CustomField.table_name}.position") | 71 @issue_custom_fields = IssueCustomField.sorted.all |
72 @trackers = Tracker.sorted.all | 72 @trackers = Tracker.sorted.all |
73 @project = Project.new | 73 @project = Project.new |
74 @project.safe_attributes = params[:project] | 74 @project.safe_attributes = params[:project] |
75 end | 75 end |
76 | 76 |
77 def create | 77 def create |
78 @issue_custom_fields = IssueCustomField.find(:all, :order => "#{CustomField.table_name}.position") | 78 @issue_custom_fields = IssueCustomField.sorted.all |
79 @trackers = Tracker.sorted.all | 79 @trackers = Tracker.sorted.all |
80 @project = Project.new | 80 @project = Project.new |
81 @project.safe_attributes = params[:project] | 81 @project.safe_attributes = params[:project] |
82 | 82 |
83 if validate_parent_id && @project.save | 83 if validate_parent_id && @project.save |
89 @project.members << m | 89 @project.members << m |
90 end | 90 end |
91 respond_to do |format| | 91 respond_to do |format| |
92 format.html { | 92 format.html { |
93 flash[:notice] = l(:notice_successful_create) | 93 flash[:notice] = l(:notice_successful_create) |
94 redirect_to(params[:continue] ? | 94 if params[:continue] |
95 {:controller => 'projects', :action => 'new', :project => {:parent_id => @project.parent_id}.reject {|k,v| v.nil?}} : | 95 attrs = {:parent_id => @project.parent_id}.reject {|k,v| v.nil?} |
96 {:controller => 'projects', :action => 'settings', :id => @project} | 96 redirect_to new_project_path(attrs) |
97 ) | 97 else |
98 redirect_to settings_project_path(@project) | |
99 end | |
98 } | 100 } |
99 format.api { render :action => 'show', :status => :created, :location => url_for(:controller => 'projects', :action => 'show', :id => @project.id) } | 101 format.api { render :action => 'show', :status => :created, :location => url_for(:controller => 'projects', :action => 'show', :id => @project.id) } |
100 end | 102 end |
101 else | 103 else |
102 respond_to do |format| | 104 respond_to do |format| |
103 format.html { render :action => 'new' } | 105 format.html { render :action => 'new' } |
104 format.api { render_validation_errors(@project) } | 106 format.api { render_validation_errors(@project) } |
105 end | 107 end |
106 end | 108 end |
107 | |
108 end | 109 end |
109 | 110 |
110 def copy | 111 def copy |
111 @issue_custom_fields = IssueCustomField.find(:all, :order => "#{CustomField.table_name}.position") | 112 @issue_custom_fields = IssueCustomField.sorted.all |
112 @trackers = Tracker.sorted.all | 113 @trackers = Tracker.sorted.all |
113 @root_projects = Project.find(:all, | |
114 :conditions => "parent_id IS NULL AND status = #{Project::STATUS_ACTIVE}", | |
115 :order => 'name') | |
116 @source_project = Project.find(params[:id]) | 114 @source_project = Project.find(params[:id]) |
117 if request.get? | 115 if request.get? |
118 @project = Project.copy_from(@source_project) | 116 @project = Project.copy_from(@source_project) |
119 @project.identifier = Project.next_identifier if Setting.sequential_project_identifiers? | 117 @project.identifier = Project.next_identifier if Setting.sequential_project_identifiers? |
120 else | 118 else |
122 @project = Project.new | 120 @project = Project.new |
123 @project.safe_attributes = params[:project] | 121 @project.safe_attributes = params[:project] |
124 if validate_parent_id && @project.copy(@source_project, :only => params[:only]) | 122 if validate_parent_id && @project.copy(@source_project, :only => params[:only]) |
125 @project.set_allowed_parent!(params[:project]['parent_id']) if params[:project].has_key?('parent_id') | 123 @project.set_allowed_parent!(params[:project]['parent_id']) if params[:project].has_key?('parent_id') |
126 flash[:notice] = l(:notice_successful_create) | 124 flash[:notice] = l(:notice_successful_create) |
127 redirect_to :controller => 'projects', :action => 'settings', :id => @project | 125 redirect_to settings_project_path(@project) |
128 elsif !@project.new_record? | 126 elsif !@project.new_record? |
129 # Project was created | 127 # Project was created |
130 # But some objects were not copied due to validation failures | 128 # But some objects were not copied due to validation failures |
131 # (eg. issues from disabled trackers) | 129 # (eg. issues from disabled trackers) |
132 # TODO: inform about that | 130 # TODO: inform about that |
133 redirect_to :controller => 'projects', :action => 'settings', :id => @project | 131 redirect_to settings_project_path(@project) |
134 end | 132 end |
135 end | 133 end |
136 end | 134 end |
137 rescue ActiveRecord::RecordNotFound | 135 rescue ActiveRecord::RecordNotFound |
138 # source_project not found | 136 # source_project not found |
139 render_404 | 137 render_404 |
140 end | 138 end |
141 | 139 |
142 # Show @project | 140 # Show @project |
143 def show | 141 def show |
144 if params[:jump] | 142 # try to redirect to the requested menu item |
145 # try to redirect to the requested menu item | 143 if params[:jump] && redirect_to_project_menu_item(@project, params[:jump]) |
146 redirect_to_project_menu_item(@project, params[:jump]) && return | 144 return |
147 end | 145 end |
148 | 146 |
149 @users_by_role = @project.users_by_role | 147 @users_by_role = @project.users_by_role |
150 @subprojects = @project.children.visible.all | 148 @subprojects = @project.children.visible.all |
151 @news = @project.news.find(:all, :limit => 5, :include => [ :author, :project ], :order => "#{News.table_name}.created_on DESC") | 149 @news = @project.news.limit(5).includes(:author, :project).reorder("#{News.table_name}.created_on DESC").all |
152 @trackers = @project.rolled_up_trackers | 150 @trackers = @project.rolled_up_trackers |
153 | 151 |
154 cond = @project.project_condition(Setting.display_subprojects_issues?) | 152 cond = @project.project_condition(Setting.display_subprojects_issues?) |
155 | 153 |
156 @open_issues_by_tracker = Issue.visible.open.where(cond).count(:group => :tracker) | 154 @open_issues_by_tracker = Issue.visible.open.where(cond).count(:group => :tracker) |
167 format.api | 165 format.api |
168 end | 166 end |
169 end | 167 end |
170 | 168 |
171 def settings | 169 def settings |
172 @issue_custom_fields = IssueCustomField.find(:all, :order => "#{CustomField.table_name}.position") | 170 @issue_custom_fields = IssueCustomField.sorted.all |
173 @issue_category ||= IssueCategory.new | 171 @issue_category ||= IssueCategory.new |
174 @member ||= @project.members.new | 172 @member ||= @project.members.new |
175 @trackers = Tracker.sorted.all | 173 @trackers = Tracker.sorted.all |
176 @wiki ||= @project.wiki | 174 @wiki ||= @project.wiki |
177 end | 175 end |
184 if validate_parent_id && @project.save | 182 if validate_parent_id && @project.save |
185 @project.set_allowed_parent!(params[:project]['parent_id']) if params[:project].has_key?('parent_id') | 183 @project.set_allowed_parent!(params[:project]['parent_id']) if params[:project].has_key?('parent_id') |
186 respond_to do |format| | 184 respond_to do |format| |
187 format.html { | 185 format.html { |
188 flash[:notice] = l(:notice_successful_update) | 186 flash[:notice] = l(:notice_successful_update) |
189 redirect_to :action => 'settings', :id => @project | 187 redirect_to settings_project_path(@project) |
190 } | 188 } |
191 format.api { render_api_ok } | 189 format.api { render_api_ok } |
192 end | 190 end |
193 else | 191 else |
194 respond_to do |format| | 192 respond_to do |format| |
202 end | 200 end |
203 | 201 |
204 def modules | 202 def modules |
205 @project.enabled_module_names = params[:enabled_module_names] | 203 @project.enabled_module_names = params[:enabled_module_names] |
206 flash[:notice] = l(:notice_successful_update) | 204 flash[:notice] = l(:notice_successful_update) |
207 redirect_to :action => 'settings', :id => @project, :tab => 'modules' | 205 redirect_to settings_project_path(@project, :tab => 'modules') |
208 end | 206 end |
209 | 207 |
210 def archive | 208 def archive |
211 if request.post? | 209 if request.post? |
212 unless @project.archive | 210 unless @project.archive |
213 flash[:error] = l(:error_can_not_archive_project) | 211 flash[:error] = l(:error_can_not_archive_project) |
214 end | 212 end |
215 end | 213 end |
216 redirect_to(url_for(:controller => 'admin', :action => 'projects', :status => params[:status])) | 214 redirect_to admin_projects_path(:status => params[:status]) |
217 end | 215 end |
218 | 216 |
219 def unarchive | 217 def unarchive |
220 @project.unarchive if request.post? && !@project.active? | 218 @project.unarchive if request.post? && !@project.active? |
221 redirect_to(url_for(:controller => 'admin', :action => 'projects', :status => params[:status])) | 219 redirect_to admin_projects_path(:status => params[:status]) |
222 end | 220 end |
223 | 221 |
224 def close | 222 def close |
225 @project.close | 223 @project.close |
226 redirect_to project_path(@project) | 224 redirect_to project_path(@project) |
235 def destroy | 233 def destroy |
236 @project_to_destroy = @project | 234 @project_to_destroy = @project |
237 if api_request? || params[:confirm] | 235 if api_request? || params[:confirm] |
238 @project_to_destroy.destroy | 236 @project_to_destroy.destroy |
239 respond_to do |format| | 237 respond_to do |format| |
240 format.html { redirect_to :controller => 'admin', :action => 'projects' } | 238 format.html { redirect_to admin_projects_path } |
241 format.api { render_api_ok } | 239 format.api { render_api_ok } |
242 end | 240 end |
243 end | 241 end |
244 # hide project in layout | 242 # hide project in layout |
245 @project = nil | 243 @project = nil |