Commit a7e32302 authored by Jean-Philippe Lang's avatar Jean-Philippe Lang

Adds single forum atom feed (#3181).

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@2682 e93f8b46-1217-0410-a6f0-8f06a7374b81
parent 6385217b
...@@ -35,19 +35,29 @@ class BoardsController < ApplicationController ...@@ -35,19 +35,29 @@ class BoardsController < ApplicationController
end end
def show def show
sort_init 'updated_on', 'desc' respond_to do |format|
sort_update 'created_on' => "#{Message.table_name}.created_on", format.html {
'replies' => "#{Message.table_name}.replies_count", sort_init 'updated_on', 'desc'
'updated_on' => "#{Message.table_name}.updated_on" sort_update 'created_on' => "#{Message.table_name}.created_on",
'replies' => "#{Message.table_name}.replies_count",
@topic_count = @board.topics.count 'updated_on' => "#{Message.table_name}.updated_on"
@topic_pages = Paginator.new self, @topic_count, per_page_option, params['page']
@topics = @board.topics.find :all, :order => ["#{Message.table_name}.sticky DESC", sort_clause].compact.join(', '), @topic_count = @board.topics.count
:include => [:author, {:last_reply => :author}], @topic_pages = Paginator.new self, @topic_count, per_page_option, params['page']
:limit => @topic_pages.items_per_page, @topics = @board.topics.find :all, :order => ["#{Message.table_name}.sticky DESC", sort_clause].compact.join(', '),
:offset => @topic_pages.current.offset :include => [:author, {:last_reply => :author}],
@message = Message.new :limit => @topic_pages.items_per_page,
render :action => 'show', :layout => !request.xhr? :offset => @topic_pages.current.offset
@message = Message.new
render :action => 'show', :layout => !request.xhr?
}
format.atom {
@messages = @board.messages.find :all, :order => 'created_on DESC',
:include => [:author, :board],
:limit => Setting.feeds_limit.to_i
render_feed(@messages, :title => "#{@project}: #{@board}")
}
end
end end
verify :method => :post, :only => [ :destroy ], :redirect_to => { :action => :index } verify :method => :post, :only => [ :destroy ], :redirect_to => { :action => :index }
......
...@@ -27,6 +27,10 @@ class Board < ActiveRecord::Base ...@@ -27,6 +27,10 @@ class Board < ActiveRecord::Base
validates_length_of :name, :maximum => 30 validates_length_of :name, :maximum => 30
validates_length_of :description, :maximum => 255 validates_length_of :description, :maximum => 255
def to_s
name
end
def reset_counters! def reset_counters!
self.class.reset_counters!(id) self.class.reset_counters!(id)
end end
......
...@@ -59,4 +59,12 @@ ...@@ -59,4 +59,12 @@
<p class="nodata"><%= l(:label_no_data) %></p> <p class="nodata"><%= l(:label_no_data) %></p>
<% end %> <% end %>
<% other_formats_links do |f| %>
<%= f.link_to 'Atom', :url => {:key => User.current.rss_key} %>
<% end %>
<% html_title h(@board.name) %> <% html_title h(@board.name) %>
<% content_for :header_tags do %>
<%= auto_discovery_link_tag(:atom, {:format => 'atom', :key => User.current.rss_key}, :title => "#{@project}: #{@board}") %>
<% end %>
...@@ -86,6 +86,7 @@ ActionController::Routing::Routes.draw do |map| ...@@ -86,6 +86,7 @@ ActionController::Routing::Routes.draw do |map|
board_views.connect 'projects/:project_id/boards', :action => 'index' board_views.connect 'projects/:project_id/boards', :action => 'index'
board_views.connect 'projects/:project_id/boards/new', :action => 'new' board_views.connect 'projects/:project_id/boards/new', :action => 'new'
board_views.connect 'projects/:project_id/boards/:id', :action => 'show' board_views.connect 'projects/:project_id/boards/:id', :action => 'show'
board_views.connect 'projects/:project_id/boards/:id.:format', :action => 'show'
board_views.connect 'projects/:project_id/boards/:id/edit', :action => 'edit' board_views.connect 'projects/:project_id/boards/:id/edit', :action => 'edit'
end end
board_routes.with_options :conditions => {:method => :post} do |board_actions| board_routes.with_options :conditions => {:method => :post} do |board_actions|
......
...@@ -84,6 +84,10 @@ class BoardsControllerTest < Test::Unit::TestCase ...@@ -84,6 +84,10 @@ class BoardsControllerTest < Test::Unit::TestCase
{:method => :get, :path => '/projects/world_domination/boards/44'}, {:method => :get, :path => '/projects/world_domination/boards/44'},
:controller => 'boards', :action => 'show', :id => '44', :project_id => 'world_domination' :controller => 'boards', :action => 'show', :id => '44', :project_id => 'world_domination'
) )
assert_routing(
{:method => :get, :path => '/projects/world_domination/boards/44.atom'},
:controller => 'boards', :action => 'show', :id => '44', :project_id => 'world_domination', :format => 'atom'
)
end end
def test_show def test_show
...@@ -95,6 +99,15 @@ class BoardsControllerTest < Test::Unit::TestCase ...@@ -95,6 +99,15 @@ class BoardsControllerTest < Test::Unit::TestCase
assert_not_nil assigns(:topics) assert_not_nil assigns(:topics)
end end
def test_show_atom
get :show, :project_id => 1, :id => 1, :format => 'atom'
assert_response :success
assert_template 'common/feed.atom'
assert_not_nil assigns(:board)
assert_not_nil assigns(:project)
assert_not_nil assigns(:messages)
end
def test_edit_routing def test_edit_routing
assert_routing( assert_routing(
{:method => :get, :path => '/projects/world_domination/boards/44/edit'}, {:method => :get, :path => '/projects/world_domination/boards/44/edit'},
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment