diff --git a/app/controllers/additional_tags_controller.rb b/app/controllers/additional_tags_controller.rb index f01506d..3db8704 100755 --- a/app/controllers/additional_tags_controller.rb +++ b/app/controllers/additional_tags_controller.rb @@ -5,6 +5,8 @@ class AdditionalTagsController < ApplicationController before_action :find_tag, only: %i[edit update] before_action :bulk_find_tags, only: %i[context_menu merge destroy] before_action :set_tag_list_path + before_action :find_project_by_project_id, if: -> { params[:project_id] } + before_action :authorize, if: -> { @project.present? } helper :additional_tags_issues include AdditionalTagsHelper @@ -13,6 +15,7 @@ class AdditionalTagsController < ApplicationController # used by api calls def index + raise 'tags are not enabled for project' unless allow_tags? raise 'type is not provided' if params[:type].blank? type_info = manageable_tag_columns.detect { |m| m.first.to_s == params[:type] } @@ -101,4 +104,8 @@ def find_tag rescue ActiveRecord::RecordNotFound render_404 end -end + + def allow_tags? + @project.nil? || @project.module_enabled?(:additional_tags) + end +end \ No newline at end of file diff --git a/app/helpers/additional_tags_issues_helper.rb b/app/helpers/additional_tags_issues_helper.rb index 983184d..4814127 100644 --- a/app/helpers/additional_tags_issues_helper.rb +++ b/app/helpers/additional_tags_issues_helper.rb @@ -7,7 +7,8 @@ def render_api_custom_values(custom_values, api) if @issue.present? && (defined?(controller_name) && controller_name == 'issues' && action_name == 'show' || !defined?(controller_name)) && - AdditionalTags.setting?(:active_issue_tags) && User.current.allowed_to?(:view_issue_tags, @project) + AdditionalTags.setting?(:active_issue_tags) && User.current.allowed_to?(:view_issue_tags, @project) && + project.module_enabled?(:additional_tags) api.array :tags do # support tags, which are not saved to database diff --git a/app/views/issues/_tags.html.slim b/app/views/issues/_tags.html.slim index b928264..004b757 100644 --- a/app/views/issues/_tags.html.slim +++ b/app/views/issues/_tags.html.slim @@ -1,4 +1,4 @@ -- if AdditionalTags.setting?(:active_issue_tags) && User.current.allowed_to?(:view_issue_tags, issue.project) +- if AdditionalTags.setting?(:active_issue_tags) && User.current.allowed_to?(:view_issue_tags, issue.project) && @project && project.module_enabled?(:additional_tags) = render 'additional_tags/tag_list', entry: issue, show_always: true, diff --git a/app/views/projects/settings/_additional_tags.html.erb b/app/views/projects/settings/_additional_tags.html.erb new file mode 100644 index 0000000..9478f98 --- /dev/null +++ b/app/views/projects/settings/_additional_tags.html.erb @@ -0,0 +1,4 @@ +
+ <%= check_box_tag 'settings[additional_tags_enabled]', 1, @project.additional_tags_enabled? %> + <%= label_tag 'settings[additional_tags_enabled]', l(:label_additional_tags_enabled) %> +
\ No newline at end of file diff --git a/config/locales/en.yml b/config/locales/en.yml index a81d7a5..d3fe440 100755 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -43,3 +43,4 @@ en: tags_sidebar_simple_cloud: "Simple cloud" tags_sort_by_count: "Count" tags_sort_by_name: "Name" + label_additional_tags_enabled: "Enable Additional Tags" diff --git a/db/migrate/20260604000000_add_additional_tags_enabled_to_projects.rb b/db/migrate/20260604000000_add_additional_tags_enabled_to_projects.rb new file mode 100644 index 0000000..047eae0 --- /dev/null +++ b/db/migrate/20260604000000_add_additional_tags_enabled_to_projects.rb @@ -0,0 +1,5 @@ +class AddAdditionalTagsEnabledToProjects < ActiveRecord::Migration[6.0] + def change + add_column :projects, :additional_tags_enabled, :boolean, default: true, null: false + end +end diff --git a/init.rb b/init.rb index 2aa8999..806cc0c 100644 --- a/init.rb +++ b/init.rb @@ -20,6 +20,11 @@ permission :view_issue_tags, {}, read: true end + project_module :additional_tags do + permission :view_project_tags, { tags: %i[index, show] } + permission :manage_project_tags, { tags: %i[new, create, edit, destroy] } + end + project_module :wiki do permission :add_wiki_tags, wiki: %i[update_tags] end