From 0a4c7bee7c2f1631ed27381525caed9b95f008e7 Mon Sep 17 00:00:00 2001
From: Henri-Damien LAURENT <hdlaurent@afi-sa.net>
Date: Wed, 16 Aug 2023 12:14:04 +0000
Subject: [PATCH] hotline#174979 : Cyberlibris : adding Poster support

---
 VERSIONS_HOTLINE/174979                          |  1 +
 library/Class/Album.php                          |  9 +++++++--
 .../DublinCoreParser/ForRessourceNumerique.php   |  9 +++++++--
 .../Cyberlibris/Service/Parser.php               | 16 ++++++++++------
 .../Cyberlibris/tests/CyberlibrisTest.php        |  1 +
 5 files changed, 26 insertions(+), 10 deletions(-)
 create mode 100644 VERSIONS_HOTLINE/174979

diff --git a/VERSIONS_HOTLINE/174979 b/VERSIONS_HOTLINE/174979
new file mode 100644
index 00000000000..64c39c1775c
--- /dev/null
+++ b/VERSIONS_HOTLINE/174979
@@ -0,0 +1 @@
+ - correctif #174979 : Cyberlibris : Prise en compte des vignettes de notices Cyberlibris lors du moissonage
\ No newline at end of file
diff --git a/library/Class/Album.php b/library/Class/Album.php
index f77de423786..2a0822719e2 100644
--- a/library/Class/Album.php
+++ b/library/Class/Album.php
@@ -1426,10 +1426,15 @@ class Class_Album extends Storm_Model_Abstract {
       if (!isset($unimarc_value['x'])
           || !isset($unimarc_value['a'])
           || $field !== $unimarc_value['x']
-          || '' == trim($unimarc_value['a']))
+          || (is_string($unimarc_value['a'])
+              && '' == trim($unimarc_value['a'])))
         continue;
 
-      $values[] = $unimarc_value['a'];
+      if (is_string($unimarc_value['a']))
+        $values[] = $unimarc_value['a'];
+
+      if (is_array($unimarc_value['a']))
+        $values = array_merge($values,$unimarc_value['a']);
     }
 
     return $values;
diff --git a/library/Class/WebService/OAI/DublinCoreParser/ForRessourceNumerique.php b/library/Class/WebService/OAI/DublinCoreParser/ForRessourceNumerique.php
index e41a87947e0..1de1338ceb7 100644
--- a/library/Class/WebService/OAI/DublinCoreParser/ForRessourceNumerique.php
+++ b/library/Class/WebService/OAI/DublinCoreParser/ForRessourceNumerique.php
@@ -94,8 +94,13 @@ class Class_WebService_OAI_DublinCoreParser_ForRessourceNumerique
     foreach($this->_record['matiere'] as $matiere)
       $resource->addMatiere($matiere);
 
-    if ($relation = $this->_record['relation'])
-      $resource->setExternalUri($relation[0]);
+    foreach (($this->_record['relation'] ?? []) as $relation)
+      $resource->getExternalUri()
+        ? $resource->addPoster($relation)
+        : $resource->setExternalUri($relation);
+
+    foreach (($this->_record['posters'] ?? []) as $poster)
+      $resource->addPoster($poster);
 
     return parent::endRecord($data);
   }
diff --git a/library/digital_resources/Cyberlibris/Service/Parser.php b/library/digital_resources/Cyberlibris/Service/Parser.php
index 9fe98884618..e3d139fc802 100644
--- a/library/digital_resources/Cyberlibris/Service/Parser.php
+++ b/library/digital_resources/Cyberlibris/Service/Parser.php
@@ -23,18 +23,22 @@
 class Cyberlibris_Service_Parser
   extends Class_WebService_OAI_DublinCoreParser_ForRessourceNumerique {
   public function enddc_identifier($data) {
-    if (!preg_match('|/book/([^/?]+)|i', $data, $matches))
-      return;
+    if (preg_match('|/book/([^/?]+)|i', $data, $matches)){
+      $this->_record['id_oai'] = $matches[1];
+      $this->_record['relation'][] = $data;
+    }
+
+    if (preg_match('|^([0-9]+)$|i', $data, $matches))
+      $this->_record['ean'] = $matches[1];
 
-    $this->_record['id_oai'] = $matches[1];
-    $this->_record['relation'][] = $data;
+    if (preg_match('|^(https://static2.cyberlibris.com/.*.jpg)$|i', trim($data), $matches))
+      $this->_record['posters'][] = $matches[1];
   }
 
 
   public function end_identifier($data) {
     if (!preg_match('|oai:cyberlibris.fr:([^/?]+)|i', $data, $matches))
       return;
-
     $this->_record['ean'] = $matches[1];
   }
-}
\ No newline at end of file
+}
diff --git a/library/digital_resources/Cyberlibris/tests/CyberlibrisTest.php b/library/digital_resources/Cyberlibris/tests/CyberlibrisTest.php
index 7b11db80093..7870069d727 100644
--- a/library/digital_resources/Cyberlibris/tests/CyberlibrisTest.php
+++ b/library/digital_resources/Cyberlibris/tests/CyberlibrisTest.php
@@ -331,6 +331,7 @@ de la création d'entreprise avec, pour chacune d'elles, les pièges et écueils
             ['first_editor', 'Maxima'],
             ['main_author_name', 'Sens, René'],
             ['external_uri', 'https://www.bibliovox.com/book/10045152'],
+            ['poster', 'https://static2.cyberlibris.com/books_upload/136pix/2840013444.jpg'],
     ];
   }
 
-- 
GitLab