diff --git a/VERSIONS_HOTLINE/104609 b/VERSIONS_HOTLINE/104609 new file mode 100644 index 0000000000000000000000000000000000000000..a0aa7b3f3958b3880801a172adb66e65c5c252d4 --- /dev/null +++ b/VERSIONS_HOTLINE/104609 @@ -0,0 +1 @@ + - ticket #104609 : Explorateur de fichiers : Ajout de la possibilité de définir d'autres répertoires à afficher dans l'explorateur \ No newline at end of file diff --git a/library/Class/AdminVar.php b/library/Class/AdminVar.php index 5e23b421563c4cbe14fac05090a3e8fc6c827f72..d54975f2d36e2d582958a5940c826f9f396f3d09 100644 --- a/library/Class/AdminVar.php +++ b/library/Class/AdminVar.php @@ -505,7 +505,8 @@ class Class_AdminVarLoader extends Storm_Model_Loader { ['value' => '90'])->bePrivate(), 'IMAGICK_SAMPLING_FACTORS' => Class_AdminVar_Meta::newMultiInput($this->_('Facteur d\'échantillonnage utilisé dans le redimensionnement et la compression des images.'), - ['value' => '2x2;1x1;1x1'])->bePrivate()]; + ['value' => '2x2;1x1;1x1'])->bePrivate(), + 'FILEMANAGER_OTHER_ROOTS' => Class_AdminVar_Meta::newMultiInput($this->_('Autres répertoires à afficher, uniquement visibles pour les rôles "Super administrateur".'))->bePrivate()]; } diff --git a/library/Class/FileManager.php b/library/Class/FileManager.php index 8fd43d870d193ec5003353ca8f3d246b8a131fcc..1ce30d4a008171f2772837493d875b353d2c739d 100644 --- a/library/Class/FileManager.php +++ b/library/Class/FileManager.php @@ -79,8 +79,24 @@ class Class_FileManager extends Class_Entity { public static function getRoots() { - return array_filter([static::getUserfiles(), - static::getSkins()]); + $roots = [static::getUserfiles(), + static::getSkins()]; + + if (!Class_Users::isCurrentUserSuperAdmin()) + return array_filter($roots); + + foreach(explode(';', Class_AdminVar::get('FILEMANAGER_OTHER_ROOTS')) as $other) + $roots = static::_injectRootInto($other, $roots); + + return array_filter($roots); + } + + + protected static function _injectRootInto($other, $roots) { + if ($other && ($directory = static::directory($other))) + $roots[] = $directory->setPermissionRegExp('/' . str_replace('/', '\/', $other). '\/(.*)/'); + + return $roots; } diff --git a/tests/application/modules/admin/controllers/FileManagerControllerTest.php b/tests/application/modules/admin/controllers/FileManagerControllerTest.php index a846da1b3a5daa2838f1075d6581b1cc1df86257..214696f85d3b3cc7ccefafc1705870af0f0f1179 100644 --- a/tests/application/modules/admin/controllers/FileManagerControllerTest.php +++ b/tests/application/modules/admin/controllers/FileManagerControllerTest.php @@ -339,6 +339,57 @@ class FileManagerControllerDispatchTest extends FileManagerControllerTestCase { +class FileManagerControllerIndexWithOtherRootsTest extends FileManagerControllerTestCase { + public function setUp() { + parent::setUp(); + Class_AdminVar::set('FILEMANAGER_OTHER_ROOTS', 'cosmogramme/fichiers;non-existing'); + Class_FileManager::getFileSystem() + ->whenCalled('directoryAt')->with('cosmogramme/fichiers') + ->answers((new Class_FileManager) + ->setId('cosmogramme/fichiers') + ->setParentPath('cosmogramme') + ->setPath('cosmogramme/fichier') + ->setName('fichiers') + ->setDir(true)) + + ->whenCalled('directoryAt')->with('non-existing') + ->answers(null) + ; + } + + + /** @test */ + public function pageShouldContainsFichiersDirectory() { + $this->dispatch('/admin/file-manager/index'); + $this->assertXPathContentContains('//a[contains(@class, "directory")]', 'fichiers'); + } + + + /** @test */ + public function pageShouldNotContainsNonExistingDirectory() { + $this->dispatch('/admin/file-manager/index'); + $this->assertNotXPathContentContains('//a[contains(@class, "directory")]', 'non-existing'); + } + + + /** @test */ + public function withoutSuperAdminPageShouldNotContainsFichiersDirectory() { + $user = $this->fixture('Class_Users', + ['id' => 34, + 'login' => 'admin', + 'password' => 's3cr3t \o/', + 'role_level' => ZendAfi_Acl_AdminControllerRoles::ADMIN_PORTAIL, + ]); + + ZendAfi_Auth::getInstance()->logUser($user); + $this->dispatch('/admin/file-manager/index'); + $this->assertNotXPathContentContains('//a[contains(@class, "directory")]', 'fichiers'); + } +} + + + + class FileManagerControllerBrowseTest extends FileManagerControllerTestCase { public function setUp() { parent::setUp();