X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/a926189c7f56e1f2c697f9e46fdbfe41bd730561..6efdcaa9930bd2e392294304095ae31a91b8c4ab:/app/models/way.rb diff --git a/app/models/way.rb b/app/models/way.rb index b7d0ec118..090c7a739 100644 --- a/app/models/way.rb +++ b/app/models/way.rb @@ -50,22 +50,46 @@ class Way < ActiveRecord::Base return doc end - def to_xml_node + def to_xml_node(visible_segments = nil, user_display_name_cache = nil) el1 = XML::Node.new 'way' el1['id'] = self.id.to_s el1['visible'] = self.visible.to_s el1['timestamp'] = self.timestamp.xmlschema - el1['user'] = self.user.display_name if self.user.data_public? - # make sure segments are output in sequence_id order - ordered_segments = [] - self.way_segments.each do |seg| - ordered_segments[seg.sequence_id] = seg.segment_id.to_s - end - ordered_segments.each do |seg_id| - e = XML::Node.new 'seg' - e['id'] = seg_id - el1 << e - end + + user_display_name_cache = {} if user_display_name_cache.nil? + + if user_display_name_cache and user_display_name_cache[self.user_id] + # use the cache if available + else + user_display_name_cache[self.user_id] = self.user.display_name + end + + #el1['user'] = self.user.display_name if self.user.data_public? + el1['user'] = user_display_name_cache[self.user_id] + + # make sure segments are output in sequence_id order + ordered_segments = [] + self.way_segments.each do |seg| + if visible_segments + # if there is a list of visible segments then use that to weed out deleted segments + if visible_segments[seg.segment_id] + ordered_segments[seg.sequence_id] = seg.segment_id.to_s + end + else + # otherwise, manually go to the db to check things + if seg.segment.visible? and seg.segment.from_node.visible? and seg.segment.to_node.visible? + ordered_segments[seg.sequence_id] = seg.segment_id.to_s + end + end + end + + ordered_segments.each do |seg_id| + if seg_id and seg_id != '0' + e = XML::Node.new 'seg' + e['id'] = seg_id + el1 << e + end + end self.way_tags.each do |tag| e = XML::Node.new 'tag' @@ -76,7 +100,6 @@ class Way < ActiveRecord::Base return el1 end - def segs unless @segs @segs = Array.new