additional_tags 1.0.6 → 1.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/codeql-analysis.yml +6 -6
  3. data/.github/workflows/linters.yml +15 -3
  4. data/.github/workflows/tests.yml +7 -4
  5. data/.gitignore +2 -0
  6. data/.rubocop.yml +5 -0
  7. data/.stylelintrc.json +12 -155
  8. data/README.md +26 -7
  9. data/app/controllers/additional_tags_controller.rb +9 -9
  10. data/app/controllers/issue_tags_controller.rb +3 -1
  11. data/app/helpers/additional_tags_helper.rb +39 -30
  12. data/app/helpers/additional_tags_issues_helper.rb +1 -3
  13. data/app/helpers/additional_tags_wiki_helper.rb +6 -5
  14. data/app/models/additional_tag.rb +98 -0
  15. data/app/views/additional_tags/_tag_list.html.slim +10 -4
  16. data/app/views/additional_tags/merge.html.slim +0 -1
  17. data/app/views/additional_tags/settings/_general.html.slim +7 -1
  18. data/app/views/additional_tags/settings/_manage_tags.html.slim +8 -1
  19. data/app/views/context_menus/_issues_tags.html.slim +7 -1
  20. data/app/views/dashboards/blocks/_issue_tags.html.slim +3 -1
  21. data/app/views/issue_tags/_edit_modal.html.slim +7 -7
  22. data/app/views/issues/_tags.html.slim +6 -1
  23. data/app/views/issues/_tags_bulk_edit.html.slim +2 -1
  24. data/app/views/wiki/_tags_form.html.slim +4 -0
  25. data/app/views/wiki/_tags_show.html.slim +1 -1
  26. data/assets/javascripts/tags.js +3 -3
  27. data/assets/stylesheets/tags.css +41 -16
  28. data/config/locales/bg.yml +18 -11
  29. data/config/locales/cs.yml +19 -12
  30. data/config/locales/de.yml +19 -12
  31. data/config/locales/en.yml +19 -12
  32. data/config/locales/es.yml +19 -12
  33. data/config/locales/fr.yml +19 -12
  34. data/config/locales/it.yml +19 -12
  35. data/config/locales/ja.yml +18 -11
  36. data/config/locales/ko.yml +18 -11
  37. data/config/locales/pl.yml +19 -12
  38. data/config/locales/pt-BR.yml +18 -11
  39. data/config/locales/ru.yml +34 -27
  40. data/config/settings.yml +5 -5
  41. data/doc/images/additional-tags-framework.png +0 -0
  42. data/doc/images/additional-tags.gif +0 -0
  43. data/doc/images/tag-overview.png +0 -0
  44. data/lib/additional_tags/hooks/view_hook.rb +15 -2
  45. data/lib/additional_tags/patches/issue_patch.rb +53 -7
  46. data/lib/additional_tags/patches/issue_query_patch.rb +18 -0
  47. data/lib/additional_tags/patches/queries_helper_patch.rb +1 -3
  48. data/lib/additional_tags/patches/query_patch.rb +22 -1
  49. data/lib/additional_tags/patches/wiki_page_patch.rb +6 -1
  50. data/lib/additional_tags/plugin_version.rb +1 -1
  51. data/lib/additional_tags/tags.rb +34 -12
  52. data/lib/additional_tags.rb +5 -0
  53. data/package.json +8 -0
  54. metadata +6 -3
@@ -13,6 +13,7 @@ module AdditionalTags
13
13
  alias_method :safe_attributes_without_tags=, :safe_attributes=
14
14
  alias_method :safe_attributes=, :safe_attributes_with_tags=
15
15
 
16
+ validate :validate_tags
16
17
  before_save :sort_tag_list
17
18
  end
18
19
 
@@ -24,7 +25,7 @@ module AdditionalTags
24
25
 
25
26
  def available_tags(**options)
26
27
  options[:project_join] = project_joins
27
- options[:permission] = :view_wiki_pages
28
+ options[:permission] ||= :view_wiki_pages
28
29
  AdditionalTags::Tags.available_tags self, **options
29
30
  end
30
31
 
@@ -106,6 +107,10 @@ module AdditionalTags
106
107
 
107
108
  self.tag_list = AdditionalTags::Tags.sort_tags tag_list
108
109
  end
110
+
111
+ def validate_tags
112
+ errors.add :tag_list, :invalid_mutually_exclusive_tags unless AdditionalTag.valid_mutually_exclusive_tag tag_list
113
+ end
109
114
  end
110
115
  end
111
116
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module AdditionalTags
4
4
  module PluginVersion
5
- VERSION = '1.0.6' unless defined? VERSION
5
+ VERSION = '1.0.7' unless defined? VERSION
6
6
  end
7
7
  end
@@ -3,13 +3,27 @@
3
3
  module AdditionalTags
4
4
  class Tags
5
5
  class << self
6
+ def visible_condition(user, **options)
7
+ permission = options[:permission] || :view_issue_tags
8
+ skip_pre_condition = options[:skip_pre_condition] || true
9
+
10
+ tag_access permission, user, skip_pre_condition: skip_pre_condition
11
+ end
12
+
6
13
  def available_tags(klass, **options)
7
14
  user = options[:user].presence || User.current
8
15
 
9
16
  scope = ActsAsTaggableOn::Tag.where({})
10
- scope = scope.where "#{Project.table_name}.id = ?", options[:project] if options[:project]
17
+ if options[:project]
18
+ scope = if Setting.display_subprojects_issues?
19
+ scope.where subproject_sql(options[:project])
20
+ else
21
+ scope.where projects: { id: options[:project] }
22
+ end
23
+ end
24
+
11
25
  if options[:permission]
