]> git.openstreetmap.org Git - rails.git/blobdiff - app/models/node.rb
Ooops, forgot to commit the routes for the changeset query and include calls.
[rails.git] / app / models / node.rb
index 67efeca2c1a471f2e78d3bc9e6b1ef0d7b3244d5..391b50dcda335b4cb7ddb1e54cce2ccad1775b51 100644 (file)
@@ -53,7 +53,7 @@ class Node < ActiveRecord::Base
     #conditions = keys.join(' AND ')
  
     find_by_area(min_lat, min_lon, max_lat, max_lon,
-                    :conditions => 'visible = 1',
+                    :conditions => {:visible => true},
                     :limit => APP_CONFIG['max_number_of_nodes']+1)  
   end
 
@@ -83,7 +83,7 @@ class Node < ActiveRecord::Base
 
     # version must be present unless creating
     return nil unless create or not pt['version'].nil?
-    node.version = pt['version'].to_i
+    node.version = create ? 0 : pt['version'].to_i
 
     unless create
       if pt['id'] != '0'
@@ -112,6 +112,12 @@ class Node < ActiveRecord::Base
     return node
   end
 
+  ##
+  # the bounding box around a node
+  def bbox
+    [ longitude, latitude, longitude, latitude ]
+  end
+
   def save_with_history!
     t = Time.now
     Node.transaction do
@@ -134,6 +140,9 @@ class Node < ActiveRecord::Base
       old_node = OldNode.from_node(self)
       old_node.timestamp = t
       old_node.save_with_dependencies!
+
+      # save the changeset in case of bounding box updates
+      changeset.save!
     end
   end
 
@@ -141,13 +150,17 @@ class Node < ActiveRecord::Base
   def delete_with_history!(new_node, user)
     if self.visible
       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 = 1 AND current_way_nodes.node_id = ?", self.id ])
+      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 = 1 AND member_type='node' and member_id=? ", 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
-        self.visible = 0
+        self.visible = false
+
+        # update the changeset with the deleted position
+        changeset.update_bbox!(bbox)
+
         save_with_history!
       end
     else
@@ -158,12 +171,19 @@ class Node < ActiveRecord::Base
   def update_from(new_node, user)
     check_consistency(self, new_node, user)
 
+    # update changeset 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
+    changeset.update_bbox!(bbox);
+
     save_with_history!
   end
   
@@ -171,6 +191,10 @@ class Node < ActiveRecord::Base
     check_create_consistency(self, user)
     self.version = 0
     self.visible = true
+
+    # update the changeset to include the new location
+    changeset.update_bbox!(bbox)
+
     save_with_history!
   end
 
@@ -198,7 +222,10 @@ class Node < ActiveRecord::Base
       user_display_name_cache[self.changeset.user_id] = nil
     end
 
-    el1['user'] = user_display_name_cache[self.changeset.user_id] unless user_display_name_cache[self.changeset.user_id].nil?
+    if not user_display_name_cache[self.changeset.user_id].nil?
+      el1['user'] = user_display_name_cache[self.changeset.user_id]
+      el1['uid'] = self.changeset.user_id.to_s
+    end
 
     self.tags.each do |k,v|
       el2 = XML::Node.new('tag')