additional_tags 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.eslintrc.yml +17 -0
- data/.github/workflows/brakeman.yml +9 -14
- data/.github/workflows/linters.yml +11 -14
- data/.github/workflows/tests.yml +18 -25
- data/.rubocop.yml +4 -2
- data/.slim-lint.yml +1 -0
- data/README.md +27 -24
- data/additional_tags.gemspec +2 -2
- data/app/controllers/additional_tags_controller.rb +3 -5
- data/app/helpers/additional_tags_helper.rb +16 -10
- data/app/helpers/additional_tags_wiki_helper.rb +45 -5
- data/app/views/additional_tags/settings/_general.html.slim +9 -13
- data/app/views/wiki/tag_index.html.slim +1 -1
- data/assets/javascripts/tags.js +15 -15
- data/assets/stylesheets/tags.css +3 -3
- data/config/locales/bg.yml +4 -4
- data/config/locales/cs.yml +4 -4
- data/config/locales/de.yml +4 -4
- data/config/locales/en.yml +4 -4
- data/config/locales/es.yml +4 -4
- data/config/locales/fr.yml +4 -4
- data/config/locales/it.yml +4 -4
- data/config/locales/ja.yml +4 -4
- data/config/locales/ko.yml +4 -4
- data/config/locales/pl.yml +4 -4
- data/config/locales/pt-BR.yml +4 -4
- data/config/locales/ru.yml +4 -4
- data/init.rb +3 -1
- data/lib/additional_tags.rb +11 -4
- data/lib/additional_tags/hooks.rb +12 -2
- data/lib/additional_tags/patches/agile_query_patch.rb +1 -1
- data/lib/additional_tags/patches/auto_completes_controller_patch.rb +1 -1
- data/lib/additional_tags/patches/time_entry_query_patch.rb +3 -2
- data/lib/additional_tags/patches/wiki_controller_patch.rb +3 -14
- data/lib/additional_tags/patches/wiki_page_patch.rb +22 -1
- data/lib/additional_tags/version.rb +1 -1
- metadata +7 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5f6573f962ff7b251ce5afae13e2659985887d486d320fcb99f4c99892fa8a52
|
4
|
+
data.tar.gz: a258bcf71c8c53b40a5b7bcec92e9b6ff8a7dde6070fe5cfdc3eac0adb3d2ccb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 46e6f62fae40af6b03d6b09a2b237f4049ab4d54ce30289e1fa7a74b9ee7f57df586feb3cf695f4268a86478365fee580db550e9b044c84281fcb464e2fde321
|
7
|
+
data.tar.gz: 8b1c9a8b5873b2b993f27d80186e9c7e0a024e201aba3c0125f47331c6fda50d673cbb1f572c17b2aef1b613b687f6a66c86c17d9b325f8c20e9c2bd8e6bf103
|
data/.eslintrc.yml
ADDED
@@ -12,25 +12,20 @@ jobs:
|
|
12
12
|
|
13
13
|
- name: Install package dependencies
|
14
14
|
run: >
|
15
|
-
sudo apt-get install --yes --quiet
|
16
|
-
pandoc
|
15
|
+
sudo apt-get install --yes --quiet pandoc
|
17
16
|
|
18
|
-
- name:
|
19
|
-
uses: actions/setup-ruby@v1
|
20
|
-
with:
|
21
|
-
ruby-version: 2.6.x
|
22
|
-
|
23
|
-
- name: Set Gemfile
|
17
|
+
- name: Setup Gemfile
|
24
18
|
run: |
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
19
|
+
cp test/support/gemfile.rb Gemfile
|
20
|
+
|
21
|
+
- name: Setup Ruby
|
22
|
+
uses: ruby/setup-ruby@v1
|
23
|
+
with:
|
24
|
+
ruby-version: 2.6
|
25
|
+
bundler-cache: true
|
30
26
|
|
31
27
|
- name: Setup gems
|
32
28
|
run: |
|
33
|
-
gem install bundler
|
34
29
|
bundle install --jobs 4 --retry 3
|
35
30
|
|
36
31
|
- name: Run Brakeman
|
@@ -10,25 +10,22 @@ jobs:
|
|
10
10
|
steps:
|
11
11
|
- uses: actions/checkout@v1
|
12
12
|
|
13
|
-
- name:
|
14
|
-
|
15
|
-
|
16
|
-
ruby-version: 2.6.x
|
13
|
+
- name: Install package dependencies
|
14
|
+
run: >
|
15
|
+
sudo apt-get install --yes --quiet pandoc
|
17
16
|
|
18
|
-
- name:
|
17
|
+
- name: Setup Gemfile
|
19
18
|
run: |
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
echo "end" >> Gemfile
|
19
|
+
cp test/support/gemfile.rb Gemfile
|
20
|
+
|
21
|
+
- name: Setup Ruby
|
22
|
+
uses: ruby/setup-ruby@v1
|
23
|
+
with:
|
24
|
+
ruby-version: 2.6
|
25
|
+
bundler-cache: true
|
28
26
|
|
29
27
|
- name: Setup gems
|
30
28
|
run: |
|
31
|
-
gem install bundler
|
32
29
|
bundle install --jobs 4 --retry 3
|
33
30
|
|
34
31
|
- name: Run RuboCop
|
data/.github/workflows/tests.yml
CHANGED
@@ -10,9 +10,12 @@ jobs:
|
|
10
10
|
|
11
11
|
strategy:
|
12
12
|
matrix:
|
13
|
-
ruby: ['2.6', '2.
|
14
|
-
redmine: ['4.1-stable', 'master']
|
13
|
+
ruby: ['2.7', '2.6', '2.5']
|
14
|
+
redmine: ['4.1-stable', '4.2-stable', 'master']
|
15
15
|
db: ['postgres', 'mysql']
|
16
|
+
exclude:
|
17
|
+
- ruby: '2.7'
|
18
|
+
redmine: 4.1-stable
|
16
19
|
fail-fast: false
|
17
20
|
|
18
21
|
services:
|
@@ -32,13 +35,12 @@ jobs:
|
|
32
35
|
--health-retries 5
|
33
36
|
|
34
37
|
mysql:
|
35
|
-
image: mysql:
|
38
|
+
image: mysql:8.0
|
36
39
|
env:
|
37
|
-
|
38
|
-
MYSQL_PASSWORD: ''
|
39
|
-
MYSQL_ALLOW_EMPTY_PASSWORD: yes
|
40
|
+
MYSQL_ROOT_PASSWORD: 'BestPasswordEver'
|
40
41
|
ports:
|
41
|
-
|
42
|
+
# will assign a random free host port
|
43
|
+
- 3306/tcp
|
42
44
|
options: >-
|
43
45
|
--health-cmd="mysqladmin ping"
|
44
46
|
--health-interval=10s
|
@@ -48,7 +50,7 @@ jobs:
|
|
48
50
|
steps:
|
49
51
|
- name: Verify MySQL connection from host
|
50
52
|
run: |
|
51
|
-
mysql --host 127.0.0.1 --port 3306 -uroot -e "SHOW DATABASES"
|
53
|
+
mysql --host 127.0.0.1 --port ${{ job.services.mysql.ports[3306] }} -uroot -pBestPasswordEver -e "SHOW DATABASES"
|
52
54
|
if: matrix.db == 'mysql'
|
53
55
|
|
54
56
|
- name: Checkout Redmine
|
@@ -82,37 +84,27 @@ jobs:
|
|
82
84
|
libmysqlclient-dev
|
83
85
|
|
84
86
|
- name: Setup Ruby
|
85
|
-
uses:
|
87
|
+
uses: ruby/setup-ruby@v1
|
86
88
|
with:
|
87
89
|
ruby-version: ${{ matrix.ruby }}
|
88
|
-
|
89
|
-
- name: Setup Cache
|
90
|
-
uses: actions/cache@v1
|
91
|
-
with:
|
92
|
-
path: vendor
|
93
|
-
key: v1-ruby-${{ matrix.ruby }}-redmine-${{ matrix.redmine }}
|
94
|
-
|
95
|
-
- name: Setup Bundler
|
96
|
-
run: |
|
97
|
-
gem install bundler -v '~> 1.0'
|
98
|
-
bundle config path "$(pwd)/vendor/bundle"
|
90
|
+
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
|
99
91
|
|
100
92
|
- name: Prepare Redmine source
|
101
93
|
working-directory: redmine
|
102
94
|
run: |
|
103
|
-
sed -i '/rubocop/d' Gemfile
|
104
|
-
rm -f .rubocop*
|
105
95
|
cp plugins/additional_tags/test/support/database-${{ matrix.db }}.yml config/database.yml
|
106
96
|
cp plugins/additional_tags/test/support/configuration.yml config/configuration.yml
|
107
97
|
|
108
98
|
- name: Install Ruby dependencies
|
109
99
|
working-directory: redmine
|
110
100
|
run: |
|
111
|
-
bundle
|
101
|
+
bundle config set --local without 'development'
|
102
|
+
bundle install --jobs=4 --retry=3
|
112
103
|
|
113
104
|
- name: Generate session store secret
|
114
105
|
env:
|
115
106
|
RAILS_ENV: test
|
107
|
+
MYSQL_PORT: ${{ job.services.mysql.ports[3306] }}
|
116
108
|
working-directory: redmine
|
117
109
|
run: |
|
118
110
|
bundle exec rake generate_secret_token
|
@@ -120,6 +112,7 @@ jobs:
|
|
120
112
|
- name: Run Redmine DB and migration tasks
|
121
113
|
env:
|
122
114
|
RAILS_ENV: test
|
115
|
+
MYSQL_PORT: ${{ job.services.mysql.ports[3306] }}
|
123
116
|
working-directory: redmine
|
124
117
|
run: |
|
125
118
|
bundle exec rake db:create db:migrate redmine:plugins:migrate
|
@@ -127,13 +120,13 @@ jobs:
|
|
127
120
|
- name: Run tests
|
128
121
|
env:
|
129
122
|
RAILS_ENV: test
|
130
|
-
|
123
|
+
MYSQL_PORT: ${{ job.services.mysql.ports[3306] }}
|
131
124
|
working-directory: redmine
|
132
125
|
run: bundle exec rake redmine:plugins:test NAME=additional_tags RUBYOPT="-W0"
|
133
126
|
|
134
127
|
- name: Run uninstall test
|
135
128
|
env:
|
136
129
|
RAILS_ENV: test
|
137
|
-
|
130
|
+
MYSQL_PORT: ${{ job.services.mysql.ports[3306] }}
|
138
131
|
working-directory: redmine
|
139
132
|
run: bundle exec rake redmine:plugins:migrate NAME=additional_tags VERSION=0
|
data/.rubocop.yml
CHANGED
@@ -6,7 +6,7 @@ Rails:
|
|
6
6
|
Enabled: true
|
7
7
|
|
8
8
|
AllCops:
|
9
|
-
TargetRubyVersion: 2.
|
9
|
+
TargetRubyVersion: 2.5
|
10
10
|
TargetRailsVersion: 5.2
|
11
11
|
NewCops: enable
|
12
12
|
|
@@ -72,4 +72,6 @@ Style/HashTransformValues:
|
|
72
72
|
Enabled: false
|
73
73
|
|
74
74
|
Naming/VariableNumber:
|
75
|
-
Enabled:
|
75
|
+
Enabled: true
|
76
|
+
Exclude:
|
77
|
+
- 'test/**/*'
|
data/.slim-lint.yml
CHANGED
data/README.md
CHANGED
@@ -30,33 +30,32 @@ Start using it, too. The example image shows the centralized tag management in t
|
|
30
30
|
|
31
31
|

|
32
32
|
|
33
|
-
|
34
33
|
## Why another Tag plugin?
|
35
34
|
|
36
|
-
1.
|
37
|
-
2.
|
38
|
-
3.
|
39
|
-
4.
|
35
|
+
1. Main reason: a stable tag solution for a current Redmine version is needed - NOW
|
36
|
+
2. Other plugins are no longer maintained or not available on a public community plattform as github or gitlab
|
37
|
+
3. Redmine (core) does not support tags. A feature request for issue tags exists since 2008, see [#1448](https://www.redmine.org/issues/1448).
|
38
|
+
4. Lots of plugins are using its own tag implementation (redmine_knowledgebase, redmine_contacts, redmine_products, redmine_passwords, redmine_db, ....). A common functional base was required. This plugin closes this gap. It would be great, if other plugins would use ``additional_tags`` for it.
|
40
39
|
|
41
40
|
## Requirements
|
42
41
|
|
43
|
-
-
|
44
|
-
-
|
45
|
-
-
|
42
|
+
- Redmine `>= 4.1.0`
|
43
|
+
- Ruby `>= 2.5`
|
44
|
+
- Redmine plugins: [additionals](https://www.redmine.org/plugins/additionals)
|
46
45
|
|
47
46
|
## Installing
|
48
47
|
|
49
|
-
|
48
|
+
### 1. Get right plugin version
|
50
49
|
|
51
|
-
|
50
|
+
To install stable version of additional_tags, use
|
52
51
|
|
53
52
|
```shell
|
54
|
-
cd
|
55
|
-
git clone https://github.com/alphanodes/additionals.git
|
56
|
-
git clone https://github.com/alphanodes/additional_tags.git
|
53
|
+
cd $REDMINE_ROOT
|
54
|
+
git clone -b stable https://www.github.com/alphanodes/additionals.git plugins/additionals
|
55
|
+
git clone -b 1.0.0 https://www.github.com/alphanodes/additional_tags.git plugins/additional_tags
|
57
56
|
```
|
58
57
|
|
59
|
-
|
58
|
+
It is also possible to use stable version as a gem package as an alternative. If you want it, add this to your $REDMINE_ROOT/Gemfile.local:
|
60
59
|
|
61
60
|
```ruby
|
62
61
|
gem 'additional_tags'
|
@@ -65,15 +64,22 @@ gem 'additional_tags'
|
|
65
64
|
At the moment, additionals should be installed before using gem method. In later versions
|
66
65
|
addtionals plugins is usable as gem, too.
|
67
66
|
|
68
|
-
|
67
|
+
If you want to use the latest development version, use
|
68
|
+
|
69
|
+
```shell
|
70
|
+
cd $REDMINE_ROOT
|
71
|
+
git clone https://github.com/alphanodes/additionals.git plugins/additionals
|
72
|
+
git clone https://github.com/alphanodes/additional_tags.git plugins/additional_tags
|
73
|
+
```
|
74
|
+
|
75
|
+
### 2. Install dependencies and migrate database.
|
69
76
|
|
70
77
|
```shell
|
71
78
|
bundle install
|
72
79
|
bundle exec rake redmine:plugins:migrate RAILS_ENV=production
|
73
80
|
```
|
74
81
|
|
75
|
-
3.
|
76
|
-
|
82
|
+
### 3. Restart your Redmine web server.
|
77
83
|
|
78
84
|
## Running tests
|
79
85
|
|
@@ -95,12 +101,11 @@ If you use [redmine_tags](https://github.com/ixti/redmine_tags) or [redmineup_ta
|
|
95
101
|
``additional_tags`` uses its own database tables, to prevent conflicts with other plugins (e.g. redmine_knowledgebase, redmine_contacts, etc)
|
96
102
|
To migrate your data to ``additional_tags`` use the following steps (order is important):
|
97
103
|
|
98
|
-
1.
|
99
|
-
2.
|
104
|
+
1. Remove plugin directory of your old plugin, e.g plugin/redmine_tags
|
105
|
+
2. Install ``additional_tags`` as is descript above (this automatically migrate data to new tables)
|
100
106
|
|
101
107
|
The old database tables are existing after these steps.
|
102
108
|
|
103
|
-
|
104
109
|
## Uninstall
|
105
110
|
|
106
111
|
```shell
|
@@ -109,18 +114,16 @@ bundle exec rake redmine:plugins:migrate NAME=additional_tags VERSION=0 RAILS_EN
|
|
109
114
|
rm -rf plugins/additional_tags
|
110
115
|
```
|
111
116
|
|
112
|
-
|
113
117
|
## License
|
114
118
|
|
115
119
|
This plugin is licensed under the terms of GNU/GPL v2.
|
116
120
|
See LICENSE for details.
|
117
121
|
|
118
|
-
|
119
122
|
## Credits
|
120
123
|
|
121
124
|
The source code is a (almost) rewrite of
|
122
125
|
|
123
|
-
|
124
|
-
|
126
|
+
- [redmine_tags](https://github.com/ixti/redmine_tags)
|
127
|
+
- [redmineup_tags](https://www.redmine.org/plugins/redmineup_tags)
|
125
128
|
|
126
129
|
Special thanks to the original author and contributors for making this awesome hook for Redmine.
|
data/additional_tags.gemspec
CHANGED
@@ -19,9 +19,9 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.bindir = 'exe'
|
20
20
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
21
21
|
spec.require_paths = ['lib']
|
22
|
-
spec.required_ruby_version = '>= 2.
|
22
|
+
spec.required_ruby_version = '>= 2.5'
|
23
23
|
|
24
|
-
spec.add_runtime_dependency 'acts-as-taggable-on', '~>
|
24
|
+
spec.add_runtime_dependency 'acts-as-taggable-on', '~> 7.0'
|
25
25
|
|
26
26
|
spec.add_development_dependency 'bundler'
|
27
27
|
spec.add_development_dependency 'rake'
|
@@ -10,11 +10,9 @@ class AdditionalTagsController < ApplicationController
|
|
10
10
|
|
11
11
|
def destroy
|
12
12
|
@tags.each do |tag|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
Rails.logger.warn "Tag #{tag} could not be deleted"
|
17
|
-
end
|
13
|
+
tag.reload.destroy
|
14
|
+
rescue ::ActiveRecord::RecordNotFound
|
15
|
+
Rails.logger.warn "Tag #{tag} could not be deleted"
|
18
16
|
end
|
19
17
|
redirect_back_or_default @tag_list_path
|
20
18
|
end
|
@@ -104,9 +104,12 @@ module AdditionalTagsHelper
|
|
104
104
|
options[:link],
|
105
105
|
style: tag_style
|
106
106
|
elsif options[:link_wiki_tag]
|
107
|
-
|
108
|
-
|
109
|
-
|
107
|
+
link = if options[:project].present?
|
108
|
+
project_wiki_index_path options[:project], tag: tag_object.name
|
109
|
+
else
|
110
|
+
wiki_path tag_object.name
|
111
|
+
end
|
112
|
+
link_to safe_join(tag_name), link, style: tag_style
|
110
113
|
else
|
111
114
|
link_to safe_join(tag_name),
|
112
115
|
tag_url(tag_object.name, options),
|
@@ -146,19 +149,22 @@ module AdditionalTagsHelper
|
|
146
149
|
s.join sep
|
147
150
|
end
|
148
151
|
|
152
|
+
def additional_tag_sep(use_colors)
|
153
|
+
if use_colors.nil? || use_colors
|
154
|
+
' '
|
155
|
+
else
|
156
|
+
', '
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
149
160
|
def additional_tag_links(tag_list, options = {})
|
150
161
|
return if tag_list.blank?
|
151
162
|
|
152
|
-
sep = if options[:use_colors].nil? || options[:use_colors]
|
153
|
-
' '
|
154
|
-
else
|
155
|
-
', '
|
156
|
-
end
|
157
|
-
|
158
163
|
unsorted = options.delete(:unsorted)
|
159
164
|
tag_list = AdditionalTags::Tags.sort_tag_list(tag_list) unless unsorted
|
160
165
|
|
161
|
-
safe_join tag_list.map { |tag| additional_tag_link tag, options },
|
166
|
+
safe_join tag_list.map { |tag| additional_tag_link tag, options },
|
167
|
+
additional_tag_sep(options[:use_colors])
|
162
168
|
end
|
163
169
|
|
164
170
|
private
|
@@ -8,10 +8,50 @@ module AdditionalTagsWikiHelper
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def render_sidebar_tags
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
11
|
+
options = { show_count: AdditionalTags.setting?(:show_with_count),
|
12
|
+
style: AdditionalTags.setting(:tags_sidebar).to_sym,
|
13
|
+
link_wiki_tag: true,
|
14
|
+
project: @project }
|
15
|
+
|
16
|
+
render_tags_list sidebar_tags, options
|
17
|
+
end
|
18
|
+
|
19
|
+
def render_wiki_index_title(project, tag = nil)
|
20
|
+
if tag.present?
|
21
|
+
if project.nil?
|
22
|
+
title = [link_to(l(:label_wiki), wiki_index_path)]
|
23
|
+
title << Additionals::LIST_SEPARATOR
|
24
|
+
title << t(:label_wiki_index_for_tag_html, tag: tag)
|
25
|
+
safe_join title, ' '
|
26
|
+
else
|
27
|
+
t :label_wiki_index_for_tag_html, tag: tag
|
28
|
+
end
|
29
|
+
else
|
30
|
+
l :label_wiki
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def wiki_pages_with_tag(tag, project = nil)
|
35
|
+
wiki = project&.wiki
|
36
|
+
|
37
|
+
scope = if wiki
|
38
|
+
wiki.pages
|
39
|
+
else
|
40
|
+
WikiPage.joins(wiki: :project)
|
41
|
+
end
|
42
|
+
|
43
|
+
scope = scope.visible(User.current, project: project) if scope.respond_to? :visible
|
44
|
+
|
45
|
+
scope = scope.joins(AdditionalTags::Tags.tag_to_joins(WikiPage))
|
46
|
+
.where("LOWER(#{ActiveRecord::Base.connection.quote_table_name(ActsAsTaggableOn.tags_table)}.name) = LOWER(:p)",
|
47
|
+
p: tag.to_s.strip)
|
48
|
+
.with_updated_on
|
49
|
+
.joins(wiki: :project)
|
50
|
+
|
51
|
+
if wiki.nil?
|
52
|
+
scope.order "#{Project.table_name}.name, #{WikiPage.table_name}.title"
|
53
|
+
else
|
54
|
+
scope.includes(:parent).order "#{WikiPage.table_name}.title"
|
55
|
+
end
|
16
56
|
end
|
17
57
|
end
|
@@ -2,30 +2,26 @@ fieldset.settings
|
|
2
2
|
legend = l :label_general
|
3
3
|
|
4
4
|
p
|
5
|
-
=
|
6
|
-
|
7
|
-
|
8
|
-
@settings[:tags_sidebar])
|
5
|
+
= additionals_settings_select :tags_sidebar,
|
6
|
+
options_for_select(%w[none list cloud simple_cloud].collect { |v| [l("tags_sidebar_#{v}"), v] },
|
7
|
+
@settings[:tags_sidebar])
|
9
8
|
|
10
9
|
p
|
11
10
|
= additionals_settings_checkbox :show_with_count
|
12
11
|
|
13
12
|
p
|
14
|
-
=
|
15
|
-
|
16
|
-
|
17
|
-
@settings[:tags_sort_by])
|
13
|
+
= additionals_settings_select :tags_sort_by,
|
14
|
+
options_for_select(%w[name count].collect { |v| [l("tags_sort_by_#{v}"), v] },
|
15
|
+
@settings[:tags_sort_by])
|
18
16
|
'
|
19
17
|
= select_tag 'settings[tags_sort_order]',
|
20
18
|
options_for_select([[l(:label_ascending), 'asc'], [l(:label_descending), 'desc']],
|
21
19
|
@settings[:tags_sort_order])
|
22
20
|
|
23
21
|
p
|
24
|
-
=
|
25
|
-
|
26
|
-
|
27
|
-
@settings['tags_suggestion_order'])
|
28
|
-
|
22
|
+
= additionals_settings_select :tags_suggestion_order,
|
23
|
+
options_for_select(%w[name last_created count].collect { |v| [l("tags_order_by_#{v}"), v] },
|
24
|
+
@settings['tags_suggestion_order'])
|
29
25
|
p
|
30
26
|
= additionals_settings_checkbox :use_colors
|
31
27
|
|
@@ -2,7 +2,7 @@
|
|
2
2
|
- if User.current.allowed_to? :edit_wiki_pages, @project
|
3
3
|
= link_to l(:label_wiki_page_new), new_project_wiki_page_path(@project), remote: true, class: 'icon icon-add'
|
4
4
|
|
5
|
-
h2 =
|
5
|
+
h2 = render_wiki_index_title @project, @tag
|
6
6
|
|
7
7
|
- if @pages.empty?
|
8
8
|
p.nodata = l :label_no_data
|
data/assets/javascripts/tags.js
CHANGED
@@ -1,19 +1,19 @@
|
|
1
1
|
$(function () {
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
2
|
+
$('body').on('click', '.most_used_tags .most_used_tag', function (e) {
|
3
|
+
var $tagsSelect = $('select#issue_tag_list');
|
4
|
+
var tag = e.target.innerText;
|
5
|
+
if ($tagsSelect.find('option[value=\'' + tag + '\']').length === 0) {
|
6
|
+
var newOption = new Option(tag, tag, true, true);
|
7
|
+
$tagsSelect.append(newOption).trigger('change');
|
8
|
+
}
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
10
|
+
var mostUsedTags = $.grep(mostUsedTags, function(t) { return t != tag; });
|
11
|
+
var tagsHtml = mostUsedTags.map(function(tag) {
|
12
|
+
return '<span class="most_used_tag">' + tag + '</span>';
|
13
|
+
}).join(', ');
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
15
|
+
var $mostUsedTagsContainer = $(e.target).parent('.most_used_tags');
|
16
|
+
$mostUsedTagsContainer.empty();
|
17
|
+
$mostUsedTagsContainer.append(tagsHtml);
|
18
|
+
});
|
19
19
|
});
|
data/assets/stylesheets/tags.css
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
/* stylelint-disable font-family-no-missing-generic-family-keyword */
|
2
2
|
|
3
|
-
#admin-menu a.tags::before {
|
3
|
+
#admin-menu a.additional-tags::before {
|
4
4
|
font-family: Font Awesome\ 5 Free;
|
5
5
|
font-size: 1.2em;
|
6
6
|
font-weight: 900;
|
@@ -8,12 +8,12 @@
|
|
8
8
|
padding-right: 4px;
|
9
9
|
}
|
10
10
|
|
11
|
-
#admin-menu a.tags {
|
11
|
+
#admin-menu a.additional-tags {
|
12
12
|
padding-left: 0;
|
13
13
|
}
|
14
14
|
|
15
15
|
/* Mobile menu style FontAwesome icon */
|
16
|
-
.flyout-is-active #admin-menu li a.tags {
|
16
|
+
.flyout-is-active #admin-menu li a.additional-tags {
|
17
17
|
padding-left: 8px !important;
|
18
18
|
}
|
19
19
|
|
data/config/locales/bg.yml
CHANGED
@@ -12,7 +12,7 @@ bg:
|
|
12
12
|
label_show_with_count: "Показване на брой маркирани обекти"
|
13
13
|
label_tags_tag: "Маркер"
|
14
14
|
label_use_colors: "Използване на цветове"
|
15
|
-
|
15
|
+
label_wiki_index_for_tag_html: "Wiki страници с маркер <em>%{tag}</em>"
|
16
16
|
notice_failed_to_add_tags: "Добавянето на маркери е неуспешно"
|
17
17
|
notice_tags_added: "Маркерите са добавени"
|
18
18
|
permission_add_wiki_tags: "Добавяне на маркери за wiki страници"
|
@@ -26,8 +26,8 @@ bg:
|
|
26
26
|
tags_sidebar_list: "Списък"
|
27
27
|
tags_sidebar_none: "Не"
|
28
28
|
tags_sidebar_simple_cloud: "Обикновен облак"
|
29
|
-
|
29
|
+
label_tags_sidebar: "Показване на маркерите в страничния панел"
|
30
30
|
tags_sort_by_count: "брой обекти"
|
31
31
|
tags_sort_by_name: "Име"
|
32
|
-
|
33
|
-
|
32
|
+
label_tags_sort_by: "Сортиране на маркерите по"
|
33
|
+
label_tags_suggestion_order: "Ред на предлагане"
|
data/config/locales/cs.yml
CHANGED
@@ -12,7 +12,7 @@ cs:
|
|
12
12
|
label_show_with_count: "Zobrazit částku na značce"
|
13
13
|
label_tags_tag: "Tag"
|
14
14
|
label_use_colors: "Použijte barvy"
|
15
|
-
|
15
|
+
label_wiki_index_for_tag_html: "Wiki stránky se značkou <em>%{tag}</em>"
|
16
16
|
notice_failed_to_add_tags: "Přidání značek se nezdařilo"
|
17
17
|
notice_tags_added: "Přidány značky"
|
18
18
|
permission_add_wiki_tags: "Přidejte značky wiki"
|
@@ -26,8 +26,8 @@ cs:
|
|
26
26
|
tags_sidebar_list: "Seznam"
|
27
27
|
tags_sidebar_none: "Žádný"
|
28
28
|
tags_sidebar_simple_cloud: "Simple cloud"
|
29
|
-
|
29
|
+
label_tags_sidebar: "Zobrazit značky na postranním panelu jako"
|
30
30
|
tags_sort_by_count: "Počet"
|
31
31
|
tags_sort_by_name: "Název"
|
32
|
-
|
33
|
-
|
32
|
+
label_tags_sort_by: "Řazení značek podle"
|
33
|
+
label_tags_suggestion_order: "Objednávka návrhu"
|
data/config/locales/de.yml
CHANGED
@@ -12,7 +12,7 @@ de:
|
|
12
12
|
label_show_with_count: Zeige Anzahl zu TAG
|
13
13
|
label_tags_tag: TAG
|
14
14
|
label_use_colors: Farben verwenden
|
15
|
-
|
15
|
+
label_wiki_index_for_tag_html: Wiki Seiten mit TAG <em>%{tag}</em>
|
16
16
|
notice_failed_to_add_tags: Fehler beim hinzufügen der TAGs
|
17
17
|
notice_tags_added: Tags hinzugefügt
|
18
18
|
permission_add_wiki_tags: Wiki TAGs hinzufügen
|
@@ -26,8 +26,8 @@ de:
|
|
26
26
|
tags_sidebar_list: Liste
|
27
27
|
tags_sidebar_none: Keine
|
28
28
|
tags_sidebar_simple_cloud: Einfache Cloud
|
29
|
-
|
29
|
+
label_tags_sidebar: Zeige TAGs in der Sidebar
|
30
30
|
tags_sort_by_count: Anzahl
|
31
31
|
tags_sort_by_name: Name
|
32
|
-
|
33
|
-
|
32
|
+
label_tags_sort_by: Sortiere TAGs nach
|
33
|
+
label_tags_suggestion_order: Reihenfolge der Vorschläge
|
data/config/locales/en.yml
CHANGED
@@ -12,7 +12,7 @@ en:
|
|
12
12
|
label_show_with_count: "Display amount on tag"
|
13
13
|
label_tags_tag: "Tag"
|
14
14
|
label_use_colors: "Use colors"
|
15
|
-
|
15
|
+
label_wiki_index_for_tag_html: "Wiki pages with tag <em>%{tag}</em>"
|
16
16
|
notice_failed_to_add_tags: "Failed to add tags"
|
17
17
|
notice_tags_added: "Tags added"
|
18
18
|
permission_add_wiki_tags: "Add wiki tags"
|
@@ -26,8 +26,8 @@ en:
|
|
26
26
|
tags_sidebar_list: "List"
|
27
27
|
tags_sidebar_none: "None"
|
28
28
|
tags_sidebar_simple_cloud: "Simple cloud"
|
29
|
-
|
29
|
+
label_tags_sidebar: "Display tags on sidebar as"
|
30
30
|
tags_sort_by_count: "Count"
|
31
31
|
tags_sort_by_name: "Name"
|
32
|
-
|
33
|
-
|
32
|
+
label_tags_sort_by: "Sort tags by"
|
33
|
+
label_tags_suggestion_order: "Suggestion order"
|
data/config/locales/es.yml
CHANGED
@@ -12,7 +12,7 @@ es:
|
|
12
12
|
label_show_with_count: "Mostrar la cantidad en la tags"
|
13
13
|
label_tags_tag: "Tag"
|
14
14
|
label_use_colors: "Usar los colores"
|
15
|
-
|
15
|
+
label_wiki_index_for_tag_html: "Páginas Wiki con la tags <em>%{tag}</em>"
|
16
16
|
notice_failed_to_add_tags: "No se han añadido tags"
|
17
17
|
notice_tags_added: "Tags añadidas"
|
18
18
|
permission_add_wiki_tags: "Añadir tags wiki"
|
@@ -26,8 +26,8 @@ es:
|
|
26
26
|
tags_sidebar_list: "Lista"
|
27
27
|
tags_sidebar_none: "Ninguno"
|
28
28
|
tags_sidebar_simple_cloud: "Simple cloud"
|
29
|
-
|
29
|
+
label_tags_sidebar: "Mostrar las tags en la barra lateral como"
|
30
30
|
tags_sort_by_count: "Cuenta"
|
31
31
|
tags_sort_by_name: "Nombre"
|
32
|
-
|
33
|
-
|
32
|
+
label_tags_sort_by: "Ordenar las tags por"
|
33
|
+
label_tags_suggestion_order: "Orden de sugerencia"
|
data/config/locales/fr.yml
CHANGED
@@ -12,7 +12,7 @@ fr:
|
|
12
12
|
label_show_with_count: "Afficher le montant sur l'tags"
|
13
13
|
label_tags_tag: "Tag"
|
14
14
|
label_use_colors: "Utiliser les couleurs"
|
15
|
-
|
15
|
+
label_wiki_index_for_tag_html: "Pages wiki avec la tags <em>%{tag}</em>"
|
16
16
|
notice_failed_to_add_tags: "Omission d'ajouter des tags"
|
17
17
|
notice_tags_added: "Tags ajoutés"
|
18
18
|
permission_add_wiki_tags: "Ajouter des tags wiki"
|
@@ -26,8 +26,8 @@ fr:
|
|
26
26
|
tags_sidebar_list: "Liste"
|
27
27
|
tags_sidebar_none: "Aucune"
|
28
28
|
tags_sidebar_simple_cloud: "Simple cloud"
|
29
|
-
|
29
|
+
label_tags_sidebar: "Afficher les tags sur la barre latérale comme"
|
30
30
|
tags_sort_by_count: "Compter"
|
31
31
|
tags_sort_by_name: "Nom"
|
32
|
-
|
33
|
-
|
32
|
+
label_tags_sort_by: "Trier les balises par"
|
33
|
+
label_tags_suggestion_order: "Ordre de suggestion"
|
data/config/locales/it.yml
CHANGED
@@ -12,7 +12,7 @@ it:
|
|
12
12
|
label_show_with_count: "Visualizzare l'importo sul tag"
|
13
13
|
label_tags_tag: "Tag"
|
14
14
|
label_use_colors: "Utilizzare i colori"
|
15
|
-
|
15
|
+
label_wiki_index_for_tag_html: "Pagine Wiki con tag <em>%{tag}</em>"
|
16
16
|
notice_failed_to_add_tags: "Non è stato possibile aggiungere tag"
|
17
17
|
notice_tags_added: "Tag aggiunti"
|
18
18
|
permission_add_wiki_tags: "Aggiungi tag wiki"
|
@@ -26,8 +26,8 @@ it:
|
|
26
26
|
tags_sidebar_list: "Elenco"
|
27
27
|
tags_sidebar_none: "Nessuno"
|
28
28
|
tags_sidebar_simple_cloud: "Simple cloud"
|
29
|
-
|
29
|
+
label_tags_sidebar: "Visualizzare i tag sulla barra laterale come"
|
30
30
|
tags_sort_by_count: "Contate"
|
31
31
|
tags_sort_by_name: "Nome"
|
32
|
-
|
33
|
-
|
32
|
+
label_tags_sort_by: "Ordina i tag per"
|
33
|
+
label_tags_suggestion_order: "Ordine di suggerimento"
|
data/config/locales/ja.yml
CHANGED
@@ -12,7 +12,7 @@ ja:
|
|
12
12
|
label_show_with_count: "タグに金額を表示"
|
13
13
|
label_tags_tag: "Tag"
|
14
14
|
label_use_colors: "色を使う"
|
15
|
-
|
15
|
+
label_wiki_index_for_tag_html: "タグが付いているウィキのページ <em>%{tag}</em>"
|
16
16
|
notice_failed_to_add_tags: "タグの追加に失敗"
|
17
17
|
notice_tags_added: "追加されたタグ"
|
18
18
|
permission_add_wiki_tags: "wikiタグの追加"
|
@@ -26,8 +26,8 @@ ja:
|
|
26
26
|
tags_sidebar_list: "リスト"
|
27
27
|
tags_sidebar_none: "なし"
|
28
28
|
tags_sidebar_simple_cloud: "シンプルなクラウド"
|
29
|
-
|
29
|
+
label_tags_sidebar: "サイドバーにタグを"
|
30
30
|
tags_sort_by_count: "伯爵"
|
31
31
|
tags_sort_by_name: "名前"
|
32
|
-
|
33
|
-
|
32
|
+
label_tags_sort_by: "タグを並べ替える"
|
33
|
+
label_tags_suggestion_order: "ご提案の順番"
|
data/config/locales/ko.yml
CHANGED
@@ -12,7 +12,7 @@ ko:
|
|
12
12
|
label_show_with_count: "태그에 금액 표시"
|
13
13
|
label_tags_tag: "Tag"
|
14
14
|
label_use_colors: "색상 사용"
|
15
|
-
|
15
|
+
label_wiki_index_for_tag_html: "태그가있는 위키 페이지 <em>%{tag}</em>"
|
16
16
|
notice_failed_to_add_tags: "태그를 추가하지 못했습니다."
|
17
17
|
notice_tags_added: "추가 된 태그"
|
18
18
|
permission_add_wiki_tags: "위키 태그 추가"
|
@@ -26,8 +26,8 @@ ko:
|
|
26
26
|
tags_sidebar_list: "명부"
|
27
27
|
tags_sidebar_none: "없음"
|
28
28
|
tags_sidebar_simple_cloud: "단순 클라우드"
|
29
|
-
|
29
|
+
label_tags_sidebar: "사이드 바에 태그 표시"
|
30
30
|
tags_sort_by_count: "카운트"
|
31
31
|
tags_sort_by_name: "이름"
|
32
|
-
|
33
|
-
|
32
|
+
label_tags_sort_by: "태그 정렬 기준"
|
33
|
+
label_tags_suggestion_order: "제안 순서"
|
data/config/locales/pl.yml
CHANGED
@@ -12,7 +12,7 @@ pl:
|
|
12
12
|
label_show_with_count: "Wyświetlanie ilości na etykiecie"
|
13
13
|
label_tags_tag: "Tag"
|
14
14
|
label_use_colors: "Używaj kolorów"
|
15
|
-
|
15
|
+
label_wiki_index_for_tag_html: "Strony Wiki z tagiem <em>%{tag}</em>"
|
16
16
|
notice_failed_to_add_tags: "Nie dodano znaczników"
|
17
17
|
notice_tags_added: "Tagi dodane"
|
18
18
|
permission_add_wiki_tags: "Dodaj znaczniki wiki"
|
@@ -26,8 +26,8 @@ pl:
|
|
26
26
|
tags_sidebar_list: "Lista"
|
27
27
|
tags_sidebar_none: "Brak"
|
28
28
|
tags_sidebar_simple_cloud: "Simple cloud"
|
29
|
-
|
29
|
+
label_tags_sidebar: "Wyświetlać znaczniki na pasku bocznym jako"
|
30
30
|
tags_sort_by_count: "Hrabia"
|
31
31
|
tags_sort_by_name: "Nazwa"
|
32
|
-
|
33
|
-
|
32
|
+
label_tags_sort_by: "Sortuj znaczniki według"
|
33
|
+
label_tags_suggestion_order: "Zamówienie ofertowe"
|
data/config/locales/pt-BR.yml
CHANGED
@@ -12,7 +12,7 @@ pt-BR:
|
|
12
12
|
label_show_with_count: "Mostrar quantidade na etiqueta"
|
13
13
|
label_tags_tag: "Tag"
|
14
14
|
label_use_colors: "Usar cores"
|
15
|
-
|
15
|
+
label_wiki_index_for_tag_html: "Páginas Wiki com tag <em>%{tag}</em>"
|
16
16
|
notice_failed_to_add_tags: "Falha em adicionar tags"
|
17
17
|
notice_tags_added: "Tags adicionadas"
|
18
18
|
permission_add_wiki_tags: "Adicionar etiquetas wiki"
|
@@ -26,8 +26,8 @@ pt-BR:
|
|
26
26
|
tags_sidebar_list: "Lista"
|
27
27
|
tags_sidebar_none: "Nenhum"
|
28
28
|
tags_sidebar_simple_cloud: "Simple cloud"
|
29
|
-
|
29
|
+
label_tags_sidebar: "Mostrar etiquetas na barra lateral como"
|
30
30
|
tags_sort_by_count: "Conde"
|
31
31
|
tags_sort_by_name: "Nome"
|
32
|
-
|
33
|
-
|
32
|
+
label_tags_sort_by: "Ordenar tags por"
|
33
|
+
label_tags_suggestion_order: "Pedido de sugestão"
|
data/config/locales/ru.yml
CHANGED
@@ -12,7 +12,7 @@ ru:
|
|
12
12
|
label_show_with_count: "Отображаемое количество на теге"
|
13
13
|
label_tags_tag: "Tag"
|
14
14
|
label_use_colors: "Использовать цвета"
|
15
|
-
|
15
|
+
label_wiki_index_for_tag_html: "Вики-страницы с тегом <em>%{tag}</em>"
|
16
16
|
notice_failed_to_add_tags: "Не удалось добавить теги"
|
17
17
|
notice_tags_added: "Теги добавлены"
|
18
18
|
permission_add_wiki_tags: "Добавить вики-теги"
|
@@ -26,8 +26,8 @@ ru:
|
|
26
26
|
tags_sidebar_list: "Список"
|
27
27
|
tags_sidebar_none: "Нет"
|
28
28
|
tags_sidebar_simple_cloud: "Simple cloud"
|
29
|
-
|
29
|
+
label_tags_sidebar: "DОтображать теги на боковой панели как"
|
30
30
|
tags_sort_by_count: "Посчитать"
|
31
31
|
tags_sort_by_name: "Имя"
|
32
|
-
|
33
|
-
|
32
|
+
label_tags_sort_by: "Сортировать метки по"
|
33
|
+
label_tags_suggestion_order: "Порядок предложения"
|
data/init.rb
CHANGED
@@ -23,7 +23,9 @@ Redmine::Plugin.register :additional_tags do
|
|
23
23
|
end
|
24
24
|
|
25
25
|
menu :admin_menu,
|
26
|
-
:
|
26
|
+
:additional_tags,
|
27
|
+
{ controller: 'settings', action: 'plugin', id: 'additional_tags' },
|
28
|
+
caption: :field_tags
|
27
29
|
end
|
28
30
|
|
29
31
|
Rails.configuration.to_prepare do
|
data/lib/additional_tags.rb
CHANGED
@@ -69,10 +69,17 @@ module AdditionalTags
|
|
69
69
|
setting(:tags_sidebar).present? && setting(:tags_sidebar) != 'none'
|
70
70
|
end
|
71
71
|
|
72
|
-
def sql_for_tags_field(klass, operator,
|
73
|
-
compare
|
74
|
-
|
75
|
-
|
72
|
+
def sql_for_tags_field(klass, operator, values)
|
73
|
+
compare = ['=', '*'].include?(operator) ? 'IN' : 'NOT IN'
|
74
|
+
|
75
|
+
case operator
|
76
|
+
when '=', '!'
|
77
|
+
ids_list = klass.tagged_with(values, any: true).pluck :id
|
78
|
+
"(#{klass.table_name}.id #{compare} (#{ids_list.join ','}))" if ids_list.present?
|
79
|
+
else
|
80
|
+
entries = ActsAsTaggableOn::Tagging.where taggable_type: klass.name
|
81
|
+
"(#{klass.table_name}.id #{compare} (#{entries.select(:taggable_id).to_sql}))"
|
82
|
+
end
|
76
83
|
end
|
77
84
|
|
78
85
|
private
|
@@ -13,14 +13,18 @@ module AdditionalTags
|
|
13
13
|
render_on :view_reports_issue_report_split_content_right, partial: 'tags_simple'
|
14
14
|
render_on :view_wiki_form_bottom, partial: 'tags_form_bottom'
|
15
15
|
render_on :view_wiki_show_bottom, partial: 'tags_show'
|
16
|
-
render_on :view_wiki_show_sidebar_bottom, partial: 'tags_sidebar'
|
16
|
+
render_on :view_wiki_show_sidebar_bottom, partial: 'wiki/tags_sidebar'
|
17
17
|
|
18
18
|
def controller_issues_edit_before_save(context = {})
|
19
19
|
tags_journal context[:issue], context[:params]
|
20
20
|
end
|
21
21
|
|
22
22
|
def controller_issues_bulk_edit_before_save(context = {})
|
23
|
-
|
23
|
+
issue = context[:issue]
|
24
|
+
params = context[:params]
|
25
|
+
|
26
|
+
issues_bulk_tags_fix issue, params
|
27
|
+
tags_journal issue, params
|
24
28
|
end
|
25
29
|
|
26
30
|
# this hook is missing in redmine core at the moment
|
@@ -53,6 +57,12 @@ module AdditionalTags
|
|
53
57
|
|
54
58
|
private
|
55
59
|
|
60
|
+
def issues_bulk_tags_fix(issue, params)
|
61
|
+
old_tags = issue.tags.map(&:name)
|
62
|
+
new_tags = Array(params[:issue][:tag_list]).reject(&:empty?)
|
63
|
+
issue.tag_list = (old_tags + new_tags).uniq
|
64
|
+
end
|
65
|
+
|
56
66
|
def tags_journal(issue, params)
|
57
67
|
return unless params && params[:issue] && params[:issue][:tag_list]
|
58
68
|
|
@@ -17,7 +17,7 @@ module AdditionalTags
|
|
17
17
|
def sql_for_tags_field(_field, operator, value)
|
18
18
|
case operator
|
19
19
|
when '=', '!'
|
20
|
-
issues = Issue.tagged_with(value.clone)
|
20
|
+
issues = Issue.tagged_with(value.clone, any: true)
|
21
21
|
when '!*'
|
22
22
|
issues = Issue.joins(:tags).uniq
|
23
23
|
else
|
@@ -22,7 +22,7 @@ module AdditionalTags
|
|
22
22
|
|
23
23
|
def wiki_tags
|
24
24
|
@name = params[:q].to_s
|
25
|
-
@tags = WikiPage.available_tags project:
|
25
|
+
@tags = WikiPage.available_tags project: nil, name_like: @name
|
26
26
|
render layout: false, partial: 'additional_tag_list', locals: { unsorted: true }
|
27
27
|
end
|
28
28
|
|
@@ -22,7 +22,7 @@ module AdditionalTags
|
|
22
22
|
return unless AdditionalTags.setting?(:active_issue_tags) && User.current.allowed_to?(:view_issue_tags, project, global: true)
|
23
23
|
|
24
24
|
add_available_filter 'issue.tags',
|
25
|
-
type: :
|
25
|
+
type: :list_optional,
|
26
26
|
name: l('label_attribute_of_issue', name: l(:field_tags)),
|
27
27
|
values: -> { available_issue_tags_values }
|
28
28
|
end
|
@@ -45,7 +45,8 @@ module AdditionalTags
|
|
45
45
|
|
46
46
|
def available_issue_tags_values
|
47
47
|
Issue.available_tags(project: project)
|
48
|
-
.
|
48
|
+
.pluck(:name)
|
49
|
+
.map { |name| [name, name] }
|
49
50
|
end
|
50
51
|
end
|
51
52
|
end
|
@@ -8,6 +8,8 @@ module AdditionalTags
|
|
8
8
|
helper :additional_tags
|
9
9
|
helper :additional_tags_wiki
|
10
10
|
|
11
|
+
include AdditionalTagsWikiHelper
|
12
|
+
|
11
13
|
before_action :find_page_for_update_tags, only: :update_tags
|
12
14
|
end
|
13
15
|
|
@@ -27,7 +29,7 @@ module AdditionalTags
|
|
27
29
|
@tag = params[:tag]
|
28
30
|
return super unless AdditionalTags.setting?(:active_wiki_tags) && @tag.present?
|
29
31
|
|
30
|
-
|
32
|
+
@pages = wiki_pages_with_tag @tag, @project
|
31
33
|
|
32
34
|
respond_to do |format|
|
33
35
|
format.html do
|
@@ -39,19 +41,6 @@ module AdditionalTags
|
|
39
41
|
|
40
42
|
private
|
41
43
|
|
42
|
-
def load_pages_for_index_with_tag
|
43
|
-
pattern = "%#{@tag.to_s.strip}%"
|
44
|
-
@pages = @wiki.pages
|
45
|
-
.joins(AdditionalTags::Tags.tag_to_joins(WikiPage))
|
46
|
-
.where("LOWER(#{ActiveRecord::Base.connection.quote_table_name(ActsAsTaggableOn.tags_table)}.name) LIKE LOWER(:p)",
|
47
|
-
p: pattern)
|
48
|
-
.with_updated_on
|
49
|
-
.distinct
|
50
|
-
.reorder("#{WikiPage.table_name}.title")
|
51
|
-
.includes(wiki: :project)
|
52
|
-
.includes(:parent).to_a
|
53
|
-
end
|
54
|
-
|
55
44
|
# find_existing_page can not be used from wiki_controller, because it would be disable index only rule
|
56
45
|
def find_page_for_update_tags
|
57
46
|
@page = @wiki.find_page params[:id]
|
@@ -8,7 +8,9 @@ module AdditionalTags
|
|
8
8
|
|
9
9
|
acts_as_ordered_taggable
|
10
10
|
|
11
|
-
safe_attributes
|
11
|
+
alias_method :safe_attributes_without_tags=, :safe_attributes=
|
12
|
+
alias_method :safe_attributes=, :safe_attributes_with_tags=
|
13
|
+
|
12
14
|
before_save :sort_tag_list
|
13
15
|
end
|
14
16
|
|
@@ -26,6 +28,25 @@ module AdditionalTags
|
|
26
28
|
end
|
27
29
|
|
28
30
|
module InstanceMethods
|
31
|
+
def safe_attributes_with_tags=(attrs, user = User.current)
|
32
|
+
if !attrs.is_a?(Array) && attrs && attrs[:tag_list]
|
33
|
+
tags = attrs[:tag_list]
|
34
|
+
tags = Array(tags).reject(&:empty?)
|
35
|
+
|
36
|
+
# only assign it, if changed
|
37
|
+
if tags == tag_list ||
|
38
|
+
!AdditionalTags.setting?(:active_wiki_tags) ||
|
39
|
+
!user.allowed_to?(:add_wiki_tags, project)
|
40
|
+
attrs.delete :tag_list
|
41
|
+
else
|
42
|
+
attrs[:tag_list] = tags
|
43
|
+
self.tag_list = tags
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
send 'safe_attributes_without_tags=', attrs, user
|
48
|
+
end
|
49
|
+
|
29
50
|
private
|
30
51
|
|
31
52
|
def sort_tag_list
|
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.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- AlphaNodes
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-04-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: acts-as-taggable-on
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '7.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '7.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -59,6 +59,7 @@ executables: []
|
|
59
59
|
extensions: []
|
60
60
|
extra_rdoc_files: []
|
61
61
|
files:
|
62
|
+
- ".eslintrc.yml"
|
62
63
|
- ".github/workflows/brakeman.yml"
|
63
64
|
- ".github/workflows/linters.yml"
|
64
65
|
- ".github/workflows/tests.yml"
|
@@ -163,14 +164,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
163
164
|
requirements:
|
164
165
|
- - ">="
|
165
166
|
- !ruby/object:Gem::Version
|
166
|
-
version: '2.
|
167
|
+
version: '2.5'
|
167
168
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
168
169
|
requirements:
|
169
170
|
- - ">="
|
170
171
|
- !ruby/object:Gem::Version
|
171
172
|
version: '0'
|
172
173
|
requirements: []
|
173
|
-
rubygems_version: 3.
|
174
|
+
rubygems_version: 3.1.6
|
174
175
|
signing_key:
|
175
176
|
specification_version: 4
|
176
177
|
summary: Redmine plugin for adding tag functionality
|