X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/bed9cd00ed166ce346da4b8a9b654ddf86e64e70..5e10a7d48bfc8ebe8886c6cf49043c95bb84d190:/app/models/node.rb diff --git a/app/models/node.rb b/app/models/node.rb index d3e0a7e8d..1392fc650 100644 --- a/app/models/node.rb +++ b/app/models/node.rb @@ -70,7 +70,7 @@ class Node < ActiveRecord::Base doc.find('//osm/node').each do |pt| return Node.from_xml_node(pt, create) end - rescue LibXML::XML::Error => ex + rescue LibXML::XML::Error, ArgumentError => ex raise OSM::APIBadXMLError.new("node", xml, ex.message) end end @@ -133,7 +133,7 @@ class Node < ActiveRecord::Base check_consistency(self, new_node, user) if WayNode.find(:first, :joins => "INNER JOIN current_ways ON current_ways.id = current_way_nodes.id", :conditions => [ "current_ways.visible = ? AND current_way_nodes.node_id = ?", true, self.id ]) raise OSM::APIPreconditionFailedError.new - elsif RelationMember.find(:first, :joins => "INNER JOIN current_relations ON current_relations.id=current_relation_members.id", :conditions => [ "visible = ? AND member_type='node' and member_id=? ", true, self.id]) + elsif RelationMember.find(:first, :joins => "INNER JOIN current_relations ON current_relations.id=current_relation_members.id", :conditions => [ "visible = ? AND member_type='Node' and member_id=? ", true, self.id]) raise OSM::APIPreconditionFailedError.new else self.changeset_id = new_node.changeset_id @@ -150,17 +150,20 @@ class Node < ActiveRecord::Base def update_from(new_node, user) check_consistency(self, new_node, user) - # update changeset with *old* position first + # update changeset first + self.changeset_id = new_node.changeset_id + self.changeset = new_node.changeset + + # update changeset bbox with *old* position first changeset.update_bbox!(bbox); # FIXME logic needs to be double checked - self.changeset_id = new_node.changeset_id self.latitude = new_node.latitude self.longitude = new_node.longitude self.tags = new_node.tags self.visible = true - # update changeset with *new* position + # update changeset bbox with *new* position changeset.update_bbox!(bbox); save_with_history! @@ -168,7 +171,6 @@ class Node < ActiveRecord::Base def create_with_history(user) check_create_consistency(self, user) - self.id = nil self.version = 0 self.visible = true @@ -264,7 +266,7 @@ class Node < ActiveRecord::Base private def save_with_history! - t = Time.now + t = Time.now.getutc Node.transaction do self.version += 1 self.timestamp = t