1 class NodeController < ApplicationController
4 before_filter :authorize
19 userid = dao.useridfromcreds(r.user, r.get_basic_auth_pw)
20 doc = Document.new $stdin.read
22 doc.elements.each('osm/node') do |pt|
23 lat = pt.attributes['lat'].to_f
24 lon = pt.attributes['lon'].to_f
25 xmlnodeid = pt.attributes['id'].to_i
28 pt.elements.each('tag') do |tag|
29 tags << [tag.attributes['k'],tag.attributes['v']]
32 tags = tags.collect { |k,v| "#{k}=#{v}" }.join(';')
35 if xmlnodeid == nodeid && userid != 0
37 new_node_id = dao.create_node(lat, lon, userid, tags)
42 exit HTTP_INTERNAL_SERVER_ERROR
45 node = dao.getnode(nodeid)
47 #FIXME: need to check the node hasn't moved too much
48 if dao.update_node?(nodeid, userid, lat, lon, tags)
51 exit HTTP_INTERNAL_SERVER_ERROR
62 exit HTTP_INTERNAL_SERVER_ERROR
76 nodeid = r.args.match(/nodeid=([0-9]+)/).captures.first.to_i
77 userid = dao.useridfromcreds(r.user, r.get_basic_auth_pw)
78 doc = Document.new $stdin.read
80 doc.elements.each('osm/node') do |pt|
81 lat = pt.attributes['lat'].to_f
82 lon = pt.attributes['lon'].to_f
83 xmlnodeid = pt.attributes['id'].to_i
86 pt.elements.each('tag') do |tag|
87 tags << [tag.attributes['k'],tag.attributes['v']]
90 tags = tags.collect { |k,v| "#{k}=#{v}" }.join(';')
93 if xmlnodeid == nodeid && userid != 0
95 new_node_id = dao.create_node(lat, lon, userid, tags)
100 exit HTTP_INTERNAL_SERVER_ERROR
103 node = dao.getnode(nodeid)
105 #FIXME: need to check the node hasn't moved too much
106 if dao.update_node?(nodeid, userid, lat, lon, tags)
109 exit HTTP_INTERNAL_SERVER_ERROR
120 exit HTTP_INTERNAL_SERVER_ERROR
129 node = node.find(params[:id])
131 doc.encoding = "UTF-8"
132 root = Node.new 'osm'
133 root['version'] = '0.4'
134 root['generator'] = 'OpenStreetMap server'
136 el1 = Node.new 'node'
137 el1['id'] = node.id.to_s
138 el1['lat'] = node.latitude.to_s
139 el1['lon'] = node.longitude.to_s
140 split_tags(el1, node.tags)
141 el1['visible'] = node.visible.to_s
142 el1['timestamp'] = node.timestamp
145 render :text => doc.to_s, :template => false
153 userid = dao.useridfromcreds(r.user, r.get_basic_auth_pw)
154 #cgi doesnt work with DELETE so extract manually:
155 nodeid = r.args.match(/nodeid=([0-9]+)/).captures.first.to_i
157 if userid > 0 && nodeid != 0
158 node = dao.getnode(nodeid)
161 if dao.delete_node?(nodeid, userid)
164 exit HTTP_INTERNAL_SERVER_ERROR
184 def split_tags(el, tags)
185 tags.split(';').each do |tag|
186 parts = tag.split('=')
189 key = parts[0].strip unless parts[0].nil?
190 val = parts[1].strip unless parts[1].nil?
191 if key != '' && val != ''
192 el2 = Node.new('tag')