Mercurial > hg > soundsoftware-site
diff 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 |
line wrap: on
line diff
--- a/app/controllers/projects_controller.rb Mon Jan 07 12:01:42 2013 +0000 +++ b/app/controllers/projects_controller.rb Mon Jan 07 14:41:20 2013 +0000 @@ -20,8 +20,8 @@ menu_item :roadmap, :only => :roadmap menu_item :settings, :only => :settings - before_filter :find_project, :except => [ :index, :list, :new, :create, :copy ] - before_filter :authorize, :except => [ :index, :list, :new, :create, :copy, :archive, :unarchive, :destroy] + before_filter :find_project, :except => [ :index, :list, :explore, :new, :create, :copy ] + before_filter :authorize, :except => [ :index, :list, :explore, :new, :create, :copy, :archive, :unarchive, :destroy] before_filter :authorize_global, :only => [:new, :create] before_filter :require_admin, :only => [ :copy, :archive, :unarchive, :destroy ] accept_rss_auth :index @@ -43,16 +43,34 @@ helper :repositories include RepositoriesHelper include ProjectsHelper + include ActivitiesHelper + helper :activities - # Lists visible projects + # Lists visible projects. Paginator is for top-level projects only + # (subprojects belong to them) def index respond_to do |format| format.html { - scope = Project - unless params[:closed] - scope = scope.active + sort_init 'name' + sort_update %w(name lft created_on updated_on) + @limit = per_page_option + @project_count = Project.visible_roots.count + @project_pages = Paginator.new self, @project_count, @limit, params['page'] + @offset ||= @project_pages.current.offset + @projects = Project.visible_roots.all(:offset => @offset, :limit => @limit, :order => sort_clause) + if User.current.logged? + # seems sort_by gives us case-sensitive ordering, which we don't want +# @user_projects = User.current.projects.sort_by(&:name) + @user_projects = User.current.projects.all(:order => :name) end - @projects = scope.visible.order('lft').all + render :template => 'projects/index.html.erb', :layout => !request.xhr? + +## Redmine 2.2: +# scope = Project +# unless params[:closed] +# scope = scope.active +# end +# @projects = scope.visible.order('lft').all } format.api { @offset, @limit = api_offset_and_limit @@ -67,6 +85,16 @@ end end + # A different view of projects using explore boxes + def explore + respond_to do |format| + format.html { + @projects = Project.visible + render :template => 'projects/explore.html.erb', :layout => !request.xhr? + } + end + end + def new @issue_custom_fields = IssueCustomField.find(:all, :order => "#{CustomField.table_name}.position") @trackers = Tracker.sorted.all @@ -80,7 +108,16 @@ @project = Project.new @project.safe_attributes = params[:project] - if validate_parent_id && @project.save + + # todo: luisf: this should be removed from here... + if params && params[:project] && !params[:project][:tag_list].nil? + new_tags = params[:project][:tag_list].to_s.downcase + + @project.tag_list = ActionController::Base.helpers.strip_tags(new_tags) + end + # end of code to be removed + + if validate_is_public_key && 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? @@ -201,6 +238,16 @@ end end + def overview + @project.has_welcome_page = params[:has_welcome_page] + if @project.save + flash[:notice] = l(:notice_successful_update) + end + redirect_to :action => 'settings', :id => @project, :tab => 'overview' + end + + verify :method => :post, :only => :modules, :render => {:nothing => true, :status => :method_not_allowed } + def modules @project.enabled_module_names = params[:enabled_module_names] flash[:notice] = l(:notice_successful_update) @@ -247,6 +294,19 @@ private + def validate_is_public_key + # Although is_public isn't mandatory in the project model (it gets + # defaulted), it must be present in params -- it can be true or + # false, but it must be there. This permits us to make forms in + # which the user _has_ to select public or private (rather than + # defaulting it) if we want to + if params.nil? || params[:project].nil? || !params[:project].has_key?(:is_public) + @project.errors.add :is_public, :public_or_private + return false + end + true + end + # 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