diff --git a/library/Class/Bib.php b/library/Class/Bib.php index 465566e1bf7a17dc921508af9716359901522120..2c302f176311b150438e8ff83942c4b8303dcaee 100644 --- a/library/Class/Bib.php +++ b/library/Class/Bib.php @@ -90,31 +90,43 @@ class BibLoader extends Storm_Model_Loader { if(!is_array($ids)) $ids = explode(',',$ids); - $all_bibs = Class_Bib::findAll(); - $all_bibs = array_filter($all_bibs, function($bib) {return $bib->getVisibilite() == 2 ;}); + $all_bibs = Class_Bib::findAllBy(['visibilite' => 2]); $all_bibs_ids = []; foreach($all_bibs as $bib) $all_bibs_ids[] = $bib->getId(); - return sort($ids) == sort($all_bibs_ids); + sort($ids); + sort($all_bibs_ids); + return $ids == $all_bibs_ids; } public function getSelectedZones($ids) { - if(!is_array($ids)) + if(!is_array($ids)) $ids = explode(',',$ids); - $zones = []; - foreach($ids as $id) - $zones[] = Class_Bib::find($id)->getIdZone(); - } + $zones = []; + foreach($ids as $id) { + $zones[] = Class_Bib::find($id)->getId(); + } - $bibs_by_zones = []; - foreach($zones as $zone) { - $bibs_by_zones[$zone->getId()] = Class_Bib::findAllByIdZone($zone->getId()); - } + $bibs_by_zones = []; + foreach($zones as $zone_id) { + $bibs_by_zones[$zone_id] = + array_filter(Class_Bib::findAllByIdZone($zone_id), function($bib) {return $bib->getVisibilite() == 2 ;}); + } + $selected_zones = []; + foreach($bibs_by_zones as $id => $bibs) { + $bibs_ids = []; + foreach($bibs as $bib) + $bibs_ids[] = $bib->getId(); + if(0 == count(array_diff($bibs_ids, $ids))) + $selected_zones[] = $id; + } + return $selected_zones; + } } diff --git a/library/ZendAfi/View/Helper/TagRechercheSimple.php b/library/ZendAfi/View/Helper/TagRechercheSimple.php index 3f26ddfad4d302ab9e6e066b79d4e1f179093525..7889e558c7afcdf25f3ac20e3b0a7bbff23bccf6 100644 --- a/library/ZendAfi/View/Helper/TagRechercheSimple.php +++ b/library/ZendAfi/View/Helper/TagRechercheSimple.php @@ -85,14 +85,33 @@ class ZendAfi_View_Helper_TagRechercheSimple extends Zend_View_Helper_HtmlElemen if(Class_Bib::areAllBibsSelected($bib_ids)) return $this->view->_('La recherche s\'effectue dans tout le réseau.'); - if($zones = Class_Bib::getSelectedZones($bib_ids)) - return $this->view->_plural(count($zones), - "Aucune zone de sélectionnée.", - 'La recherche s\'effectue dans tout la zone %s', - 'La recherche s\'effectue dans tout les zones %s', - implode(', ', $zones)); + $message = ''; + if($zones = Class_Bib::getSelectedZones($bib_ids)) { + $zones_libelles = []; + foreach($zones as $zone) { + $zones_libelles[] = Class_Zone::find($zone)->getLibelle(); + } + + $message = $this->view->_plural(count($zones), + 'Aucune zone de sélectionnée.', + 'La recherche s\'effectue dans toute la zone %s.', + 'La recherche s\'effectue dans toutes les zones %s.', + implode(', ', $zones_libelles)); + } + + xdebug_break(); + $bib_ids_array = explode(',', $bib_ids); + $bibs_labels = []; + foreach($bib_ids_array as $id) + $bibs_labels[] = Class_Bib::find($id)->getLibelle(); + + return $message .= $this->view->_plural(count($bibs_labels), + 'Aucune bib de sélectionnée.', + 'La recherche s\'effectue dans la bibliothèque de %s.', + 'La recherche s\'effectue dans les bibliothèques de %s.', + implode(', ', $bibs_labels)); } diff --git a/tests/library/ZendAfi/View/Helper/TagRechercheSimpleTest.php b/tests/library/ZendAfi/View/Helper/TagRechercheSimpleTest.php index 5f7a61a1ad5fa23ba6d5be3a83a5555d86b7ce37..598fa72410ddf5391047a6e2c19c9d8c268aa691 100644 --- a/tests/library/ZendAfi/View/Helper/TagRechercheSimpleTest.php +++ b/tests/library/ZendAfi/View/Helper/TagRechercheSimpleTest.php @@ -154,7 +154,7 @@ class ZendAfi_View_Helper_TagRechercheSimpleTestWithSessionParams extends ViewHe public function withSelectedBib3MessageShouldBeAsExpected() { $_SESSION['selection_bib'] = ['id_bibs' => '3']; $html = $this->_helper->tagRechercheSimple($this->_preferences, 1); - $this->assertXPathContentContains($html, '//div//p', utf8_encode('La recherche s\'effectue dans la bibliothèque Paris.')); + $this->assertXPathContentContains($html, '//div//p', utf8_encode('La recherche s\'effectue dans la bibliothèque de Paris.')); } @@ -162,7 +162,7 @@ class ZendAfi_View_Helper_TagRechercheSimpleTestWithSessionParams extends ViewHe public function withSelectedBib1And3MessageShouldBeAsExpected() { $_SESSION['selection_bib'] = ['id_bibs' => '1,3']; $html = $this->_helper->tagRechercheSimple($this->_preferences, 1); - $this->assertXPathContentContains($html, '//div//p', utf8_encode('La recherche s\'effectue dans les bibliothèques Cairo, Paris.')); + $this->assertXPathContentContains($html, '//div//p', utf8_encode('La recherche s\'effectue dans les bibliothèques de Cairo, Paris.')); } @@ -178,7 +178,7 @@ class ZendAfi_View_Helper_TagRechercheSimpleTestWithSessionParams extends ViewHe public function withSelectionBib1And2MessageShouldBeAsExpected() { $_SESSION['selection_bib'] = ['id_bibs' => '1,2']; $html = $this->_helper->tagRechercheSimple($this->_preferences, 1); - $this->assertXPathContentContains($html, '//div//p', utf8_encode('La recherche s\'effectue dans tout la zone Africa.')); + $this->assertXPathContentContains($html, '//div//p', utf8_encode('La recherche s\'effectue dans toute la zone Africa.')); } @@ -186,7 +186,7 @@ class ZendAfi_View_Helper_TagRechercheSimpleTestWithSessionParams extends ViewHe public function withSelectionBibByZone1and2MessageShouldBeAsExpected() { $_SESSION['selection_bib'] = ['id_bibs' => '1,2,3']; $html = $this->_helper->tagRechercheSimple($this->_preferences, 1); - $this->assertXPathContentContains($html, '//div//p', utf8_encode('La recherche s\'effectue dans tout les zones Africa, Europe.')); + $this->assertXPathContentContains($html, '//div//p', utf8_encode('La recherche s\'effectue dans toutes les zones Africa, Europe.')); } } ?> \ No newline at end of file