1 class NodeController < ApplicationController
4 before_filter :authorize
15 userid = dao.useridfromcreds(r.user, r.get_basic_auth_pw)
16 doc = Document.new $stdin.read
18 doc.elements.each('osm/node') do |pt|
19 lat = pt.attributes['lat'].to_f
20 lon = pt.attributes['lon'].to_f
21 xmlnodeid = pt.attributes['id'].to_i
24 pt.elements.each('tag') do |tag|
25 tags << [tag.attributes['k'],tag.attributes['v']]
28 tags = tags.collect { |k,v| "#{k}=#{v}" }.join(';')
31 if xmlnodeid == nodeid && userid != 0
33 new_node_id = dao.create_node(lat, lon, userid, tags)
38 exit HTTP_INTERNAL_SERVER_ERROR
41 node = dao.getnode(nodeid)
43 #FIXME: need to check the node hasn't moved too much
44 if dao.update_node?(nodeid, userid, lat, lon, tags)
47 exit HTTP_INTERNAL_SERVER_ERROR
58 exit HTTP_INTERNAL_SERVER_ERROR
72 nodeid = r.args.match(/nodeid=([0-9]+)/).captures.first.to_i
73 userid = dao.useridfromcreds(r.user, r.get_basic_auth_pw)
74 doc = Document.new $stdin.read
76 doc.elements.each('osm/node') do |pt|
77 lat = pt.attributes['lat'].to_f
78 lon = pt.attributes['lon'].to_f
79 xmlnodeid = pt.attributes['id'].to_i
82 pt.elements.each('tag') do |tag|
83 tags << [tag.attributes['k'],tag.attributes['v']]
86 tags = tags.collect { |k,v| "#{k}=#{v}" }.join(';')
89 if xmlnodeid == nodeid && userid != 0
91 new_node_id = dao.create_node(lat, lon, userid, tags)
96 exit HTTP_INTERNAL_SERVER_ERROR
99 node = dao.getnode(nodeid)
101 #FIXME: need to check the node hasn't moved too much
102 if dao.update_node?(nodeid, userid, lat, lon, tags)
105 exit HTTP_INTERNAL_SERVER_ERROR
116 exit HTTP_INTERNAL_SERVER_ERROR
125 node = node.find(params[:id])
127 doc.encoding = "UTF-8"
128 root = Node.new 'osm'
129 root['version'] = '0.4'
130 root['generator'] = 'OpenStreetMap server'
132 el1 = Node.new 'node'
133 el1['id'] = node.id.to_s
134 el1['lat'] = node.latitude.to_s
135 el1['lon'] = node.longitude.to_s
136 split_tags(el1, node.tags)
137 el1['visible'] = node.visible.to_s
138 el1['timestamp'] = node.timestamp
141 render :text => doc.to_s, :template => false
149 userid = dao.useridfromcreds(r.user, r.get_basic_auth_pw)
150 #cgi doesnt work with DELETE so extract manually:
151 nodeid = r.args.match(/nodeid=([0-9]+)/).captures.first.to_i
153 if userid > 0 && nodeid != 0
154 node = dao.getnode(nodeid)
157 if dao.delete_node?(nodeid, userid)
160 exit HTTP_INTERNAL_SERVER_ERROR
180 def split_tags(el, tags)
181 tags.split(';').each do |tag|
182 parts = tag.split('=')
185 key = parts[0].strip unless parts[0].nil?
186 val = parts[1].strip unless parts[1].nil?
187 if key != '' && val != ''
188 el2 = Node.new('tag')