diff --git a/VERSIONS_HOTLINE/86145 b/VERSIONS_HOTLINE/86145 new file mode 100644 index 0000000000000000000000000000000000000000..71769ad060b4cc922396ec1d8194277321291f00 --- /dev/null +++ b/VERSIONS_HOTLINE/86145 @@ -0,0 +1 @@ + - ticket #86145 : Configuration des boîtes et menus "Articles": correction de l'affichage du champ de saisie "nombre d'articles à afficher" \ No newline at end of file diff --git a/application/modules/opac/controllers/CmsController.php b/application/modules/opac/controllers/CmsController.php index 990fd61d4e290410e6043d8cf63bc7941a9fdfee..cf6a512009bc0cdc99391c2fa56d7d78e01e022c 100644 --- a/application/modules/opac/controllers/CmsController.php +++ b/application/modules/opac/controllers/CmsController.php @@ -269,22 +269,30 @@ class CmsController extends ZendAfi_Controller_Action { /** * @param array $preferences */ - protected function _viewArticlesByPreferences($preferences) { - $articles = Class_Article::getLoader()->getArticlesByPreferences($preferences); - $articles = Class_Article::getLoader()->filterByLocaleAndWorkflow($articles); + protected function _viewArticlesByPreferences($preferences) { + $this->view->articles = $this->_getArticlesByPreferences($preferences); - $this->view->articles = $articles; + if (array_key_exists('libelle', $preferences)) + $this->view->titreAdd(($this->view->titre = $preferences['libelle'])); - if (array_key_exists('libelle', $preferences)) - $this->view->titreAdd(($this->view->titre = $preferences['libelle'])); + $this->view->show_content = + (isset($preferences['summary_content']) + && isset($preferences['display_mode']) + && ($preferences['display_mode'] == 'Summary')) + ? $preferences['summary_content'] + : 'FullContent'; + + $this->renderScript('cms/articlesview.phtml'); + } - $this->view->show_content = - (isset($preferences['summary_content']) - && isset($preferences['display_mode']) - && ($preferences['display_mode'] == 'Summary')) - ? $preferences['summary_content'] - : 'FullContent'; - $this->renderScript('cms/articlesview.phtml'); - } + protected function _getArticlesByPreferences($preferences) { + $search_preferences = array_intersect_key($preferences, + Class_Article::getLoader()->getArticlesByPreferencesDefaults()); + if (Class_AdminVar::isWorkflowEnabled()) + $search_preferences['status'] = [Class_Article::STATUS_VALIDATED]; + + $articles = Class_Article::getLoader()->getArticlesByPreferences($search_preferences); + return Class_Article::getLoader()->filterByLocaleAndWorkflow($articles); + } } \ No newline at end of file diff --git a/library/Class/Article.php b/library/Class/Article.php index b1d6011b76ce4d2cc28d59516227165ac37af410..565a95298a2ce5e09e3b23d27b62f9f205542325 100644 --- a/library/Class/Article.php +++ b/library/Class/Article.php @@ -309,31 +309,34 @@ class ArticleLoader extends Storm_Model_Loader { } + + public function getArticlesByPreferencesDefaults() { + return ['id_categorie' => '', // catégories d'article, ex: 12-2-8-1-89 + 'id_items' => '', // liste d'articles, ex: 39-28-7 + 'display_order' => '', // tri, cf. méthodes Class_Article::sortByXXX, Random, Selection, CommentCount + 'nb_analyse' => 0, // afficher nb_aff articles (aléatoires) parmis nb_analyse articles ramenés sur un critère + 'nb_aff' => null, // nb d'article à retourner + 'langue' => null, // que les traductions de cette langue + 'event_date' => null, // que les articles dont les dates de début et/ou de fin inclue cette date + 'event_start_after' => null, // que les articles dont l'évènement commence après cette date + 'event_end_after' => null, // que les articles dont l'évènement termine à ou après cette date + 'id_bib' => null, // filtre par cette bibliothèque + 'status' => null, // filtre par cet état de workflow cf. Class_Article::STATUS_XXX + 'events_only' => false, // filtre que les évènements, + 'published' => true, // seulement les articles dont les date de debut / fin incluent le jour en cours, + 'id_lieu' => null, // id du lieu Class_Lieu + 'display_mode' => 'Title', + 'custom_fields' => []]; + } + + /** * @param array $preferences * @return array */ public function getArticlesByPreferences($preferences) { - $defaults = [ - 'id_categorie' => '', // catégories d'article, ex: 12-2-8-1-89 - 'id_items' => '', // liste d'articles, ex: 39-28-7 - 'display_order' => '', // tri, cf. méthodes Class_Article::sortByXXX, Random, Selection, CommentCount - 'nb_analyse' => 0, // afficher nb_aff articles (aléatoires) parmis nb_analyse articles ramenés sur un critère - 'nb_aff' => null, // nb d'article à retourner - 'langue' => null, // que les traductions de cette langue - 'event_date' => null, // que les articles dont les dates de début et/ou de fin inclue cette date - 'event_start_after' => null, // que les articles dont l'évènement commence après cette date - 'event_end_after' => null, // que les articles dont l'évènement termine à ou après cette date - 'id_bib' => null, // filtre par cette bibliothèque - 'status' => null, // filtre par cet état de workflow cf. Class_Article::STATUS_XXX - 'events_only' => false, // filtre que les évènements, - 'published' => true, // seulement les articles dont les date de debut / fin incluent le jour en cours, - 'id_lieu' => null, // id du lieu Class_Lieu - 'display_mode' => 'Title', - 'custom_fields' => [], - ]; - - $preferences = array_merge($defaults, $preferences); + $preferences = array_merge($this->getArticlesByPreferencesDefaults(), + $preferences); $this->_sort_order = $preferences['display_order']; $this->_nb_aff = (int)$preferences['nb_aff']; diff --git a/public/admin/js/global.js b/public/admin/js/global.js index 716f425bc889af164a29f996b040738d8375aa79..d8a5aa96f1db3027f42315ebdb7227a3021a369a 100644 --- a/public/admin/js/global.js +++ b/public/admin/js/global.js @@ -193,7 +193,7 @@ function radioToggleVisibilityForElement(eventSourceSelector, objectToShowSelect return toggleVisibilityForElement(eventSourceSelector, objectToShowSelector, function(element) { - return $(element).is(':checked') && (0 <= $.inArray(element.val(), visibleForValues)); + return (0 <= $.inArray($(eventSourceSelector + ':checked').val(), visibleForValues)); }); } diff --git a/tests/application/modules/opac/controllers/CmsControllerTest.php b/tests/application/modules/opac/controllers/CmsControllerTest.php index 6b862adb24d5f80d63a428890131730f562b1795..266aca12224e365a65fdf8d27e0a192ab49b2561 100644 --- a/tests/application/modules/opac/controllers/CmsControllerTest.php +++ b/tests/application/modules/opac/controllers/CmsControllerTest.php @@ -1549,8 +1549,7 @@ class CmsControllerArticleViewSelectionFromHorizontalMenuBoxTest extends Abstrac Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Article') ->whenCalled('getArticlesByPreferences') - ->with(['titre' => 'Nouvelles', - 'id_items' => 2, + ->with(['id_items' => 2, 'display_order' => 'Selection', 'nb_aff' => 30]) ->answers([$article]); @@ -1567,9 +1566,33 @@ class CmsControllerArticleViewSelectionFromHorizontalMenuBoxTest extends Abstrac +class CmsControllerArticleViewPreferencesWithWorkflowTest extends CmsControllerListTestCase { + protected function _dispatchHook() { + Class_AdminVar::set('WORKFLOW', '1'); + + Class_Article::getLoader() + ->whenCalled('getArticlesByPreferences')->answers([]) + ->whenCalled('getArticlesByPreferences') + ->with(['nb_aff' => 2, + 'display_order' => 'DebutPublicationDesc', + 'status' => [Class_Article::STATUS_VALIDATED]]) + ->answers($this->_createFeteDeLaFriteAndMatsumotoArticles()); + $this->dispatch('/cms/articleviewpreferences/nb_aff/2/display_order/DebutPublicationDesc'); + } +} + + + class CmsControllerArticleViewPreferencesBySelectionTest extends CmsControllerListTestCase { protected function _dispatchHook() { + Class_Article::getLoader() + ->whenCalled('getArticlesByPreferences')->answers([]) + ->whenCalled('getArticlesByPreferences') + ->with(['id_items' => '1-3', + 'display_order' => 'Selection']) + ->answers($this->_createFeteDeLaFriteAndMatsumotoArticles()); + Class_Article::find(224)->setPickDay('5')->save(); $this->dispatch('/cms/articleviewpreferences?id_items=1-3&display_order=Selection'); }