Mercurial > hg > soundsoftware-site
comparison app/controllers/projects_controller.rb @ 1484:51364c0cd58f redmine-2.4-integration
Merge from live branch. Still need to merge manually in files overridden by plugins.
author | Chris Cannam |
---|---|
date | Wed, 15 Jan 2014 09:59:14 +0000 |
parents | 261b3d9a4903 fc0fecf09eb9 |
children | c86dacc2ef0a |
comparison
equal
deleted
inserted
replaced
1464:261b3d9a4903 | 1484:51364c0cd58f |
---|---|
18 class ProjectsController < ApplicationController | 18 class ProjectsController < ApplicationController |
19 menu_item :overview | 19 menu_item :overview |
20 menu_item :roadmap, :only => :roadmap | 20 menu_item :roadmap, :only => :roadmap |
21 menu_item :settings, :only => :settings | 21 menu_item :settings, :only => :settings |
22 | 22 |
23 before_filter :find_project, :except => [ :index, :list, :new, :create, :copy ] | 23 before_filter :find_project, :except => [ :index, :list, :explore, :new, :create, :copy ] |
24 before_filter :authorize, :except => [ :index, :list, :new, :create, :copy, :archive, :unarchive, :destroy] | 24 before_filter :authorize, :except => [ :index, :list, :explore, :new, :create, :copy, :archive, :unarchive, :destroy] |
25 before_filter :authorize_global, :only => [:new, :create] | 25 before_filter :authorize_global, :only => [:new, :create] |
26 before_filter :require_admin, :only => [ :copy, :archive, :unarchive, :destroy ] | 26 before_filter :require_admin, :only => [ :copy, :archive, :unarchive, :destroy ] |
27 accept_rss_auth :index | 27 accept_rss_auth :index |
28 accept_api_auth :index, :show, :create, :update, :destroy | 28 accept_api_auth :index, :show, :create, :update, :destroy |
29 | 29 |
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 helper :members |
47 | 47 include ActivitiesHelper |
48 # Lists visible projects | 48 helper :activities |
49 | |
50 # Lists visible projects. Paginator is for top-level projects only | |
51 # (subprojects belong to them) | |
49 def index | 52 def index |
50 respond_to do |format| | 53 respond_to do |format| |
51 format.html { | 54 format.html { |
52 scope = Project | 55 sort_init 'name' |
53 unless params[:closed] | 56 sort_update %w(name lft created_on updated_on) |
54 scope = scope.active | 57 @limit = per_page_option |
55 end | 58 @project_count = Project.visible_roots.count |
56 @projects = scope.visible.order('lft').all | 59 @project_pages = Paginator.new self, @project_count, @limit, params['page'] |
60 @offset ||= @project_pages.current.offset | |
61 @projects = Project.visible_roots.all(:offset => @offset, :limit => @limit, :order => sort_clause) | |
62 render :template => 'projects/index.html.erb', :layout => !request.xhr? | |
63 | |
64 ## Redmine 2.2: | |
65 # scope = Project | |
66 # unless params[:closed] | |
67 # scope = scope.active | |
68 # end | |
69 # @projects = scope.visible.order('lft').all | |
57 } | 70 } |
58 format.api { | 71 format.api { |
59 @offset, @limit = api_offset_and_limit | 72 @offset, @limit = api_offset_and_limit |
60 @project_count = Project.visible.count | 73 @project_count = Project.visible.count |
61 @projects = Project.visible.offset(@offset).limit(@limit).order('lft').all | 74 @projects = Project.visible.offset(@offset).limit(@limit).order('lft').all |
65 render_feed(projects, :title => "#{Setting.app_title}: #{l(:label_project_latest)}") | 78 render_feed(projects, :title => "#{Setting.app_title}: #{l(:label_project_latest)}") |
66 } | 79 } |
67 end | 80 end |
68 end | 81 end |
69 | 82 |
83 # A different view of projects using explore boxes | |
84 def explore | |
85 respond_to do |format| | |
86 format.html { | |
87 @projects = Project.visible | |
88 render :template => 'projects/explore.html.erb', :layout => !request.xhr? | |
89 } | |
90 end | |
91 end | |
92 | |
70 def new | 93 def new |
71 @issue_custom_fields = IssueCustomField.sorted.all | 94 @issue_custom_fields = IssueCustomField.sorted.all |
72 @trackers = Tracker.sorted.all | 95 @trackers = Tracker.sorted.all |
73 @project = Project.new | 96 @project = Project.new |
74 @project.safe_attributes = params[:project] | 97 @project.safe_attributes = params[:project] |
78 @issue_custom_fields = IssueCustomField.sorted.all | 101 @issue_custom_fields = IssueCustomField.sorted.all |
79 @trackers = Tracker.sorted.all | 102 @trackers = Tracker.sorted.all |
80 @project = Project.new | 103 @project = Project.new |
81 @project.safe_attributes = params[:project] | 104 @project.safe_attributes = params[:project] |
82 | 105 |
83 if validate_parent_id && @project.save | 106 if validate_is_public_key && validate_parent_id && @project.save |
84 @project.set_allowed_parent!(params[:project]['parent_id']) if params[:project].has_key?('parent_id') | 107 @project.set_allowed_parent!(params[:project]['parent_id']) if params[:project].has_key?('parent_id') |
85 # Add current user as a project member if current user is not admin | 108 # Add current user as a project member if current user is not admin |
86 unless User.current.admin? | 109 unless User.current.admin? |
87 r = Role.givable.find_by_id(Setting.new_project_user_role_id.to_i) || Role.givable.first | 110 r = Role.givable.find_by_id(Setting.new_project_user_role_id.to_i) || Role.givable.first |
88 m = Member.new(:user => User.current, :roles => [r]) | 111 m = Member.new(:user => User.current, :roles => [r]) |
169 def settings | 192 def settings |
170 @issue_custom_fields = IssueCustomField.sorted.all | 193 @issue_custom_fields = IssueCustomField.sorted.all |
171 @issue_category ||= IssueCategory.new | 194 @issue_category ||= IssueCategory.new |
172 @member ||= @project.members.new | 195 @member ||= @project.members.new |
173 @trackers = Tracker.sorted.all | 196 @trackers = Tracker.sorted.all |
197 @repository ||= @project.repository | |
174 @wiki ||= @project.wiki | 198 @wiki ||= @project.wiki |
175 end | 199 end |
176 | 200 |
177 def edit | 201 def edit |
178 end | 202 end |
197 format.api { render_validation_errors(@project) } | 221 format.api { render_validation_errors(@project) } |
198 end | 222 end |
199 end | 223 end |
200 end | 224 end |
201 | 225 |
226 def overview | |
227 @project.has_welcome_page = params[:has_welcome_page] | |
228 if @project.save | |
229 flash[:notice] = l(:notice_successful_update) | |
230 end | |
231 redirect_to :action => 'settings', :id => @project, :tab => 'overview' | |
232 end | |
233 | |
202 def modules | 234 def modules |
203 @project.enabled_module_names = params[:enabled_module_names] | 235 @project.enabled_module_names = params[:enabled_module_names] |
204 flash[:notice] = l(:notice_successful_update) | 236 flash[:notice] = l(:notice_successful_update) |
205 redirect_to settings_project_path(@project, :tab => 'modules') | 237 redirect_to settings_project_path(@project, :tab => 'modules') |
206 end | 238 end |
242 # hide project in layout | 274 # hide project in layout |
243 @project = nil | 275 @project = nil |
244 end | 276 end |
245 | 277 |
246 private | 278 private |
279 | |
280 def validate_is_public_key | |
281 # Although is_public isn't mandatory in the project model (it gets | |
282 # defaulted), it must be present in params -- it can be true or | |
283 # false, but it must be there. This permits us to make forms in | |
284 # which the user _has_ to select public or private (rather than | |
285 # defaulting it) if we want to | |
286 if params.nil? || params[:project].nil? || !params[:project].has_key?(:is_public) | |
287 @project.errors.add :is_public, :public_or_private | |
288 return false | |
289 end | |
290 true | |
291 end | |
247 | 292 |
248 # Validates parent_id param according to user's permissions | 293 # Validates parent_id param according to user's permissions |
249 # TODO: move it to Project model in a validation that depends on User.current | 294 # TODO: move it to Project model in a validation that depends on User.current |
250 def validate_parent_id | 295 def validate_parent_id |
251 return true if User.current.admin? | 296 return true if User.current.admin? |