comparison app/controllers/projects_controller.rb @ 1116:bb32da3bea34 redmine-2.2-integration

Merge from live
author Chris Cannam
date Mon, 07 Jan 2013 14:41:20 +0000
parents 433d4f72a19b ea5d9652c6f6
children cd2db8872493
comparison
equal deleted inserted replaced
1115:433d4f72a19b 1116:bb32da3bea34
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
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 46 include ActivitiesHelper
47 # Lists visible projects 47 helper :activities
48
49 # Lists visible projects. Paginator is for top-level projects only
50 # (subprojects belong to them)
48 def index 51 def index
49 respond_to do |format| 52 respond_to do |format|
50 format.html { 53 format.html {
51 scope = Project 54 sort_init 'name'
52 unless params[:closed] 55 sort_update %w(name lft created_on updated_on)
53 scope = scope.active 56 @limit = per_page_option
57 @project_count = Project.visible_roots.count
58 @project_pages = Paginator.new self, @project_count, @limit, params['page']
59 @offset ||= @project_pages.current.offset
60 @projects = Project.visible_roots.all(:offset => @offset, :limit => @limit, :order => sort_clause)
61 if User.current.logged?
62 # seems sort_by gives us case-sensitive ordering, which we don't want
63 # @user_projects = User.current.projects.sort_by(&:name)
64 @user_projects = User.current.projects.all(:order => :name)
54 end 65 end
55 @projects = scope.visible.order('lft').all 66 render :template => 'projects/index.html.erb', :layout => !request.xhr?
67
68 ## Redmine 2.2:
69 # scope = Project
70 # unless params[:closed]
71 # scope = scope.active
72 # end
73 # @projects = scope.visible.order('lft').all
56 } 74 }
57 format.api { 75 format.api {
58 @offset, @limit = api_offset_and_limit 76 @offset, @limit = api_offset_and_limit
59 @project_count = Project.visible.count 77 @project_count = Project.visible.count
60 @projects = Project.visible.all(:offset => @offset, :limit => @limit, :order => 'lft') 78 @projects = Project.visible.all(:offset => @offset, :limit => @limit, :order => 'lft')
65 render_feed(projects, :title => "#{Setting.app_title}: #{l(:label_project_latest)}") 83 render_feed(projects, :title => "#{Setting.app_title}: #{l(:label_project_latest)}")
66 } 84 }
67 end 85 end
68 end 86 end
69 87
88 # A different view of projects using explore boxes
89 def explore
90 respond_to do |format|
91 format.html {
92 @projects = Project.visible
93 render :template => 'projects/explore.html.erb', :layout => !request.xhr?
94 }
95 end
96 end
97
70 def new 98 def new
71 @issue_custom_fields = IssueCustomField.find(:all, :order => "#{CustomField.table_name}.position") 99 @issue_custom_fields = IssueCustomField.find(:all, :order => "#{CustomField.table_name}.position")
72 @trackers = Tracker.sorted.all 100 @trackers = Tracker.sorted.all
73 @project = Project.new 101 @project = Project.new
74 @project.safe_attributes = params[:project] 102 @project.safe_attributes = params[:project]
78 @issue_custom_fields = IssueCustomField.find(:all, :order => "#{CustomField.table_name}.position") 106 @issue_custom_fields = IssueCustomField.find(:all, :order => "#{CustomField.table_name}.position")
79 @trackers = Tracker.sorted.all 107 @trackers = Tracker.sorted.all
80 @project = Project.new 108 @project = Project.new
81 @project.safe_attributes = params[:project] 109 @project.safe_attributes = params[:project]
82 110
83 if validate_parent_id && @project.save 111
112 # todo: luisf: this should be removed from here...
113 if params && params[:project] && !params[:project][:tag_list].nil?
114 new_tags = params[:project][:tag_list].to_s.downcase
115
116 @project.tag_list = ActionController::Base.helpers.strip_tags(new_tags)
117 end
118 # end of code to be removed
119
120 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') 121 @project.set_allowed_parent!(params[:project]['parent_id']) if params[:project].has_key?('parent_id')
85 # Add current user as a project member if he is not admin 122 # Add current user as a project member if he is not admin
86 unless User.current.admin? 123 unless User.current.admin?
87 r = Role.givable.find_by_id(Setting.new_project_user_role_id.to_i) || Role.givable.first 124 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]) 125 m = Member.new(:user => User.current, :roles => [r])
199 format.api { render_validation_errors(@project) } 236 format.api { render_validation_errors(@project) }
200 end 237 end
201 end 238 end
202 end 239 end
203 240
241 def overview
242 @project.has_welcome_page = params[:has_welcome_page]
243 if @project.save
244 flash[:notice] = l(:notice_successful_update)
245 end
246 redirect_to :action => 'settings', :id => @project, :tab => 'overview'
247 end
248
249 verify :method => :post, :only => :modules, :render => {:nothing => true, :status => :method_not_allowed }
250
204 def modules 251 def modules
205 @project.enabled_module_names = params[:enabled_module_names] 252 @project.enabled_module_names = params[:enabled_module_names]
206 flash[:notice] = l(:notice_successful_update) 253 flash[:notice] = l(:notice_successful_update)
207 redirect_to :action => 'settings', :id => @project, :tab => 'modules' 254 redirect_to :action => 'settings', :id => @project, :tab => 'modules'
208 end 255 end
244 # hide project in layout 291 # hide project in layout
245 @project = nil 292 @project = nil
246 end 293 end
247 294
248 private 295 private
296
297 def validate_is_public_key
298 # Although is_public isn't mandatory in the project model (it gets
299 # defaulted), it must be present in params -- it can be true or
300 # false, but it must be there. This permits us to make forms in
301 # which the user _has_ to select public or private (rather than
302 # defaulting it) if we want to
303 if params.nil? || params[:project].nil? || !params[:project].has_key?(:is_public)
304 @project.errors.add :is_public, :public_or_private
305 return false
306 end
307 true
308 end
249 309
250 # Validates parent_id param according to user's permissions 310 # Validates parent_id param according to user's permissions
251 # TODO: move it to Project model in a validation that depends on User.current 311 # TODO: move it to Project model in a validation that depends on User.current
252 def validate_parent_id 312 def validate_parent_id
253 return true if User.current.admin? 313 return true if User.current.admin?