Redirect to parent folder after folder edit #1046

This commit is contained in:
Karel Pičman 2019-10-21 16:22:42 +02:00
parent 1b56f6a782
commit dffa7438ff
4 changed files with 33 additions and 12 deletions

View File

@ -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

View File

@ -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 %>
<div class="box tabular">
<p>
<%= f.text_field(:title, :required => true) %>

View File

@ -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? %>

View File

@ -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