diff --git a/VERSIONS_WIP/71600 b/VERSIONS_WIP/71600 new file mode 100644 index 0000000000000000000000000000000000000000..6755ebc6f5a9b61e683e82cf69bb39d4eecfbba5 --- /dev/null +++ b/VERSIONS_WIP/71600 @@ -0,0 +1,2 @@ + - ticket #71600 : Explorateur de fichiers : correction des liens de téléchargement d'images qui comportaient un espace dans le nom. + \ No newline at end of file diff --git a/library/Class/FileManager.php b/library/Class/FileManager.php index 2753b8248440e53a62c726ea46ac36fe3d659001..02e9deb77ecab8cbdcec3299ce033e658dbf1f96 100644 --- a/library/Class/FileManager.php +++ b/library/Class/FileManager.php @@ -23,7 +23,7 @@ class Class_FileManager extends Class_Entity { use Trait_Translator; protected static $_file_system; - const REGEX_NAME = '/^[a-z0-9][a-z0-9_\-\. ]+$/i'; + const REGEX_NAME = '/^[a-z0-9][a-z0-9_\-\.]+$/i'; protected $_attribs = ['Id' => '', 'Realpath' => '', 'Path' => '', @@ -411,7 +411,7 @@ class Class_FileManager extends Class_Entity { public function getUrl() { - return urlencode($this->getPath()); + return rawurlencode($this->getPath()); } diff --git a/library/ZendAfi/Form/Admin/FileManager/Folder.php b/library/ZendAfi/Form/Admin/FileManager/Folder.php index d89c37f242e9d3c8e1cb7d1df9072573bbe8d32c..2530d12889e2885e193d23df8b727d0a3d6c1ed1 100644 --- a/library/ZendAfi/Form/Admin/FileManager/Folder.php +++ b/library/ZendAfi/Form/Admin/FileManager/Folder.php @@ -31,7 +31,7 @@ class ZendAfi_Form_Admin_FileManager_Folder extends ZendAfi_Form { 'allowEmpty' => false, 'required' => true, 'validators' => [(new Zend_Validate_Regex(Class_FileManager::REGEX_NAME)) - ->setMessage($this->_('Le nom du dossier peut contenir uniquement des lettres, des chiffres et les caratères "_", "-", " ", ".". Exemple : "mon_dossier"'))]]) + ->setMessage($this->_('Le nom du dossier peut contenir uniquement des lettres, des chiffres et les caratères "_", "-", ".". Exemple : "mon_dossier"'))]]) ->addUniqDisplayGroup('new_folder'); } } \ No newline at end of file diff --git a/library/ZendAfi/Form/Admin/FileManager/Import.php b/library/ZendAfi/Form/Admin/FileManager/Import.php index 57e12809180d5612bda7d0ebb68d042bed26dbfd..ec9abf52332f19ab3ef5833dda8d8803c6cdeb5b 100644 --- a/library/ZendAfi/Form/Admin/FileManager/Import.php +++ b/library/ZendAfi/Form/Admin/FileManager/Import.php @@ -43,6 +43,8 @@ class ZendAfi_Form_Admin_FileManager_Import extends ZendAfi_Form { $extensions = Class_AdminVar::get('ALLOWED_FILES_EXTENSIONS_FOR_IMPORT'); return $element + ->addValidator((new Zend_Validate_Regex(Class_FileManager::REGEX_NAME)) + ->setMessage($form->_('Le nom peut contenir uniquement des lettres, des chiffres et les caratères "_", "-", " ", ".". Exemple : "mon_fichier.jpg"'))) ->addValidator((new Zend_Validate_File_Count(1)) ->setMessage($form->_('Un seul fichier doit être transféré.'))) diff --git a/library/ZendAfi/Form/Admin/FileManager/Rename.php b/library/ZendAfi/Form/Admin/FileManager/Rename.php index 5e7a675a8e17fce0af217b836f8326822ddff525..ecf61a73c361c9beeabb3874df7780e5aae1f786 100644 --- a/library/ZendAfi/Form/Admin/FileManager/Rename.php +++ b/library/ZendAfi/Form/Admin/FileManager/Rename.php @@ -31,7 +31,7 @@ class ZendAfi_Form_Admin_FileManager_Rename extends ZendAfi_Form { 'allowEmpty' => false, 'required' => true, 'validators' => [(new Zend_Validate_Regex(Class_FileManager::REGEX_NAME)) - ->setMessage($this->_('Le nom peut contenir uniquement des lettres, des chiffres et les caratères "_", "-", " ", ".". Exemple : "mon_fichier.2"'))]]) + ->setMessage($this->_('Le nom peut contenir uniquement des lettres, des chiffres et les caratères "_", "-", ".". Exemple : "mon_fichier.jpg"'))]]) ->addUniqDisplayGroup('rename_file'); } } \ No newline at end of file diff --git a/tests/application/modules/admin/controllers/FileManagerControllerTest.php b/tests/application/modules/admin/controllers/FileManagerControllerTest.php index e0ee8e06a9fb25a70d0eeb1a2cab51c167947dc8..9c5aaa42d0e21e74bc312dcff72273e10e7cdf5f 100644 --- a/tests/application/modules/admin/controllers/FileManagerControllerTest.php +++ b/tests/application/modules/admin/controllers/FileManagerControllerTest.php @@ -491,11 +491,19 @@ class FileManagerControllerDropDispatchTest extends FileManagerControllerTestCas /** @test */ public function postDispatchCreateFolderShouldAddNewFolder() { $this->postDispatch('/admin/file-manager/create?into=userfiles%2Fimage%2Fwhite', - ['folder' => 'new folder']); + ['folder' => 'new_folder']); $this->assertredirect(); } + /** @test */ + public function postDispatchCreateFolderShouldNotAddNewFolderWithWhiteSpace() { + $this->postDispatch('/admin/file-manager/create?into=userfiles%2Fimage%2Fwhite', + ['folder' => 'new folder']); + $this->assertXpathContentContains('//ul/li', 'Le nom du dossier peut contenir uniquement des lettres, des chiffres et'); + } + + /** @test */ public function dispatchRenameShouldDisplayRenameForm() { $this->dispatch('/admin/file-manager/rename?item=userfiles%2Fimage%2Fwhite', true); @@ -1489,9 +1497,9 @@ class FileManagerControllerWithSpecialCharTest extends FileManagerControllerTest public function setUp() { parent::setUp(); $image = (new Class_FileManager) - ->setId('userfiles/my\'direct"ory/new\'_ima"ge.jpg') - ->setPath('userfiles/my\'direct"ory/new\'_ima"ge.jpg') - ->setParentPath('userfiles/my\'direct"ory') + ->setId('userfiles/my \'direct"ory/new\'_ima"ge.jpg') + ->setPath('userfiles/my \'direct"ory/new\'_ima"ge.jpg') + ->setParentPath('userfiles/my \'direct"ory') ->setName('new\'_ima"ge.jpg') ->setDir(false) ->setExtension('jpg') @@ -1500,36 +1508,36 @@ class FileManagerControllerWithSpecialCharTest extends FileManagerControllerTest Class_FileManager::getFileSystem() ->whenCalled('directoryAt') - ->with('userfiles/my\'direct"ory/new\'_ima"ge.jpg') + ->with('userfiles/my \'direct"ory/new\'_ima"ge.jpg') ->answers(null) ->whenCalled('fileAt') - ->with('userfiles/my\'direct"ory/new\'_ima"ge.jpg') + ->with('userfiles/my \'direct"ory/new\'_ima"ge.jpg') ->answers($image) ->whenCalled('directoryAt') - ->with('userfiles/my\'direct"ory') + ->with('userfiles/my \'direct"ory') ->answers(null) ->whenCalled('fileAt') - ->with('userfiles/my\'direct"ory') + ->with('userfiles/my \'direct"ory') ->answers(null); - $this->dispatch('/admin/file-manager/index?browser=userfiles%2Fmy%27direct"ory%2Fnew%27_ima"ge.jpg&selectable_extensions=jpg;png', true); + $this->dispatch('/admin/file-manager/index?browser=userfiles%2Fmy+%27direct"ory%2Fnew%27_ima"ge.jpg&selectable_extensions=jpg;png', true); } /** @test */ public function selectButtonShouldBePresent() { - $this->assertXPathContentContains('//div//a[contains(@onclick, "$(this).selectItemForCKEditor(")][contains(@onclick, "/userfiles/my%27direct%22ory/new%27_ima%22ge.jpg")]', 'Sélectionner'); + $this->assertXPathContentContains('//div//a[contains(@onclick, "$(this).selectItemForCKEditor(")][contains(@onclick, "/userfiles/my %27direct%22ory/new%27_ima%22ge.jpg")]', 'Sélectionner'); } /** @test */ public function accessInNewTabShouldBePresent() { - $this->assertXPathContentContains('//div//a[contains(@href, "/userfiles%2Fmy%27direct%22ory%2Fnew%27_ima%22ge.jpg?version=")][@target="_blank"]', 'Accéder à '); + $this->assertXPathContentContains('//div//a[contains(@href, "/userfiles%2Fmy%20%27direct%22ory%2Fnew%27_ima%22ge.jpg?version=")][@target="_blank"]', 'Accéder à '); } /** @test */ public function downloadLinkShouldBePresent() { - $this->assertXPathContentContains('//div//a[contains(@href, "/userfiles%2Fmy%27direct%22ory%2Fnew%27_ima%22ge.jpg")]', 'Télécharger'); + $this->assertXPathContentContains('//div//a[contains(@href, "/userfiles%2Fmy%20%27direct%22ory%2Fnew%27_ima%22ge.jpg")]', 'Télécharger'); } } \ No newline at end of file