]> git.openstreetmap.org Git - rails.git/blobdiff - app/controllers/amf_controller.rb
Make error messages more helpful
[rails.git] / app / controllers / amf_controller.rb
index 331487a93debee39e91820cbdac768c9170235f5..d8d7ce3c4daed893dbd58ab5d704ccecd637a3a9 100644 (file)
@@ -41,7 +41,7 @@ class AmfController < ApplicationController
   include MapBoundary
 
   session :off
-  before_filter :check_write_availability
+  before_filter :check_api_writable
 
   # Main AMF handlers: process the raw AMF string (using AMF library) and
   # calls each action (private method) accordingly.
@@ -55,7 +55,7 @@ class AmfController < ApplicationController
 
     # Parse request
 
-    headers=AMF.getint(req)                                    # Read number of headers
+       headers=AMF.getint(req)                                 # Read number of headers
 
     headers.times do                                           # Read each header
       name=AMF.getstring(req)                          #  |
@@ -76,7 +76,8 @@ class AmfController < ApplicationController
         when 'getpresets';                     results[index]=AMF.putdata(index,getpresets())
         when 'whichways';                      results[index]=AMF.putdata(index,whichways(*args))
         when 'whichways_deleted';      results[index]=AMF.putdata(index,whichways_deleted(*args))
-        when 'getway';                         results[index]=AMF.putdata(index,getway(args[0].to_i))
+        when 'getway';                         r=AMF.putdata(index,getway(args[0].to_i))
+                                    results[index]=r
         when 'getrelation';                    results[index]=AMF.putdata(index,getrelation(args[0].to_i))
         when 'getway_old';                     results[index]=AMF.putdata(index,getway_old(args[0].to_i,args[1]))
         when 'getway_history';         results[index]=AMF.putdata(index,getway_history(args[0].to_i))
@@ -157,7 +158,7 @@ class AmfController < ApplicationController
     cs.tags = cstags
     cs.user_id = user.id
     # smsm1 doesn't like the next two lines and thinks they need to be abstracted to the model more/better
-    cs.created_at = Time.now
+    cs.created_at = Time.now.getutc
     cs.closed_at = cs.created_at + Changeset::IDLE_TIMEOUT
     cs.save_with_tags!
     return [0,cs.id]
@@ -276,7 +277,7 @@ class AmfController < ApplicationController
 
     [wayid, points, tags, version]
   end
-
+  
   # Get an old version of a way, and all constituent nodes.
   #
   # For undelete (version<0), always uses the most recent version of each node, 
@@ -298,12 +299,19 @@ class AmfController < ApplicationController
       old_way = OldWay.find(:first, :conditions => ['visible = ? AND id = ?', true, id], :order => 'version DESC')
       points = old_way.get_nodes_undelete unless old_way.nil?
     else
-      # revert
-      timestamp = DateTime.strptime(timestamp, "%d %b %Y, %H:%M:%S")
-      old_way = OldWay.find(:first, :conditions => ['id = ? AND timestamp <= ?', id, timestamp], :order => 'timestamp DESC')
-      points = old_way.get_nodes_revert(timestamp) unless old_way.nil?
-      if !old_way.visible
-        return [-1, "Sorry, the way was deleted at that time - please revert to a previous version."]
+      begin
+        # revert
+        timestamp = DateTime.strptime(timestamp.to_s, "%d %b %Y, %H:%M:%S")
+        old_way = OldWay.find(:first, :conditions => ['id = ? AND timestamp <= ?', id, timestamp], :order => 'timestamp DESC')
+        unless old_way.nil?
+          points = old_way.get_nodes_revert(timestamp)
+          if !old_way.visible
+            return [-1, "Sorry, the way was deleted at that time - please revert to a previous version."]
+          end
+        end
+      rescue ArgumentError
+        # thrown by date parsing method. leave old_way as nil for
+        # the superb error handler below.
       end
     end
 
@@ -483,8 +491,8 @@ class AmfController < ApplicationController
       new_relation.changeset_id = changeset_id
       new_relation.version = version
 
-
-      if id <= 0
+      # 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)
       elsif visible
@@ -512,7 +520,7 @@ class AmfController < ApplicationController
     return [-1, "The relation has already been deleted."]
   rescue OSM::APIError => ex
     # Some error that we don't specifically catch
-    return [-2, "Something really bad happened :-( ."]
+    return [-2, "An unusual error happened (in 'putrelation')."]
   end
 
   # Save a way to the database, including all nodes. Any nodes in the previous
@@ -636,7 +644,7 @@ class AmfController < ApplicationController
     return [-1, "The point has already been deleted."]
   rescue OSM::APIError => ex
     # Some error that we don't specifically catch
-    return [-2, "Something really bad happened :-(."]
+    return [-2, "An unusual error happened (in 'putway')."]
   end
 
   # Save POI to the database.
@@ -699,7 +707,7 @@ class AmfController < ApplicationController
     return [-1, "The point has already been deleted"]
   rescue OSM::APIError => ex
     # Some error that we don't specifically catch
-    return [-2, "Something really bad happened :-()"]
+    return [-2, "An unusual error happened (in 'putpoi')."]
   end
 
   # Read POI from database
@@ -774,7 +782,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, "Something really bad happened :-( ."]
+    return [-2, "An unusual error happened (in 'deleteway')."]
   end