- # ----- putpoi (user token, id, x,y,tag array,visible,baselong,basey,masterscale)
- # returns current id, new id
- # if new: add new row to current_nodes and nodes
- # if old: add new row to nodes, update current_nodes
-
- def putpoi(args)
- usertoken,id,x,y,tags,visible,baselong,basey,masterscale=args
- uid=getuserid(usertoken)
- if !uid then return -1,"You are not logged in, so the point could not be saved." end
-
- db_now='@now'+(rand*100).to_i.to_s+uid.to_s+id.to_i.abs.to_s+Time.new.to_i.to_s # 'now' variable name, typically 51 chars
- ActiveRecord::Base.connection.execute("SET #{db_now}=NOW()")
-
- id=id.to_i
- visible=visible.to_i
- if visible==0 then
- # if deleting, check node hasn't become part of a way
- inway=ActiveRecord::Base.connection.select_one("SELECT cw.id FROM current_ways cw,current_way_nodes cwn WHERE cw.id=cwn.id AND cw.visible=1 AND cwn.node_id=#{id} LIMIT 1")
- unless inway.nil? then return -1,"The point has since become part of a way, so you cannot save it as a POI." end
- deleteitemrelations(id,'node',uid,db_now)
- end
-
- x=coord2long(x.to_f,masterscale,baselong)
- y=coord2lat(y.to_f,masterscale,basey)
- tagsql="'"+sqlescape(array2tag(tags))+"'"
- lat=(y * 10000000).round
- long=(x * 10000000).round
- tile=QuadTile.tile_for_point(y, x)
-
- if (id>0) then
- ActiveRecord::Base.connection.insert("INSERT INTO nodes (id,latitude,longitude,timestamp,user_id,visible,tags,tile) VALUES (#{id},#{lat},#{long},#{db_now},#{uid},#{visible},#{tagsql},#{tile})");
- ActiveRecord::Base.connection.update("UPDATE current_nodes SET latitude=#{lat},longitude=#{long},timestamp=#{db_now},user_id=#{uid},visible=#{visible},tags=#{tagsql},tile=#{tile} WHERE id=#{id}");
- newid=id
- else
- newid=ActiveRecord::Base.connection.insert("INSERT INTO current_nodes (latitude,longitude,timestamp,user_id,visible,tags,tile) VALUES (#{lat},#{long},#{db_now},#{uid},#{visible},#{tagsql},#{tile})");
- ActiveRecord::Base.connection.update("INSERT INTO nodes (id,latitude,longitude,timestamp,user_id,visible,tags,tile) VALUES (#{newid},#{lat},#{long},#{db_now},#{uid},#{visible},#{tagsql},#{tile})");