Commit 205510a0 authored by Ghislain Loas's avatar Ghislain Loas

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

Merge remote-tracking branch 'refs/remotes/origin/master' into origin-dev#69826_contractuel_minsoc_diffusion_selective_de_l_information_enregistrer_modifier_ma_recherche

Conflicts:
	application/modules/admin/views/scripts/album/edit-images.phtml
	cosmogramme/sql/patch/patch_342.php
	library/ZendAfi/Controller/Plugin/Manager/Sitotheque.php
	library/ZendAfi/View/Helper/TagPreview.php
	library/ZendAfi/View/Helper/TagSlideshow.php
	tests/application/modules/admin/controllers/AdminControllerTest.php
	tests/application/modules/admin/controllers/CatalogueControllerTest.php
	tests/application/modules/admin/controllers/CmsControllerTest.php
	tests/application/modules/admin/controllers/IndexControllerTest.php
	tests/application/modules/admin/controllers/ProfilControllerIndexTest.php
	tests/application/modules/opac/controllers/PanierControllerTest.php
	tests/db/UpgradeDBTest.php
	tests/library/ZendAfi/View/Helper/Accueil/BibNumeriqueTest.php
parents 59c6f491 b3fc3f13
22/02/2018 - v7.11.21
- ticket #65371 : Affichage : correction de l'affichage des articles en mode mur / fluide sous Chrome
- ticket #71540 : Ressources numériques : Correctif du problème de connection à CVS avec un login contenant un caractère '&'
- ticket #70872 : Catalogage : Mise à jour des annexes des exemplaires lors de l'appel au webservice
- ticket #70912 : Affichage notice : prise en charge de l'affichage des editeurs multiples dans le bloc d'entête et la notice détaillée.
- ticket #71124 : Administration : Groupes : Correction de références circulaires
12/02/2018 - v7.11.20
- ticket #70867 : Ressources numériques Dilicom : amélioration des boutons d'emprunt ou de consultation d'un document PNB.
- ticket #70772 : Administration : correction du formulaire de modification des "adminVar".
- ticket #67188 : Administration : les bibliothèques sont triées par nom dans le sélecteur de catégorie du formulaire de modification des articles.
30/01/2018 - v7.11.19
- ticket #56107 : Articles : ajout d'un plugin à l'éditeur des articles pour insérer un kiosque de notices
......@@ -13,7 +35,6 @@
- ticket #69594 : Articles : correction de l'affichage des listes d'articles.
24/01/2018 - v7.11.18
- ticket #70308 : Administration : correction de l'enregistrement des boîtes.
......
- ticket #71408 : Administration : mise en valeur des compteurs des menus assistance et fonctionalités.
\ No newline at end of file
- ticket #71409 : Administration : ajout des liens vers les vidéos dans la liste des fonctionnalités
\ No newline at end of file
- ticket #71456 : Administration : suppression d'entrées de menu de bibliotheque numérique qui sont inutiles
\ No newline at end of file
- ticket #71600 : Explorateur de fichiers : correction des liens de téléchargement d'images qui comportaient un espace dans le nom.
\ No newline at end of file
- ticket #71664 : Accessibilité RGAA : remplacement de la visualisation en popup par l'ouverture dans un nouvel onglet.
- ticket #71715 : Explorateur de fichiers : ajout de la possiblité de rechercher des dossiers.
\ No newline at end of file
......@@ -77,8 +77,16 @@ class Admin_IndexController extends ZendAfi_Controller_Action {
public function adminvareditAction() {
$id = $this->_getParam('cle');
$var = Class_AdminVar::find($id);
if(!$id = $this->_getParam('cle')) {
$this->_helper->notify($this->_('Veuillez renseigner le paramètre "cle".'));
return $this->_redirectClose($this->_getReferer());
}
if(!$var = Class_AdminVar::find($id)) {
$this->_helper->notify($this->_('La clé "%s" n\'existe pas.', $id));
return $this->_redirectClose($this->_getReferer());
}
$form = $var->getForm();
$form->setAction($this->getUrlWithHttpsIfNeeded($id));
$form->setAttrib('data-backurl',
......
......@@ -118,8 +118,11 @@ echo $this->tagUploadMultiple('albumRessourcesUpload',
<li class="ressource" id="<?php echo $ressource->getId();?>">
<div style="width:50px;"><?php
if ($ressource->isImage() || $ressource->hasPoster()) {
echo $this->tagPreview(($ressource->isImage()) ? $ressource->getOriginalUrl() : $ressource->getPosterUrl(),
$ressource->getTitre());
echo sprintf('<a href="%s" title="%s" target="_blank">%s</a>',
($ressource->isImage()) ? $ressource->getOriginalUrl() : $ressource->getPosterUrl(),
$ressource->getTitre(),
$this->tagImg($ressource->getThumbnailUrl(),
['style' => 'width:50px']));
}
?></div>
......
......@@ -38,7 +38,8 @@ $editable = $catalog->canBeDeletedOrModifyByUser($user);
'id_catalogue' => $catalog->getId()],
null, true);
echo $this->tagPreview($catalogue_url, $this->_('Visualiser le domaine : %s', $catalog->getLibelle()));
echo $this->tagPreview($catalogue_url,
$this->_('Visualiser le domaine "%s" dans un nouvel onglet', $catalog->getLibelle()));
echo $this->permalink($catalogue_url);
?>
......
......@@ -4,7 +4,7 @@
$paniers = $this->catalogue->getPanierNotices();
foreach($paniers as $panier) {
$panier_url = $this->absoluteUrl(['module' => 'opac',
$panier_url = $this->absoluteUrl(['module' => 'opac',
'controller' => 'recherche',
'action' => 'simple',
'id_panier' => $panier->getId()],
......@@ -14,9 +14,10 @@ foreach($paniers as $panier) {
echo sprintf('<li>%s %s %s %s</li>',
$panier_libelle,
$this->tagPreview($panier_url, 'Visualisation du panier: '.$panier_libelle),
$this->permalink($panier_url),
$this->tagAnchor(['remove' => $panier->getId()],
$this->tagPreview($panier_url,
$this->_('Visualisation du panier "%s" dans un nouvel onglet', $panier_libelle)),
$this->permalink($panier_url),
$this->tagAnchor(['remove' => $panier->getId()],
'<img src="'.URL_ADMIN_IMG.'ico/del.gif'.'" alt="Supprimer" title="Supprimer" />'));
}
......@@ -24,4 +25,4 @@ echo $this->renderForm($this->form_paniers);
?>
</ul>
\ No newline at end of file
</ul>
......@@ -7,7 +7,9 @@ if (!$this->article->isNew()) {
'action' => 'articleview',
'id' => $this->article->getId()],
null, true);
echo $this->tagPreview($article_url, "Visualisation de l'article: " . $this->article->getTitre());
echo $this->tagPreview($article_url,
$this->_('Visualisation de l\'article "%s" dans un nouvel onglet',
$this->article->getTitre()));
echo $this->permalink($this->absoluteUrl($article_url));
}
......
......@@ -13,7 +13,7 @@ $description = (new Class_TableDescription('features'))
->addColumn($this->_('Date de nouveauté'),
['callback' => function($feature)
{
return Class_Date::humanDate($feature->getDate(), 'dd/MM/yyyy');
return Class_Date::humanDate($feature->getDate(), 'dd/MM/yyyy');
},
'options' => ['class' => 'dateFormat-ddmmyyyy sorter-shortDate']])
......@@ -57,13 +57,29 @@ $description = (new Class_TableDescription('features'))
'title' => $this->_('Documentation')]);
})
->addRowAction(function($feature)
{
if(!$feature->getVideo())
return '';
$title = $this->_('Voir la vidéo de la fonctionnalité : "%s"', $feature->getLabel());
return $this->tagAnchor($feature->getVideo(),
Class_Admin_Skin::current()
->renderActionIconOn('test',
$this,
['title' => $title,
'alt' => $title]),
['title' => $title,
'target' => '_blank']);
})
->addRowAction(function($feature)
{
if(!$feature->getTest())
return '';
return $this->tagPreview(Class_Url::relative($feature->getTest()),
$this->_('Essayer'));
$this->_('Essayer "%s" dans un nouvel onglet', $feature->getLabel()));
})
;
$html =
......@@ -86,4 +102,4 @@ $script_loader = Class_ScriptLoader::getInstance()
->addSearchInputToContent($this->_('Chercher'))
->addJQueryReady('$(\'#features_list\').accordion({heightStyle: \'content\'});');
(new Class_Admin_Skin)->renderJQueryCssOn($script_loader);
(new Class_Admin_Skin)->renderJQueryCssOn($script_loader);
<?php
$skin = Class_Admin_Skin::current();
echo $this->tag('h2',
$skin->renderMenuIconOn('tag', $this)
. $this->tag('span', $this->_('Journée communautaire Bokeh 2018'))
. $this->Button((new Class_Entity())
->setText($this->_('Jeudi 15 mars'))
->setAttribs(['onclick' => 'window.open(\'http://bokeh-library-portal.org/journee_bokeh_2018\');'])),
['id' => 'learn_more']);
?>
<h2 style="display:inline;border:none">
<?php
echo $skin->renderMenuIconOn('tag', $this,
['style' => 'vertical-align:middle'])
. ' '
. $this->_('Nouvelle version');
$button = (new Class_Entity())->setText($this->_('Découvrir les nouveautés de la version 7.10'))
->setAttribs(['id' => 'learn_more',
'onclick' => 'window.open(\'http://wiki.bokeh-library-portal.org/index.php?title=7.10.0\'); return false']);
echo $this->Button($button);
?>
</h2>
<h2 class="toggle_video">
<?php
<h2 class="toggle_video">
<?php
Class_ScriptLoader::getInstance()->addJQueryReady('$(".toggle_video").click(function() {$(this).toggleClass("on");$(this).next().toggle();})');
echo $this->_('Démonstrations vidéos');
?>
echo $this->_('Démonstrations vidéos');
?>
</h2>
<div><iframe width="750" height="450" src="https://www.youtube.com/embed/videoseries?list=PLL40cYmJt-b9YSCI0rvnxl8xjptuvgiZC" allowfullscreen></iframe></div>
<div><iframe width="750" height="450" src="https://www.youtube.com/embed/videoseries?list=PLL40cYmJt-b9YSCI0rvnxl8xjptuvgiZC" allowfullscreen></iframe></div>
<h2><?php echo $this->_('Paramètres du site');?>&nbsp;:</h2>
<h2><?php echo $this->_('Paramètres du site');?>&nbsp;:</h2>
<?php
$lien = $edit_domain_name = '';
if ($this->user->isAdmin()) {
......@@ -40,18 +34,18 @@ if ($this->user->isAdmin()) {
}
echo $this->ligneInfos($this->_('Etat du site'), $this->etat_site . $lien)
. $this->ligneInfos($this->_('Nom du domaine'), Class_AdminVar::getNomDomaine() . $edit_domain_name);
. $this->ligneInfos($this->_('Nom du domaine'), Class_AdminVar::getNomDomaine() . $edit_domain_name);
?>
<h2><?php echo $this->_('Données en attente de modération');?>&nbsp;:
<a class="rss" href="<?php
<a class="rss" href="<?php
echo $this->url(array('module' => 'opac',
'controller' => 'rss',
'action' => 'moderations'));
?>"><img src="<?php echo URL_ADMIN_IMG;?>/rss.gif" alt="RSS"/></a>
</h2>
</h2>
<?php
$moderer = new Class_Moderer();
$moderer = new Class_Moderer();
$modstats = $moderer->getModerationStats();
foreach ($modstats as $stat) {
$nombre = ($stat['count']) ? $stat['count'] : 'aucun';
......@@ -66,25 +60,25 @@ foreach ($modstats as $stat) {
<h2><?php echo $this->_('Participez à la communauté'); ?> !</h2>
<div class='ligne_info'>
<a onclick="window.open(this.href); return false" href="http://bokeh-library-portal.org"><?php echo $this->_('Site communautaire');?></a> -
<a onclick="window.open(this.href); return false" href="https://groups.google.com/group/utilisateurs-bokeh"><?php echo $this->_('Google group Bokeh');?></a> -
<a onclick="window.open(this.href); return false" href="http://wiki.bokeh-library-portal.org"><?php echo $this->_('Wiki Bokeh');?></a> -
<a onclick="window.open(this.href); return false" href="http://git.afi-sa.fr/afi/opacce/tree/master"><?php echo $this->_('Code source');?></a>
<a onclick="window.open(this.href); return false" href="https://groups.google.com/group/utilisateurs-bokeh"><?php echo $this->_('Google group Bokeh');?></a> -
<a onclick="window.open(this.href); return false" href="http://wiki.bokeh-library-portal.org"><?php echo $this->_('Wiki Bokeh');?></a> -
<a onclick="window.open(this.href); return false" href="http://git.afi-sa.fr/afi/opacce/tree/master"><?php echo $this->_('Code source');?></a>
</div>
<h2><?php echo $this->_('Salle de discussion #Bokeh'); ?> :</h2>
<?php echo $this->ligneInfos($this->_('Discutez avec les contributeurs de Bokeh en direct'),
'<a href="http://wiki.bokeh-library-portal.org/index.php/Salle_de_discussion_bokeh" target="_blank"><img src="'.BASE_URL.'/public/admin/images/ico/help.png" alt=""/></a>') ?>
'<a href="http://wiki.bokeh-library-portal.org/index.php/Salle_de_discussion_bokeh" target="_blank"><img src="'.BASE_URL.'/public/admin/images/ico/help.png" alt=""/></a>') ?>
<br>
<iframe src="https://kiwiirc.com/client/irc.freenode.net/?nick=votrenom-?#bokeh" style="border:0; width:100%; height:450px;"></iframe>
<script>
(function() {
function supportsCanvas() {
return !!document.createElement('canvas').getContext;
}
<script>
(function() {
function supportsCanvas() {
return !!document.createElement('canvas').getContext;
}
if (!supportsCanvas())
showNotification({message: 'Votre navigateur ne permet pas d\'utiliser pleinement l\'interface d\'administration. Pour un fonctionnement optimal, nous recommandons d\'utiliser une version récente de Firefox, Chrome, Safari ou Internet Explorer',
type: 'error'});
})();
if (!supportsCanvas())
showNotification({message: 'Votre navigateur ne permet pas d\'utiliser pleinement l\'interface d\'administration. Pour un fonctionnement optimal, nous recommandons d\'utiliser une version récente de Firefox, Chrome, Safari ou Internet Explorer',
type: 'error'});
})();
</script>
......@@ -31,7 +31,7 @@ $url_delete_profil = $this->url(['module' => 'admin',
<?php
echo $this->tagPreview($this->url(['id_profil' => $this->profil->getId()], null, true),
sprintf("Visualisation de la page '%s'", $this->profil->getLibelle()));
$this->_('Ouvrir la page "%s" dans un nouvel onglet', $this->profil->getLibelle()));
?>
<a href="<?php echo $url_copy_profil ?>">
......
......@@ -286,8 +286,8 @@ class BibNumeriqueController extends ZendAfi_Controller_Action {
if($this->_userShouldBeRedirect())
return;
return $this->renderPopupResult($this->_('Emprunter le livre au format EPUB'),
$this->view->render('bib-numerique/loan-book.phtml'));
$this->view->titre = $this->_('Emprunter le livre au format EPUB');
$this->renderScript('bib-numerique/loan-book.phtml');
}
......@@ -295,8 +295,8 @@ class BibNumeriqueController extends ZendAfi_Controller_Action {
if($this->_userShouldBeRedirect())
return;
return $this->renderPopupResult($this->_('Consulter le livre en ligne'),
$this->view->render('bib-numerique/consult-book.phtml'));
$this->view->titre = $this->_('Consulter le livre en ligne');
$this->renderScript('bib-numerique/consult-book.phtml');
}
......
......@@ -110,7 +110,7 @@ class NoticeAjaxController extends Zend_Controller_Action {
$exemplaires = $this->_loadExemplaire(["id_notice" => $notice_ids]);
foreach($exemplaires as $exemplaire)
$exemplaire->updateAvailabilityFromSIGB()
$exemplaire->updateAvailabilityAndLocationFromSIGB()
->save();
$notices = Class_Notice::findAllBy(['id_notice' => $notice_ids]);
......@@ -132,7 +132,6 @@ class NoticeAjaxController extends Zend_Controller_Action {
protected function _loadExemplaire($params) {
$cond = $params;
$session = Zend_Registry::get('session');
$cond['id_bib'] = $session->id_bibs;
......
<?php
echo '<div class="popup-content">';
echo $this->tag('p', $this->_('Êtes vous sûr de vouloir consulter ce document ?'));
echo $this->tagAnchor($this->url(['action' => 'consult-book-open-ajax']), $this->_('oui'), ['data-popup' => 'true',
'class' => 'button blue']);
echo $this->tagAnchor('', $this->_('non'), ['onclick' => 'opacDialogClose();return false',
'class' => 'button red']);
echo '</div>';
?>
$html = [$this->tag('p', $this->_('Êtes vous sûr de vouloir consulter ce document ?')),
$this->button((new Class_Entity())
->setUrl($this->url(['action' => 'consult-book-open-ajax']))
->setText($this->_('Oui'))
->setAttribs(['data-popup' => 'true',
'class' => 'bouton validate'])),
$this->Button_Back((new Class_Entity())
->setUrl($this->url(['controller' => 'recherche',
'action' => 'viewnotice']))
->setAttribs(['title' => $this->_('Non je ne veux pas')])
->setText($this->_('Non')))];
echo $this->tag('div', implode($html), ['class' => 'popup-content']);
<?php
echo '<div class="popup-content">';
echo $this->tag('p', $this->_('Êtes vous sûr de vouloir emprunter ce document ?'));
echo $this->tagAnchor($this->url(['action' => 'download-loan-book-ajax']), $this->_('oui'), ['data-popup' => 'true',
'class' => 'button blue']);
echo $this->tagAnchor('', $this->_('non'), ['onclick' => 'opacDialogClose();return false',
'class' => 'button red']);
echo $this->tag('p', Class_AdminVar::getValueOrDefault('DILICOM_PNB_LOAN_WARNING_MESSAGE'));
echo '</div>';
?>
$html = [$this->tag('p', $this->_('Êtes vous sûr de vouloir emprunter ce document ?')),
$this->button((new Class_Entity())
->setUrl($this->url(['action' => 'download-loan-book-ajax']))
->setText($this->_('Oui'))
->setAttribs(['data-popup' => 'true',
'class' => 'bouton validate'])),
$this->Button_Back((new Class_Entity())
->setUrl($this->url(['controller' => 'recherche',
'action' => 'viewnotice']))
->setAttribs(['title' => $this->_('Non je ne veux pas')])
->setText($this->_('Non'))),
$this->tag('p', Class_AdminVar::getValueOrDefault('DILICOM_PNB_LOAN_WARNING_MESSAGE'))];
echo $this->tag('div', implode($html), ['class' => 'popup-content']);
- ticket #65371 : correction de l'affichage des articles en mode mur / fluide sous Chrome
\ No newline at end of file
- ticket #71738 : Système : Amélioration des performances du patch SQL 337
\ No newline at end of file
<?php
(new Class_Migration_HashAdminPasswords)->run();
\ No newline at end of file
(new Class_Migration_HashAdminPasswords)->run();
<?php
Zend_Db_Table_Abstract::getDefaultAdapter()
->query('CREATE TABLE if not exists `bookmarked_search` ( '
. 'id int(11) unsigned not null auto_increment,'
. 'label TEXT not null,'
. 'criterias text not null,'
. 'notified tinyint(1) not null default 0,'
. 'creation_date timestamp not null,'
. 'id_user int(11) unsigned not null default 0,'
. 'primary key (id),'
. 'key (`id_user`)'
. ') engine=MyISAM default charset=utf8');
\ No newline at end of file
(new Class_Migration_CircularUserGroupCategories())->run();
<?php
Zend_Db_Table_Abstract::getDefaultAdapter()
->query('CREATE TABLE if not exists `bookmarked_search` ( '
. 'id int(11) unsigned not null auto_increment,'
. 'label TEXT not null,'
. 'criterias text not null,'
. 'notified tinyint(1) not null default 0,'
. 'creation_date timestamp not null,'
. 'id_user int(11) unsigned not null default 0,'
. 'primary key (id),'
. 'key (`id_user`)'
. ') engine=MyISAM default charset=utf8');
......@@ -121,8 +121,14 @@ class Class_AdminVar_Meta {
if (!$validator_class = $this->getAttribute('validate', null))
return;
$validate = new $validator_class($var->getPreviousValue());
if ($validate->isValid($var->getValeur()))
$previous_value = $var->getPreviousValue();
$new_value = $var->getValeur();
if($previous_value == $new_value)
return;
$validate = new $validator_class($previous_value);
if ($validate->isValid($new_value))
return;
array_map([$var, 'addError'], $validate->getMessages());
......
......@@ -34,7 +34,7 @@ class BibLoader extends Storm_Model_Loader {
protected $_portail;
public function findAllWithPortail() {
$all_bibs = Class_Bib::getLoader()->findAll();
$all_bibs = Class_Bib::findAllBy(['order' => 'libelle']);
array_unshift($all_bibs, $this->getPortail());
return $all_bibs;
}
......
......@@ -163,7 +163,9 @@ class Class_CVSLink {
$xml_user_infos = '';
foreach($user_infos as $k => $v)
$xml_user_infos .= '<' . $k . '>' . $v . '</' . $k . '>';
$xml_user_infos .= '<' . $k . '>' .
preg_replace('#&(?![a-z]{1,6};)#i', '&amp;',$v).
'</' . $k . '>';
return $xml_user_infos;
}
......
......@@ -205,13 +205,15 @@ class Class_Exemplaire extends Storm_Model_Abstract {
}
public function updateAvailabilityFromSIGB() {
public function updateAvailabilityAndLocationFromSIGB() {
if (!$sigb_exemplaire = $this->getSigbExemplaire())
return $this;
if (!$sigb_exemplaire->isValid())
return $this;
$this->setAnnexe($this->getCodeAnnexe());
return $this->setIsAvailable($sigb_exemplaire->isDisponible());
}
......@@ -373,7 +375,6 @@ class Class_Exemplaire extends Storm_Model_Abstract {
public function getCodeAnnexe() {
if ($code_annexe=$this->getSigbExemplaire()->getCodeAnnexe())
return $code_annexe;
return $this->annexe;
......
......@@ -30,7 +30,7 @@ class Class_Feature_List {
['Label' => $this->_('Nouvelles fonctionnalités'),
'Desc' => $this->_('Bienvenue dans votre votre liste des nouvelles fonctionnalités'),
'Image' => '',
'Video' => '',
'Video' => 'https://www.youtube.com/watch?v=Hj4RQsS9WeM',
'Category' => $this->_('Administration'),
'Right' => function($feature_description, $user) {return true;},
'Wiki' => 'http://wiki.bokeh-library-portal.org/index.php?title=Nouvelles_fonctionnalit%C3%A9s',
......@@ -41,7 +41,7 @@ class Class_Feature_List {
['Label' => $this->_('Explorateur de fichiers'),
'Desc' => $this->_('Gérer les fichiers dont vous avez besoin pour enrichir vos contenus'),
'Image' => '',
'Video' => '',
'Video' => 'https://www.youtube.com/watch?v=j9ZMM-VbHPQ',
'Category' => $this->_('Administration'),
'Right' => function($feature, $user) {
return $user->canAccessBackend();
......@@ -75,7 +75,7 @@ class Class_Feature_List {
['Label' => $this->_('Connecteur Skilleos'),
'Desc' => $this->_('%s propose des formations en ligne. Le connecteur apporte SSO et aspiration du catalogue', '<a href="http://www.skilleos.com/">Skilleos</a>'),
'Image' => '',
'Video' => 'https://www.youtube.com/watch?v=Xlq31NIrFIs',
'Video' => 'https://youtu.be/Xlq31NIrFIs',
'Category' => $this->_('Bibliothèque numérique'),
'Right' => function($feature_description, $user) {return true;},
'Wiki' => 'http://wiki.bokeh-library-portal.org/index.php?title=Skilleos',
......@@ -86,7 +86,7 @@ class Class_Feature_List {
['Label' => $this->_('Historique des modifications des articles en Front'),
'Desc' => $this->_('Vous pouvez accéder à l\'historique des modifications d\'un article directement à partir des boites article ou calendrier'),
'Image' => '',
'Video' => '',
'Video' => 'https://youtu.be/2D8ARAUKfE8',
'Category' => $this->_('Administration'),
'Right' => function($feature_description, $user) {return $user->canAccessBackend();},
'Wiki' => 'http://wiki.bokeh-library-portal.org/index.php?title=Articles_-_Cr%C3%A9er,_r%C3%A9diger_et_ordonner#Historique_des_versions',
......@@ -109,12 +109,13 @@ class Class_Feature_List {
'Desc' => $this->_('%s est un logiciel de gestion de bibliothèque numérique. Le connecteur permet de moissonner le catalogue',
'<a href="https://omeka.org/">Omeka</a>'),
'Image' => 'http://wiki.bokeh-library-portal.org/images/8/85/Omeka.png',
'Video' => '',
'Video' => 'https://www.youtube.com/watch?v=nny7NnlZUCk',
'Category' => $this->_('Bibliothèque numérique'),
'Right' => function($feature_description, $user) {return true;},
'Wiki' => 'http://wiki.bokeh-library-portal.org/index.php/Omeka',
'Test' => '',
'Date' => '2017-11-10'],
'65273' =>
['Label' => $this->_('Export des agendas au format iCalendar'),
'Desc' => $this->_('Exportez vos agendas pour les intégrer dans un logiciel de calendrier ou un autre système d\'information.'),
......@@ -172,10 +173,10 @@ class Class_Feature_List {
'13615' =>
['Label' => $this->_('Consultation de l\'historique des prêts depuis le compte lecteur Bokeh'),
'Desc' => 'Pour les SIGB Nanook (à partir de 4.1) et Koha (nécessite RESTFUL), le lecteur peut consulter l\historique de ses prêts',
'Desc' => 'Pour les SIGB Nanook (à partir de 4.1) et Koha (nécessite RESTFUL), le lecteur peut consulter l\'historique de ses prêts',
'Image' => '',
'Video' => 'https://youtu.be/C86Sa-I16E0',
'Category' => '',
'Category' => $this->_('Compte lecteur'),
'Right' => function($feature_description, $user) {return true;},
'Wiki' => 'http://wiki.bokeh-library-portal.org/index.php?title=Historique_de_pr%C3%AAts',
'Test' => '',
......