Tidy up message sensitisation a bit more, and add sensitisation of
authorTom Hughes <tom@compton.nu>
Wed, 16 Jan 2008 10:02:42 +0000 (10:02 +0000)
committerTom Hughes <tom@compton.nu>
Wed, 16 Jan 2008 10:02:42 +0000 (10:02 +0000)
information in the diary RSS feeds.

app/controllers/diary_entry_controller.rb
app/helpers/application_helper.rb
app/views/diary_entry/_diary_entry.rhtml
app/views/diary_entry/rss.rxml [new file with mode: 0644]
app/views/message/read.rhtml

index e763dfd7225ef7eaff433ca618fbebe8773077ed..3637ad97dea9c250b0817a8d56825ab97d578c4d 100644 (file)
@@ -1,5 +1,5 @@
 class DiaryEntryController < ApplicationController
-  layout 'site'
+  layout 'site', :except => :rss
   
   before_filter :authorize_web
   before_filter :require_user, :only => [:new]
@@ -32,19 +32,16 @@ class DiaryEntryController < ApplicationController
 
   def rss
     if params[:display_name]
-      @this_user = User.find_by_display_name(params[:display_name])
-      @entries=DiaryEntry.find(:all, :conditions => ['user_id = ?', @this_user.id], :order => 'created_at DESC', :limit => 20)
-      rss = OSM::GeoRSS.new("OpenStreetMap diary entries for #{@this_user.display_name}", "Recent OpenStreetmap diary entries from #{@this_user.display_name}", "http://www.openstreetmap.org/user/#{@this_user.display_name}/diary") 
+      user = User.find_by_display_name(params[:display_name])
+      @entries = DiaryEntry.find(:all, :conditions => ['user_id = ?', user.id], :order => 'created_at DESC', :limit => 20)
+      @title = "OpenStreetMap diary entries for #{user.display_name}"
+      @description = "Recent OpenStreetmap diary entries from #{user.display_name}"
+      @link = "http://www.openstreetmap.org/user/#{user.display_name}/diary"
     else
-      @entries=DiaryEntry.find(:all, :order => 'created_at DESC', :limit => 20)
-      rss = OSM::GeoRSS.new('OpenStreetMap diary entries', 'Recent diary entries from users of OpenStreetMap', 'http://www.openstreetmap.org/diary') 
-    end
-
-    @entries.each do |entry|
-      rss.add(entry.latitude, entry.longitude, entry.title, entry.user.display_name, url_for({:controller => 'diary_entry', :action => 'list', :id => entry.id, :display_name => entry.user.display_name}), entry.body, entry.created_at)
+      @entries = DiaryEntry.find(:all, :order => 'created_at DESC', :limit => 20)
+      @title = "OpenStreetMap diary entries"
+      @description = "Recent diary entries from users of OpenStreetMap"
+      @link = "http://www.openstreetmap.org/diary"
     end
-
-    render :text => rss.to_s, :content_type => "application/rss+xml"
   end
-
 end
index 22a7940eb213fec161352153800c9c6948c8b43c..9c2b5fd3fe9376854d0d503edce6ef31f13ce29e 100644 (file)
@@ -1,3 +1,5 @@
-# Methods added to this helper will be available to all templates in the application.
 module ApplicationHelper
+  def htmlize(text)
+    return sanitize(auto_link(simple_format(text), :urls))
+  end
 end
index 6cb6653acb0aac430c026ad60f4be08ef11f69ad..4cf824600d9418fa7a737a7634aa2b8e8d588293 100644 (file)
@@ -1,5 +1,5 @@
 <b><%= h(diary_entry.title) %></b><br />
-<%= sanitize(auto_link(simple_format(diary_entry.body), :urls)) %>
+<%= htmlize(diary_entry.body) %>
 <% if diary_entry.latitude and diary_entry.longitude %>
 Coordinates: <div class="geo" style="display: inline"><span class="latitude"><%= diary_entry.latitude %></span>; <span class="longitude"><%= diary_entry.longitude %></span></div> (<%=link_to 'map', :controller => 'site', :action => 'index', :lat => diary_entry.latitude, :lon => diary_entry.longitude, :zoom => 14 %> / <%=link_to 'edit', :controller => 'site', :action => 'edit', :lat => diary_entry.latitude, :lon => diary_entry.longitude, :zoom => 14 %>)<br/>
 <% end %>
diff --git a/app/views/diary_entry/rss.rxml b/app/views/diary_entry/rss.rxml
new file mode 100644 (file)
index 0000000..16e2592
--- /dev/null
@@ -0,0 +1,35 @@
+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 @title
+    xml.description @description
+    xml.link url_for(:action => "list", :only_path => false)
+    xml.image do
+      xml.url "http://www.openstreetmap.org/images/mag_map-rss2.0.png"
+      xml.title "OpenStreetMap"
+      xml.width "100"
+      xml.height "100"
+      xml.link url_for(:action => "list", :only_path => false)
+    end
+
+    for entry in @entries
+      xml.item do
+        xml.title h(entry.title)
+        xml.link url_for(:action => "list", :id => entry.id, :display_name => entry.user.display_name, :only_path => false)
+        xml.guid url_for(:action => "list", :id => entry.id, :display_name => entry.user.display_name, :only_path => false)
+        xml.description htmlize(entry.body)
+        xml.author entry.user.display_name
+        xml.pubDate entry.created_at.to_s(:rfc822)
+        
+        if entry.latitude and entry.longitude
+          xml.geo :lat, entry.latitude.to_s
+          xml.geo :long, entry.longitude.to_s
+          xml.georss :point, "#{entry.latitude.to_s} #{entry.longitude.to_s}"
+        end
+      end
+    end
+  end
+end
index d0517d0bfbb0b76d2dd743e64427a6b259643e99..7c010b9d5e90ebbfb23ed0c69fc9fb9a2b5ed1dc 100644 (file)
@@ -17,7 +17,7 @@
   </tr>
   <tr>
     <th></th>
-    <td><%= sanitize(@message.body) %></td>
+    <td><%= htmlize(@message.body) %></td>
   </tr>
 </table>
 
@@ -50,7 +50,7 @@
   </tr>
   <tr>
     <th></th>
-    <td><%= sanitize(@message.body) %></td>
+    <td><%= htmlize(@message.body) %></td>
   </tr>
 </table>