diff --git a/VERSIONS_HOTLINE/185864 b/VERSIONS_HOTLINE/185864 new file mode 100644 index 0000000000000000000000000000000000000000..89cb66fa2033df187c16905a4e0b714c0bdf90a9 --- /dev/null +++ b/VERSIONS_HOTLINE/185864 @@ -0,0 +1 @@ + - correctif #185864 : Ressource Numerique : Conversion Album vers Notice : meilleure génération du champ 200 \ No newline at end of file diff --git a/library/Class/Cosmogramme/Integration/Record/Lom.php b/library/Class/Cosmogramme/Integration/Record/Lom.php index e7d4ba7c460667d6abce609c45860d2785021413..be90b62bdd7786a9d380ed8af53da20d6dc3016e 100644 --- a/library/Class/Cosmogramme/Integration/Record/Lom.php +++ b/library/Class/Cosmogramme/Integration/Record/Lom.php @@ -92,7 +92,7 @@ class Class_Cosmogramme_Integration_Record_Lom extends notice_unimarc { $unimarc_visitor ->visitIdNotice($this->_datas['id_oai']) ->visitIdentity($first_identity) - ->visitTitle($this->_datas['titre']) + ->visitTitle($this->_datas['titre'], '', $this->_getIdNatureDocs($this->_datas['nature_doc'])) ->visitResume(implode(' ', $this->_datas['description'])) ->visitDescriptions($this->_datas['general_notes']) ->visitMatiere(Class_CodifMatiere::getOrCreateIdsForLabels(($this->_datas['subjects']))) @@ -103,7 +103,6 @@ class Class_Cosmogramme_Integration_Record_Lom extends notice_unimarc { ->visitEditors($this->_datas['publisher'], $this->_datas['date']) ->visitCollation($this->_datas['duration']) ->visitEducationalLevel($this->_datas['educational_level']) - ->visitNatures($this->_getIdNatureDocs($this->_datas['nature_doc'])) ->visitLabelledUrl($this->_('Ressource en ligne'), $this->_datas['location']); foreach($this->_datas['relations'] as $relation) diff --git a/library/Class/Indexation/PseudoNotice.php b/library/Class/Indexation/PseudoNotice.php index 06debc919feb4c4af2caa21642feb2f44b0189e3..1a23734848d44f361aa31ffb932c8b010b559c60 100644 --- a/library/Class/Indexation/PseudoNotice.php +++ b/library/Class/Indexation/PseudoNotice.php @@ -374,8 +374,7 @@ class Class_Indexation_PseudoNotice { ->visitLabel($this->_label) ->visitIdNotice($this->_notice->getId()) ->visitDateMaj($this->_datas['date_maj']) - ->visitTitle($this->_datas['titre']) - ->visitSubTitle($this->_datas['sous_titre']) + ->visitTitle($this->_datas['titre'], $this->_datas['sous_titre'] ?? '', explode(';',$this->_datas['nature_doc'] ?? '')) ->visitEditors($this->extractEditors(), $this->_datas['annee']) ->visitCollection($this->extractCollections()) ->visitLanguageId($this->_datas['id_langue']) @@ -383,7 +382,6 @@ class Class_Indexation_PseudoNotice { ->visitOrigin($this->_datas['provenance']) ->visitUrl($this->_datas['url']) ->visitNotes($this->_datas['notes']) - ->visitNatures($this->_datas['nature_doc']) ->visitResume($this->_datas['resume']) ->visitCustomFieldsValues($this->getCustomFieldsValues()) ->visitPrivateUrl($this->_datas['private_url']); diff --git a/library/Class/Indexation/PseudoNotice/UnimarcVisitor.php b/library/Class/Indexation/PseudoNotice/UnimarcVisitor.php index 5d9b24a500e127b43b68660f923ca6e1a5e0897e..7b06ca0c7e015a4bbd66330dd2c6b45b9a73643a 100644 --- a/library/Class/Indexation/PseudoNotice/UnimarcVisitor.php +++ b/library/Class/Indexation/PseudoNotice/UnimarcVisitor.php @@ -94,13 +94,6 @@ class Class_Indexation_PseudoNotice_UnimarcVisitor extends Class_Indexation_Pseu } - public function visitSubTitle($subtitle) { - if ($subtitle) - $this->addUnimarcField('200', '1 ', 'e' . $subtitle); - return $this; - } - - public function visitGeolocalization($latitude, $longitude) { if ($latitude && $longitude) $this->addUnimarcField('123', '1 ', [['d', $longitude], @@ -123,12 +116,28 @@ class Class_Indexation_PseudoNotice_UnimarcVisitor extends Class_Indexation_Pseu } - public function visitTitle($title) { - $this->addUnimarcField('200', '1 ', 'a' . $title); + public function visitTitle(string $title, ?string $subtitle="", array $typedocs=[]) { + $subfields = [['a', $title]]; + if ($typedocs) + $subfields = $this->_getNatures($typedocs, $subfields) ; + + if ($subtitle) + $subfields [] = ['e', $subtitle] ; + + $this->addUnimarcField('200', '1 ', $subfields); return $this; } + private function _getNatures(array $nature_docs, array $subfields) :array { + foreach ($nature_docs as $nature) + if ($nature && $label = Class_NatureDoc::getLabel($nature)) + $subfields [] = ['b', $label]; + + return $subfields; + } + + public function visitLanguageId($languageId) { if (!$languageId) return $this; @@ -222,18 +231,6 @@ class Class_Indexation_PseudoNotice_UnimarcVisitor extends Class_Indexation_Pseu } - public function visitNatures($natures) { - $nature_docs = is_array($natures) - ? $natures - : explode(';', $natures); - - foreach ($nature_docs as $nature) - if ($nature) - $this->addUnimarcField('200', '1 ', 'b' . Class_NatureDoc::getLabel($nature)); - return $this; - } - - public function visitMatiere($matiere_ids) { if (!$matiere_ids || (!$ids = array_filter(explode(';', $matiere_ids)))) diff --git a/tests/scenarios/PnbDilicom/PnbDilicomTest.php b/tests/scenarios/PnbDilicom/PnbDilicomTest.php index 259e40abe482e7b1113cb663fecccc922ca04290..3ffb4e9b5d561dc1ab3440ecdf42cde14d86debf 100644 --- a/tests/scenarios/PnbDilicom/PnbDilicomTest.php +++ b/tests/scenarios/PnbDilicom/PnbDilicomTest.php @@ -486,6 +486,27 @@ class PnbDilicomOffersParserTest extends PnbDilicomOfferParserTestCase { } + /** + * @test + * @depends secondAlbumShouldBeJournalDunDegonfle + */ + public function secondAlbumNoticeShouldContainsOnlyOnefield200($album) { + $album->index(); + $notice = $album->getNotice(); + $this->assertEquals(count($notice->getUnimarcZone('200')),1); + return $notice; + } + + + /** + * @test + * @depends secondAlbumNoticeShouldContainsOnlyOnefield200 + */ + public function secondAlbumNoticeSubtitleShouldBe($notice) { + $this->assertEquals(current($notice->get_subfield('200','e')), "Carnet de bord de Greg Heffley"); + } + + /** @test */ public function formatShouldBeSetInAlbum(){ $album = $this->_books[2]->import();