Refactor: split WikiController#edit into #update
update will handle the saving and should be accessed via POST only. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@4272 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
parent
2fbf7bbcf1
commit
cac3b1e538
|
@ -71,34 +71,48 @@ class WikiController < ApplicationController
|
|||
@content.text = initial_page_content(@page) if @content.text.blank?
|
||||
# don't keep previous comment
|
||||
@content.comments = nil
|
||||
if request.get?
|
||||
# To prevent StaleObjectError exception when reverting to a previous version
|
||||
@content.version = @page.content.version
|
||||
else
|
||||
if !@page.new_record? && @content.text == params[:content][:text]
|
||||
attachments = Attachment.attach_files(@page, params[:attachments])
|
||||
render_attachment_warning_if_needed(@page)
|
||||
# don't save if text wasn't changed
|
||||
redirect_to :action => 'show', :project_id => @project, :page => @page.title
|
||||
return
|
||||
end
|
||||
#@content.text = params[:content][:text]
|
||||
#@content.comments = params[:content][:comments]
|
||||
@content.attributes = params[:content]
|
||||
@content.author = User.current
|
||||
# if page is new @page.save will also save content, but not if page isn't a new record
|
||||
if (@page.new_record? ? @page.save : @content.save)
|
||||
attachments = Attachment.attach_files(@page, params[:attachments])
|
||||
render_attachment_warning_if_needed(@page)
|
||||
call_hook(:controller_wiki_edit_after_save, { :params => params, :page => @page})
|
||||
redirect_to :action => 'show', :project_id => @project, :page => @page.title
|
||||
end
|
||||
end
|
||||
|
||||
# To prevent StaleObjectError exception when reverting to a previous version
|
||||
@content.version = @page.content.version
|
||||
rescue ActiveRecord::StaleObjectError
|
||||
# Optimistic locking exception
|
||||
flash[:error] = l(:notice_locking_conflict)
|
||||
end
|
||||
|
||||
|
||||
verify :method => :post, :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[:page])
|
||||
return render_403 unless editable?
|
||||
@page.content = WikiContent.new(:page => @page) if @page.new_record?
|
||||
|
||||
@content = @page.content_for_version(params[:version])
|
||||
@content.text = initial_page_content(@page) if @content.text.blank?
|
||||
# don't keep previous comment
|
||||
@content.comments = nil
|
||||
|
||||
if !@page.new_record? && params[:content].present? && @content.text == params[:content][:text]
|
||||
attachments = Attachment.attach_files(@page, params[:attachments])
|
||||
render_attachment_warning_if_needed(@page)
|
||||
# don't save if text wasn't changed
|
||||
redirect_to :action => 'show', :project_id => @project, :page => @page.title
|
||||
return
|
||||
end
|
||||
@content.attributes = params[:content]
|
||||
@content.author = User.current
|
||||
# if page is new @page.save will also save content, but not if page isn't a new record
|
||||
if (@page.new_record? ? @page.save : @content.save)
|
||||
attachments = Attachment.attach_files(@page, params[:attachments])
|
||||
render_attachment_warning_if_needed(@page)
|
||||
call_hook(:controller_wiki_edit_after_save, { :params => params, :page => @page})
|
||||
redirect_to :action => 'show', :project_id => @project, :page => @page.title
|
||||
end
|
||||
|
||||
rescue ActiveRecord::StaleObjectError
|
||||
# Optimistic locking exception
|
||||
flash[:error] = l(:notice_locking_conflict)
|
||||
end
|
||||
|
||||
# rename a page
|
||||
def rename
|
||||
return render_403 unless editable?
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<h2><%=h @page.pretty_title %></h2>
|
||||
|
||||
<% form_for :content, @content, :url => {:action => 'edit', :page => @page.title}, :html => {:multipart => true, :id => 'wiki_form'} do |f| %>
|
||||
<% form_for :content, @content, :url => {:action => 'update', :page => @page.title}, :html => {:multipart => true, :id => 'wiki_form'} do |f| %>
|
||||
<%= f.hidden_field :version %>
|
||||
<%= error_messages_for 'content' %>
|
||||
|
||||
|
|
|
@ -41,8 +41,10 @@ ActionController::Routing::Routes.draw do |map|
|
|||
end
|
||||
|
||||
wiki_routes.connect 'projects/:project_id/wiki/:page/:action',
|
||||
:action => /edit|rename|destroy|preview|protect/,
|
||||
:action => /rename|destroy|preview|protect/,
|
||||
:conditions => {:method => :post}
|
||||
|
||||
wiki_routes.connect 'projects/:project_id/wiki/:page/edit', :action => 'update', :conditions => {:method => :post}
|
||||
end
|
||||
|
||||
map.with_options :controller => 'messages' do |messages_routes|
|
||||
|
|
|
@ -114,7 +114,7 @@ Redmine::AccessControl.map do |map|
|
|||
map.permission :view_wiki_pages, :wiki => [:show, :special, :page_index, :date_index]
|
||||
map.permission :export_wiki_pages, :wiki => [:export]
|
||||
map.permission :view_wiki_edits, :wiki => [:history, :diff, :annotate]
|
||||
map.permission :edit_wiki_pages, :wiki => [:edit, :preview, :add_attachment]
|
||||
map.permission :edit_wiki_pages, :wiki => [:edit, :update, :preview, :add_attachment]
|
||||
map.permission :delete_wiki_pages_attachments, {}
|
||||
map.permission :protect_wiki_pages, {:wiki => :protect}, :require => :member
|
||||
end
|
||||
|
|
|
@ -80,7 +80,7 @@ class WikiControllerTest < ActionController::TestCase
|
|||
|
||||
def test_create_page
|
||||
@request.session[:user_id] = 2
|
||||
post :edit, :project_id => 1,
|
||||
post :update, :project_id => 1,
|
||||
:page => '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 :edit, :project_id => 1,
|
||||
post :update, :project_id => 1,
|
||||
:page => 'New page',
|
||||
:content => {:comments => 'Created the page',
|
||||
:text => "h1. New page\n\nThis is a new page",
|
||||
|
|
|
@ -322,7 +322,7 @@ 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 => 'edit', :project_id => '567', :page => 'my_page'
|
||||
should_route :post, "/projects/567/wiki/my_page/edit", :controller => 'wiki', :action => 'update', :project_id => '567', :page => 'my_page'
|
||||
should_route :post, "/projects/567/wiki/CookBook_documentation/preview", :controller => 'wiki', :action => 'preview', :project_id => '567', :page => 'CookBook_documentation'
|
||||
should_route :post, "/projects/22/wiki/ladida/rename", :controller => 'wiki', :action => 'rename', :project_id => '22', :page => 'ladida'
|
||||
should_route :post, "/projects/22/wiki/ladida/destroy", :controller => 'wiki', :action => 'destroy', :project_id => '22', :page => 'ladida'
|
||||
|
|
Loading…
Reference in New Issue