diff --git a/application/modules/admin/controllers/AccueilController.php b/application/modules/admin/controllers/AccueilController.php index b4f64668b71fc93666161246894dff5f789f5f12..3ec3f38cdec43e2c6a94a1471b77bf1de2a36b98 100644 --- a/application/modules/admin/controllers/AccueilController.php +++ b/application/modules/admin/controllers/AccueilController.php @@ -157,8 +157,6 @@ class Admin_AccueilController extends Zend_Controller_Action { public function sitothequeAction() { $this->preprocessSitoCategories(); - if ($this->_request->getPost('type_aff') == ZendAfi_View_Helper_Accueil_Sito::DISPLAY_HIERARCHY) - $this->_request->setPost('group_by_categorie','0'); $this->_simpleAction('SITO'); } diff --git a/library/ZendAfi/View/Helper/Accueil/Sito.php b/library/ZendAfi/View/Helper/Accueil/Sito.php index 1599e79acf200cc1847a541710dda4b57380438e..1903b35796116c5161f7424966acc55c8b01c712 100644 --- a/library/ZendAfi/View/Helper/Accueil/Sito.php +++ b/library/ZendAfi/View/Helper/Accueil/Sito.php @@ -24,13 +24,13 @@ class ZendAfi_View_Helper_Accueil_Sito extends ZendAfi_View_Helper_Accueil_Base const ORDER_SELECTION = 'Selection'; const DISPLAY_SELECTION = 1; - const DISPLAY_NOVELTY = 2; + const DISPLAY_GROUPED = 2; const DISPLAY_HIERARCHY = 3; protected $strategy, $page; protected function _renderHeadScriptsOn($script_loader) { - $this->getStrategy()->getHeadScript(); + $this->getStrategy()->renderHeadScriptsOn($script_loader); } @@ -43,8 +43,8 @@ class ZendAfi_View_Helper_Accueil_Sito extends ZendAfi_View_Helper_Accueil_Base if($this->isHierarchicalDisplay()) $strategy = new HierrachicalStrategy(); - if($this->isTypeAffichagePlusRecents()) - $strategy = new NewestStrategy(); + if($this->isTypeAffichageGrouped()) + $strategy = new GroupedStrategy(); return $this->stategy = $strategy ->setView($this->view) @@ -73,8 +73,8 @@ class ZendAfi_View_Helper_Accueil_Sito extends ZendAfi_View_Helper_Accueil_Base } - public function isTypeAffichagePlusRecents() { - return $this->_isDisplayType(static::DISPLAY_NOVELTY); + public function isTypeAffichageGrouped() { + return $this->_isDisplayType(static::DISPLAY_GROUPED); } @@ -87,13 +87,6 @@ class ZendAfi_View_Helper_Accueil_Sito extends ZendAfi_View_Helper_Accueil_Base return $this->getPreference('type_aff') == $type; } - - public function isGroupByCategorie() { - return (array_isset('group_by_categorie', $this->preferences) - && true == $this->getPreference('group_by_categorie')); - } - - public function setPage($page) { $this->page = $page; return $this; @@ -105,6 +98,7 @@ class ZendAfi_View_Helper_Accueil_Sito extends ZendAfi_View_Helper_Accueil_Base class SitoDisplayStrategy { const ORDER_RANDOM = 'Random'; const ORDER_SELECTION = 'Selection'; + const ORDER_RECENT = 'Recent'; protected $view, @@ -201,49 +195,24 @@ class SitoDisplayStrategy { $start = $this->page ? $this->page - 1 : 0; $sites = array_slice($sites, $start, $nb_aff); - if (!$this->getPreference('group_by_categorie')) - return $this->_renderSites($sites); - - $categories = $this->_groupSitesByCategorie($sites); - $htmls = []; - foreach ($categories as $libelle_categorie => $sites) - $htmls[] = $this->_renderGroup($libelle_categorie, $sites); - - return $this->view->tag('ul', implode('', $htmls), - ['class' => 'sitotheque']); + return $this->_renderSites($sites); } - protected function _groupSitesByCategorie($sites) { - $categories = []; - foreach ($sites as $site) { - $categorie = $site->getCategorieLibelle(); - if (!array_isset($categorie, $categories)) - $categories[$categorie] = []; - $categories[$categorie][] = $site; - } - - return $categories; - } - + protected function _loadSites() { + if (static::ORDER_RECENT == $this->getPreference('display_order')) + return Class_Sitotheque::getLastSitos($this->getPreference('id_categorie'), + $this->getPreference('id_items'), + null); - protected function _renderGroup($label, $sites) { - return $this->view->tag('li', - $this->view->tag('h2', - $this->view->tag('a', $label, ['href' => '#'])) - . $this->view->tag('ul', - $this->view->tag('li', $this->_renderSites($sites)))); + return Class_Sitotheque::getSitesFromIdsAndCategories(explode('-', + $this->getPreference('id_items')), + explode('-', + $this->getPreference('id_categorie'))); } - public function getHeadScript() { - if ($this->getPreference('group_by_categorie')) - Class_ScriptLoader::getInstance() - ->addJQueryReady('$("#'.$this->accueil_sito->_getBoxId() .' ul.sitotheque>li>h2>a").click( - function(event){ - event.preventDefault(); - $(this).closest("li").find("ul").slideToggle(); - });'); + public function renderHeadScriptsOn($script_loader) { } } @@ -251,18 +220,20 @@ class SitoDisplayStrategy { class SelectedStrategy extends SitoDisplayStrategy { public function getContent() { - $sites = - Class_Sitotheque::getSitesFromIdsAndCategories(explode('-', - $this->getPreference('id_items')), - explode('-', - $this->getPreference('id_categorie'))); + $nb_aff = $this->getPreference('nb_aff') ? $this->getPreference('nb_aff') : $this->_getDefaultNbAff(); + $sites = $this->_loadSites(); if (static::ORDER_RANDOM == $this->getPreference('display_order')) { shuffle($sites); - return $this->renderSitesSlice($sites, $this->getPreference('nb_aff')); + return $this->renderSitesSlice($sites, $nb_aff); } - return $this->renderSitesWithPagination($sites, $this->getPreference('nb_aff')); + return $this->renderSitesWithPagination($sites, $nb_aff); + } + + protected function _getDefaultNbAff() { + $module = new Class_Systeme_ModulesAccueil_Sitotheque(); + return $module->getDefaultValues()['nb_aff']; } @@ -276,7 +247,7 @@ class SelectedStrategy extends SitoDisplayStrategy { protected function getPaginator($items, $items_by_page, $page = 1) { $paginator = (new Zend_Paginator(new Zend_Paginator_Adapter_Null(count($items)))) - ->setItemCountPerPage($items_by_page) + ->setItemCountPerPage(max($items_by_page, 1)) ->setCurrentPageNumber($page); return $this->view->paginationControl($paginator, null, null, ['url_link' => ['module' => 'opac', 'controller' => 'sito', @@ -288,14 +259,55 @@ class SelectedStrategy extends SitoDisplayStrategy { -class NewestStrategy extends SitoDisplayStrategy { +class GroupedStrategy extends SitoDisplayStrategy { public function getContent() { - $sites = Class_Sitotheque::getLastSitos($this->getPreference('id_categorie'), - $this->getPreference('id_items'), - null); + $sites = $this->_loadSites(); return $this->renderSitesSlice($sites, $this->getPreference('nb_aff')); } + + + protected function _renderSites($sites) { + $categories = $this->_groupSitesByCategorie($sites); + $htmls = []; + foreach ($categories as $libelle_categorie => $sites) + $htmls[] = $this->_renderGroup($libelle_categorie, $sites); + + return $this->view->tag('ul', implode('', $htmls), + ['class' => 'sitotheque']); + } + + + protected function _renderGroup($label, $sites) { + return $this->view->tag('li', + $this->view->tag('h2', + $this->view->tag('a', $label, ['href' => '#'])) + . $this->view->tag('ul', + $this->view->tag('li', parent::_renderSites($sites)))); + } + + + protected function _groupSitesByCategorie($sites) { + $categories = []; + foreach ($sites as $site) { + $categorie = $site->getCategorieLibelle(); + if (!array_isset($categorie, $categories)) + $categories[$categorie] = []; + $categories[$categorie][] = $site; + } + + return $categories; + } + + + public function renderHeadScriptsOn($script_loader) { + $script_loader + ->addJQueryReady('$("#'.$this->accueil_sito->_getBoxId() .' ul.sitotheque>li>h2>a").click( + function(event){ + event.preventDefault(); + $(this).closest("li").find("ul").slideToggle(); + });'); + } } @@ -304,9 +316,5 @@ class HierrachicalStrategy extends SitoDisplayStrategy { public function getContent() { return $this->view->sitoTree($this->getPreference('id_categorie')); } - - - public function getHeadScript() { - } } ?> \ No newline at end of file diff --git a/tests/application/modules/admin/controllers/AccueilControllerTest.php b/tests/application/modules/admin/controllers/AccueilControllerTest.php index 930b8406527546378ca1eec8ced10e5cc83d095d..460e2576b9228ac9fec8aa44ee16a2b9381764fd 100644 --- a/tests/application/modules/admin/controllers/AccueilControllerTest.php +++ b/tests/application/modules/admin/controllers/AccueilControllerTest.php @@ -223,26 +223,12 @@ class AccueilControllerConfigSitothequePostTest extends Admin_AbstractController } - /** @test */ - public function selectSelectedItemsWithGroupByCategorieShouldSaveIt() { - $this->postDispatch('/admin/accueil/sitotheque?config=accueil&id_profil=1&type_module=SITO&id_module=25', - ['type_aff' => 1, - 'nb_aff' => 3, - 'group_by_categorie' => 1, - 'id_categorie' => '12' - ]); - - $this->assertEquals('1', Class_Profil::find(1)->getModuleAccueilConfig(25,'SITO')['preferences']['group_by_categorie']); - } - - /** @test */ public function selectHierachicalDisplayShouldSaveOnlyFirstCategory() { $this->postDispatch('/admin/accueil/sitotheque?config=accueil&id_profil=1&type_module=SITO&id_module=25', [ 'type_aff' => 3, 'nb_aff' => 2, - 'group_by_categorie' => 1, 'id_categorie' => '12-17' ]); @@ -251,43 +237,12 @@ class AccueilControllerConfigSitothequePostTest extends Admin_AbstractController } - /** @test */ - public function selectHierachicalDisplayShouldForceGroupByCategoryToFalse() { - $this->postDispatch('/admin/accueil/sitotheque?config=accueil&id_profil=1&type_module=SITO&id_module=25', - [ - 'type_aff' => 3, - 'nb_aff' => 2, - 'group_by_categorie' => 1, - 'id_categorie' => '12-17' - ]); - - - $this->assertEquals('0', Class_Profil::find(1)->getModuleAccueilConfig(25,'SITO')['preferences']['group_by_categorie']); - } - - - /** @test */ - public function selectDisplayShouldNotForceGroupByCategoryToFalse() { - $this->postDispatch('/admin/accueil/sitotheque?config=accueil&id_profil=1&type_module=SITO&id_module=25', - [ - 'type_aff' => 1, - 'nb_aff' => 2, - 'group_by_categorie' => true, - 'id_categorie' => '12-17' - ]); - - - $this->assertEquals(true, Class_Profil::find(1)->getModuleAccueilConfig(25,'SITO')['preferences']['group_by_categorie']); - } - - /** @test */ public function selectHierachicalDisplayWithEmptyCategoriesShouldSaveOnlyFirstCategory() { $this->postDispatch('/admin/accueil/sitotheque?config=accueil&id_profil=1&type_module=SITO&id_module=25', [ 'type_aff' => 3, 'nb_aff' => 2, - 'group_by_categorie' => 0, 'id_categorie' => '' ]); @@ -324,12 +279,6 @@ class AccueilControllerConfigSitothequeDefaultsTest extends Admin_AbstractContro } - /** @test */ - public function checkboxGroupByCategorieShouldNotBeChecked() { - $this->assertXPath('//input[@type="checkbox"][@name="group_by_categorie"][not(@checked)]'); - } - - /** @test */ public function inputHiddenIdItemsShouldContainsSelectedItems() { $this->assertXPath('//input[@type="hidden"][@name="id_items"][@value="12-13"]'); @@ -367,7 +316,6 @@ class AccueilControllerConfigSitothequeWithPreferencesTest extends Admin_Abstrac 'division' => 1, 'id_module' => 25, 'preferences' => ['titre' => 'Ma Sito', - 'group_by_categorie' => 1, 'display_order' => 'Selection']]); $this->dispatch('/admin/accueil/sitotheque?config=accueil&type_module=SITO&id_module=25'); @@ -380,12 +328,6 @@ class AccueilControllerConfigSitothequeWithPreferencesTest extends Admin_Abstrac } - /** @test */ - public function checkboxGroupByCategorieShouldNotBeChecked() { - $this->assertXPath('//input[@type="checkbox"][@name="group_by_categorie"][@checked="checked"]'); - } - - /** @test */ public function displayOrderSelectionShouldBeChecked() { $this->assertXPath('//input[@type="radio"][@name="display_order"][@checked="checked"][@value="Selection"]'); diff --git a/tests/application/modules/opac/controllers/ProfilOptionsControllerTest.php b/tests/application/modules/opac/controllers/ProfilOptionsControllerTest.php index 9c8eeb23a32fcd4b0ebbb258262c4ad88bbaf8f2..c984d831efc32891244d75f449f3d550c6a39c9e 100644 --- a/tests/application/modules/opac/controllers/ProfilOptionsControllerTest.php +++ b/tests/application/modules/opac/controllers/ProfilOptionsControllerTest.php @@ -891,8 +891,7 @@ abstract class ProfilOptionsControllerProfilJeunesseWithPagesJeuxMusiqueTestCase '10' => ['division' => '2', 'type_module' => 'SITO', - 'preferences' => ['id_categorie' => '2', - 'group_by_categorie' => true]], + 'preferences' => ['id_categorie' => '2']], '12' => ['division' => '2', 'type_module' => 'KIOSQUE', @@ -1309,8 +1308,8 @@ class ProfilOptionsControllerPagesJeuxWithSitothequeTest extends ProfilOptionsCo '10' => ['division' => '2', 'type_module' => 'SITO', 'preferences' => ['rss' => 1, - 'id_categorie' => '2', - 'group_by_categorie' => true]]], + 'type_aff' => 2, + 'id_categorie' => '2']]], 'options' => []]); $this->fixture('Class_SitothequeCategorie', @@ -1381,8 +1380,7 @@ class ProfilOptionsControllerPagesJeuxWithSitothequeAndPaginationTest extends Pr 'id_categorie' => '2', 'nb_aff' => 1, 'type_aff' => 1, - 'display_order' => 'Selection', - 'group_by_categorie' => 0]]], + 'display_order' => 'Selection']]], 'options' => []]); $this->fixture('Class_SitothequeCategorie', @@ -2631,7 +2629,8 @@ class ProfilOptionsControllerRecentSitoTest extends ProfilOptionsControllerProfi '10' => ['division' => '2', 'type_module' => 'SITO', 'preferences' => ['id_categorie' => '', - 'type_aff' => '2']]], + 'type_aff' => '1', + 'display_order' => 'Recent']]], 'options' => []]); $this->dispatch('/opac/index/index/clef/zork?id_profil=12', true); @@ -2646,7 +2645,8 @@ class ProfilOptionsControllerRecentSitoTest extends ProfilOptionsControllerProfi 'type_module' => 'SITO', 'preferences' => ['id_categorie' => '2', 'id_items' => '35', - 'type_aff' => '2']]], + 'type_aff' => '1', + 'display_order' => 'Recent']]], 'options' => []]); $this->dispatch('/opac/index/index/clef/zork?id_profil=12', true); diff --git a/tests/fixtures/SitoPreferencesSerialize.txt b/tests/fixtures/SitoPreferencesSerialize.txt deleted file mode 100644 index 7e409adb89f9866a663ce346ffb060bba88a0b97..0000000000000000000000000000000000000000 --- a/tests/fixtures/SitoPreferencesSerialize.txt +++ /dev/null @@ -1 +0,0 @@ -a:4:{s:7:"modules";a:3:{i:3;a:3:{s:11:"type_module";s:4:"SITO";s:11:"preferences";a:11:{s:5:"titre";s:14:"GROUPED recent";s:8:"type_aff";s:1:"2";s:12:"id_categorie";s:3:"2-3";s:8:"id_items";s:0:"";s:6:"nb_aff";s:2:"10";s:3:"rss";s:1:"0";s:18:"group_by_categorie";s:1:"1";s:13:"display_order";s:6:"Random";s:5:"boite";s:0:"";s:9:"id_module";s:1:"3";s:7:"Valider";s:7:"Valider";}s:8:"division";s:1:"2";}i:1;a:3:{s:11:"type_module";s:4:"SITO";s:11:"preferences";a:11:{s:5:"titre";s:12:"PAGED recent";s:8:"type_aff";s:1:"2";s:12:"id_categorie";s:0:"";s:8:"id_items";s:0:"";s:6:"nb_aff";s:1:"5";s:3:"rss";s:1:"0";s:18:"group_by_categorie";s:1:"0";s:13:"display_order";s:6:"Random";s:5:"boite";s:0:"";s:9:"id_module";s:1:"1";s:7:"Valider";s:7:"Valider";}s:8:"division";s:1:"2";}i:2;a:3:{s:11:"type_module";s:4:"SITO";s:11:"preferences";a:11:{s:5:"titre";s:14:"GROUPED random";s:8:"type_aff";s:1:"1";s:12:"id_categorie";s:3:"3-2";s:8:"id_items";s:0:"";s:6:"nb_aff";s:1:"2";s:3:"rss";s:1:"0";s:18:"group_by_categorie";s:1:"1";s:13:"display_order";s:6:"Random";s:5:"boite";s:0:"";s:9:"id_module";s:1:"2";s:7:"Valider";s:7:"Valider";}s:8:"division";s:1:"2";}}s:14:"use_parent_css";s:1:"1";s:7:"sitemap";s:1:"1";s:8:"page_css";s:0:"";} diff --git a/tests/library/ZendAfi/View/Helper/Accueil/SitoTest.php b/tests/library/ZendAfi/View/Helper/Accueil/SitoTest.php index 93e9fac65b39b77b61f45d2852487c699f59e3b0..2bde339cd9fa17072d07552f2f4d905ea373d7e6 100644 --- a/tests/library/ZendAfi/View/Helper/Accueil/SitoTest.php +++ b/tests/library/ZendAfi/View/Helper/Accueil/SitoTest.php @@ -90,8 +90,10 @@ abstract class SitoViewHelperTestCase extends ViewHelperTestCase { $this->_helper = new ZendAfi_View_Helper_Accueil_Sito(2, ['division' => '1', 'type_module' => 'SITO', 'preferences' => $this->_preferences]); + $view = new ZendAfi_Controller_Action_Helper_View(); + $view->setScriptPath('application/modules/opac/views/scripts'); - $this->_helper->setView(new ZendAfi_Controller_Action_Helper_View()); + $this->_helper->setView($view); $this->html = $this->_helper->getBoite(); } } @@ -183,9 +185,9 @@ class SitoViewHelperSelectItemsAndCatsTest extends SitoViewHelperTestCase { class SitoViewHelperLastTest extends SitoViewHelperTestCase { protected $_preferences = ['titre' => 'Derniers sites', - 'type_aff' => 2, + 'type_aff' => 1, 'nb_aff' => 100, - 'display_order' => 'Random']; + 'display_order' => 'Recent']; /** @test */ public function titleShouldBeDerniersSites() { @@ -220,8 +222,8 @@ class SitoViewHelperLastTest extends SitoViewHelperTestCase { class SitoViewHelperGroupByCategorieTest extends SitoViewHelperTestCase { protected $_preferences = ['titre' => 'Ma sito', 'type_aff' => 2, - 'nb_aff' => 100, - 'group_by_categorie' => 1]; + 'display_order' => 'Recent', + 'nb_aff' => 100]; /** @test */ @@ -255,12 +257,11 @@ class SitoViewHelperGroupByCategorieTest extends SitoViewHelperTestCase { } -class SitoViewHelperNewestSitoGroupByCategorieOrderBySelectionTest extends SitoViewHelperTestCase { +class SitoViewHelperGroupByCategorieOrderByNewestSitoTest extends SitoViewHelperTestCase { protected $_preferences = ['titre' => 'Ma sito', 'type_aff' => 2, 'nb_aff' => 2, - 'display_order' => 'Selection', - 'group_by_categorie' => 1]; + 'display_order' => 'Recent']; /** @test */