From 21ec2db99ca58c73957e7b127619b09980e96fd0 Mon Sep 17 00:00:00 2001
From: Ghislain Loas <ghislo@sandbox.pergame.net>
Date: Fri, 31 Oct 2014 17:49:50 +0100
Subject: [PATCH] hotline_#16652_search_with_bib_filter continu

---
 library/Class/Bib.php                         | 36 ++++++++++++-------
 .../View/Helper/TagRechercheSimple.php        | 31 ++++++++++++----
 .../View/Helper/TagRechercheSimpleTest.php    |  8 ++---
 3 files changed, 53 insertions(+), 22 deletions(-)

diff --git a/library/Class/Bib.php b/library/Class/Bib.php
index 465566e1bf7..2c302f17631 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 3f26ddfad4d..7889e558c7a 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 5f7a61a1ad5..598fa72410d 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
-- 
GitLab