From ec2289d45eb2e63d39d0127fffd1c9f107e70654 Mon Sep 17 00:00:00 2001
From: Henri-Damien LAURENT <hdlaurent@afi-sa.fr>
Date: Mon, 11 Jul 2022 14:27:49 +0200
Subject: [PATCH] hotline#158843 : file manager now shows xsl files under skins
 directory

---
 VERSIONS_HOTLINE/158843                       |  1 +
 library/Class/FileManager.php                 |  2 +-
 .../controllers/FileManagerControllerTest.php | 49 ++++++++++++++++++-
 3 files changed, 50 insertions(+), 2 deletions(-)
 create mode 100644 VERSIONS_HOTLINE/158843

diff --git a/VERSIONS_HOTLINE/158843 b/VERSIONS_HOTLINE/158843
new file mode 100644
index 00000000000..0e2c419a254
--- /dev/null
+++ b/VERSIONS_HOTLINE/158843
@@ -0,0 +1 @@
+ - correctif #158843 : Explorateur de fichier : les fichiers XSLT présents dans les skins sont désormais accessibles en lecture aux rédacteurs pour permettre le paramétrage des vues notices et résultats de recherche.
\ No newline at end of file
diff --git a/library/Class/FileManager.php b/library/Class/FileManager.php
index 359a534feb1..5ebd92e6d36 100644
--- a/library/Class/FileManager.php
+++ b/library/Class/FileManager.php
@@ -120,7 +120,7 @@ class Class_FileManager extends Class_Entity {
       return null;
 
     return static::directory(SKINS)
-      ->setPermissionRegExp('/^skins\/(((?:(?!\/).)+)$|((?:(?!\/).)+)\/(js|css|images|fonts))/')
+      ->setPermissionRegExp('/^skins\/(((?:(?!\/).)+)$|((?:(?!\/).)+)\/(xsl|js|css|images|fonts))/')
       ->setWritable(false);
   }
 
diff --git a/tests/application/modules/admin/controllers/FileManagerControllerTest.php b/tests/application/modules/admin/controllers/FileManagerControllerTest.php
index 2195badbbb5..b153ba1aa55 100644
--- a/tests/application/modules/admin/controllers/FileManagerControllerTest.php
+++ b/tests/application/modules/admin/controllers/FileManagerControllerTest.php
@@ -122,6 +122,20 @@ abstract class FileManagerControllerTestCase extends Admin_AbstractControllerTes
       ->setName('skins')
       ->setPath('skins');
 
+    $skins_xslt = (new Class_FileManager)
+      ->setId('skins/xslt')
+      ->setDir(true)
+      ->setParentPath('skins')
+      ->setPath('skins/xslt')
+      ->setName('xslt');
+
+    $skins_xsl_File = (new Class_FileManager)
+      ->setId('skins/xslt/majolie.xsl')
+      ->setDir(false)
+      ->setParentPath('skins/xslt')
+      ->setPath('skins/xslt/majolie.xsl')
+      ->setName('majolie.xsl');
+
     $this->_dir = (new Class_FileManager)
       ->setId('userfiles/image')
       ->setParentPath('userfiles')
@@ -175,11 +189,27 @@ abstract class FileManagerControllerTestCase extends Admin_AbstractControllerTes
 
                  ->whenCalled('directoriesAt')
                  ->with('skins')
-                 ->answers([])
+                 ->answers([$skins_xslt])
 
                  ->whenCalled('filesAt')
                  ->with('skins')
                  ->answers([])
+
+                 ->whenCalled('filesAt')
+                 ->with('skins/xslt')
+                 ->answers([$skins_xsl_File])
+
+                 ->whenCalled('fileAt')
+                 ->with('skins/xslt')
+                 ->answers($skins_xsl_File)
+
+                 ->whenCalled('directoriesAt')
+                 ->with('skins/xslt')
+                 ->answers([])
+
+                 ->whenCalled('directoryAt')
+                 ->with('skins/xslt')
+                 ->answers($skins_xslt)
       ;
 
     Class_FileManager::setFileSystem($disk);
@@ -339,6 +369,23 @@ class FileManagerControllerDispatchTest extends FileManagerControllerTestCase {
 
 
 
+class FileManagerControllerSkinsXsltTest
+  extends FileManagerControllerTestCase{
+
+  public function setUp() {
+    parent::setUp();
+    $this->dispatch('/admin/file-manager/index?browser=skins%2Fxslt');
+  }
+
+
+  /** @test */
+  public function withSkinsXsltDirectoryFileManagerShouldDisplayMajolieDotXsl() {
+    $this->assertXPathContentContains('//table[contains(@id,"file-manager")]//a', 'majolie.xsl');
+  }
+}
+
+
+
 class FileManagerControllerIndexWithOtherRootsTest extends FileManagerControllerTestCase {
   public function setUp() {
     parent::setUp();
-- 
GitLab