Commit e14a246ff4e626033a5ce24a8add88f0f33dfadf

Authored by AntonioTerceiro
1 parent c096bbc1

ActionItem593: going back to public view when editing from there

git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@2351 3f533792-8f58-4932-b0fe-aaf55b0a4547
app/controllers/my_profile/cms_controller.rb
... ... @@ -41,6 +41,7 @@ class CmsController < MyProfileController
41 41 @article = profile.articles.find(params[:id])
42 42 @parent_id = params[:parent_id]
43 43 @type = params[:type]
  44 + record_coming_from_public_view
44 45 if request.post?
45 46 @article.last_changed_by = user
46 47 if @article.update_attributes(params[:article])
... ... @@ -129,12 +130,22 @@ class CmsController < MyProfileController
129 130 protected
130 131  
131 132 def redirect_back
132   - if @article.parent
  133 + if params[:back_to] == 'public_view'
  134 + redirect_to @article.url
  135 + elsif @article.parent
133 136 redirect_to :action => 'view', :id => @article.parent
134 137 else
135 138 redirect_to :action => 'index'
136 139 end
137 140 end
138 141  
  142 + def record_coming_from_public_view
  143 + referer = request.referer
  144 + if (referer == url_for(@article.url)) || (@article == @profile.home_page && referer == url_for(@profile.url))
  145 + @back_to = 'public_view'
  146 + @back_url = @article.url
  147 + end
  148 + end
  149 +
139 150 end
140 151  
... ...
app/views/cms/edit.rhtml
... ... @@ -6,6 +6,8 @@
6 6  
7 7 <%= hidden_field_tag('parent_id', @parent_id) if @parent_id %>
8 8  
  9 + <%= hidden_field_tag('back_to', @back_to) %>
  10 +
9 11 <%= render :partial => partial_for_class(@article.class), :locals => { :f => f } %>
10 12  
11 13 <% button_bar do %>
... ... @@ -31,7 +33,9 @@
31 33  
32 34 <% button_bar do %>
33 35 <%= submit_button :save, _('Save') %>
34   - <% if @parent_id || @article.parent %>
  36 + <% if @back_url %>
  37 + <%= button :cancel, _('Cancel'), @back_url %>
  38 + <% elsif @parent_id || @article.parent %>
35 39 <%= button :cancel, _('Cancel'), :action => 'view', :id => @parent_id || @article.parent %>
36 40 <% else %>
37 41 <%= button :cancel, _('Cancel'), :action => 'index' %>
... ...
test/functional/cms_controller_test.rb
... ... @@ -505,4 +505,28 @@ class CmsControllerTest &lt; Test::Unit::TestCase
505 505 assert_equal [c1, c2], assigns(:categories)
506 506 end
507 507  
  508 + should 'record when coming from public view on edit' do
  509 + article = @profile.articles.create!(:name => 'myarticle')
  510 +
  511 + @request.expects(:referer).returns('http://colivre.net/testinguser/myarticle')
  512 +
  513 + get :edit, :profile => 'testinguser', :id => article.id
  514 + assert_tag :tag => 'input', :attributes => { :type => 'hidden', :name => 'back_to', :value => 'public_view' }
  515 + assert_tag :tag => 'a', :descendant => { :content => 'Cancel' }, :attributes => { :href => 'http://colivre.net/testinguser/myarticle' }
  516 + end
  517 +
  518 + should 'detect when comming from home page' do
  519 + @request.expects(:referer).returns('http://colivre.net/testinguser')
  520 + get :edit, :profile => 'testinguser', :id => @profile.home_page.id
  521 + assert_tag :tag => 'input', :attributes => { :type => 'hidden', :name => 'back_to', :value => 'public_view' }
  522 + assert_tag :tag => 'a', :descendant => { :content => 'Cancel' }, :attributes => { :href => 'http://colivre.net/testinguser/testingusers-home-page' }
  523 + end
  524 +
  525 + should 'go back to public view when saving coming from there' do
  526 + article = @profile.articles.create!(:name => 'myarticle')
  527 +
  528 + post :edit, :profile => 'testinguser', :id => article.id, :back_to => 'public_view'
  529 + assert_redirected_to article.url
  530 + end
  531 +
508 532 end
... ...