diff --git a/app/controllers/dmsf_controller.rb b/app/controllers/dmsf_controller.rb index d7315d44..c859946b 100644 --- a/app/controllers/dmsf_controller.rb +++ b/app/controllers/dmsf_controller.rb @@ -188,6 +188,7 @@ class DmsfController < ApplicationController @parent = @folder.dmsf_folder @pathfolder = copy_folder(@folder) @force_file_unlock_allowed = User.current.allowed_to?(:force_file_unlock, @project) + @redirect_to_folder_id = params[:redirect_to_folder_id] end def create @@ -205,10 +206,10 @@ class DmsfController < ApplicationController format.html { if saved flash[:notice] = l(:notice_folder_created) - redirect_to dmsf_folder_path(:id => @project, :folder_id => @folder.dmsf_folder) + redirect_to dmsf_folder_path(id: @project, folder_id: @folder.dmsf_folder) else @pathfolder = @parent - render :action => 'edit' + render action: 'edit' end } end @@ -217,13 +218,13 @@ class DmsfController < ApplicationController def save unless params[:dmsf_folder] - redirect_to dmsf_folder_path(:id => @project, :folder_id => @folder) + redirect_to dmsf_folder_path(id: @project, folder_id: @folder) return end @pathfolder = copy_folder(@folder) saved = @folder.update_from_params(params) respond_to do |format| - format.api { + format.api { unless saved render_validation_errors(@folder) end @@ -231,9 +232,11 @@ class DmsfController < ApplicationController format.html { if saved flash[:notice] = l(:notice_folder_details_were_saved) - redirect_to dmsf_folder_path(:id => @project, :folder_id => @folder.dmsf_folder) + redirect_to_folder_id = params[:dmsf_folder][:redirect_to_folder_id] + redirect_to_folder_id = @folder.dmsf_folder.id if(@folder.dmsf_folder && redirect_to_folder_id.blank?) + redirect_to dmsf_folder_path(id: @project, folder_id: redirect_to_folder_id) else - render :action => 'edit' + render action: 'edit' end } end diff --git a/app/views/dmsf/edit.html.erb b/app/views/dmsf/edit.html.erb index 5ef66825..dd8cc6fb 100644 --- a/app/views/dmsf/edit.html.erb +++ b/app/views/dmsf/edit.html.erb @@ -67,6 +67,7 @@ <%= labelled_form_for(@folder, :url => {:action => create ? 'create' : 'save', :id => @project, :folder_id => @folder, :parent_id => @parent}, :html => {:method=>:post}) do |f| %> <%= error_messages_for(@folder) %> + <%= f.hidden_field :redirect_to_folder_id, value: @redirect_to_folder_id %>
<%= f.text_field(:title, :required => true) %> diff --git a/app/views/dmsf/show.html.erb b/app/views/dmsf/show.html.erb index dc473bfc..b4fc93a5 100644 --- a/app/views/dmsf/show.html.erb +++ b/app/views/dmsf/show.html.erb @@ -31,9 +31,9 @@ :class => 'icon icon-edit') %> <% elsif !@locked_for_user %> <%= link_to(l(:button_edit), - edit_dmsf_path(:id => @project, :folder_id => @folder), - :title => l(:link_edit, :title => h(@folder.title)), - :class => 'icon icon-edit') %> + edit_dmsf_path(id: @project, folder_id: @folder, redirect_to_folder_id: @folder.id), + title: l(:link_edit, title: h(@folder.title)), + class: 'icon icon-edit') %> <% end %> <% if @folder && (!@locked_for_user || User.current.allowed_to?(:force_file_unlock, @project)) %> <% if @folder.locked? %> diff --git a/test/functional/dmsf_controller_test.rb b/test/functional/dmsf_controller_test.rb index cd3f65db..72b98619 100644 --- a/test/functional/dmsf_controller_test.rb +++ b/test/functional/dmsf_controller_test.rb @@ -86,10 +86,27 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase # Permissions OK @role.add_permission! :view_dmsf_folders @role.add_permission! :folder_manipulation - get :edit, :params => {:id => @project, :folder_id => @folder1} + get :edit, params: { id: @project, folder_id: @folder1} assert_response :success - assert_select 'label', { :text => @custom_field.name } - assert_select 'option', { :value => @custom_value.value } + assert_select 'label', { text: @custom_field.name } + assert_select 'option', { value: @custom_value.value } + end + + def test_edit_folder_redirection_to_the_parent_folder + @role.add_permission! :view_dmsf_folders + @role.add_permission! :folder_manipulation + post :save, params: { id: @project, folder_id: @folder2.id, parent_id: @folder2.dmsf_folder.id, + dmsf_folder: { title: @folder2.title, description: @folder2.description} } + assert_redirected_to dmsf_folder_path(id: @project, folder_id: @folder2.dmsf_folder.id) + end + + def test_edit_folder_redirection_to_the_same_folder + @role.add_permission! :view_dmsf_folders + @role.add_permission! :folder_manipulation + post :save, params: { id: @project, folder_id: @folder2.id, parent_id: @folder2.dmsf_folder.id, + dmsf_folder: { title: @folder2.title, description: @folder2.description, + redirect_to_folder_id: @folder2.id } } + assert_redirected_to dmsf_folder_path(id: @project, folder_id: @folder2.id) end def test_trash_forbidden