Skip to content
Snippets Groups Projects
Commit 57101960 authored by Arthur Suzuki's avatar Arthur Suzuki
Browse files

Merge branch...

Merge branch 'hotline#155841_archires_import_oai_dc_les_identifiers_ne_sont_pas_tous_recuperes' into 'master'

hotline#155841 : dublicore identifiers may contains isbn or issn. those are...

See merge request !4438
parents 5b6bd539 3b6a258f
1 merge request!4438hotline#155841 : dublicore identifiers may contains isbn or issn. those are...
Pipeline #17284 passed with stage
in 41 minutes and 57 seconds
- correctif #155841 : Cosmogramme : Lors d'un import via un flux OAI en DublinCore, les identifiants multiples sont bien pris en comptes. Les ISSN et ISBN sont correctement detectés.
\ No newline at end of file
......@@ -68,13 +68,31 @@ class Class_Cosmogramme_Integration_Record_DublinCore extends notice_unimarc {
->visitItems($this->_getItem())
->visitAuteur($authors);
return $this->_achieveUnimarc($unimarc_visitor);
$this->_acceptVisitorForIdentifier($this->_datas['id_oai'], $unimarc_visitor);
foreach($this->_datas['other_ids'] as $url)
$this->_acceptVisitorForIdentifier($url, $unimarc_visitor);
return $unimarc_visitor;
}
protected function _achieveUnimarc($unimarc_visitor) {
return $unimarc_visitor
->visitLabelledUrl($this->_('Consulter la ressource en ligne'), $this->_datas['id_oai']);
protected function _acceptVisitorForIdentifier(string $url,
Class_Indexation_PseudoNotice_UnimarcVisitor $unimarc_visitor)
{
$matches=[];
if (preg_match('/URN:ISBN[^\d]+((97(8|9))?\d{9}(\d|X))/',$url,$matches)) {
$unimarc_visitor->visitIsbn($matches[1]);
return $unimarc_visitor;
}
if (preg_match('/ISSN[^\d]+([0-9]{4}-[0-9]{4})/',$url,$matches)){
$unimarc_visitor->visitIssn($matches[1]);
return $unimarc_visitor;
}
if (Class_Url::isAnUrl($url))
$unimarc_visitor->visitLabelledUrl($this->_('Consulter la ressource en ligne'), $url);
return $unimarc_visitor;
}
......
......@@ -53,6 +53,16 @@ class Class_Indexation_PseudoNotice_UnimarcVisitor extends Class_Indexation_Pseu
}
public function visitIsbn(string $isbn) {
$this->addUnimarcField('010', ' ', 'a' . $isbn);
}
public function visitIssn(string $issn) {
$this->addUnimarcField('011', ' ', 'b' . $issn);
}
protected function _rendDate($date) {
if (!$date)
return false;
......
......@@ -45,6 +45,7 @@ class Class_WebService_OAI_DublinCoreParser extends Class_WebService_OAI_ParserA
public function newRecord($attributes) {
return $this->_record = ['record_id',
'id_oai' => '',
'other_ids' => [],
'titre' => '',
'date' => '',
'auteur' => [],
......@@ -62,7 +63,12 @@ class Class_WebService_OAI_DublinCoreParser extends Class_WebService_OAI_ParserA
public function enddc_identifier($data) {
$this->_record['id_oai'] = $data;
if(!$this->_record['id_oai']) {
$this->_record['id_oai'] = $data;
return;
}
$this->_record['other_ids'][] = $data;
}
......
......@@ -187,6 +187,37 @@ class PhaseNoticeDublinCoreTest extends AbstractPhaseNoticeDublinCoreTestCase {
}
/** @test */
public function firstRecordISBNShouldBe9782955314357() {
$isbn = Class_Notice::find(1)->get_subfield('010','a');
$this->assertContains('9782955314357',$isbn);
}
/** @test */
public function firstRecordISSNShouldBe1234dash6789() {
$isbn = Class_Notice::find(1)->get_subfield('011','b');
$this->assertContains('1234-6789',$isbn);
}
/** @test */
public function firstRecord856UShouldNotContainsCeciNEstPasUneURL() {
$field856u = Class_Notice::find(1)->get_subfield('856','u');
$this->assertNotContains('Ceci n\'est pas une URL',
$field856u);
}
/** @test */
public function firstRecord856uShouldContainsTwoLinks() {
$field856u = Class_Notice::find(1)->get_subfield('856','u');
$this->assertEquals(['http://gallica.bnf.fr/ark:/12148/btv1b55006135m',
'https://biblio.nantes.archi.fr/cgi-bin/koha/opac-detail.pl?biblionumber=46829'],
$field856u);
}
/**
* @test
* @depends totalNumberOfRecordsFromOAIShouldBeNine
......
<?xml version="1.0" encoding="UTF-8" ?><OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd"><responseDate>2016-04-06T15:37:13Z</responseDate><request metadataPrefix="oai_dc" verb="ListRecords" set="gallica:typedoc:cartes:atlas">http://oai.bnf.fr/oai2/OAIHandler</request><ListRecords>
<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: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>
<dc:title>Citta, fortezze, isole, e porti principali dell'Europa, in planta, et in elevatione, descritte, e publicate ad uso dell'Accademia Cosmografica degli Argonauti / Dal Padre Maestro Coronelli, ...</dc:title>
<dc:creator>Coronelli, Vincenzo Maria (1650-1718). Cartographe</dc:creator>
<dc:date>1689</dc:date>
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment