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 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 #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 #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 #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 - 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 { ...@@ -1134,13 +1134,19 @@ class notice_unimarc extends iso2709_record {
$label = $this->inner_guide['dt'] . $this->inner_guide['bl']; $label = $this->inner_guide['dt'] . $this->inner_guide['bl'];
$champ_code_barres = $this->getBarcode(); $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']) { 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, $z995r = $this->get_subfield($zone,
$this->profil['attributs'][0]['champ_type_doc']); $this->profil['attributs'][0]['champ_type_doc']);
} else { } else {
$z995r = $this->get_subfield('995', 'r'); $z995r = $this->get_subfield($zone, 'r');
$z995p = $this->get_subfield('995', 'p'); $z995p = $this->get_subfield($zone, 'p');
if($champ_code_barres == '997') if($champ_code_barres == '997')
$z995r = $this->get_subfield('997', 't'); $z995r = $this->get_subfield('997', 't');
elseif($champ_code_barres == '852') elseif($champ_code_barres == '852')
......
...@@ -244,4 +244,52 @@ class PMBIntegrationSerialsTest extends PMBIntegrationRecordsTestCase { ...@@ -244,4 +244,52 @@ class PMBIntegrationSerialsTest extends PMBIntegrationRecordsTestCase {
$this->assertEquals('Revue française de pédagogie', $this->assertEquals('Revue française de pédagogie',
Class_Notice::findFirstBy(['type_doc' => 2])->getTitreChapeau()); 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
This diff is collapsed.
...@@ -143,11 +143,11 @@ class Class_AdminVarLoader extends Storm_Model_Loader { ...@@ -143,11 +143,11 @@ class Class_AdminVarLoader extends Storm_Model_Loader {
protected function _getTemplatingVars() { protected function _getTemplatingVars() {
return [ return [
'TEMPLATING' => Class_AdminVar_Meta::newOnOff('Active l\'accès au magasin de thèmes', 'TEMPLATING' => Class_AdminVar_Meta::newOnOff($this->_('Active l\'accès au magasin de thèmes'),
['value' => 0])->bePrivate(), ['value' => 0]),
'MYBIBAPP_TEMPLATE' => Class_AdminVar_Meta::newOnOff('Active la génération automatique du thème pour MyBibApp', 'MYBIBAPP_TEMPLATE' => Class_AdminVar_Meta::newOnOff($this->_('Active la génération automatique du thème pour MyBibApp'),
['value' => 0])->bePrivate() ['value' => 0])
]; ];
} }
...@@ -226,6 +226,8 @@ class Class_AdminVarLoader extends Storm_Model_Loader { ...@@ -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_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_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_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(), 'NUMERIQUE_PREMIUM_URL' => Class_AdminVar_Meta::newDefault('')->bePrivate(),
......
...@@ -76,7 +76,7 @@ class Class_ArteVodLink { ...@@ -76,7 +76,7 @@ class Class_ArteVodLink {
'nom' => $this->_user->getNom(), 'nom' => $this->_user->getNom(),
'email' => $this->_user->getMail(), 'email' => $this->_user->getMail(),
'dnaiss' => $this->_user->getNaissance(), 'dnaiss' => $this->_user->getNaissance(),
'datout' => $this->_user->getDateFin(), 'datout' => $this->_user->getValidSubscriptionEndDate(),
'return_url' => $this->baseUrl(), 'return_url' => $this->baseUrl(),
'referer' => Class_Url::getProtocol(). Class_AdminVar::getNomDomaine()]; 'referer' => Class_Url::getProtocol(). Class_AdminVar::getNomDomaine()];
......
...@@ -152,9 +152,6 @@ class Class_DigitalResource extends Class_Entity { ...@@ -152,9 +152,6 @@ class Class_DigitalResource extends Class_Entity {
if (!$this->isPluginDocType($plugin)) if (!$this->isPluginDocType($plugin))
return false; return false;
if ($user->isAbonne() && !$user->isAbonnementValid())
return false;
if(!$this->hasPermissionOn($plugin, $user)) if(!$this->hasPermissionOn($plugin, $user))
return false; return false;
......
...@@ -796,6 +796,7 @@ class Class_Feature_List { ...@@ -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', 'Wiki' => 'http://wiki.bokeh-library-portal.org/index.php?title=Import_des_p%C3%A9riodiques_Koha_dans_Bokeh',
'Test' => '', 'Test' => '',
'Date' => '2020-02-06'], 'Date' => '2020-02-06'],
'106075' => '106075' =>
['Label' => $this->_('Serveurs d\'identité tiers'), ['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.'), '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 { ...@@ -807,6 +808,16 @@ class Class_Feature_List {
'Test' => '', 'Test' => '',
'Date' => '2020-02-27'], '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 { ...@@ -376,7 +376,7 @@ class Class_FileManager_FileSystem {
$found = array_slice($found, 0, Class_FileManager_FileSystem::LISTING_LIMIT); $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()) return (new Storm_Cache())
......
...@@ -984,6 +984,11 @@ class Class_IntProfilDonnees extends Storm_Model_Abstract { ...@@ -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() { public function getBarCodeField() {
return unserialize($this->getAttributs())[0][self::FIELD_ITEM_BARCODE]; return unserialize($this->getAttributs())[0][self::FIELD_ITEM_BARCODE];
} }
......
...@@ -92,10 +92,11 @@ class Class_User_SearchCriteriaValidSubscription extends Class_SearchCriteria_Ab ...@@ -92,10 +92,11 @@ class Class_User_SearchCriteriaValidSubscription extends Class_SearchCriteria_Ab
} }
public function modelMatch($user) { public function modelMatch($model) {
return $user->isAbonne() if (!$this->_should_filter)
? $user->isAbonnementValid() return true;
: true;
return $model->isValid();
} }
......
...@@ -79,7 +79,7 @@ class Class_User_SearchCriteria_Age extends Class_SearchCriteria_Abstract { ...@@ -79,7 +79,7 @@ class Class_User_SearchCriteria_Age extends Class_SearchCriteria_Abstract {
if ($this->_hasFrom() if ($this->_hasFrom()
&& ($date = $this->substractYearsToCurrentDate((int)$this->_from)) && ($date = $this->substractYearsToCurrentDate((int)$this->_from))
&& $user->getNaissance() < $date) { && $user->getNaissance() > $date) {
return false; return false;
} }
...@@ -87,7 +87,7 @@ class Class_User_SearchCriteria_Age extends Class_SearchCriteria_Abstract { ...@@ -87,7 +87,7 @@ class Class_User_SearchCriteria_Age extends Class_SearchCriteria_Abstract {
return true; return true;
$date = $this->substractYearsToCurrentDate((int)$this->_to); $date = $this->substractYearsToCurrentDate((int)$this->_to);
return $user->getNaissance() <= $date; return $user->getNaissance() >= $date;
} }
......
...@@ -28,7 +28,7 @@ class UserGroupLoader extends Storm_Model_Loader { ...@@ -28,7 +28,7 @@ class UserGroupLoader extends Storm_Model_Loader {
public function save($model) { public function save($model) {
$result = parent::save($model); $result = parent::save($model);
if ($model->isDynamic()) if ($model->isDynamic())
$this->_dynamics_of_user_cache = []; $this->resetDynamicsOfUserCache();
return $result; return $result;
} }
...@@ -123,9 +123,18 @@ class UserGroupLoader extends Storm_Model_Loader { ...@@ -123,9 +123,18 @@ class UserGroupLoader extends Storm_Model_Loader {
} }
public function resetDynamicsOfUserCache() {
$this->_dynamics_of_user_cache = [];
return $this;
}
protected function _realFindAllDynamicsOf($user) { protected function _realFindAllDynamicsOf($user) {
return array_filter(Class_UserGroup::findAllDynamics(), 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 { ...@@ -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 * @return array
*/ */
...@@ -965,57 +958,57 @@ class Class_Users extends Storm_Model_Abstract { ...@@ -965,57 +958,57 @@ class Class_Users extends Storm_Model_Abstract {
* @return bool * @return bool
*/ */
public function hasRightAccessNumeriquePremium() { public function hasRightAccessNumeriquePremium() {
return $this->isAbonneAndHasRightToAccess(Class_UserGroup::RIGHT_ACCES_NUMERIQUEPREMIUM); return $this->hasRightToAccess(Class_UserGroup::RIGHT_ACCES_NUMERIQUEPREMIUM);
} }
public function hasRightAccesArteVod() { public function hasRightAccesArteVod() {
return $this->isAbonneAndHasRightToAccess(Class_UserGroup::RIGHT_ACCES_ARTEVOD); return $this->hasRightToAccess(Class_UserGroup::RIGHT_ACCES_ARTEVOD);
} }
public function hasRightAccesNumilog() { public function hasRightAccesNumilog() {
return $this->isAbonneAndHasRightToAccess(Class_UserGroup::RIGHT_ACCES_NUMILOG); return $this->hasRightToAccess(Class_UserGroup::RIGHT_ACCES_NUMILOG);
} }
public function hasRightAccesVodeclic() { public function hasRightAccesVodeclic() {
return $this->isAbonneAndHasRightToAccess(Class_UserGroup::RIGHT_ACCES_VODECLIC); return $this->hasRightToAccess(Class_UserGroup::RIGHT_ACCES_VODECLIC);
} }
public function hasRightAccessCyberlibris() { public function hasRightAccessCyberlibris() {
return $this->isAbonneAndHasRightToAccess(Class_UserGroup::RIGHT_ACCES_CYBERLIBRIS); return $this->hasRightToAccess(Class_UserGroup::RIGHT_ACCES_CYBERLIBRIS);
} }
public function hasRightAccessCiteDeLaMusique() { public function hasRightAccessCiteDeLaMusique() {
return $this->isAbonneAndHasRightToAccess(Class_UserGroup::RIGHT_ACCESS_CITEDELAMUSIQUE); return $this->hasRightToAccess(Class_UserGroup::RIGHT_ACCESS_CITEDELAMUSIQUE);
} }
public function hasRightAccessMyCow() { public function hasRightAccessMyCow() {
return $this->isAbonneAndHasRightToAccess(Class_UserGroup::RIGHT_ACCES_MYCOW); return $this->hasRightToAccess(Class_UserGroup::RIGHT_ACCES_MYCOW);
} }
public function hasRightAccessPlanetNemo() { public function hasRightAccessPlanetNemo() {
return $this->isAbonneAndHasRightToAccess(Class_UserGroup::RIGHT_ACCES_PLANETNEMO); return $this->hasRightToAccess(Class_UserGroup::RIGHT_ACCES_PLANETNEMO);
} }
public function hasRightAccesKidilangues() { public function hasRightAccesKidilangues() {
return $this->isAbonneAndHasRightToAccess(Class_UserGroup::RIGHT_ACCES_KIDILANGUES); return $this->hasRightToAccess(Class_UserGroup::RIGHT_ACCES_KIDILANGUES);
} }
public function hasRightAccessDilicom() { public function hasRightAccessDilicom() {
return $this->isAbonneAndHasRightToAccess(Class_UserGroup::RIGHT_ACCES_PNB_DILICOM); return $this->hasRightToAccess(Class_UserGroup::RIGHT_ACCES_PNB_DILICOM);
} }
public function hasRightAccessLeSocial() { 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 { ...@@ -1930,4 +1923,11 @@ class Class_Users extends Storm_Model_Abstract {
$this->save(); $this->save();
return $this; return $this;
} }
public function getValidSubscriptionEndDate() {
if ($this->getDateFin() && ($this->getDateFin()) > ($this->getCurrentDate()))
return $this->getDateFin();
return $this->addDaysToCurrentDate(30);
}
} }
...@@ -20,12 +20,18 @@ ...@@ -20,12 +20,18 @@
*/ */
class Class_WebService_BibNumerique_ArteVOD extends Class_WebService_BibNumerique_Abstract { class Class_WebService_BibNumerique_ArteVOD extends Class_WebService_BibNumerique_Abstract {
const FILMS = 'films'; const
const CATEGORY_LABEL = 'ArteVOD'; FILMS = 'films',
CATEGORY_LABEL = 'ArteVOD',
COUNTRY_ALL = 'ALL';
public function getHarvestUrl($page_number){ public function getHarvestUrl($page_number) {
return $this->getBaseUrl() . self::FILMS . '?page_nb=' . $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 ...@@ -46,7 +52,8 @@ class Class_WebService_BibNumerique_ArteVOD extends Class_WebService_BibNumeriqu
public function open_authenticated_url($url) { public function open_authenticated_url($url) {
$client = $this->getWebClient(); $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, ? $client->open_url($url, ['auth' => ['user' => $user,
'password' => $password]]) 'password' => $password]])
: $client->open_url($url); : $client->open_url($url);
......
...@@ -142,9 +142,12 @@ class Class_WebService_BibNumerique_ArteVOD_Config extends Class_Entity { ...@@ -142,9 +142,12 @@ class Class_WebService_BibNumerique_ArteVOD_Config extends Class_Entity {
public function getAdminVarsInstances() { public function getAdminVarsInstances() {
return [ Class_AdminVar::find('ARTE_VOD_LOGIN'), Class_AdminVar::init();
Class_AdminVar::find('ARTE_VOD_KEY'),
Class_AdminVar::find('ARTE_VOD_SSO_KEY') 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 ...@@ -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) { protected function _getPost($key = null, $default = null) {
$post = $this->_request->getPost(); $post = $this->_request->getPost();
if(!isset($post[ZendAfi_Form_Admin_UserGroup::RIGHTS_PERMISSIONS])) if(!isset($post[ZendAfi_Form_Admin_UserGroup::RIGHTS_PERMISSIONS]))
...@@ -261,25 +271,33 @@ class ZendAfi_Controller_Plugin_Manager_UserGroup extends ZendAfi_Controller_Plu ...@@ -261,25 +271,33 @@ class ZendAfi_Controller_Plugin_Manager_UserGroup extends ZendAfi_Controller_Plu
protected function _getLeafsActions($model) { protected function _getLeafsActions($model) {
return [ $actions = [['url' => '/admin/usergroup/editmembers/id/%s',
['url' => '/admin/usergroup/editmembers/id/%s', 'icon' => 'users',
'icon' => 'users', 'label' => $this->_('Membres'),
'label' => $this->_('Membres'), 'caption' => 'formatedCount'
'caption' => 'formatedCount' ]];
],
if ($model->isDedicatedTo(Class_Newsletter::class)) {
['url' => '/admin/usergroup/edit/id/%s', $actions[] = ['url' => '/admin/newsletter/edit-subscribers/id/' . $model->getModelId(),
'icon' => 'edit', 'icon' => 'back',
'label' => $this->_('Modifier'), 'label' => $this->_('Retour aux destinataires de la lettres')];
],
return $actions;
['url' => '/admin/usergroup/delete/id/%s', }
'icon' => 'delete',
'label' => $this->_('Supprimer'), return array_merge($actions,
'anchorOptions' => [ [
'onclick' => "return confirm('Etes-vous sûr de vouloir supprimer ce groupe ?')" ['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 { ...@@ -29,6 +29,7 @@ class ZendAfi_Validate_VignetteUrl extends Zend_Validate_Abstract {
'www\.adav-assoc\.com\/.*\/GetImage\/', 'www\.adav-assoc\.com\/.*\/GetImage\/',
'\/dam_picture.php\?id=', '\/dam_picture.php\?id=',
'\/getimage.php\?url_image=', '\/getimage.php\?url_image=',
'assets\.edenlivres\.fr',
]; ];
......
...@@ -236,9 +236,7 @@ class Cvs_Service { ...@@ -236,9 +236,7 @@ class Cvs_Service {
'dnaiss' => (($naissance = $user->getNaissance()) 'dnaiss' => (($naissance = $user->getNaissance())
? Class_Date::frToIso($naissance) ? Class_Date::frToIso($naissance)
: ''), : ''),
'datout' => (($finabo = $user->getDateFin()) 'datout' => Class_Date::frToIso($user->getValidSubscriptionEndDate()),
? Class_Date::frToIso($finabo)
: ''),
'bibliotheque' => (($label = $this->_var('BMLABEL')) 'bibliotheque' => (($label = $this->_var('BMLABEL'))
? $label : $user->getLibelleBib())]); ? $label : $user->getLibelleBib())]);
......
...@@ -29,6 +29,7 @@ abstract class CvsActivatedTestCase extends AbstractControllerTestCase { ...@@ -29,6 +29,7 @@ abstract class CvsActivatedTestCase extends AbstractControllerTestCase {
public function setUp() { public function setUp() {
parent::setUp(); parent::setUp();
Class_Users::setTimeSource(new TimeSourceForTest('2020-03-10'));
Class_AdminVar::set('Cvs_BMKEY', '22222'); Class_AdminVar::set('Cvs_BMKEY', '22222');
Class_AdminVar::set('Cvs_BMID', '22223'); Class_AdminVar::set('Cvs_BMID', '22223');
...@@ -648,6 +649,7 @@ class CvsSearchWithDemoAccountTest extends CvsActivatedTestCase { ...@@ -648,6 +649,7 @@ class CvsSearchWithDemoAccountTest extends CvsActivatedTestCase {
<page><![CDATA[1]]></page> <page><![CDATA[1]]></page>
<nombre_par_page><![CDATA[5]]></nombre_par_page> <nombre_par_page><![CDATA[5]]></nombre_par_page>
<login>cvs_login_test</login> <login>cvs_login_test</login>
<datout>2020-04-09</datout>
</body> </body>
</albums>'; </albums>';
...@@ -792,6 +794,100 @@ l’école primaire, l’adaptation du matériel aux pratiques pédagogiques.', ...@@ -792,6 +794,100 @@ l’école primaire, l’adaptation du matériel aux pratiques pédagogiques.',
class CvsSearchWithJerryExpiredLoggedTest extends CvsActivatedTestCase {
protected
$_cvs,