X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/221ca3c1fa985c02243a3c650c828023c1011484..34e3e51456774127d43408b7ab65c24f41373f62:/app/models/changeset.rb diff --git a/app/models/changeset.rb b/app/models/changeset.rb index adb41b204..926e82ab6 100644 --- a/app/models/changeset.rb +++ b/app/models/changeset.rb @@ -12,6 +12,9 @@ class Changeset < ActiveRecord::Base has_many :old_ways has_many :old_relations + has_many :comments, -> { where(:visible => true).order(:created_at) }, :class_name => "ChangesetComment" + has_and_belongs_to_many :subscribers, :class_name => 'User', :join_table => 'changesets_subscribers', :association_foreign_key => 'subscriber_id' + validates_presence_of :id, :on => :update validates_presence_of :user_id, :created_at, :closed_at, :num_changes validates_uniqueness_of :id @@ -104,7 +107,7 @@ class Changeset < ActiveRecord::Base # suggested on the wiki page by kleptog. def update_bbox!(bbox_update) bbox.expand!(bbox_update, EXPAND) - + # update active record. rails 2.1's dirty handling should take care of # whether this object needs saving or not. self.min_lon, self.min_lat, self.max_lon, self.max_lat = @bbox.to_a if bbox.complete? @@ -179,13 +182,13 @@ class Changeset < ActiveRecord::Base end end - def to_xml + def to_xml(include_discussion = false) doc = OSM::API.new.get_xml_doc - doc.root << to_xml_node() + doc.root << to_xml_node(nil, include_discussion) return doc end - def to_xml_node(user_display_name_cache = nil) + def to_xml_node(user_display_name_cache = nil, include_discussion = false) el1 = XML::Node.new 'changeset' el1['id'] = self.id.to_s @@ -217,6 +220,23 @@ class Changeset < ActiveRecord::Base bbox.to_unscaled.add_bounds_to(el1, '_') end + el1['comments_count'] = self.comments.count.to_s + + if include_discussion + el2 = XML::Node.new('discussion') + self.comments.includes(:author).each do |comment| + el3 = XML::Node.new('comment') + el3['date'] = comment.created_at.xmlschema + el3['uid'] = comment.author.id.to_s if comment.author.data_public? + el3['user'] = comment.author.display_name.to_s if comment.author.data_public? + el4 = XML::Node.new('text') + el4.content = comment.body.to_s + el3 << el4 + el2 << el3 + end + el1 << el2 + end + # NOTE: changesets don't include the XML of the changes within them, # they are just structures for tagging. to get the osmChange of a # changeset, see the download method of the controller.