Commit c930208b authored by Patrick Barroca's avatar Patrick Barroca 🤞

Merge remote-tracking branch 'refs/remotes/origin/master' into...

Merge remote-tracking branch 'refs/remotes/origin/master' into origin-dev#79874_explo_contractuel_chambery_connecteur_france_connect

# Conflicts:
#	.gitmodules
#	cosmogramme/sql/patch/patch_381.php
#	public/opac/css/global.css
#	tests/application/modules/AbstractControllerTestCase.php
#	tests/db/UpgradeDBTest.php
parents ca6ab7b1 64edba37
Pipeline #9285 failed with stage
in 51 minutes and 37 seconds
[submodule "tests_js/lib/qunit-phantomjs-runner"]
path = tests_js/lib/qunit-phantomjs-runner
url = http://git.afi-sa.fr/afi/qunit-phantomjs-runner.git
url = https://git.afi-sa.net/afi/qunit-phantomjs-runner.git
[submodule "library/storm"]
path = library/storm
url = http://git.afi-sa.fr/afi/storm.git
url = https://git.afi-sa.net/afi/storm.git
[submodule "library/Redmine"]
path = library/Redmine
url = http://git.afi-sa.fr/afi/php-redmine-api.git
url = https://git.afi-sa.net/afi/php-redmine-api.git
[submodule "library/iCal"]
path = library/iCal
url = http://git.afi-sa.net/afi/iCal.git
url = https://git.afi-sa.net/afi/iCal.git
[submodule "library/PhpParser"]
path = library/PhpParser
url = http://git.afi-sa.net/afi/PHP-Parser.git
url = https://git.afi-sa.net/afi/PHP-Parser.git
[submodule "library/matomo-php-tracker"]
path = library/matomo-php-tracker
url = http://git.afi-sa.fr/afi/matomo-php-tracker.git
url = https://git.afi-sa.net/afi/matomo-php-tracker.git
[submodule "library/php-jwt"]
path = library/php-jwt
url = http://git.afi-sa.net/afi/php-jwt.git
url = https://git.afi-sa.net/afi/php-jwt.git
[submodule "library/phpseclib"]
path = library/phpseclib
url = https://git.afi-sa.net/afi/phpseclib.git
......
03/02/2020 - v8.0.40
- ticket #101015 : Articles / Formulaires : Amélioration de la détection des robots
- ticket #101645 : Compte abonné : correction des liens des articles envoyés dans les notifications de nouveaux résultats dans une recherche enregistrée
- ticket #103756 : Intégrations : Correction d'une erreur pouvant survenir lors de l'import des paniers
- ticket #101658 : Ressources numériques : Lekiosk devient Cafeyn
- ticket #92524 : SIGB PMB : Correction des requêtes de disponibilité et de réservation des exemplaires de périodiques
- ticket #101871 : SIGB Koha : les adhérents expirés recoivent un message d'erreur plus explicite lorsqu'une réservation est impossible
- ticket #104609 : Explorateur de fichiers : Ajout de la possibilité de définir d'autres répertoires à afficher dans l'explorateur
- ticket #102749 : Administration des groupes : Les groupes dynamiques utilisent désormais les mêmes critères que la recherche utilisateurs
- ticket #101702 : Administration : Ajout d'un message d'avertissement sur l'accueil si Bokeh n'est pas dans la dernière version
21/01/2020 - v8.0.39
- ticket #103837 : Affichage notices : correction de la détection de l'appartenance des exemplaires à un lot
20/01/2020 - v8.0.38
- ticket #100249 : Ressources numériques: Ajout d'un tableau de bord pour ArteVOD
- ticket #100141 : Ressources numériques : Correction de la détection de la désactivation de Planet Nemo
- ticket #98544 : Articles : correction de la publication des articles en fonction de leur statut.
- ticket #98102 : Notices d'album : le bouton "générer" la vignette force le re-téléchargement pour les ressources numériques externes
- ticket #102979 : Pages : Correction de la perte de boîte dans une page enfant avec boite deux colonnes lorsque la page parente contenait des boites dans la bannière
- ticket #102676 : Formulaires dans les articles : correction de la protection anti-spam
- ticket #93322 : SIGB Koha : Mise à jour de l'API Koha pour les suggestions d'achats
- ticket #98519 : SIGB Nanook : Amélioration du retour d'erreur en cas de mot de passe non sécurisé lors de la pré-inscription
07/01/2020 - v8.0.37
- ticket #102712 : SIGB PMB : correction d'une erreur après la connexion lorsque l'identification SIG
B échoue
06/01/2020 - v8.0.36
- ticket #99468 : Open Data : Ajout de la représentation des ouvertures au format OpenStreetMap opening_hours dans la liste des bibliothèques en JSON
- ticket #101798 : Amélioratiom du temps d'affichage de l'agenda
- ticket #98349 : Correction des chemins par défaut erronés en installation d'un bokeh vierge
- ticket #102321 : Inscription à la newsletter : amélioration de la conformité RGPD
- ticket #98626 : Articles, modification par lots : correction de la prise en compte des champs personnalisés
- ticket #101207 : Activités : correction de la suppression d'une inscription anonyme
- ticket #99313 : Page critique : Respect de la configuration "texte du fil d'ariane"
- ticket #98511 : Formulaire de contact : tri de la liste des bibliothèques par ordre alphabétique
16/12/2019 - v8.0.35
- ticket #98102 : Indexation : Ajout de la description des albums de la bibliothèque numérique Bokeh en tant que résumés de la notice Bokeh générée pour l'album
- ticket #101519 : Intégration : Bokeh ne supprime pas automatiquement les paniers devenus vides lorsqu'ils sont reliés à un domaine
10/12/2019 - v8.0.34
- ticket #100949 : Agendas Externes : ajout du moissonnage des événements publiés sur Open-Agenda (Financé par le Métropole Européenne de Lille)
- ticket #96803 : Description des notices en XSL : correction de la prise en charge des simples quotes
- ticket #96083 : Ajout d'un bouton "imprimer" pour les articles
- ticket #100763 : Compte lecteur : Détection et affichage des erreurs pouvant survenir lors de la récupération des prêts en retard auprès du SIGB
- ticket #99042 : ArteVOD SSO : ajout du referer dans l'url de redirection
- ticket #95311 : Augmentation de la taille maximale du contenu des lettres d'informations
25/11/2019 - v8.0.33
- ticket #99715 : Intégration : Prise en compte des sites des documents Numel
- ticket #100226 : Si la zone 856$u contient une URL ark Gallica, alors l'onglet ressource numérique affiche le document correspondant
- ticket #98553 : Correction de la prise en compte des Captchas sous Chrome (78)
- ticket #96803 : Indexation des articles : ajout du résumé en 330$a, de l'auteur en 701 et de l'année de création en 210$d
- ticket #99071 : Inscription à une activité : message de confirmation envoyé 20 fois
18/11/2019 - v8.0.32
- ticket #99172 : Compte lecteur : Correction du dysfonctionnement du filtre "réservé par d'autres" dans les prêts en cours
- ticket #98315 : Compte Lecteur : Correction du tri des prêts par date d'emprunt dans l'historique des prêts
- ticket #95887 : Version smartphone: affichage de la carte OSM et boutons de partage sur les événements agenda
- ticket #98553 : Correction de la prise en compte des Captchas sous Chrome
- ticket #98887 : Page notice : Correction du bouton "générer la vignette" sur la page notice lorsque l'identifiant notice est obsolète
- ticket #100508 : LeKiosk : adaptation au changement de SSO par CAS
12/11/2019 - v8.0.31
- ticket #99825 : Serveur OAI : Correction de l'échappement du contenu de l'élément Dublin Core rights (Financé par AFI)
- ticket #95190 : Bibliothèque numérique : Export des medias au format csv (Financé par AFI)
- ticket #98799 : Système de réservation des documents PNB (Financé par St Cloud)
- ticket #98691 : Notices : Ajout d'un script mettant à jour les albums liés aux notices avec les dernières informations de la notices (Financé par AFI)
04/11/2019 - v8.0.30
- ticket #99776 : Formulaires de recherche avancée : Correction de la prise en charge des formulaires contenant des champs sur facettes dynamiques et des champs sur autorités
......
......@@ -25,6 +25,7 @@ class Admin_BibnumController extends ZendAfi_Controller_Action {
$this->view->titre = $this->_('Liste des connecteurs disponibles');
}
public function collectionsAction() {
$categories = Class_AlbumCategorie::getCollections();
......@@ -42,4 +43,23 @@ class Admin_BibnumController extends ZendAfi_Controller_Action {
'categories' => $albums,
'items' => []]]);
}
public function artevodDashboardAction(){
$this->view->titre = $this->_('Accès ARTEVOD');
}
public function artevodTrySsoAction() {
$config = new Class_WebService_BibNumerique_ArteVOD_Config();
ZendAfi_Auth_Others::getInstance()
->swapUserWith(Class_Users::getIdentity(),
$user = $config->getTestUser());
$url = $config->urlFor($user, $this->_request->getParams());
return $url
? $this->_javascriptRedirectTo($url)
: $this->_redirectToIndex($this->_config->getNotAllowedMessage());
}
}
\ No newline at end of file
......@@ -201,11 +201,7 @@ class Admin_CatalogueController extends ZendAfi_Controller_Action {
return $this->_redirect("admin/catalogue/index");
if ($id_panier_to_remove = (int)$this->_getParam('remove')) {
$panier = Class_PanierNotice::find($id_panier_to_remove);
$catalogue->removePanierNotice($panier)->save();
$panier->removeCatalogue($catalogue)->save();
$this->_helper->notify($this->_('Panier "%s" retiré', $panier->getLibelle()));
$this->_removePanierFromCatalogue($id_panier_to_remove,$catalogue);
return $this->_redirect('admin/catalogue/paniers/id_catalogue/' . $catalogue->getId());
}
......@@ -229,6 +225,16 @@ class Admin_CatalogueController extends ZendAfi_Controller_Action {
}
protected function _removePanierFromCatalogue($panier_id,$catalogue){
$panier = Class_PanierNotice::find($panier_id);
if (!$panier)
return;
$catalogue->removePanierNotice($panier)->save();
$panier->removeCatalogue($catalogue)->save();
$this->_helper->notify($this->_('Panier "%s" retiré', $panier->getLibelle()));
}
protected function formAjoutPanier($catalogue) {
$options = ['' => $this->_('Veuiller sélectionner un panier')];
$paniers = Class_PanierNotice::findAllBelongsToAdmin();
......
......@@ -32,9 +32,12 @@ class Admin_ExternalAgendasController extends ZendAfi_Controller_Action {
return $this->_redirectToIndex();
$this->view->titre = $this->_('Moissonnage des évènements de l\'agenda "%s"', $agenda->getLibelle());
$results = $agenda->import();
$this->view->new_events = $results['new'];
$this->view->updated_events = $results['update'];
$agenda->import(function($created, $updated)
{
$this->view->new_events = $created;
$this->view->updated_events = $updated;
});
}
......
......@@ -20,12 +20,7 @@
*/
class Admin_IndexController extends ZendAfi_Controller_Action {
public function indexAction() {
$this->view->titre = $this->_('Accueil')
. $this->view->tag('span',
$this->_(' version %s',
$this->view->tag('a', BOKEH_RELEASE_NUMBER,
['href' => BOKEH_REMOTE_FILES . 'blob/master/VERSIONS'])),
['class' => 'version']);
$this->view->titre = $this->_('Accueil');
$this->view->user = Class_Users::getIdentity();
......
......@@ -27,24 +27,34 @@ class Admin_RecordsController extends ZendAfi_Controller_Action {
return $this->_redirectToReferer();
}
if ($album = $record->getAlbum()){
$album->createThumbnail();
$url_vignette = $album->getThumbnailUrl();
$record->setUrlVignette($url_vignette);
$record->setUrlImage(($poster = $album->getPoster()) ? $poster : $url_vignette);
$record->save();
$this->_resetRecordThumbnail($record);
$this->_helper->notify($this->_('Vignette réinitialisée pour "%s"', $record->getTitrePrincipal()));
return $this->_redirectToReferer();
$this->_redirectToReferer();
}
protected function _resetRecordThumbnail($record) {
if (!$album = $record->getAlbum()) {
$record
->setUrlImage('')
->setUrlVignette('')
->save();
$this->_helper->notify($this->_('Vignette réinitialisée pour "%s"', $record->getTitrePrincipal()));
$this->_redirectToReferer();
->fetchUrlLocalVignette();
return $this;
}
Class_WebService_BibNumerique_Vignette::getInstance()->updateAlbum($album);
foreach($album->getErrors() as $error)
$this->_helper->notify($error);
$album->createThumbnail();
$url_vignette = $album->getThumbnailUrl();
$record->setUrlVignette($url_vignette);
$record->setUrlImage(($poster = $album->getPoster()) ? $poster : $url_vignette);
$record->save();
return $this;
}
......
......@@ -46,10 +46,8 @@ class Admin_SessionActivityController extends ZendAfi_Controller_Action {
$session = Class_SessionActivity::getLoader()->find((int)$this->_getParam('id'));
if ($id_user_to_delete = $this->_getParam('delete')) {
$user_to_delete = Class_Users::getLoader()->find($id_user_to_delete);
$session
->removeStagiaire($user_to_delete)
->saveWithoutValidation();
$subscription_to_delete = Class_SessionActivityInscription::deleteBy(['stagiaire_id' => $id_user_to_delete,
'session_activity_id' => $session->getId()]);
$redirect_url = '/admin/session-activity/inscriptions/id/'.$session->getId();
if ($_GET)
......
......@@ -77,4 +77,25 @@ class Admin_TemplateController extends ZendAfi_Controller_Action {
$this->_helper->notify($this->_('Thème %s mis à jour', $template->getId()));
return $this->_redirectClose($this->_getReferer());
}
public function applyAction() {
if(!$this->view->template = (new Class_Template_Loader)->find($this->_getParam('template'))) {
$this->_helper->notify($this->_('Une erreur c\'est produite. Vous ne pouvez pas tester le template'));
return $this->_redirectToIndex();
}
$this->view->titre = $this->_('Appliquer le thème %s à un profil',
$this->view->template->getTitle());
if(!$profile = Class_Profil::find($this->_getParam('on')))
return;
if(!$profile_id = $this->view->template->applyOn($profile)) {
$this->_helper->notify($this->_('Une erreur c\'est produite.'));
return $this->_redirectToIndex();
}
$this->_redirect('/opac/index/index/id_profil/' . $profile_id);
}
}
\ No newline at end of file
......@@ -48,11 +48,10 @@ class Admin_WidgetController extends ZendAfi_Controller_Action {
public function addAction() {
$this->view->titre = $this->_('Ajouter une boite');
if (!$profil = Class_Profil::find($this->_getParam('id_profil')))
return $this->_redirectClose($this->_getReferer());
if (($template_section = $this->_getParam('template'))
if (('' != ($template_section = $this->_getParam('template')))
|| ($this->_request->isPost() && ('' != $this->_getParam('module_type')))) {
return $this->_addNewWidget($profil, $template_section);
}
......@@ -64,7 +63,7 @@ class Admin_WidgetController extends ZendAfi_Controller_Action {
protected function _addNewWidget($profil, $template_section) {
if ($template_section) {
if ('' != $template_section) {
$template_no = $this->_getParam('template_no');
$template = $this->_readTemplates()['sections'][$template_section]['templates'][$template_no];
}
......@@ -84,6 +83,12 @@ class Admin_WidgetController extends ZendAfi_Controller_Action {
? $template['configuration']
: [];
$preferences = array_merge(Class_Systeme_ModulesAccueil::getInstance()
->getModuleByCode($type_module)
->getDefaultValues(),
$preferences,
$this->_getPost());
$new_id = $profil->createNewModuleAccueilId();
$profil->updateModuleConfigAccueil($new_id,
......@@ -102,10 +107,7 @@ class Admin_WidgetController extends ZendAfi_Controller_Action {
->setProfileId($this->_getParam('id_profil'))
->setParent($this->_getParam('parent'))
->load()
->setNewDatas(array_merge(Class_Systeme_ModulesAccueil::getInstance()
->getModuleByCode($this->_getParam('module_type'))
->getDefaultValues(),
$this->_request->getPost()));
->setNewDatas($preferences);
$edit_widget_url = Class_Url::assemble(['module' => 'admin',
'controller' => 'widget',
......@@ -213,8 +215,7 @@ class Admin_WidgetController extends ZendAfi_Controller_Action {
protected function _readTemplates() {
$templates = file_get_contents(ROOT_PATH . 'public/opac/js/widget_templates/widget_templates.json');
return json_decode($templates, true);
return Class_Template::current()->getWidgetTemplates();
}
......
<?php
echo $this->digitalResource_Dashboard(new Class_WebService_BibNumerique_ArteVOD_Config());
<?php
echo $this->renderBokehVersion();
if ($this->is_request_secure)
echo $this->myBibAppTeaser()
echo $this->myBibAppTeaser();
?>
<h2 class="toggle_video">
......
<?php
$description = (new Class_TableDescription('profiles'))
->addColumn($this->_('ID'), function($profile)
{
return $profile->getId();
})
->addColumn($this->_('Profil'), function($profile)
{
return $profile->getLibelle();
})
->addColumn($this->_('Thème courant'), function($profile)
{
return $profile->getTemplate();
})
->addRowAction(function($profile) { return $this->renderModelActions($profile,
[
['url' => ['module' => 'admin',
'controller' => 'template',
'action' => 'apply',
'template' => $this->template->getId(),
'on' => '%s',
'render' => ''],
'id' => $profile->getId(),
'icon' => 'validate',
'anchorOptions' => ['target' => '_blank'],
'label' => $this->_('Appliquer le thème sur le profil %s',
$profile->getLibelle())]]);
});
echo $this->renderTable($description, Class_Profil::findTopProfils());
<?php
echo $this->renderWidgetTemplates($this->templates);
?>
......@@ -52,6 +52,10 @@ class AbonneController extends ZendAfi_Controller_Action {
$this->_request->setDispatched();
return;
}
$this->view->_current_module['controller'] = 'abonne';
$this->view->_current_module['action'] = 'fiche';
$this->view->_current_module['action2'] = '';
}
......@@ -85,12 +89,21 @@ class AbonneController extends ZendAfi_Controller_Action {
public function inscrireSessionAction() {
$this->_redirectToReferer();
$redirect = $this->_getParam('redirect_url', $this->_getReferer());
if (strpos($redirect, 'inscrire-session') !== false)
$redirect = Class_Url::absolute(['controller' => 'abonne',
'action' => 'activities'], null, true);
$this->_redirectToUrlOrReferer($redirect);
if ((!$session = Class_SessionActivity::find((int)$this->_getParam('id')))
|| $session->isInscriptionClosed())
return $this->_helper->notify($this->_('L\'inscription à cette session est fermée'));
if ($session->hasStagiaire($this->_user))
return $this->_helper->notify($this->_('Vous êtes déjà inscrit à cette session'));
$session->addStagiaire($this->_user);
if (!$session->save())
return $this->_helper->notify(implode('<br/>', $session->getErrors()));
......@@ -1147,8 +1160,9 @@ class AbonneController extends ZendAfi_Controller_Action {
unset($data['id_items']);
$this->_user->setSettings(Class_User_Settings::serializeSettings($data));
$this->_user->save();
$this->_helper->notify($this->_('Favoris sauvegardés'));
return $this->_redirectClose($this->_getReferer());
Class_User_Settings::clearCache();
$this->_helper->notify($this->_('Configuration sauvegardée'));
return $this->_redirectToReferer();
}
$this->view->titre = $this->view->_('Gérer mes favoris');
......@@ -1865,4 +1879,11 @@ class AbonneController extends ZendAfi_Controller_Action {
$record->updateFacetsFromExemplaires();
}
public function clearHistoryAction() {
(new Class_SearchHistory())->clear();
$this->_helper->notify($this->_('Votre historique de recherche a été supprimé.'), ['status' => 'success']);
return $this->_redirectClose($this->_getReferer());
}
}
\ No newline at end of file
......@@ -233,6 +233,7 @@ class AuthController extends ZendAfi_Controller_Action {
$this->view->options = ['data' => array_merge(
$preferences,
['redirect_url' => $this->_getParam('redirect_uri'),
'clear_action' => true,
'id_notice' => 0])];
$this->getHelper('ViewRenderer')->setLayoutScript('subModal.phtml');
......@@ -371,7 +372,7 @@ class AuthController extends ZendAfi_Controller_Action {
return;
}
if ('' != $this->_getParam('emailCheck'))
if ('' != $this->_getParam('website'))
return $this->_redirect('/');
$this->view->preferences = Class_Profil::getCurrentProfil()->getCfgModulesPreferences('auth', 'register');
......@@ -413,7 +414,7 @@ class AuthController extends ZendAfi_Controller_Action {
public function newsletterRegisterAction() {
if('' != $this->_request->getParam('emailCheck'))
if('' != $this->_request->getParam('website'))
return $this->_redirect('/');
if(!($id_newsletter = $this->_request->getParam('id')))
......@@ -547,34 +548,33 @@ class AuthController extends ZendAfi_Controller_Action {
return $this->_redirect('opac/index');
}
if ('' != $this->_getParam('emailCheck'))
if ('' != $this->_getParam('website'))
return $this->_redirect('/');
$this->view->form =
$form->populate(ZendAfi_Filters_Post::filterStatic($this->_request->getParams()));
$data = ZendAfi_Filters_Post::filterStatic($this->_request->getPost());
unset($data['emailCheck']);
unset($data['website']);
if ($this->_request->isPost() && $form->isValid($data)) {
$pre_registration->send($data);
$pre_registration->getErrors()->isEmpty()
? $this->_preRegistrationSuccess()
: $this->_preRegistrationFailed(implode(BR, $pre_registration->getErrors()->getArrayCopy()));
? $this->_preRegistrationSuccess($pre_registration)
: $this->_preRegistrationFailed($pre_registration);
}
}