]> git.openstreetmap.org Git - rails.git/blobdiff - app/controllers/amf_controller.rb
pass common API error text through to Potlatch so it can be shown to the user
[rails.git] / app / controllers / amf_controller.rb
index 1af78796c21674fcc5949295697cc8fd91007f07..6354949dac5cd9e245d4902adf83c55b776a4ea4 100644 (file)
@@ -220,7 +220,7 @@ class AmfController < ApplicationController
     [0, ways, points, relations]
 
   rescue Exception => err
-    [-2,"Sorry - I can't get the map for that area."]
+    [-2,"Sorry - I can't get the map for that area. The server said: #{err}"]
   end
 
   # Find deleted ways in current bounding box (similar to whichways, but ways
@@ -236,7 +236,7 @@ class AmfController < ApplicationController
     begin
       check_boundaries(xmin, ymin, xmax, ymax)
     rescue Exception => err
-      return [-2,"Sorry - I can't get the map for that area."]
+      return [-2,"Sorry - I can't get the map for that area. The server said: #{err}"]
     end
 
     nodes_in_area = Node.find_by_area(ymin, xmin, ymax, xmax, :conditions => ["current_ways.visible = ?", false], :include => :ways_via_history)
@@ -436,12 +436,12 @@ class AmfController < ApplicationController
     if searchterm.to_i>0 then
       rel = Relation.find(searchterm.to_i)
       if rel and rel.visible then
-        rels.push([rel.id, rel.tags, rel.members])
+        rels.push([rel.id, rel.tags, rel.members, rel.version])
       end
     else
       RelationTag.find(:all, :limit => 11, :conditions => ["match(v) against (?)", searchterm] ).each do |t|
       if t.relation.visible then
-             rels.push([t.relation.id, t.relation.tags, t.relation.members])
+             rels.push([t.relation.id, t.relation.tags, t.relation.members, t.relation.version])
            end
          end
        end
@@ -477,8 +477,8 @@ class AmfController < ApplicationController
       members.each do |m|
         mid = m[1].to_i
         if mid < 0
-          mid = renumberednodes[mid] if m[0] == 'node'
-          mid = renumberedways[mid] if m[0] == 'way'
+          mid = renumberednodes[mid] if m[0] == 'Node'
+          mid = renumberedways[mid] if m[0] == 'Way'
         end
         if mid
           typedmembers << [m[0], mid, m[2]]
@@ -492,7 +492,6 @@ class AmfController < ApplicationController
       new_relation.changeset_id = changeset_id
       new_relation.version = version
 
-      # NOTE: id or relid here? id doesn't seem to be set above
       if relid <= 0
         # We're creating the node
         new_relation.create_with_history(user)
@@ -516,12 +515,12 @@ class AmfController < ApplicationController
     # Really need to check to see whether this is a server load issue, and the 
     # last version was in the same changeset, or belongs to the same user, then
     # we can return something different
-    return [-3, "Sorry, someone else has changed this relation since you started editing. Please click the 'Edit' tab to reload the area."]
+    return [-3, "Sorry, someone else has changed this relation since you started editing. Please click the 'Edit' tab to reload the area. The server said: #{ex}"]
   rescue OSM::APIAlreadyDeletedError => ex
     return [-1, "The relation has already been deleted."]
   rescue OSM::APIError => ex
     # Some error that we don't specifically catch
-    return [-2, "An unusual error happened (in 'putrelation')."]
+    return [-2, "An unusual error happened (in 'putrelation' #{relid}). The server said: #{ex}"]
   end
 
   # Save a way to the database, including all nodes. Any nodes in the previous
@@ -622,7 +621,7 @@ class AmfController < ApplicationController
       uniques=uniques-pointlist
       uniques.each do |n|
         node = Node.find(n)
-        deleteitemrelations(user, changeset_id, id, 'node', node.version)
+        deleteitemrelations(user, changeset_id, id, 'Node', node.version)
         new_node = Node.new
         new_node.changeset_id = changeset_id
         new_node.version = node.version
