X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/81ca9cfabf6f9f720127a1fcc68ec709af277730..519d402cb2234844f3dfee62cdcb2f3f44d5d618:/app/models/changeset.rb?ds=inline diff --git a/app/models/changeset.rb b/app/models/changeset.rb index 4a4d12124..047569dca 100644 --- a/app/models/changeset.rb +++ b/app/models/changeset.rb @@ -104,13 +104,13 @@ class Changeset < ActiveRecord::Base def save_with_tags! t = Time.now + # do the changeset update and the changeset tags update in the + # same transaction to ensure consistency. Changeset.transaction do # fixme update modified_at time? # FIXME there is no modified_at time, should it be added self.save! - end - ChangesetTag.transaction do tags = self.tags ChangesetTag.delete_all(['id = ?', self.id]) @@ -168,4 +168,25 @@ class Changeset < ActiveRecord::Base return el1 end + + ## + # update this instance from another instance given and the user who is + # doing the updating. note that this method is not for updating the + # bounding box, only the tags of the changeset. + def update_from(other, user) + # ensure that only the user who opened the changeset may modify it. + unless user.id == self.user_id + raise OSM::APIUserChangesetMismatchError + end + + # can't change a closed changeset + unless open + raise OSM::APIChangesetAlreadyClosedError + end + + # copy the other's tags + self.tags = other.tags + + save_with_tags! + end end