Skip to content

Commit 6b83030

Browse files
authored
Merge pull request #19 from gtt-project/feature/global_endpoint
Added global api endpoint '/smash/tags.json' and changed project api endpoint '/projects/(project_id)/smash/tags.json'
2 parents 97fd197 + 78f1e07 commit 6b83030

File tree

3 files changed

+112
-26
lines changed

3 files changed

+112
-26
lines changed

app/controllers/smash_tags_controller.rb

Lines changed: 104 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,81 @@
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 valid_tracker_project_ids
53+
tracker_project_ids = {}
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+
if tracker_project_ids.has_key?(tracker.id)
64+
tracker_project_ids[tracker.id].append(project.id)
65+
else
66+
tracker_project_ids[tracker.id] = [project.id]
67+
end
68+
}
69+
}
70+
return tracker_project_ids
71+
end
72+
73+
# SMASH (Geopaparazzi) form spec: https://www.geopaparazzi.org/geopaparazzi/index.html#_using_form_based_notes
74+
def build_tags
975
smash_tags = []
1076
# Issue priorities
1177
priorities = []
1278
default_priority = nil
13-
# SMASH (Geopaparazzi) form spec: https://www.geopaparazzi.org/geopaparazzi/index.html#_using_form_based_notes
1479
IssuePriority.active.each do |priority|
1580
priorities.append({
1681
item: priority.name
@@ -21,24 +86,39 @@ def index
2186
end
2287
# Issue categories
2388
categories = []
24-
@project.issue_categories.each do |category|
25-
categories.append({
26-
item: category.name
27-
})
89+
if @project.present?
90+
@project.issue_categories.each do |category|
91+
categories.append({
92+
item: category.name
93+
})
94+
end
2895
end
2996
# Versions
3097
versions = []
3198
default_version = nil
32-
@project.versions.each do |version|
33-
versions.append({
34-
item: version.name
35-
})
36-
end
37-
if @project.default_version.present?
38-
default_version = @project.default_version.name
99+
if @project.present?
100+
@project.versions.each do |version|
101+
versions.append({
102+
item: version.name
103+
})
104+
end
105+
if @project.default_version.present?
106+
default_version = @project.default_version.name
107+
end
39108
end
40109
# Trackers
41-
@project.trackers.sort.each do |tracker|
110+
tracker_project_ids = valid_tracker_project_ids()
111+
Tracker.where(id: tracker_project_ids.keys).sort.each do |tracker|
112+
# Projects
113+
project_ids = tracker_project_ids[tracker.id]
114+
projects = []
115+
if @project.blank? and project_ids.present?
116+
Project.where(id: project_ids).sort.each {|project|
117+
projects.append({
118+
item: project.name
119+
})
120+
}
121+
end
42122
section = {
43123
sectionname: tracker.name,
44124
sectiondescription: tracker.description,
@@ -49,8 +129,10 @@ def index
49129
# Core fields (undisablable)
50130
{
51131
key: "project_id",
52-
value: @project.id.to_s,
53-
type: "hidden",
132+
label: l(:field_project),
133+
value: @project.present? ? @project.id.to_s : "",
134+
values: @project.present? ? nil : { items: projects },
135+
type: @project.present? ? "hidden" : "stringcombo",
54136
mandatory: "yes"
55137
},
56138
{
@@ -90,7 +172,7 @@ def index
90172
if tracker.core_fields.present?
91173
# assigned_to_id (don't support)
92174
# category_id
93-
if tracker.core_fields.include?("category_id")
175+
if tracker.core_fields.include?("category_id") and categories.present?
94176
formitems.append({
95177
key: "category_id",
96178
label: l(:field_category),
@@ -103,7 +185,7 @@ def index
103185
})
104186
end
105187
# fixed_version_id
106-
if tracker.core_fields.include?("fixed_version_id")
188+
if tracker.core_fields.include?("fixed_version_id") and versions.present?
107189
formitems.append({
108190
key: "fixed_version_id",
109191
label: l(:field_version),
@@ -235,8 +317,6 @@ def index
235317
end
236318
smash_tags.append(section)
237319
end
238-
respond_to do |format|
239-
format.api { render json: smash_tags }
240-
end
320+
return smash_tags
241321
end
242322
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)