various relations fixes
authorRichard Fairhurst <richard@systemed.net>
Fri, 21 Mar 2008 19:00:39 +0000 (19:00 +0000)
committerRichard Fairhurst <richard@systemed.net>
Fri, 21 Mar 2008 19:00:39 +0000 (19:00 +0000)
app/controllers/amf_controller.rb
app/models/way.rb
public/potlatch/potlatch.swf

index 83a6cd4b58fb871b30c4762dc7630ff6db74f4cf..a2bb1b45433e35a004f7958686a18d761d968c08 100644 (file)
@@ -589,6 +589,21 @@ class AmfController < ApplicationController
     uid=getuserid(usertoken)
     if !uid then return -1,"You are not logged in, so the way could not be deleted." end
 
+       # FIXME
+       # the next bit removes the way from any relations
+       # the delete_with_relations_and_nodes_and_history method should do this,
+       #   but at present it just throws a 'precondition failed'
+    way=way.to_i 
+    db_now='@now'+(rand*100).to_i.to_s+uid.to_s+id.to_i.abs.to_s+Time.new.to_i.to_s
+       db_uqn='unin'+(rand*100).to_i.to_s+uid.to_s+way.to_i.abs.to_s+Time.new.to_i.to_s
+    ActiveRecord::Base.connection.execute("SET #{db_now}=NOW()")
+       createuniquenodes(way,db_uqn,[])
+       deleteuniquenoderelations(db_uqn,uid,db_now)
+    deleteitemrelations(way_id,'way',uid,db_now)
+    ActiveRecord::Base.connection.execute("DROP TEMPORARY TABLE #{db_uqn}")
+       # end of FIXME
+
+       # now delete the way
     user = User.find(uid)
     way = Way.find(way_id)
     way.delete_with_relations_and_nodes_and_history(user)  
index d0b961123ca729367706c913322b2a147f9c0a3b..f1dc76eb4c6b65053214e1e80f6665f70ad10052 100644 (file)
@@ -210,10 +210,13 @@ class Way < ActiveRecord::Base
   # Delete the way and it's relations, but don't really delete it - set its visibility to false and update the history etc to maintain wiki-like functionality.
   def delete_with_relations_and_history(user)
     if self.visible
-      # omg FIXME
+         # FIXME
+         # this should actually delete the relations,
+         # not just throw a PreconditionFailed if it's a member of a relation!!
       if RelationMember.find(:first, :joins => "INNER JOIN current_relations ON current_relations.id=current_relation_members.id",
                              :conditions => [ "visible = 1 AND member_type='way' and member_id=?", self.id])
         raise OSM::APIPreconditionFailedError
+      # end FIXME
       else
         self.user_id = user.id
         self.tags = []
index 6af62d65526b06126d9152eef5e71afbb3f7a067..c1c3037bfb1e5507318de2f9e4c2bcf61453adb0 100755 (executable)
Binary files a/public/potlatch/potlatch.swf and b/public/potlatch/potlatch.swf differ