diff --git a/VERSIONS b/VERSIONS index bbf3fbdfddce067644208960fc1a51df777260f2..9da0be92ea007b0865023300e5bedfa87325e7ce 100644 --- a/VERSIONS +++ b/VERSIONS @@ -1,3 +1,9 @@ +15/03/2018 - v7.12.5 + + - ticket #72835 : Explorateur de fichier : correction de la sélection d'une image lorsqu'on vient de la téléverser. + + + 12/03/2018 - v7.12.4 - ticket #72610 : OAuth : ajout d'une variable permettant l'utilisation du protocole OAuth en HTTP (OAUTH_ACCEPT_HTTP) diff --git a/application/modules/admin/controllers/FileManagerController.php b/application/modules/admin/controllers/FileManagerController.php index 525c1cb60ac1cea7f720f2646533f16873fc3b89..12b4fa881a0b39b076f87d1acf6dd00061b511fa 100644 --- a/application/modules/admin/controllers/FileManagerController.php +++ b/application/modules/admin/controllers/FileManagerController.php @@ -192,7 +192,7 @@ class Admin_FileManagerController extends ZendAfi_Controller_Action { return $this->_ajaxUploadImage($resized_file, $into); if (!$form->isValid($this->_request->getPost())) - return; + return; if(!$form->file->receive()) return; @@ -268,7 +268,7 @@ class Admin_FileManagerController extends ZendAfi_Controller_Action { $item = $this->_findItemFromParams(); $this->view->titre = $this->_('Renommer "%s"', $item->getBasename()); $this->view->form = $form = ZendAfi_Form_Admin_FileManager_Rename::newWith(['into' => $item->getRealpath(), - 'name' => $item->getBasename()]); + 'name' => $item->getBasename()]); $form->setAction($this->view->url()); @@ -372,14 +372,15 @@ class Admin_FileManagerController extends ZendAfi_Controller_Action { protected function _getUrlWithNewPath($path) { return $this->view->url(['module' => 'admin', - 'controller' => 'file-manager', - 'action' => 'index', - 'browser' => $this->_getParam('browser'), - 'splitted_browser' => $this->_getParam('splitted_browser'), - 'focused_browser' => $this->_getParam('focused_browser'), - 'display_mode_browser' => $this->_getParam('display_mode_browser'), - 'display_mode_splitted_browser' => $this->_getParam('display_mode_splitted_browser'), - $this->_getParam('focused_browser', 'browser') => $path, - ], null, true); + 'controller' => 'file-manager', + 'action' => 'index', + $this->_getParam('focused_browser', 'browser') => $path, + 'ajax_resized_image' => null, + 'render' => null, + 'into' => null, + 'file' => null, + 'item' => null, + 'filename' => null, + ]); } } diff --git a/application/modules/admin/controllers/IndexController.php b/application/modules/admin/controllers/IndexController.php index 77b005a530b4752cf6465423c8316df77a4ee49e..19ea63e21fc1eae6a88d13885fe30d43535ec0af 100644 --- a/application/modules/admin/controllers/IndexController.php +++ b/application/modules/admin/controllers/IndexController.php @@ -24,7 +24,7 @@ class Admin_IndexController extends ZendAfi_Controller_Action { . $this->view->tag('span', $this->_(' version %s', $this->view->tag('a', BOKEH_RELEASE_NUMBER, - ['href' => BOKEH_REMOTE_FILES . 'blob/' . BOKEH_VERSION . '/VERSIONS'])), + ['href' => BOKEH_REMOTE_FILES . 'blob/master/VERSIONS'])), ['class' => 'version']); $this->view->user = Class_Users::getIdentity(); diff --git a/library/Class/AdminVar.php b/library/Class/AdminVar.php index f7849630629ae0446c3c291f34b147d81a275885..2fb6bc5ed7733bf857c3061aa44a27d4a221f7e2 100644 --- a/library/Class/AdminVar.php +++ b/library/Class/AdminVar.php @@ -328,7 +328,7 @@ class Class_AdminVarLoader extends Storm_Model_Loader { 'FACETTE_INTERET_LIBELLE' => Class_AdminVar_Meta::newDefault('Libellé de la facette centres d\'intérêt'), 'FACETTE_MATIERE_LIBELLE' => Class_AdminVar_Meta::newDefault('Libellé de la facette matière'), 'FACETTE_TAG_LIBELLE' => Class_AdminVar_Meta::newDefault('Libellé de la facette tag'), - 'UNLEASHED_FACETS' => Class_AdminVar_Meta::newMultiInput($this->_('Liste des codes des facettes qui ne sont pas limitées à l\'affichage dans le résultat de recherche<br/>Exemple : T => Type de doc, Y => Annexe, B => Bibliothèque, ... (Voir <a href="' . BOKEH_REMOTE_FILES . 'blob/' . BOKEH_VERSION . '/library/Class/Codification.php#L24">la liste complète</a>)')), + 'UNLEASHED_FACETS' => Class_AdminVar_Meta::newMultiInput($this->_('Liste des codes des facettes qui ne sont pas limitées à l\'affichage dans le résultat de recherche<br/>Exemple : T => Type de doc, Y => Annexe, B => Bibliothèque, ... (Voir <a href="' . BOKEH_REMOTE_FILES . 'blob/master/library/Class/Codification.php#L24">la liste complète</a>)')), 'BOITE_PANIER_AUTO' => Class_AdminVar_Meta::newOnOff($this->_('Ajouter automatiquement une boîte panier dans la division flottante')), 'EXTRA_SKIN_PATH' => Class_AdminVar_Meta::newDefault($this->_('Chemin vers les skins personnalisées, relatif à %s', Class_Profil_Skin::EXTRA_PATH)), 'ENABLE_COLLABORATIVE_BROWSING' => Class_AdminVar_Meta::newOnOff($this->_('Activation de la navigation collaborative')), diff --git a/library/Class/FileManager.php b/library/Class/FileManager.php index 02e9deb77ecab8cbdcec3299ce033e658dbf1f96..09cdbc3c6c072191221d2d023d137bedbed1ee4b 100644 --- a/library/Class/FileManager.php +++ b/library/Class/FileManager.php @@ -411,7 +411,7 @@ class Class_FileManager extends Class_Entity { public function getUrl() { - return rawurlencode($this->getPath()); + return Class_Url::absolute($this->getPath(), null, true); } diff --git a/library/Class/Url.php b/library/Class/Url.php index 3a2b8d426e99ce5a471d7def76339166efe2f391..89e372b5e2d3310b2333c6b0b33252906d32db23 100644 --- a/library/Class/Url.php +++ b/library/Class/Url.php @@ -155,7 +155,12 @@ class Class_Url { if('' === $url) return static::baseUrl(); - if ((!static::$_do_not_add_base_url) && BASE_URL && (0 !== strpos($url, BASE_URL))) + if (static::_hasProtocol($url)) + return $url; + + if ((!static::$_do_not_add_base_url) + && BASE_URL + && (0 !== strpos($url, BASE_URL))) $url = BASE_URL . static::_beginWithSlash($url); return static::_beginWithSlash($url); diff --git a/library/Class/WebService/Redmine/Issue.php b/library/Class/WebService/Redmine/Issue.php index a3a1c911f760ed6bb9805282c1d5b95e6a53d982..e3bccad28f6e0c8973cab5ad2ee50175a60d4622 100644 --- a/library/Class/WebService/Redmine/Issue.php +++ b/library/Class/WebService/Redmine/Issue.php @@ -55,7 +55,7 @@ class Class_WebService_Redmine_Issue extends Class_Entity { public function getTechnicalInformations() { $datas = [$this->_('Url : ') . Class_Url::rootUrl() . Class_Url::baseUrl(), - $this->_('Version : ') . BOKEH_RELEASE_NUMBER . ' (' . BOKEH_VERSION . ')', + $this->_('Version : %s', BOKEH_RELEASE_NUMBER), $this->_('Navigateur : ') . Zend_Controller_Front::getInstance()->getRequest()->getHeader('User-Agent'), $this->_('Base de données : ') . Zend_Db_Table::getDefaultAdapter()->getConfig()['dbname']]; diff --git a/library/ZendAfi/Controller/Plugin/Manager/FileManager.php b/library/ZendAfi/Controller/Plugin/Manager/FileManager.php index dc590428b190da9e74fbe927d666e97f1a10d763..ee31d143ead4fa605bc470dfcd91681d5d3dbefa 100644 --- a/library/ZendAfi/Controller/Plugin/Manager/FileManager.php +++ b/library/ZendAfi/Controller/Plugin/Manager/FileManager.php @@ -39,8 +39,10 @@ class ZendAfi_Controller_Plugin_Manager_FileManager extends ZendAfi_Controller_P ['url' => '#', 'icon' => '', 'caption' => function($model) { - if($model->isSelectable($this->_view->settings->getSelectableExtensions())) - return $this->_view->tag('i', '', ['class' => 'fa fa-check']) . $this->_view->tag('span', $this->_('Sélectionner')); + return $this->_view->tag('i', '', ['class' => 'fa fa-check']) . $this->_view->tag('span', $this->_('Sélectionner')); + }, + 'condition' => function($model) { + return $model->isSelectable($this->_view->settings->getSelectableExtensions()); }, 'label' => $this->_('Sélectionner "%s"', $model->getName()), 'anchorOptions' => array_filter(['title' => $this->_('Sélectionner "%s"', $model->getName()), @@ -50,9 +52,9 @@ class ZendAfi_Controller_Plugin_Manager_FileManager extends ZendAfi_Controller_P 'into' => $model->getId()], 'icon' => '', 'caption' => function($model) { - if($model->isDir()) - return $this->_view->tag('i', '', ['class' => 'fa icon-folder-plus']) . $this->_view->tag('span', $this->_('Créer')); + return $this->_view->tag('i', '', ['class' => 'fa icon-folder-plus']) . $this->_view->tag('span', $this->_('Créer')); }, + 'condition' => 'isDir', 'label' => $this->_('Créer un nouveau dossier dans "%s".', $model->getPath()), 'anchorOptions' => array_filter(['title' => $this->_('Ajouter un nouveau dossier dans "%s".', $model->getPath()), 'data-popup' => 'true', @@ -62,9 +64,9 @@ class ZendAfi_Controller_Plugin_Manager_FileManager extends ZendAfi_Controller_P 'into' => $model->getId()], 'icon' => '', 'caption' => function($model) { - if($model->isDir()) - return $this->_view->tag('i', '', ['class' => 'fa fa-upload']) . $this->_view->tag('span', $this->_('Téléverser')); + return $this->_view->tag('i', '', ['class' => 'fa fa-upload']) . $this->_view->tag('span', $this->_('Téléverser')); }, + 'condition' => 'isDir', 'label' => $this->_('Téléverser un nouveau fichier dans le dossier "%s".', $model->getPath()), 'anchorOptions' => array_filter(['title' => $this->_('Téléverser un nouveau fichier dans le dossier "%s".', $model->getPath()), 'data-popup' => 'true', @@ -74,9 +76,9 @@ class ZendAfi_Controller_Plugin_Manager_FileManager extends ZendAfi_Controller_P 'item' => $model->getId()], 'icon' => '', 'caption' => function($model) { - if($model->isResizable()) - return $this->_view->tag('i', '', ['class' => 'fa fa-compress']) . $this->_view->tag('span', $this->_('Redimensionner')); + return $this->_view->tag('i', '', ['class' => 'fa fa-compress']) . $this->_view->tag('span', $this->_('Redimensionner')); }, + 'condition' => 'isResizable', 'label' => $this->_('Redimensionner le fichier "%s".', $model->getPath()), 'anchorOptions' => array_filter(['title' => $this->_('Redimensionner le fichier "%s".', $model->getPath()), 'data-popup' => 'true', @@ -104,12 +106,12 @@ class ZendAfi_Controller_Plugin_Manager_FileManager extends ZendAfi_Controller_P 'data-popup' => 'true', 'class' => $model->isWritable() ? null : 'disabled'])], - ['url' => $model->getUrl(), + ['url' => $this->_view->escape($model->getUrl()), 'icon' => '', 'caption' => function($model) { - if($model->isFile()) - return $this->_view->tag('i', '', ['class' => 'fa fa-download']) . $this->_view->tag('span', $this->_('Télécharger')); + return $this->_view->tag('i', '', ['class' => 'fa fa-download']) . $this->_view->tag('span', $this->_('Télécharger')); }, + 'condition' => 'isFile', 'label' => $this->_('Télécharger "%s"', $model->getName()), 'anchorOptions' => array_filter(['download' => $model->getName(), 'title' => $this->_('Télécharger "%s"', $model->getName())])], diff --git a/library/ZendAfi/View/Helper/Admin/FileManager/File.php b/library/ZendAfi/View/Helper/Admin/FileManager/File.php index e85c8bfed5dc6b1bee5617a1d9c47ae1284e05e6..6830f0d73e1c272941e4d72d98646850261d0f9e 100644 --- a/library/ZendAfi/View/Helper/Admin/FileManager/File.php +++ b/library/ZendAfi/View/Helper/Admin/FileManager/File.php @@ -25,7 +25,7 @@ class ZendAfi_View_Helper_Admin_FileManager_File extends ZendAfi_View_Helper_Bas if(!$settings) $settings = (new Class_Entity)->setSelectFile(false); - $url = $this->view->absoluteUrl($file->getUrl(), null, true); + $url = $file->getUrl(); $dt = [ $this->_tag('dt', $this->_('Nom :')), @@ -54,14 +54,14 @@ class ZendAfi_View_Helper_Admin_FileManager_File extends ZendAfi_View_Helper_Bas if($file->isFile()) $dt = array_merge($dt, [$this->_tag('dt', $this->_('URL publique :')), - $this->_tag('dd', urldecode($url))]); + $this->_tag('dd', $url)]); $dl = $this->_tag('dl', implode(array_filter($dt))); $url_reload = $url . '?version='. time(); // force reload image $open_new_tab = ($file->isFile() - ? $this->view->tagAnchor($url_reload, + ? $this->view->tagAnchor($this->view->escape($url_reload), $this->_('Accéder à "%s" dans un nouvel onglet.', $file->getName()), ['target' => '_blank']) : ''); diff --git a/library/startup.php b/library/startup.php index aa86e902600cb24b3c7b732d4cde7663dabed251..36398881b98b138cfcd39a19f0111711036fae5e 100644 --- a/library/startup.php +++ b/library/startup.php @@ -82,12 +82,10 @@ class Bokeh_Engine { function setupConstants() { defineConstant('BOKEH_MAJOR_VERSION','7.12'); - defineConstant('BOKEH_RELEASE_NUMBER', BOKEH_MAJOR_VERSION . '.4'); + defineConstant('BOKEH_RELEASE_NUMBER', BOKEH_MAJOR_VERSION . '.5'); defineConstant('BOKEH_REMOTE_FILES', 'http://git.afi-sa.fr/afi/opacce/'); - defineConstant('BOKEH_VERSION', (substr(BOKEH_MAJOR_VERSION, -1) % 2) ? 'master' : 'stable'); - defineConstant('ROOT_PATH', realpath(dirname(__FILE__).'/..').'/'); defineConstant('ZEND_FRAMEWORK_PATH', ROOT_PATH . 'library/storm/zf/library/'); diff --git a/tests/application/modules/admin/controllers/FileManagerControllerTest.php b/tests/application/modules/admin/controllers/FileManagerControllerTest.php index 87d074160b6e61e08f5e4eff03e3cea5a2b3b293..fe740992ed12ef5f5030ba1081156c08a39fb07e 100644 --- a/tests/application/modules/admin/controllers/FileManagerControllerTest.php +++ b/tests/application/modules/admin/controllers/FileManagerControllerTest.php @@ -724,7 +724,7 @@ class FileManagerControllerImportCssDispatchTest extends FileManagerControllerTe /** @test */ - public function dispatchFormShouldSubmit() { + public function dispatchFormShouldContainsSubmit() { $this->dispatch('/admin/file-manager/import?into=userfiles', true); $this->assertXpath('//div//button[contains(@class, "validate")][contains(@onclick, "image-loading-status")]'); } @@ -734,7 +734,16 @@ class FileManagerControllerImportCssDispatchTest extends FileManagerControllerTe public function postDispatchImportShouldRedirectWithSucces() { $this->postDispatch('/admin/file-manager/import?into=userfiles', ['file' => 'stylesheet.css']); $this->assertFlashMessengerContentContains('Fichier "userfiles/stylesheet.css" téléversé.'); - $this->assertRedirect(); + $this->assertRedirectTo('/admin/file-manager/index?browser=userfiles%2Fstylesheet.css'); + } + + + /** @test */ + public function postDispatchImportWithExtentionSelectableShouldRedirectWithThem() { + $this->postDispatch('/admin/file-manager/import?into=userfiles&selectable_extensions=css', + ['file' => 'stylesheet.css']); + $this->assertFlashMessengerContentContains('Fichier "userfiles/stylesheet.css" téléversé.'); + $this->assertRedirectTo('/admin/file-manager/index?browser=userfiles%2Fstylesheet.css&selectable_extensions=css'); } } @@ -951,8 +960,8 @@ class FileManagerControllerResizeImageDispatchTest extends FileManagerController /** @test */ public function resizeFileShouldBePresent() { - $this->dispatch('/admin/file-manager/index', true); - $this->assertXPath('//div//a[contains(@href, "/admin/file-manager/resize")]'); + $this->dispatch('/admin/file-manager/index?browser=userfiles%2Fnew_image.jpg', true); + $this->assertXPathContentContains('//div//a[contains(@href, "/admin/file-manager/resize")]', 'Redimensionner'); } @@ -1016,7 +1025,7 @@ Class FileManagerControllerDispatchImageTest extends FileManagerControllerTestCa /** @test */ public function downloadCaliforniaAnchorShouldBePresent() { - $this->assertXPathContentContains('//div//a[contains(@href, "userfiles%2Fcalifornia.jpg")]', 'Télécharger', $this->_response->getBody()); + $this->assertXPathContentContains('//div//a[contains(@href, "userfiles/california.jpg")]', 'Télécharger'); } @@ -1536,12 +1545,21 @@ class FileManagerControllerWithSpecialCharTest extends FileManagerControllerTest /** @test */ public function accessInNewTabShouldBePresent() { - $this->assertXPathContentContains('//div//a[contains(@href, "/userfiles%2Fmy%20%27direct%22ory%2Fnew%27_ima%22ge.jpg?version=")][@target="_blank"]', 'Accéder à '); + $this->assertContains("/userfiles/my 'direct"ory/new'_ima"ge.jpg?version=", + $this->_response->getBody()); + $this->assertXPathContentContains('//div//a[contains(@href, "/userfiles/my \'direct")][@target="_blank"]', + 'Accéder à '); } /** @test */ public function downloadLinkShouldBePresent() { - $this->assertXPathContentContains('//div//a[contains(@href, "/userfiles%2Fmy%20%27direct%22ory%2Fnew%27_ima%22ge.jpg")]', 'Télécharger'); + $this->assertXPathContentContains('//div//a[contains(@href, "/userfiles/my \'direct")]', 'Télécharger'); + } + + + /** @test */ + public function urlPublicShouldBePrenset() { + $this->assertXPathContentContains('//dd', '/userfiles/my \'direct"ory/new\'_ima"ge.jpg'); } } \ No newline at end of file diff --git a/tests/library/Class/AdminVarTest.php b/tests/library/Class/AdminVarTest.php index 824bfdf2cac372a7aee8d5ff531c3a149161d749..cbfc80e43c5fa56af7dd987c308ce6f1a6bcb1e4 100644 --- a/tests/library/Class/AdminVarTest.php +++ b/tests/library/Class/AdminVarTest.php @@ -89,7 +89,7 @@ class AdminVarTestGet extends AdminVarTestCase { ['id' => 'UNLEASHED_FACETS', 'valeur' => '']); - $this->assertContains('/blob/' . BOKEH_VERSION . '/library/Class/Codification.php', Class_AdminVar::getStaticMeta('UNLEASHED_FACETS')->getDescription()); + $this->assertContains('/blob/master/library/Class/Codification.php', Class_AdminVar::getStaticMeta('UNLEASHED_FACETS')->getDescription()); } }