1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
# web/lib/api/v4/project.rb
class Taginfo < Sinatra::Base
api(4, 'project/tags', {
:description => 'Get list of all keys/tags used by a project.',
:parameters => { :project => 'Project ID' },
:paging => :optional,
:sort => %w( tag ),
:result => paging_results([
[:key, :STRING, 'Key'],
[:value, :STRING, 'Value'],
[:on_node, :BOOL, 'For nodes?'],
[:on_way, :BOOL, 'For ways?'],
[:on_relation, :BOOL, 'For relations?'],
[:on_area, :BOOL, 'For areas?'],
[:description, :STRING, 'Description'],
[:doc_url, :STRING, 'Documentation URL'],
[:icon_url, :STRING, 'Icon URL']
]),
:example => { :page => 1, :rp => 10, :sortname => 'tag', :sortorder => 'asc' },
:ui => '/projects/id_editor'
}) do
project_id = params[:project]
q = like_contains(params[:query])
total = @db.count('projects.project_tags').
condition("project_id=?", project_id).
condition_if("key LIKE ? ESCAPE '@' OR value LIKE ? ESCAPE '@'", q, q).
get_first_value().to_i
res = @db.select('SELECT * FROM projects.project_tags').
condition("project_id=?", project_id).
condition_if("key LIKE ? ESCAPE '@' OR value LIKE ? ESCAPE '@'", q, q).
order_by(@ap.sortname, @ap.sortorder) { |o|
o.tag :key
o.tag :value
}.
paging(@ap).
execute()
return JSON.generate({
:page => @ap.page,
:rp => @ap.results_per_page,
:total => total,
:url => request.url,
:data => res.map{ |row| {
:key => row['key'],
:value => row['value'],
:on_node => row['on_node'].to_i == 1,
:on_way => row['on_way'].to_i == 1,
:on_relation => row['on_relation'].to_i == 1,
:on_area => row['on_area'].to_i == 1,
:description => row['description'],
:doc_url => row['doc_url'],
:icon_url => row['icon_url']
}}
}, json_opts(params[:format]))
end
end
|