- def deleteway(usertoken, changeset_id, way_id) #:doc:
- if !getuserid(usertoken) then return -1,"You are not logged in, so the way could not be deleted." end
-
- way_id = way_id.to_i
-
- # FIXME: would be good not to make two history entries when removing
- # two nodes from the same relation
- way = Way.find(way_id)
- way.unshared_node_ids.each do |n|
- deleteitemrelations(n, 'node')
+ def deleteway(usertoken, changeset_id, way_id, way_version, node_id_version) #:doc:
+ user = getuser(usertoken)
+ unless user then return -1,"You are not logged in, so the way could not be deleted." end
+ # Need a transaction so that if one item fails to delete, the whole delete fails.
+ Way.transaction do
+ way_id = way_id.to_i
+
+ # FIXME: would be good not to make two history entries when removing
+ # two nodes from the same relation
+ old_way = Way.find(way_id)
+ #old_way.unshared_node_ids.each do |n|
+ # deleteitemrelations(n, 'node')
+ #end
+ #deleteitemrelations(way_id, 'way')
+
+
+ #way.delete_with_relations_and_nodes_and_history(changeset_id.to_i)
+ old_way.unshared_node_ids.each do |node_id|
+ # delete the node
+ node = Node.find(node_id)
+ delete_node = Node.new
+ delete_node.version = node_id_version[node_id]
+ node.delete_with_history!(delete_node, user)
+ end
+ # delete the way
+ delete_way = Way.new
+ delete_way.version = way_version
+ old_way.delete_with_history!(delete_way, user)