diff --git a/application/modules/opac/controllers/BibController.php b/application/modules/opac/controllers/BibController.php index 7123dc1e0b90329323aa1a2f956c3a4f4aa7701c..59ab1338cbd795a94088cc4d13f68aafa5b5354c 100644 --- a/application/modules/opac/controllers/BibController.php +++ b/application/modules/opac/controllers/BibController.php @@ -90,9 +90,7 @@ class BibController extends ZendAfi_Controller_Action { function selectionAction() { $this->view->titre = $this->view->_('Sélection de bibliothèques pour la recherche'); $this->view->zones = Class_Zone::findAll(); - $this->view->id_bibs_session = []; - if(array_isset('id_bibs', $_SESSION["selection_bib"])) - $this->view->id_bibs_session = $_SESSION["selection_bib"]['id_bibs']; + $this->view->id_bibs_session = ($id_bibs = Zend_Registry::get('session')->id_bibs) ? $id_bibs : []; } diff --git a/library/Class/Profil.php b/library/Class/Profil.php index 53b49fb2788619ae6a0ceb404a6e093b9b6de086..1309d908084cc6bb9f7916e13c80b76128912a9b 100644 --- a/library/Class/Profil.php +++ b/library/Class/Profil.php @@ -117,13 +117,18 @@ class Class_Profil extends Storm_Model_Abstract { } - public static function goBackToPreviousProfil() { $session = Zend_Registry::get('session'); $session->id_profil = $session->previous_id_profil; } + public static function hasChanged() { + $session = Zend_Registry::get('session'); + return $session->id_profil != $session->previous_id_profil; + } + + /** * @param Class_Profil $profil */ diff --git a/library/ZendAfi/Controller/Plugin/SelectionBib.php b/library/ZendAfi/Controller/Plugin/SelectionBib.php index c612a17120d8f76d413e561230cf6665addc993b..2761ae4e1cb699ab10981f6d0212f782611f2fdd 100644 --- a/library/ZendAfi/Controller/Plugin/SelectionBib.php +++ b/library/ZendAfi/Controller/Plugin/SelectionBib.php @@ -20,15 +20,22 @@ */ class ZendAfi_Controller_Plugin_SelectionBib extends Zend_Controller_Plugin_Abstract { + protected $_session; + public function preDispatch(Zend_Controller_Request_Abstract $request) { + $this->_session = Zend_Registry::get('session'); + if ($request->getModuleName() != 'opac') return; if(!$params = $request->getParams()) return; - if($request->getParam('id_profil', null)) + + if(Class_Profil::hasChanged()) { unset($_SESSION['selection_bib']); + $this->_session->id_bibs = []; + } $this->setIdBibsParams($request); @@ -106,7 +113,6 @@ class ZendAfi_Controller_Plugin_SelectionBib extends Zend_Controller_Plugin_Abst if(!is_array($id_bibs)) $id_bibs = explode(',', $id_bibs); - unset($_SESSION['selection_bib']); - return $_SESSION['selection_bib']['id_bibs'] = $id_bibs; + $this->_session->id_bibs = $id_bibs; } } \ No newline at end of file diff --git a/library/ZendAfi/View/Helper/TagRechercheSimple.php b/library/ZendAfi/View/Helper/TagRechercheSimple.php index 9866315b278cf8e40d8bfd382455721b6934b49b..2d69d9b2a771f654770813d10f9baeb51c8d1bc9 100644 --- a/library/ZendAfi/View/Helper/TagRechercheSimple.php +++ b/library/ZendAfi/View/Helper/TagRechercheSimple.php @@ -59,7 +59,8 @@ class ZendAfi_View_Helper_TagRechercheSimple extends Zend_View_Helper_HtmlElemen if ((int)$this->preferences["select_bib"] !== 1) return ''; - $bib_ids = array_key_exists('id_bibs', $_SESSION['selection_bib']) ? $_SESSION['selection_bib']['id_bibs'] : '' ; + $session = Zend_Registry::get('session'); + $bib_ids = ($id_bibs = $session->id_bibs) ? $id_bibs : []; $input = $this->view->formHidden('bib_select', implode(',',$bib_ids)); diff --git a/tests/application/modules/opac/controllers/BibControllerTest.php b/tests/application/modules/opac/controllers/BibControllerTest.php index 83b7bf971ef642ff69e5c7e6e52b1a90b3e25d5a..82ed4f53c728f992ee1fb068a55956bcc7ce89bf 100644 --- a/tests/application/modules/opac/controllers/BibControllerTest.php +++ b/tests/application/modules/opac/controllers/BibControllerTest.php @@ -324,11 +324,18 @@ class BibControllerBibViewInexistantTest extends BibControllerWithZoneTestCase { abstract class BibControllerSelectionTestCase extends AbstractControllerTestCase { - public function setUp() { + protected $_session; + + + public function setUp() { parent::setUp(); + + $this->_session = Zend_Registry::get('session'); + unset($_REQUEST['geo_zone']); unset($_REQUEST['geo_bib']); unset($_SESSION['selection_bib']); + $_SESSION['selection_bib'] = ['id_bibs' => []]; $this->fixture('Class_Zone', @@ -355,12 +362,12 @@ abstract class BibControllerSelectionTestCase extends AbstractControllerTestCase 'id_zone' => 1]); $paris = $this->fixture('Class_Bib', - ['id' => 3, - 'id_site' => '2', - 'libelle' => 'Paris', - 'visibilite' => 2, - 'id_zone' => 2]); - } + ['id' => 3, + 'id_site' => '2', + 'libelle' => 'Paris', + 'visibilite' => 2, + 'id_zone' => 2]); + } } @@ -401,14 +408,14 @@ class BibControllerBibSelectionWithEmptySessionTest extends BibControllerSelecti class BibControllerBibSelectionWithBibsIdsInSessionTest extends BibControllerSelectionTestCase { public function setUp() { parent::setUp(); - $_SESSION['selection_bib'] = ['id_bibs' => [1, 2]]; + $this->_session->id_bibs = [1, 2]; $this->dispatch('bib/selection', true); } /** @test */ public function cairoShouldBeChecked() { - $this->assertXPath('//li/input[@checked="checked"][@value="1"]'); + $this->assertXPath('//li/input[@checked="checked"][@value="1"]', $this->_response->getBody()); } @@ -436,35 +443,43 @@ class BibControllerBibSelectionPostDispatchTest extends BibControllerSelectionTe /** @test */ public function seesionShouldContainsCasablancaAndCairo() { - $this->assertEquals([1, 2] ,$_SESSION['selection_bib']['id_bibs']); + $this->assertEquals([1, 2] , $this->_session->id_bibs); } +} - /** @test */ - public function sessionShouldNotContainsMessage() { - $this->assertFalse(array_key_exists('message', $_SESSION['selection_bib'])); + + +class BibControllerBibSelectionWithProfilIdParamTest extends BibControllerSelectionTestCase { + public function setUp() { + parent::setUp(); + Class_Profil::setCurrentProfil(Class_Profil::find(1)); + $this->_session->id_bibs = [1, 2]; + $this->dispatch('opac/index/index/id_profil/1', true); } /** @test */ - public function sessionShouldNotContainsHtml() { - $this->assertFalse(array_key_exists('html', $_SESSION['selection_bib'])); + public function sessionSlectionBibShouldNotExist() { + $this->assertEquals([1,2], $this->_session->id_bibs); } } - -class BibControllerBibSelectionWithProfilIdParamTest extends BibControllerSelectionTestCase { +class BibControllerBibSelectionWithProfilHasChangedTest extends BibControllerSelectionTestCase { public function setUp() { parent::setUp(); - $this->dispatch('opac/index/index/id_profil/1', true); + Class_Profil::setCurrentProfil(Class_Profil::find(1)); + $this->_session->id_bibs = [1, 2]; + $this->dispatch('opac/index/index/id_profil/2', true); } /** @test */ public function sessionSlectionBibShouldNotExist() { - $this->assertFalse(array_key_exists('id_bibs', $_SESSION['selection_bib'])); + $this->assertEmpty($this->_session->id_bibs); } + } ?> \ No newline at end of file