Commit c6c0bf79b57d7eaff5156fe55371838961bbfefd
1 parent
4eb56579
Exists in
master
and in
28 other branches
Redirect to url when save a content
Added a parameter to specify a url to redirect when save (new or edit) a content with success
Showing
3 changed files
with
25 additions
and
2 deletions
Show diff stats
app/controllers/my_profile/cms_controller.rb
| ... | ... | @@ -64,6 +64,7 @@ class CmsController < MyProfileController |
| 64 | 64 | end |
| 65 | 65 | |
| 66 | 66 | def edit |
| 67 | + @success_back_to = params[:success_back_to] | |
| 67 | 68 | @article = profile.articles.find(params[:id]) |
| 68 | 69 | @parent_id = params[:parent_id] |
| 69 | 70 | @type = params[:type] || @article.class.to_s |
| ... | ... | @@ -77,7 +78,7 @@ class CmsController < MyProfileController |
| 77 | 78 | if @article.update_attributes(params[:article]) |
| 78 | 79 | if !continue |
| 79 | 80 | if @article.content_type.nil? || @article.image? |
| 80 | - redirect_to @article.view_url | |
| 81 | + success_redirect | |
| 81 | 82 | else |
| 82 | 83 | redirect_to :action => (@article.parent ? 'view' : 'index'), :id => @article.parent |
| 83 | 84 | end |
| ... | ... | @@ -89,6 +90,7 @@ class CmsController < MyProfileController |
| 89 | 90 | def new |
| 90 | 91 | # FIXME this method should share some logic wirh edit !!! |
| 91 | 92 | |
| 93 | + @success_back_to = params[:success_back_to] | |
| 92 | 94 | # user must choose an article type first |
| 93 | 95 | |
| 94 | 96 | @parent = profile.articles.find(params[:parent_id]) if params && params[:parent_id] |
| ... | ... | @@ -133,7 +135,7 @@ class CmsController < MyProfileController |
| 133 | 135 | if continue |
| 134 | 136 | redirect_to :action => 'edit', :id => @article |
| 135 | 137 | else |
| 136 | - redirect_to @article.view_url | |
| 138 | + success_redirect | |
| 137 | 139 | end |
| 138 | 140 | return |
| 139 | 141 | end |
| ... | ... | @@ -385,5 +387,13 @@ class CmsController < MyProfileController |
| 385 | 387 | true |
| 386 | 388 | end |
| 387 | 389 | |
| 390 | + def success_redirect | |
| 391 | + if !@success_back_to.blank? | |
| 392 | + redirect_to @success_back_to | |
| 393 | + else | |
| 394 | + redirect_to @article.view_url | |
| 395 | + end | |
| 396 | + end | |
| 397 | + | |
| 388 | 398 | end |
| 389 | 399 | ... | ... |
app/views/cms/edit.rhtml
| ... | ... | @@ -9,6 +9,8 @@ |
| 9 | 9 | |
| 10 | 10 | <%= hidden_field_tag('back_to', @back_to) %> |
| 11 | 11 | |
| 12 | + <%= hidden_field_tag('success_back_to', @success_back_to) %> | |
| 13 | + | |
| 12 | 14 | <%= render :partial => partial_for_class(@article.class), :locals => { :f => f } %> |
| 13 | 15 | |
| 14 | 16 | <% if environment.is_portal_community?(profile) %> | ... | ... |
test/functional/cms_controller_test.rb
| ... | ... | @@ -1688,6 +1688,17 @@ class CmsControllerTest < ActionController::TestCase |
| 1688 | 1688 | :attributes => { :value => article.id.to_s }} |
| 1689 | 1689 | end |
| 1690 | 1690 | |
| 1691 | + should 'go back to specified url when saving with success' do | |
| 1692 | + post :new, :type => 'TinyMceArticle', :profile => profile.identifier, :article => { :name => 'changed by me', :body => 'content ...' }, :success_back_to => '/' | |
| 1693 | + assert_redirected_to '/' | |
| 1694 | + end | |
| 1695 | + | |
| 1696 | + should 'redirect back to specified url when edit with success' do | |
| 1697 | + article = @profile.articles.create!(:name => 'myarticle') | |
| 1698 | + post :edit, :profile => 'testinguser', :id => article.id, :success_back_to => '/' | |
| 1699 | + assert_redirected_to '/' | |
| 1700 | + end | |
| 1701 | + | |
| 1691 | 1702 | protected |
| 1692 | 1703 | |
| 1693 | 1704 | # FIXME this is to avoid adding an extra dependency for a proper JSON parser. | ... | ... |