Refactor: convert WikiController to a REST resource
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@4303 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
parent
e7e7a91b85
commit
c514dd6885
|
@ -98,7 +98,7 @@ class WikiController < ApplicationController
|
|||
flash[:error] = l(:notice_locking_conflict)
|
||||
end
|
||||
|
||||
verify :method => :post, :only => :update, :render => {:nothing => true, :status => :method_not_allowed }
|
||||
verify :method => :put, :only => :update, :render => {:nothing => true, :status => :method_not_allowed }
|
||||
# Creates a new page or updates an existing one
|
||||
def update
|
||||
@page = @wiki.find_or_new_page(params[:id])
|
||||
|
@ -234,7 +234,7 @@ class WikiController < ApplicationController
|
|||
return render_403 unless editable?
|
||||
attachments = Attachment.attach_files(@page, params[:attachments])
|
||||
render_attachment_warning_if_needed(@page)
|
||||
redirect_to :action => 'show', :id => @page.title
|
||||
redirect_to :action => 'show', :id => @page.title, :project_id => @project
|
||||
end
|
||||
|
||||
private
|
||||
|
|
|
@ -541,7 +541,8 @@ module ApplicationHelper
|
|||
when :local; "#{title}.html"
|
||||
when :anchor; "##{title}" # used for single-file wiki export
|
||||
else
|
||||
url_for(:only_path => only_path, :controller => 'wiki', :action => 'show', :project_id => link_project, :id => Wiki.titleize(page), :anchor => anchor)
|
||||
wiki_page_id = page.present? ? Wiki.titleize(page) : nil
|
||||
url_for(:only_path => only_path, :controller => 'wiki', :action => 'show', :project_id => link_project, :id => wiki_page_id, :anchor => anchor)
|
||||
end
|
||||
link_to((title || page), url, :class => ('wiki-page' + (wiki_page ? '' : ' new')))
|
||||
else
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
<td class="description"><%=h version.description %></td>
|
||||
<td class="status"><%= l("version_status_#{version.status}") %></td>
|
||||
<td class="sharing"><%=h format_version_sharing(version.sharing) %></td>
|
||||
<td><%= link_to(h(version.wiki_page_title), :controller => 'wiki', :id => Wiki.titleize(version.wiki_page_title)) unless version.wiki_page_title.blank? || @project.wiki.nil? %></td>
|
||||
<td><%= link_to(h(version.wiki_page_title), :controller => 'wiki', :action => 'show', :id => Wiki.titleize(version.wiki_page_title), :project_id => @project) unless version.wiki_page_title.blank? || @project.wiki.nil? %></td>
|
||||
<td class="buttons">
|
||||
<% if version.project == @project %>
|
||||
<%= link_to_if_authorized l(:button_edit), {:controller => 'versions', :action => 'edit', :id => version }, :class => 'icon icon-edit' %>
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
<h3><%= format_date(date) %></h3>
|
||||
<ul>
|
||||
<% @pages_by_date[date].each do |page| %>
|
||||
<li><%= link_to page.pretty_title, :action => 'show', :id => page.title %></li>
|
||||
<li><%= link_to page.pretty_title, :action => 'show', :id => page.title, :project_id => page.project %></li>
|
||||
<% end %>
|
||||
</ul>
|
||||
<% end %>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<h2><%=h @page.pretty_title %></h2>
|
||||
|
||||
<% form_for :content, @content, :url => {:action => 'update', :id => @page.title}, :html => {:multipart => true, :id => 'wiki_form'} do |f| %>
|
||||
<% form_for :content, @content, :url => {:action => 'update', :id => @page.title}, :html => {:method => :put, :multipart => true, :id => 'wiki_form'} do |f| %>
|
||||
<%= f.hidden_field :version %>
|
||||
<%= error_messages_for 'content' %>
|
||||
|
||||
|
@ -11,7 +11,7 @@
|
|||
<p><%= submit_tag l(:button_save) %>
|
||||
<%= link_to_remote l(:label_preview),
|
||||
{ :url => { :controller => 'wiki', :action => 'preview', :project_id => @project, :id => @page.title },
|
||||
:method => 'post',
|
||||
:method => :post,
|
||||
:update => 'preview',
|
||||
:with => "Form.serialize('wiki_form')",
|
||||
:complete => "Element.scrollTo('preview')"
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
<% line_num = 1 %>
|
||||
<% @versions.each do |ver| %>
|
||||
<tr class="<%= cycle("odd", "even") %>">
|
||||
<td class="id"><%= link_to ver.version, :action => 'show', :id => @page.title, :version => ver.version %></td>
|
||||
<td class="id"><%= link_to ver.version, :action => 'show', :id => @page.title, :project_id => @page.project, :version => ver.version %></td>
|
||||
<td class="checkbox"><%= radio_button_tag('version', ver.version, (line_num==1), :id => "cb-#{line_num}", :onclick => "$('cbto-#{line_num+1}').checked=true;") if show_diff && (line_num < @versions.size) %></td>
|
||||
<td class="checkbox"><%= radio_button_tag('version_from', ver.version, (line_num==2), :id => "cbto-#{line_num}") if show_diff && (line_num > 1) %></td>
|
||||
<td align="center"><%= format_time(ver.updated_on) %></td>
|
||||
|
|
|
@ -11,15 +11,15 @@
|
|||
<%= link_to_if_authorized(l(:label_history), {:action => 'history', :id => @page.title}, :class => 'icon icon-history') %>
|
||||
</div>
|
||||
|
||||
<%= breadcrumb(@page.ancestors.reverse.collect {|parent| link_to h(parent.pretty_title), {:id => parent.title}}) %>
|
||||
<%= breadcrumb(@page.ancestors.reverse.collect {|parent| link_to h(parent.pretty_title), {:id => parent.title, :project_id => parent.project}}) %>
|
||||
|
||||
<% if @content.version != @page.content.version %>
|
||||
<p>
|
||||
<%= link_to(('« ' + l(:label_previous)), :action => 'show', :id => @page.title, :version => (@content.version - 1)) + " - " if @content.version > 1 %>
|
||||
<%= link_to(('« ' + l(:label_previous)), :action => 'show', :id => @page.title, :project_id => @page.project, :version => (@content.version - 1)) + " - " if @content.version > 1 %>
|
||||
<%= "#{l(:label_version)} #{@content.version}/#{@page.content.version}" %>
|
||||
<%= '(' + link_to('diff', :controller => 'wiki', :action => 'diff', :id => @page.title, :version => @content.version) + ')' if @content.version > 1 %> -
|
||||
<%= link_to((l(:label_next) + ' »'), :action => 'show', :id => @page.title, :version => (@content.version + 1)) + " - " if @content.version < @page.content.version %>
|
||||
<%= link_to(l(:label_current_version), :action => 'show', :id => @page.title) %>
|
||||
<%= '(' + link_to('diff', :controller => 'wiki', :action => 'diff', :id => @page.title, :project_id => @page.project, :version => @content.version) + ')' if @content.version > 1 %> -
|
||||
<%= link_to((l(:label_next) + ' »'), :action => 'show', :id => @page.title, :project_id => @page.project, :version => (@content.version + 1)) + " - " if @content.version < @page.content.version %>
|
||||
<%= link_to(l(:label_current_version), :action => 'show', :id => @page.title, :project_id => @page.project) %>
|
||||
<br />
|
||||
<em><%= @content.author ? @content.author.name : "anonyme" %>, <%= format_time(@content.updated_on) %> </em><br />
|
||||
<%=h @content.comments %>
|
||||
|
|
|
@ -27,27 +27,6 @@ ActionController::Routing::Routes.draw do |map|
|
|||
map.connect 'projects/:id/wiki', :controller => 'wikis', :action => 'edit', :conditions => {:method => :post}
|
||||
map.connect 'projects/:id/wiki/destroy', :controller => 'wikis', :action => 'destroy', :conditions => {:method => :get}
|
||||
map.connect 'projects/:id/wiki/destroy', :controller => 'wikis', :action => 'destroy', :conditions => {:method => :post}
|
||||
map.with_options :controller => 'wiki' do |wiki_routes|
|
||||
wiki_routes.with_options :conditions => {:method => :get} do |wiki_views|
|
||||
wiki_views.connect 'projects/:project_id/wiki/export', :action => 'export'
|
||||
wiki_views.connect 'projects/:project_id/wiki/index', :action => 'index'
|
||||
wiki_views.connect 'projects/:project_id/wiki/date_index', :action => 'date_index'
|
||||
wiki_views.connect 'projects/:project_id/wiki/:id', :action => 'show', :id => nil
|
||||
wiki_views.connect 'projects/:project_id/wiki/:id/edit', :action => 'edit'
|
||||
wiki_views.connect 'projects/:project_id/wiki/:id/rename', :action => 'rename'
|
||||
wiki_views.connect 'projects/:project_id/wiki/:id/history', :action => 'history'
|
||||
wiki_views.connect 'projects/:project_id/wiki/:id/diff/:version/vs/:version_from', :action => 'diff'
|
||||
wiki_views.connect 'projects/:project_id/wiki/:id/annotate/:version', :action => 'annotate'
|
||||
end
|
||||
|
||||
wiki_routes.connect 'projects/:project_id/wiki/:id/:action',
|
||||
:action => /rename|preview|protect|add_attachment/,
|
||||
:conditions => {:method => :post}
|
||||
|
||||
wiki_routes.connect 'projects/:project_id/wiki/:id/edit', :action => 'update', :conditions => {:method => :post}
|
||||
|
||||
wiki_routes.connect 'projects/:project_id/wiki/:id', :action => 'destroy', :conditions => {:method => :delete}
|
||||
end
|
||||
|
||||
map.with_options :controller => 'messages' do |messages_routes|
|
||||
messages_routes.with_options :conditions => {:method => :get} do |messages_views|
|
||||
|
@ -168,7 +147,21 @@ ActionController::Routing::Routes.draw do |map|
|
|||
project.resources :news, :shallow => true
|
||||
project.resources :time_entries, :controller => 'timelog', :path_prefix => 'projects/:project_id'
|
||||
|
||||
|
||||
project.wiki_start_page 'wiki', :controller => 'wiki', :action => 'show', :conditions => {:method => :get}
|
||||
project.wiki_index 'wiki/index', :controller => 'wiki', :action => 'index', :conditions => {:method => :get}
|
||||
project.wiki_diff 'wiki/:id/diff/:version/vs/:version_from', :controller => 'wiki', :action => 'diff'
|
||||
project.wiki_annotate 'wiki/:id/annotate/:version', :controller => 'wiki', :action => 'annotate'
|
||||
project.resources :wiki, :except => [:new, :create], :member => {
|
||||
:rename => [:get, :post],
|
||||
:history => :get,
|
||||
:preview => :any,
|
||||
:protect => :post,
|
||||
:add_attachment => :post
|
||||
}, :collection => {
|
||||
:export => :get,
|
||||
:date_index => :get
|
||||
}
|
||||
|
||||
end
|
||||
|
||||
# Destroy uses a get request to prompt the user before the actual DELETE request
|
||||
|
|
|
@ -80,7 +80,7 @@ class WikiControllerTest < ActionController::TestCase
|
|||
|
||||
def test_create_page
|
||||
@request.session[:user_id] = 2
|
||||
post :update, :project_id => 1,
|
||||
put :update, :project_id => 1,
|
||||
:id => 'New page',
|
||||
:content => {:comments => 'Created the page',
|
||||
:text => "h1. New page\n\nThis is a new page",
|
||||
|
@ -96,7 +96,7 @@ class WikiControllerTest < ActionController::TestCase
|
|||
@request.session[:user_id] = 2
|
||||
assert_difference 'WikiPage.count' do
|
||||
assert_difference 'Attachment.count' do
|
||||
post :update, :project_id => 1,
|
||||
put :update, :project_id => 1,
|
||||
:id => 'New page',
|
||||
:content => {:comments => 'Created the page',
|
||||
:text => "h1. New page\n\nThis is a new page",
|
||||
|
|
|
@ -322,12 +322,13 @@ class RoutingTest < ActionController::IntegrationTest
|
|||
should_route :get, "/projects/567/wiki/date_index", :controller => 'wiki', :action => 'date_index', :project_id => '567'
|
||||
should_route :get, "/projects/567/wiki/export", :controller => 'wiki', :action => 'export', :project_id => '567'
|
||||
|
||||
should_route :post, "/projects/567/wiki/my_page/edit", :controller => 'wiki', :action => 'update', :project_id => '567', :id => 'my_page'
|
||||
should_route :post, "/projects/567/wiki/CookBook_documentation/preview", :controller => 'wiki', :action => 'preview', :project_id => '567', :id => 'CookBook_documentation'
|
||||
should_route :post, "/projects/22/wiki/ladida/rename", :controller => 'wiki', :action => 'rename', :project_id => '22', :id => 'ladida'
|
||||
should_route :post, "/projects/22/wiki/ladida/protect", :controller => 'wiki', :action => 'protect', :project_id => '22', :id => 'ladida'
|
||||
should_route :post, "/projects/22/wiki/ladida/add_attachment", :controller => 'wiki', :action => 'add_attachment', :project_id => '22', :id => 'ladida'
|
||||
|
||||
should_route :put, "/projects/567/wiki/my_page", :controller => 'wiki', :action => 'update', :project_id => '567', :id => 'my_page'
|
||||
|
||||
should_route :delete, "/projects/22/wiki/ladida", :controller => 'wiki', :action => 'destroy', :project_id => '22', :id => 'ladida'
|
||||
end
|
||||
|
||||
|
|
|
@ -253,8 +253,8 @@ RAW
|
|||
'[[Unknown page]]' => '<a href="/projects/ecookbook/wiki/Unknown_page" class="wiki-page new">Unknown page</a>',
|
||||
'[[Unknown page|404]]' => '<a href="/projects/ecookbook/wiki/Unknown_page" class="wiki-page new">404</a>',
|
||||
# link to another project wiki
|
||||
'[[onlinestore:]]' => '<a href="/projects/onlinestore/wiki/" class="wiki-page">onlinestore</a>',
|
||||
'[[onlinestore:|Wiki]]' => '<a href="/projects/onlinestore/wiki/" class="wiki-page">Wiki</a>',
|
||||
'[[onlinestore:]]' => '<a href="/projects/onlinestore/wiki" class="wiki-page">onlinestore</a>',
|
||||
'[[onlinestore:|Wiki]]' => '<a href="/projects/onlinestore/wiki" class="wiki-page">Wiki</a>',
|
||||
'[[onlinestore:Start page]]' => '<a href="/projects/onlinestore/wiki/Start_page" class="wiki-page">Start page</a>',
|
||||
'[[onlinestore:Start page|Text]]' => '<a href="/projects/onlinestore/wiki/Start_page" class="wiki-page">Text</a>',
|
||||
'[[onlinestore:Unknown page]]' => '<a href="/projects/onlinestore/wiki/Unknown_page" class="wiki-page new">Unknown page</a>',
|
||||
|
|
Loading…
Reference in New Issue