@@ -638,14 +637,14 @@ class AmfController < ApplicationController
     # Really need to check to see whether this is a server load issue, and the 
     # last version was in the same changeset, or belongs to the same user, then
     # we can return something different
-    return [-3, "Sorry, someone else has changed this way since you started editing. Please click the 'Edit' tab to reload the area."]
+    return [-3, "Sorry, someone else has changed this way since you started editing. Click the 'Edit' tab to reload the area. The server said: #{ex}"]
   rescue OSM::APITooManyWayNodesError => ex
     return [-1, "You have tried to upload a really long way with #{ex.provided} points: only #{ex.max} are allowed."]
   rescue OSM::APIAlreadyDeletedError => ex
     return [-1, "The point has already been deleted."]
   rescue OSM::APIError => ex
     # Some error that we don't specifically catch
-    return [-2, "An unusual error happened (in 'putway')."]
+    return [-2, "An unusual error happened (in 'putway' #{originalway}). The server said: #{ex}"]
   end
 
   # Save POI to the database.
@@ -703,12 +702,12 @@ class AmfController < ApplicationController
     # Really need to check to see whether this is a server load issue, and the 
     # last version was in the same changeset, or belongs to the same user, then
     # we can return something different
-    return [-3, "Sorry, someone else has changed this point since you started editing. Please click the 'Edit' tab to reload the area."]
+    return [-3, "Sorry, someone else has changed this point since you started editing. Please click the 'Edit' tab to reload the area. The server said: #{ex}"]
   rescue OSM::APIAlreadyDeletedError => ex
     return [-1, "The point has already been deleted"]
   rescue OSM::APIError => ex
     # Some error that we don't specifically catch
-    return [-2, "An unusual error happened (in 'putpoi')."]
+    return [-2, "An unusual error happened (in 'putpoi' #{id}). The server said: #{ex}"]
   end
 
   # Read POI from database
@@ -750,12 +749,13 @@ class AmfController < ApplicationController
 
       # delete the way
       old_way = Way.find(way_id)
+      u = old_way.unshared_node_ids
       delete_way = Way.new
       delete_way.version = way_version
       delete_way.changeset_id = changeset_id
       old_way.delete_with_history!(delete_way, user)
 
-      old_way.unshared_node_ids.each do |node_id|
+      u.each do |node_id|
         # delete the node
         node = Node.find(node_id)
         delete_node = Node.new
@@ -765,7 +765,7 @@ class AmfController < ApplicationController
         else
           # in case the node wasn't passed (i.e. if it was previously removed
           # from the way in Potlatch)
-          deleteitemrelations(user, changeset_id, node_id, 'node', node.version)
+          deleteitemrelations(user, changeset_id, node_id, 'Node', node.version)
              delete_node.version = node.version
            end
         node.delete_with_history!(delete_node, user)
@@ -783,7 +783,7 @@ class AmfController < ApplicationController
     return [-1, "The way has already been deleted."]
   rescue OSM::APIError => ex
     # Some error that we don't specifically catch
-    return [-2, "An unusual error happened (in 'deleteway')."]
+    return [-2, "An unusual error happened (in 'deleteway' #{way_id}). The server said: #{ex}"]
   end
 
 
@@ -904,7 +904,7 @@ class AmfController < ApplicationController
   def sql_get_nodes_in_way(wayid)
     points=[]
     sql=<<-EOF
-      SELECT latitude*0.0000001 AS lat,longitude*0.0000001 AS lon,current_nodes.id 
+      SELECT latitude*0.0000001 AS lat,longitude*0.0000001 AS lon,current_nodes.id,current_nodes.version 
       FROM current_way_nodes,current_nodes 
        WHERE current_way_nodes.id=#{wayid.to_i} 
                   AND current_way_nodes.node_id=current_nodes.id 
@@ -917,7 +917,7 @@ class AmfController < ApplicationController
         nodetags[n['k']]=n['v']
       end
       nodetags.delete('created_by')
-      points << [row['lon'].to_f,row['lat'].to_f,row['id'].to_i,nodetags]
+      points << [row['lon'].to_f,row['lat'].to_f,row['id'].to_i,nodetags,row['version'].to_i]
     end
     points
   end