- # Returns 0 (success), unchanged way id.
-
- 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
-
- way_id = way_id.to_i
- # Need a transaction so that if one item fails to delete, the whole delete fails.
- Way.transaction do
-
- # 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)
- end # transaction
- [0, way_id]
- rescue OSM::APIChangesetAlreadyClosedError => ex
- return [-1, "The changeset #{ex.changeset.id} was closed at #{ex.changeset.closed_at}"]
- rescue OSM::APIVersionMismatchError => ex
- # 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, "You have taken too long to edit, please reload the area"]
- rescue OSM::APIAlreadyDeletedError => ex
- return [-1, "The object has already been deleted"]
- rescue OSM::APIError => ex
- # Some error that we don't specifically catch
- return [-2, "Something really bad happened :-()"]
- end