From d0e291552e5da004f1582d7ce577b8ccf7f546df Mon Sep 17 00:00:00 2001 From: Kai Krueger Date: Thu, 4 Mar 2010 22:30:42 +0000 Subject: [PATCH 1/1] Allow for different formats to the getBugs call This is a rudimentary initial version of a GPX and a rss format for looking at bugs in an area. --- app/controllers/map_bugs_controller.rb | 32 +++++++++--------------- app/models/map_bug.rb | 16 ++++++++++++ app/views/map_bugs/get_bugs.js.erb | 7 ++++++ app/views/map_bugs/get_bugs.rss.builder | 33 +++++++++++++++++++++++++ app/views/map_bugs/get_bugs.xml.builder | 23 +++++++++++++++++ 5 files changed, 91 insertions(+), 20 deletions(-) create mode 100644 app/views/map_bugs/get_bugs.js.erb create mode 100644 app/views/map_bugs/get_bugs.rss.builder create mode 100644 app/views/map_bugs/get_bugs.xml.builder diff --git a/app/controllers/map_bugs_controller.rb b/app/controllers/map_bugs_controller.rb index ef965ea3c..5064f0886 100644 --- a/app/controllers/map_bugs_controller.rb +++ b/app/controllers/map_bugs_controller.rb @@ -30,25 +30,15 @@ class MapBugsController < ApplicationController return end - bugs = MapBug.find_by_area(min_lat, min_lon, max_lat, max_lon, :order => "last_changed DESC", :limit => 100, :conditions => "status != 'hidden'") - - resp = "" - - bugs.each do |bug| - resp += "putAJAXMarker(" + bug.id.to_s + ", " + bug.lon.to_s + ", " + bug.lat.to_s; - comment_no = 1 - bug.map_bug_comment.each do |comment| - resp += (comment_no == 1 ? ", '" : "
") - resp += comment.comment if comment.comment - resp += " [ " - resp += comment.commenter_name if comment.commenter_name - resp += " " + comment.date_created.to_s + " ]" - comment_no += 1 - end - resp += (comment_no == 1 ? "," : "', ") + (bug.status=="open"?"0":"1") + ");\n" + @bugs = MapBug.find_by_area(min_lat, min_lon, max_lat, max_lon, :order => "last_changed DESC", :limit => 100, :conditions => "status != 'hidden'") + + respond_to do |format| + format.html {render :template => 'map_bugs/get_bugs.js', :content_type => "text/javascript"} + format.rss {render :template => 'map_bugs/get_bugs.rss'} + format.js + format.xml {render :template => 'map_bugs/get_bugs.xml'} + #format.gpx {render :text => "Rendering GPX"} end - - render :text => resp, :content_type => "text/javascript" end def add_bug @@ -104,11 +94,13 @@ class MapBugsController < ApplicationController end def rss - ##TODO: needs to be implemented + request.format = :rss + get_bugs end def gpx_bugs - ##TODO: needs to be implemented + request.format = :xml + get_bugs end def add_comment(bug, comment) diff --git a/app/models/map_bug.rb b/app/models/map_bug.rb index 0a0039872..e04e180be 100644 --- a/app/models/map_bug.rb +++ b/app/models/map_bug.rb @@ -29,4 +29,20 @@ class MapBug < ActiveRecord::Base self.save; end + def flatten_comment ( separator_char ) + resp = "" + comment_no = 1 + self.map_bug_comment.each do |comment| + resp += (comment_no == 1 ? "" : separator_char) + resp += comment.comment if comment.comment + resp += " [ " + resp += comment.commenter_name if comment.commenter_name + resp += " " + comment.date_created.to_s + " ]" + comment_no += 1 + end + + return resp + + end + end diff --git a/app/views/map_bugs/get_bugs.js.erb b/app/views/map_bugs/get_bugs.js.erb new file mode 100644 index 000000000..0364587df --- /dev/null +++ b/app/views/map_bugs/get_bugs.js.erb @@ -0,0 +1,7 @@ +<% if @bugs.empty? %> + +<% else %> + <% @bugs.each do |bug| %> +putAJAXMarker(<%= bug.id.to_s %> , <%= bug.lon.to_s %> , <%= bug.lat.to_s %> , '<%= bug.flatten_comment("
") %>', <%= (bug.status=="open"?"0":"1") %> ); + <% end %> +<% end %> \ No newline at end of file diff --git a/app/views/map_bugs/get_bugs.rss.builder b/app/views/map_bugs/get_bugs.rss.builder new file mode 100644 index 000000000..49008ce95 --- /dev/null +++ b/app/views/map_bugs/get_bugs.rss.builder @@ -0,0 +1,33 @@ +xml.instruct! + +xml.rss("version" => "2.0", + "xmlns:geo" => "http://www.w3.org/2003/01/geo/wgs84_pos#", + "xmlns:georss" => "http://www.georss.org/georss") do + xml.channel do + xml.title "OpenStreetBugs" + xml.description "A list of bugs, reported, commented on or closed in your area" + xml.link url_for(:controller => "site", :action => "index", :only_path => false) + + for bug in @bugs + xml.item do + if bug.status == "closed" + xml.title "Closed bug" + else if bug.map_bug_comment.length > 1 + xml.title "Commented on bug" + else + xml.title "Created bug" + end end + + xml.link url_for(:controller => "site", :action => "index", :only_path => false) + xml.description bug.flatten_comment("|") + if (!bug.map_bug_comment.empty?) + xml.author bug.map_bug_comment[-1].commenter_name + end + xml.pubDate bug.last_changed.to_s(:rfc822) + xml.geo :lat, bug.lat + xml.geo :long, bug.lon + xml.georss :point, "#{bug.lat} #{bug.lon}" + end + end + end +end diff --git a/app/views/map_bugs/get_bugs.xml.builder b/app/views/map_bugs/get_bugs.xml.builder new file mode 100644 index 000000000..be7e9cf7a --- /dev/null +++ b/app/views/map_bugs/get_bugs.xml.builder @@ -0,0 +1,23 @@ +xml.instruct! + + +xml.gpx("version" => "1.1", + "xmlns:xsi" => "http://www.w3.org/2001/XMLSchema-instance", + "xsi:schemaLocation" => "http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd") do + + for bug in @bugs + xml.wpt("lon" => bug.lon, "lat" => bug.lat) do + xml.desc do + xml.cdata! bug.flatten_comment("
") + end + xml.extension do + if bug.status = "open" + xml.closed "0" + else + xml.closed "1" + end + xml.id bug.id + end + end + end +end -- 2.43.2