Commit 6befbd10 authored by Patrick Barroca's avatar Patrick Barroca 🐧

Merge branch 'hotline' into 'master'

Hotline

See merge request !3442
parents 0582a0dd 40cc2e69
Pipeline #9725 passed with stage
in 51 minutes and 51 seconds
23/03/2020 - v8.0.45
- ticket #108047 : Ressources numériques : L'accès à une ressource s'appuie exclusivement sur l'appartenance aux groupes
- ticket #79470 : Ressources numériques : Amélioration de la reconnaissance des urls de vignettes PNB
- ticket #106879 : Ressources numériques : Correction du moissonnage ArteVOD pour filtrer les films selon le pays de diffusion, par défaut la France
- ticket #108117 : Administration : L'activation du magasin de thèmes devient accessible aux administrateurs du portail
- ticket #107991 : Groupes d'utilisateurs : Correction du critère "âge".
- ticket #106864 : Newsletter : Il n'est plus possible de modifier ou supprimer le groupe manuel dédié à chaque newsletter
17/03/2020 - v8.0.44
- ticket #106075 : Compte lecteur : Ajout de la prise en charge de serveurs d'identité tiers France Connect, Google et plus généralement OpenId
- ticket #76799 : Compte lecteur : correction de la mise à jour des cartes liées.
- ticket #93357 : SIGB : Ajout du connecteur Decalog Flora
- ticket #86543 : SIGB Koha : Prise en compte des contraintes de mot de passe fort
- ticket #106412 : Version mobile : correction d'une erreur lorsqu'un abonné faisant partie d'un groupe dynamique se connectait
......
'93357' =>
['Label' => $this->_('SIGB Decalog Flora'),
'Desc' => $this->_('Support des web services du SIGB Decalog Flora (disponibilité temps réel, réservations, compte lecteur)'),
'Image' => '',
'Video' => '',
'Category' => $this->_('Communication SIGB'),
'Right' => function($feature_description, $user) {return true;},
'Wiki' => 'http://wiki.bokeh-library-portal.org/index.php?title=SIGB_Flora',
'Test' => '',
'Date' => '2020-01-23'],
\ No newline at end of file
- ticket #106988 : Intégrations : correction de la détection du type de document basé sur un sous-champ de la zone exemplaire autre que 995
\ No newline at end of file
- ticket #93357 : Ajout du connecteur SIGB Decalog Flora
\ No newline at end of file
......@@ -1134,13 +1134,19 @@ class notice_unimarc extends iso2709_record {
$label = $this->inner_guide['dt'] . $this->inner_guide['bl'];
$champ_code_barres = $this->getBarcode();
if (!isset($this->profil['attributs'][0]['item_zone']) || !$zone = $this->profil['attributs'][0]['item_zone'])
$zone = '995';
if ($this->profil['attributs'][0]['champ_type_doc']) {
$zone = (strlen($champ_code_barres) == 3) ? $champ_code_barres : '995';
$zone = (strlen($champ_code_barres) == 3) // legacy: before 'champ_type_doc' could equal '996' or '852', which has been deprecated by introduction of 'item_zone'. Need to check if some sites in production still uses these values (some tests does...)
? $champ_code_barres
: $zone;
$z995r = $this->get_subfield($zone,
$this->profil['attributs'][0]['champ_type_doc']);
} else {
$z995r = $this->get_subfield('995', 'r');
$z995p = $this->get_subfield('995', 'p');
$z995r = $this->get_subfield($zone, 'r');
$z995p = $this->get_subfield($zone, 'p');
if($champ_code_barres == '997')
$z995r = $this->get_subfield('997', 't');
elseif($champ_code_barres == '852')
......
......@@ -244,4 +244,52 @@ class PMBIntegrationSerialsTest extends PMBIntegrationRecordsTestCase {
$this->assertEquals('Revue française de pédagogie',
Class_Notice::findFirstBy(['type_doc' => 2])->getTitreChapeau());
}
}
class PMBIntegrationSerialsBretagneSacreeTest extends PMBIntegrationRecordsTestCase {
public function getProfilDonnees() {
return Class_IntProfilDonnees::forPMB()
->setIdProfil(115)
->setAccents(Class_IntProfilDonnees::ENCODING_UTF8)
->setTypeDocField('e')
->setBarCodeField('f')
->setItemZone(996)
->setTypeDocRecognition(Class_TypeDoc::PERIODIQUE, '', 'PERIODIQUE')
->getRawAttributes();
}
public function setUp() {
parent::setUp();
$this->loadRecordsFromFile('unimarc_bretagne_sacree');
}
/** @test */
public function numberOfRecordsShouldBeTwentyOne() {
$this->assertEquals(21, Class_Notice::countBy([]));
}
/** @test */
public function numberOfPeriodiqueTitleShouldBeTwo() {
$records = Class_Notice::findAllBy(['type_doc' => 'per_title']);
$this->assertEquals(2, Class_Notice::countBy(['type_doc' => 'per_title']));
}
/** @test */
public function numberOfPeriodiqueArticleShouldBeEighteen() {
$this->assertEquals(18, Class_Notice::countBy(['type_doc' => 'per_art']));
}
/** @test */
public function numberOfPeriodiqueShouldBeOne() {
$this->assertEquals(1, Class_Notice::countBy(['type_doc' => 2]));
}
}
\ No newline at end of file
03356nas1 22003131i 450 00100060000010000350000620000340004131900280007546202230010346200940032646401620042046401590058246401340074146401310087546401300100646401500113646401520128646401520143846401460159046401450173646401530188146401460203446401400218046401330232046401520245346401540260546401370275946401460289627990 a20130429u u u0frey50 1 aBretagne Magazine [1998-....] aAucun droit spécifique 0568389bl:b29id:568389rank:19type_lnk:b9lnk:childd2002-07-01e07/2002vN° spécial n° 5 de Eté 2002tN° spécial n° 5 de Eté 2002 - 07/2002 - Bretagne sacréetBretagne sacréetBretagne Magazine [1998-....] d2002-07-01e07/2002vN° spécial n° 5 de Eté 2002tBretagne sacrée9id:32189lnk:bull 027989tAbbaye de Beauport, huit siècles et un avenirtBretagne sacréed2002-07-01e07/2002vN° spécial n° 5 de Eté 20029id:279899page:98-1059lnk:art 027991tAbbaye de Timadeuc : monde clos, vie ouvertetBretagne sacréed2002-07-01e07/2002vN° spécial n° 5 de Eté 20029id:279919page:12-179lnk:art 027992tAu pays des pardonstBretagne sacréed2002-07-01e07/2002vN° spécial n° 5 de Eté 20029id:279929page:84-949lnk:art 027994tBretagne sacréetBretagne sacréed2002-07-01e07/2002vN° spécial n° 5 de Eté 20029id:279949page:54-739lnk:art 027995tBretons en missiontBretagne sacréed2002-07-01e07/2002vN° spécial n° 5 de Eté 20029id:279959page:189lnk:art 027996tChevaux chrétiens qui m'écoutez !tBretagne sacréed2002-07-01e07/2002vN° spécial n° 5 de Eté 20029id:279969page:38-409lnk:art 027998tEnclos, le sommet de l'art paroissialtBretagne sacréed2002-07-01e07/2002vN° spécial n° 5 de Eté 20029id:279989page:46-539lnk:art 027999tEnfer du péché, paradis de la vertutBretagne sacréed2002-07-01e07/2002vN° spécial n° 5 de Eté 20029id:279999page:28-319lnk:art 028000tEt les saints prirent la mer...tBretagne sacréed2002-07-01e07/2002vN° spécial n° 5 de Eté 20029id:280009page:24-279lnk:art 028001tGusti Hervé, curé de campagnetBretagne sacréed2002-07-01e07/2002vN° spécial n° 5 de Eté 20029id:280019page:8-109lnk:art 028002tIsabelle Gargadennec, l'ange-gardientBretagne sacréed2002-07-01e07/2002vN° spécial n° 5 de Eté 20029id:280029page:115-1169lnk:art 028003tL'hôpital des saints de boistBretagne sacréed2002-07-01e07/2002vN° spécial n° 5 de Eté 20029id:280039page:110-1129lnk:art 028004tLa marche des Sept SaintstBretagne sacréed2002-07-01e07/2002vN° spécial n° 5 de Eté 20029id:280049page:78-839lnk:art 028005tLe diable au corpstBretagne sacréed2002-07-01e07/2002vN° spécial n° 5 de Eté 20029id:280059page:32-379lnk:art 028006tLe dialogue de l'Eglise et de la BretagnetBretagne sacréed2002-07-01e07/2002vN° spécial n° 5 de Eté 20029id:280069page:39lnk:art 028007tMaîtres de l'ombre et de la lumièretBretagne sacréed2002-07-01e07/2002vN° spécial n° 5 de Eté 20029id:280079page:106-1099lnk:art 028008tMon petit séminairetBretagne sacréed2002-07-01e07/2002vN° spécial n° 5 de Eté 20029id:280089page:119-1259lnk:art 028009tPierre Guichou, le dernier témointBretagne sacréed2002-07-01e07/2002vN° spécial n° 5 de Eté 20029id:280099page:209lnk:art00499nas2 22001331i 450 00100060000010000350000600900150004120001250005653000340018121000240021510100080023931900280024746100900027556838 a20200224u u u0frey50  a2002-07-011 aN° spécial n° 5 de Eté 2002 - 07/2002 - Bretagne sacréehN° spécial n° 5 de Eté 2002iBretagne sacrée9id:3218 aBretagne Magazine [1998-....] h2002-07-01d07/20020 afre aAucun droit spécifique 0279909bl:s19id:279909rank:19type_lnk:b9lnk:parenttBretagne Magazine [1998-....]00490naa2 22001451i 450 00100060000010000350000600900150004120000510005621500110010731900280011870000330014621000090017946100620018846300940025027989 a20130429u u u0frey50  a2002-07-011 aAbbaye de Beauport, huit siècles et un avenir a98-105 aAucun droit spécifique 1aQuéménerbHervé9id:15354 d2002 027990tBretagne Magazine [1998-....]9id:279909lnk:perio d2002-07-01e07/2002vN° spécial n° 5 de Eté 2002tBretagne sacrée9id:32189lnk:bull00534naa2 22001571i 450 00100060000010000350000600900150004120000490005621500100010531900280011570000350014370200330017821000090021146100620022046300940028227991 a20130429u u u0frey50  a2002-07-011 aAbbaye de Timadeuc : monde clos, vie ouverte a12-17 aAucun droit spécifique 1aGenevoisbFrançoise9id:15355 1aBerrierbYves46009id:15356 d2002 027990tBretagne Magazine [1998-....]9id:279909lnk:perio d2002-07-01e07/2002vN° spécial n° 5 de Eté 2002tBretagne sacrée9id:32189lnk:bull00508naa2 22001571i 450 00100060000010000350000600900150004120000240005621500100008031900280009070000260011870200410014421000090018546100620019446300940025627992 a20130429u u u0frey50  a2002-07-011 aAu pays des pardons a84-94 aAucun droit spécifique 1aTeodegbPol9id:15357 1aSandfordbAndrew-Paul46009id:15358 d2002 027990tBretagne Magazine [1998-....]9id:279909lnk:perio d2002-07-01e07/2002vN° spécial n° 5 de Eté 2002tBretagne sacrée9id:32189lnk:bull00612naa2 22001811i 450 00100060000010000350000600900150004120000210005621500100007731900280008770000400011570200360015570200410019170200330023221000090026546100620027446300940033627994 a20130429u u u0frey50  a2002-07-011 aBretagne sacrée a54-73 aAucun droit spécifique 1aGuillaumebJean-Yves46009id:15360 1aPasquetbThierry46009id:15361 1aSandfordbAndrew-Paul46009id:15358 1aBoëllebYvon46009id:15362 d2002 027990tBretagne Magazine [1998-....]9id:279909lnk:perio d2002-07-01e07/2002vN° spécial n° 5 de Eté 2002tBretagne sacrée9id:32189lnk:bull00505naa2 22001571i 450 00100060000010000350000600900150004120000230005621500070007931900280008670000320011470200360014621000090018246100620019146300940025327995 a20130429u u u0frey50  a2002-07-011 aBretons en mission a18 aAucun droit spécifique 1aCucarullbJérôme9id:7905 1aPasquetbThierry46009id:15361 d2002 027990tBretagne Magazine [1998-....]9id:279909lnk:perio d2002-07-01e07/2002vN° spécial n° 5 de Eté 2002tBretagne sacrée9id:32189lnk:bull00523naa2 22001571i 450 00100060000010000350000600900150004120000400005621500100009631900280010670000290013470200370016321000090020046100620020946300940027127996 a20130429u u u0frey50  a2002-07-011 aChevaux chrétiens qui m'écoutez ! a38-40 aAucun droit spécifique 1aTranvouezbYvon9id:4293 1aChapalainbPierre46009id:15363 d2002 027990tBretagne Magazine [1998-....]9id:279909lnk:perio d2002-07-01e07/2002vN° spécial n° 5 de Eté 2002tBretagne sacrée9id:32189lnk:bull00527naa2 22001571i 450 00100060000010000350000600900150004120000420005621500100009831900280010870000330013670200350016921000090020446100620021346300940027527998 a20130429u u u0frey50  a2002-07-011 aEnclos, le sommet de l'art paroissial a46-53 aAucun droit spécifique 1aQuéménerbHervé9id:15354 1aGuillaumebJean-Yves9id:15360 d2002 027990tBretagne Magazine [1998-....]9id:279909lnk:perio d2002-07-01e07/2002vN° spécial n° 5 de Eté 2002tBretagne sacrée9id:32189lnk:bull00523naa2 22001571i 450 00100060000010000350000600900150004120000420005621500100009831900280010870000300013670200340016621000090020046100620020946300940027127999 a20130429u u u0frey50  a2002-07-011 aEnfer du péché, paradis de la vertu a28-31 aAucun droit spécifique 1aRoudautbFañch9id:15365 1aSicardbPadrig46009id:15366 d2002 027990tBretagne Magazine [1998-....]9id:279909lnk:perio d2002-07-01e07/2002vN° spécial n° 5 de Eté 2002tBretagne sacrée9id:32189lnk:bull00519naa2 22001571i 450 00100060000010000350000600900150004120000360005621500100009231900280010270000330013070200330016321000090019646100620020546300940026728000 a20130429u u u0frey50  a2002-07-011 aEt les saints prirent la mer... a24-27 aAucun droit spécifique 1aQuéménerbHervé9id:15354 1aBoëllebYvon46009id:15362 d2002 027990tBretagne Magazine [1998-....]9id:279909lnk:perio d2002-07-01e07/2002vN° spécial n° 5 de Eté 2002tBretagne sacrée9id:32189lnk:bull00525naa2 22001571i 450 00100060000010000350000600900150004120000360005621500090009231900280010170000330012970200400016221000090020246100620021146300940027328001 a20130429u u u0frey50  a2002-07-011 aGusti Hervé, curé de campagne a8-10 aAucun droit spécifique 1aQuéménerbHervé9id:15354 1aGuillaumebJean-Yves46009id:15360 d2002 027990tBretagne Magazine [1998-....]9id:279909lnk:perio d2002-07-01e07/2002vN° spécial n° 5 de Eté 2002tBretagne sacrée9id:32189lnk:bull00479naa2 22001451i 450 00100060000010000350000600900150004120000410005621500120009731900280010970000310013721000090016846100620017746300940023928002 a20130429u u u0frey50  a2002-07-011 aIsabelle Gargadennec, l'ange-gardien a115-116 aAucun droit spécifique 1aFleitourbAnnick9id:15367 d2002 027990tBretagne Magazine [1998-....]9id:279909lnk:perio d2002-07-01e07/2002vN° spécial n° 5 de Eté 2002tBretagne sacrée9id:32189lnk:bull00517naa2 22001571i 450 00100060000010000350000600900150004120000340005621500120009031900280010270000310013070200330016121000090019446100620020346300940026528003 a20130429u u u0frey50  a2002-07-011 aL'hôpital des saints de bois a110-112 aAucun droit spécifique 1aFleitourbAnnick9id:15367 1aBerrierbYves46009id:15356 d2002 027990tBretagne Magazine [1998-....]9id:279909lnk:perio d2002-07-01e07/2002vN° spécial n° 5 de Eté 2002tBretagne sacrée9id:32189lnk:bull00513naa2 22001571i 450 00100060000010000350000600900150004120000300005621500100008631900280009670000330012470200330015721000090019046100620019946300940026128004 a20130429u u u0frey50  a2002-07-011 aLa marche des Sept Saints a78-83 aAucun droit spécifique 1aQuéménerbHervé9id:15354 1aBoëllebYvon46009id:15362 d2002 027990tBretagne Magazine [1998-....]9id:279909lnk:perio d2002-07-01e07/2002vN° spécial n° 5 de Eté 2002tBretagne sacrée9id:32189lnk:bull00457naa2 22001451i 450 00100060000010000350000600900150004120000230005621500100007931900280008970000290011721000090014646100620015546300940021728005 a20130429u u u0frey50  a2002-07-011 aLe diable au corps a32-37 aAucun droit spécifique 1aMarhicbRenaud9id:15368 d2002 027990tBretagne Magazine [1998-....]9id:279909lnk:perio d2002-07-01e07/2002vN° spécial n° 5 de Eté 2002tBretagne sacrée9id:32189lnk:bull00480naa2 22001451i 450 00100060000010000350000600900150004120000460005621500060010231900280010870000330013621000090016946100620017846300940024028006 a20130429u u u0frey50  a2002-07-011 aLe dialogue de l'Eglise et de la Bretagne a3 aAucun droit spécifique 1aQuéménerbHervé9id:15354 d2002 027990tBretagne Magazine [1998-....]9id:279909lnk:perio d2002-07-01e07/2002vN° spécial n° 5 de Eté 2002tBretagne sacrée9id:32189lnk:bull00529naa2 22001571i 450 00100060000010000350000600900150004120000420005621500120009831900280011070000320013870200360017021000090020646100620021546300940027728007 a20130429u u u0frey50  a2002-07-011 aMaîtres de l'ombre et de la lumière a106-109 aAucun droit spécifique 1aCucarullbJérôme9id:7905 1aPasquetbThierry46009id:15361 d2002 027990tBretagne Magazine [1998-....]9id:279909lnk:perio d2002-07-01e07/2002vN° spécial n° 5 de Eté 2002tBretagne sacrée9id:32189lnk:bull00471naa2 22001451i 450 00100060000010000350000600900150004120000250005621500120008131900280009370000390012121000090016046100620016946300940023128008 a20130429u u u0frey50  a2002-07-011 aMon petit séminaire a119-125 aAucun droit spécifique 1aCoatmeurbJean-François9id:15369 d2002 027990tBretagne Magazine [1998-....]9id:279909lnk:perio d2002-07-01e07/2002vN° spécial n° 5 de Eté 2002tBretagne sacrée9id:32189lnk:bull00519naa2 22001571i 450 00100060000010000350000600900150004120000390005621500070009531900280010270000330013070200330016321000090019646100620020546300940026728009 a20130429u u u0frey50  a2002-07-011 aPierre Guichou, le dernier témoin a20 aAucun droit spécifique 1aQuéménerbHervé9id:15354 1aTanguybRené46009id:15370 d2002 027990tBretagne Magazine [1998-....]9id:279909lnk:perio d2002-07-01e07/2002vN° spécial n° 5 de Eté 2002tBretagne sacrée9id:32189lnk:bull01038naa2 22001091i 450 0010010000001000035000102000117000452100009001624630137001719950086003089960534003943218-bull a20200229u u u0frey50 1 aBretagne sacrée, 07/2002dArticle_expl_bulletinhBretagne Magazine [1998-....]iN° spécial n° 5 de Eté 2002 d2002 027990d2002-07-01e07/2002vN° spécial n° 5 de Eté 2002tBretagne sacréetBretagne Magazine [1998-....]9id:32189lnk:bull_expl aMédiathèque Saint-YvescMédiathèque Saint-Yvesf13928kL112ruuqFonds Breton f13928kL112m00000000n00000000aMédiathèque Saint-Yvesb1vMédiathèque xFonds bretonyFonds BretonePERIODIQUE1Empruntable319expl_id:149339create_date:2013-04-29 09:21:289expl_cb:139289expl_cote:L1129expl_statut:19statut_libelle:Empruntable9expl_typdoc:29tdoc_libelle:PERIODIQUE9expl_section:169section_libelle:Fonds breton9sdoc_codage_import:Fonds Breton9expl_owner:19lender_libelle:Médiathèque Saint-Yves9codestat_libelle:Exemplaires9pret_flag:19location_libelle:Médiathèque 9locdoc_codage_import:5
\ No newline at end of file
......@@ -143,11 +143,11 @@ class Class_AdminVarLoader extends Storm_Model_Loader {
protected function _getTemplatingVars() {
return [
'TEMPLATING' => Class_AdminVar_Meta::newOnOff('Active l\'accès au magasin de thèmes',
['value' => 0])->bePrivate(),
'TEMPLATING' => Class_AdminVar_Meta::newOnOff($this->_('Active l\'accès au magasin de thèmes'),
['value' => 0]),
'MYBIBAPP_TEMPLATE' => Class_AdminVar_Meta::newOnOff('Active la génération automatique du thème pour MyBibApp',
['value' => 0])->bePrivate()
'MYBIBAPP_TEMPLATE' => Class_AdminVar_Meta::newOnOff($this->_('Active la génération automatique du thème pour MyBibApp'),
['value' => 0])
];
}
......@@ -226,6 +226,8 @@ class Class_AdminVarLoader extends Storm_Model_Loader {
'ARTE_VOD_LOGIN' => Class_AdminVar_Meta::newDefault($this->_('Login utilisé pour générer l\'adresse https://vod.mediatheque-numerique.com/mediatheques/[ARTE VOD LOGIN]'))->bePrivate(),
'ARTE_VOD_KEY' => Class_AdminVar_Meta::newDefault($this->_('Clé de moissonnage (optionelle)'))->bePrivate(),
'ARTE_VOD_SSO_KEY' => Class_AdminVar_Meta::newDefault($this->_('Clé de cryptage lors du SSO'))->bePrivate(),
'ARTE_VOD_COUNTRY' => Class_AdminVar_Meta::newDefault($this->_('Pays de diffusion utilisé lors du moissonnage (par défaut FR, ALL pour ne pas filtrer)'),
['value' => 'FR'])->bePrivate(),
'NUMERIQUE_PREMIUM_URL' => Class_AdminVar_Meta::newDefault('')->bePrivate(),
......
......@@ -76,7 +76,7 @@ class Class_ArteVodLink {
'nom' => $this->_user->getNom(),
'email' => $this->_user->getMail(),
'dnaiss' => $this->_user->getNaissance(),
'datout' => $this->_user->getDateFin(),
'datout' => $this->_user->getValidSubscriptionEndDate(),
'return_url' => $this->baseUrl(),
'referer' => Class_Url::getProtocol(). Class_AdminVar::getNomDomaine()];
......
......@@ -152,9 +152,6 @@ class Class_DigitalResource extends Class_Entity {
if (!$this->isPluginDocType($plugin))
return false;
if ($user->isAbonne() && !$user->isAbonnementValid())
return false;
if(!$this->hasPermissionOn($plugin, $user))
return false;
......
......@@ -796,6 +796,7 @@ class Class_Feature_List {
'Wiki' => 'http://wiki.bokeh-library-portal.org/index.php?title=Import_des_p%C3%A9riodiques_Koha_dans_Bokeh',
'Test' => '',
'Date' => '2020-02-06'],
'106075' =>
['Label' => $this->_('Serveurs d\'identité tiers'),
'Desc' => $this->_('Bokeh permet aux abonnés d\'associer leurs comptes FranceConnect, Google et plus généralement OpenId à leur compte Bokeh.'),
......@@ -807,6 +808,16 @@ class Class_Feature_List {
'Test' => '',
'Date' => '2020-02-27'],
'93357' =>
['Label' => $this->_('SIGB Decalog Flora'),
'Desc' => $this->_('Support des web services du SIGB Decalog Flora (disponibilité temps réel, réservations, compte lecteur)'),
'Image' => '',
'Video' => '',
'Category' => $this->_('Communication SIGB'),
'Right' => function($feature_description, $user) {return true;},
'Wiki' => 'http://wiki.bokeh-library-portal.org/index.php?title=SIGB_Flora',
'Test' => '',
'Date' => '2020-01-23'],
];
}
}
\ No newline at end of file
......@@ -376,7 +376,7 @@ class Class_FileManager_FileSystem {
$found = array_slice($found, 0, Class_FileManager_FileSystem::LISTING_LIMIT);
}
return array_filter(array_map([Class_FileManager, 'find'], $found));
return array_filter(array_map([Class_FileManager::class, 'find'], $found));
};
return (new Storm_Cache())
......
......@@ -984,6 +984,11 @@ class Class_IntProfilDonnees extends Storm_Model_Abstract {
}
public function setItemZone($value) {
return $this->setItemField(self::FIELD_ITEM_ZONE, $value);
}
public function getBarCodeField() {
return unserialize($this->getAttributs())[0][self::FIELD_ITEM_BARCODE];
}
......
......@@ -92,10 +92,11 @@ class Class_User_SearchCriteriaValidSubscription extends Class_SearchCriteria_Ab
}
public function modelMatch($user) {
return $user->isAbonne()
? $user->isAbonnementValid()
: true;
public function modelMatch($model) {
if (!$this->_should_filter)
return true;
return $model->isValid();
}
......
......@@ -79,7 +79,7 @@ class Class_User_SearchCriteria_Age extends Class_SearchCriteria_Abstract {
if ($this->_hasFrom()
&& ($date = $this->substractYearsToCurrentDate((int)$this->_from))
&& $user->getNaissance() < $date) {
&& $user->getNaissance() > $date) {
return false;
}
......@@ -87,7 +87,7 @@ class Class_User_SearchCriteria_Age extends Class_SearchCriteria_Abstract {
return true;
$date = $this->substractYearsToCurrentDate((int)$this->_to);
return $user->getNaissance() <= $date;
return $user->getNaissance() >= $date;
}
......
......@@ -28,7 +28,7 @@ class UserGroupLoader extends Storm_Model_Loader {
public function save($model) {
$result = parent::save($model);
if ($model->isDynamic())
$this->_dynamics_of_user_cache = [];
$this->resetDynamicsOfUserCache();
return $result;
}
......@@ -123,9 +123,18 @@ class UserGroupLoader extends Storm_Model_Loader {
}
public function resetDynamicsOfUserCache() {
$this->_dynamics_of_user_cache = [];
return $this;
}
protected function _realFindAllDynamicsOf($user) {
return array_filter(Class_UserGroup::findAllDynamics(),
function($group) use($user) { return $group->hasUser($user); });
function($group) use($user)
{
return $group->hasUser($user);
});
}
}
......
......@@ -874,13 +874,6 @@ class Class_Users extends Storm_Model_Abstract {
}
public function isAbonneAndHasRightToAccess($access_name) {
if ($this->isAbonne() && !$this->isAbonnementValid())
return false;
return $this->hasRightToAccess($access_name);
}
/**
* @return array
*/
......@@ -965,57 +958,57 @@ class Class_Users extends Storm_Model_Abstract {
* @return bool
*/
public function hasRightAccessNumeriquePremium() {
return $this->isAbonneAndHasRightToAccess(Class_UserGroup::RIGHT_ACCES_NUMERIQUEPREMIUM);
return $this->hasRightToAccess(Class_UserGroup::RIGHT_ACCES_NUMERIQUEPREMIUM);
}
public function hasRightAccesArteVod() {
return $this->isAbonneAndHasRightToAccess(Class_UserGroup::RIGHT_ACCES_ARTEVOD);
return $this->hasRightToAccess(Class_UserGroup::RIGHT_ACCES_ARTEVOD);
}
public function hasRightAccesNumilog() {
return $this->isAbonneAndHasRightToAccess(Class_UserGroup::RIGHT_ACCES_NUMILOG);
return $this->hasRightToAccess(Class_UserGroup::RIGHT_ACCES_NUMILOG);
}
public function hasRightAccesVodeclic() {
return $this->isAbonneAndHasRightToAccess(Class_UserGroup::RIGHT_ACCES_VODECLIC);
return $this->hasRightToAccess(Class_UserGroup::RIGHT_ACCES_VODECLIC);
}
public function hasRightAccessCyberlibris() {
return $this->isAbonneAndHasRightToAccess(Class_UserGroup::RIGHT_ACCES_CYBERLIBRIS);
return $this->hasRightToAccess(Class_UserGroup::RIGHT_ACCES_CYBERLIBRIS);
}
public function hasRightAccessCiteDeLaMusique() {
return $this->isAbonneAndHasRightToAccess(Class_UserGroup::RIGHT_ACCESS_CITEDELAMUSIQUE);
return $this->hasRightToAccess(Class_UserGroup::RIGHT_ACCESS_CITEDELAMUSIQUE);
}
public function hasRightAccessMyCow() {
return $this->isAbonneAndHasRightToAccess(Class_UserGroup::RIGHT_ACCES_MYCOW);
return $this->hasRightToAccess(Class_UserGroup::RIGHT_ACCES_MYCOW);
}
public function hasRightAccessPlanetNemo() {
return $this->isAbonneAndHasRightToAccess(Class_UserGroup::RIGHT_ACCES_PLANETNEMO);
return $this->hasRightToAccess(Class_UserGroup::RIGHT_ACCES_PLANETNEMO);
}
public function hasRightAccesKidilangues() {
return $this->isAbonneAndHasRightToAccess(Class_UserGroup::RIGHT_ACCES_KIDILANGUES);
return $this->hasRightToAccess(Class_UserGroup::RIGHT_ACCES_KIDILANGUES);
}
public function hasRightAccessDilicom() {
return $this->isAbonneAndHasRightToAccess(Class_UserGroup::RIGHT_ACCES_PNB_DILICOM);
return $this->hasRightToAccess(Class_UserGroup::RIGHT_ACCES_PNB_DILICOM);
}
public function hasRightAccessLeSocial() {
return $this->isAbonneAndHasRightToAccess(Class_UserGroup::RIGHT_ACCESS_LESOCIAL);
return $this->hasRightToAccess(Class_UserGroup::RIGHT_ACCESS_LESOCIAL);
}
......@@ -1930,4 +1923,11 @@ class Class_Users extends Storm_Model_Abstract {
$this->save();
return $this;
}
public function getValidSubscriptionEndDate() {
if ($this->getDateFin() && ($this->getDateFin()) > ($this->getCurrentDate()))
return $this->getDateFin();
return $this->addDaysToCurrentDate(30);
}
}
......@@ -20,12 +20,18 @@
*/
class Class_WebService_BibNumerique_ArteVOD extends Class_WebService_BibNumerique_Abstract {
const FILMS = 'films';
const CATEGORY_LABEL = 'ArteVOD';
const
FILMS = 'films',
CATEGORY_LABEL = 'ArteVOD',
COUNTRY_ALL = 'ALL';
public function getHarvestUrl($page_number){
return $this->getBaseUrl() . self::FILMS . '?page_nb=' . $page_number;
public function getHarvestUrl($page_number) {
$params = ['page_nb' => (int)$page_number];
if (static::COUNTRY_ALL !== ($country = Class_AdminVar::getValueOrDefault('ARTE_VOD_COUNTRY')))
$params['q_country'] = $country;
return $this->getBaseUrl() . static::FILMS . '?' . http_build_query($params);
}
......@@ -46,7 +52,8 @@ class Class_WebService_BibNumerique_ArteVOD extends Class_WebService_BibNumeriqu
public function open_authenticated_url($url) {
$client = $this->getWebClient();
return ($user = trim(Class_AdminVar::get('ARTE_VOD_LOGIN'))) && ($password = trim(Class_AdminVar::get('ARTE_VOD_KEY')))
return ($user = trim(Class_AdminVar::get('ARTE_VOD_LOGIN')))
&& ($password = trim(Class_AdminVar::get('ARTE_VOD_KEY')))
? $client->open_url($url, ['auth' => ['user' => $user,
'password' => $password]])
: $client->open_url($url);
......
......@@ -142,9 +142,12 @@ class Class_WebService_BibNumerique_ArteVOD_Config extends Class_Entity {
public function getAdminVarsInstances() {
return [ Class_AdminVar::find('ARTE_VOD_LOGIN'),
Class_AdminVar::find('ARTE_VOD_KEY'),
Class_AdminVar::find('ARTE_VOD_SSO_KEY')
Class_AdminVar::init();
return [Class_AdminVar::find('ARTE_VOD_LOGIN'),
Class_AdminVar::find('ARTE_VOD_KEY'),
Class_AdminVar::find('ARTE_VOD_SSO_KEY'),
Class_AdminVar::find('ARTE_VOD_COUNTRY'),
];
}
......
......@@ -175,6 +175,16 @@ class ZendAfi_Controller_Plugin_Manager_UserGroup extends ZendAfi_Controller_Plu
}
protected function _canEdit($model) {
return !$model->isDedicated();
}
protected function _canDelete($model) {
return !$model->isDedicated();
}
protected function _getPost($key = null, $default = null) {
$post = $this->_request->getPost();
if(!isset($post[ZendAfi_Form_Admin_UserGroup::RIGHTS_PERMISSIONS]))
......@@ -261,25 +271,33 @@ class ZendAfi_Controller_Plugin_Manager_UserGroup extends ZendAfi_Controller_Plu
protected function _getLeafsActions($model) {
return [
['url' => '/admin/usergroup/editmembers/id/%s',
'icon' => 'users',
'label' => $this->_('Membres'),
'caption' => 'formatedCount'
],
['url' => '/admin/usergroup/edit/id/%s',
'icon' => 'edit',
'label' => $this->_('Modifier'),
],
['url' => '/admin/usergroup/delete/id/%s',
'icon' => 'delete',
'label' => $this->_('Supprimer'),
'anchorOptions' => [
'onclick' => "return confirm('Etes-vous sûr de vouloir supprimer ce groupe ?')"
]]
];
$actions = [['url' => '/admin/usergroup/editmembers/id/%s',
'icon' => 'users',
'label' => $this->_('Membres'),
'caption' => 'formatedCount'
]];
if ($model->isDedicatedTo(Class_Newsletter::class)) {
$actions[] = ['url' => '/admin/newsletter/edit-subscribers/id/' . $model->getModelId(),
'icon' => 'back',
'label' => $this->_('Retour aux destinataires de la lettres')];
return $actions;
}
return array_merge($actions,
[
['url' => '/admin/usergroup/edit/id/%s',
'icon' => 'edit',
'label' => $this->_('Modifier'),
],
['url' => '/admin/usergroup/delete/id/%s',
'icon' => 'delete',
'label' => $this->_('Supprimer'),
'anchorOptions' => [
'onclick' => "return confirm('Etes-vous sûr de vouloir supprimer ce groupe ?')"
]]
]);
}
}
?>
\ No newline at end of file
......@@ -29,6 +29,7 @@ class ZendAfi_Validate_VignetteUrl extends Zend_Validate_Abstract {
'www\.adav-assoc\.com\/.*\/GetImage\/',
'\/dam_picture.php\?id=',
'\/getimage.php\?url_image=',
'assets\.edenlivres\.fr',
];
......
......@@ -236,9 +236,7 @@ class Cvs_Service {
'dnaiss' => (($naissance = $user->getNaissance())
? Class_Date::frToIso($naissance)
: ''),
'datout' => (($finabo = $user->getDateFin())
? Class_Date::frToIso($finabo)
: ''),
'datout' => Class_Date::frToIso($user->getValidSubscriptionEndDate()),
'bibliotheque' => (($label = $this->_var('BMLABEL'))
? $label : $user->getLibelleBib())]);
......
......@@ -29,6 +29,7 @@ abstract class CvsActivatedTestCase extends AbstractControllerTestCase {
public function setUp() {
parent::setUp();
Class_Users::setTimeSource(new TimeSourceForTest('2020-03-10'));
Class_AdminVar::set('Cvs_BMKEY', '22222');
Class_AdminVar::set('Cvs_BMID', '22223');
......@@ -648,6 +649,7 @@ class CvsSearchWithDemoAccountTest extends CvsActivatedTestCase {
<page><![CDATA[1]]></page>
<nombre_par_page><![CDATA[5]]></nombre_par_page>
<login>cvs_login_test</login>
<datout>2020-04-09</datout>
</body>
</albums>';
......@@ -792,6 +794,100 @@ l’école primaire, l’adaptation du matériel aux pratiques pédagogiques.',
class CvsSearchWithJerryExpiredLoggedTest extends CvsActivatedTestCase {
protected
$_cvs,
$_result;
public function setUp() {
parent::setUp();
$jerry = $this->fixture('Class_Users',
['id' => 4,
'idabon' => 34,
'login' => 34,
'pseudo' => 'J&Khan',
'prenom' => 'Jerry',
'nom' => 'Khan',
'mail' => 'feu@essence.fr',
'password' => 'secret',
'role_level' => ZendAfi_Acl_AdminControllerRoles::ABONNE_SIGB,
'id_site' => 1,
'date_fin' => '2000-09-02',
'naissance' => '1977-06-27']);
$jerry->setBib($this->fixture('Class_Bib',
['id' => 34,
'libelle' => 'Annecy']));
ZendAfi_Auth::getInstance()->logUser($jerry);
$this->_cvs = new Cvs_Service;
$http_client = $this
->mock()
->whenCalled('postData')
->with(Class_AdminVar::get('Cvs_API_URL'),
['xml' => $this->_expectedXML()])
->answers($this->_returnedXML())
->beStrict();
Class_WebService_Abstract::setHttpClient($http_client);
$this->_result = $this->_cvs->find('ecole', 1, 5);
}
protected function _expectedXML() {
$xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>
<albums>
<header>
<bmid>22223</bmid>
<sourceid>22225</sourceid>
<key>d0a1b72e8e6d7af27d400e2009c1a873</key>
<time>1369640315</time>
<adhid>34</adhid>
<action>search_document</action>
</header>
<body>
<q><![CDATA[ecole]]></q>
<espace><![CDATA[]]></espace>
<classement><![CDATA[consultes]]></classement>
<page><![CDATA[1]]></page>
<nombre_par_page><![CDATA[5]]></nombre_par_page>
<login>34</login>
<nom>Khan</nom>
<prenom>Jerry</prenom>
<pseudo>J&amp;Khan</pseudo>
<password>secret</password>
<email>feu@essence.fr</email>
<dnaiss>1977-06-27</dnaiss>
<datout>2020-04-09</datout>
<bibliotheque>Annecy</bibliotheque>
</body>
</albums>";
$dom = $this->_cvs->createDomDocument();
$dom->loadXML($xml);
return $this->_cvs->getEncodedXML($dom->saveXML());
}
protected function _returnedXML() {
return file_get_contents(__DIR__ . '/cvs_search_ecole.xml');
}
/** @test */
public function searchEcoleShouldReturnTitleForFirstNoticeEtreEtAvoir() {
$this->assertEquals('Etre et avoir',
$this->_result->getRecords()[0]->getTitrePrincipal());
}
}
class CvsLinkWithBorrowerTest extends CvsActivatedTestCase {
protected
......@@ -1036,6 +1132,7 @@ class CvsSearchWithAnonymousAccessTest extends CvsActivatedTestCase {
<page><![CDATA[1]]></page>
<nombre_par_page><![CDATA[5]]></nombre_par_page>
<login>cvs_login_test</login>
<datout>2020-04-09</datout>
</body>
</albums>';
......
......@@ -89,7 +89,7 @@ class LesYeuxDoc_Config extends Class_DigitalResource_Config {
'nom' => $user->getNom(),
'email' => $user->getMail(),
'dnaiss' => ($date = $user->getNaissance()) ? $date : '',
'datout' => $user->getDateFin(),
'datout' => $user->getValidSubscriptionEndDate(),
'return_url' => $return_url];
return $this->getAdminVar('SSO_URL')
......
......@@ -77,6 +77,8 @@ class LesYeuDocDashboardTestCase extends LesYeuxDocActivatedTestCase {
public function setUp() {
parent::setUp();
Class_Users::setTimeSource(new TimeSourceForTest('2020-03-10'));
$this->dispatch('/LesYeuxDoc_Plugin', true);
}
......@@ -89,14 +91,14 @@ class LesYeuDocDashboardTestCase extends LesYeuxDocActivatedTestCase {
/** @test */
public function ssoUrlForTestUserShouldBePortalMediathequeNumerique() {
$this->assertContains('<pre>https://portal.mediatheque-numerique.com/sso_login?sso_id=afi&id=79&id_encrypted=aff73a5e918d0cbefa1077d3468cfcfc03abd9c94b3d827b1b7dd283db2450f9&d=d0f3e0faa0b2546ea784554bea817f2dcac68a0c5e658ce907af0711e6674e53&prenom=&nom=&email=&dnaiss=&datout=&return_url=https%3A%2F%2Fwww.lesyeuxdoc.fr</pre>',
$this->assertContains('<pre>https://portal.mediatheque-numerique.com/sso_login?sso_id=afi&id=79&id_encrypted=aff73a5e918d0cbefa1077d3468cfcfc03abd9c94b3d827b1b7dd283db2450f9&d=d0f3e0faa0b2546ea784554bea817f2dcac68a0c5e658ce907af0711e6674e53&prenom=&nom=&email=&dnaiss=&datout=2020-04-09&return_url=https%3A%2F%2Fwww.lesyeuxdoc.fr</pre>',
$this->_response->getBody());
}
/** @test */
public function ssoUrlForTestUserAndAlbumOlivierRolinShouldBePortalMediathequeNumerique() {
$this->assertContains('<pre>https://portal.mediatheque-numerique.com/sso_login?sso_id=afi&id=79&id_encrypted=aff73a5e918d0cbefa1077d3468cfcfc03abd9c94b3d827b1b7dd283db2450f9&d=d0f3e0faa0b2546ea784554bea817f2dcac68a0c5e658ce907af0711e6674e53&prenom=&nom=&email=&dnaiss=&datout=&return_url=https%3A%2F%2Fwww.lesyeuxdoc.fr%2Ffilm%2F703%2Folivier-rolin</pre>',
$this->assertContains('<pre>https://portal.mediatheque-numerique.com/sso_login?sso_id=afi&id=79&id_encrypted=aff73a5e918d0cbefa1077d3468cfcfc03abd9c94b3d827b1b7dd283db2450f9&d=d0f3e0faa0b2546ea784554bea817f2dcac68a0c5e658ce907af0711e6674e53&prenom=&nom=&email=&dnaiss=&datout=2020-04-09&return_url=https%3A%2F%2Fwww.lesyeuxdoc.fr%2Ffilm%2F703%2Folivier-rolin</pre>',
$this->_response->getBody());
}
}
......@@ -299,6 +301,22 @@ class LesYeuDocModuleSsoTest extends AbstractControllerTestCase {
'document.location.href="http://lesyeuxdoc.com?sso_id=afi&id=2345&id_encrypted=8043a43d11f8daccc5b1a0a5ccbadedd1a3edba6b551c0ca1abaf42e49a36158&d=d0f3e0faa0b2546ea784554bea817f2dcac68a0c5e658ce907af0711e6674e53&prenom=Jean&nom=Rouch&email=rouch%40ethno.fr&dnaiss=1975-01-01&datout=2023-01-01&return_url=https%3A%2F%2Fwww.lesyeuxdoc.fr";',
$this->_response->getBody());
}
/** @test */
public function withExpiredSubscriptionshouldRedirectToLesYeuxDocWithValidDate() {