X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/c02c516047f20cdaa8120968e514420f6c2c6034..28839fd1504004bd10f30eeba3d7212c77adfbb4:/app/models/changeset.rb?ds=sidebyside diff --git a/app/models/changeset.rb b/app/models/changeset.rb index 5938d0835..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]) @@ -145,6 +145,7 @@ class Changeset < ActiveRecord::Base end el1['user'] = user_display_name_cache[self.user_id] unless user_display_name_cache[self.user_id].nil? + el1['uid'] = self.user_id.to_s if self.user.data_public? self.tags.each do |k,v| el2 = XML::Node.new('tag') @@ -167,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