Mercurial > hg > soundsoftware-site
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? |