From 5fa1c9a5dc124782e0caaad91c65bbccfb2030d1 Mon Sep 17 00:00:00 2001
From: gloas <gloas@afi-sa.fr>
Date: Tue, 20 Mar 2018 14:43:27 +0100
Subject: [PATCH] hotline #73039 improve forbiden deletion or rename messages

---
 VERSIONS_HOTLINE/73039                        |  2 ++
 .../controllers/FileManagerController.php     |  8 ++++++-
 .../controllers/FileManagerControllerTest.php | 22 +++++++++++++++++++
 3 files changed, 31 insertions(+), 1 deletion(-)
 create mode 100644 VERSIONS_HOTLINE/73039

diff --git a/VERSIONS_HOTLINE/73039 b/VERSIONS_HOTLINE/73039
new file mode 100644
index 00000000000..02e1a803bba
--- /dev/null
+++ b/VERSIONS_HOTLINE/73039
@@ -0,0 +1,2 @@
+ - ticket #73039 : Explorateur de fichiers : amélioration des messages d'interdiction de suppression et de renommage des éléments.
+ 
\ No newline at end of file
diff --git a/application/modules/admin/controllers/FileManagerController.php b/application/modules/admin/controllers/FileManagerController.php
index 12b4fa881a0..a1304b07524 100644
--- a/application/modules/admin/controllers/FileManagerController.php
+++ b/application/modules/admin/controllers/FileManagerController.php
@@ -123,7 +123,8 @@ class Admin_FileManagerController extends ZendAfi_Controller_Action {
     $this->view->item = $item = $this->_findItemFromParams();
 
     if(!$item->isDeepWritable())
-      return $this->_redirectWithMessage($this->_('Le dossier "%s" ne peut pas être supprimé car il contient des éléments protégés en écriture ou utilisés dans les articles, les domaines ou les profils.', $item->getPath()));
+      return $this->_redirectToPathWithMessage($item->getPath(),
+                                               $this->_('Le dossier "%s" ne peut pas être supprimé car il contient des éléments protégés en écriture ou utilisés dans les articles, les domaines ou les profils.', $item->getPath()));
 
     $this->view->titre = $this->_('Supprimer "%s"', $item->getPath());
     $this->view->models = $item->getModels();
@@ -267,6 +268,11 @@ class Admin_FileManagerController extends ZendAfi_Controller_Action {
   public function renameAction() {
     $item = $this->_findItemFromParams();
     $this->view->titre = $this->_('Renommer "%s"', $item->getBasename());
+
+    if(!$item->isDeepWritable())
+      return $this->_redirectToPathWithMessage($item->getPath(),
+                                               $this->_('L\'élément "%s" ne peut pas être renommé car il est lié à des éléments protégés en écriture ou utilisés dans les articles, les domaines ou les profils.', $item->getPath()));
+
     $this->view->form = $form = ZendAfi_Form_Admin_FileManager_Rename::newWith(['into' => $item->getRealpath(),
                                                                                 'name' => $item->getBasename()]);
 
diff --git a/tests/application/modules/admin/controllers/FileManagerControllerTest.php b/tests/application/modules/admin/controllers/FileManagerControllerTest.php
index fe740992ed1..b82ea59064f 100644
--- a/tests/application/modules/admin/controllers/FileManagerControllerTest.php
+++ b/tests/application/modules/admin/controllers/FileManagerControllerTest.php
@@ -488,6 +488,17 @@ class FileManagerControllerDropDispatchTest extends FileManagerControllerTestCas
   }
 
 
+  /** @test */
+  public function dispatchDeleteWithNonDeepWritableItemShouldRedirect() {
+    $disk = Class_FileManager::getFileSystem()
+      ->whenCalled('isDeepWritable')
+      ->answers(false);
+
+    $this->dispatch('/admin/file-manager/delete?item=userfiles%2Fimage%2Fwhite', true);
+    $this->assertRedirectTo('/admin/file-manager/index?browser=userfiles%2Fimage%2Fwhite');
+  }
+
+
   /** @test */
   public function dispatchCreateShouldContainsNewFolderForm() {
     $this->dispatch('/admin/file-manager/create?into=userfiles%2Fimage%2Fwhite', true);
@@ -518,6 +529,17 @@ class FileManagerControllerDropDispatchTest extends FileManagerControllerTestCas
   }
 
 
+  /** @test */
+  public function dispatchRenameWithNonDeepWritableItemShouldRedirect() {
+    $disk = Class_FileManager::getFileSystem()
+      ->whenCalled('isDeepWritable')
+      ->answers(false);
+
+    $this->dispatch('/admin/file-manager/rename?item=userfiles%2Fimage%2Fwhite', true);
+    $this->assertRedirectTo('/admin/file-manager/index?browser=userfiles%2Fimage%2Fwhite');
+  }
+
+
   /** @test */
   public function postDispatchRenameShouldDisplayRenameForm() {
     $this->postDispatch('/admin/file-manager/rename?item=userfiles%2Fimage%2Fwhite', ['name' => 'new']);
-- 
GitLab