From 928a71d6f9715ce7283e39b65e2c21406a42ee05 Mon Sep 17 00:00:00 2001 From: efalcy <efalcy@git-test.afi-sa.fr> Date: Fri, 14 Jun 2013 15:05:30 +0000 Subject: [PATCH] Numilog : correction parser Dublin core pour les dates + ajout des matieres --- .../BibNumerique/LivreNumerique.php | 8 --- .../Numilog/LivresNumeriquesReader.php | 2 - .../BibNumerique/RessourceNumerique.php | 28 ++++++++- library/Class/WebService/DublinCoreParser.php | 7 ++- library/Class/WebService/OAI.php | 1 - tests/fixtures/numilog_catalogue.xml | 32 ++++++++++ .../library/Class/WebService/NumilogTest.php | 60 ++++++++++++++++++- 7 files changed, 122 insertions(+), 16 deletions(-) diff --git a/library/Class/WebService/BibNumerique/LivreNumerique.php b/library/Class/WebService/BibNumerique/LivreNumerique.php index baed437de44..6a33b432613 100644 --- a/library/Class/WebService/BibNumerique/LivreNumerique.php +++ b/library/Class/WebService/BibNumerique/LivreNumerique.php @@ -23,14 +23,6 @@ class Class_WebService_BibNumerique_LivreNumerique extends Class_WebService_BibN protected $_record; protected $_titre; - public static function createLivreNumeriqueFromRecord($record) { - $livre = new Class_WebService_BibNumerique_LivreNumerique(); - $livre -> setRecord($record); - return $livre; - } - - - public function getBaseUrl(){ return Class_WebService_BibNumerique_Numilog::BASE_URL; diff --git a/library/Class/WebService/BibNumerique/Numilog/LivresNumeriquesReader.php b/library/Class/WebService/BibNumerique/Numilog/LivresNumeriquesReader.php index a7232d75344..f086d696236 100644 --- a/library/Class/WebService/BibNumerique/Numilog/LivresNumeriquesReader.php +++ b/library/Class/WebService/BibNumerique/Numilog/LivresNumeriquesReader.php @@ -33,8 +33,6 @@ class Class_WebService_BibNumerique_Numilog_LivresNumeriquesReader extends Class $records=$this->_xml_parser->parseListRecordsRessourcesNumeriqueXML($xml); $this->livres = []; foreach($records as $record) { -// $livre = Class_WebService_BibNumerique_LivreNumerique::createLivreNumeriqueFromRecord($record); - // $livre->setRecord($record); $this->livres[]=$record; } $this->_total_count = sizeof($this->livres); diff --git a/library/Class/WebService/BibNumerique/RessourceNumerique.php b/library/Class/WebService/BibNumerique/RessourceNumerique.php index 753d4617a5b..2c8022f76d5 100644 --- a/library/Class/WebService/BibNumerique/RessourceNumerique.php +++ b/library/Class/WebService/BibNumerique/RessourceNumerique.php @@ -33,7 +33,7 @@ protected $_trailers = array(); protected $_photos = array(); protected $_editeur; - + protected $_matieres = []; public function setId($id) { $this->_id = $id; return $this; @@ -177,6 +177,30 @@ } + public function addMatiere($matiere_libelle) { + $this->_matieres[] = $matiere_libelle; + } + + + public function importMatieres($album) { + $ids=[]; + $indexation = new Class_Indexation(); + foreach ($this->_matieres as $matiere_libelle) { + if ( $matiere=Class_CodifMatiere::findFirstBy(['libelle' => $matiere_libelle])) { + $ids[]=$matiere->getId(); + continue; + } + + $matiere= new Class_CodifMatiere(); + $matiere->setLibelle($matiere_libelle); + $matiere->setCodeAlpha($indexation->alphaMaj($matiere_libelle)); + $matiere->save(); + $ids[]=$matiere->getId(); + + } + if ($ids) + $album->setMatiere(implode(';',$ids)); + } public function import() { @@ -191,7 +215,7 @@ ->setUrlOrigine($this->getBaseUrl()) ->setCategorie($categorie); - + $this->importMatieres($album); $this->fillAlbum($album); $this->updateRessourceNumeriqueNotes($album); diff --git a/library/Class/WebService/DublinCoreParser.php b/library/Class/WebService/DublinCoreParser.php index 726ddbc1b49..5372764064d 100644 --- a/library/Class/WebService/DublinCoreParser.php +++ b/library/Class/WebService/DublinCoreParser.php @@ -136,9 +136,14 @@ class Class_WebService_DublinCoreParser { $this->assign_data_to('editeur'); } + protected function end_dc_subject($parser) { + $this->ressource_numerique->addMatiere($this->current_data); + } protected function end_dc_date($parser) { - $this->ressource_numerique->setYear(explode('-',$this->current_data)[0]); + $date = $this->current_data; + if (strlen($date)>4) + $this->ressource_numerique->setYear(substr($date,0,4)); $this->assign_data_to('date'); } diff --git a/library/Class/WebService/OAI.php b/library/Class/WebService/OAI.php index 0374dbfd72f..bc799d19c6f 100644 --- a/library/Class/WebService/OAI.php +++ b/library/Class/WebService/OAI.php @@ -132,7 +132,6 @@ class Class_WebService_OAI extends Class_WebService_Abstract { $parser = new Class_WebService_DublinCoreParser(); $parser->acceptVisitor($this); $parser->parseRessourcesNumeriques($xml_data); - xdebug_break(); return $parser->getRecordsRessourceNumeriques(); } diff --git a/tests/fixtures/numilog_catalogue.xml b/tests/fixtures/numilog_catalogue.xml index cc38d130657..557c14a24e3 100644 --- a/tests/fixtures/numilog_catalogue.xml +++ b/tests/fixtures/numilog_catalogue.xml @@ -47,6 +47,38 @@ </oai_dc:dc> </metadata> </record> +<record> +<header> +<identifier>oai:numilog.com:9782212540147</identifier> +<datestamp>2010-12-17T15:59:42Z</datestamp> +</header> +<metadata> +<oai_dc:dc xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/"> +<dc:identifier>oai:numilog.com:9782212540147</dc:identifier> +<dc:title><![CDATA[Stress et burnout au travail]]></dc:title> +<dc:creator><![CDATA[Elisabeth Grebot]]></dc:creator> +<dc:publisher><![CDATA[Editions d'Organisation]]></dc:publisher> +<dc:date>20110707</dc:date> +<dc:description><![CDATA[<h4>Stressé, harcelé, "burnouté" ? +<br />26 questionnaires pour faire le point</h4> + +<p><strong>Trois salariés français sur quatre se disent stressés. Il est aujourd'hui reconnu que le travail est une source de stress. Mais que désigne le stress exactement ? Pourquoi survient-il ? Quand devient-il nocif ?</strong></p> + +<p>Ce guide dresse un état des lieux du stress au travail : ce qu'il est, ce qu'il n'est pas, ses manifestations, son coût pour l'entreprise, l'individu et la société... Il propose au lecteur un ensemble de questionnaires pour identifier son profil de stressé et l'invite notamment à distinguer le stress professionnel géré sainement de celui qui conduit au <em>burnout</em> ou au harcèlement moral.</p> + +<p>À l'entreprise, il suggère des pistes d'action pour mettre en place des modes d'organisation favorables à la santé physique et mentale des salariés. Au salarié stressé, il prescrit diverses techniques individuelles pour modérer son stress : la relaxation, l'exposition, la restructuration cognitive, etc.</p>]]></dc:description> +<dc:subject>Psychologie</dc:subject> +<dc:subject>Métiers et Formations</dc:subject> +<dc:subject>Management</dc:subject> +<dc:language>fre</dc:language> +<dc:rights xml:lang="fre">sous droits</dc:rights> +<dc:rights xml:lang="eng">right protected</dc:rights> +<dc:format>application/PDF</dc:format> +<dc:relation>http://www.numilog.com/bibliotheque/agglo-sqy/fiche_livre.asp?idprod=67312</dc:relation> +</oai_dc:dc> +</metadata> +</record> + <record> <header> <identifier>oai:numilog.com:9782234074385</identifier> diff --git a/tests/library/Class/WebService/NumilogTest.php b/tests/library/Class/WebService/NumilogTest.php index 54e6cf531f4..73a6f5c5061 100644 --- a/tests/library/Class/WebService/NumilogTest.php +++ b/tests/library/Class/WebService/NumilogTest.php @@ -43,9 +43,26 @@ class NumilogTest extends Storm_Test_ModelTestCase{ Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Album') ->whenCalled('save') ->answers(true) + ->whenCalled('delete') + ->answers(true) ->whenCalled('findFirstBy') ->answers(null); + Storm_Test_ObjectWrapper::onLoaderOfModel('Class_CodifMatiere') + ->whenCalled('save') + ->answers(true) + ->whenCalled('findFirstBy') + ->with(['libelle'=>'Management']) + ->answers(Class_CodifMatiere::newInstanceWithId('132')) + ->whenCalled('findFirstBy') + ->with(['libelle'=>'Métiers et Formations']) + ->answers(Class_CodifMatiere::newInstanceWithId('133')) + ->whenCalled('findFirstBy') + ->with(['libelle'=>'Psychologie']) + ->answers(Class_CodifMatiere::newInstanceWithId('134')); + + + $this->_numilog = new Class_WebService_BibNumerique_Numilog(); Class_WebService_BibNumerique_Numilog::setDefaultHttpClient($this->_http_client); @@ -55,6 +72,8 @@ class NumilogTest extends Storm_Test_ModelTestCase{ xdebug_break(); $this->_first_album = $this->_numilog->getAlbums()[0]; $this->_second_album = $this->_numilog->getAlbums()[1]; + $this->_third_album = $this->_numilog->getAlbums()[2]; + } @@ -68,8 +87,8 @@ class NumilogTest extends Storm_Test_ModelTestCase{ /** @test */ - public function numberfLivresShouldBe70OnFirstPage() { - $this->assertEquals(70, count($this->_numilog->loadPage(1)->getRessourcesNumeriques())); + public function numberfLivresShouldBe71OnFirstPage() { + $this->assertEquals(71, count($this->_numilog->loadPage(1)->getRessourcesNumeriques())); } @@ -97,6 +116,43 @@ class NumilogTest extends Storm_Test_ModelTestCase{ } + + /** @test */ + public function thirdAlbumDescriptionShouldBeSet() { + $this->assertEquals("<h4>Stressé, harcelé, \"burnouté\" ? +<br />26 questionnaires pour faire le point</h4> + +<p><strong>Trois salariés français sur quatre se disent stressés. Il est aujourd'hui reconnu que le travail est une source de stress. Mais que désigne le stress exactement ? Pourquoi survient-il ? Quand devient-il nocif ?</strong></p> + +<p>Ce guide dresse un état des lieux du stress au travail : ce qu'il est, ce qu'il n'est pas, ses manifestations, son coût pour l'entreprise, l'individu et la société... Il propose au lecteur un ensemble de questionnaires pour identifier son profil de stressé et l'invite notamment à distinguer le stress professionnel géré sainement de celui qui conduit au <em>burnout</em> ou au harcèlement moral.</p> + +<p>À l'entreprise, il suggère des pistes d'action pour mettre en place des modes d'organisation favorables à la santé physique et mentale des salariés. Au salarié stressé, il prescrit diverses techniques individuelles pour modérer son stress : la relaxation, l'exposition, la restructuration cognitive, etc.</p>",$this->_third_album->getDescription()); + + } + + + /** @test */ + public function thirdAlbumShouldBeValid() { + $this->assertTrue($this->_third_album->isValid(),implode(',',$this->_third_album->getErrors())); + + } + + + + + /** @test */ + public function thirdAlbumShouldHaveMatierePsychologie() { + $this->assertEquals('134;133;132',$this->_third_album->getMatiere()); + + } + + /** @test */ + public function thirdAlbumShouldBeSaved() { + + $this->assertTrue(Class_Album::methodHasBeenCalledWithParams('save',[$this->_third_album])); + } + + /** @test */ public function firstAlbumIdLangueShouldBeFre() { $this->assertEquals('fre',$this->_first_album->getIdLangue()); -- GitLab