From 6c416aaac85fe16cd4900a686714627e9a0fcdbc Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Mon, 6 Feb 2012 19:40:32 +0200 Subject: [PATCH] Issues, MR, Wall can be enabled/disabled per project --- app/controllers/issues_controller.rb | 5 ++ app/controllers/merge_requests_controller.rb | 5 ++ app/controllers/projects_controller.rb | 2 + app/views/layouts/_project_side.html.haml | 20 ++++---- app/views/projects/_form.html.haml | 16 ++++++- app/views/projects/info.html.haml | 47 +++++++++++++++++-- app/views/widgets/_project_member.html.haml | 19 ++++---- ...170141_add_modularity_fields_to_project.rb | 7 +++ db/schema.rb | 21 +++++++-- 9 files changed, 116 insertions(+), 26 deletions(-) create mode 100644 db/migrate/20120206170141_add_modularity_fields_to_project.rb diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index 7c10d2a8..ed1a5864 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -1,6 +1,7 @@ class IssuesController < ApplicationController before_filter :authenticate_user! before_filter :project + before_filter :module_enabled before_filter :issue, :only => [:edit, :update, :destroy, :show] layout "project" @@ -132,4 +133,8 @@ class IssuesController < ApplicationController def authorize_admin_issue! can?(current_user, :admin_issue, @issue) end + + def module_enabled + return render_404 unless @project.issues_enabled + end end diff --git a/app/controllers/merge_requests_controller.rb b/app/controllers/merge_requests_controller.rb index 9ab62f5e..b0293442 100644 --- a/app/controllers/merge_requests_controller.rb +++ b/app/controllers/merge_requests_controller.rb @@ -1,6 +1,7 @@ class MergeRequestsController < ApplicationController before_filter :authenticate_user! before_filter :project + before_filter :module_enabled before_filter :merge_request, :only => [:edit, :update, :destroy, :show, :commits, :diffs] layout "project" @@ -114,4 +115,8 @@ class MergeRequestsController < ApplicationController def authorize_admin_merge_request! can?(current_user, :admin_merge_request, @merge_request) end + + def module_enabled + return render_404 unless @project.merge_requests_enabled + end end diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 6530f47e..c9ffa5b7 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -85,6 +85,8 @@ class ProjectsController < ApplicationController # def wall + return render_404 unless @project.wall_enabled + @note = Note.new @notes = @project.common_notes.order("created_at DESC") @notes = @notes.fresh.limit(20) diff --git a/app/views/layouts/_project_side.html.haml b/app/views/layouts/_project_side.html.haml index 1e553788..cc3174fe 100644 --- a/app/views/layouts/_project_side.html.haml +++ b/app/views/layouts/_project_side.html.haml @@ -9,11 +9,15 @@ = link_to "Code", tree_project_ref_path(@project, @project.root_ref), :class => tree_tab_class = link_to "Commits", project_commits_path(@project), :class => (controller.controller_name == "commits") ? "current" : nil = link_to "Network", graph_project_path(@project), :class => current_page?(:controller => "projects", :action => "graph", :id => @project) ? "current" : nil - = link_to project_issues_filter_path(@project), :class => (controller.controller_name == "issues") ? "current" : nil do - Issues - = link_to project_merge_requests_path(@project), :class => (controller.controller_name == "merge_requests") ? "current" : nil do - Merge Requests - = link_to wall_project_path(@project), :class => current_page?(:controller => "projects", :action => "wall", :id => @project) ? "current" : nil do - @Wall - - if @project.common_notes.today.count > 0 - %span.label= @project.common_notes.today.count + - if @project.issues_enabled + = link_to project_issues_filter_path(@project), :class => (controller.controller_name == "issues") ? "current" : nil do + Issues + - if @project.merge_requests_enabled + = link_to project_merge_requests_path(@project), :class => (controller.controller_name == "merge_requests") ? "current" : nil do + Merge Requests + + - if @project.wall_enabled + = link_to wall_project_path(@project), :class => current_page?(:controller => "projects", :action => "wall", :id => @project) ? "current" : nil do + @Wall + - if @project.common_notes.today.count > 0 + %span.label= @project.common_notes.today.count diff --git a/app/views/projects/_form.html.haml b/app/views/projects/_form.html.haml index 44b72336..37446585 100644 --- a/app/views/projects/_form.html.haml +++ b/app/views/projects/_form.html.haml @@ -23,10 +23,24 @@ = f.label :default_branch, "Default Branch" .input= f.select(:default_branch, @project.heads.map(&:name), {}, :style => "width:210px;") + .well + %h5 Features + + .clearfix + = f.label :issues_enabled, "Issues" + .input= f.check_box :issues_enabled + + .clearfix + = f.label :merge_requests_enabled, "Merge Requests" + .input= f.check_box :merge_requests_enabled + + .clearfix + = f.label :wall_enabled, "Wall" + .input= f.check_box :wall_enabled .clearfix = f.label :description - .input= f.text_area :description, :placeholder => "project description", :style => "height:50px" + .input= f.text_area :description, :placeholder => "project description", :class => "xlarge", :rows => 4 %br diff --git a/app/views/projects/info.html.haml b/app/views/projects/info.html.haml index 513b2ab2..d1196873 100644 --- a/app/views/projects/info.html.haml +++ b/app/views/projects/info.html.haml @@ -1,12 +1,17 @@ = render "project_head" -%h3= @project.name -%br - +.entry + %h3= @project.name + %br -%pre - = "git clone #{@project.url_to_repo}" + + %pre + = "git clone #{@project.url_to_repo}" + + + +%h4 Details: %table %tr @@ -54,6 +59,38 @@ %tr %td{:colspan => 2}= simple_format @project.description + +%h4 Features: + +%table + %tr + %td Issues + %td + - if @project.issues_enabled + .alert-message.success + Enabled + - else + .alert-message.error + Disabled + + %tr + %td Merge Requests + %td + - if @project.merge_requests_enabled + .alert-message.success + Enabled + - else + .alert-message.error + Disabled + %tr + %td Wall + %td + - if @project.wall_enabled + .alert-message.success + Enabled + - else + .alert-message.error + Disabled .actions = link_to "Edit", edit_project_path(@project), :class => "btn" diff --git a/app/views/widgets/_project_member.html.haml b/app/views/widgets/_project_member.html.haml index 1af91112..0380033d 100644 --- a/app/views/widgets/_project_member.html.haml +++ b/app/views/widgets/_project_member.html.haml @@ -16,13 +16,14 @@ %span.label= member.repo_access_human - if can? current_user, :write_project, @project - %hr - .span3 - %p You have access to create new issue or merge request. - %div - = link_to new_project_issue_path(@project), :title => "New Issue", :class => "" do - New Issue » - %div - = link_to new_project_merge_request_path(@project), :title => "New Merge Request", :class => "" do - New Merge Request » + - if @project.issues_enabled && @project.merge_requests_enabled + %hr + .span3 + %p You have access to create new issue or merge request. + %div + = link_to new_project_issue_path(@project), :title => "New Issue", :class => "" do + New Issue » + %div + = link_to new_project_merge_request_path(@project), :title => "New Merge Request", :class => "" do + New Merge Request » diff --git a/db/migrate/20120206170141_add_modularity_fields_to_project.rb b/db/migrate/20120206170141_add_modularity_fields_to_project.rb new file mode 100644 index 00000000..d63de0c2 --- /dev/null +++ b/db/migrate/20120206170141_add_modularity_fields_to_project.rb @@ -0,0 +1,7 @@ +class AddModularityFieldsToProject < ActiveRecord::Migration + def change + add_column :projects, :issues_enabled, :boolean, :null => false, :default => true + add_column :projects, :wall_enabled, :boolean, :null => false, :default => true + add_column :projects, :merge_requests_enabled, :boolean, :null => false, :default => true + end +end diff --git a/db/schema.rb b/db/schema.rb index 2d891917..a6522e8e 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,19 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20120121122616) do +ActiveRecord::Schema.define(:version => 20120206170141) do + + create_table "features", :force => true do |t| + t.string "name" + t.string "branch_name" + t.integer "assignee_id" + t.integer "author_id" + t.integer "project_id" + t.datetime "created_at" + t.datetime "updated_at" + t.string "version" + t.integer "status", :default => 0, :null => false + end create_table "issues", :force => true do |t| t.string "title" @@ -73,10 +85,13 @@ ActiveRecord::Schema.define(:version => 20120121122616) do t.text "description" t.datetime "created_at" t.datetime "updated_at" - t.boolean "private_flag", :default => true, :null => false + t.boolean "private_flag", :default => true, :null => false t.string "code" t.integer "owner_id" - t.string "default_branch", :default => "master", :null => false + t.string "default_branch", :default => "master", :null => false + t.boolean "issues_enabled", :default => true, :null => false + t.boolean "wall_enabled", :default => true, :null => false + t.boolean "merge_requests_enabled", :default => true, :null => false end create_table "snippets", :force => true do |t|