Skip to content

Commit 124ca73

Browse files
committed
Added global api endpoint '/smash/tags.json' and changed project api endpoint '/projects/(project_id)/smash/tags.json'
Signed-off-by: Ko Nagase <[email protected]>
1 parent 97fd197 commit 124ca73

File tree

3 files changed

+106
-25
lines changed

3 files changed

+106
-25
lines changed

app/controllers/smash_tags_controller.rb

Lines changed: 98 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,77 @@
11
class SmashTagsController < ApplicationController
22

3-
before_action :find_project_by_project_id
4-
before_action :authorize
3+
before_action :find_optional_project_and_authorize
54

6-
accept_api_auth :index
5+
accept_api_auth :project_tags, :global_tags
76

8-
def index
7+
def project_tags
8+
smash_tags = build_tags
9+
respond_to do |format|
10+
format.api { render json: smash_tags }
11+
end
12+
end
13+
14+
def global_tags
15+
smash_tags = build_tags
16+
respond_to do |format|
17+
format.api { render json: smash_tags }
18+
end
19+
end
20+
21+
private
22+
23+
def find_optional_project_and_authorize
24+
if params[:project_id]
25+
@project = Project.find params[:project_id]
26+
authorize
27+
else
28+
authorize_global
29+
end
30+
end
31+
32+
def enabled_project_ids
33+
EnabledModule.where(name: ['issue_tracking', 'gtt', 'gtt_smash']).
34+
group(:project_id).
35+
count('project_id').
36+
keep_if {|k,v| v == 3}.keys
37+
end
38+
39+
def valid_project_ids
40+
project_ids = []
41+
Project.where(status: "#{Project::STATUS_ACTIVE}").
42+
where(id: enabled_project_ids()).
43+
where(id: User.current.visible_project_ids).sort.each {|project|
44+
if User.current.allowed_to?(:add_issues, project) and
45+
User.current.allowed_to?(:view_gtt_smash, project)
46+
project_ids.append(project.id)
47+
end
48+
}
49+
return project_ids
50+
end
51+
52+
def visible_trackers
53+
tracker_ids = Set.new
54+
valid_project_ids = valid_project_ids()
55+
project_ids = []
56+
if @project.present? and valid_project_ids.include?(@project.id)
57+
project_ids.append(@project.id)
58+
else
59+
project_ids.concat(valid_project_ids)
60+
end
61+
Project.where(id: project_ids).each {|project|
62+
project.trackers.each {|tracker|
63+
tracker_ids.add(tracker.id)
64+
}
65+
}
66+
Tracker.where(id: tracker_ids.to_a).sort
67+
end
68+
69+
# SMASH (Geopaparazzi) form spec: https://www.geopaparazzi.org/geopaparazzi/index.html#_using_form_based_notes
70+
def build_tags
971
smash_tags = []
1072
# Issue priorities
1173
priorities = []
1274
default_priority = nil
13-
# SMASH (Geopaparazzi) form spec: https://www.geopaparazzi.org/geopaparazzi/index.html#_using_form_based_notes
1475
IssuePriority.active.each do |priority|
1576
priorities.append({
1677
item: priority.name
@@ -21,24 +82,38 @@ def index
2182
end
2283
# Issue categories
2384
categories = []
24-
@project.issue_categories.each do |category|
25-
categories.append({
26-
item: category.name
27-
})
85+
if @project.present?
86+
@project.issue_categories.each do |category|
87+
categories.append({
88+
item: category.name
89+
})
90+
end
2891
end
2992
# Versions
3093
versions = []
3194
default_version = nil
32-
@project.versions.each do |version|
33-
versions.append({
34-
item: version.name
35-
})
95+
if @project.present?
96+
@project.versions.each do |version|
97+
versions.append({
98+
item: version.name
99+
})
100+
end
101+
if @project.default_version.present?
102+
default_version = @project.default_version.name
103+
end
36104
end
37-
if @project.default_version.present?
38-
default_version = @project.default_version.name
105+
# Projects
106+
projects = []
107+
if @project.blank?
108+
Project.where(id: User.current.visible_project_ids).sort.each {|project|
109+
projects.append({
110+
item: project.name
111+
})
112+
}
39113
end
40114
# Trackers
41-
@project.trackers.sort.each do |tracker|
115+
trackers = visible_trackers()
116+
trackers.sort.each do |tracker|
42117
section = {
43118
sectionname: tracker.name,
44119
sectiondescription: tracker.description,
@@ -49,8 +124,10 @@ def index
49124
# Core fields (undisablable)
50125
{
51126
key: "project_id",
52-
value: @project.id.to_s,
53-
type: "hidden",
127+
label: l(:field_project),
128+
value: @project.present? ? @project.id.to_s : "",
129+
values: @project.present? ? nil : { items: projects },
130+
type: @project.present? ? "hidden" : "stringcombo",
54131
mandatory: "yes"
55132
},
56133
{
@@ -90,7 +167,7 @@ def index
90167
if tracker.core_fields.present?
91168
# assigned_to_id (don't support)
92169
# category_id
93-
if tracker.core_fields.include?("category_id")
170+
if tracker.core_fields.include?("category_id") and categories.present?
94171
formitems.append({
95172
key: "category_id",
96173
label: l(:field_category),
@@ -103,7 +180,7 @@ def index
103180
})
104181
end
105182
# fixed_version_id
106-
if tracker.core_fields.include?("fixed_version_id")
183+
if tracker.core_fields.include?("fixed_version_id") and versions.present?
107184
formitems.append({
108185
key: "fixed_version_id",
109186
label: l(:field_version),
@@ -235,8 +312,6 @@ def index
235312
end
236313
smash_tags.append(section)
237314
end
238-
respond_to do |format|
239-
format.api { render json: smash_tags }
240-
end
315+
return smash_tags
241316
end
242317
end

config/routes.rb

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
# Plugin's routes
22
# See: http://guides.rubyonrails.org/routing.html
33

4+
scope 'smash' do
5+
get 'tags', to: 'smash_tags#global_tags', as: :smash_tags
6+
end
7+
48
scope 'projects/:project_id' do
5-
resources :smash_tags, only: %i(index), as: :project_smash_tags
9+
scope 'smash' do
10+
get 'tags', to: 'smash_tags#project_tags', as: :project_smash_tags
11+
end
612
end

init.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
project_module :gtt_smash do
1717
permission :view_gtt_smash, {
18-
smash_tags: %i( index )
18+
smash_tags: %i( project_tags global_tags )
1919
}, require: :member, read: true
2020
end
2121

0 commit comments

Comments
 (0)