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
61
62
63
64
65
66
67
68
69
70
|
# 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'],
[:description, :STRING, 'Description'],
[:doc_url, :STRING, 'Documentation URL'],
[:icon_url, :STRING, 'Icon URL']
]),
:example => { :page => 1, :rp => 10, :sortname => 'key', :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'],
:description => row['description'],
:doc_url => row['doc_url'],
:icon_url => row['icon_url']
}}
}, json_opts(params[:format]))
end
api(4, 'project/icon', {
:description => 'Access logo icon for project.',
:parameters => { :project => 'Project ID' },
:result => 'PNG image.',
:example => { :project => 'osmcoastline' },
:ui => '/projects'
}) do
project_id = params[:project]
url = @db.select('SELECT icon_url FROM projects.projects').
condition('id = ?', project_id).
get_first_value()
if url.nil? || url == ''
redirect '/img/generic_project_icon.png'
else
redirect url
end
end
end
|