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"] [submodule "tests_js/lib/qunit-phantomjs-runner"]
path = 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"] [submodule "library/storm"]
path = 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"] [submodule "library/Redmine"]
path = 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"] [submodule "library/iCal"]
path = 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"] [submodule "library/PhpParser"]
path = 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"] [submodule "library/matomo-php-tracker"]
path = 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"] [submodule "library/php-jwt"]
path = 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"] [submodule "library/phpseclib"]
path = library/phpseclib path = library/phpseclib
url = https://git.afi-sa.net/afi/phpseclib.git 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 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 #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 #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 #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) - 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 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 - 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 { ...@@ -25,6 +25,7 @@ class Admin_BibnumController extends ZendAfi_Controller_Action {
$this->view->titre = $this->_('Liste des connecteurs disponibles'); $this->view->titre = $this->_('Liste des connecteurs disponibles');
} }
public function collectionsAction() { public function collectionsAction() {
$categories = Class_AlbumCategorie::getCollections(); $categories = Class_AlbumCategorie::getCollections();
...@@ -42,4 +43,23 @@ class Admin_BibnumController extends ZendAfi_Controller_Action { ...@@ -42,4 +43,23 @@ class Admin_BibnumController extends ZendAfi_Controller_Action {
'categories' => $albums, 'categories' => $albums,
'items' => []]]); '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 { ...@@ -201,11 +201,7 @@ class Admin_CatalogueController extends ZendAfi_Controller_Action {
return $this->_redirect("admin/catalogue/index"); return $this->_redirect("admin/catalogue/index");
if ($id_panier_to_remove = (int)$this->_getParam('remove')) { if ($id_panier_to_remove = (int)$this->_getParam('remove')) {
$panier = Class_PanierNotice::find($id_panier_to_remove); $this->_removePanierFromCatalogue($id_panier_to_remove,$catalogue);
$catalogue->removePanierNotice($panier)->save();
$panier->removeCatalogue($catalogue)->save();
$this->_helper->notify($this->_('Panier "%s" retiré', $panier->getLibelle()));
return $this->_redirect('admin/catalogue/paniers/id_catalogue/' . $catalogue->getId()); return $this->_redirect('admin/catalogue/paniers/id_catalogue/' . $catalogue->getId());
} }
...@@ -229,6 +225,16 @@ class Admin_CatalogueController extends ZendAfi_Controller_Action { ...@@ -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) { protected function formAjoutPanier($catalogue) {
$options = ['' => $this->_('Veuiller sélectionner un panier')]; $options = ['' => $this->_('Veuiller sélectionner un panier')];
$paniers = Class_PanierNotice::findAllBelongsToAdmin(); $paniers = Class_PanierNotice::findAllBelongsToAdmin();
......
...@@ -32,9 +32,12 @@ class Admin_ExternalAgendasController extends ZendAfi_Controller_Action { ...@@ -32,9 +32,12 @@ class Admin_ExternalAgendasController extends ZendAfi_Controller_Action {
return $this->_redirectToIndex(); return $this->_redirectToIndex();
$this->view->titre = $this->_('Moissonnage des évènements de l\'agenda "%s"', $agenda->getLibelle()); $this->view->titre = $this->_('Moissonnage des évènements de l\'agenda "%s"', $agenda->getLibelle());
$results = $agenda->import();
$this->view->new_events = $results['new']; $agenda->import(function($created, $updated)
$this->view->updated_events = $results['update']; {
$this->view->new_events = $created;
$this->view->updated_events = $updated;
});
} }
......
...@@ -20,12 +20,7 @@ ...@@ -20,12 +20,7 @@
*/ */
class Admin_IndexController extends ZendAfi_Controller_Action { class Admin_IndexController extends ZendAfi_Controller_Action {
public function indexAction() { public function indexAction() {
$this->view->titre = $this->_('Accueil') $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->user = Class_Users::getIdentity(); $this->view->user = Class_Users::getIdentity();
......
...@@ -27,24 +27,34 @@ class Admin_RecordsController extends ZendAfi_Controller_Action { ...@@ -27,24 +27,34 @@ class Admin_RecordsController extends ZendAfi_Controller_Action {
return $this->_redirectToReferer(); return $this->_redirectToReferer();
} }
if ($album = $record->getAlbum()){ $this->_resetRecordThumbnail($record);
$album->createThumbnail();
$url_vignette = $album->getThumbnailUrl();
$record->setUrlVignette($url_vignette); $this->_helper->notify($this->_('Vignette réinitialisée pour "%s"', $record->getTitrePrincipal()));
$record->setUrlImage(($poster = $album->getPoster()) ? $poster : $url_vignette); $this->_redirectToReferer();
$record->save(); }
$this->_helper->notify($this->_('Vignette réinitialisée pour "%s"', $record->getTitrePrincipal()));
return $this->_redirectToReferer(); protected function _resetRecordThumbnail($record) {
if (!$album = $record->getAlbum()) {
$record
->setUrlImage('')
->setUrlVignette('')
->fetchUrlLocalVignette();
return $this;
} }
$record Class_WebService_BibNumerique_Vignette::getInstance()->updateAlbum($album);
->setUrlImage('') foreach($album->getErrors() as $error)
->setUrlVignette('') $this->_helper->notify($error);
->save();
$this->_helper->notify($this->_('Vignette réinitialisée pour "%s"', $record->getTitrePrincipal())); $album->createThumbnail();
$this->_redirectToReferer(); $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 { ...@@ -46,10 +46,8 @@ class Admin_SessionActivityController extends ZendAfi_Controller_Action {
$session = Class_SessionActivity::getLoader()->find((int)$this->_getParam('id')); $session = Class_SessionActivity::getLoader()->find((int)$this->_getParam('id'));
if ($id_user_to_delete = $this->_getParam('delete')) { if ($id_user_to_delete = $this->_getParam('delete')) {
$user_to_delete = Class_Users::getLoader()->find($id_user_to_delete); $subscription_to_delete = Class_SessionActivityInscription::deleteBy(['stagiaire_id' => $id_user_to_delete,
$session 'session_activity_id' => $session->getId()]);
->removeStagiaire($user_to_delete)
->saveWithoutValidation();
$redirect_url = '/admin/session-activity/inscriptions/id/'.$session->getId(); $redirect_url = '/admin/session-activity/inscriptions/id/'.$session->getId();
if ($_GET) if ($_GET)
......
...@@ -77,4 +77,25 @@ class Admin_TemplateController extends ZendAfi_Controller_Action { ...@@ -77,4 +77,25 @@ class Admin_TemplateController extends ZendAfi_Controller_Action {
$this->_helper->notify($this->_('Thème %s mis à jour', $template->getId())); $this->_helper->notify($this->_('Thème %s mis à jour', $template->getId()));
return $this->_redirectClose($this->_getReferer()); 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 { ...@@ -48,11 +48,10 @@ class Admin_WidgetController extends ZendAfi_Controller_Action {
public function addAction() { public function addAction() {
$this->view->titre = $this->_('Ajouter une boite'); $this->view->titre = $this->_('Ajouter une boite');
if (!$profil = Class_Profil::find($this->_getParam('id_profil'))) if (!$profil = Class_Profil::find($this->_getParam('id_profil')))
return $this->_redirectClose($this->_getReferer()); return $this->_redirectClose($this->_getReferer());
if (($template_section = $this->_getParam('template')) if (('' != ($template_section = $this->_getParam('template')))
|| ($this->_request->isPost() && ('' != $this->_getParam('module_type')))) { || ($this->_request->isPost() && ('' != $this->_getParam('module_type')))) {
return $this->_addNewWidget($profil, $template_section); return $this->_addNewWidget($profil, $template_section);
} }
...@@ -64,7 +63,7 @@ class Admin_WidgetController extends ZendAfi_Controller_Action { ...@@ -64,7 +63,7 @@ class Admin_WidgetController extends ZendAfi_Controller_Action {
protected function _addNewWidget($profil, $template_section) { protected function _addNewWidget($profil, $template_section) {
if ($template_section) { if ('' != $template_section) {
$template_no = $this->_getParam('template_no'); $template_no = $this->_getParam('template_no');
$template = $this->_readTemplates()['sections'][$template_section]['templates'][$template_no]; $template = $this->_readTemplates()['sections'][$template_section]['templates'][$template_no];
} }
...@@ -84,6 +83,12 @@ class Admin_WidgetController extends ZendAfi_Controller_Action { ...@@ -84,6 +83,12 @@ class Admin_WidgetController extends ZendAfi_Controller_Action {
? $template['configuration'] ? $template['configuration']
: []; : [];
$preferences = array_merge(Class_Systeme_ModulesAccueil::getInstance()
->getModuleByCode($type_module)
->getDefaultValues(),
$preferences,
$this->_getPost());
$new_id = $profil->createNewModuleAccueilId(); $new_id = $profil->createNewModuleAccueilId();
$profil->updateModuleConfigAccueil($new_id, $profil->updateModuleConfigAccueil($new_id,
...@@ -102,10 +107,7 @@ class Admin_WidgetController extends ZendAfi_Controller_Action { ...@@ -102,10 +107,7 @@ class Admin_WidgetController extends ZendAfi_Controller_Action {
->setProfileId($this->_getParam('id_profil')) ->setProfileId($this->_getParam('id_profil'))
->setParent($this->_getParam('parent')) ->setParent($this->_getParam('parent'))
->load() ->load()
->setNewDatas(array_merge(Class_Systeme_ModulesAccueil::getInstance() ->setNewDatas($preferences);
->getModuleByCode($this->_getParam('module_type'))
->getDefaultValues(),
$this->_request->getPost()));
$edit_widget_url = Class_Url::assemble(['module' => 'admin', $edit_widget_url = Class_Url::assemble(['module' => 'admin',
'controller' => 'widget', 'controller' => 'widget',
...@@ -213,8 +215,7 @@ class Admin_WidgetController extends ZendAfi_Controller_Action { ...@@ -213,8 +215,7 @@ class Admin_WidgetController extends ZendAfi_Controller_Action {
protected function _readTemplates() { protected function _readTemplates() {
$templates = file_get_contents(ROOT_PATH . 'public/opac/js/widget_templates/widget_templates.json'); return Class_Template::current()->getWidgetTemplates();
return json_decode($templates, true);
} }
......
<?php
echo $this->digitalResource_Dashboard(new Class_WebService_BibNumerique_ArteVOD_Config());
<?php <?php
echo $this->renderBokehVersion();
if ($this->is_request_secure) if ($this->is_request_secure)
echo $this->myBibAppTeaser() echo $this->myBibAppTeaser();
?> ?>
<h2 class="toggle_video"> <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 <?php
echo $this->renderWidgetTemplates($this->templates); echo $this->renderWidgetTemplates($this->templates);
?>
...@@ -52,6 +52,10 @@ class AbonneController extends ZendAfi_Controller_Action { ...@@ -52,6 +52,10 @@ class AbonneController extends ZendAfi_Controller_Action {
$this->_request->setDispatched(); $this->_request->setDispatched();
return; return;
} }
$this->view->_current_module['controller'] = 'abonne';
$this->view->_current_module['action'] = 'fiche';
$this->view->_current_module['action2'] = '';
}