From 63fc89538d7ecffd0f3f135fd998a6222659ac80 Mon Sep 17 00:00:00 2001 From: Laurent Laffont <llaffont@afi-sa.fr> Date: Fri, 16 Sep 2022 12:54:06 +0000 Subject: [PATCH] dev #132136 Admin print models: switch from CKEditor to CodeMirror --- FEATURES/132136 | 10 ++++ VERSIONS_WIP/132136 | 1 + .../admin/controllers/PrintController.php | 6 +- .../Plugin/Manager/ModeleFusion.php | 21 ++++++- .../ResourceDefinition/ModeleFusion.php | 6 +- library/ZendAfi/Form/ModeleFusion.php | 4 +- public/admin/skins/bokeh74/global.css | 5 ++ .../admin/controllers/PrintControllerTest.php | 59 +++++++++++++------ 8 files changed, 85 insertions(+), 27 deletions(-) create mode 100644 FEATURES/132136 create mode 100644 VERSIONS_WIP/132136 diff --git a/FEATURES/132136 b/FEATURES/132136 new file mode 100644 index 00000000000..2dcff8ef88f --- /dev/null +++ b/FEATURES/132136 @@ -0,0 +1,10 @@ + '132136' => + ['Label' => $this->_('Modèles d\'impression : export PDF'), + 'Desc' => $this->_('Adaptation de l\'éditeur de modèles d\'impression pour éditer des modèles avancés'), + 'Image' => '', + 'Video' => '', + 'Category' => '', + 'Right' => function($feature_description, $user) {return true;}, + 'Wiki' => 'https://wiki.bokeh-library-portal.org/index.php?title=Cat%C3%A9gorie:Mod%C3%A8les_d%27impressions', + 'Test' => '', + 'Date' => '2022-09-16'], \ No newline at end of file diff --git a/VERSIONS_WIP/132136 b/VERSIONS_WIP/132136 new file mode 100644 index 00000000000..e91fca499fc --- /dev/null +++ b/VERSIONS_WIP/132136 @@ -0,0 +1 @@ + - fonctionnalité #132136 : Editeur de modèle d'impressions : utilisation de CodeMirror, plus adapté que l'éditeur CKEditor \ No newline at end of file diff --git a/application/modules/admin/controllers/PrintController.php b/application/modules/admin/controllers/PrintController.php index a0bd2cedcac..9860de03a76 100644 --- a/application/modules/admin/controllers/PrintController.php +++ b/application/modules/admin/controllers/PrintController.php @@ -22,8 +22,8 @@ class Admin_PrintController extends ZendAfi_Controller_Action { public function getPlugins() { - return ['ZendAfi_Controller_Plugin_ResourceDefinition_ModeleFusion', - 'ZendAfi_Controller_Plugin_Manager_ModeleFusion']; + return [ZendAfi_Controller_Plugin_ResourceDefinition_ModeleFusion::class, + ZendAfi_Controller_Plugin_Manager_ModeleFusion::class]; } @@ -31,4 +31,4 @@ class Admin_PrintController extends ZendAfi_Controller_Action { $this->view->titre=$this->view->_('Modèles d\'impressions'); $this->view->models= Class_ModeleFusion::getTemplates(); } -} \ No newline at end of file +} diff --git a/library/ZendAfi/Controller/Plugin/Manager/ModeleFusion.php b/library/ZendAfi/Controller/Plugin/Manager/ModeleFusion.php index e37d6a3eb64..eda6588bd95 100644 --- a/library/ZendAfi/Controller/Plugin/Manager/ModeleFusion.php +++ b/library/ZendAfi/Controller/Plugin/Manager/ModeleFusion.php @@ -38,5 +38,24 @@ class ZendAfi_Controller_Plugin_Manager_ModeleFusion extends ZendAfi_Controller_ Class_ModeleFusion::generateDefaults($this->_view); $this->_redirectToReferer(); } + + + protected function _postEditAction($model) { + Class_ScriptLoader::getInstance() + ->loadCodeMirror() + ->addAdminScript('codemirror-4.4/mode/css/css') + ->addAdminScript('codemirror-4.4/mode/xml/xml') + ->addAdminScript('codemirror-4.4/mode/htmlmixed/htmlmixed') + ->addInlineStyle('.CodeMirror-wrap { height: 500px }') + ->addJQueryReady(" + CodeMirror.fromTextArea($('textarea[name=\'contenu\']')[0], + { + lineNumbers:true, + tabSize:2, + matchBrackets:true, + lineWrapping:true, + mode: 'htmlmixed' + });"); + } } -?> \ No newline at end of file +?> diff --git a/library/ZendAfi/Controller/Plugin/ResourceDefinition/ModeleFusion.php b/library/ZendAfi/Controller/Plugin/ResourceDefinition/ModeleFusion.php index 3455f0763da..abd664d2ebf 100644 --- a/library/ZendAfi/Controller/Plugin/ResourceDefinition/ModeleFusion.php +++ b/library/ZendAfi/Controller/Plugin/ResourceDefinition/ModeleFusion.php @@ -23,7 +23,7 @@ class ZendAfi_Controller_Plugin_ResourceDefinition_ModeleFusion extends ZendAfi_Controller_Plugin_ResourceDefinition_Abstract { public function getDefinitions() { - return ['model' => ['class' => 'Class_ModeleFusion', + return ['model' => ['class' => Class_ModeleFusion::class, 'name' => 'modele_fusion', 'order' => 'id'], @@ -34,10 +34,10 @@ class ZendAfi_Controller_Plugin_ResourceDefinition_ModeleFusion extends ZendAfi_ 'actions' => ['edit' => ['title' => $this->_('Modifier le modèle d\'impression "%s"')], 'add' => ['title' => $this->_('Créer un nouveau modèle d\'impression')]], - 'form_class_name' => 'ZendAfi_Form_ModeleFusion', + 'form_class_name' => ZendAfi_Form_ModeleFusion::class, 'after_delete' => function() { $this->_redirect('/admin/print/index');} ]; } } -?> \ No newline at end of file +?> diff --git a/library/ZendAfi/Form/ModeleFusion.php b/library/ZendAfi/Form/ModeleFusion.php index 89b5e7800eb..46ccb968bb6 100644 --- a/library/ZendAfi/Form/ModeleFusion.php +++ b/library/ZendAfi/Form/ModeleFusion.php @@ -44,7 +44,7 @@ class ZendAfi_Form_ModeleFusion extends ZendAfi_Form { 'profil_ids', ['label' => $form->_('Afficher pour les profils (separé par des ;)'), ]) - ->addElement('ckeditor', + ->addElement('textarea', 'contenu', [ 'label' => '', @@ -65,4 +65,4 @@ class ZendAfi_Form_ModeleFusion extends ZendAfi_Form { } } -?> \ No newline at end of file +?> diff --git a/public/admin/skins/bokeh74/global.css b/public/admin/skins/bokeh74/global.css index 9531d3fea68..5f131b7499e 100755 --- a/public/admin/skins/bokeh74/global.css +++ b/public/admin/skins/bokeh74/global.css @@ -1207,3 +1207,8 @@ img.cke_slideShow { height: 100px; margin: 5px; } + + +.CodeMirror pre { + box-shadow: none; +} diff --git a/tests/application/modules/admin/controllers/PrintControllerTest.php b/tests/application/modules/admin/controllers/PrintControllerTest.php index e11c5a88981..6773ea9f4ab 100644 --- a/tests/application/modules/admin/controllers/PrintControllerTest.php +++ b/tests/application/modules/admin/controllers/PrintControllerTest.php @@ -21,11 +21,9 @@ class PrintControllerIndexTest extends Admin_AbstractControllerTestCase { - protected $_storm_default_to_volatile = true; - public function setUp() { parent::setUp(); - $this->fixture('Class_ModeleFusion', + $this->fixture(Class_ModeleFusion::class, ['id' => 5, 'nom' => 'Search result', 'type' => 'Notice_List', @@ -56,8 +54,6 @@ class PrintControllerIndexTest extends Admin_AbstractControllerTestCase { class PrintControllerGenerateTest extends Admin_AbstractControllerTestCase { - protected $_storm_default_to_volatile = true; - public function setUp() { parent::setUp(); $this->dispatch('/admin/print/generate', true); @@ -98,21 +94,21 @@ class PrintControllerGenerateTest extends Admin_AbstractControllerTestCase { class PrintControllerIndexActionTest extends AbstractControllerTestCase { - protected $_storm_default_to_volatile = true; public function setUp() { parent::setUp(); - $modele_lettre_stagiaires = $this->fixture('Class_ModeleFusion', - ['id' => 19, - 'nom' =>'ACTIVITY_LISTE_STAGIAIRES', - 'contenu' => '<h1>Liste des stagiaires pour la session du {session_activity.date_debut_texte} au {session_activity.date_fin_texte}</h1> + $this->fixture(Class_ModeleFusion::class, + ['id' => 19, + 'nom' =>'ACTIVITY_LISTE_STAGIAIRES', + 'contenu' => '<h1>Liste des stagiaires pour la session du {session_activity.date_debut_texte} au {session_activity.date_fin_texte}</h1> <h2>{session_activity.activity.libelle}</h2> {session_activity.stagiaires["Nom":nom, "Prénom":prenom, "Bibliothèque":bib.libelle, "Téléphone":telephone]}']); - $this->fixture('Class_ModeleFusion', ['id' => 1, - 'nom' => 'Template recherche', - 'contenu' => '<p> {notices.each[<img src="{url_vignette}"/> {titre_principal} <div>{article.contenu}</div> + $this->fixture(Class_ModeleFusion::class, + ['id' => 1, + 'nom' => 'Template recherche', + 'contenu' => '<p> {notices.each[<img src="{url_vignette}"/> {titre_principal} <div>{article.contenu}</div> ]}</p>', - 'type' => 'Notice_List']); + 'type' => 'Notice_List']); $this->dispatch('/admin/print/index',true); } @@ -134,8 +130,6 @@ class PrintControllerIndexActionTest extends AbstractControllerTestCase { class PrintControllerAddActionTest extends AbstractControllerTestCase { - protected $_storm_default_to_volatile = true; - public function setUp() { parent::setUp(); $this->dispatch('/admin/print/add',true); @@ -158,7 +152,6 @@ class PrintControllerAddActionTest extends AbstractControllerTestCase { class PrintControllerPostActionTest extends AbstractControllerTestCase { - protected $_storm_default_to_volatile = true; public function setUp() { parent::setUp(); $this->postDispatch('/admin/print/add', ['nom' => 'recherche', @@ -170,6 +163,36 @@ class PrintControllerPostActionTest extends AbstractControllerTestCase { /** @test */ public function templateShouldSaveProfils() { - $this->assertEquals('5;6',Class_ModeleFusion::find(1)->getProfilIds()); + $this->assertEquals('5;6', Class_ModeleFusion::find(1)->getProfilIds()); + } +} + + + + +class PrintControllerAdminEditTest extends AbstractControllerTestCase { + public function setUp() { + parent::setUp(); + $this->fixture(Class_ModeleFusion::class, + ['id' => 1, + 'nom' => 'Notices', + 'contenu' => '<p> {notices.each[<img src="{url_vignette}"/> {titre_principal} <div>{article.contenu}</div> +]}</p>', + 'type' => 'Notice_List']); + + $this->dispatch('/admin/print/edit/id/1'); + } + + + /** @test */ + public function textAreaShouldContainsContentNoticesEach() { + $this->assertXPathContentContains('//textarea[@name="contenu"]', + 'notices.each['); + } + + + /** @test */ + public function pageShouldLoadCodeMirror() { + $this->assertXPathContentContains('//script', 'CodeMirror.fromTextArea($(\'textarea[name=\\\'contenu\\\''); } } -- GitLab