12
- scope = scope.where tag_access(options[:permission], user)
26
+ scope = scope.where tag_access(options[:permission], user, skip_pre_condition: options[:skip_pre_condition])
13
27
  elsif options[:visible_condition]
14
28
  scope = scope.where klass.visible_condition(user)
15
29
  end
@@ -18,14 +32,7 @@ module AdditionalTags
18
32
  scope = scope.where "#{TAGGING_TABLE_NAME}.taggable_id!=?", options[:exclude_id] if options[:exclude_id]
19
33
  scope = scope.where options[:where_field] => options[:where_value] if options[:where_field].present? && options[:where_value]
20
34
 
21
- columns = ["#{TAG_TABLE_NAME}.id",
22
- "#{TAG_TABLE_NAME}.name",
23
- "#{TAG_TABLE_NAME}.taggings_count",
24
- "COUNT(DISTINCT #{TAGGING_TABLE_NAME}.taggable_id) AS count"]
25
-
26
- columns << "MIN(#{TAGGING_TABLE_NAME}.created_at) AS last_created" if options[:sort_by] == 'last_created'
27
-
28
- scope.select(columns.to_list)
35
+ scope.select(table_columns(options[:sort_by]))
29
36
  .joins(tag_for_joins(klass, **options.slice(:project_join, :project, :without_projects)))
30
37
  .group("#{TAG_TABLE_NAME}.id, #{TAG_TABLE_NAME}.name, #{TAG_TABLE_NAME}.taggings_count").having('COUNT(*) > 0')
31
38
  .order(build_order_sql(options[:sort_by], options[:order]))
@@ -125,8 +132,23 @@ module AdditionalTags
125
132
  counts
126
133
  end
127
134
 
135
+ def subproject_sql(project)
136
+ "#{Project.table_name}.lft >= #{project.lft} " \
137
+ "AND #{Project.table_name}.rgt <= #{project.rgt}"
138
+ end
139
+
128
140
  private
129
141
 
142
+ def table_columns(sort_by)
143
+ columns = ["#{TAG_TABLE_NAME}.id",
144
+ "#{TAG_TABLE_NAME}.name",
145
+ "#{TAG_TABLE_NAME}.taggings_count",
146
+ "COUNT(DISTINCT #{TAGGING_TABLE_NAME}.taggable_id) AS count"]
147
+
148
+ columns << "MIN(#{TAGGING_TABLE_NAME}.created_at) AS last_created" if sort_by == 'last_created'
149
+ columns.to_list
150
+ end
151
+
130
152
  def status_for_tag_value(scope:, tag_id:, group_id: nil, group_id_is_bool: false)
131
153
  value = if group_id_is_bool || group_id
132
154
  if group_id_is_bool
@@ -176,11 +198,11 @@ module AdditionalTags
176
198
  joins
177
199
  end
178
200
 
179
- def tag_access(permission, user)
201
+ def tag_access(permission, user, skip_pre_condition: false)
180
202
  projects_allowed = if permission.nil?
181
203
  Project.visible.ids
182
204
  else
183
- Project.where(Project.allowed_to_condition(user, permission)).ids
205
+ Project.where(Project.allowed_to_condition(user, permission, skip_pre_condition: skip_pre_condition)).ids
184
206
  end
185
207
 
186
208
  if projects_allowed.present?
@@ -14,6 +14,11 @@ module AdditionalTags
14
14
  setting(:tags_sidebar).present? && setting(:tags_sidebar) != 'none'
15
15
  end
16
16
 
17
+ # color is used by default (if setting is missing, too)
18
+ def use_colors?
19
+ setting(:tags_color_theme).to_s != '0'
20
+ end
21
+
17
22
  private
18
23
 
19
24
  def setup
data/package.json ADDED
@@ -0,0 +1,8 @@
1
+ {
2
+ "dependencies": {},
3
+ "devDependencies": {
4
+ "eslint": "^8.0.0",
5
+ "stylelint": "^14.0.0",
6
+ "stylelint-config-standard": "^29.0.0"
7
+ }
8
+ }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: additional_tags
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.6
4
+ version: 1.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - AlphaNodes
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-10-14 00:00:00.000000000 Z
11
+ date: 2022-12-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: acts-as-taggable-on
@@ -92,6 +92,7 @@ files:
92
92
  - app/helpers/additional_tags_wiki_helper.rb
93
93
  - app/jobs/additional_tags_job.rb
94
94
  - app/jobs/additional_tags_remove_unused_tag_job.rb
95
+ - app/models/additional_tag.rb
95
96
  - app/models/migrate_tag.rb
96
97
  - app/models/migrate_tagging.rb
97
98
  - app/models/query_tags_column.rb
@@ -143,6 +144,7 @@ files:
143
144
  - db/migrate/20201123093214_migrate_existing_tags.rb
144
145
  - doc/images/additional-tags-framework.png
145
146
  - doc/images/additional-tags.gif
147
+ - doc/images/tag-overview.png
146
148
  - init.rb
147
149
  - lib/additional_tags.rb
148
150
  - lib/additional_tags/hooks/model_hook.rb
@@ -175,6 +177,7 @@ files:
175
177
  - lib/additional_tags/plugin_version.rb
176
178
  - lib/additional_tags/tags.rb
177
179
  - lib/tasks/additional_tags.rake
180
+ - package.json
178
181
  homepage: https://github.com/alphanodes/additional_tags
179
182
  licenses:
180
183
  - GPL-2.0
@@ -195,7 +198,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
195
198
  - !ruby/object:Gem::Version
196
199
  version: '0'
197
200
  requirements: []
198
- rubygems_version: 3.3.7
201
+ rubygems_version: 3.3.26
199
202
  signing_key:
200
203
  specification_version: 4
201
204
  summary: Redmine plugin for adding tag functionality