From 8294dced6c51472390c13786ab4cace4bcf8c7d4 Mon Sep 17 00:00:00 2001
From: Alexander <alxndr+github@gmail.com>
Date: Wed, 18 Dec 2013 11:06:36 -0500
Subject: [PATCH] tweak RSS elements for W3C compatibility

installation needs to have contact_email set in the admin settings in
order for that installation to have truly valid feeds
---
 app/views/list/list.rss.erb   |  9 ++++-----
 app/views/topics/show.rss.erb | 11 +++++------
 config/routes.rb              |  2 +-
 3 files changed, 10 insertions(+), 12 deletions(-)

diff --git a/app/views/list/list.rss.erb b/app/views/list/list.rss.erb
index a9c949c14..eaf7c608b 100644
--- a/app/views/list/list.rss.erb
+++ b/app/views/list/list.rss.erb
@@ -2,22 +2,21 @@
 <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
   <channel>
     <% lang = SiteSetting.find_by_name('default_locale').try(:value) %>
+    <% site_email = SiteSetting.find_by_name('contact_email').try(:value) %>
     <title><%= @title %></title>
     <link><%= @link %></link>
     <description><%= @description %></description>
-    <% if lang %>
-      <language><%= lang %></language>
-    <% end %>
+    <%= "<language>#{lang}</language>" if lang %>
     <lastBuildDate><%= @topic_list.topics.first.created_at.rfc2822 %></lastBuildDate>
     <atom:link href="<%= @atom_link %>" rel="self" type="application/rss+xml" />
     <% @topic_list.topics.each do |topic| %>
       <% topic_url = Discourse.base_url + topic.relative_url -%>
       <item>
         <title><%= topic.title %></title>
-        <author><%= "@#{topic.user.username} (#{topic.user.name})" -%></author>
+        <author><%= "#{site_email} (@#{topic.user.username}#{" #{topic.user.name}" if topic.user.name.present?})" -%></author>
         <category><%= topic.category.name %></category>
         <description><![CDATA[
-          <p><%= t('author_wrote', author: link_to(topic.user.name, topic.user)).html_safe %></p>
+          <p><%= t('author_wrote', author: link_to(topic.user.name, userpage_url(topic.user))).html_safe %></p>
           <blockquote>
             <%= topic.posts.first.cooked.html_safe %>
           </blockquote>
diff --git a/app/views/topics/show.rss.erb b/app/views/topics/show.rss.erb
index 85d1e2e57..61be3b86a 100644
--- a/app/views/topics/show.rss.erb
+++ b/app/views/topics/show.rss.erb
@@ -3,23 +3,22 @@
   <channel>
     <% topic_url = Discourse.base_url + @topic_view.relative_url %>
     <% lang = SiteSetting.find_by_name('default_locale').try(:value) %>
+    <% site_email = SiteSetting.find_by_name('contact_email').try(:value) %>
     <title><%= @topic_view.title %></title>
     <link><%= topic_url %></link>
     <description><%= @topic_view.posts.first.raw %></description>
-    <% if lang %>
-      <language><%= lang %></language>
-    <% end %>
+    <%= "<language>#{lang}</language>" if lang %>
     <lastBuildDate><%= @topic_view.topic.created_at.rfc2822 %></lastBuildDate>
     <category><%= @topic_view.topic.category.name %></category>
     <atom:link href="<%= topic_url %>.rss" rel="self" type="application/rss+xml" />
     <% @topic_view.recent_posts.each do |post| %>
       <% next unless post.user %>
       <item>
-        <title><%= @topic_view.title %> at <%= post.created_at %></title>
-        <author><%= "@#{post.user.username} (#{post.user.name})" -%></author>
+        <title><%= @topic_view.title %></title>
+        <author><%= "#{site_email} (@#{post.user.username}#{" #{post.user.name}" if post.user.name.present?})" -%></author>
         <description><![CDATA[
           <% post_url = Discourse.base_url + post.url %>
-          <p><%= t('author_wrote', author: link_to(post.user.name, post.user)).html_safe %></p>
+          <p><%= t('author_wrote', author: link_to(post.user.name, userpage_url(post.user))).html_safe %></p>
           <blockquote>
             <%= post.cooked.html_safe %>
           </blockquote>
diff --git a/config/routes.rb b/config/routes.rb
index d91aa1793..36fb3dbcf 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -140,7 +140,7 @@ Discourse::Application.routes.draw do
   get 'user_preferences' => 'users#user_preferences_redirect'
   get 'users/:username/private-messages' => 'user_actions#private_messages', constraints: {username: USERNAME_ROUTE_FORMAT}
   get 'users/:username/private-messages/:filter' => 'user_actions#private_messages', constraints: {username: USERNAME_ROUTE_FORMAT}
-  get 'users/:username' => 'users#show', constraints: {username: USERNAME_ROUTE_FORMAT}
+  get 'users/:username' => 'users#show', as: 'userpage', constraints: {username: USERNAME_ROUTE_FORMAT}
   put 'users/:username' => 'users#update', constraints: {username: USERNAME_ROUTE_FORMAT}
   get 'users/:username/preferences' => 'users#preferences', constraints: {username: USERNAME_ROUTE_FORMAT}, as: :email_preferences
   get 'users/:username/preferences/email' => 'users#preferences', constraints: {username: USERNAME_ROUTE_FORMAT}