From 8d28d3cace765a4887effea9a7bce64213d6f706 Mon Sep 17 00:00:00 2001 From: tza Date: Fri, 24 Sep 2021 13:25:44 +0200 Subject: bug #16188: enhance project category, add inactive flag --- .../issue_categories_controller.rb | 32 +++++++++++++++++-- app/controllers/issues_controller.rb | 1 + app/models/issue.rb | 10 ++++++ app/models/project.rb | 4 +++ app/views/context_menus/issues.html.erb | 4 +-- app/views/issues/_attributes.html.erb | 4 +-- app/views/issues/bulk_edit.html.erb | 2 +- .../settings/_issue_categories.html.erb | 2 ++ config/routes.rb | 7 ++++ ...10908145200_issue_categories_add_column.rb | 9 ++++++ .../issue_categories_controller_test.rb | 24 ++++++++++++++ test/unit/issue_test.rb | 30 +++++++++++++++++ test/unit/project_test.rb | 20 ++++++++++++ 13 files changed, 142 insertions(+), 7 deletions(-) create mode 100644 db/migrate/20210908145200_issue_categories_add_column.rb diff --git a/app/controllers/issue_categories_controller.rb b/app/controllers/issue_categories_controller.rb index 196f9bf98..371cf9181 100644 --- a/app/controllers/issue_categories_controller.rb +++ b/app/controllers/issue_categories_controller.rb @@ -23,8 +23,8 @@ class IssueCategoriesController < ApplicationController before_action :find_model_object, :except => [:index, :new, :create] before_action :find_project_from_association, :except => [:index, :new, :create] before_action :find_project_by_project_id, :only => [:index, :new, :create] - before_action :authorize - accept_api_auth :index, :show, :create, :update, :destroy + before_action :authorize, :except => [:archive, :unarchive] + accept_api_auth :index, :show, :create, :update, :destroy, :archive, :unarchive def index respond_to do |format| @@ -94,6 +94,34 @@ class IssueCategoriesController < ApplicationController end end end + + def archive + @category.archived = true + if @category.save + respond_to do |format| + format.html do + flash[:notice] = l(:notice_successful_update) + redirect_to_settings_in_projects + end + format.js + format.api { render :action => 'show', :status => :created, :location => issue_category_path(@category) } + end + end + end + + def unarchive + @category.archived = false + if @category.save + respond_to do |format| + format.html do + flash[:notice] = l(:notice_successful_update) + redirect_to_settings_in_projects + end + format.js + format.api { render :action => 'show', :status => :created, :location => issue_category_path(@category) } + end + end + end def destroy @issue_count = @category.issues.size diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index 96a8341d0..0c3a753e5 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -316,6 +316,7 @@ class IssuesController < ApplicationController @assignables = target_projects.map(&:assignable_users).reduce(:&) @versions = target_projects.map {|p| p.shared_versions.open}.reduce(:&) @categories = target_projects.map {|p| p.issue_categories}.reduce(:&) + @active_categories = @categories.reject { |c| c.archived } if @copy @attachments_present = @issues.detect {|i| i.attachments.any?}.present? @subtasks_present = @issues.detect {|i| !i.leaf?}.present? diff --git a/app/models/issue.rb b/app/models/issue.rb index 7ce04ad64..e50e7801d 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -982,6 +982,16 @@ class Issue < ActiveRecord::Base users.uniq.sort end + def assignable_issue_categories + return [] if project.nil? + + categories = project.active_issue_categories + if category && category.archived + categories << category + end + categories.uniq.sort + end + # Versions that the issue can be assigned to def assignable_versions return @assignable_versions if @assignable_versions diff --git a/app/models/project.rb b/app/models/project.rb index 4d5e3c051..32de16828 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -974,6 +974,10 @@ class Project < ActiveRecord::Base value.custom_field.visible_by?(project, user) end end + + def active_issue_categories + issue_categories.reject { |c| c.archived } + end private diff --git a/app/views/context_menus/issues.html.erb b/app/views/context_menus/issues.html.erb index 23ea817ac..d0bfdb695 100644 --- a/app/views/context_menus/issues.html.erb +++ b/app/views/context_menus/issues.html.erb @@ -86,11 +86,11 @@ <% end %> - <% if @safe_attributes.include?('category_id') && @project && @project.issue_categories.any? -%> + <% if @safe_attributes.include?('category_id') && @project && @project.active_issue_categories.any? -%>
  • <%= l(:field_category) %>