From 9cea6703e01e8f5e8dd9a55840f2d23dc5c22455 Mon Sep 17 00:00:00 2001
From: gloas <gloas@afi-sa.fr>
Date: Tue, 17 Oct 2017 10:56:23 +0200
Subject: [PATCH] dev #66057 fix test failire + add const for no url from
 webservice = NO

---
 .../admin/controllers/SystemeController.php   |  4 +-
 .../classes/NoticeIntegrationDedupTest.php    |  4 +-
 library/Class/Catalogue.php                   |  6 +-
 library/Class/Notice.php                      |  8 +--
 library/Class/Notice/DublinCoreVisitor.php    | 14 ++--
 .../Notice/Thumbnail/ProviderAbstract.php     |  2 +-
 library/Class/WebService/Vignette.php         |  2 +
 .../ZendAfi/View/Helper/Notice/Vignette.php   | 70 +++++++++++--------
 .../controllers/AbonneControllerPretsTest.php |  2 +-
 9 files changed, 63 insertions(+), 49 deletions(-)

diff --git a/application/modules/admin/controllers/SystemeController.php b/application/modules/admin/controllers/SystemeController.php
index edaa84c317d..cfac3df4724 100644
--- a/application/modules/admin/controllers/SystemeController.php
+++ b/application/modules/admin/controllers/SystemeController.php
@@ -42,7 +42,7 @@ class Admin_SystemeController extends Zend_Controller_Action {
       return $this;
 
     Zend_Registry::get('sql')
-      ->execute("update notices set url_vignette='',url_image='' where url_vignette='NO'");
+      ->execute("update notices set url_vignette='',url_image='' where url_vignette='" . Class_WebService_Vignette::NO_DATA . "'");
   }
 
 
@@ -65,7 +65,7 @@ class Admin_SystemeController extends Zend_Controller_Action {
 
     $this->deleteUnknownImages();
     $this->view->nb_notices = Class_Notice::count();
-    $this->view->nb_pas_reconnu = Class_Notice::countBy(['url_vignette' =>'NO']);
+    $this->view->nb_pas_reconnu = Class_Notice::countBy(['url_vignette' => Class_WebService_Vignette::NO_DATA]);
     $this->view->nb_reconnu = $this->view->nb_notices  - $this->view->nb_pas_reconnu - Class_Notice::countBy(['url_vignette' => '']);
   }
 
diff --git a/cosmogramme/tests/php/classes/NoticeIntegrationDedupTest.php b/cosmogramme/tests/php/classes/NoticeIntegrationDedupTest.php
index 173896368a1..8f3b325827a 100644
--- a/cosmogramme/tests/php/classes/NoticeIntegrationDedupTest.php
+++ b/cosmogramme/tests/php/classes/NoticeIntegrationDedupTest.php
@@ -161,8 +161,8 @@ class NoticeIntegrationDedupCaliceWithoutIsbnTest extends NoticeIntegrationTestC
                     'qualite' => 10,
                     'date_creation' => '2015-05-02 00:00:00',
                     'date_maj' => '2015-09-13 13:22:53',
