diff --git a/VERSIONS_WIP/29968 b/VERSIONS_WIP/29968 new file mode 100644 index 0000000000000000000000000000000000000000..3225c771e85b5a850dfae8d9feaa7c5a868f6fc8 --- /dev/null +++ b/VERSIONS_WIP/29968 @@ -0,0 +1,2 @@ + - ticket #29968 : Ajout de la varibale DILICOM_PNB_MAX_LOAN_DURATION qui permet de limiter +la durée des prêts Dilicom PNB. \ No newline at end of file diff --git a/library/Class/AdminVar.php b/library/Class/AdminVar.php index 963c5629b7cb8137a9f9ae71e371690a36c16513..32a21ed209e254c2682024354ee637c3a59fc9f1 100644 --- a/library/Class/AdminVar.php +++ b/library/Class/AdminVar.php @@ -239,6 +239,7 @@ class Class_AdminVarLoader extends Storm_Model_Loader { 'DILICOM_PNB_FTP_SERVER' => Class_AdminVar_Meta::newDefault($this->_('Serveur FTP de diffusion des offres PNB Dilicom'))->bePrivate(), 'DILICOM_PNB_FTP_USER' => Class_AdminVar_Meta::newDefault($this->_('Utilisateur FTP de diffusion des offres PNB Dilicom'))->bePrivate(), 'DILICOM_PNB_FTP_PASS' => Class_AdminVar_Meta::newDefault($this->_('Mot de passe FTP de diffusion des offres PNB Dilicom'))->bePrivate(), + 'DILICOM_PNB_MAX_LOAN_DURATION' => Class_AdminVar_Meta::newDefault($this->_('Durée maximale (en jours) d\'un prêt PNB Dilicom'))->bePrivate(), 'MYCOW_EID' => Class_AdminVar_Meta::newDefault($this->_('Clé d\'identification MyCOW.EU pour le portail. Cette clé doit être fournie par MyCOW.EU. Elle active la ressource numérique dans le portail.'))->bePrivate(), 'ONEDTOUCH_URL' => Class_AdminVar_Meta::newDefault($this->_('Adresse du serveur OAI 1D touch'))->bePrivate(), @@ -258,7 +259,7 @@ class Class_AdminVarLoader extends Storm_Model_Loader { 'KIDILANGUES_ID' => Class_AdminVar_Meta::newDefault($this->_('Clé d\'identification Kidilangues pour le portail. Cette clé doit être fournie par Kidilangues.'))->bePrivate(), 'KIDILANGUES_LOGIN' => Class_AdminVar_Meta::newDefault($this->_('Login du portail fourni par Kidilangues.'))->bePrivate(), 'KIDILANGUES_PWD' => Class_AdminVar_Meta::newDefault($this->_('Password du portail fourni par Kidilangues.'))->bePrivate(), - + 'PREMIERCHAPITRE_BIB_ID' => Class_Adminvar_Meta::newDefault($this->_('Clé d\'identification Premier-Chapitre de la bibliothèque. Cette clé doit être fournie par Premier-Chapitre.'))->bePrivate(), 'PREMIERCHAPITRE_BMID' => Class_Adminvar_Meta::newDefault($this->_('Login du portail fourni par Premier-Chapitre.'))->bePrivate(), 'PREMIERCHAPITRE_BMKEY' => Class_Adminvar_Meta::newDefault($this->_('Password du portail fourni par Premier-Chapitre'))->bePrivate(), diff --git a/library/Class/Album/UsageConstraint.php b/library/Class/Album/UsageConstraint.php index 475f54351aeeba0cd10b8f52c199f5935b792ec4..450c92e96f656e50ffb8298bb77209b9a1b64f06 100644 --- a/library/Class/Album/UsageConstraint.php +++ b/library/Class/Album/UsageConstraint.php @@ -70,7 +70,12 @@ class Class_Album_UsageConstraint extends Storm_Model_Abstract { public function getDuration() { - return (int)$this->getDatas()->get(self::DURATION); + $pnb_duration = (int)$this->getDatas()->get(self::DURATION); + $max_duration = (int)Class_AdminVar::get('DILICOM_PNB_MAX_LOAN_DURATION'); + if (!$max_duration) + return $pnb_duration; + + return min($max_duration, $pnb_duration); } diff --git a/library/Class/WebService/BibNumerique/Dilicom/Hub.php b/library/Class/WebService/BibNumerique/Dilicom/Hub.php index 4dd3f29f72d8a487a6e8d89805ce8609e5f17e8d..40286128d5a3196d6199af11b19778ed7499ae4f 100644 --- a/library/Class/WebService/BibNumerique/Dilicom/Hub.php +++ b/library/Class/WebService/BibNumerique/Dilicom/Hub.php @@ -88,7 +88,7 @@ class Class_WebService_BibNumerique_Dilicom_Hub extends Class_WebService_Abstrac 'user_id' => $user->getId(), 'ongoing' => true, 'loan_date' => $this->startDate(), - 'expected_return_date' => $this->endDate(), + 'expected_return_date' => $this->endLoanDate($album), 'record_origin_id' => $album->getIdOrigine()]); $loan->save(); @@ -98,7 +98,7 @@ class Class_WebService_BibNumerique_Dilicom_Hub extends Class_WebService_Abstrac 'glnColl' => Class_AdminVar::get('DILICOM_PNB_GLN_COLLECTIVITE'), 'loanerColl' => $user->getBibGLN(), 'localization' => 'EX_SITU', - 'loanEndDate' => urlencode($this->endDate()), + 'loanEndDate' => urlencode($this->endLoanDate($album)), 'ean13' => $album->getISBN(), 'loanId' => $loan->getId(), ]); @@ -120,7 +120,7 @@ class Class_WebService_BibNumerique_Dilicom_Hub extends Class_WebService_Abstrac ['orderLineId' => $this->getOrderLineId($album), 'accessMedium' => 'STREAMING', 'localization' => 'IN_SITU', - 'consultEndDate' => urlencode($this->endDate()), + 'consultEndDate' => urlencode($this->endConsultDate()), 'ean13' => $album->getISBN(), 'ipAddress' => $ip_address, 'glnColl' => Class_AdminVar::get('DILICOM_PNB_GLN_COLLECTIVITE'), @@ -143,7 +143,13 @@ class Class_WebService_BibNumerique_Dilicom_Hub extends Class_WebService_Abstrac } - public function endDate() { + public function endLoanDate($album) { + return $this->iso8601($this->_now + + $album->getUsageConstraints()->getLoanDuration() * 3600 * 24); + } + + + public function endConsultDate() { return $this->iso8601($this->_now + 3600); } diff --git a/tests/application/modules/opac/controllers/BibNumeriqueControllerDilicomTest.php b/tests/application/modules/opac/controllers/BibNumeriqueControllerDilicomTest.php index e22616c58ddc401eb95d2792990d782c9e175daa..378db9bf458ea09ca17beafca962c5722bb9ee72 100644 --- a/tests/application/modules/opac/controllers/BibNumeriqueControllerDilicomTest.php +++ b/tests/application/modules/opac/controllers/BibNumeriqueControllerDilicomTest.php @@ -33,6 +33,8 @@ abstract class BibNumeriqueContollerDilicomTestCase extends AbstractControllerTe ['id' => 1, 'gln' => '2345889']); + Class_AdminVar::set('DILICOM_PNB_MAX_LOAN_DURATION', 0); + $logged_user = $this->fixture('Class_Users', ['id' => 6, 'nom'=>'Pito', @@ -65,6 +67,7 @@ abstract class BibNumeriqueContollerDilicomTestCase extends AbstractControllerTe 'usage_type' => Class_Album_UsageConstraint::LOAN_CONSTRAINT, Class_Album_UsageConstraint::MAX_NB_OF_USERS => 40, Class_Album_Usageconstraint::QUANTITY => 50, + Class_Album_UsageConstraint::DURATION => '100', 'order_line_id' => 'x321']), $this->fixture('Class_Album_UsageConstraint', ['id' => 2, @@ -183,7 +186,7 @@ class BibNumeriqueControllerDilicomLoanBookActionTest extends BibNumeriqueContol $this->_http ->whenCalled('open_url') - ->with('https://pnb-test.centprod.com/v2/pnb-numerique/json/loanBook?glnContractor=123456789&orderLineId=x321&accessMedium=DOWNLOAD&glnColl=afi-bib&loanerColl=2345889&localization=EX_SITU&loanEndDate=2014-05-02T15%3A14%3A14%2B0200&ean13=435465&loanId=1') + ->with('https://pnb-test.centprod.com/v2/pnb-numerique/json/loanBook?glnContractor=123456789&orderLineId=x321&accessMedium=DOWNLOAD&glnColl=afi-bib&loanerColl=2345889&localization=EX_SITU&loanEndDate=2014-08-10T14%3A14%3A14%2B0200&ean13=435465&loanId=1') ->answers(DilicomFixtures::loanBookResponse()) ->beStrict(); @@ -216,9 +219,11 @@ class BibNumeriqueControllerDilicomLoanBookActionErrorsTest extends BibNumerique parent::setUp(); $_SERVER['HTTP_REFERER'] = '/viewnotice/id/3'; + Class_AdminVar::set('DILICOM_PNB_MAX_LOAN_DURATION', 10); + $this->_http ->whenCalled('open_url') - ->with('https://pnb-test.centprod.com/v2/pnb-numerique/json/loanBook?glnContractor=123456789&orderLineId=x321&accessMedium=DOWNLOAD&glnColl=afi-bib&loanerColl=2345889&localization=EX_SITU&loanEndDate=2014-05-02T15%3A14%3A14%2B0200&ean13=435465&loanId=1') + ->with('https://pnb-test.centprod.com/v2/pnb-numerique/json/loanBook?glnContractor=123456789&orderLineId=x321&accessMedium=DOWNLOAD&glnColl=afi-bib&loanerColl=2345889&localization=EX_SITU&loanEndDate=2014-05-12T14%3A14%3A14%2B0200&ean13=435465&loanId=1') ->answers(DilicomFixtures::loanBookErrorResponse()) ->beStrict(); diff --git a/tests/library/Class/WebService/Dilicom/PNBOffersParserTest.php b/tests/library/Class/WebService/Dilicom/PNBOffersParserTest.php index 938ce6ca17b5cff71430a288cca05a4c8e1a8a49..fae8ec30035cbd47a95c18a795fad18190fd536e 100644 --- a/tests/library/Class/WebService/Dilicom/PNBOffersParserTest.php +++ b/tests/library/Class/WebService/Dilicom/PNBOffersParserTest.php @@ -20,11 +20,13 @@ */ -class DilicomPNBOfferParserTest extends Storm_Test_ModelTestCase { +abstract class DilicomPNBOfferParserTestCase extends Storm_Test_ModelTestCase { + protected $_xml; + public function setUp() { parent::setUp(); $xmlpath = realpath(dirname(__FILE__)) . '/fixtures/full_pnb_666_20150220T150017Z.xml'; - $xml = file_get_contents($xmlpath); + $this->_xml = file_get_contents($xmlpath); $this->_http_client = Storm_Test_ObjectWrapper::mock() ->whenCalled('open_url') @@ -35,7 +37,19 @@ class DilicomPNBOfferParserTest extends Storm_Test_ModelTestCase { Class_Album_UsageConstraint::setTimeSource(new TimeSourceForTest('2014-05-02 14:14:14')); - $this->_books = Class_WebService_BibNumerique_Dilicom_PNBOffersFile::booksFromXML($xml); + $this->fixture('Class_AdminVar', ['id' => 'DILICOM_PNB_MAX_LOAN_DURATION', + 'valeur' => '']); + } +} + + + + +class DilicomPNBOfferParserTest extends DilicomPNBOfferParserTestCase { + public function setUp() { + parent::setUp(); + + $this->_books = Class_WebService_BibNumerique_Dilicom_PNBOffersFile::booksFromXML($this->_xml); } public function tearDown() { @@ -235,4 +249,25 @@ class DilicomPNBOfferParserTest extends Storm_Test_ModelTestCase { } } + + + + +class DilicomPNBOfferParserWithLoanDurationVariableTest extends DilicomPNBOfferParserTestCase { + public function setUp() { + parent::setUp(); + Class_AdminVar::set('DILICOM_PNB_MAX_LOAN_DURATION', '21'); + + $this->_books = Class_WebService_BibNumerique_Dilicom_PNBOffersFile::booksFromXML($this->_xml); + } + + + /** + * @test + */ + public function firstAlbumLoanDurationShouldBe21() { + $album = $this->_books[0]->import(); + $this->assertEquals(21, $album->getUsageConstraints()->getLoanDuration()); + } +} ?> \ No newline at end of file