From b8e5867806fda4d6ff12a0e61e3261e38d293207 Mon Sep 17 00:00:00 2001
From: Arthur Suzuki <arthur.suzuki@biblibre.com>
Date: Wed, 4 May 2022 15:32:29 +0200
Subject: [PATCH] hotline#155481 : fix ISBN regex to handle different formats

---
 VERSIONS_HOTLINE/155481                                      | 1 +
 library/Class/Cosmogramme/Integration/Record/DublinCore.php  | 4 ++--
 .../Cosmogramme/Integration/PhaseNoticeDublinCoreTest.php    | 5 ++++-
 .../Class/Cosmogramme/Integration/dublinCoreResults_all.xml  | 2 ++
 4 files changed, 9 insertions(+), 3 deletions(-)
 create mode 100644 VERSIONS_HOTLINE/155481

diff --git a/VERSIONS_HOTLINE/155481 b/VERSIONS_HOTLINE/155481
new file mode 100644
index 00000000000..071aaebcdcf
--- /dev/null
+++ b/VERSIONS_HOTLINE/155481
@@ -0,0 +1 @@
+ - correctif #155841 : Cosmogramme : Lors d'un import via un flux OAI en DublinCore, les ISSN et ISBN sont correctement detectés quel que soit leur format (avec ou sans tirets).
\ No newline at end of file
diff --git a/library/Class/Cosmogramme/Integration/Record/DublinCore.php b/library/Class/Cosmogramme/Integration/Record/DublinCore.php
index 39f8a499cc3..7faea0a8c15 100644
--- a/library/Class/Cosmogramme/Integration/Record/DublinCore.php
+++ b/library/Class/Cosmogramme/Integration/Record/DublinCore.php
@@ -81,11 +81,11 @@ class Class_Cosmogramme_Integration_Record_DublinCore extends notice_unimarc {
                                      Class_Indexation_PseudoNotice_UnimarcVisitor $unimarc_visitor)
   {
     $matches=[];
-    if (preg_match('/URN:ISBN[^\d]+((97(8|9))?\d{9}(\d|X))/',$url,$matches)) {
+    if (preg_match('/URN:ISBN :([0-9\-X]+)/',$url,$matches)) {
       $unimarc_visitor->visitIsbn($matches[1]);
       return $unimarc_visitor;
     }
-    if (preg_match('/ISSN[^\d]+([0-9]{4}-[0-9]{4})/',$url,$matches)){
+    if (preg_match('/URN:ISSN :([0-9\-]+)/',$url,$matches)){
       $unimarc_visitor->visitIssn($matches[1]);
       return $unimarc_visitor;
     }
diff --git a/tests/library/Class/Cosmogramme/Integration/PhaseNoticeDublinCoreTest.php b/tests/library/Class/Cosmogramme/Integration/PhaseNoticeDublinCoreTest.php
index 47e32e5968a..b80ffc09fa0 100644
--- a/tests/library/Class/Cosmogramme/Integration/PhaseNoticeDublinCoreTest.php
+++ b/tests/library/Class/Cosmogramme/Integration/PhaseNoticeDublinCoreTest.php
@@ -190,7 +190,10 @@ class PhaseNoticeDublinCoreTest extends AbstractPhaseNoticeDublinCoreTestCase {
   /** @test */
   public function firstRecordISBNShouldBe9782955314357() {
     $isbn = Class_Notice::find(1)->get_subfield('010','a');
-    $this->assertContains('9782955314357',$isbn);
+    $this->assertEquals(['9782955314357',
+                         '978295531435X',
+                         '978-2-955314-35-7'],
+                        $isbn);
   }
 
 
diff --git a/tests/library/Class/Cosmogramme/Integration/dublinCoreResults_all.xml b/tests/library/Class/Cosmogramme/Integration/dublinCoreResults_all.xml
index 5208a832c27..b9e59798ae7 100644
--- a/tests/library/Class/Cosmogramme/Integration/dublinCoreResults_all.xml
+++ b/tests/library/Class/Cosmogramme/Integration/dublinCoreResults_all.xml
@@ -2,6 +2,8 @@
 <record><header><identifier>oai:bnf.fr:gallica/ark:/12148/btv1b55006135m</identifier><datestamp>2012-09-21</datestamp><setSpec>gallica:typedoc:cartes:atlas</setSpec></header><metadata><oai_dc:dc xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd">
 <dc:identifier>http://gallica.bnf.fr/ark:/12148/btv1b55006135m</dc:identifier>
 <dc:identifier>URN:ISBN :9782955314357</dc:identifier>
+<dc:identifier>URN:ISBN :978295531435X</dc:identifier>
+<dc:identifier>URN:ISBN :978-2-955314-35-7</dc:identifier>
 <dc:identifier>URN:ISSN :1234-6789</dc:identifier>
 <dc:identifier>Ceci n'est pas une URL</dc:identifier>
 <dc:identifier>https://biblio.nantes.archi.fr/cgi-bin/koha/opac-detail.pl?biblionumber=46829</dc:identifier>
-- 
GitLab