-                    'url_vignette' => 'NO',
-                    'url_image' => 'NO']);
+                    'url_vignette' => Class_WebService_Vignette::NO_DATA,
+                    'url_image' => Class_WebService_Vignette::NO_DATA]);
 
 		VariableCache::getInstance()
 		  ->setValeurCache(['filtrer_fulltext' => 1,
diff --git a/library/Class/Catalogue.php b/library/Class/Catalogue.php
index 5f52cd253d0..f379463ae8b 100644
--- a/library/Class/Catalogue.php
+++ b/library/Class/Catalogue.php
@@ -320,7 +320,7 @@ class CatalogueLoader extends Storm_Model_Loader {
 
     if(isset($preferences['only_img']) && ($preferences['only_img'] == 1)
        && (($catalogue && Class_Catalogue::getLoader()->hasFilters($preferences['id_catalogue'])) || !$catalogue))
-      $conditions[] = "url_vignette > '' and url_vignette != 'NO'";
+      $conditions[] = "url_vignette > '' and url_vignette != '" . Class_WebService_Vignette::NO_DATA . "'";
 
     $join = (isset($preferences['avec_avis']) && ($preferences['avec_avis'] == 1))
       ? ' INNER JOIN notices_avis ON notices.clef_oeuvre=notices_avis.clef_oeuvre '
@@ -432,7 +432,7 @@ class CatalogueLoader extends Storm_Model_Loader {
 
     $condition = (array_isset("only_img", $preferences)
                   && $preferences["only_img"] == 1)
-      ? " and url_vignette > '' and url_vignette != 'NO' "
+      ? " and url_vignette > '' and url_vignette != '" . Class_WebService_Vignette::NO_DATA . "'"
       : '';
 
     $join = (array_isset("avec_avis", $preferences) && $preferences["avec_avis"] == 1)
@@ -806,7 +806,7 @@ class Class_Catalogue extends Storm_Model_Abstract {
     else
       $req.=" where ";
 
-    $req .= "url_vignette > '' and url_vignette != 'NO'";
+    $req .= "url_vignette > '' and url_vignette != '" . Class_WebService_Vignette::NO_DATA . "'";
     $ret["avec_vignettes"] = fetchOne($req);
     return $ret;
   }
diff --git a/library/Class/Notice.php b/library/Class/Notice.php
index d33fb36f2f0..08c029648c1 100644
--- a/library/Class/Notice.php
+++ b/library/Class/Notice.php
@@ -396,7 +396,7 @@ class Class_Notice extends Storm_Model_Abstract {
 	public function fetchUrlVignette() {
 		$url = $this->getUrlVignette();
 
-    if ($url == 'NO')
+    if ($url == Class_WebService_Vignette::NO_DATA)
       return $this->_rawThumbnailUrl();
 
     return $url
@@ -413,7 +413,7 @@ class Class_Notice extends Storm_Model_Abstract {
       $url = $this->getUrlVignette();
     }
 
-    return ($url=='NO')
+    return ($url == Class_WebService_Vignette::NO_DATA)
       ? $this->_rawThumbnailUrl()
       : $ws_vignette->writeImageCache($this, $url);
   }
@@ -439,7 +439,7 @@ class Class_Notice extends Storm_Model_Abstract {
       $url = $this->getUrlImage();
     }
 
-    if ($url=='NO')
+    if ($url == Class_WebService_Vignette::NO_DATA)
       return $this->fetchUrlLocalVignette();
 
     return $url;
@@ -455,7 +455,7 @@ class Class_Notice extends Storm_Model_Abstract {
     } catch (Exception $e)  {
       return false;
     }
-    $has_vignette = (!empty($url) && ($url != 'NO'));
+    $has_vignette = (!empty($url) && ($url != Class_WebService_Vignette::NO_DATA));
     return $has_vignette;
   }
 
diff --git a/library/Class/Notice/DublinCoreVisitor.php b/library/Class/Notice/DublinCoreVisitor.php
index 51421e4e0fa..0e22ceee810 100644
--- a/library/Class/Notice/DublinCoreVisitor.php
+++ b/library/Class/Notice/DublinCoreVisitor.php
@@ -16,7 +16,7 @@
  *
  * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
  * along with BOKEH; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA 
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
  */
 
 class Class_Notice_DublinCoreVisitor {
@@ -65,7 +65,7 @@ class Class_Notice_DublinCoreVisitor {
   public function visitTitres($titres) {
     if (!is_array($titres) || empty($titres))
       return;
-    
+
     $this->_xml .= $this->_builder->title($this->cdata(strip_tags(implode('. ', $titres))));
   }
 
@@ -102,7 +102,7 @@ class Class_Notice_DublinCoreVisitor {
 
 
   public function visitResume($resume) {
-    if ($resume) 
+    if ($resume)
       $this->_xml .= $this->_builder->description($this->cdata(html_entity_decode(strip_tags($resume))));
   }
 
@@ -130,7 +130,7 @@ class Class_Notice_DublinCoreVisitor {
 
 
   public function visitLangues($langues) {
-    if (!is_array($langues)) 
+    if (!is_array($langues))
       return;
 
     foreach ($langues as $langue)
@@ -145,7 +145,7 @@ class Class_Notice_DublinCoreVisitor {
     if ($type = Class_TypeDoc::find($id))
       $this->_xml .= $this->_builder->type($this->cdata($type->getLabel()));
 
-    if (in_array($id, [Class_TypeDoc::LIVRE_NUM, Class_TypeDoc::DIAPORAMA])) 
+    if (in_array($id, [Class_TypeDoc::LIVRE_NUM, Class_TypeDoc::DIAPORAMA]))
       $this->visitFormat('image/jpeg');
   }
 
@@ -167,7 +167,7 @@ class Class_Notice_DublinCoreVisitor {
       $this->visitFormat($data);
   }
 
-  
+
   public function visitFormat($data) {
     if (!$data)
       return;
@@ -176,7 +176,7 @@ class Class_Notice_DublinCoreVisitor {
 
 
   public function visitVignette($url) {
-    if (!$url or 'NO' == $url )
+    if (!$url or Class_WebService_Vignette::NO_DATA == $url )
       return;
 
     $this->_xml .= $this->_builder->relation($this->cdata('vignette : ' . $url));
diff --git a/library/Class/Notice/Thumbnail/ProviderAbstract.php b/library/Class/Notice/Thumbnail/ProviderAbstract.php
index 33af12f8bff..12c237542d8 100644
--- a/library/Class/Notice/Thumbnail/ProviderAbstract.php
+++ b/library/Class/Notice/Thumbnail/ProviderAbstract.php
@@ -50,7 +50,7 @@ abstract class Class_Notice_Thumbnail_ProviderAbstract {
 
 
   protected function noWebThumbRecord() {
-    return $this->_setRecordUrls('NO');
+    return $this->_setRecordUrls(Class_WebService_Vignette::NO_DATA);
   }
 
 
diff --git a/library/Class/WebService/Vignette.php b/library/Class/WebService/Vignette.php
index aea3a993b17..62fdb6f830c 100644
--- a/library/Class/WebService/Vignette.php
+++ b/library/Class/WebService/Vignette.php
@@ -20,6 +20,8 @@
  */
 
 class Class_WebService_Vignette extends Class_WebService_Abstract {
+  const NO_DATA = 'NO';
+
   protected static $_file_system;
 
   /** @category testing */
diff --git a/library/ZendAfi/View/Helper/Notice/Vignette.php b/library/ZendAfi/View/Helper/Notice/Vignette.php
index 0d2d7668356..ec97f638975 100644
--- a/library/ZendAfi/View/Helper/Notice/Vignette.php
+++ b/library/ZendAfi/View/Helper/Notice/Vignette.php
@@ -46,25 +46,32 @@ class ZendAfi_View_Helper_Notice_Vignette extends Zend_View_Helper_HtmlElement {
 abstract class ZendAfi_View_Helper_Notice_VignetteStrategy {
   use Trait_Translator;
 
-  protected $_view, $_record, $_preferences;
+  protected
+    $_view,
+    $_record,
+    $_preferences,
+    $_label;
 
   public function render($view, $record, $preferences) {
     $this->view = $view;
     $this->_record = $record;
     $this->_preferences = $preferences;
+    $this->_label = $this->_('Afficher "%s"', $record->getTitrePrincipal());
 
-    $this->_ensureUrl();
+    $this->_initImagesUrls();
 
-    return 'NO' == $this->_record->getUrlVignette()
+    return Class_WebService_Vignette::NO_DATA == $this->_getUrl()
       ? $this->_renderNoThumbnail()
       : $this->_renderThumbnail();
   }
 
 
-  protected function _ensureUrl() {
-    return $this->_record->hasUrlVignette()
-      ? $this->_record->getUrlVignette()
-      : $this->_record->fetchUrlVignette();
+  protected function _initImagesUrls() {
+    if(!$this->_record->hasUrlVignette())
+      $this->_record->fetchUrlVignette();
+
+    if(!$this->_record->hasUrlImage())
+      $this->_record->fetchUrlImage();
   }
 
 
@@ -73,13 +80,16 @@ abstract class ZendAfi_View_Helper_Notice_VignetteStrategy {
   }
 
 
-  abstract protected function _renderThumbnail();
-  abstract protected function _fetchUrlImage();
+  protected function _renderThumbnail() {
+    return $this->view->tagAnchor($this->view->urlNotice($this->_record,
+                                                         $this->_preferences),
+                                  $this->_renderImage(),
+                                  ['title' => $this->_label]);
+  }
 
 
   protected function _renderImage() {
-    $url = $this->_fetchUrlImage();
-    return $this->view->tagImg($this->view->absoluteUrl($url),
+    return $this->view->tagImg($this->view->absoluteUrl($this->_fetchUrl()),
                                array_merge(['alt' => $this->_record->getTitrePrincipal()],
                                            $this->_extraThumbnailParams()));
   }
@@ -88,6 +98,10 @@ abstract class ZendAfi_View_Helper_Notice_VignetteStrategy {
   protected function _extraThumbnailParams() {
     return [];
   }
+
+
+  abstract protected function _getUrl();
+  abstract protected function _fetchUrl();
 }
 
 
@@ -95,21 +109,6 @@ abstract class ZendAfi_View_Helper_Notice_VignetteStrategy {
 
 class ZendAfi_View_Helper_Notice_VignetteStrategyResult
   extends ZendAfi_View_Helper_Notice_VignetteStrategy {
-  protected $_label;
-
-  public function render($view, $record, $preferences) {
-    $this->_label = $this->_('Afficher "%s"', $record->getTitrePrincipal());
-
-    return parent::render($view, $record, $preferences);
-  }
-
-
-  protected function _renderThumbnail() {
-    return $this->view->tagAnchor($this->view->urlNotice($this->_record,
-                                                         $this->_preferences),
-                                  $this->_renderImage(),
-                                  ['title' => $this->_label]);
-  }
 
 
   protected function _extraThumbnailParams() {
@@ -118,7 +117,12 @@ class ZendAfi_View_Helper_Notice_VignetteStrategyResult
   }
 
 
-  protected function _fetchUrlImage() {
+  protected function _getUrl() {
+    return $this->_record->getUrlVignette();
+  }
+
+
+  protected function _fetchUrl() {
     return $this->_record->fetchUrlVignette();
   }
 }
@@ -130,11 +134,14 @@ class ZendAfi_View_Helper_Notice_VignetteStrategyView
   extends ZendAfi_View_Helper_Notice_VignetteStrategy {
 
   protected function _renderThumbnail() {
+    if(Class_WebService_Vignette::NO_DATA == $this->_record->getUrlImage())
+      return parent::_renderThumbnail();
+
     Class_ScriptLoader::getInstance()
       ->loadButterflyLightbox()
       ->addJQueryReady('$("a#vignette").butterfly({closeButton:false});');
 
-    return $this->view->tagAnchor($this->view->absoluteUrl($this->_record->getUrlImage()),
+    return $this->view->tagAnchor($this->view->absoluteUrl($this->_fetchUrl()),
                                   $this->_renderImage(),
                                   ['id' => 'vignette',
                                    'title' => htmlentities($this->_record->getTitrePrincipal())]);
@@ -146,7 +153,12 @@ class ZendAfi_View_Helper_Notice_VignetteStrategyView
   }
 
 
-  protected function _fetchUrlImage() {
+  protected function _fetchUrl() {
     return $this->_record->fetchUrlImage();
   }
+
+
+  protected function _getUrl() {
+    return $this->_fetchUrl();
+  }
 }
\ No newline at end of file
diff --git a/tests/application/modules/opac/controllers/AbonneControllerPretsTest.php b/tests/application/modules/opac/controllers/AbonneControllerPretsTest.php
index 69d27d595e3..84fa560a330 100644
--- a/tests/application/modules/opac/controllers/AbonneControllerPretsTest.php
+++ b/tests/application/modules/opac/controllers/AbonneControllerPretsTest.php
@@ -972,7 +972,7 @@ class AbonneControllerPretsPeriodicalTitleTest extends AbstractAbonneControllerP
 
   /** @test */
   public function imageForPetitsMainsShouldBePresent() {
-    $this->assertXPath('//td//a/img[contains(@src, "/recherche/vignette/clef/86b19239fb14b378dfde09a3cc83ecc0/id_notice/889")]');
+    $this->assertXPath('//td//a/img[contains(@src, "/recherche/raw-thumbnail/id/889")]');
   }
 
 
-- 
GitLab