diff --git a/VERSIONS_HOTLINE/37850 b/VERSIONS_HOTLINE/37850 new file mode 100644 index 0000000000000000000000000000000000000000..ced4ea9fd118db4f13cb645b43623825972616fd --- /dev/null +++ b/VERSIONS_HOTLINE/37850 @@ -0,0 +1 @@ + - ticket #37850 : Ressource numérique 1dtouch : correction du moissonnage lorsque le serveur oneDTouch retourne une erreur diff --git a/library/Class/WebService/DublinCoreParser.php b/library/Class/WebService/DublinCoreParser.php index 863f259719f9863320fa4a804a4f1dd4181f1864..a9896f0a9b7bb45e97294713e35ef22a50cbfdd2 100644 --- a/library/Class/WebService/DublinCoreParser.php +++ b/library/Class/WebService/DublinCoreParser.php @@ -65,7 +65,7 @@ class Class_WebService_DublinCoreParser extends Class_WebService_OAI_ParserAbstr public function newRecord($attributes) { $this->_record=[]; $this->ressource_numerique = $this->visitor->getNewRessourceNumerique(); - $this->_records_ressources[] = $this->ressource_numerique; + $this->_records_ressources[] = $this->getRessourceNumerique(); } @@ -75,49 +75,49 @@ class Class_WebService_DublinCoreParser extends Class_WebService_OAI_ParserAbstr public function enddc_identifier($data) { - $this->ressource_numerique->setOaiId($data); + $this->getRessourceNumerique()->setOaiId($data); $this->_record['id_oai']=$data; } public function enddc_title($data) { - $this->ressource_numerique->setTitle($data); + $this->getRessourceNumerique()->setTitle($data); $this->_record['titre']=$data; } public function enddc_creator($data) { - $this->ressource_numerique->addAuthor($data); + $this->getRessourceNumerique()->addAuthor($data); $this->_record['auteur']=$data; } public function enddc_publisher($data) { - $this->ressource_numerique->setEditeur($data); + $this->getRessourceNumerique()->setEditeur($data); $this->_record['editeur']=$data; } public function enddc_subject($data) { - $this->ressource_numerique->addMatiere($data); + $this->getRessourceNumerique()->addMatiere($data); } public function enddc_date($data) { $date = $data; if (strlen($date)>4) - $this->ressource_numerique->setYear(substr($date,0,4)); + $this->getRessourceNumerique()->setYear(substr($date,0,4)); $this->_record['date']=$date; } public function enddc_relation($data) { $this->_record['relation']=$data; - $this->ressource_numerique->setExternalUri($data); + $this->getRessourceNumerique()->setExternalUri($data); } public function enddc_description($data) { $this->_record['description']=$data; - $this->ressource_numerique->setDescription($data); + $this->getRessourceNumerique()->setDescription($data); } @@ -129,5 +129,12 @@ class Class_WebService_DublinCoreParser extends Class_WebService_OAI_ParserAbstr public function getRecordsRessourceNumeriques() { return $this->_records_ressources; } + + + protected function getRessourceNumerique() { + if(!$this->ressource_numerique) + $this->ressource_numerique = new Class_WebService_BibNumerique_RessourceNumerique(); + return $this->ressource_numerique; + } } ?> diff --git a/library/Class/WebService/OneDTouchDCParser.php b/library/Class/WebService/OneDTouchDCParser.php index 71dc88cad231814b072235e1863946df6ccb7c74..3166a6d075791da8a6e4944e9e84d4c109c462f9 100644 --- a/library/Class/WebService/OneDTouchDCParser.php +++ b/library/Class/WebService/OneDTouchDCParser.php @@ -46,7 +46,7 @@ class Class_WebService_OneDTouchDCParser extends Class_WebService_DublinCorePars if ($this->parser->getParent() == 'track') { return $this->current_track->setUrl($data); } - $this->ressource_numerique->setExternalUri($data); + $this->getRessourceNumerique()->setExternalUri($data); } @@ -67,7 +67,7 @@ class Class_WebService_OneDTouchDCParser extends Class_WebService_DublinCorePars public function endTracks() { - $this->ressource_numerique->setRessources($this->tracks); + $this->getRessourceNumerique()->setRessources($this->tracks); } @@ -82,7 +82,7 @@ class Class_WebService_OneDTouchDCParser extends Class_WebService_DublinCorePars public function endCover_url($data) { - $this->ressource_numerique->addPoster($data); + $this->getRessourceNumerique()->addPoster($data); } diff --git a/library/Class/WebService/XMLParser.php b/library/Class/WebService/XMLParser.php index 4b5bea8af96d308ac18e7007f733b5480b4223fb..f15109fcc53348b54ebb67df9966882f9a5f43f8 100644 --- a/library/Class/WebService/XMLParser.php +++ b/library/Class/WebService/XMLParser.php @@ -20,6 +20,7 @@ */ class Class_WebService_XMLParser { + use Trait_Logger; protected $_current_data ; protected $_parents ; @@ -87,8 +88,9 @@ class Class_WebService_XMLParser { $column = xml_get_current_column_number($parser); $byte = xml_get_current_byte_index($parser); $error_msg = "XML parser error: $error_string" - . " at line $line column $column byte $byte (code: $error_code)"; - error_log($error_msg); + . " at line $line column $column byte $byte (code: $error_code)" + . $xml; + $this->getLogger()->log($error_msg); } xml_parser_free($parser) ; return $this ; diff --git a/tests/library/Class/WebService/OneDTouchTest.php b/tests/library/Class/WebService/OneDTouchTest.php index a8a0182ea5d42f5cc9728639bbdcd90cd619ca31..1846ddbdae974724c91d55ef599a9be7d88bf97a 100644 --- a/tests/library/Class/WebService/OneDTouchTest.php +++ b/tests/library/Class/WebService/OneDTouchTest.php @@ -216,4 +216,40 @@ class OneDTouchIncTest extends ModelTestCase { $this->assertEquals(1, Class_Album::findFirstBy(['titre' => 'WOLFEP026'])->getId()); } } -?> + + + +class oneDTouchWithErrorResponseTest extends ModelTestCase { + protected $_storm_default_to_volatile = true; + + public function setUp() { + parent::setUp(); + + RessourcesNumeriquesFixtures::activate1Dtouch(); + $error_response = file_get_contents(realpath(dirname(__FILE__)). '/../../../fixtures/onedtouch_error_response.html'); + + $this->_http_client = $this->mock(); + $this->_http_client + ->whenCalled('open_url') + ->with('http://dev.1dtouch.com/oai?verb=ListRecords&metadataPrefix=oai1dtouch_dc') + ->answers($error_response) + ->beStrict(); + + $this->fixture('Class_WebService_HarvestLog', + ['id' => 1, + 'end_date' => '2015-02-01', + 'type_doc' => Class_TypeDoc::ONEDTOUCH]); + + $this->_service = new Class_WebService_BibNumerique_OneDTouch(); + $this->_service->setTimeSource(new TimeSourceForTest('2015-03-18 10:00:00')); + Class_WebService_BibNumerique_OneDTouch::setDefaultHttpClient($this->_http_client); + $this->_service->harvest(); + Class_Album::clearCache(); + } + + + /** @test */ + public function shouldNotHaveAlbums() { + $this->assertEmpty(Class_Album::findAll()); + } +} \ No newline at end of file