diff --git a/application/modules/opac/controllers/BibController.php b/application/modules/opac/controllers/BibController.php index 139accd480b83bc6b99fb4e07a02e8ccb11cd588..ca19b70e3c29f99934453bec95b9e00976a20129 100644 --- a/application/modules/opac/controllers/BibController.php +++ b/application/modules/opac/controllers/BibController.php @@ -244,20 +244,54 @@ class BibController extends ZendAfi_Controller_Action { $filter_keys = (new Class_Systeme_ModulesAccueil_Library())->getStaticFiltersKeys(); $default_keys = array_map(function($key) { - return Class_Systeme_ModulesAccueil_Library::DEFAULT_PREFIX . $key; + return Class_Systeme_ModulesAccueil_Library::ADD_DEFAULT_PREFIX . $key; }, $filter_keys); $defaults_to_save = []; foreach($this->_helper->selectedFilters($default_keys) as $key => $value) - $defaults_to_save[str_replace(Class_Systeme_ModulesAccueil_Library::DEFAULT_PREFIX, '', $key)] = $value; + $defaults_to_save[str_replace(Class_Systeme_ModulesAccueil_Library::ADD_DEFAULT_PREFIX, '', $key)] = $value; + + $default_keys_to_delete = array_map(function($key) + { + return Class_Systeme_ModulesAccueil_Library::DELETE_DEFAULT_PREFIX . $key; + }, + $filter_keys); + + $defaults_to_delete = []; + + foreach($this->_helper->selectedFilters($default_keys_to_delete) as $key => $value) + $defaults_to_delete[str_replace(Class_Systeme_ModulesAccueil_Library::DELETE_DEFAULT_PREFIX, '', $key)] = $value; $module_params = Class_Profil::getCurrentProfil() ->getBoitesDivision($id_division)[$id_module]; if($defaults_to_save && Class_Users::isCurrentUserCanAccesBackend()) { - $module_params['preferences']['default_filters'] = $defaults_to_save; + + if(!isset($module_params['preferences']['default_filters'])) + $module_params['preferences']['default_filters'] = []; + + $module_params['preferences']['default_filters'] = array_merge($module_params['preferences']['default_filters'], + $defaults_to_save); + Class_Profil::getCurrentProfil() + ->updateModuleConfigAccueil($id_module, $module_params) + ->save(); + } + + if($defaults_to_delete && Class_Users::isCurrentUserCanAccesBackend()) { + + if(!isset($module_params['preferences']['default_filters'])) + continue; + + $module_params['preferences']['default_filters'] = array_filter($module_params['preferences']['default_filters'], + function($filter) use ($defaults_to_delete) + { + foreach($defaults_to_delete as $key => $value) + if ( $value == $filter) + return false; + return true; + }); Class_Profil::getCurrentProfil() ->updateModuleConfigAccueil($id_module, $module_params) ->save(); diff --git a/library/Class/FilterSettings.php b/library/Class/FilterSettings.php index 72f82fa2561957bb79a59b3074cd950c80c6be18..4d561f0374e8418eaede4860ad7d2cb5112ab2c1 100644 --- a/library/Class/FilterSettings.php +++ b/library/Class/FilterSettings.php @@ -69,5 +69,11 @@ class Class_FilterSettings extends Class_Entity { $module = $this->getModule(); return $this->getFiltersPosition() == $module::POSITION_RIGHT; } + + + public function getActiveFilters() { + return array_merge($this->getDefaultFilters(), + $this->getSelectedFilters()); + } } ?> \ No newline at end of file diff --git a/library/Class/Systeme/ModulesAccueil/Library.php b/library/Class/Systeme/ModulesAccueil/Library.php index 45435b65e6d28f3dd48c5c920f94668f0788435b..ad7322dc8b567df3291c88c2958d29ea8b05e9e2 100644 --- a/library/Class/Systeme/ModulesAccueil/Library.php +++ b/library/Class/Systeme/ModulesAccueil/Library.php @@ -47,6 +47,9 @@ class Class_Systeme_ModulesAccueil_Library extends Class_Systeme_ModulesAccueil_ const DEFAULT_PREFIX = 'default_'; + const ADD_DEFAULT_PREFIX = 'add_default_'; + const DELETE_DEFAULT_PREFIX = 'delete_default_'; + /** @var string */ protected $_group = Class_Systeme_ModulesAccueil::GROUP_SITE; diff --git a/library/ZendAfi/View/Helper/Accueil/Library.php b/library/ZendAfi/View/Helper/Accueil/Library.php index ac499b09943fb7551f13f9d57be6e03dd1cbb600..e8977616c2476fb96295a8dc08319e5f7194c969 100644 --- a/library/ZendAfi/View/Helper/Accueil/Library.php +++ b/library/ZendAfi/View/Helper/Accueil/Library.php @@ -98,10 +98,10 @@ class ZendAfi_View_Helper_Accueil_Library extends ZendAfi_View_Helper_Accueil_Ba $params[] = $filter_key; } - if (!isset($this->_selected_filters[$filter_key])) + if (!isset($this->_getActiveFilters()[$filter_key])) continue; - $params[] = $this->_selected_filters[$filter_key]; + $params[] = $this->_getActiveFilters()[$filter_key]; $libraries = call_user_func_array([$this, $func_name], $params); } @@ -217,7 +217,7 @@ class ZendAfi_View_Helper_Accueil_Library extends ZendAfi_View_Helper_Accueil_Ba protected function _getBaseUrl() { $filters = []; - foreach ($this->_selected_filters as $id => $values) { + foreach ($this->_getActiveFilters() as $id => $values) { $filter_key = is_int($id) ? 'custom_field_' . $id : $id; $filters[$filter_key] = implode(';', $values); } @@ -230,6 +230,12 @@ class ZendAfi_View_Helper_Accueil_Library extends ZendAfi_View_Helper_Accueil_Ba } + protected function _getActiveFilters() { + return array_merge($this->_default_filters, + $this->_selected_filters); + } + + protected function _getDefaultPreference($name) { return (new Class_Systeme_ModulesAccueil_Library())->getDefaultValues()[$name]; } diff --git a/library/ZendAfi/View/Helper/Filters/Element.php b/library/ZendAfi/View/Helper/Filters/Element.php index 2e4e959de135181501e1e10dfb45c6cfe59d156a..1d6836f68e9bb56080ae5a152fcc0b76af487fdd 100644 --- a/library/ZendAfi/View/Helper/Filters/Element.php +++ b/library/ZendAfi/View/Helper/Filters/Element.php @@ -68,7 +68,7 @@ abstract class ZendAfi_View_Helper_Filters_Element extends ZendAfi_View_Helper_B public function render($settings) { - $this->_active_filters = $settings->getSelectedFilters(); + $this->_active_filters = $settings->getActiveFilters(); $this->_url_params = $settings->getUrlParams(); $this->_model_label = $settings->getModelLabel(); $this->_available_filters = $settings->getAvailableFilters(); diff --git a/library/ZendAfi/View/Helper/Filters/Strategy/Abstract.php b/library/ZendAfi/View/Helper/Filters/Strategy/Abstract.php index 413e5271dcf273de28362f412f5e6461d199db43..db58018dfc228f2490ef77a387ec049721cfb817 100644 --- a/library/ZendAfi/View/Helper/Filters/Strategy/Abstract.php +++ b/library/ZendAfi/View/Helper/Filters/Strategy/Abstract.php @@ -92,8 +92,11 @@ abstract class ZendAfi_View_Helper_Filters_Strategy_Abstract extends ZendAfi_Vie } - protected function _isDefaultKey() { - return isset($this->_settings->getDefaultFilters()[$this->_getFilterKey()]); + protected function _isDefaultKey($value) { + if(!isset($this->_settings->getDefaultFilters()[$this->_getFilterKey()])) + return false; + + return $this->_settings->getDefaultFilters()[$this->_getFilterKey()] == [$value]; } diff --git a/library/ZendAfi/View/Helper/Filters/Strategy/Facet.php b/library/ZendAfi/View/Helper/Filters/Strategy/Facet.php index 6bd9b29855e300357529b2ad2d24b255d4c12550..e0c57511f962fccfce55779bd0b3b4d28817b435 100644 --- a/library/ZendAfi/View/Helper/Filters/Strategy/Facet.php +++ b/library/ZendAfi/View/Helper/Filters/Strategy/Facet.php @@ -51,10 +51,20 @@ class ZendAfi_View_Helper_Filters_Strategy_Facet extends ZendAfi_View_Helper_Fil protected function _setDefaultValue($value, $label) { + if(!$value) + return ''; + if(!Class_Users::isCurrentUserCanAccesBackend()) return ''; - $key = Class_Systeme_ModulesAccueil_Library::DEFAULT_PREFIX . $this->_getFilterKey(); + $checked = $this->_isDefaultKey($value) + ? ['checked' => 'checked'] + : []; + + $key = $checked + ? Class_Systeme_ModulesAccueil_Library::DELETE_DEFAULT_PREFIX . $this->_getFilterKey() + : Class_Systeme_ModulesAccueil_Library::ADD_DEFAULT_PREFIX . $this->_getFilterKey(); + $url_params = array_merge($this->_getUrlParams(), [$this->_getFilterKey() => $value], [$key => $value]); @@ -62,10 +72,6 @@ class ZendAfi_View_Helper_Filters_Strategy_Facet extends ZendAfi_View_Helper_Fil $url = $this->view->url($url_params, null, true); $saved_label = $key . '_' . $label; - $checked = $this->_isDefaultKey() - ? ['checked' => 'checked'] - : []; - return $this->view->tag('input', '', array_merge( diff --git a/tests/application/modules/opac/controllers/BibControllerTest.php b/tests/application/modules/opac/controllers/BibControllerTest.php index 33ec5bc8162f8fa87dd2e0a4f0c42f7a06065c5b..5da0cf64541ef882335b9167023e4461afb3014d 100644 --- a/tests/application/modules/opac/controllers/BibControllerTest.php +++ b/tests/application/modules/opac/controllers/BibControllerTest.php @@ -1911,7 +1911,7 @@ class BibControllerDefaultFiltersTest extends BibControllerWidgetPageTestCase { public function setUp() { parent::setUp(); - $this->dispatch('/bib/widget-page/id_module/1/id_division/2/page/1/default_opening/opened', true); + $this->dispatch('/bib/widget-page/id_module/1/id_division/2/page/1/add_default_opening/opened', true); } @@ -1930,7 +1930,7 @@ class BibControllerDefaultFiltersTest extends BibControllerWidgetPageTestCase { /** @test */ public function openedShouldBeChecked() { - $this->assertXPath('//ul/li[@class="selected"]/input[contains(@data-url, "default_opening/opened")][@checked]', $this->_response->getBody()); + $this->assertXPath('//ul/li[@class="selected"]/input[contains(@data-url, "delete_default_opening/opened")][@checked]', $this->_response->getBody()); } } @@ -1956,7 +1956,33 @@ class BibControllerWithDefaultFiltersTest extends BibControllerWidgetPageTestCas /** @test */ public function openedShouldBeSelected() { - $this->assertXPathContentContains('//ul/li[@class="selected"]/a', 'Ouvert aujourd\'hui', $this->_response->getBody()); + $this->assertXPathContentContains('//ul/li[@class="selected"]/a', 'Ouvert aujourd\'hui'); + } +} + + + +class BibControllerDeleteDefaultFiltersTest extends BibControllerWidgetPageTestCase { + protected $_bib_wrapper; + + public function setUp() { + parent::setUp(); + + Class_Profil::getCurrentProfil() + ->updateModuleConfigAccueil(1, [ + 'division' => '2', + 'type_module' => 'LIBRARY', + 'preferences' => array_merge($this->_preferences, + ['default_filters' => ['opening' => ['opened']]]) + ]); + + $this->dispatch('/bib/widget-page/id_module/1/id_division/2/page/1/delete_default_opening/opened', true); + } + + + /** @test */ + public function openedShouldBeSelected() { + $this->assertXPathContentContains('//ul/li[not(@class="selected")]/a', 'Ouvert aujourd\'hui'); } }