diff --git a/library/Class/Cosmogramme/FileParser.php b/library/Class/Cosmogramme/FileParser.php index c7c74cd5079bf020c7f3760b265168c597920775..e9eb33259b3f6f80d2bcc70d74bdbbd02aacf9c9 100644 --- a/library/Class/Cosmogramme/FileParser.php +++ b/library/Class/Cosmogramme/FileParser.php @@ -33,6 +33,8 @@ abstract class Class_Cosmogramme_FileParser { const FORMAT_CSV = 5; const FORMAT_MARC21 = 6; const FORMAT_AVENIO = 8; + const FORMAT_DUBLIN_CORE =11; + protected static $_format_parsers = [self::FORMAT_UNIMARC => 'Marc', @@ -42,7 +44,8 @@ abstract class Class_Cosmogramme_FileParser { self::FORMAT_XML => 'Xml', self::FORMAT_CSV => 'Csv', self::FORMAT_MARC21 => 'Marc', - self::FORMAT_AVENIO => 'Ascii_Tab']; + self::FORMAT_AVENIO => 'Ascii_Tab', + self::FORMAT_DUBLIN_CORE => 'OaiDC']; protected $_file_handle, $_position, $_file_size, $_profil; protected $_errors = []; @@ -203,6 +206,7 @@ class Class_Cosmogramme_FileParser_Ascii_Pipe extends Class_Cosmogramme_FilePars + class Class_Cosmogramme_FileParser_Xml extends Class_Cosmogramme_FileParser { const READ_SIZE = 1024; @@ -215,13 +219,16 @@ class Class_Cosmogramme_FileParser_Xml extends Class_Cosmogramme_FileParser { $data = $profil->getAttributs(); $attributs = unserialize($data); + $this->_checkErrors(); + } + + protected function _checkErrors() { $this->_xml_separator = $attributs[5]['xml_balise_abonne']; if (!$this->_xml_separator) { $this->_errors[] = 'La balise Xml qui sépare les enregistrements n\'est pas définie.'; } } - protected function _next() { $start_record = '<' . $this->_xml_separator . '>'; $end_record = '</' . $this->_xml_separator . '>'; @@ -261,6 +268,21 @@ class Class_Cosmogramme_FileParser_Xml extends Class_Cosmogramme_FileParser { } +class Class_Cosmogramme_FileParser_OaiDC extends Class_Cosmogramme_FileParser_Xml { + public function __construct($file, $position, $profil) { + $this->_xml_separator = 'record'; + parent::__construct($file, $position, $profil); + $data = $profil->getAttributs(); + $attributs = unserialize($data); + return new Class_Cosmogramme_FileParser_Record($data); + } + + + protected function _checkErrors() { + } + + +} class Class_Cosmogramme_FileParser_Csv extends Class_Cosmogramme_FileParser_Ascii { protected $_separator = ','; diff --git a/library/Class/Cosmogramme/Integration/Record/Bibliondemand.php b/library/Class/Cosmogramme/Integration/Record/Bibliondemand.php index 4cd5ae5d08f21bdbe565f518402eb65b06c503f7..61d549e181dd6cc591a216314d6b17249d94ff55 100644 --- a/library/Class/Cosmogramme/Integration/Record/Bibliondemand.php +++ b/library/Class/Cosmogramme/Integration/Record/Bibliondemand.php @@ -21,6 +21,14 @@ class Class_Cosmogramme_Integration_Record_Bibliondemand extends Class_Cosmogramme_Integration_Record_DublinCore { + + + protected function _parseDatas($data) { + $parser = new Class_WebService_OAI_DublinCoreParser_Bibliondemand(); + return $parser->parse($data)[0]; + } + + protected function _dublinCoreToUnimarc() { $visitor = parent::_dublinCoreToUnimarc(); $visitor diff --git a/library/Class/Cosmogramme/Integration/Record/DublinCore.php b/library/Class/Cosmogramme/Integration/Record/DublinCore.php index d79e9d5efe51f89df87732f14764f6ea4f5aa447..f08e60b4ecf796143865a675d14a87ab5c1c4925 100644 --- a/library/Class/Cosmogramme/Integration/Record/DublinCore.php +++ b/library/Class/Cosmogramme/Integration/Record/DublinCore.php @@ -32,6 +32,7 @@ class Class_Cosmogramme_Integration_Record_DublinCore extends notice_unimarc { public function ouvrirNotice($data, $id_data_profile, $sigb, $type_doc_force) { $this->_profil = Class_IntProfilDonnees::find($id_data_profile); + $data = $this->_parseDatas($data); $this->_types = $data['type']; $this->_formats = $data['format']; $this->_datas = $data; @@ -40,10 +41,17 @@ class Class_Cosmogramme_Integration_Record_DublinCore extends notice_unimarc { return parent::ouvrirNotice($unimarc, $id_data_profile, $sigb, $type_doc_force); } + protected function _parseDatas($data) { + return $data; + } protected function _dublinCoreToUnimarc() { $authors = $this->_authorsFrom($this->_datas['auteur']); + $first_language=is_array($this->_datas['language']) + ? reset($this->_datas['language']) + : $this->_datas['language']; + $unimarc_visitor = new Class_Indexation_PseudoNotice_UnimarcVisitor(); $unimarc_visitor ->visitIdNotice($this->_datas['id_oai']) @@ -53,7 +61,7 @@ class Class_Cosmogramme_Integration_Record_DublinCore extends notice_unimarc { ->visitDescriptions($this->_datas['rights']) ->visitDescriptions($this->_datas['relation']) ->visitYear($this->_datas['date']) - ->visitLanguageId(reset($this->_datas['language'])) + ->visitLanguageId($first_language) ->visitMatiere(implode(';', $this->_datas['matiere'])) ->visitEditors($this->_datas['editeur']) ->visitItems($this->_getItem())