From f0434fdc78a3754d2ec8758478bace38b91434f7 Mon Sep 17 00:00:00 2001
From: Alex Arnaud <alex.arnaud@biblibre.com>
Date: Tue, 13 Jan 2015 12:15:39 +0100
Subject: [PATCH] hotline#18512 - Fix the way comments are displayed

---
 library/Class/Avis.php                        |  2 +-
 library/ZendAfi/View/Helper/AvisCms.php       | 54 ++++++-------------
 .../AbonneControllerCmsAvisTest.php           | 13 +++--
 3 files changed, 26 insertions(+), 43 deletions(-)

diff --git a/library/Class/Avis.php b/library/Class/Avis.php
index f878a6cb81c..cf2ebfc8cf3 100644
--- a/library/Class/Avis.php
+++ b/library/Class/Avis.php
@@ -84,7 +84,7 @@ class Class_Avis extends Storm_Model_Abstract {
 																										'id_cms' => $id_news]);
 
 			if (!$avis)
-				$avis = Class_Avis::newInstance(['id_user' => $id_user,
+				$avis = Class_Avis::getLoader()->newInstance(['id_user' => $id_user,
 																				 'id_notice' => '',
 																				 'id_cms' => $id_news,
 																				 'date_avis' => $this->_today,
diff --git a/library/ZendAfi/View/Helper/AvisCms.php b/library/ZendAfi/View/Helper/AvisCms.php
index 92123b55a14..8024f82fb8a 100644
--- a/library/ZendAfi/View/Helper/AvisCms.php
+++ b/library/ZendAfi/View/Helper/AvisCms.php
@@ -25,12 +25,10 @@ class ZendAfi_View_Helper_AvisCms extends Zend_View_Helper_HtmlElement {
 
 	
 	function rendHtmlBlockAvis($article)	{
-		$info_bib = $this->rendInfoCmsAvis($article, 1);
-		$info_abo = $this->rendInfoCmsAvis($article, 0);
-
 		$nb_avis = 0;
-		if ($rank = $article->getRank())
-			$nb_avis = $rank->getNbAvisTotal();
+		if (!$rank = $article->getRank())
+			$rank = Class_CmsRank::newInstance();
+		$nb_avis = $rank->getNbAvisTotal();
 
 		$txt_nb_avis = ($nb_avis == 0) ?"&nbsp;Aucun avis" : "&nbsp;Avis (".$nb_avis.")";
 		$id_news = $article->getId();
@@ -39,8 +37,10 @@ class ZendAfi_View_Helper_AvisCms extends Zend_View_Helper_HtmlElement {
 		$html.='<br />';
 		$html.='<a href="#" onclick="javascript:fonction_abonne(\''.Class_Users::currentUserId().'\',\'/opac/abonne/cmsavis?id='.$id_news.'\')">&raquo; Donner ou modifier votre avis</a>';
 		$html.='<ul class="notice_info">';
-		$html.='<li>'.$info_bib["NOTE"].' <a href="#" onclick="showAvis('.$id_news.',\'bib\');return false;">Avis de bibliothécaires</a> '.$info_bib["AVIS"].'</li>';
-		$html.='<li>'.$info_abo["NOTE"].' <a href="#" onclick="showAvis('.$id_news.',\'abo\');return false;">Avis de lecteurs du portail</a> '.$info_abo["AVIS"].'</li>';
+		if ($rank->getBibNombreAvis())
+				$html.='<li>'.$this->view->noteImg($rank->getBibNote()).' <a href="#" onclick="showAvis('.$id_news.',\'bib\');return false;">Avis de bibliothécaires</a> '.$this->formatNoteLabel($rank->getBibNombreAvis()).'</li>';
+		if ($rank->getAbonNombreAvis())
+				$html.='<li>'.$this->view->noteImg($rank->getAbonNote()).' <a href="#" onclick="showAvis('.$id_news.',\'abo\');return false;">Avis de lecteurs du portail</a> '.$this->formatNoteLabel($rank->getAbonNombreAvis()).'</li>';
 		$html.='</ul>';
         
 		$view = (getVar('MODO_AVIS_BIBLIO') == 1) ? 1 : "";
@@ -71,41 +71,17 @@ class ZendAfi_View_Helper_AvisCms extends Zend_View_Helper_HtmlElement {
 		$html.='<div style="width:100%;background:transparent url('.URL_IMG.'box/menu/separ.gif) repeat-x scroll center bottom">&nbsp;</div>';
         
 		return($html);
+	}	
+
+	public function formatNoteLabel($note) {
+		return $this->view->_plural($note,
+																'(aucune évaluation)',
+																'(%d évaluation)',
+																'(%d évaluations)',
+																$note);
 	}
 
 
-	public function rendInfoCmsAvis($article, $abon_ou_bib) {
-		if (!$rank = $article->getRank())
-			return array('NOTE' => 0, 'AVIS' => 0, 'ABON_NOMBRE_AVIS' => 0, 'BIB_NOMBRE_AVIS' => 0);
-
-		$abon_nb_avis = $rank->getAbonNombreAvis();
-		$bib_nb_avis = $rank->getBibNombreAvis();
-		
-		if($abon_ou_bib == 0)	{
-				if ($abon_nb_avis == 0 || $abon_nb_avis == null) $nb_eva = "(aucune évaluation)";
-				elseif($abon_nb_avis == 1) $nb_eva = "(1 évaluation)";
-				elseif($abon_nb_avis > 1) $nb_eva = "(".$abon_nb_avis." évaluations)";
-            
-			$note = $rank->getAbonNote();
-		}	else {
-				if ($bib_nb_avis == 0 || $bib_nb_avis == null) $nb_eva = "(aucune évaluation)";
-				elseif($bib_nb_avis == 1) $nb_eva = "(1 évaluation)";
-				elseif($bib_nb_avis > 1) $nb_eva = "(".$bib_nb_avis." évaluations)";
-
-			$note = $rank->getBibNote();
-		}
-
-		$note_r = str_replace('.','-',$note);
-		$note_r = str_replace('-0','',$note_r);
-		if ($note_r == '') $note_r = "0";
-		$img = '<img src="'.URL_ADMIN_IMG.'stars/stars-'.$note_r.'.gif"  alt="note:'.$note.'" border="0"/>';
-		$info["NOTE"] = $img;
-
-		$info["AVIS"] = $nb_eva;
-		return($info);
-	}
-    
-
 	function getCmsAvisBiblio($article, $statut = "")	{
 		return $this->getCmsAvis($article, Trait_Avis::$AVIS_BIBLIO, $statut);
 	}
diff --git a/tests/application/modules/opac/controllers/AbonneControllerCmsAvisTest.php b/tests/application/modules/opac/controllers/AbonneControllerCmsAvisTest.php
index 31697ceef17..012274cbe3d 100644
--- a/tests/application/modules/opac/controllers/AbonneControllerCmsAvisTest.php
+++ b/tests/application/modules/opac/controllers/AbonneControllerCmsAvisTest.php
@@ -67,6 +67,13 @@ class AbonneControllerCmsAvisViewArticleWithCommentTest extends AbonneController
 																	'login' => 'max',
 																	 'password' => 'maxLaMenace']);
 
+		$this->fixture('Class_CmsRank', ['id' => 3,
+																		'id_cms' => 1,
+																		'abon_nombre_avis' => 1,
+																		'abon_note' => '4.0',
+																		'bib_nombre_avis' => 0,
+																		'bib_note' => '0.0']);
+
 		$this->fixture('Class_Avis' , ['id' => 7,
 																	'id_user' => 112,
 																	'id_cms' => '1',
@@ -81,19 +88,19 @@ class AbonneControllerCmsAvisViewArticleWithCommentTest extends AbonneController
 
 	/** @test */
 	public function ArticleJeSuisCharlieShouldHaveLinkToAccessBorrowersComments() {
-		$this->assertXPathContentContains('//a[contains(@onclick, "showAvis(1")]', 'Avis de lecteur du portail');
+		$this->assertXPathContentContains('//a[contains(@onclick, "showAvis(1")]', 'Avis de lecteurs du portail');
 	}
 
 
 	/** @test */
 	public function ArticleJeSuisCharlieShouldHaveOneBorrowersComments() {
-		$this->assertXPathContentContains('//div[@id="avis_1"]/ul[@class="notice_info"]/li[1]', "</a>\n1");
+		$this->assertXPathContentContains('//div[@id="avis_1"]/ul[@class="notice_info"]/li[1]', "(1 évaluation)");
 	}
 
 
 	/** @test */
 	public function ArticleJeSuisCharlieShouldHaveFourStarsImage() {
-		$this->assertXPathContentContains('//div[@id="avis_1"]/ul[@class="notice_info"]/li[1]', "<img class=\"note_critique note-4");
+		$this->assertXPath('//div[@id="avis_1"]/ul[@class="notice_info"]/li[1]/img[contains(@src, "stars-4.gif")]');
 	}
 }
 
-- 
GitLab