diff --git a/INSTALL.en.md b/INSTALL.en.md
index e5266a6c0b3171044fdc7ce5ad80f6c86137a076..6226276f6fb2b6b9a24850ab2b71401d568917ca 100644
--- a/INSTALL.en.md
+++ b/INSTALL.en.md
@@ -271,7 +271,10 @@ Edit /etc/mysql/my.cnf and add to the [mysqld] section the following line (in or
 
 ```
 ft_min_word_len = 1
+ft_stopword_list = /dev/null
 ```
+
+The stopword list can be set to a file in which you can define any word to be ignored.
 Restart mysql.
 
 
diff --git a/VERSIONS b/VERSIONS
index d60bf6d0652905638541740c01abd0cca28e1b6e..5391188822862b096345ae3051ade934ab868219 100644
--- a/VERSIONS
+++ b/VERSIONS
@@ -1,3 +1,14 @@
+20/08/2019 - v8.0.23
+
+ - ticket #94332 : WebService : amélioration de l'affichage des sites de retraits des reservations.
+ - ticket #95190 : Administration : Export CSV des médias
+ - ticket #68507 : WebService Koha : Correction du format de la date de naissance dans le formulaire de pré-inscription.
+ - ticket #93504 : Bibliothèque numérique : pouvoir ouvrir/télécharger des images avec l'extension JPG
+ - ticket #94528 : Arte VOD : Maintenance du connecteur 
+ - ticket #93542 : Affichage des vignettes : prise en compte des champs unimarc spécifiés dans la configuration du profil
+ - ticket #95885 : Version Mobile : Affichage des horaires d'ouvertures dans la fiche bibliothèque.
+
+
 29/07/2019 - v8.0.22
 
  - ticket #80976 : Page notice : connecté en tant qu'administrateur, l'outil "Inspector Gadget" permet de supprimer un exemplaire
diff --git a/application/modules/admin/controllers/AlbumController.php b/application/modules/admin/controllers/AlbumController.php
index 4d972393113e1900243bee4479d5374bddb21a40..9dbf72058adabdabc10be8d5aae05d9e67615e5c 100644
--- a/application/modules/admin/controllers/AlbumController.php
+++ b/application/modules/admin/controllers/AlbumController.php
@@ -119,7 +119,8 @@ class Admin_AlbumController extends ZendAfi_Controller_Action {
 
     $form = $this->_formImportEAD();
     $this->view->form_import_ead = $form;
-    $this->view->form_export_ead = $this->_formExportEad();
+    $this->view->form_export_ead = $this->_formExport();
+    $this->view->form_export_csv = $this->_formExport('csv');
 
     if (!$this->_request->isPost())
       return;
@@ -159,12 +160,12 @@ class Admin_AlbumController extends ZendAfi_Controller_Action {
   }
 
 
-  protected function _formExportEAD() {
+  protected function _formExport($type='ead') {
     return $this->view
       ->newForm(['id' => 'export_ead', 'class' => 'form'])
       ->setMethod('post')
       ->setAttrib('enctype', 'multipart/form-data')
-      ->setAction($this->view->url(['action' => 'export-ead']))
+      ->setAction($this->view->url(['action' => 'export-'.$type]))
       ->addElement('select',
                    'cat_id',
                    ['style' => 'max-width:445px;',
@@ -172,12 +173,34 @@ class Admin_AlbumController extends ZendAfi_Controller_Action {
                     'required' => true,
                     'multiOptions' => ['' => $this->_('Choisissez une catégorie')]
                                              + Class_AlbumCategorie::getAllLibelles()])
-      ->addElement('submit', 'submit', ['label' => 'Exporter en EAD']);
+      ->addElement('submit', 'submit', ['label' => 'Exporter en ' . strtoupper($type)]);
+  }
+
+
+  public function exportCsvAction() {
+    $description = (new Class_TableDescription('ressources'))
+      ->addColumn($this->_('Categorie'), 'album_category_absolute_path')
+      ->addColumn($this->_('Titre Album'), 'titre_album')
+      ->addColumn($this->_('Description Album'), 'description_album')
+      ->addColumn($this->_('Date'), 'annee')
+      ->addColumn($this->_('Créateur'), 'auteur')
+      ->addColumn($this->_('Editeur'), 'editeur')
+      ->addColumn($this->_('Titre'), 'titre')
+      ->addColumn($this->_('Description'), 'description')
+      ->addColumn($this->_('Ressource'), 'play_ressource_url');
+    $categories = [Class_AlbumCategorie::find($this->_getParam('cat_id',1))];
+
+    $datas = [];
+    foreach(Class_AlbumCategorie::getAlbumsFromCategories([$this->_getParam('cat_id',1)]) as $album)
+      $datas = array_merge($album->getRessources(),$datas);
+    return $this->_helper->csv('export.csv',
+                               $this->view->renderCsv($description, $datas));
+
   }
 
 
   public function exportEadAction() {
-    $form = $this->_formExportEAD();
+    $form = $this->_formExport();
     if ($form->isValid($this->_request->getPost())) {
       $this->getHelper('ViewRenderer')->setNoRender();
       $response = $this->_response;
diff --git a/application/modules/admin/views/scripts/album/import-ead.phtml b/application/modules/admin/views/scripts/album/import-ead.phtml
index cdc4995e225ee44e3917f7099031f4fdfd589197..7985bb47262e4f52597171ccfea3d5973f1f4afe 100644
--- a/application/modules/admin/views/scripts/album/import-ead.phtml
+++ b/application/modules/admin/views/scripts/album/import-ead.phtml
@@ -3,4 +3,5 @@ echo $this->tag('h2', $this->_('Import'));
 echo $this->renderForm($this->form_import_ead);
 echo $this->tag('h2', $this->_('Export'));
 echo $this->renderForm($this->form_export_ead);
+echo $this->renderForm($this->form_export_csv);
 ?>
diff --git a/application/modules/opac/controllers/AuthController.php b/application/modules/opac/controllers/AuthController.php
index 90cd4f88b41b5b398514cc514a4807f36d5cc08f..44a256ac0dee0704368a0ec6c0879f257f1d25f0 100644
--- a/application/modules/opac/controllers/AuthController.php
+++ b/application/modules/opac/controllers/AuthController.php
@@ -557,11 +557,8 @@ class AuthController extends ZendAfi_Controller_Action {
     if ('' != $this->_getParam('emailCheck'))
       return $this->_redirect('/');
 
-    $form = $pre_registration
-      ->getForm()
-      ->populate(ZendAfi_Filters_Post::filterStatic($this->_request->getParams()));
-
-    $this->view->form = $form;
+    $this->view->form =
+      $form->populate(ZendAfi_Filters_Post::filterStatic($this->_request->getParams()));
 
     $data = ZendAfi_Filters_Post::filterStatic($this->_request->getPost());
     unset($data['emailCheck']);
diff --git a/application/modules/opac/controllers/AuthorController.php b/application/modules/opac/controllers/AuthorController.php
index a234108d9922cd0abbb9307b852ed81067067890..d27bd0b72b56c3d27a433c8663df532cbead80a4 100644
--- a/application/modules/opac/controllers/AuthorController.php
+++ b/application/modules/opac/controllers/AuthorController.php
@@ -20,25 +20,29 @@
  */
 
 class AuthorController extends ZendAfi_Controller_Action {
-  public function viewAction() {
-    if (!$author = $this->_findAuthor())
+
+  protected $_author;
+
+
+  public function preDispatch() {
+    parent::preDispatch();
+    if (!$this->_author = $this->view->author = $this->_findAuthor())
       throw new Zend_Controller_Action_Exception($this->view->_('Désolé, cette page n\'existe pas'), 404);
+  }
+
 
-    $this->_addInspectorGadget($author);
-    $this->view->author_description = new Class_CodifAuteur_Description($author);
+  public function viewAction() {
+    $this->_addInspectorGadget($this->_author);
+    $this->view->author_description = new Class_CodifAuteur_Description($this->_author);
     $this->view->titre = $this->view->_('Auteur');
   }
 
 
   public function renderYoutubeChannelAction() {
     session_write_close();
-
-    if (!$author = $this->_findAuthor())
-      return $this->_helper->HTMLAjaxResponse('');
-
     $items = [];
     foreach((new Class_WebService_Youtube())
-            ->videosOfChannel($author->getYoutubeChannelId()) as $video) {
+            ->videosOfChannel($this->_author->getYoutubeChannelId()) as $video) {
       $items[] = $this->view->tag('div',
                                   $this->view->tag('iframe', '', ['src' => $video->getEmbedUrl(),
                                                                   'allow' => 'accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture',
@@ -75,4 +79,15 @@ class AuthorController extends ZendAfi_Controller_Action {
 
     return null;
   }
+
+
+  public function biographyAction() {}
+
+  public function recordsAction() {}
+
+  public function collaborationsAction() {}
+
+  public function interviewsAction() {}
+
+  public function youtubeChanAction() {}
 }
\ No newline at end of file
diff --git a/application/modules/opac/controllers/NoticeajaxController.php b/application/modules/opac/controllers/NoticeajaxController.php
index b42be803b8412c9f1aee67f91dac470153d240ce..7b2e4b706d1cec3f774392e8d540051671479bfd 100644
--- a/application/modules/opac/controllers/NoticeajaxController.php
+++ b/application/modules/opac/controllers/NoticeajaxController.php
@@ -110,7 +110,13 @@ class NoticeAjaxController extends ZendAfi_Controller_Action {
 
     $exemplaires = (new Class_CommSigb())->getDispoExemplaires($exemplaires);
 
-    $this->_sendResponseWithScripts($this->view->Notice_Exemplaires($exemplaires, $nb_notices_oeuvre, $display));
+    $html = $this->view->Notice_Exemplaires($exemplaires, $nb_notices_oeuvre, $display);
+
+    if (!empty($html))
+      Class_ScriptLoader::getInstance()
+        ->addJQueryReady("$('.document_items').removeClass('d-none'); $('.document_items').removeClass('disabled'); $('.document_items').removeClass('text-black-50'); ");
+
+    $this->_sendResponseWithScripts($html);
   }
 
 
@@ -272,6 +278,10 @@ class NoticeAjaxController extends ZendAfi_Controller_Action {
 
     $html = $add_album_tag . $html;
 
+    if (!empty($html))
+      Class_ScriptLoader::getInstance()
+        ->addJQueryReady("$('.document_items').removeClass('d-none'); $('.document_items').removeClass('disabled'); $('.document_items').removeClass('text-black-50'); ");
+
     $this->_sendResponseWithScripts($html);
   }
 
@@ -575,6 +585,6 @@ class NoticeAjaxController extends ZendAfi_Controller_Action {
         ->addJQueryReady("$('.document_author').removeClass('d-none'); $('.document_author').removeClass('disabled'); $('.document_author').removeClass('text-black-50'); ");
 
     $author_description = new Class_CodifAuteur_Description($author);
-    $this->_sendResponseWithScripts($this->view->renderAuthorDescription($author_description));
+    $this->_sendResponseWithScripts($this->view->renderAuthor($author_description));
   }
 }
\ No newline at end of file
diff --git a/application/modules/opac/controllers/RechercheController.php b/application/modules/opac/controllers/RechercheController.php
index f7bd5adbbe08fcfb7b23211dc85d5a546bbf808c..bded529f364f4075dfb80925e723bad72bb14d39 100644
--- a/application/modules/opac/controllers/RechercheController.php
+++ b/application/modules/opac/controllers/RechercheController.php
@@ -743,8 +743,11 @@ class RechercheController extends ZendAfi_Controller_Action {
                  'class' => 'zend_form reservation_pickup',
                  'action' => $this->view->url(['controller' => 'recherche',
                                                'action' => $action])])
-      ->addElement('Radio', 'code_annexe', ['required' => true,
-                                            'allowEmpty' => false])
+      ->addElement('Radio',
+                   'code_annexe',
+                   ['required' => true,
+                    'allowEmpty' => false,
+                    'escape' => false])
 
       ->addDisplayGroup(['code_annexe'], 'group', ['legend' => 'Site de retrait']);
   }
diff --git a/application/modules/opac/controllers/RecordController.php b/application/modules/opac/controllers/RecordController.php
index 3ff0821983416719aef8a3f0e564375523760aab..6c5a52a7da225cf253c57ba073d1d0fa57900515 100644
--- a/application/modules/opac/controllers/RecordController.php
+++ b/application/modules/opac/controllers/RecordController.php
@@ -32,6 +32,9 @@ class RecordController extends ZendAfi_Controller_Action {
   }
 
 
+  public function itemsAction() {}
+
+
   public function summaryAction() {}
 
 
diff --git a/application/modules/opac/views/scripts/author/biography.phtml b/application/modules/opac/views/scripts/author/biography.phtml
new file mode 100644
index 0000000000000000000000000000000000000000..03f860a53d59ffd9040d292e23d54769d25fd1dd
--- /dev/null
+++ b/application/modules/opac/views/scripts/author/biography.phtml
@@ -0,0 +1,2 @@
+<?php
+echo $this->author_Biography($this->author);
diff --git a/application/modules/opac/views/scripts/author/collaborations.phtml b/application/modules/opac/views/scripts/author/collaborations.phtml
new file mode 100644
index 0000000000000000000000000000000000000000..a059b6ea92687d6ac6ac0ae3c8e80ce370553323
--- /dev/null
+++ b/application/modules/opac/views/scripts/author/collaborations.phtml
@@ -0,0 +1,2 @@
+<?php
+echo $this->author_Collaborations($this->author);
diff --git a/application/modules/opac/views/scripts/author/interviews.phtml b/application/modules/opac/views/scripts/author/interviews.phtml
new file mode 100644
index 0000000000000000000000000000000000000000..0b579e216d4fc7da7cc26a6c536e450da69640b4
--- /dev/null
+++ b/application/modules/opac/views/scripts/author/interviews.phtml
@@ -0,0 +1,2 @@
+<?php
+echo $this->author_Interviews($this->author);
diff --git a/application/modules/opac/views/scripts/author/records.phtml b/application/modules/opac/views/scripts/author/records.phtml
new file mode 100644
index 0000000000000000000000000000000000000000..78908fe1a6be60da307b5114c35b2619434ba86d
--- /dev/null
+++ b/application/modules/opac/views/scripts/author/records.phtml
@@ -0,0 +1,2 @@
+<?php
+echo $this->author_Records($this->author);
diff --git a/application/modules/opac/views/scripts/author/view.phtml b/application/modules/opac/views/scripts/author/view.phtml
index 76e47d2a08a27c3018c4002b8f7a635dbc5a4e2e..9d9fc6550f343686385c7aa8bcbb42e4a08db101 100644
--- a/application/modules/opac/views/scripts/author/view.phtml
+++ b/application/modules/opac/views/scripts/author/view.phtml
@@ -1,7 +1,2 @@
 <?php
-$this->openBoite($this->author_description->getLabel());
-
 echo $this->renderAuthorDescription($this->author_description);
-
-$this->closeBoite();
-?>
diff --git a/application/modules/opac/views/scripts/author/youtube-chan.phtml b/application/modules/opac/views/scripts/author/youtube-chan.phtml
new file mode 100644
index 0000000000000000000000000000000000000000..b882f523bfb92a627256b4c8327d64a0aacb8d20
--- /dev/null
+++ b/application/modules/opac/views/scripts/author/youtube-chan.phtml
@@ -0,0 +1,2 @@
+<?php
+echo $this->author_YoutubeChan($this->author);
diff --git a/application/modules/opac/views/scripts/record/items.phtml b/application/modules/opac/views/scripts/record/items.phtml
new file mode 100644
index 0000000000000000000000000000000000000000..b09d70a4d3abba9838a2ab87ad26874e4026c47b
--- /dev/null
+++ b/application/modules/opac/views/scripts/record/items.phtml
@@ -0,0 +1,2 @@
+<?php
+echo $this->renderRecord_Items($this->record);
\ No newline at end of file
diff --git a/application/modules/telephone/views/scripts/recherche/bibliotheque.phtml b/application/modules/telephone/views/scripts/recherche/bibliotheque.phtml
index fc5711054a62a9ae3f4b6f21369956e27092a30e..59b276ec28d97957dbbfffaae8b04ed60b8cd1e3 100644
--- a/application/modules/telephone/views/scripts/recherche/bibliotheque.phtml
+++ b/application/modules/telephone/views/scripts/recherche/bibliotheque.phtml
@@ -1,26 +1,2 @@
-<?php echo $this->toolbar($this->_("Bib"));?>
-<h1><?php echo $this->escape($this->bib->getLibelle());?></h1>
-<ul data-role="listview">
-  <li data-role="list-divider"><?php echo $this->_('Coordonnées')?></li>
-  <li>
-   <div style="float:left"><?php echo $this->mapForLieu($this->bib->answersLocation(),
-                                                        array('size' => '100x100')); ?></div>
-    <address>
-    <?php echo nl2br($this->bib->getAdresse());?><br>
-    <?php echo $this->bib->getCp();?> <?php echo $this->bib->getVille();?>
-    </address>
-    <div class="clear"></div>
-  </li>
-  <?php if ($this->bib->getTelephone()) { ?>
-  <li><?php echo $this->bib->getTelephone();?></li>
-  <?php } ?>
-  <?php if ($this->bib->getMail()) { ?>
-  <li><a href="mailto:<?php echo $this->bib->getMail();?>"><?php echo $this->bib->getMail();?></a></li>
-  <?php } ?>
-  <?php if ($this->bib->getHoraire()) { ?>
-  <li data-role="list-divider"><?php echo $this->_('Horaires')?></li>
-  <li>
-    <?php echo nl2br(urldecode($this->bib->getHoraire()));?>
-  </li>
-  <?php } ?>
-</lu>
+<?php
+echo $this->renderLibrary($this->bib);
diff --git a/library/Class/AdminVar.php b/library/Class/AdminVar.php
index 76f61f05955a6de96a2f6ab405f037ecb3658c3c..f011c795fa9525f6dd2dff344e70c695145c64ef 100644
--- a/library/Class/AdminVar.php
+++ b/library/Class/AdminVar.php
@@ -183,9 +183,9 @@ class Class_AdminVarLoader extends Storm_Model_Loader {
             'CYBERLIBRIS_URL' => Class_AdminVar_Meta::newDefault($this->_('Adresse du serveur OAI Cyberlibris'))->bePrivate(),
             'CYBERLIBRIS_ID' => Class_AdminVar_Meta::newDefault($this->_('Identifiant SSO Cyberlibris'))->bePrivate(),
 
-            'ARTE_VOD_LOGIN' => Class_AdminVar_Meta::newDefault($this->_('Login ARTE VOD'))->bePrivate(),
-            'ARTE_VOD_KEY' => Class_AdminVar_Meta::newDefault($this->_('Clé ARTE VOD'))->bePrivate(),
-            'ARTE_VOD_SSO_KEY' => Class_AdminVar_Meta::newDefault($this->_('Clé ARTE VOD Single Sign-On'))->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_SSO_KEY' => Class_AdminVar_Meta::newDefault($this->_('Clé de cryptage lors du SSO'))->bePrivate(),
 
             'NUMERIQUE_PREMIUM_URL' => Class_AdminVar_Meta::newDefault('')->bePrivate(),
 
@@ -784,9 +784,9 @@ class Class_AdminVarLoader extends Storm_Model_Loader {
    * @return bool
    */
   public function isArteVODEnabled() {
-    return (('' != Class_AdminVar::get('ARTE_VOD_LOGIN'))
-            && ('' != Class_AdminVar::get('ARTE_VOD_KEY'))
-            && ('' != Class_AdminVar::get('ARTE_VOD_SSO_KEY')));
+    return
+      '' != Class_AdminVar::get('ARTE_VOD_LOGIN')
+      && '' != Class_AdminVar::get('ARTE_VOD_SSO_KEY');
   }
 
 
diff --git a/library/Class/AlbumRessource.php b/library/Class/AlbumRessource.php
index 351df03add207c4f7b455f86c78bf90f6c818154..a616f3ac7fa1358ef3120c5c408c48baf94109ed 100644
--- a/library/Class/AlbumRessource.php
+++ b/library/Class/AlbumRessource.php
@@ -138,6 +138,14 @@ class Class_AlbumRessource extends Storm_Model_Abstract {
   }
 
 
+  /**
+   * @return String
+   */
+  public function getDescriptionAlbum() {
+    return $this->getAlbum()->getDescription();
+  }
+
+
   /**
    * @return string
    */
@@ -146,6 +154,14 @@ class Class_AlbumRessource extends Storm_Model_Abstract {
   }
 
 
+  /**
+   * @return string
+   */
+  public function getAlbumCategoryAbsolutePath() {
+    return $this->getAlbum()->getCategorie()->getAbsolutePath();
+  }
+
+
   /**
    * @return String
    */
diff --git a/library/Class/ArteVodLink.php b/library/Class/ArteVodLink.php
index e367e7fe5ddacca759825268993c722cb4eb3255..a28a27d604825d2789a4fcaed4b88c1406e5caeb 100644
--- a/library/Class/ArteVodLink.php
+++ b/library/Class/ArteVodLink.php
@@ -22,14 +22,15 @@
 class Class_ArteVodLink {
   use Trait_TimeSource;
 
-  protected $_album;
-  protected $_user;
   const
     AUTH_URL = 'https://portal.mediatheque-numerique.com/sso_login',
     API_URL = 'https://vod.mediatheque-numerique.com',
     API_SUFFIX = '/api/v1/',
     MEDIATHEQUES_SUFFIX = '/mediatheques/';
 
+  protected $_album;
+  protected $_user;
+
 
   public static function forAlbumAndUser($album, $user) {
     return (new self())->setAlbum($album)->setUser($user);
diff --git a/library/Class/Catalogue.php b/library/Class/Catalogue.php
index 9f90bf8ba766ce60a4400be18421574ec79b51b6..172d2ffc843ba6c8eca3c077d1042a8590ef40cf 100644
--- a/library/Class/Catalogue.php
+++ b/library/Class/Catalogue.php
@@ -326,7 +326,11 @@ class CatalogueLoader extends Storm_Model_Loader {
       return $this->getRequetesPanier($preferences);
 
     $against = $this->selectionFacettesForCatalogueRequestByPreferences($preferences);
-    if ($catalogue = Class_Catalogue::getLoader()->find($preferences['id_catalogue'])) {
+
+    $catalogue = null;
+
+    if (isset($preferences['id_catalogue'])
+        && ($catalogue = Class_Catalogue::getLoader()->find($preferences['id_catalogue']))) {
       $conditions = [$this->facetsClauseFor($catalogue, $against)];
       $conditions []= $this->docTypeClauseFor($catalogue);
       $conditions []= $this->yearClauseFor($catalogue);
diff --git a/library/Class/CodifAuteur.php b/library/Class/CodifAuteur.php
index 1ae9b079875be577871dffbaaac4971b166f8e47..31304c972c9ece4b97e2cb07ba0f7c763bc67071 100644
--- a/library/Class/CodifAuteur.php
+++ b/library/Class/CodifAuteur.php
@@ -21,6 +21,11 @@
 
 
 class CodifAuteurLoader extends Storm_Model_Loader {
+
+  const RECORDS_LOAD_LIMIT = 100;
+  const AUTHORS_FETCH_BIO_LIMIT = 50;
+
+
   public function findWithFullName($author) {
     if(!$author)
       return null;
@@ -101,6 +106,148 @@ class CodifAuteurLoader extends Storm_Model_Loader {
     if($new_author = $notice->getAuteurWith($author->getFormes()))
       $author->setLibelle($new_author)->save();
   }
+
+
+  public function findAllByPreferences($preferences) {
+    $preferences['nb_notices'] = static::RECORDS_LOAD_LIMIT;
+    return Class_CodifAuteur::findAllFromRecordsAndPreferences(Class_Notice::getNoticesFromPreferences($preferences),
+                                                 $preferences);
+  }
+
+
+  public function findAllFromRecordsAndPreferences($records, $preferences) {
+    if (!$authors_ids = Class_CodifAuteur::findAllIdsFromRecordsAndPreferences($records, $preferences))
+      return [];
+
+    $params = ['id_auteur' => $authors_ids];
+
+    if ($with_thumbnail = isset($preferences['with_thumbnail']) && $preferences['with_thumbnail'])
+      $params ['where'] = 'thumbnail_url > \'\'';
+
+    $size = (isset($preferences['size']))
+      ? $preferences['size']
+      : (isset($preferences['authors_count'])
+         ? $preferences['authors_count']
+         : static::RECORDS_LOAD_LIMIT);
+
+    $order_random = isset($preferences['order'])
+      && $preferences['order'] == Class_Systeme_ModulesAccueil_Authors::SORT_RANDOM;
+
+    $params ['limit'] = $order_random
+      ? static::RECORDS_LOAD_LIMIT
+      : $size;
+
+    $params ['order'] = isset($preferences['order'])
+      ? $preferences['order']
+      : '';
+
+    if ($order_random)
+      $params ['order'] = '';
+
+    $authors = Class_CodifAuteur::findAllBy(array_filter($params));
+
+    if ($order_random) {
+      shuffle($authors);
+      $authors = array_slice($authors, 0, $size);
+    }
+
+    return $authors;
+  }
+
+
+  public function findAllIdsFromRecordsAndPreferences($records, $preferences) {
+    if (!isset($preferences['authors_selection_mode'])
+        || !($mode = $preferences['authors_selection_mode']))
+      return Class_CodifAuteur::findAllIdsFromRecords($records);
+
+    if ($mode === Class_Systeme_ModulesAccueil_Authors::AUTHORS_SELECTION_MODE_MAIN)
+      return Class_CodifAuteur::findAllMainIdsFromRecords($records);
+
+    if ($mode === Class_Systeme_ModulesAccueil_Authors::AUTHORS_SELECTION_MODE_RESPONSIBILITIES
+        && isset($preferences['responsibilities']))
+      return Class_CodifAuteur::findAllIdsByResponsibilitiesIdsFromRecords($records, array_filter(explode(';', $preferences['responsibilities'])));
+
+    return  Class_CodifAuteur::findAllIdsFromRecords($records);
+  }
+
+
+  public function findAllIdsFromRecords($records) {
+    $authors_ids = [];
+    foreach($records as $record)
+      $authors_ids = array_merge($authors_ids,
+                                 Class_Notice_Facette::facetsValuesFromRecordFilteredBy($record, 'isAuthor'));
+
+    return array_filter(array_unique($authors_ids));
+  }
+
+
+  public function findAllMainIdsFromRecords($records) {
+    $authors_ids = array_map(function($record)
+                             {
+                               return current(Class_Notice_Facette::facetsValuesFromRecordFilteredBy($record, 'isAuthor'));
+                             },
+                             $records);
+
+    return array_filter(array_unique($authors_ids));
+  }
+
+
+  public function findAllIdsByResponsibilitiesIdsFromRecords($records, $responsibilities_ids) {
+    if (!$responsibilities_ids)
+      return [];
+
+    $responsibilities = Class_CodifAuteurFonction::findAllBy(['id_fonction' => $responsibilities_ids]);
+
+    $responsibilities_labels = array_filter(
+                                            array_map(function($responsibility)
+                                                      {
+                                                        return $responsibility->getLibelle();
+                                                      },
+                                                      $responsibilities));
+
+    $authors_ids = [];
+    foreach($records as $record) {
+      $authors_ids = array_merge($authors_ids,
+                                 Class_CodifAuteur::findAllIdsByResponsibilitiesLabelsFromRecord($record,
+                                                                                                 $responsibilities_labels));
+    }
+
+    return array_filter(array_unique($authors_ids));
+  }
+
+
+  public function findAllIdsByResponsibilitiesLabelsFromRecord($record, $responsibilities_labels) {
+    $authors = array_filter($record->getAuteursUnimarc(false, true),
+                            function($author) use ($responsibilities_labels)
+                            {
+
+                              return in_array($author->getFonction(), $responsibilities_labels);
+                            });
+
+    return array_map(function($author)
+                     {
+                       return $author->getId();
+                     },
+                     $authors);
+  }
+
+
+  public function fetchBiographies($authors) {
+    array_map(function($author)
+              {
+                (new Class_CodifAuteur_Description($author))->fetchBiography();
+              },
+              $authors);
+    return $authors;
+  }
+
+
+  public function filterByValidThumbnail($authors) {
+    return array_filter($authors, function($author)
+                        {
+                          return $author->isThumbnailValid();
+                        });
+  }
 }
 
 
diff --git a/library/Class/CodifAuteur/Description.php b/library/Class/CodifAuteur/Description.php
index a916cf8659bcdef9aa50eace6e1f50e31c9b2d59..8caa0165607a46f16ae06c7f72dfce2ae15e899b 100644
--- a/library/Class/CodifAuteur/Description.php
+++ b/library/Class/CodifAuteur/Description.php
@@ -214,7 +214,7 @@ class Class_CodifAuteur_Description {
 
 
   public function fetchBiography() {
-    $bio =  new Class_Entity($this->_fetchBiography($this->_author,
+    $bio = new Class_Entity($this->_fetchBiography($this->_author,
                                                     $this->getRecords(),
                                                     $this->getAssociatedAuthors()));
 
diff --git a/library/Class/File/Mime.php b/library/Class/File/Mime.php
index c11e7b503d0c12258539479b1b065c855780a073..9c1039082528163871605ea153bb874846766808 100644
--- a/library/Class/File/Mime.php
+++ b/library/Class/File/Mime.php
@@ -210,6 +210,7 @@ class Class_File_Mime {
    */
   public static function getType($ext)
   {
+    $ext = strtolower($ext);
     if (isset(self::$extToTypes[$ext])) {
       return self::$extToTypes[$ext];
     }
diff --git a/library/Class/Notice.php b/library/Class/Notice.php
index e2383cb92669d9c43873be2768b02ff06ad0f2d8..de25dfb09897e099a8c4b29ae8085eea45fecd27 100644
--- a/library/Class/Notice.php
+++ b/library/Class/Notice.php
@@ -31,7 +31,8 @@ class NoticeLoader extends Storm_Model_Loader {
     $notices = $this->findAll($requetes["req_liste"]);
 
     // Tirage aleatoire
-    if ($preferences["aleatoire"] == 1) {
+    if (isset($preferences['aleatoire'])
+        && $preferences["aleatoire"] == 1) {
       shuffle($notices);
       $notices = array_slice($notices, 0, $preferences["nb_notices"]);
     }
diff --git a/library/Class/Systeme/ModulesAccueil.php b/library/Class/Systeme/ModulesAccueil.php
index 0a014b7b6758ce896486ff1e987b4b48956bf7ce..3a50c187b60430d8fc2fbe6e22abd47caec26423 100644
--- a/library/Class/Systeme/ModulesAccueil.php
+++ b/library/Class/Systeme/ModulesAccueil.php
@@ -157,18 +157,17 @@ class Class_Systeme_ModulesAccueil extends Class_Systeme_ModulesAbstract {
     $profil = Class_Profil::getCurrentProfil();
     $modules_accueil = Class_Systeme_ModulesAccueil::getInstance();
     $modules = $modules_accueil->getModules();
-    $groupes = $modules_accueil->getGroupes();
+    $groupes = array_keys($modules_accueil->getGroupes());
 
     $hierarchy = [];
     foreach($modules as $type => $module) {
       if (!$module->isVisibleForProfil($profil))
         continue;
 
-      $group_label = $groupes[$module->getGroup()];
-      if (!array_key_exists($group_label, $hierarchy))
-        $hierarchy[$group_label] = [];
+      if (!array_key_exists($module->getGroup(), $hierarchy))
+        $hierarchy[$module->getGroup()] = [];
 
-      $hierarchy[$group_label][$type] = $module->getLibelle();
+      $hierarchy[$module->getGroup()][$type] = $module->getLibelle();
     }
 
     return $hierarchy;
diff --git a/library/Class/Systeme/ModulesAccueil/Authors.php b/library/Class/Systeme/ModulesAccueil/Authors.php
index 8d8742866b41ad0c255a9714f2e418dc32b7c469..e3c0cc9f75b17f6232f8d526a8fa28326734fb27 100644
--- a/library/Class/Systeme/ModulesAccueil/Authors.php
+++ b/library/Class/Systeme/ModulesAccueil/Authors.php
@@ -22,6 +22,11 @@
 class Class_Systeme_ModulesAccueil_Authors extends Class_Systeme_ModulesAccueil_Null {
   const
     CODE = 'AUTHORS',
+
+    SORT_RANDOM = 'random',
+    SORT_SELECTION = '',
+    SORT_AUTHOR = 'libelle',
+
     AUTHORS_SELECTION_MODE_ALL = 'all',
     AUTHORS_SELECTION_MODE_RESPONSIBILITIES = 'responsibilities',
     AUTHORS_SELECTION_MODE_MAIN = 'main';
@@ -38,6 +43,7 @@ class Class_Systeme_ModulesAccueil_Authors extends Class_Systeme_ModulesAccueil_
     $this->_defaultValues = ['titre' => $this->_('Sélection d\'auteurs'),
                              'op_largeur_img' => 260,
                              'authors_count' => 10,
+                             'with_thumbnail' => true,
                              'authors_selection_mode' => static::AUTHORS_SELECTION_MODE_ALL];
   }
 
diff --git a/library/Class/Systeme/ModulesAppli.php b/library/Class/Systeme/ModulesAppli.php
index 3ba3de66167c1967bf126177b15368167e37cd96..7146bc7c3f8357fd1c04cb54c0ee5e162f01b5b7 100644
--- a/library/Class/Systeme/ModulesAppli.php
+++ b/library/Class/Systeme/ModulesAppli.php
@@ -182,10 +182,9 @@ class Class_Systeme_ModulesAppli extends Class_Systeme_ModulesAbstract {
 
 
   public static function newFor($controller, $action, $subaction) {
-    if (('recherche' == $controller) && ('viewnotice' == substr($action, 0, 10)))
-      return new Class_Systeme_ModulesAppli_ViewRecord($controller, $action, $subaction);
-
-    return new Class_Systeme_ModulesAppli_Default($controller, $action, $subaction);
+    return (('recherche' == $controller) && ('viewnotice' == substr($action, 0, 10)))
+      ? new Class_Systeme_ModulesAppli_ViewRecord($controller, $action, $subaction)
+      : new Class_Systeme_ModulesAppli_Default($controller, $action, $subaction);
   }
 
 
diff --git a/library/Class/Systeme/ModulesAppli/ViewRecord.php b/library/Class/Systeme/ModulesAppli/ViewRecord.php
index 8a12145e1377ae42e87db390c31416e519ce27d3..635cf9aaa579d6c3172869beead8072aed40cc53 100644
--- a/library/Class/Systeme/ModulesAppli/ViewRecord.php
+++ b/library/Class/Systeme/ModulesAppli/ViewRecord.php
@@ -33,9 +33,6 @@ class Class_Systeme_ModulesAppli_ViewRecord extends Class_Systeme_ModulesAppli_D
     if ($this->_defaults)
       return $this->_defaults;
 
-    if (false !== strpos($this->_action,'viewnotice'))
-      $this->_action = 'viewnotice';
-
     $valeurs = ['barre_nav' => 'Notice', // Barre de nav
                 'boite' => null,
                 'entete' => implode(';',
diff --git a/library/Class/WebService/BibNumerique/ArteVOD.php b/library/Class/WebService/BibNumerique/ArteVOD.php
index 51a9e987aca7c4029489250ac267ccc68d54b51a..3dfb9dd735295b70b5e05c4e937f1775269bbd4e 100644
--- a/library/Class/WebService/BibNumerique/ArteVOD.php
+++ b/library/Class/WebService/BibNumerique/ArteVOD.php
@@ -39,8 +39,12 @@ class Class_WebService_BibNumerique_ArteVOD extends Class_WebService_BibNumeriqu
 
 
   public function open_authenticated_url($url) {
-    return $this->getWebClient()->open_url($url, ['auth' => ['user' => Class_AdminVar::get('ARTE_VOD_LOGIN'),
-                                                             'password' => Class_AdminVar::get('ARTE_VOD_KEY')]]);
+    $client = $this->getWebClient();
+
+    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);
   }
 
 
@@ -67,9 +71,9 @@ class Class_WebService_BibNumerique_ArteVOD extends Class_WebService_BibNumeriqu
     } while (!empty($ress_numerique));
 
     $this->_deleteNonHarvested();
-
   }
 
+
   protected function _deleteNonHarvested() {
     if (0 < count($this->getHarvestedIds()))
       Class_Album::getLoader()
@@ -81,6 +85,7 @@ class Class_WebService_BibNumerique_ArteVOD extends Class_WebService_BibNumeriqu
     return Class_ArteVodLink::API_URL . Class_ArteVodLink::API_SUFFIX;
   }
 
+
   public function isEnabled() {
     return Class_AdminVar::isArteVODEnabled();
   }
diff --git a/library/Class/WebService/SIGB/PreRegistration.php b/library/Class/WebService/SIGB/PreRegistration.php
index 56164c231a53309f92f6f96460d61a0c60ed737b..cc22c45bed758af28c6110eb196cb033944242c4 100644
--- a/library/Class/WebService/SIGB/PreRegistration.php
+++ b/library/Class/WebService/SIGB/PreRegistration.php
@@ -172,6 +172,10 @@ class Class_WebService_SIGB_PreRegistrationKoha extends Class_WebService_SIGB_Pr
       return $this->_pre_registration->addError($this->_('Échec de la préinscription, les informations saisies sont invalides.'));
 
     $data['branchcode'] = $this->getBranchCode($data);
+
+    if(isset($data['dateofbirth']))
+      $data['dateofbirth'] = Class_Date::humanDate($data['dateofbirth'],'yyyy-MM-dd');
+
     $response = $int_bib->getSIGBComm()->preRegistration($data);
 
     if(!$response['statut'])
diff --git a/library/ZendAfi/Controller/Plugin/InspectorGadget.php b/library/ZendAfi/Controller/Plugin/InspectorGadget.php
index 7f0c699ba428759f034f574cdb07c1b883697fb3..e139117a6d93d03b3a61bfd27fd85e1c6c0e5e48 100644
--- a/library/ZendAfi/Controller/Plugin/InspectorGadget.php
+++ b/library/ZendAfi/Controller/Plugin/InspectorGadget.php
@@ -100,6 +100,14 @@ class ZendAfi_Controller_Plugin_InspectorGadget extends Zend_Controller_Plugin_A
       return;
     }
 
+    if ($this->_buttons
+        && false !== strpos($this->_response->getBody(), '<div class="inspector_gadget"></div>')) {
+      $this->_response->setBody(str_replace('<div class="inspector_gadget"></div>',
+                                            '<div class="inspector_gadget">' . $html . '</div>',
+                                            $this->_response->getBody()));
+      return;
+    }
+
     if ($this->_buttons
         && false !== strpos($this->_response->getBody(), '<div class="resultats_page">')) {
       $this->_response->setBody(str_replace('<div class="resultats_page">',
diff --git a/library/ZendAfi/View/Helper/Accueil/Authors.php b/library/ZendAfi/View/Helper/Accueil/Authors.php
index c8e517641f6517f4a6c8877a77e6888db38d6464..5f451ed6f260e9ddbaa6db79ff586289ea6f0021 100644
--- a/library/ZendAfi/View/Helper/Accueil/Authors.php
+++ b/library/ZendAfi/View/Helper/Accueil/Authors.php
@@ -32,27 +32,37 @@ class ZendAfi_View_Helper_Accueil_Authors extends ZendAfi_View_Helper_Accueil_Ba
 
 
   public function performAction($action) {
-    if ($action === 'refresh')
-      $this->refreshAuthorsWithoutThumbnail();
+    if ($action === 'refresh') {
+      $this->preferences['with_thumbnail'] = false;
+      Class_CodifAuteur::fetchBiographies(Class_CodifAuteur::findAllByPreferences($this->preferences));
+    }
   }
 
 
-  public function refreshAuthorsWithoutThumbnail() {
-    $authors = array_slice(
-                           array_filter($this->_findAuthorsFromPreferences(false),
-                                        function($author)
-                                        {
-                                          return !$author->isThumbnailValid();
-                                        }),
-                           0,
-                           static::AUTHORS_FETCH_BIO_LIMIT);
+  protected function _renderContent() {
+    $authors = Class_CodifAuteur::filterByValidThumbnail(Class_CodifAuteur::findAllByPreferences($this->preferences));
+
+    return $this->_tag('div',
+                       implode('', array_map([$this, '_renderAuthor'],
+                                             $authors)),
+                       ['class' => 'authors_wall',
+                        'style' => 'column-width:' . $this->preferences['op_largeur_img'] . 'px']);
+  }
+
 
-    array_map(function($author)
-              {
-                (new Class_CodifAuteur_Description($author))->fetchBiography();
-              },
-              $authors);
-    return $this;
+  protected function _renderAuthor($author) {
+    return $this->_tag('div',
+                       $this->_tag('a',
+                                   $this->_tag('img',
+                                               null,
+                                               ['src' => $author->getThumbnailUrl(),
+                                                'width' => $this->preferences['op_largeur_img'],
+                                                'alt' => $author->getLibelle() . '. ' . $this->_('Source: Wikipedia')]),
+                                   ['href' => $this->view->url(['controller' => 'author',
+                                                                'action' => 'view',
+                                                                'id' => $author->getId()]),
+                                    'title' => $this->_('En savoir plus sur %s', $author->getLibelle())]),
+                       ['class' => 'author']);
   }
 
 
@@ -79,137 +89,4 @@ class ZendAfi_View_Helper_Accueil_Authors extends ZendAfi_View_Helper_Accueil_Ba
             }
     ];
   }
-
-
-  protected function _findAuthorsFromPreferences($with_thumbnail_only = true) {
-    $this->preferences['nb_notices'] = static::RECORDS_LOAD_LIMIT;
-    $records = Class_Notice::getNoticesFromPreferences($this->preferences);
-    return $this->_getAuthorsFromRecords($records, $with_thumbnail_only);
-  }
-
-
-  protected function _renderContent() {
-    $authors = array_filter($this->_findAuthorsFromPreferences(),
-                            function($author)
-                            {
-                              return $author->isThumbnailValid();
-                            });
-
-    return $this->_tag('div',
-                       implode('', array_map([$this, '_renderAuthor'],
-                                             $authors)),
-                       ['class' => 'authors_wall',
-                        'style' => 'column-width:' . $this->preferences['op_largeur_img'] . 'px']);
-  }
-
-
-  protected function _getAuthorsFromRecords($records, $with_thumbnail_only) {
-    if (!$authors_ids = $this->_getAuthorsIdsFromRecords($records))
-      return [];
-
-    $params = ['id_auteur' => $authors_ids];
-
-    if ($with_thumbnail_only) {
-      $params['where'] = 'thumbnail_url > \'\'';
-      $params['limit'] = $this->preferences['authors_count'];
-    }
-
-    return Class_CodifAuteur::findAllBy($params);
-  }
-
-
-  protected function _getAuthorsIdsFromRecords($records) {
-    if ($this->preferences['authors_selection_mode'] === Class_Systeme_ModulesAccueil_Authors::AUTHORS_SELECTION_MODE_MAIN)
-      return $this->_getMainAuthorsFromRecords($records);
-
-    if ($this->preferences['authors_selection_mode'] === Class_Systeme_ModulesAccueil_Authors::AUTHORS_SELECTION_MODE_RESPONSIBILITIES) {
-      return  $this->_getAuthorsByResponsibilitiesFromRecords($records);
-    }
-
-    return  $this->_getAllAuthorsFromRecords($records);
-  }
-
-
-  protected function _getAuthorsByResponsibilitiesFromRecords($records) {
-    $responsibilities_labels = $this->_getResponsibilitiesPreferenceLabels();
-
-    $authors_ids = [];
-    foreach($records as $record) {
-      $authors_ids = array_merge($authors_ids,
-                                 $this->_getAuthorsByResponsibilities($record,
-                                                                      $responsibilities_labels));
-    }
-
-    return array_filter(array_unique($authors_ids));
-  }
-
-
-  protected function _getResponsibilitiesPreferenceLabels() {
-    $responsibilities_ids = array_filter(explode(';',
-                                                 $this->preferences['responsibilities']));
-    return array_filter(
-                        array_map(function($responsibility)
-                                  {
-                                    return $responsibility->getLibelle();
-                                  },
-                                  $responsibilities_ids
-                                  ? Class_CodifAuteurFonction::findAllBy(['id_fonction' => $responsibilities_ids])
-                                  : []));
-  }
-
-
-  protected function _getAuthorsByResponsibilities($record, $responsibilities_labels) {
-    $authors = array_filter($record->getAuteursUnimarc(false, true),
-                            function($author) use ($responsibilities_labels)
-                            {
-
-                              return in_array($author->getFonction(), $responsibilities_labels);
-                            });
-
-    return array_map(function($author)
-                     {
-                       return $author->getId();
-                     },
-                     $authors);
-  }
-
-
-  protected function _getMainAuthorsFromRecords($records) {
-    $authors_ids = array_map(function($record)
-                             {
-                               return current(Class_Notice_Facette::facetsValuesFromRecordFilteredBy($record, 'isAuthor'));
-                             },
-                             $records);
-
-    return array_filter(array_unique($authors_ids));
-  }
-
-
-  protected function _getAllAuthorsFromRecords($records) {
-    $authors_ids = [];
-    foreach($records as $record) {
-      $authors_ids = array_merge($authors_ids,
-                                 Class_Notice_Facette::facetsValuesFromRecordFilteredBy($record, 'isAuthor'));
-    }
-
-    return array_filter(array_unique($authors_ids));
-  }
-
-
-  protected function _renderAuthor($author) {
-    return $this->_tag('div',
-                       $this->_tag('a',
-                                   $this->_tag('img',
-                                               null,
-                                               ['src' => $author->getThumbnailUrl(),
-                                                'width' => $this->preferences['op_largeur_img'],
-                                                'alt' => $author->getLibelle() . '. ' . $this->_('Source: Wikipedia')]),
-                                   ['href' => $this->view->url(['controller' => 'author',
-                                                                'action' => 'view',
-                                                                'id' => $author->getId()]),
-                                    'title' => $this->_('En savoir plus sur %s', $author->getLibelle())]),
-                       ['class' => 'author']);
-  }
-}
-
-?>
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/library/ZendAfi/View/Helper/Accueil/Base.php b/library/ZendAfi/View/Helper/Accueil/Base.php
index 8d8c9e30d9661bbbf654cd308d62e2dff1314e67..35217781e83c66581ab46094488df362f55ff5b4 100644
--- a/library/ZendAfi/View/Helper/Accueil/Base.php
+++ b/library/ZendAfi/View/Helper/Accueil/Base.php
@@ -361,13 +361,9 @@ class ZendAfi_View_Helper_Accueil_Base extends ZendAfi_View_Helper_ModuleAbstrac
       ? $classname
       : self::getModuleHelperClass($type_module);
 
-    if (class_exists($classname)) {
-      $helper = new $classname($id_module, $module_params);
-      $helper->setView($view);
-      return $helper;
-    }
-
-    return null;
+    $helper = new $classname($id_module, $module_params);
+    $helper->setView($view);
+    return $helper;
   }
 
 
diff --git a/library/ZendAfi/View/Helper/LibrariesMap.php b/library/ZendAfi/View/Helper/LibrariesMap.php
index 7a2d8cf39830452e713887223879bdf197539074..51329215bfdfa740b0b0c290468baf512f06c240 100644
--- a/library/ZendAfi/View/Helper/LibrariesMap.php
+++ b/library/ZendAfi/View/Helper/LibrariesMap.php
@@ -27,7 +27,7 @@ class ZendAfi_View_Helper_LibrariesMap extends ZendAfi_View_Helper_BaseHelper {
     CLOSE = 'close';
 
   public function librariesMap($libraries, $container_selector, $preferences = []) {
-    if(!$libraries)
+    if (!$libraries)
       return '';
 
     $container_id = sprintf('map_%s', md5($container_selector));
@@ -38,6 +38,15 @@ class ZendAfi_View_Helper_LibrariesMap extends ZendAfi_View_Helper_BaseHelper {
       ->addOPACStyleSheet('../js/openStreetMap/openStreetMap.css')
       ->addJQueryReady('$("'. $container_selector . '").openStreetMap();');
 
+    $libraries = array_filter($libraries,
+                              function($library)
+                              {
+                                return $library->hasLieu();
+                              });
+
+    if (!$libraries)
+      return '';
+
     $datas = [];
     foreach($libraries as $library)
       $datas[] = ['html' => $this->view->renderLibrary($library, $preferences),
diff --git a/library/ZendAfi/View/Helper/ProfileComposition.php b/library/ZendAfi/View/Helper/ProfileComposition.php
index 3c252105ec77aa81e6f6afdd15de58004b9a4330..da92bbbaa00821d954de6e73ef4254979ef766f4 100644
--- a/library/ZendAfi/View/Helper/ProfileComposition.php
+++ b/library/ZendAfi/View/Helper/ProfileComposition.php
@@ -48,7 +48,7 @@ class ZendAfi_View_Helper_ProfileComposition extends ZendAfi_View_Helper_BaseHel
       $blocks[$groupe] = $this->_tag('div',
                                      $this->_tag('h5', $libelle) .
                                      $this->_tag('ul',
-                                                 $this->_getAvailableWidgetsFor($libelle),
+                                                 $this->_getAvailableWidgetsFor($groupe),
                                                  ['class' => 'source_list']));
 
     return $this->_tag('div',
@@ -60,6 +60,7 @@ class ZendAfi_View_Helper_ProfileComposition extends ZendAfi_View_Helper_BaseHel
 
   protected function _getAvailableWidgetsFor($group) {
     $widgets = (new Class_Systeme_ModulesAccueil)->getWidgets();
+
     if(!isset($widgets[$group]))
       return '';
 
diff --git a/library/ZendAfi/View/Helper/RenderAuthorDescription.php b/library/ZendAfi/View/Helper/RenderAuthorDescription.php
index b9c0f88c782800eca2b248d3309bd27cc67b23ad..3760d0df442ceaaab123ab76f5c4f807e4b2d60a 100644
--- a/library/ZendAfi/View/Helper/RenderAuthorDescription.php
+++ b/library/ZendAfi/View/Helper/RenderAuthorDescription.php
@@ -27,15 +27,20 @@ class ZendAfi_View_Helper_RenderAuthorDescription extends ZendAfi_View_Helper_Ba
       ->addOPACScript('author_sheet.js')
       ->addJQueryReady('$("div#' . $div_id . '").authorSheet()');
 
+    $html = [$this->view->openBoiteContent($author_description->getLabel()),
 
-    return $this->_tag('div',
-                       $this->_renderBiography($author_description)
-                       . $this->_renderAssociatedFacets($author_description)
-                       . $this->_renderCollaborations($author_description)
-                       . $this->_renderYoutube($author_description)
-                       . $this->_renderRecords($author_description),
-                       ['class' => 'author',
-                        'id' => $div_id]);
+             $this->_tag('div',
+                         $this->_renderBiography($author_description)
+                         . $this->_renderAssociatedFacets($author_description)
+                         . $this->_renderCollaborations($author_description)
+                         . $this->_renderYoutube($author_description)
+                         . $this->_renderRecords($author_description),
+                         ['class' => 'author',
+                          'id' => $div_id]),
+
+             $this->view->closeBoiteContent()];
+
+    return implode($html);
   }
 
 
diff --git a/library/ZendAfi/View/Helper/RenderCsv.php b/library/ZendAfi/View/Helper/RenderCsv.php
index 35bbeb21b5ac20ee6e16208f4a7c0086c755322f..3069bbc315660c3bd6ae7aad3560cc837757eaf7 100644
--- a/library/ZendAfi/View/Helper/RenderCsv.php
+++ b/library/ZendAfi/View/Helper/RenderCsv.php
@@ -73,7 +73,7 @@ class ZendAfi_View_Helper_RenderCsv extends ZendAfi_View_Helper_BaseHelper {
       ->_description
       ->columnsCollect(function($column) use ($model)
                        {
-                         return $column->renderModelOn($model, $this);
+                         return  $column->renderModelOn($model,$this);
                        });
     return $this->_values;
   }
@@ -91,4 +91,4 @@ class ZendAfi_View_Helper_RenderCsv extends ZendAfi_View_Helper_BaseHelper {
 
   public function renderModelAction($model, $description) { }
 }
-?>
\ No newline at end of file
+?>
diff --git a/library/ZendAfi/View/Helper/Telephone/RenderLibrary.php b/library/ZendAfi/View/Helper/Telephone/RenderLibrary.php
new file mode 100644
index 0000000000000000000000000000000000000000..2d31113cad2915c29209e22140ca39d8a5d6d30e
--- /dev/null
+++ b/library/ZendAfi/View/Helper/Telephone/RenderLibrary.php
@@ -0,0 +1,78 @@
+<?php
+/**
+ * Copyright (c) 2012, Agence Française Informatique (AFI). All rights reserved.
+ *
+ * BOKEH is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
+ * the Free Software Foundation.
+ *
+ * There are special exceptions to the terms and conditions of the AGPL as it
+ * is applied to this software (see README file).
+ *
+ * BOKEH is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * along with BOKEH; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+ */
+
+class ZendAfi_View_Helper_Telephone_RenderLibrary extends ZendAfi_View_Helper_BaseHelper {
+
+  public function renderLibrary($library) {
+    if (!$library)
+      return '';
+
+    $html = [$this->view->toolbar($this->_("Bib")),
+
+             $this->_tag('h1', $this->view->escape($library->getLibelle())),
+
+             $this->_libraryInfo($library)
+    ];
+
+    return implode($html);
+  }
+
+
+  protected function _libraryInfo($library) {
+    $lis = [$this->_tag('li',
+                        $this->_('Coordonnées'),
+                        ['data-role' => 'list-divider']),
+
+            $this->_tag('li',
+                        $this->view->div(['style' => 'float:left'],
+                                         $this->view->mapForLieu($library->answersLocation(),
+                                                                 ['size' => '100x100']))
+                        . $this->_tag('address',
+                                      nl2br($library->getAdresse())
+                                      . BR
+                                      . $library->getCp()
+                                      . $library->getVille())
+
+                        . $this->_tag('div', '', ['class' => 'clear'])),
+    ];
+
+    if ($phone = $library->getTelephone())
+      $lis [] = $this->_tag('li', $phone);
+
+    if ($mail = $library->getMail())
+      $lis [] = $this->_tag('li',
+                            $this->view->tagAnchor(sprintf('mailto:%s',
+                                                           $mail),
+                                                   $mail));
+
+    if ($openings = $this->view->libraryOpenings($library)) {
+      $lis [] = $this->_tag('li',
+                            $this->_('Horaires'),
+                            ['data-role' => 'list-divider']);
+      $lis [] = $this->_tag('li',
+                            $openings);
+    }
+
+    return $this->_tag('ul',
+                       implode($lis),
+                       ['data-role' => 'listview']);
+  }
+}
\ No newline at end of file
diff --git a/library/startup.php b/library/startup.php
index b6fb3b83c303e70d584e1261bf43c270fafe00bf..0bbb965ae7a7258ce720a5e2f7488cf4e31784f1 100644
--- a/library/startup.php
+++ b/library/startup.php
@@ -81,7 +81,7 @@ class Bokeh_Engine {
 
   function setupConstants() {
     defineConstant('BOKEH_MAJOR_VERSION','8.0');
-    defineConstant('BOKEH_RELEASE_NUMBER', BOKEH_MAJOR_VERSION . '.22');
+    defineConstant('BOKEH_RELEASE_NUMBER', BOKEH_MAJOR_VERSION . '.23');
 
     defineConstant('BOKEH_REMOTE_FILES', 'http://git.afi-sa.fr/afi/opacce/');
 
diff --git a/library/templates/Intonation/Assets/css/intonation.css b/library/templates/Intonation/Assets/css/intonation.css
index 79c5237d2e858bd2e7d230591d18f8b1f24757c9..f70c8f43eeceaa1737828ff422f9295665c67934 100644
--- a/library/templates/Intonation/Assets/css/intonation.css
+++ b/library/templates/Intonation/Assets/css/intonation.css
@@ -497,6 +497,7 @@ dl.row {
     margin-top: 0 !important;
 }
 
+.carousel .button_text,
 .card-deck .button_text,
 .card-columns .button_text {
     display: none !important;
diff --git a/library/templates/Intonation/Library/View/Wrapper/Author.php b/library/templates/Intonation/Library/View/Wrapper/Author.php
new file mode 100644
index 0000000000000000000000000000000000000000..a73cb9abb8dafe85efe42c61c56d5d5d6c35db63
--- /dev/null
+++ b/library/templates/Intonation/Library/View/Wrapper/Author.php
@@ -0,0 +1,207 @@
+<?php
+/**
+ * Copyright (c) 2012-2019, Agence Française Informatique (AFI). All rights reserved.
+ *
+ * BOKEH is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
+ * the Free Software Foundation.
+ *
+ * There are special exceptions to the terms and conditions of the AGPL as it
+ * is applied to this software (see README file).
+ *
+ * BOKEH is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * along with BOKEH; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+ */
+
+
+class Intonation_Library_View_Wrapper_Author extends Intonation_Library_View_Wrapper_Abstract {
+  public function getMainTitle() {
+    return $this->_model->getLibelle();
+  }
+
+
+  public function getMainLink() {
+    return new Intonation_Library_Link(['Url' => $this->_view->url(['controller' => 'author',
+                                                                    'action' => 'view',
+                                                                    'id' => $this->_model->getId()]),
+                                        'Text' => $this->_('En savoir plus'),
+                                        'Image' => (Class_Template::current()
+                                                    ->getIco($this->_view,
+                                                             'read-document',
+                                                             'library')),
+                                        'Title' => $this->_('En savoir plus sur %s', $this->_model->getLibelle())]);
+  }
+
+
+  public function getEmbedMedia() {
+  }
+
+
+  public function getHtmlPicture() {
+  }
+
+
+  public function getPicture() {
+    return $this->_model->getThumbnailUrl();
+  }
+
+
+  public function getPictureAction() {
+  }
+
+
+  public function getSecondaryTitle() {
+  }
+
+
+  public function getSecondaryLink() {
+  }
+
+
+  public function getSecondaryIco() {
+  }
+
+
+  public function getActions() {
+    $actions = [new Intonation_Library_Link(['Url' => $this->_view->url(['controller' => 'author',
+                                                                         'action' => 'biography',
+                                                                         'id' => $this->_model->getId()]),
+                                             'Text' => $this->_('Biographie'),
+                                             'Image' => (Class_Template::current()
+                                                         ->getIco($this->_view,
+                                                                  'author',
+                                                                  'library')),
+                                             'Title' => $this->_('Lire la biographie de %s', $this->_model->getLibelle())]),
+
+                new Intonation_Library_Link(['Url' => $this->_view->url(['controller' => 'author',
+                                                                         'action' => 'collaborations',
+                                                                         'id' => $this->_model->getId()]),
+                                             'Text' => $this->_('Les collaborateurs'),
+                                             'Image' => (Class_Template::current()
+                                                         ->getIco($this->_view,
+                                                                  'team',
+                                                                  'library')),
+                                             'Title' => $this->_('En savoir plus sur les collaborateurs de %s', $this->_model->getLibelle())]),
+
+                new Intonation_Library_Link(['Url' => $this->_view->url(['controller' => 'author',
+                                                                         'action' => 'records',
+                                                                         'id' => $this->_model->getId()]),
+                                             'Text' => $this->_('Les documents'),
+                                             'Image' => (Class_Template::current()
+                                                         ->getIco($this->_view,
+                                                                  'related',
+                                                                  'library')),
+                                             'Title' => $this->_('En savoir plus sur les documents de %s', $this->_model->getLibelle())]),
+
+                new Intonation_Library_Link(['Url' => $this->_view->url(['controller' => 'author',
+                                                                         'action' => 'interviews',
+                                                                         'id' => $this->_model->getId()]),
+                                             'Text' => $this->_('Les interviews'),
+                                             'Image' => (Class_Template::current()
+                                                         ->getIco($this->_view,
+                                                                  'reviews',
+                                                                  'library')),
+                                             'Title' => $this->_('Les interviews de %s', $this->_model->getLibelle())]),
+
+                new Intonation_Library_Link(['Url' => $this->_view->url(['controller' => 'author',
+                                                                         'action' => 'youtube-chan',
+                                                                         'id' => $this->_model->getId()]),
+                                             'Text' => $this->_('La chaine YouTube'),
+                                             'Image' => (Class_Template::current()
+                                                         ->getIco($this->_view,
+                                                                  'media',
+                                                                  'library')),
+                                             'Title' => $this->_('La chaine YouTube de %s', $this->_model->getLibelle())])
+    ];
+
+    if (!Class_Users::isCurrentUserCanAccesBackend())
+      return $actions;
+
+    $description = new Class_CodifAuteur_Description($this->_model);
+
+    if (!$records = $description->getRecords())
+      return [$actions];
+
+    $record = array_shift($records);
+
+    $actions_pro = [new Intonation_Library_Link(['Url' => $this->_view->url(['module' => 'admin',
+                                                                             'controller' => 'records',
+                                                                             'action' => 'biography',
+                                                                             'auteur' => $description->getLabel(),
+                                                                             'language' => Class_Profil::getCurrentProfil()->getLocale(),
+                                                                             'id' => $record->getId()], null, true),
+
+                                                 'Attribs' => ['class' => 'menu_admin_front_anchor'],
+                                                 'Image' => Class_Template::current()->getIco($this->_view,
+                                                                                              'refresh',
+                                                                                              'utils'),
+                                                 'Text' => $this->_('Modifier …'),
+                                                 'Popup' => true,
+                                                 'Title' => $this->_('Modifier la biographie de %s',
+                                                                     $this->_model->getLibelle())])];
+
+    $button = new Intonation_Library_Link(['Text' => $this->_('Plus'),
+                                           'Attribs' => ['class' => 'text-primary'],
+                                           'Title' => $this->_('Voir plus d\'actions pour %s',
+                                                               $this->_model->getLibelle()),
+                                           'Image' => Class_Template::current()->getIco($this->_view,
+                                                                                        'more',
+                                                                                        'utils')]);
+
+    $actions [] = $this->_view->renderDropdown($this->_view->renderActions($actions_pro), $button, 'dropleft dropup');
+    return $actions;
+  }
+
+
+  public function getDescription() {
+    return
+      $this->getBadges()
+      . $this->_view->truncate($this->getFullDescription());
+  }
+
+
+  public function getFullDescription() {
+    return '';
+  }
+
+
+  public function getDescriptionTitle() {
+    return '';
+  }
+
+
+  public function getBadges() {
+    $description = new Class_CodifAuteur_Description($this->_model);
+    $badges = [];
+
+    foreach ($description->getFacets() as $facet_code => $count) {
+      $facet_label = Class_Notice_Facette::find($facet_code)->getLibelleFacette();
+      $badges [] = ['tag' => 'a',
+                    'url' => Class_Url::assemble(['controller' => 'recherche',
+                                                  'action' => 'simple',
+                                                  'code_rebond' => $description->getFacetCode(),
+                                                  'facette' => $facet_code]),
+                    'class' => 'primary',
+                    'text' => $facet_label,
+                    'title' => $this->_('Voir les documents de %s correspondants au terme %s',
+                                        $description->getLabel(),
+                                        $facet_label)];
+    }
+
+    return $this->_view->renderBadges($badges);
+  }
+
+
+  public function getDocType() {
+  }
+
+
+  public function getDocTypeLabel() {
+  }
+}
diff --git a/library/templates/Intonation/Library/View/Wrapper/Author/RichContent.php b/library/templates/Intonation/Library/View/Wrapper/Author/RichContent.php
new file mode 100644
index 0000000000000000000000000000000000000000..a80e547bd672d0188f81bafad100d8840b771d7d
--- /dev/null
+++ b/library/templates/Intonation/Library/View/Wrapper/Author/RichContent.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * Copyright (c) 2012-2019, Agence Française Informatique (AFI). All rights reserved.
+ *
+ * BOKEH is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
+ * the Free Software Foundation.
+ *
+ * There are special exceptions to the terms and conditions of the AGPL as it
+ * is applied to this software (see README file).
+ *
+ * BOKEH is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * along with BOKEH; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+ */
+
+
+class Intonation_Library_View_Wrapper_Author_RichContent extends Intonation_Library_View_Wrapper_RichContent_Abstract {
+
+  public function getNavigation() {
+    return null;
+  }
+
+
+  public function getActions() {
+    return '';
+  }
+
+
+  public function getRowActions() {
+    return '';
+  }
+
+
+  protected function _getSectionsInstances() {
+    return [new Intonation_Library_View_Wrapper_Author_RichContent_Home,
+            new Intonation_Library_View_Wrapper_Author_RichContent_Biography,
+            new Intonation_Library_View_Wrapper_Author_RichContent_Records,
+            new Intonation_Library_View_Wrapper_Author_RichContent_Collaborations,
+            new Intonation_Library_View_Wrapper_Author_RichContent_Interviews,
+            new Intonation_Library_View_Wrapper_Author_RichContent_Youtube];
+  }
+}
diff --git a/library/templates/Intonation/Library/View/Wrapper/Author/RichContent/Biography.php b/library/templates/Intonation/Library/View/Wrapper/Author/RichContent/Biography.php
new file mode 100644
index 0000000000000000000000000000000000000000..ae30ddea57648efeaba1d62a09e2c6183b040622
--- /dev/null
+++ b/library/templates/Intonation/Library/View/Wrapper/Author/RichContent/Biography.php
@@ -0,0 +1,57 @@
+<?php
+/**
+ * Copyright (c) 2012-2019, Agence Française Informatique (AFI). All rights reserved.
+ *
+ * BOKEH is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
+ * the Free Software Foundation.
+ *
+ * There are special exceptions to the terms and conditions of the AGPL as it
+ * is applied to this software (see README file).
+ *
+ * BOKEH is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * along with BOKEH; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+ */
+
+
+class Intonation_Library_View_Wrapper_Author_RichContent_Biography extends Intonation_Library_View_Wrapper_Author_RichContent_Section {
+
+  public function getTitle() {
+    return $this->_('Biographie');
+  }
+
+
+  public function getContent() {
+    if ($this->_content)
+      return $this->_content;
+
+    return $this->_content = $this->_view->Author_RenderWikipedia(new Class_CodifAuteur_Description($this->_model));
+  }
+
+
+  public function getClass() {
+    return 'author_biography';
+  }
+
+
+  public function getNavUrl() {
+    return ['controller' => 'author',
+            'action' => 'biography'];
+  }
+
+
+  public function getNavIco() {
+    return 'author';
+  }
+
+
+  public function getNavTitle() {
+    return $this->_('Biographie de %s', $this->_model->getLibelle());
+  }
+}
diff --git a/library/templates/Intonation/Library/View/Wrapper/Author/RichContent/Collaborations.php b/library/templates/Intonation/Library/View/Wrapper/Author/RichContent/Collaborations.php
new file mode 100644
index 0000000000000000000000000000000000000000..3d6e5bf1b35a0ca6ca22023fdd6edae33fdecd34
--- /dev/null
+++ b/library/templates/Intonation/Library/View/Wrapper/Author/RichContent/Collaborations.php
@@ -0,0 +1,57 @@
+<?php
+/**
+ * Copyright (c) 2012-2019, Agence Française Informatique (AFI). All rights reserved.
+ *
+ * BOKEH is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
+ * the Free Software Foundation.
+ *
+ * There are special exceptions to the terms and conditions of the AGPL as it
+ * is applied to this software (see README file).
+ *
+ * BOKEH is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * along with BOKEH; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+ */
+
+
+class Intonation_Library_View_Wrapper_Author_RichContent_Collaborations extends Intonation_Library_View_Wrapper_Author_RichContent_Section {
+
+  public function getTitle() {
+    return $this->_('Les collaborateurs');
+  }
+
+
+  public function getContent() {
+    if ($this->_content)
+      return $this->_content;
+
+    return $this->_content = $this->_view->Author_RenderCollaborations(new Class_CodifAuteur_Description($this->_model));
+  }
+
+
+  public function getClass() {
+    return 'author_collaborations';
+  }
+
+
+  public function getNavUrl() {
+    return ['controller' => 'author',
+            'action' => 'collaborations'];
+  }
+
+
+  public function getNavIco() {
+    return 'team';
+  }
+
+
+  public function getNavTitle() {
+    return $this->_('Les collaborateurs de %s', $this->_model->getLibelle());
+  }
+}
diff --git a/library/templates/Intonation/Library/View/Wrapper/Author/RichContent/Home.php b/library/templates/Intonation/Library/View/Wrapper/Author/RichContent/Home.php
new file mode 100644
index 0000000000000000000000000000000000000000..76a411273af16e83fca25175c422fc9cfd9ceee3
--- /dev/null
+++ b/library/templates/Intonation/Library/View/Wrapper/Author/RichContent/Home.php
@@ -0,0 +1,59 @@
+<?php
+/**
+ * Copyright (c) 2012-2019, Agence Française Informatique (AFI). All rights reserved.
+ *
+ * BOKEH is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
+ * the Free Software Foundation.
+ *
+ * There are special exceptions to the terms and conditions of the AGPL as it
+ * is applied to this software (see README file).
+ *
+ * BOKEH is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * along with BOKEH; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+ */
+
+
+class Intonation_Library_View_Wrapper_Author_RichContent_Home extends Intonation_Library_View_Wrapper_Author_RichContent_Section {
+
+  public function getTitle() {
+    return '';
+  }
+
+
+  public function getContent() {
+    return true;
+  }
+
+
+  public function getClass() {
+    return 'all_author_data';
+  }
+
+
+  public function getNavUrl() {
+    return ['controller' => 'author',
+            'action' => 'view'];
+  }
+
+
+  public function getNavIco() {
+    return 'home';
+  }
+
+
+  public function getNavTitle() {
+    return $this->_('Toutes les informations de sur l\'auteur');
+  }
+
+
+  public function handleSection() {
+    return false;
+  }
+}
diff --git a/library/templates/Intonation/Library/View/Wrapper/Author/RichContent/Interviews.php b/library/templates/Intonation/Library/View/Wrapper/Author/RichContent/Interviews.php
new file mode 100644
index 0000000000000000000000000000000000000000..dba3212e8b2b3b2007c43e6398f68d795b4fb36d
--- /dev/null
+++ b/library/templates/Intonation/Library/View/Wrapper/Author/RichContent/Interviews.php
@@ -0,0 +1,57 @@
+<?php
+/**
+ * Copyright (c) 2012-2019, Agence Française Informatique (AFI). All rights reserved.
+ *
+ * BOKEH is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
+ * the Free Software Foundation.
+ *
+ * There are special exceptions to the terms and conditions of the AGPL as it
+ * is applied to this software (see README file).
+ *
+ * BOKEH is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * along with BOKEH; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+ */
+
+
+class Intonation_Library_View_Wrapper_Author_RichContent_Interviews extends Intonation_Library_View_Wrapper_Author_RichContent_Section {
+
+  public function getTitle() {
+    return $this->_('Les interviews');
+  }
+
+
+  public function getContent() {
+    if ($this->_content)
+      return $this->_content;
+
+    return $this->_content = $this->_view->Author_RenderInterviews(new Class_CodifAuteur_Description($this->_model));
+  }
+
+
+  public function getClass() {
+    return 'author_interviews';
+  }
+
+
+  public function getNavUrl() {
+    return ['controller' => 'author',
+            'action' => 'interviews'];
+  }
+
+
+  public function getNavIco() {
+    return 'reviews';
+  }
+
+
+  public function getNavTitle() {
+    return $this->_('Les interviews de %s', $this->_model->getLibelle());
+  }
+}
diff --git a/library/templates/Intonation/Library/View/Wrapper/Author/RichContent/Records.php b/library/templates/Intonation/Library/View/Wrapper/Author/RichContent/Records.php
new file mode 100644
index 0000000000000000000000000000000000000000..488c77cada0e9c540306901cfb9911f241cfbf53
--- /dev/null
+++ b/library/templates/Intonation/Library/View/Wrapper/Author/RichContent/Records.php
@@ -0,0 +1,57 @@
+<?php
+/**
+ * Copyright (c) 2012-2019, Agence Française Informatique (AFI). All rights reserved.
+ *
+ * BOKEH is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
+ * the Free Software Foundation.
+ *
+ * There are special exceptions to the terms and conditions of the AGPL as it
+ * is applied to this software (see README file).
+ *
+ * BOKEH is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * along with BOKEH; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+ */
+
+
+class Intonation_Library_View_Wrapper_Author_RichContent_Records extends Intonation_Library_View_Wrapper_Author_RichContent_Section {
+
+  public function getTitle() {
+    return $this->_('Les documents');
+  }
+
+
+  public function getContent() {
+    if ($this->_content)
+      return $this->_content;
+
+    return $this->_content = $this->_view->Author_RenderRecords(new Class_CodifAuteur_Description($this->_model));
+  }
+
+
+  public function getClass() {
+    return 'author_records';
+  }
+
+
+  public function getNavUrl() {
+    return ['controller' => 'author',
+            'action' => 'records'];
+  }
+
+
+  public function getNavIco() {
+    return 'related';
+  }
+
+
+  public function getNavTitle() {
+    return $this->_('Les documents de %s', $this->_model->getLibelle());
+  }
+}
diff --git a/library/templates/Intonation/Library/View/Wrapper/Author/RichContent/Section.php b/library/templates/Intonation/Library/View/Wrapper/Author/RichContent/Section.php
new file mode 100644
index 0000000000000000000000000000000000000000..67928b9f7bb6987cea29f42164ae8e79590c37c6
--- /dev/null
+++ b/library/templates/Intonation/Library/View/Wrapper/Author/RichContent/Section.php
@@ -0,0 +1,23 @@
+<?php
+/**
+ * Copyright (c) 2012-2019, Agence Française Informatique (AFI). All rights reserved.
+ *
+ * BOKEH is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
+ * the Free Software Foundation.
+ *
+ * There are special exceptions to the terms and conditions of the AGPL as it
+ * is applied to this software (see README file).
+ *
+ * BOKEH is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * along with BOKEH; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+ */
+
+
+abstract class Intonation_Library_View_Wrapper_Author_RichContent_Section extends Intonation_Library_View_Wrapper_RichContent_Section {}
diff --git a/library/templates/Intonation/Library/View/Wrapper/Author/RichContent/Youtube.php b/library/templates/Intonation/Library/View/Wrapper/Author/RichContent/Youtube.php
new file mode 100644
index 0000000000000000000000000000000000000000..9a3a6d841432bf3ed86c0740a6dd98bbc7ac3e23
--- /dev/null
+++ b/library/templates/Intonation/Library/View/Wrapper/Author/RichContent/Youtube.php
@@ -0,0 +1,57 @@
+<?php
+/**
+ * Copyright (c) 2012-2019, Agence Française Informatique (AFI). All rights reserved.
+ *
+ * BOKEH is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
+ * the Free Software Foundation.
+ *
+ * There are special exceptions to the terms and conditions of the AGPL as it
+ * is applied to this software (see README file).
+ *
+ * BOKEH is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * along with BOKEH; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+ */
+
+
+class Intonation_Library_View_Wrapper_Author_RichContent_Youtube extends Intonation_Library_View_Wrapper_Author_RichContent_Section {
+
+  public function getTitle() {
+    return $this->_('La chaine YouTube');
+  }
+
+
+  public function getContent() {
+    if ($this->_content)
+      return $this->_content;
+
+    return $this->_content = $this->_view->Author_RenderYoutubeChan(new Class_CodifAuteur_Description($this->_model));
+  }
+
+
+  public function getClass() {
+    return 'author_youtube_chan';
+  }
+
+
+  public function getNavUrl() {
+    return ['controller' => 'author',
+            'action' => 'youtube-chan'];
+  }
+
+
+  public function getNavIco() {
+    return 'media';
+  }
+
+
+  public function getNavTitle() {
+    return $this->_('La chaine YouTube de %s', $this->_model->getLibelle());
+  }
+}
diff --git a/library/templates/Intonation/Library/View/Wrapper/Domain.php b/library/templates/Intonation/Library/View/Wrapper/Domain.php
new file mode 100644
index 0000000000000000000000000000000000000000..2b6365191d623f760dca7c1536bd38ca6f36fbdb
--- /dev/null
+++ b/library/templates/Intonation/Library/View/Wrapper/Domain.php
@@ -0,0 +1,117 @@
+<?php
+/**
+ * Copyright (c) 2012-2018, Agence Française Informatique (AFI). All rights reserved.
+ *
+ * BOKEH is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
+ * the Free Software Foundation.
+ *
+ * There are special exceptions to the terms and conditions of the AGPL as it
+ * is applied to this software (see README file).
+ *
+ * BOKEH is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * along with BOKEH; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+ */
+
+
+class Intonation_Library_View_Wrapper_Domain extends Intonation_Library_View_Wrapper_Abstract {
+
+  public function getMainTitle() {
+    return $this->_model->getLibelle();
+  }
+
+
+  public function getSecondaryTitle() {
+    return '';
+  }
+
+
+  public function getDocType() {
+    return '';
+  }
+
+
+  public function getDocTypeLabel() {
+    return '';
+  }
+
+
+  public function getMainLink() {
+    return new Intonation_Library_Link(['Url' => $this->_view->url(['controller' => 'recherche',
+                                                                    'action' => 'simple',
+                                                                    'id_catalogue' => $this->_model->getId()]),
+
+                                        'Image' => Class_Template::current()->getIco($this->_view,
+                                                                                     'read-document',
+                                                                                     'library'),
+                                        'Text' => $this->_('Voir les documents'),
+                                        'Title' => $this->_getMainLinkTitle()]);
+  }
+
+
+  protected  function _getMainLinkTitle() {
+    return $this->_('Voir les documents de %s',
+                    $this->getMainTitle());
+  }
+
+
+  public function getPicture() {
+    return $this->_model->getUrlImg();
+  }
+
+
+  public function getPictureAction() {
+    return '';
+  }
+
+
+  public function getDescription() {
+    return '';
+  }
+
+
+  public function getFullDescription() {
+    return '';
+  }
+
+
+  public function getDescriptionTitle() {
+    return '';
+  }
+
+
+  public function getSecondaryIco() {
+    return '';
+  }
+
+
+  public function getSecondaryLink() {
+    return null;
+  }
+
+
+  public function getBadges() {
+    return '';
+  }
+
+
+  public function getActions() {
+    return [];
+  }
+
+
+  public function getEmbedMedia() {
+    return '';
+  }
+
+
+  public function getHtmlPicture() {
+    return '';
+  }
+}
\ No newline at end of file
diff --git a/library/templates/Intonation/Library/View/Wrapper/Library.php b/library/templates/Intonation/Library/View/Wrapper/Library.php
index 2fd586a421f6bfba397734fa5481e202a989fd12..2aee9e12fca67e88c23179fc99997b4acce035be 100644
--- a/library/templates/Intonation/Library/View/Wrapper/Library.php
+++ b/library/templates/Intonation/Library/View/Wrapper/Library.php
@@ -49,16 +49,16 @@ class Intonation_Library_View_Wrapper_Library extends Intonation_Library_View_Wr
 
     return new Intonation_Library_Link(['Url' => $url,
                                         'Image' => Class_Template::current()->getIco($this->_view,
-                                                                                     'library',
+                                                                                     'read-document',
                                                                                      'library'),
 
-                                        'Text' => $this->_('Plus'),
+                                        'Text' => $this->_('En savoir plus'),
                                         'Title' => $this->_getMainLinkTitle()]);
   }
 
 
   protected  function _getMainLinkTitle() {
-    return $this->_('En lire plus sur la bibliothèque %s',
+    return $this->_('En savoir plus sur la bibliothèque %s',
                     $this->_model->getLibelle());
   }
 
diff --git a/library/templates/Intonation/Library/View/Wrapper/Library/RichContent.php b/library/templates/Intonation/Library/View/Wrapper/Library/RichContent.php
index 83467c820036afdfd5016d67f2995ecf61f6cf11..8500cbf63084c98ba0e986f2126cf312344f907a 100644
--- a/library/templates/Intonation/Library/View/Wrapper/Library/RichContent.php
+++ b/library/templates/Intonation/Library/View/Wrapper/Library/RichContent.php
@@ -50,7 +50,7 @@ class Intonation_Library_View_Wrapper_Library_RichContent extends Intonation_Lib
             new Intonation_Library_View_Wrapper_Library_RichContent_Openings,
             new Intonation_Library_View_Wrapper_Library_RichContent_Details,
             new Intonation_Library_View_Wrapper_Library_RichContent_Map,
-            new Intonation_Library_View_Wrapper_Library_RichContent_Team,
-            new Intonation_Library_View_Wrapper_Library_RichContent_Agenda];
+            new Intonation_Library_View_Wrapper_Library_RichContent_Agenda,
+            new Intonation_Library_View_Wrapper_Library_RichContent_Team];
   }
 }
diff --git a/library/templates/Intonation/Library/View/Wrapper/Library/RichContent/Agenda.php b/library/templates/Intonation/Library/View/Wrapper/Library/RichContent/Agenda.php
index 4fa4bbb13a6866c1d2cb9fe5bb19e42fd36b239f..2b398ab403a45675c397e4dbb4c7e8e46bd4ab03 100644
--- a/library/templates/Intonation/Library/View/Wrapper/Library/RichContent/Agenda.php
+++ b/library/templates/Intonation/Library/View/Wrapper/Library/RichContent/Agenda.php
@@ -31,29 +31,8 @@ class Intonation_Library_View_Wrapper_Library_RichContent_Agenda extends Intonat
 
 
   public function getContent() {
-    Class_ScriptLoader::getInstance()->addOPACScript('calendrier');
     return $this->_view->calendarContent($this->getCalendar(),
                                          $this->getPreferences());
-
-    if (!$articles = Class_Article::findAllBy(['id_lieu' => $this->_model->getIdLieu(),
-                                               'status' => Class_Article::STATUS_VALIDATED,
-                                               'debut not' => 'null',
-                                               'events_fin >' => (new DateTime())->format('Y-m-d'),
-                                               'order' => 'events_debut']))
-      return '';
-
-    $articles = array_map(function($article)
-                          {
-                            return (new Intonation_Library_View_Wrapper_Article)
-                              ->setModel($article)
-                              ->setView($this->_view);
-                          }, $articles);
-
-    $callback = function($wrapped) {
-      return $this->_view->cardifyHorizontal($wrapped);
-    };
-
-    return $this->_view->renderTruncateList(new Storm_Collection($articles), $callback);
   }
 
 
diff --git a/library/templates/Intonation/Library/View/Wrapper/Library/RichContent/Details.php b/library/templates/Intonation/Library/View/Wrapper/Library/RichContent/Details.php
index 753d32c04c2f8a47fc4d7860fd8e8f4b4c873aaa..7a101840f859a0b4d7ddd6d4de88fa3122be6278 100644
--- a/library/templates/Intonation/Library/View/Wrapper/Library/RichContent/Details.php
+++ b/library/templates/Intonation/Library/View/Wrapper/Library/RichContent/Details.php
@@ -67,10 +67,73 @@ class Intonation_Library_View_Wrapper_Library_RichContent_Details extends Intona
                                    . $this->_view->tag('p',
                                                        $pret));
 
+    $count = 0;
+    foreach($this->_model->getAllCustomFields()->getFieldValues() as $field) {
+      if ($field->getValue() === '')
+        continue;
+
+      $count++;
+      $html [] = $this->_renderBlock($this->_renderOptions($field, $count),
+                                     $field->getLabel(),
+                                     'custom' . $count);
+    }
+
+    $html = array_map(function($content)
+                      {
+                        return $this->_view->div(['class' => 'col-12'],
+                                                 $content);
+                      },
+                      $html);
+
     return $this->_view->grid(implode($html));
   }
 
 
+  protected function _renderBlock($content, $title, $class_name, $display = true) {
+    $style = ($display) ? [] : ['style' => 'display:none;'];
+    return $this->_view->tag('div',
+                       $this->_view->tag('h4', $title) . $this->_view->tag('dl', $content),
+                       array_merge($style, ['class' => $class_name.' library_box']));
+  }
+
+
+  protected function _renderOptions($field,$count) {
+    $options = $field->getSelectedOptionsList();
+
+    if (empty($options))
+      return $this->_renderInfo($field->getValue(),
+                                $field->getLabel() ,'custom'.$count);
+
+    $content_options = '';
+    foreach (array_filter($options) as $option) {
+      $cleaned_name = $this->_stripWord($option);
+      $content_options .= $this->_view->tag('dd', $option, ['class' => $cleaned_name]);
+    }
+
+    return $content_options;
+  }
+
+
+  protected function _renderInfo($value, $label, $class_name,$display = true) {
+    $style = ($display) ? [] : ['style' => 'display:none;'];
+    $style = array_merge($style, ['class' => $class_name]) ;
+
+    return $this->_view->tag('dt', $label, $style) . $this->_view->tag('dd', $value, $style);
+  }
+
+
+  protected function _stripWord($str, $charset ='utf-8') {
+    $str = htmlentities($str, ENT_NOQUOTES, $charset);
+    $str = preg_replace('#&([A-za-z])(?:acute|cedil|caron|circ|grave|orn|ring|slash|th|tilde|uml);#', '\1', $str);
+    $str = preg_replace('#&([A-za-z]{2})(?:lig);#', '\1', $str); // pour les ligatures e.g. '&oelig;'
+    $str = preg_replace('#&[^;]+;#', '', $str); // supprime les autres caractères
+    $str =  preg_replace('#[^a-zA-Z0-9\-\._]#', '_', $str);
+    $str = mb_strtolower($str, $charset);
+
+    return $str;
+  }
+
+
   public function getClass() {
     return 'library_details';
   }
diff --git a/library/templates/Intonation/Library/View/Wrapper/Library/RichContent/Map.php b/library/templates/Intonation/Library/View/Wrapper/Library/RichContent/Map.php
index 0630d48837099ba81a45e45b6ce6946f63cee9c1..3c95bd283379d0ae06dd679b00011c58b84b367c 100644
--- a/library/templates/Intonation/Library/View/Wrapper/Library/RichContent/Map.php
+++ b/library/templates/Intonation/Library/View/Wrapper/Library/RichContent/Map.php
@@ -33,11 +33,12 @@ class Intonation_Library_View_Wrapper_Library_RichContent_Map extends Intonation
                             Class_Systeme_ModulesAccueil_Library::FIELD_MAIL]);
 
     $id = 'map_' . uniqid();
-    return $this->_view->div(['id' => $id],
-                             $this->_view->librariesMap(Class_Bib::filterByCoordinates([$this->_model]),
-                                                        '#' . $id,
-                                                        ['osm_layer' => 1,
-                                                         'fields' => $fields]));
+    return ($map = $this->_view->librariesMap(Class_Bib::filterByCoordinates([$this->_model]),
+                                              '#' . $id,
+                                              ['osm_layer' => 1,
+                                               'fields' => $fields]))
+      ? $this->_view->div(['id' => $id], $map)
+      : '';
   }
 
 
diff --git a/library/templates/Intonation/Library/View/Wrapper/Record.php b/library/templates/Intonation/Library/View/Wrapper/Record.php
index 0129058abc3a96d528e9825117a007c2a4f4cb65..b2c767292e4abf21f8f0df36f36052d5dc91ad96 100644
--- a/library/templates/Intonation/Library/View/Wrapper/Record.php
+++ b/library/templates/Intonation/Library/View/Wrapper/Record.php
@@ -123,17 +123,20 @@ class Intonation_Library_View_Wrapper_Record extends Intonation_Library_View_Wra
 
 
   public function getActions() {
-    $actions = [new Intonation_Library_Link(['Url' => $this->_view->url(['controller' => 'abonne',
-                                                                         'action' => 'reserver',
-                                                                         'record_id' => $this->_model->getId()]),
-                                             'Text' => $this->_('Réserver'),
-                                             'Image' => (Class_Template::current()
-                                                        ->getIco($this->_view,
-                                                                 'hold',
-                                                                 'library')),
-                                             'Title' => $this->_('Réserver le document %s',
-                                                                 $this->getMainTitle()),
-                                             'Popup' => true])];
+    $actions = [];
+
+    if (!$this->_model->isRessourceNumerique())
+      $actions [] = new Intonation_Library_Link(['Url' => $this->_view->url(['controller' => 'abonne',
+                                                                             'action' => 'reserver',
+                                                                             'record_id' => $this->_model->getId()]),
+                                                 'Text' => $this->_('Réserver'),
+                                                 'Image' => (Class_Template::current()
+                                                             ->getIco($this->_view,
+                                                                      'hold',
+                                                                      'library')),
+                                                 'Title' => $this->_('Réserver le document %s',
+                                                                     $this->getMainTitle()),
+                                                 'Popup' => true]);
 
     foreach((new Intonation_Library_UserPatcher)->getDefaultSelections() as $selection) {
       $selection
diff --git a/library/templates/Intonation/Library/View/Wrapper/Record/RichContent.php b/library/templates/Intonation/Library/View/Wrapper/Record/RichContent.php
index 926cbc7ad940729da8b6c389bd0c48345d04e6ca..f3800f0452c58d509992433d7c8ebf5f28d11839 100644
--- a/library/templates/Intonation/Library/View/Wrapper/Record/RichContent.php
+++ b/library/templates/Intonation/Library/View/Wrapper/Record/RichContent.php
@@ -36,7 +36,7 @@ class Intonation_Library_View_Wrapper_Record_RichContent extends Intonation_Libr
 
 
   public function getActions() {
-    return $this->_view->renderAjax('noticeajax', 'resources', ['id' => $this->_model->getId()]);
+    return $this->_model->getResume();
   }
 
 
@@ -54,7 +54,7 @@ class Intonation_Library_View_Wrapper_Record_RichContent extends Intonation_Libr
 
   protected function _getSectionsInstances() {
     return [new Intonation_Library_View_Wrapper_Record_RichContent_Home,
-            new Intonation_Library_View_Wrapper_Record_RichContent_Summary,
+            new Intonation_Library_View_Wrapper_Record_RichContent_Items,
             new Intonation_Library_View_Wrapper_Record_RichContent_Details,
             new Intonation_Library_View_Wrapper_Record_RichContent_Media,
             new Intonation_Library_View_Wrapper_Record_RichContent_Reviews,
diff --git a/library/templates/Intonation/Library/View/Wrapper/Record/RichContent/Items.php b/library/templates/Intonation/Library/View/Wrapper/Record/RichContent/Items.php
new file mode 100644
index 0000000000000000000000000000000000000000..2a1739629fe2431bd152d41b379c45af7dcbac7d
--- /dev/null
+++ b/library/templates/Intonation/Library/View/Wrapper/Record/RichContent/Items.php
@@ -0,0 +1,60 @@
+<?php
+/**
+ * Copyright (c) 2012-2019, Agence Française Informatique (AFI). All rights reserved.
+ *
+ * BOKEH is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
+ * the Free Software Foundation.
+ *
+ * There are special exceptions to the terms and conditions of the AGPL as it
+ * is applied to this software (see README file).
+ *
+ * BOKEH is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * along with BOKEH; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+ */
+
+
+class Intonation_Library_View_Wrapper_Record_RichContent_Items extends Intonation_Library_View_Wrapper_Record_RichContent_Section {
+
+  protected $_ajax = true;
+
+
+  public function getTitle() {
+    return $this->_('Exemplaires');
+  }
+
+
+  public function getContent() {
+    if ($this->_content)
+      return $this->_content;
+
+    return $this->_content = $this->_view->renderAjax('noticeajax', 'resources', ['id' => $this->_model->getId()]);
+  }
+
+
+  public function getClass() {
+    return 'document_items';
+  }
+
+
+  public function getNavUrl() {
+    return ['controller' => 'record',
+            'action' => 'items'];
+  }
+
+
+  public function getNavIco() {
+    return 'hold';
+  }
+
+
+  public function getNavTitle() {
+    return $this->_('Les Exemplaires du document');
+  }
+}
diff --git a/library/templates/Intonation/Library/View/Wrapper/User/RichContent/Selections.php b/library/templates/Intonation/Library/View/Wrapper/User/RichContent/Selections.php
index bf541d639bc59362b42081d6af34b585dc74e149..0acdb3b3f4141a2ee4386064518e64355755d9e2 100644
--- a/library/templates/Intonation/Library/View/Wrapper/User/RichContent/Selections.php
+++ b/library/templates/Intonation/Library/View/Wrapper/User/RichContent/Selections.php
@@ -28,11 +28,20 @@ class Intonation_Library_View_Wrapper_User_RichContent_Selections extends Intona
 
 
   public function getContent() {
-    return
-      $this->_view->abonne_Selections($this->_model->getPaniers())
-      . $this->_view->bookmarkedSearches(Class_User_BookmarkedSearch::findAllBy(['id_user' => $this->_model->getId(),
-                                                                                 'order' => 'creation_date desc']))
-      . $this->_view->renderNewsletters(Class_Newsletter::getPublishedNewsletters());
+    $html = [$this->_view->abonne_Selections($this->_model->getPaniers()),
+
+             $this->_view->bookmarkedSearches(Class_User_BookmarkedSearch::findAllBy(['id_user' => $this->_model->getId(),
+                                                                                      'order' => 'creation_date desc'])),
+
+             $this->_view->renderNewsletters(Class_Newsletter::getPublishedNewsletters())];
+
+    $html = array_map(function($content)
+                      {
+                        return $this->_view->div(['class' => 'col-12 mb-5'], $content);
+                      },
+                      $html);
+
+    return $this->_view->grid(implode($html));
   }
 
 
diff --git a/library/templates/Intonation/Library/Widget/Carousel/Author/Definition.php b/library/templates/Intonation/Library/Widget/Carousel/Author/Definition.php
new file mode 100644
index 0000000000000000000000000000000000000000..292039295c8355087a94523ba28f4a58990b80d7
--- /dev/null
+++ b/library/templates/Intonation/Library/Widget/Carousel/Author/Definition.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * Copyright (c) 2012-2017, Agence Française Informatique (AFI). All rights reserved.
+ *
+ * BOKEH is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
+ * the Free Software Foundation.
+ *
+ * There are special exceptions to the terms and conditions of the AGPL as it
+ * is applied to this software (see README file).
+ *
+ * BOKEH is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * along with BOKEH; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+ */
+
+
+class Intonation_Library_Widget_Carousel_Author_Definition extends Intonation_Library_Widget_Carousel_Definition {
+
+  const
+    CODE = 'AUTHORS';
+
+  protected $_group = Class_Systeme_ModulesAccueil::GROUP_RECH;
+
+
+  public function __construct() {
+    $this->_libelle = $this->_('Boite auteurs');
+    $this->_form = 'Intonation_Library_Widget_Carousel_Author_Form';
+    $this->_view_helper = 'Intonation_Library_Widget_Carousel_Author_View';
+    $this->_defaultValues = ['titre' => $this->_libelle,
+                             'layout' => static::WALL,
+                             'rendering' => static::CARD_OVERLAY,
+                             'rss' => false,
+                             'embeded_code' => false,
+                             'link_to_all' => false,
+                             'order' => Class_Systeme_ModulesAccueil_Authors::SORT_RANDOM,
+                             'size' => 9,
+                             'id_panier' => '',
+                             'id_catalogue' => '',
+                             'with_thumbnail' => true,
+                             'authors_selection_mode' => Class_Systeme_ModulesAccueil_Authors::AUTHORS_SELECTION_MODE_ALL];
+  }
+}
\ No newline at end of file
diff --git a/library/templates/Intonation/Library/Widget/Carousel/Author/Form.php b/library/templates/Intonation/Library/Widget/Carousel/Author/Form.php
new file mode 100644
index 0000000000000000000000000000000000000000..0b0b45e944437ed88fd2cf4b4392a199d767946f
--- /dev/null
+++ b/library/templates/Intonation/Library/Widget/Carousel/Author/Form.php
@@ -0,0 +1,77 @@
+<?php
+/**
+ * Copyright (c) 2012-2017, Agence Française Informatique (AFI). All rights reserved.
+ *
+ * BOKEH is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
+ * the Free Software Foundation.
+ *
+ * There are special exceptions to the terms and conditions of the AGPL as it
+ * is applied to this software (see README file).
+ *
+ * BOKEH is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * along with BOKEH; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+ */
+
+
+class Intonation_Library_Widget_Carousel_Author_Form extends Intonation_Library_Widget_Carousel_Form {
+
+  public function init() {
+    parent::init();
+
+    Class_ScriptLoader::getInstance()
+      ->addJQueryReady('radioToggleVisibilityForElement("input[name=\'authors_selection_mode\']",
+                                                        $("#responsibilities").closest("tr"),
+                                                        ["responsibilities"]);');
+
+    $authors_module = new Class_Systeme_ModulesAccueil_Authors();
+
+    $this
+      ->addElement('radio',
+                   'authors_selection_mode',
+                   ['label' => $this->_('Auteurs sélectionnés'),
+                    'multiOptions' => $authors_module->getAuthorsSelectionModeOptions(),
+                    'value' => $authors_module->getDefaultAuthorsSelectionMode()])
+
+      ->addElement('listeSuggestion',
+                   'responsibilities',
+                   ['label' => $this->_('Responsabilité auteur'),
+                    'rubrique' => 'responsibility']);
+  }
+
+
+  public function initDisplayGroups() {
+    parent::initDisplayGroups();
+    $this->addToSelectionGroup(['authors_selection_mode',
+                                'responsibilities']);
+  }
+
+  public function getOrders() {
+    return [Class_Systeme_ModulesAccueil_Authors::SORT_RANDOM => $this->_('Aléatoire'),
+            Class_Systeme_ModulesAccueil_Authors::SORT_AUTHOR => $this->_('Alphabétique sur les auteurs'),
+            Class_Systeme_ModulesAccueil_Authors::SORT_SELECTION => $this->_('Sélection')
+    ];
+  }
+
+
+  public function customPopulate($datas) {
+    $this->replaceWith('data_sources',
+                       ['domainePanier',
+                        'data_sources',
+                        []]);
+
+    $element = $this->getElement('data_sources');
+
+    $element
+      ->setOptions(['IdItems' => isset($datas['id_panier']) ? $datas['id_panier'] : '',
+                    'IdCategories' => isset($datas['id_catalogue']) ? $datas['id_catalogue'] : '']);
+
+    return $this;
+  }
+}
\ No newline at end of file
diff --git a/library/templates/Intonation/Library/Widget/Carousel/Author/View.php b/library/templates/Intonation/Library/Widget/Carousel/Author/View.php
new file mode 100644
index 0000000000000000000000000000000000000000..f6efb523db6f50baad5962e3165580e3bdb15ebc
--- /dev/null
+++ b/library/templates/Intonation/Library/Widget/Carousel/Author/View.php
@@ -0,0 +1,49 @@
+<?php
+/**
+ * Copyright (c) 2012-2018, Agence Française Informatique (AFI). All rights reserved.
+ *
+ * BOKEH is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
+ * the Free Software Foundation.
+ *
+ * There are special exceptions to the terms and conditions of the AGPL as it
+ * is applied to this software (see README file).
+ *
+ * BOKEH is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * along with BOKEH; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+ */
+
+
+class Intonation_Library_Widget_Carousel_Author_View extends Intonation_Library_Widget_Carousel_View {
+
+
+  protected function _findElements() {
+    return Class_CodifAuteur::filterByValidThumbnail(Class_CodifAuteur::findAllByPreferences($this->_settings->getPreferences()));
+  }
+
+
+  protected function _getRSSUrl() {
+    return '';
+  }
+
+
+  protected function _getLinkToAllParams() {
+    return '';
+  }
+
+
+  protected function _getLinkToAllTitle() {
+    return '';
+  }
+
+
+  protected function _getWrapper() {
+     return 'Intonation_Library_View_Wrapper_Author';
+  }
+}
\ No newline at end of file
diff --git a/library/templates/Intonation/Library/Widget/Carousel/Definition.php b/library/templates/Intonation/Library/Widget/Carousel/Definition.php
index 04e226b64ddf56c5897fd856e54d62973a8c0893..cfb77f522b7063b6f06e2fd40919ea10af02b616 100644
--- a/library/templates/Intonation/Library/Widget/Carousel/Definition.php
+++ b/library/templates/Intonation/Library/Widget/Carousel/Definition.php
@@ -25,6 +25,7 @@ class Intonation_Library_Widget_Carousel_Definition extends Class_Systeme_Module
   const
     WALL = 'wall',
     CAROUSEL = 'carousel',
+    HORIZONTAL_LISTING = 'horizontal_list',
     LISTING = 'list',
     LISTING_WITH_OPTIONS = 'list_with_options',
     MULTIPLE_CAROUSEL = 'multiple_carousel',
diff --git a/library/templates/Intonation/Library/Widget/Carousel/Domain/Definition.php b/library/templates/Intonation/Library/Widget/Carousel/Domain/Definition.php
new file mode 100644
index 0000000000000000000000000000000000000000..2ec23e5856ef91f057aa53742c0eed606d8e222a
--- /dev/null
+++ b/library/templates/Intonation/Library/Widget/Carousel/Domain/Definition.php
@@ -0,0 +1,45 @@
+<?php
+/**
+ * Copyright (c) 2012-2017, Agence Française Informatique (AFI). All rights reserved.
+ *
+ * BOKEH is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
+ * the Free Software Foundation.
+ *
+ * There are special exceptions to the terms and conditions of the AGPL as it
+ * is applied to this software (see README file).
+ *
+ * BOKEH is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * along with BOKEH; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+ */
+
+
+class Intonation_Library_Widget_Carousel_Domain_Definition extends Intonation_Library_Widget_Carousel_Definition {
+
+  const
+    CODE = 'DOMAIN_BROWSER';
+
+  protected $_group = Class_Systeme_ModulesAccueil::GROUP_RECH;
+
+
+  public function __construct() {
+    $this->_libelle = $this->_('Boite domaines');
+    $this->_form = 'Intonation_Library_Widget_Carousel_Domain_Form';
+    $this->_view_helper = 'Intonation_Library_Widget_Carousel_Domain_View';
+    $this->_defaultValues = ['titre' => $this->_libelle,
+                             'layout' => static::WALL,
+                             'rendering' => static::CARD_OVERLAY,
+                             'rss' => false,
+                             'embeded_code' => false,
+                             'link_to_all' => false,
+                             'order' => Class_CriteresRecherche::SORT_PUBLICATION,
+                             'size' => 9,
+                             'root_domain_id' => ''];
+  }
+}
\ No newline at end of file
diff --git a/library/templates/Intonation/Library/Widget/Carousel/Domain/Form.php b/library/templates/Intonation/Library/Widget/Carousel/Domain/Form.php
new file mode 100644
index 0000000000000000000000000000000000000000..1022485d58ca63025018060529ef5f423e7a548d
--- /dev/null
+++ b/library/templates/Intonation/Library/Widget/Carousel/Domain/Form.php
@@ -0,0 +1,44 @@
+<?php
+/**
+ * Copyright (c) 2012-2017, Agence Française Informatique (AFI). All rights reserved.
+ *
+ * BOKEH is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
+ * the Free Software Foundation.
+ *
+ * There are special exceptions to the terms and conditions of the AGPL as it
+ * is applied to this software (see README file).
+ *
+ * BOKEH is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * along with BOKEH; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+ */
+
+
+class Intonation_Library_Widget_Carousel_Domain_Form extends Intonation_Library_Widget_Carousel_Form {
+
+
+  public function customPopulate($datas, $form = null) {
+    parent::customPopulate($datas);
+
+    return $this->replaceWith('data_sources',
+                              ['domainSelect',
+                               'root_domain_id',
+                               ['label' => $this->_('Choisissez le domaine de départ. Les domaines sélectionnables sont ceux qui ont des sous-domaines.'),
+                                'multiple_selection' => false,
+                                'items_selectable' => false,
+                                'url' => Class_Url::assemble(['module' => 'admin',
+                                                              'controller' => 'catalogue',
+                                                              'action' => 'browsable-domains'])]]);
+  }
+
+
+  public function getOrders() {
+    return ['libelle' => $this->_('Titre')];
+  }
+}
\ No newline at end of file
diff --git a/library/templates/Intonation/Library/Widget/Carousel/Domain/View.php b/library/templates/Intonation/Library/Widget/Carousel/Domain/View.php
new file mode 100644
index 0000000000000000000000000000000000000000..3947c53245389c2fea4c22b0aef0bf96373e4dc4
--- /dev/null
+++ b/library/templates/Intonation/Library/Widget/Carousel/Domain/View.php
@@ -0,0 +1,56 @@
+<?php
+/**
+ * Copyright (c) 2012-2018, Agence Française Informatique (AFI). All rights reserved.
+ *
+ * BOKEH is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
+ * the Free Software Foundation.
+ *
+ * There are special exceptions to the terms and conditions of the AGPL as it
+ * is applied to this software (see README file).
+ *
+ * BOKEH is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * along with BOKEH; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+ */
+
+
+class Intonation_Library_Widget_Carousel_Domain_View extends Intonation_Library_Widget_Carousel_View {
+
+  use Trait_TimeSource;
+
+
+  protected function _findElements() {
+    $root = ($root = Class_Catalogue::find($this->_settings->getRootDomainId()))
+      ? $root
+      : Class_Catalogue::getRoot();
+
+    return Class_Catalogue::findAllBy(['parent_id' => $root->getId(),
+                                       'order' => 'libelle']);
+  }
+
+
+  protected function _getRSSUrl() {
+    return '';
+  }
+
+
+  protected function _getLinkToAllParams() {
+    return [];
+  }
+
+
+  protected function _getLinkToAllTitle() {
+    return '';
+  }
+
+
+  protected function _getWrapper() {
+    return 'Intonation_Library_View_Wrapper_Domain';
+  }
+}
\ No newline at end of file
diff --git a/library/templates/Intonation/Library/Widget/Carousel/Form.php b/library/templates/Intonation/Library/Widget/Carousel/Form.php
index 7e29ff86c14523bc588778e18aef11b90ffadb23..242a412f74e8c9ef3259e53ac8b2d067d29a679f 100644
--- a/library/templates/Intonation/Library/Widget/Carousel/Form.php
+++ b/library/templates/Intonation/Library/Widget/Carousel/Form.php
@@ -53,7 +53,7 @@ class Intonation_Library_Widget_Carousel_Form extends ZendAfi_Form_Configuration
                    'embeded_code',
                    ['label' => $this->_('Proposer le code "embeded"')])
 
-      ->addElement('text',
+      ->addElement('number',
                    'size',
                    ['label' => $this->_('Nombre de documents à afficher'),
                     'size' => 2])
@@ -94,16 +94,18 @@ class Intonation_Library_Widget_Carousel_Form extends ZendAfi_Form_Configuration
   public function getLayouts() {
     return [Intonation_Library_Widget_Carousel_Definition::CAROUSEL => $this->_('Carousel'),
             Intonation_Library_Widget_Carousel_Definition::MULTIPLE_CAROUSEL => $this->_('Carousel à colonnes'),
-            Intonation_Library_Widget_Carousel_Definition::LISTING => $this->_('Liste'),
-            Intonation_Library_Widget_Carousel_Definition::LISTING_WITH_OPTIONS => $this->_('Liste à interactions'),
+            Intonation_Library_Widget_Carousel_Definition::HORIZONTAL_LISTING => $this->_('Liste horizontale'),
+            Intonation_Library_Widget_Carousel_Definition::LISTING => $this->_('Liste verticale'),
+            Intonation_Library_Widget_Carousel_Definition::LISTING_WITH_OPTIONS => $this->_('Liste verticale à interactions'),
             Intonation_Library_Widget_Carousel_Definition::WALL => $this->_('Mur')];
   }
 
 
   public function getRenderings() {
-    return [Intonation_Library_Widget_Carousel_Definition::CARD_OVERLAY => $this->_('Média'),
-            Intonation_Library_Widget_Carousel_Definition::CARD => $this->_('Média suivi par une description'),
-            Intonation_Library_Widget_Carousel_Definition::HORIZONTAL_CARD => $this->_('Média suivi par une description horizontal'),
-            Intonation_Library_Widget_Carousel_Definition::CARD_DESCRIPTION => $this->_('Uniquement une description')];
+    return [Intonation_Library_Widget_Carousel_Definition::CARD_DESCRIPTION => $this->_('Description'),
+            Intonation_Library_Widget_Carousel_Definition::CARD_OVERLAY => $this->_('Média'),
+            Intonation_Library_Widget_Carousel_Definition::HORIZONTAL_CARD => $this->_('Média et description à droite'),
+            Intonation_Library_Widget_Carousel_Definition::CARD => $this->_('Média et description en dessous'),
+    ];
   }
 }
\ No newline at end of file
diff --git a/library/templates/Intonation/Library/Widget/Carousel/Library/Form.php b/library/templates/Intonation/Library/Widget/Carousel/Library/Form.php
index b9ed578fcf2111830173345585b7cb30a62e0bf8..e32a51edf55c28a1a2ae5dfa7bbaf017813f6ce2 100644
--- a/library/templates/Intonation/Library/Widget/Carousel/Library/Form.php
+++ b/library/templates/Intonation/Library/Widget/Carousel/Library/Form.php
@@ -33,8 +33,6 @@ class Intonation_Library_Widget_Carousel_Library_Form extends Intonation_Library
                          'multiOptions' => Class_Bib::findAllLabels(),
                          'selectedLabel' => $this->_('Bibliothèques affichées'),
                          'availableLabel' => $this->_('Bibliothèques disponibles')]]);
-
-    return $this;
   }
 
 
diff --git a/library/templates/Intonation/Library/Widget/Carousel/Record/Definition.php b/library/templates/Intonation/Library/Widget/Carousel/Record/Definition.php
index 30b1d0d1ac7c24e4f1920c4ff89a25912722b028..c16f78ce9fd65face58b6e70325f9323efe05957 100644
--- a/library/templates/Intonation/Library/Widget/Carousel/Record/Definition.php
+++ b/library/templates/Intonation/Library/Widget/Carousel/Record/Definition.php
@@ -24,7 +24,7 @@ class Intonation_Library_Widget_Carousel_Record_Definition extends Intonation_Li
 
   const CODE = 'KIOSQUE';
 
-  protected $_group = Class_Systeme_ModulesAccueil::GROUP_INFO;
+  protected $_group = Class_Systeme_ModulesAccueil::GROUP_RECH;
 
 
   public function __construct() {
diff --git a/library/templates/Intonation/Library/Widget/Carousel/View.php b/library/templates/Intonation/Library/Widget/Carousel/View.php
index 7085bf298470c09242fd54246df8b1f24c639cc6..7054e80fdf1d1c5acd720053d2708b490c7effaf 100644
--- a/library/templates/Intonation/Library/Widget/Carousel/View.php
+++ b/library/templates/Intonation/Library/Widget/Carousel/View.php
@@ -139,6 +139,9 @@ abstract class Intonation_Library_Widget_Carousel_View extends Zendafi_View_Help
     if (Intonation_Library_Widget_Carousel_Definition::LISTING_WITH_OPTIONS == $layout)
       return $this->view->renderTruncateList($elements, $content_callback);
 
+    if (Intonation_Library_Widget_Carousel_Definition::HORIZONTAL_LISTING == $layout)
+      return $this->view->renderHorizontalList($elements, $content_callback);
+
     return $this->view->renderMultipleCarousel($elements, $content_callback);
   }
 
diff --git a/library/templates/Intonation/Library/Widget/Free/Definition.php b/library/templates/Intonation/Library/Widget/Free/Definition.php
new file mode 100644
index 0000000000000000000000000000000000000000..4a96ccb7e02ed810990e4e2b918bb3e0c3004f6d
--- /dev/null
+++ b/library/templates/Intonation/Library/Widget/Free/Definition.php
@@ -0,0 +1,39 @@
+<?php
+/**
+ * Copyright (c) 2012-2017, Agence Française Informatique (AFI). All rights reserved.
+ *
+ * BOKEH is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
+ * the Free Software Foundation.
+ *
+ * There are special exceptions to the terms and conditions of the AGPL as it
+ * is applied to this software (see README file).
+ *
+ * BOKEH is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * along with BOKEH; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+ */
+
+
+class Intonation_Library_Widget_Free_Definition extends Class_Systeme_ModulesAccueil_Null {
+
+  const
+    CODE = 'FREE';
+
+  protected
+    $_group = Class_Systeme_ModulesAccueil::GROUP_SITE,
+    $_isPhone = false;
+
+
+  public function __construct() {
+    $this->_libelle = $this->_('Boite libre');
+    $this->_form = 'Intonation_Library_Widget_Free_Form';
+    $this->_view_helper = 'Intonation_Library_Widget_Free_View';
+    $this->_defaultValues = ['titre' => $this->_libelle];
+  }
+}
\ No newline at end of file
diff --git a/library/templates/Intonation/Library/Widget/Free/Form.php b/library/templates/Intonation/Library/Widget/Free/Form.php
new file mode 100644
index 0000000000000000000000000000000000000000..5a1c9187703aeb088f1f92176c45d949c524dc1f
--- /dev/null
+++ b/library/templates/Intonation/Library/Widget/Free/Form.php
@@ -0,0 +1,46 @@
+<?php
+/**
+ * Copyright (c) 2012-2017, Agence Française Informatique (AFI). All rights reserved.
+ *
+ * BOKEH is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
+ * the Free Software Foundation.
+ *
+ * There are special exceptions to the terms and conditions of the AGPL as it
+ * is applied to this software (see README file).
+ *
+ * BOKEH is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * along with BOKEH; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+ */
+
+
+class Intonation_Library_Widget_Free_Form extends ZendAfi_Form_Configuration_Widget_Base {
+
+  public function init() {
+    parent::init();
+
+    return $this
+      ->addElement('treeSelect',
+                   'articles_selector',
+                   ['CategoriesSelectable' => false,
+                    'MultipleSelection' => false])
+
+      ->addToSelectionGroup(['articles_selector']);
+  }
+
+
+  public function customPopulate($datas, $form = null) {
+    parent::customPopulate($datas);
+
+    (new ZendAfi_Form_Configuration_Widget_Articles)
+      ->customPopulate($datas, $this);
+
+    return $this;
+  }
+}
\ No newline at end of file
diff --git a/library/templates/Intonation/Library/Widget/Free/View.php b/library/templates/Intonation/Library/Widget/Free/View.php
new file mode 100644
index 0000000000000000000000000000000000000000..ac27f2f909cbd8e50dd56113ee55f2524c0184e9
--- /dev/null
+++ b/library/templates/Intonation/Library/Widget/Free/View.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * Copyright (c) 2012-2018, Agence Française Informatique (AFI). All rights reserved.
+ *
+ * BOKEH is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
+ * the Free Software Foundation.
+ *
+ * There are special exceptions to the terms and conditions of the AGPL as it
+ * is applied to this software (see README file).
+ *
+ * BOKEH is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * along with BOKEH; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+ */
+
+
+class Intonation_Library_Widget_Free_View extends Zendafi_View_Helper_Accueil_Base {
+
+  public function getHtml() {
+    $this->titre = $this->_settings->getTitre();
+    $this->contenu = $this->_getHTML();
+    return $this->getHtmlArray();
+  }
+
+
+  protected function _getHTML() {
+    $id = isset($this->preferences['id_items'])
+      ? $this->preferences['id_items']
+      : [];
+
+    if (!$id)
+      return '';
+
+    if (!$articles = Class_Article::getArticlesByPreferences($this->preferences))
+      return '';
+
+    if (!$article = array_shift($articles))
+      return '';
+
+    return $this->view->article_ReplaceWidgets($article->getFullContent());
+  }
+}
\ No newline at end of file
diff --git a/library/templates/Intonation/Template.php b/library/templates/Intonation/Template.php
index 42cd2d5e364b6242a78e5e120821c84be0d1b8eb..45ed82624622452a97cd7ac6098a20541421046e 100644
--- a/library/templates/Intonation/Template.php
+++ b/library/templates/Intonation/Template.php
@@ -128,6 +128,8 @@ class Intonation_Template extends Class_Template {
 
        Intonation_Library_Widget_Share_Definition::CODE => new Intonation_Library_Widget_Share_Definition,
 
+       Intonation_Library_Widget_Free_Definition::CODE => new Intonation_Library_Widget_Free_Definition,
+
        Intonation_Library_Widget_Image_Definition::CODE => new Intonation_Library_Widget_Image_Definition,
 
        Intonation_Library_Widget_AdminTools_Definition::CODE => new Intonation_Library_Widget_AdminTools_Definition,
@@ -147,6 +149,10 @@ class Intonation_Template extends Class_Template {
        Intonation_Library_Widget_Carousel_Library_Definition::CODE => new Intonation_Library_Widget_Carousel_Library_Definition,
 
        Intonation_Library_Widget_Carousel_Agenda_Definition::CODE => new Intonation_Library_Widget_Carousel_Agenda_Definition,
+
+       Intonation_Library_Widget_Carousel_Author_Definition::CODE => new Intonation_Library_Widget_Carousel_Author_Definition,
+
+       Intonation_Library_Widget_Carousel_Domain_Definition::CODE => new Intonation_Library_Widget_Carousel_Domain_Definition,
       ];
   }
 
diff --git a/library/templates/Intonation/View/Abonne/LoansList.php b/library/templates/Intonation/View/Abonne/LoansList.php
index e00d1c0adf0886fe41f6b4ba7f8d706521f425dc..20969cde31d90e01d0a966c4fe93d4937b05aa68 100644
--- a/library/templates/Intonation/View/Abonne/LoansList.php
+++ b/library/templates/Intonation/View/Abonne/LoansList.php
@@ -87,6 +87,9 @@ class Intonation_View_Abonne_LoansList extends ZendAfi_View_Helper_BaseHelper {
                            ->setView($this->view);
                        }, $loans->getArrayCopy());
 
+    if (!$loans)
+      return '';
+
     $actions = [new Intonation_Library_Link(['Url' => ['controller' => 'abonne',
                                                        'action' => 'prolongerPret',
                                                        'id_pret' => $this->getRenewableLoans()],
diff --git a/library/templates/Intonation/View/Admin/ProfileComposition.php b/library/templates/Intonation/View/Admin/ProfileComposition.php
index b3a79f91c92f2d37a08f6fdac34e5fdc5f3b229e..4f36fbc892b1dbfd5ced621b6c9cfc73615551f4 100644
--- a/library/templates/Intonation/View/Admin/ProfileComposition.php
+++ b/library/templates/Intonation/View/Admin/ProfileComposition.php
@@ -21,6 +21,26 @@
 
 
 class Intonation_View_Admin_ProfileComposition extends ZendAfi_View_Helper_ProfileComposition {
+
+  protected function _availableItems() {
+    $blocks = [];
+    foreach([Class_Systeme_ModulesAccueil::GROUP_INFO => $this->_('Contenu'),
+             Class_Systeme_ModulesAccueil::GROUP_RECH => $this->_('Catalogue'),
+             Class_Systeme_ModulesAccueil::GROUP_SITE => $this->_('Site'),
+             Class_Systeme_ModulesAccueil::GROUP_ABONNE => $this->_('Utilisateurs')] as $groupe => $libelle)
+      $blocks[$groupe] = $this->_tag('div',
+                                     $this->_tag('h5', $libelle) .
+                                     $this->_tag('ul',
+                                                 $this->_getAvailableWidgetsFor($groupe),
+                                                 ['class' => 'source_list']));
+
+    return $this->_tag('div',
+                       $this->_tag('h4', $this->_('Boites disponibles')).
+                       implode($blocks),
+                       ['class' => 'drag_drop_container']);
+  }
+
+
   protected function _getSideColumn() {
     return '';
   }
diff --git a/library/templates/Intonation/View/Author/Biography.php b/library/templates/Intonation/View/Author/Biography.php
new file mode 100644
index 0000000000000000000000000000000000000000..3d09dd76fc30abda67989be92d1478de93bceda9
--- /dev/null
+++ b/library/templates/Intonation/View/Author/Biography.php
@@ -0,0 +1,39 @@
+<?php
+/**
+ * Copyright (c) 2012-2017, Agence Française Informatique (AFI). All rights reserved.
+ *
+ * BOKEH is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
+ * the Free Software Foundation.
+ *
+ * There are special exceptions to the terms and conditions of the AGPL as it
+ * is applied to this software (see README file).
+ *
+ * BOKEH is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * along with BOKEH; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+ */
+
+
+class Intonation_View_Author_Biography extends Intonation_View_RenderAuthorDescription {
+  public function author_Biography($author) {
+    $html = $this->renderAuthorDescription(new Class_CodifAuteur_Description($author));
+    $this->view->titre = $this->_('%s : Biographie',
+                                  $this->view->titre);
+    return $html;
+  }
+
+
+  protected function _showSections($sections) {
+    foreach($sections as $section)
+      if ('author_biography' == $section->getClass())
+        return $section
+          ->beActive()
+          ->beVisible();
+  }
+}
\ No newline at end of file
diff --git a/library/templates/Intonation/View/Author/Collaborations.php b/library/templates/Intonation/View/Author/Collaborations.php
new file mode 100644
index 0000000000000000000000000000000000000000..03da75ed68e5ca38fd4cfc8f855d5941eb511780
--- /dev/null
+++ b/library/templates/Intonation/View/Author/Collaborations.php
@@ -0,0 +1,39 @@
+<?php
+/**
+ * Copyright (c) 2012-2017, Agence Française Informatique (AFI). All rights reserved.
+ *
+ * BOKEH is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
+ * the Free Software Foundation.
+ *
+ * There are special exceptions to the terms and conditions of the AGPL as it
+ * is applied to this software (see README file).
+ *
+ * BOKEH is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * along with BOKEH; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+ */
+
+
+class Intonation_View_Author_Collaborations extends Intonation_View_RenderAuthorDescription {
+  public function author_Collaborations($author) {
+    $html = $this->renderAuthorDescription(new Class_CodifAuteur_Description($author));
+    $this->view->titre = $this->_('%s : Collaborateurs',
+                                  $this->view->titre);
+    return $html;
+  }
+
+
+  protected function _showSections($sections) {
+    foreach($sections as $section)
+      if ('author_collaborations' == $section->getClass())
+        return $section
+          ->beActive()
+          ->beVisible();
+  }
+}
\ No newline at end of file
diff --git a/library/templates/Intonation/View/Author/Interviews.php b/library/templates/Intonation/View/Author/Interviews.php
new file mode 100644
index 0000000000000000000000000000000000000000..f11f12540880ef94ae43e105d9f2d7b62e5e442b
--- /dev/null
+++ b/library/templates/Intonation/View/Author/Interviews.php
@@ -0,0 +1,39 @@
+<?php
+/**
+ * Copyright (c) 2012-2017, Agence Française Informatique (AFI). All rights reserved.
+ *
+ * BOKEH is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
+ * the Free Software Foundation.
+ *
+ * There are special exceptions to the terms and conditions of the AGPL as it
+ * is applied to this software (see README file).
+ *
+ * BOKEH is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * along with BOKEH; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+ */
+
+
+class Intonation_View_Author_Interviews extends Intonation_View_RenderAuthorDescription {
+  public function author_Interviews($author) {
+    $html = $this->renderAuthorDescription(new Class_CodifAuteur_Description($author));
+    $this->view->titre = $this->_('%s : Interviews',
+                                  $this->view->titre);
+    return $html;
+  }
+
+
+  protected function _showSections($sections) {
+    foreach($sections as $section)
+      if ('author_interviews' == $section->getClass())
+        return $section
+          ->beActive()
+          ->beVisible();
+  }
+}
\ No newline at end of file
diff --git a/library/templates/Intonation/View/Author/Records.php b/library/templates/Intonation/View/Author/Records.php
new file mode 100644
index 0000000000000000000000000000000000000000..3fad2c82a2d532e391b482cd0cbd63ecfc91d097
--- /dev/null
+++ b/library/templates/Intonation/View/Author/Records.php
@@ -0,0 +1,39 @@
+<?php
+/**
+ * Copyright (c) 2012-2017, Agence Française Informatique (AFI). All rights reserved.
+ *
+ * BOKEH is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
+ * the Free Software Foundation.
+ *
+ * There are special exceptions to the terms and conditions of the AGPL as it
+ * is applied to this software (see README file).
+ *
+ * BOKEH is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * along with BOKEH; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+ */
+
+
+class Intonation_View_Author_Records extends Intonation_View_RenderAuthorDescription {
+  public function author_Records($author) {
+    $html = $this->renderAuthorDescription(new Class_CodifAuteur_Description($author));
+    $this->view->titre = $this->_('%s : Documents',
+                                  $this->view->titre);
+    return $html;
+  }
+
+
+  protected function _showSections($sections) {
+    foreach($sections as $section)
+      if ('author_records' == $section->getClass())
+        return $section
+          ->beActive()
+          ->beVisible();
+  }
+}
\ No newline at end of file
diff --git a/library/templates/Intonation/View/Author/RenderWikipedia.php b/library/templates/Intonation/View/Author/RenderWikipedia.php
index 5eab828986180e02fef9adaab706dbe7940fab24..60e3aa14d931214ab0adbd3f580dce0e6f157139 100644
--- a/library/templates/Intonation/View/Author/RenderWikipedia.php
+++ b/library/templates/Intonation/View/Author/RenderWikipedia.php
@@ -66,9 +66,9 @@ class Intonation_View_Author_RenderWikipedia extends ZendAfi_View_Helper_BaseHel
 
     Class_ScriptLoader::getInstance()->addJQueryReady('$(".biography_scroll").scrollspy({target: "#' . $nav_id . '"});');
 
-    return $this->view->grid($this->_div(['class' => 'col-4'],
+    return $this->view->grid($this->_div(['class' => 'd-none d-md-block col-md-4'],
                                          $nav)
-                             . $this->_div(['class' => 'col-8'],
+                             . $this->_div(['class' => 'col-12 col-md-8'],
                                            $this->_div(['class' => 'biography_scroll'],
                                                        $edited_bio))
                              . $this->_div(['class' => 'col-12'],
diff --git a/library/templates/Intonation/View/Author/YoutubeChan.php b/library/templates/Intonation/View/Author/YoutubeChan.php
new file mode 100644
index 0000000000000000000000000000000000000000..14bc8d7a38e62bb9c8eed27f640443ce02f17400
--- /dev/null
+++ b/library/templates/Intonation/View/Author/YoutubeChan.php
@@ -0,0 +1,39 @@
+<?php
+/**
+ * Copyright (c) 2012-2017, Agence Française Informatique (AFI). All rights reserved.
+ *
+ * BOKEH is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
+ * the Free Software Foundation.
+ *
+ * There are special exceptions to the terms and conditions of the AGPL as it
+ * is applied to this software (see README file).
+ *
+ * BOKEH is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * along with BOKEH; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+ */
+
+
+class Intonation_View_Author_YoutubeChan extends Intonation_View_RenderAuthorDescription {
+  public function author_YoutubeChan($author) {
+    $html = $this->renderAuthorDescription(new Class_CodifAuteur_Description($author));
+    $this->view->titre = $this->_('%s : Chaine YouTube',
+                                  $this->view->titre);
+    return $html;
+  }
+
+
+  protected function _showSections($sections) {
+    foreach($sections as $section)
+      if ('author_youtube_chan' == $section->getClass())
+        return $section
+          ->beActive()
+          ->beVisible();
+  }
+}
\ No newline at end of file
diff --git a/library/templates/Intonation/View/BookmarkedSearches.php b/library/templates/Intonation/View/BookmarkedSearches.php
index a0fc34fe67ac1a9d4da938d8079f33396b235495..1f11cd504496d6159df022754e47d5f80346ea27 100644
--- a/library/templates/Intonation/View/BookmarkedSearches.php
+++ b/library/templates/Intonation/View/BookmarkedSearches.php
@@ -34,7 +34,8 @@ class Intonation_View_BookmarkedSearches extends ZendAfi_View_Helper_BaseHelper
       return $this->view->cardifyHorizontal($wrapped);
     };
 
-    $html = $this->_tag('h3', $this->_('Mes recherches suivies'));
+    $html = $this->_tag('h3',
+                        $this->_('Mes recherches suivies'));
 
     if (!$searches)
       return
diff --git a/library/templates/Intonation/View/CalendarContent.php b/library/templates/Intonation/View/CalendarContent.php
index 1b2ec018128b82bcdb450823a587cecc976fdb2e..3712a7dbc1f271533795371c90a4f4b219601099 100644
--- a/library/templates/Intonation/View/CalendarContent.php
+++ b/library/templates/Intonation/View/CalendarContent.php
@@ -22,6 +22,8 @@
 
 class Intonation_View_CalendarContent extends ZendAfi_View_Helper_CalendarContent {
   public function calendarContent($calendar, $settings = []) {
+    Class_ScriptLoader::getInstance()->addOPACScript('calendrier');
+
     $this->param = $settings;
     $this->calendar = $calendar;
 
diff --git a/library/templates/Intonation/View/CardifyWithOverlay.php b/library/templates/Intonation/View/CardifyWithOverlay.php
index f0ffcdd14fe16d5835365e323ce5f030526eaa51..c47a2bb3a66878d35652a38f8e1c325068b63049 100644
--- a/library/templates/Intonation/View/CardifyWithOverlay.php
+++ b/library/templates/Intonation/View/CardifyWithOverlay.php
@@ -56,6 +56,7 @@ class Intonation_View_CardifyWithOverlay extends ZendAfi_View_Helper_BaseHelper
     $main_link = $element
       ->getMainLink()
       ->setText($content)
+      ->setNoButtonText(true)
       ->setImage('');
 
     $link = $this->view->tagAction($main_link);
diff --git a/library/templates/Intonation/View/Jumbotron.php b/library/templates/Intonation/View/Jumbotron.php
index 453eeb341bf86852f4c388b472d7b2e3f325a43d..7a7f24bd0cda581c03110c4799d85800e63b63b1 100644
--- a/library/templates/Intonation/View/Jumbotron.php
+++ b/library/templates/Intonation/View/Jumbotron.php
@@ -120,10 +120,12 @@ class Intonation_View_Jumbotron extends ZendAfi_View_Helper_BaseHelper {
 
 
   protected function _getRowActions() {
+    $html = $this->view->div(['class' => 'inspector_gadget'], '');
+
     if (!$rich_content = $this->_element->getRichContent())
-      return;
+      return $html;
 
-    return $rich_content->getRowActions();
+    return $rich_content->getRowActions() . $html;
   }
 
 
@@ -152,7 +154,7 @@ class Intonation_View_Jumbotron extends ZendAfi_View_Helper_BaseHelper {
                'class' => 'nav-link ' . $item->getClass() . ' ' . $item->getActiveClass()];
 
     if ($item->isAjax() || (!$item->getContent()))
-      $params ['class'] .= ' disabled text-black-50';
+      $params ['class'] .= ' text-black-50';
 
     return
       $this->_tag('li',
@@ -176,7 +178,7 @@ class Intonation_View_Jumbotron extends ZendAfi_View_Helper_BaseHelper {
                       },
                       $sections);
 
-    $html = $this->_div(['class' => 'col-md-10 col-xl-9'], implode($html));
+    $html = $this->_div(['class' => 'col-10 col-xl-9'], implode($html));
 
     return $this->view->grid($html,
                              [],
diff --git a/library/templates/Intonation/View/Notice/Exemplaires.php b/library/templates/Intonation/View/Notice/Exemplaires.php
index 158bd15cd915b86b5a38af5900a604f17bba2e23..447108cd5fadd7d9d4804d082bc1eb5b5c6c7af5 100644
--- a/library/templates/Intonation/View/Notice/Exemplaires.php
+++ b/library/templates/Intonation/View/Notice/Exemplaires.php
@@ -46,6 +46,6 @@ class Intonation_View_Notice_Exemplaires extends ZendAfi_View_Helper_BaseHelper
                              ->setModel($element);
                          }, $exemplaires);
 
-    return $this->view->renderTruncateList(new Storm_Collection($elements), $callback);
+    return $this->view->renderWall(new Storm_Collection($elements), $callback);
   }
 }
\ No newline at end of file
diff --git a/library/templates/Intonation/View/RenderAuthor.php b/library/templates/Intonation/View/RenderAuthor.php
new file mode 100644
index 0000000000000000000000000000000000000000..c1bc8c3a707d72df684761972d50ea36a05c5f99
--- /dev/null
+++ b/library/templates/Intonation/View/RenderAuthor.php
@@ -0,0 +1,52 @@
+<?php
+/**
+ * Copyright (c) 2012-2018, Agence Française Informatique (AFI). All rights reserved.
+ *
+ * BOKEH is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
+ * the Free Software Foundation.
+ *
+ * There are special exceptions to the terms and conditions of the AGPL as it
+ * is applied to this software (see README file).
+ *
+ * BOKEH is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * along with BOKEH; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+ */
+
+class Intonation_View_RenderAuthor extends ZendAfi_View_Helper_BaseHelper {
+
+  public function renderAuthor($description) {
+    $html = [$this->_div(['class' => 'col-3'],
+                         $this->view->Author_RenderThumbnail($description)),
+
+             $this->_div(['class' => 'col-9 pl-3'],
+                         $this->view->Author_RenderFacets($description)),
+
+             $this->_div(['class' => 'col-12 mt-3'],
+                         $this->view->Author_RenderWikipedia($description)),
+
+             $this->_div(['class' => 'col-12 mt-3 text-right'],
+                         $this->view->Author_EditBiographyUrl($description)),
+
+             $this->_div(['class' => 'col-12 mt-3'],
+                         $this->view->Author_RenderRecords($description)),
+
+             $this->_div(['class' => 'col-12 mt-3'],
+                         $this->view->Author_RenderCollaborations($description)),
+
+             $this->_div(['class' => 'col-12 mt-3'],
+                         $this->view->Author_RenderInterviews($description)),
+
+             $this->_div(['class' => 'col-12 mt-3'],
+                         $this->view->Author_RenderYoutubeChan($description)),
+    ];
+
+    return $this->view->grid(implode($html), [], ['class' => 'justify-content-between']);
+  }
+}
\ No newline at end of file
diff --git a/library/templates/Intonation/View/RenderAuthorDescription.php b/library/templates/Intonation/View/RenderAuthorDescription.php
index 4e800557d843bcb23506daaaec35603cc961368e..7da646c6d42653672d7760489c972ddf26f0a39c 100644
--- a/library/templates/Intonation/View/RenderAuthorDescription.php
+++ b/library/templates/Intonation/View/RenderAuthorDescription.php
@@ -19,34 +19,23 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
  */
 
-class Intonation_View_RenderAuthorDescription extends ZendAfi_View_Helper_BaseHelper {
-
+class Intonation_View_RenderAuthorDescription extends Intonation_View_Jumbotron_Abstract {
   public function renderAuthorDescription($description) {
-    $html = [$this->_div(['class' => 'col-3'],
-                         $this->view->Author_RenderThumbnail($description)),
-
-             $this->_div(['class' => 'col-9 pl-3'],
-                         $this->view->Author_RenderFacets($description)),
-
-             $this->_div(['class' => 'col-12 mt-3'],
-                         $this->view->Author_RenderWikipedia($description)),
+    return $this->_core($description->getAuthor());
+  }
 
-             $this->_div(['class' => 'col-12 mt-3 text-right'],
-                         $this->view->Author_EditBiographyUrl($description)),
 
-             $this->_div(['class' => 'col-12 mt-3'],
-                         $this->view->Author_RenderRecords($description)),
+  protected function _getWrappedInstance() {
+    return new Intonation_Library_View_Wrapper_Author;
+  }
 
-             $this->_div(['class' => 'col-12 mt-3'],
-                         $this->view->Author_RenderCollaborations($description)),
 
-             $this->_div(['class' => 'col-12 mt-3'],
-                         $this->view->Author_RenderInterviews($description)),
+  protected function _getRichContentInstance() {
+    return new Intonation_Library_View_Wrapper_Author_RichContent;
+  }
 
-             $this->_div(['class' => 'col-12 mt-3'],
-                         $this->view->Author_RenderYoutubeChan($description)),
-    ];
 
-    return $this->view->grid(implode($html), [], ['class' => 'justify-content-between']);
+  protected function _getPageTitle($wrapped) {
+    return $this->_('Page auteur %s', $wrapped->getMainTitle());
   }
 }
\ No newline at end of file
diff --git a/library/templates/Intonation/View/RenderHorizontalList.php b/library/templates/Intonation/View/RenderHorizontalList.php
new file mode 100644
index 0000000000000000000000000000000000000000..9d1bf495c51ec23a3c233a0e16202be783e75bca
--- /dev/null
+++ b/library/templates/Intonation/View/RenderHorizontalList.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Copyright (c) 2012-2018, Agence Française Informatique (AFI). All rights reserved.
+ *
+ * BOKEH is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
+ * the Free Software Foundation.
+ *
+ * There are special exceptions to the terms and conditions of the AGPL as it
+ * is applied to this software (see README file).
+ *
+ * BOKEH is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * along with BOKEH; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+ */
+
+
+class Intonation_View_RenderHorizontalList extends ZendAfi_View_Helper_BaseHelper {
+
+  public function renderHorizontalList($collection, $callback) {
+    $html = $collection
+      ->injectInto('', function($html, $element) use ($callback)
+    {
+      return $html . $callback($element);
+    });
+
+    return $this->_tag('div',
+                       $html,
+                       ['class' => 'card-deck bg-transparent']);
+  }
+}
\ No newline at end of file
diff --git a/library/templates/Intonation/View/RenderNewsletters.php b/library/templates/Intonation/View/RenderNewsletters.php
index a04c894f54fc36f0acbbb834fd1ba9c4958c46d0..5a440ed89134f507ff3953a2affeec3287013f6e 100644
--- a/library/templates/Intonation/View/RenderNewsletters.php
+++ b/library/templates/Intonation/View/RenderNewsletters.php
@@ -22,6 +22,9 @@
 
 class Intonation_View_RenderNewsletters extends ZendAfi_View_Helper_BaseHelper {
   public function RenderNewsletters($newsletters) {
+    if (!$newsletters)
+      return '';
+
     $newsletters = array_map(function($newsletter)
                             {
                               return (new Intonation_Library_View_Wrapper_Newsletter)
diff --git a/library/templates/Intonation/View/RenderRecord/Items.php b/library/templates/Intonation/View/RenderRecord/Items.php
new file mode 100644
index 0000000000000000000000000000000000000000..f51478ea9bc943a231a33f4f8fb5465fe59c2a47
--- /dev/null
+++ b/library/templates/Intonation/View/RenderRecord/Items.php
@@ -0,0 +1,39 @@
+<?php
+/**
+ * Copyright (c) 2012-2018, Agence Française Informatique (AFI). All rights reserved.
+ *
+ * BOKEH is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
+ * the Free Software Foundation.
+ *
+ * There are special exceptions to the terms and conditions of the AGPL as it
+ * is applied to this software (see README file).
+ *
+ * BOKEH is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * along with BOKEH; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+ */
+
+
+class Intonation_View_RenderRecord_Items extends Intonation_View_RenderRecord {
+  public function renderRecord_Items($record) {
+    $html = $this->renderRecord($record);
+    $this->view->titre = $this->_('%s : Exemplaires',
+                                  $this->view->titre);
+    return $html;
+  }
+
+
+  protected function _showSections($sections) {
+    foreach($sections as $section)
+      if ('document_items' == $section->getClass())
+        return $section
+          ->beActive()
+          ->beVisible();
+  }
+}
\ No newline at end of file
diff --git a/library/templates/Intonation/View/RenderTruncateList.php b/library/templates/Intonation/View/RenderTruncateList.php
index 9be1af765eb32b10cc916617bdc2ca1242f495e1..36f4c1f31ec079ed6240e6b8187d2bf042fa6071 100644
--- a/library/templates/Intonation/View/RenderTruncateList.php
+++ b/library/templates/Intonation/View/RenderTruncateList.php
@@ -56,7 +56,7 @@ class Intonation_View_RenderTruncateList extends ZendAfi_View_Helper_BaseHelper
     Class_ScriptLoader::getInstance()
       ->addSearchInputToContainer('#' . $container_id,
                                   '#' . $input_id,
-                                  '#' . $container_id . ' div.card *');
+                                  '#' . $container_id . ' div.card *, .dropdown, .dropdown-menu');
 
     Class_ScriptLoader::getInstance()
       ->addJQueryReady("var container = $('#" . $container_id . "');"
diff --git a/library/templates/Intonation/View/TagAction.php b/library/templates/Intonation/View/TagAction.php
index fe79cc8260338270c24de3d5efa167b58086d8b2..60922f48ba6f36f4144db11f56f29a5dbe1ea05d 100644
--- a/library/templates/Intonation/View/TagAction.php
+++ b/library/templates/Intonation/View/TagAction.php
@@ -77,6 +77,9 @@ class Intonation_View_TagAction extends ZendAfi_View_Helper_BaseHelper {
     if (!$text = $action->getText())
       return '';
 
+    if ($action->getNoButtonText())
+      return $this->_tag('div', $text, ['class' => ' d-inline-block']);
+
     if (!$img)
       return $this->_tag('div', $text, ['class' => ' d-inline-block button_text']);
 
diff --git a/library/templates/Intonation/View/TagMedia.php b/library/templates/Intonation/View/TagMedia.php
index 463ebf3583357a60d8cfe5ab3d4c75f12793473a..5bb62ea3ebb7956e09e7956a2ce53d8046c2e3c4 100644
--- a/library/templates/Intonation/View/TagMedia.php
+++ b/library/templates/Intonation/View/TagMedia.php
@@ -23,8 +23,7 @@
 class Intonation_View_TagMedia extends ZendAfi_View_Helper_BaseHelper {
   public function tagMedia($instance, $attribs = [], $img_attribs = []) {
     if ($html = $instance->getHtmlPicture())
-      return $this->_div($attribs,
-                         $html);
+      return $this->_div($attribs, $html);
 
     if (!$media = $this->_getMedia($instance, $attribs, $img_attribs))
       return '';
diff --git a/public/admin/css/front_nav.css b/public/admin/css/front_nav.css
index 79bf5c00dae7a7128187b65c770aea96c41d8a68..ee4524aa3196c5c0fea5c3217040eb17b780cf1f 100644
--- a/public/admin/css/front_nav.css
+++ b/public/admin/css/front_nav.css
@@ -3,6 +3,10 @@ body > .menu_admin_front {
     position: fixed;
     top: 0;
     left: 0;
+}
+
+body > .menu_admin_front,
+body .widget.admin_tools {
     z-index: 102;
 }
 
diff --git a/public/admin/js/cfg.accueil.js b/public/admin/js/cfg.accueil.js
index 913fc066ddca203df88d96b85a90875522859682..7b54119d832ba5a51e710aa980df89fbbe595786 100644
--- a/public/admin/js/cfg.accueil.js
+++ b/public/admin/js/cfg.accueil.js
@@ -47,7 +47,7 @@ function opacBlocksSorting(moduleSortUrl, currentProfilId) {
 
 
 function opacBlocksSortingInitPositions() {
-  var currentPositions = [0, 0, 0];
+  var currentPositions = [0, 0, 0, 0, 0, 0];
   $("div.layout-division>div>div, .section_content_wrapper > .widget").each(function(k, item) {
 
     if ("barre_nav" == $(item).attr("class")) 
diff --git a/public/opac/java/search_input/search_input.js b/public/opac/java/search_input/search_input.js
index 8c5f3b1191c246a8261bc92645d67f4610c0e045..2f0dbd28dc6ab36b9a8011002e09797fb68f6f44 100644
--- a/public/opac/java/search_input/search_input.js
+++ b/public/opac/java/search_input/search_input.js
@@ -52,7 +52,11 @@
     var onSearchInputChange = function(searchText) {
       
       var resetAll = function() {
-	html.find('*').removeClass(not_found_class).show();
+	html
+	  .find('*')
+	  .not(default_fixed_display + options.fixed_display)
+	  .removeClass(not_found_class)
+	  .show();
       }
 
       if (!searchText || searchText == "" || searchText == '*')
@@ -76,7 +80,12 @@
       var highlightItems = function(elements) {
 	resetAll();
 	html.find('*').not(elements).not(default_fixed_display + options.fixed_display).addClass(not_found_class);
-	html.find(elements).parentsUntil(html).removeClass(not_found_class).show();
+	html
+	  .find(elements)
+	  .parentsUntil(html)
+	  .not(default_fixed_display + options.fixed_display)
+	  .removeClass(not_found_class)
+	  .show();
       }
 
       searchText = accentsTidy(searchText);
diff --git a/scripts/export_csv_category.php b/scripts/export_csv_category.php
new file mode 100755
index 0000000000000000000000000000000000000000..bf988c1d4bdfc8056509822a2abe4bedebe9ce81
--- /dev/null
+++ b/scripts/export_csv_category.php
@@ -0,0 +1,45 @@
+<?php
+error_reporting(E_ERROR | E_PARSE);
+require(__DIR__.'/../console.php');
+
+class Scripts_ExportCsvCategory extends ZendAfi_Controller_Action{
+
+  public function __construct($cat_id, $filename){
+  $usage = "usage : php export_category_csv.php catid filename.csv
+
+   catid = id category à utiliser  pour l'export
+
+   filename = nom du fichier à générer
+";
+
+if (!isset($cat_id) || !($categories = Class_AlbumCategorie::find($cat_id))){
+  print $usage;
+}
+
+
+$description = (new Class_TableDescription('ressources'))
+      ->addColumn($this->_('Categorie'), 'album_category_absolute_path')
+      ->addColumn($this->_('Titre Album'), 'titre_album')
+      ->addColumn($this->_('Description Album'), 'description_album')
+      ->addColumn($this->_('Date'), 'annee')
+      ->addColumn($this->_('Créateur'), 'auteur')
+      ->addColumn($this->_('Editeur'), 'editeur')
+      ->addColumn($this->_('Titre'), 'titre')
+      ->addColumn($this->_('Description'), 'description')
+      ->addColumn($this->_('Ressource'), 'play_ressource_url');
+
+$datas = [];
+foreach(Class_AlbumCategorie::getAlbumsFromCategories([$cat_id]) as $album)
+  $datas = array_merge( $album->getRessources(),$datas);
+
+
+$handle = fopen($filename?$filename:'export.csv','w');
+
+$zf_render_csv = new ZendAfi_View_Helper_RenderCsv();
+fwrite($handle, $zf_render_csv->renderCsv($description, $datas));
+fclose($handle);
+
+}
+}
+new Scripts_ExportCsvCategory($argv[1], $argv[2]);
+?>
diff --git a/tests/application/modules/admin/controllers/AlbumControllerTest.php b/tests/application/modules/admin/controllers/AlbumControllerTest.php
index 385cc9044c1f45376b881bcd583b81a90fc06622..79ff16ab2cf39ff3e87aa469ad6068cf5b05a7f5 100644
--- a/tests/application/modules/admin/controllers/AlbumControllerTest.php
+++ b/tests/application/modules/admin/controllers/AlbumControllerTest.php
@@ -2956,6 +2956,78 @@ abstract class ControllerAlbumMultiMediasTestCase extends Admin_AlbumControllerT
 
 
 
+class AlbumControllerMultiMediasExportCSV extends ControllerAlbumMultiMediasTestCase {
+  protected $_csv = [];
+
+  public function setUp() {
+    parent::setUp();
+
+    $this->fixture('Class_AlbumCategorie',
+                   ['id' => '34',
+                    'libelle' => 'Jeunesse']);
+
+    Class_AlbumCategorie::find(33)
+         ->setParentCategorie(Class_AlbumCategorie::find(34))
+         ->save();
+
+    Class_Album::find('999')
+      ->AddEditor('Dargaud')
+      ->setAnnee('2019');
+
+    $this->postDispatch('/admin/album/export-csv',
+                        ['cat_id' => 34],
+                        true);
+    $this->_csv = array_map(function($line) { return str_getcsv($line, ";", '"'); },
+                            explode("\n", rtrim($this->_response->getBody())));
+  }
+
+
+  /** @test */
+  public function responseBodyShouldBeAttachment() {
+    $this->assertHeaderContains('Content-Disposition', 'attachment');
+  }
+
+
+  /** @test */
+  public function csvShouldCountFiveLines() {
+    $this->assertCount(5, $this->_csv);
+  }
+
+
+  /** @test */
+  public function firstRowShouldContainsAllHeaders() {
+    // cannot assertEquals entire row due to array sort diff between php5 and php7
+    foreach(['Categorie', "Titre Album", "Description Album", 'Date', 'Créateur', 'Editeur', 'Titre', 'Description', 'Ressource']
+            as $header)
+      $this->assertContains($header, $this->_csv[0]);
+  }
+
+
+  /** @test
+  */
+  public function secondRowShouldContainsValuesForAlbum() {
+    // cannot assertEquals entire row due to array sort diff between php5 and php7
+    foreach(['Jeunesse > Comics', 'Plein de medias', '<p>pour passer la soirée</p>', '2019','Titi','Dargaud']
+            as $value)
+      $this->assertContains($value, $this->_csv[1]);
+  }
+
+
+  /** @test
+  */
+  public function thirdRowShouldContainsValuesForBatmanDarkKnightRessource() {
+    foreach(['Batman Dark Knight', 'Une nouvelle aventure du justicier noir' ]
+            as $value)
+      $this->assertContains($value, $this->_csv[2]);
+
+    $this->assertEquals(1, substr_count($this->_csv[2][8],
+                                        '/bib-numerique/play-ressource/id'));
+  }
+}
+
+
+
+
 class AlbumControllerMultiMediasExportEAD extends ControllerAlbumMultiMediasTestCase {
   public function setUp() {
     parent::setUp();
diff --git a/tests/application/modules/opac/controllers/AuthControllerPreRegistrationTest.php b/tests/application/modules/opac/controllers/AuthControllerPreRegistrationTest.php
index 6e1f538461fa7a0f1d51e8f37eee1ca75427d7c2..2171c3acee16ae1d16477ce58cd0c2e05ac054ce 100644
--- a/tests/application/modules/opac/controllers/AuthControllerPreRegistrationTest.php
+++ b/tests/application/modules/opac/controllers/AuthControllerPreRegistrationTest.php
@@ -136,7 +136,7 @@ class AuthControllerPreRegistrationKohaPostDispatchTest extends AuthControllerPr
              ['data' => json_encode(['branchcode' => 'GRA',
                                      'surname' => 'Boulard',
                                      'firstname' => 'Thom',
-                                     'dateofbirth' => '15-09-1940',
+                                     'dateofbirth' => '1940-09-15',
                                      'streetnumber' => '10',
                                      'address' => 'rue secret',
                                      'zipcode' => '01630',
@@ -156,8 +156,7 @@ class AuthControllerPreRegistrationKohaPostDispatchTest extends AuthControllerPr
                          'city' => 'Gotham',
                          'email' => 'thom@mail.com',
                          'phone' => '0123456789',
-                         'emailCheck' => ''],
-                        true);
+                         'emailCheck' => '']);
   }
 
 
@@ -213,7 +212,7 @@ class AuthControllerPreRegistrationKohaPostDispatchWithErrorReturnedTest extends
              ['data' => json_encode(['branchcode' => 'GRA',
                                      'surname' => 'Boulard',
                                      'firstname' => 'Thom',
-                                     'dateofbirth' => '15-09-1940',
+                                     'dateofbirth' => '1940-09-15',
                                      'streetnumber' => '10',
                                      'address' => 'rue secret',
                                      'zipcode' => '01630',
diff --git a/tests/application/modules/opac/controllers/RechercheControllerReservationTest.php b/tests/application/modules/opac/controllers/RechercheControllerReservationTest.php
index 35d11009686023ab40ec69e30a74cddd6a6f4104..a30d24dc17324037de2b805c39fb64c56fe3065d 100644
--- a/tests/application/modules/opac/controllers/RechercheControllerReservationTest.php
+++ b/tests/application/modules/opac/controllers/RechercheControllerReservationTest.php
@@ -800,7 +800,8 @@ abstract class RechercheControllerReservationPickupAjaxWithNanookPickupLocations
       ->whenCalled('pickupLocationsFor')
       ->answers(['36' => 'Annecy',
                  '37' => 'Cran',
-                 '45' => 'Istres']);
+                 '45' => 'Istres',
+                 '99' => 'Lunel <strong>(Disponible)</strong>']);
 
     Class_WebService_SIGB_Nanook::setService(['url_serveur' => 'http://bib.valensol.net',
                                               'id_bib' => 12,
@@ -899,6 +900,30 @@ class RechercheControllerReservationPickupAjaxNanookPickupLocationsPrecheckFirst
 }
 
 
+class RechercheControllerReservationPickupAjaxNanookPickupLocationsStrongInLabel
+  extends RechercheControllerReservationPickupAjaxWithNanookPickupLocationsTestCase {
+
+  public function setUp() {
+    parent::setUp();
+
+    $this->nanook->whenCalled('getUserAnnexe')->answers('66');
+
+    $this->dispatch('recherche/reservation-pickup-ajax?id_bib=2&id_origine=12&code_annexe=99&copy_id=12', true);
+
+    $this->_json = json_decode($this->_response->getBody());
+  }
+
+
+  /**
+      @see https://forge.afi-sa.net/issues/94332
+      @test
+  */
+  public function LunelShouldContainStrong() {
+    $this->_xpath
+      ->assertXPath($this->_json->content, '//strong',$this->_json->content);
+  }
+}
+
 
 class RechercheControllerReservationPickupAjaxAndNotifyByMailEnabledTest
   extends RechercheControllerReservationWithPickupChoiceTestCase {
diff --git a/tests/application/modules/opac/controllers/RechercheControllerViewnoticeTest.php b/tests/application/modules/opac/controllers/RechercheControllerViewnoticeTest.php
index 0a598c72ce3564dab18abae097bab97b44a1a37e..98cb57fdc73f45be9c7875761c828633c8f6232b 100644
--- a/tests/application/modules/opac/controllers/RechercheControllerViewnoticeTest.php
+++ b/tests/application/modules/opac/controllers/RechercheControllerViewnoticeTest.php
@@ -100,6 +100,7 @@ class RechercheControllerViewnoticeWithInspectorGadgetTest extends AbstractContr
 
 
 
+
 class RechercheControllerSearchResultWithInspectorGadgetTest extends AbstractControllerTestCase {
   protected $_storm_default_to_volatile = true;
 
@@ -120,4 +121,65 @@ class RechercheControllerSearchResultWithInspectorGadgetTest extends AbstractCon
   public function boiteResultatRechercheShouldContainElements() {
     $this->assertXPath('//div[@class="contenu"]/div[@class="resultats_page"]');
   }
+}
+
+
+
+/** @see http://forge.afi-sa.fr/issues/93542 */
+class RechercheControllerViewnoticeVignetteFromUnimarcTest
+  extends AbstractControllerTestCase {
+
+  protected $_storm_default_to_volatile = true;
+
+  /** @test */
+  public function thumbnailShouldBeFromEpicpicsDotOrg() {
+    Zend_Registry::set('sql',
+                       $this->mock()
+                       ->whenCalled('fetchOne')->answers(null)
+                       ->whenCalled('fetchAll')->answers([])
+                       ->whenCalled('execute')->answers(null));
+
+    // portal with defaults for typedoc 3
+    $defaults = Class_Systeme_ModulesAppli::newFor('recherche', 'viewnotice', '')
+      ->getDefaultPreferences();
+    Class_Profil::getPortail()
+      ->setCfgModulesPreferences($defaults, 'recherche', 'viewnotice', '3');
+
+    // profile view thumbnail fields for typedoc 3
+    $this->fixture('Class_Profil',
+                   ['id' => '23',
+                    'cfg_modules' => file_get_contents(__DIR__.'/profile_23_cfg_module.txt')]);
+
+    $this->fixture('Class_Notice',
+                   ['id' => 120893,
+                    'type_doc' => 3,
+                    'alpha_titre' => 'SHE',
+                    'alpha_auteur' => 'MUTHONI DRUMMER QUEEN',
+                    'titres' => 'SHE  MILLION MILION VOICE VOIS KENYAN KENIAN MESSAGE MESAJ SUZIE SUZI NOMA LOVER LOV DEAR MATHILDE MATILD CAGED KAJ BIRD BIR MORE MOR CRIMINAL KRIMINAL SQUAD SKA TIME TIM BOMB BONB ELEVATE ELEVAT MAKE MAK RIGHT RI',
+                    'auteurs' => 'MUTHONI MUTONI DRUMMER DRUM QUEEN KAN',
+                    'editeur' => 'PIAS',
+                    'collection' => '',
+                    'matieres' => 'MUSIQUE MUSIK KENYANE KENIAN',
+                    'dewey' => '',
+                    'facettes' => 'A109804 M31689 T3 B1 S3 E1 Y1 V1',
+                    'cote' => '13 MUT 2',
+                    'id_commerciale' => 'YOTANKAYO78CDSHE',
+                    'clef_alpha' => 'SHE--MUTHONIDRUMMERQUEEN--PIAS-2019-3',
+                    'clef_oeuvre' => 'SHE--MUTHONIDRUMMERQUEEN-',
+                    'clef_chapeau' => '',
+                    'annee' => '2019',
+                    'qualite' => 5,
+                    'exportable' => 1,
+                    'date_creation' => '0000-00-00 00:00:00',
+                    'date_maj' => '2019-07-21 16:24:53',
+                    'unimarc' => '00690njm0 2200193   450 001001500000005001900015071002000034100004100054126002000095200003100115210001500146215001900161327014400180345003600324606002000360700002600380801002200406856006800428frOr130110180920190425114743.586  aYO78CDbYotanka  a20190416d2019    m  y0frea0103    ba  aagbxhx       cd  aShefMuthoni Drummer Queen  cPIASd2019  a1 CDe1 livret  aMillion voiceaKenyan messageaSuzie nomaaLoveraDear MathildeaCaged birdaNo moreaCriminalaSquad upaTime bombaElevateaMake it right  aCVSb5051083143967cCDd14,50 E2 aMusique kenyane  aMuthoni Drummer Queen  aFRbCVSc20190416  uhttps://www.cvs-mediatheques.com/home/notices/0/266/1094266.jpg',
+                    'url_vignette' => Class_WebService_Vignette::NO_DATA,
+                    'url_image' => Class_WebService_Vignette::NO_DATA,
+                   ]);
+
+    $this->dispatch('/recherche/viewnotice/titre/nouveaut%C3%A9s/style_liste/mycarousel_horizontal/nb_notices/20/only_img/1/aleatoire/1/tri/date_creation+desc/nb_analyse/50/op_hauteur_img/150/op_transition//op_largeur_img/120/op_hauteur_boite/0/op_captions/0/op_autoplay/0/op_visible/0/op_speed/100/op_auto/0/op_scroll/1/rss_avis/0/id_catalogue/4/id_panier//profil_redirect/23/boite/boite_nouveautes/id_module/1-6/type_module/KIOSQUE/division/2/profile_id/1/styles_reload/0/id_profil/23/page/5/clef/SHE--MUTHONIDRUMMERQUEEN--PIAS-2019-3/id/120893');
+
+    $this->assertXPath('//img[@src="https://www.cvs-mediatheques.com/home/notices/0/266/1094266.jpg"]',
+                       $this->_response->getBody());
+  }
 }
\ No newline at end of file
diff --git a/tests/application/modules/opac/controllers/profile_23_cfg_module.txt b/tests/application/modules/opac/controllers/profile_23_cfg_module.txt
new file mode 100644
index 0000000000000000000000000000000000000000..310b250524df76baa8859f93176d6a1c02375e0d
--- /dev/null
+++ b/tests/application/modules/opac/controllers/profile_23_cfg_module.txt
@@ -0,0 +1 @@
+a:1:{s:9:"recherche";a:18:{s:14:"resultatsimple";a:31:{s:9:"barre_nav";s:9:"Résultat";s:5:"titre";s:0:"";s:20:"search_term_editable";s:1:"1";s:17:"liste_nb_par_page";s:2:"10";s:12:"liste_format";s:1:"3";s:11:"liste_codes";s:6:"W;N;R;";s:14:"facettes_actif";s:1:"1";s:14:"multi_facettes";s:1:"1";s:14:"facettes_codes";s:9:"S;G;F;A;M";s:15:"facettes_nombre";s:1:"6";s:16:"facettes_message";s:23:"Affiner le résultat...";s:16:"suggests_enabled";s:1:"1";s:15:"suggests_number";s:1:"3";s:17:"bookmarks_enabled";s:1:"1";s:10:"tags_actif";s:1:"1";s:10:"tags_codes";s:5:"A;M;F";s:11:"tags_nombre";s:2:"30";s:11:"tags_calcul";s:1:"0";s:13:"tags_position";s:1:"2";s:12:"tags_message";s:23:"Elargir la recherche...";s:20:"cvs_display_position";s:1:"3";s:18:"cvs_resultat_titre";s:22:"Ressources numériques";s:20:"cvs_autres_resultats";s:9:"Documents";s:12:"cvs_msg_deco";s:25:"Vous devez etre connecté";s:13:"cvs_nb_result";s:1:"5";s:13:"cvs_msg_droit";s:59:"Merci de contacter la médiathèque pour obtenir un accès.";s:16:"suggestion_achat";s:1:"1";s:11:"zones_titre";s:17:"200$e;200$h;200$i";s:18:"header_composition";s:0:"";s:5:"boite";s:0:"";s:4:"xslt";s:0:"";}s:11:"viewnotice5";a:6:{s:7:"onglets";a:16:{s:6:"detail";a:4:{s:3:"aff";s:1:"2";s:5:"ordre";s:1:"1";s:5:"titre";s:23:"Description du document";s:7:"largeur";s:1:"0";}s:4:"avis";a:4:{s:3:"aff";s:1:"1";s:5:"ordre";s:1:"3";s:5:"titre";s:9:"Critiques";s:7:"largeur";s:1:"0";}s:11:"exemplaires";a:4:{s:3:"aff";s:1:"1";s:5:"ordre";s:1:"2";s:5:"titre";s:11:"Exemplaires";s:7:"largeur";s:1:"0";}s:6:"resume";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"4";s:5:"titre";s:9:"Résumés";s:7:"largeur";s:1:"0";}s:4:"tags";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"5";s:5:"titre";s:26:"Rebondir dans le catalogue";s:7:"largeur";s:1:"0";}s:10:"biographie";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"6";s:5:"titre";s:22:"Biographie de l'auteur";s:7:"largeur";s:1:"0";}s:6:"series";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"7";s:5:"titre";s:28:"Documents de la même série";s:7:"largeur";s:1:"0";}s:10:"similaires";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"1";s:5:"titre";s:20:"Documents similaires";s:7:"largeur";s:1:"0";}s:13:"bibliographie";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"9";s:5:"titre";s:12:"Discographie";s:7:"largeur";s:1:"0";}s:8:"morceaux";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"10";s:5:"titre";s:8:"Morceaux";s:7:"largeur";s:1:"0";}s:12:"bandeAnnonce";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"11";s:5:"titre";s:13:"Bande-annonce";s:7:"largeur";s:1:"0";}s:6:"photos";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"12";s:5:"titre";s:6:"Photos";s:7:"largeur";s:1:"0";}s:6:"videos";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:2:"13";s:5:"titre";s:15:"Archives vidéo";s:7:"largeur";s:1:"0";}s:13:"resnumeriques";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"14";s:5:"titre";s:22:"Ressources numériques";s:7:"largeur";s:1:"0";}s:11:"babeltheque";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"15";s:5:"titre";s:12:"Babelthèque";s:7:"largeur";s:1:"0";}s:4:"frbr";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"16";s:5:"titre";s:14:"Notices liées";s:7:"largeur";s:1:"0";}}s:6:"entete";s:13:"J;A;W;N;F;G;M";s:9:"analytics";s:0:"";s:15:"analytics_title";s:0:"";s:17:"analytics_authors";s:0:"";s:5:"boite";s:0:"";}s:11:"viewnotice1";a:7:{s:6:"entete";s:5:"W;N;G";s:7:"onglets";a:16:{s:6:"detail";a:4:{s:3:"aff";s:1:"2";s:5:"ordre";s:1:"2";s:5:"titre";s:14:"en savoir plus";s:7:"largeur";s:1:"0";}s:4:"avis";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:2:"17";s:5:"titre";s:9:"Critiques";s:7:"largeur";s:1:"0";}s:11:"exemplaires";a:4:{s:3:"aff";s:1:"1";s:5:"ordre";s:1:"1";s:5:"titre";s:11:"Exemplaires";s:7:"largeur";s:1:"0";}s:6:"resume";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"4";s:5:"titre";s:9:"Résumés";s:7:"largeur";s:1:"0";}s:4:"tags";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"5";s:5:"titre";s:26:"Rebondir dans le catalogue";s:7:"largeur";s:1:"0";}s:10:"biographie";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"6";s:5:"titre";s:22:"Biographie de l'auteur";s:7:"largeur";s:1:"0";}s:6:"series";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"7";s:5:"titre";s:28:"Documents de la même série";s:7:"largeur";s:1:"0";}s:10:"similaires";a:4:{s:3:"aff";s:1:"2";s:5:"ordre";s:2:"20";s:5:"titre";s:20:"Documents similaires";s:7:"largeur";s:1:"0";}s:13:"bibliographie";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"9";s:5:"titre";s:12:"Discographie";s:7:"largeur";s:1:"0";}s:8:"morceaux";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"10";s:5:"titre";s:8:"Morceaux";s:7:"largeur";s:1:"0";}s:12:"bandeAnnonce";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"11";s:5:"titre";s:13:"Bande-annonce";s:7:"largeur";s:1:"0";}s:6:"photos";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"12";s:5:"titre";s:6:"Photos";s:7:"largeur";s:1:"0";}s:6:"videos";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:2:"13";s:5:"titre";s:15:"Archives vidéo";s:7:"largeur";s:1:"0";}s:13:"resnumeriques";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"14";s:5:"titre";s:22:"Ressources numériques";s:7:"largeur";s:1:"0";}s:11:"babeltheque";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"15";s:5:"titre";s:12:"Babelthèque";s:7:"largeur";s:1:"0";}s:4:"frbr";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"16";s:5:"titre";s:14:"Notices liées";s:7:"largeur";s:1:"0";}}s:4:"xslt";s:0:"";s:9:"analytics";s:0:"";s:15:"analytics_title";s:0:"";s:17:"analytics_authors";s:0:"";s:5:"boite";s:0:"";}s:11:"viewnotice3";a:10:{s:9:"barre_nav";s:6:"Notice";s:5:"boite";s:0:"";s:6:"entete";s:5:"W;N;G";s:9:"analytics";s:0:"";s:15:"analytics_title";s:0:"";s:17:"analytics_authors";s:0:"";s:11:"links_zones";s:0:"";s:16:"thumbnail_fields";s:5:"856-u";s:7:"onglets";a:17:{s:6:"detail";a:4:{s:3:"aff";s:1:"2";s:5:"ordre";s:1:"2";s:5:"titre";s:14:"en savoir plus";s:7:"largeur";s:1:"0";}s:4:"avis";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:2:"17";s:5:"titre";s:9:"Critiques";s:7:"largeur";s:1:"0";}s:11:"exemplaires";a:4:{s:3:"aff";s:1:"1";s:5:"ordre";s:1:"1";s:5:"titre";s:11:"Exemplaires";s:7:"largeur";s:1:"0";}s:6:"resume";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"4";s:5:"titre";s:9:"Résumés";s:7:"largeur";s:1:"0";}s:4:"tags";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"5";s:5:"titre";s:26:"Rebondir dans le catalogue";s:7:"largeur";s:1:"0";}s:10:"biographie";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"6";s:5:"titre";s:22:"Biographie de l'auteur";s:7:"largeur";s:1:"0";}s:6:"series";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"7";s:5:"titre";s:28:"Documents de la même série";s:7:"largeur";s:1:"0";}s:10:"similaires";a:4:{s:3:"aff";s:1:"2";s:5:"ordre";s:2:"20";s:5:"titre";s:20:"Documents similaires";s:7:"largeur";s:1:"0";}s:13:"bibliographie";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"9";s:5:"titre";s:12:"Discographie";s:7:"largeur";s:1:"0";}s:8:"morceaux";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"10";s:5:"titre";s:8:"Morceaux";s:7:"largeur";s:1:"0";}s:12:"bandeAnnonce";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"11";s:5:"titre";s:13:"Bande-annonce";s:7:"largeur";s:1:"0";}s:6:"photos";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"12";s:5:"titre";s:6:"Photos";s:7:"largeur";s:1:"0";}s:6:"videos";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:2:"13";s:5:"titre";s:15:"Archives vidéo";s:7:"largeur";s:1:"0";}s:13:"resnumeriques";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"14";s:5:"titre";s:22:"Ressources numériques";s:7:"largeur";s:1:"0";}s:11:"babeltheque";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"15";s:5:"titre";s:12:"Babelthèque";s:7:"largeur";s:1:"0";}s:4:"frbr";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"16";s:5:"titre";s:14:"Notices liées";s:7:"largeur";s:1:"0";}s:8:"recounts";a:4:{s:3:"aff";s:1:"2";s:5:"ordre";s:2:"17";s:5:"titre";s:8:"Contient";s:7:"largeur";s:1:"0";}}s:4:"xslt";s:0:"";}s:11:"viewnotice2";a:10:{s:9:"barre_nav";s:6:"Notice";s:6:"entete";s:5:"W;N;G";s:9:"analytics";s:0:"";s:15:"analytics_title";s:0:"";s:17:"analytics_authors";s:0:"";s:11:"links_zones";s:0:"";s:16:"thumbnail_fields";s:0:"";s:7:"onglets";a:16:{s:6:"detail";a:4:{s:3:"aff";s:1:"2";s:5:"ordre";s:1:"2";s:5:"titre";s:14:"en savoir plus";s:7:"largeur";s:1:"0";}s:4:"avis";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:2:"17";s:5:"titre";s:9:"Critiques";s:7:"largeur";s:1:"0";}s:11:"exemplaires";a:4:{s:3:"aff";s:1:"1";s:5:"ordre";s:1:"1";s:5:"titre";s:11:"Exemplaires";s:7:"largeur";s:1:"0";}s:6:"resume";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"4";s:5:"titre";s:9:"Résumés";s:7:"largeur";s:1:"0";}s:4:"tags";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"5";s:5:"titre";s:26:"Rebondir dans le catalogue";s:7:"largeur";s:1:"0";}s:10:"biographie";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"6";s:5:"titre";s:22:"Biographie de l'auteur";s:7:"largeur";s:1:"0";}s:6:"series";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"7";s:5:"titre";s:28:"Documents de la même série";s:7:"largeur";s:1:"0";}s:10:"similaires";a:4:{s:3:"aff";s:1:"2";s:5:"ordre";s:2:"20";s:5:"titre";s:20:"Documents similaires";s:7:"largeur";s:1:"0";}s:13:"bibliographie";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"9";s:5:"titre";s:12:"Discographie";s:7:"largeur";s:1:"0";}s:8:"morceaux";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"10";s:5:"titre";s:8:"Morceaux";s:7:"largeur";s:1:"0";}s:12:"bandeAnnonce";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"11";s:5:"titre";s:13:"Bande-annonce";s:7:"largeur";s:1:"0";}s:6:"photos";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"12";s:5:"titre";s:6:"Photos";s:7:"largeur";s:1:"0";}s:6:"videos";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:2:"13";s:5:"titre";s:15:"Archives vidéo";s:7:"largeur";s:1:"0";}s:13:"resnumeriques";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"14";s:5:"titre";s:22:"Ressources numériques";s:7:"largeur";s:1:"0";}s:11:"babeltheque";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"15";s:5:"titre";s:12:"Babelthèque";s:7:"largeur";s:1:"0";}s:4:"frbr";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"16";s:5:"titre";s:14:"Notices liées";s:7:"largeur";s:1:"0";}}s:5:"boite";s:0:"";s:4:"xslt";s:0:"";}s:11:"viewnotice4";a:8:{s:6:"entete";s:5:"W;N;G";s:7:"onglets";a:17:{s:6:"detail";a:4:{s:3:"aff";s:1:"2";s:5:"ordre";s:1:"2";s:5:"titre";s:14:"en savoir plus";s:7:"largeur";s:1:"0";}s:4:"avis";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:2:"17";s:5:"titre";s:9:"Critiques";s:7:"largeur";s:1:"0";}s:11:"exemplaires";a:4:{s:3:"aff";s:1:"1";s:5:"ordre";s:1:"1";s:5:"titre";s:11:"Exemplaires";s:7:"largeur";s:1:"0";}s:6:"resume";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"4";s:5:"titre";s:9:"Résumés";s:7:"largeur";s:1:"0";}s:4:"tags";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"5";s:5:"titre";s:26:"Rebondir dans le catalogue";s:7:"largeur";s:1:"0";}s:10:"biographie";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"6";s:5:"titre";s:22:"Biographie de l'auteur";s:7:"largeur";s:1:"0";}s:6:"series";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"7";s:5:"titre";s:28:"Documents de la même série";s:7:"largeur";s:1:"0";}s:10:"similaires";a:4:{s:3:"aff";s:1:"2";s:5:"ordre";s:2:"20";s:5:"titre";s:20:"Documents similaires";s:7:"largeur";s:1:"0";}s:13:"bibliographie";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"9";s:5:"titre";s:12:"Discographie";s:7:"largeur";s:1:"0";}s:8:"morceaux";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"10";s:5:"titre";s:8:"Morceaux";s:7:"largeur";s:1:"0";}s:12:"bandeAnnonce";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"11";s:5:"titre";s:13:"Bande-annonce";s:7:"largeur";s:1:"0";}s:6:"photos";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"12";s:5:"titre";s:6:"Photos";s:7:"largeur";s:1:"0";}s:6:"videos";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:2:"13";s:5:"titre";s:15:"Archives vidéo";s:7:"largeur";s:1:"0";}s:13:"resnumeriques";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"14";s:5:"titre";s:22:"Ressources numériques";s:7:"largeur";s:1:"0";}s:11:"babeltheque";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"15";s:5:"titre";s:12:"Babelthèque";s:7:"largeur";s:1:"0";}s:4:"frbr";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"16";s:5:"titre";s:14:"Notices liées";s:7:"largeur";s:1:"0";}s:8:"recounts";a:4:{s:3:"aff";s:1:"2";s:5:"ordre";s:2:"17";s:5:"titre";s:8:"Contient";s:7:"largeur";s:1:"0";}}s:4:"xslt";s:0:"";s:9:"analytics";s:0:"";s:15:"analytics_title";s:0:"";s:17:"analytics_authors";s:0:"";s:5:"boite";s:0:"";s:16:"thumbnail_fields";s:5:"856-u";}s:13:"viewnotice112";a:7:{s:6:"entete";s:5:"W;C;N";s:7:"onglets";a:17:{s:6:"detail";a:4:{s:3:"aff";s:1:"2";s:5:"ordre";s:1:"1";s:5:"titre";s:23:"Description du document";s:7:"largeur";s:1:"0";}s:4:"avis";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"2";s:5:"titre";s:9:"Critiques";s:7:"largeur";s:1:"0";}s:11:"exemplaires";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"3";s:5:"titre";s:11:"Exemplaires";s:7:"largeur";s:1:"0";}s:6:"resume";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"4";s:5:"titre";s:9:"Résumés";s:7:"largeur";s:1:"0";}s:4:"tags";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"5";s:5:"titre";s:26:"Rebondir dans le catalogue";s:7:"largeur";s:1:"0";}s:10:"biographie";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"6";s:5:"titre";s:22:"Biographie de l'auteur";s:7:"largeur";s:1:"0";}s:6:"series";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"7";s:5:"titre";s:28:"Documents de la même série";s:7:"largeur";s:1:"0";}s:10:"similaires";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"8";s:5:"titre";s:20:"Documents similaires";s:7:"largeur";s:1:"0";}s:13:"bibliographie";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"9";s:5:"titre";s:12:"Discographie";s:7:"largeur";s:1:"0";}s:8:"morceaux";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"10";s:5:"titre";s:8:"Morceaux";s:7:"largeur";s:1:"0";}s:12:"bandeAnnonce";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"11";s:5:"titre";s:13:"Bande-annonce";s:7:"largeur";s:1:"0";}s:6:"photos";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"12";s:5:"titre";s:6:"Photos";s:7:"largeur";s:1:"0";}s:6:"videos";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"13";s:5:"titre";s:15:"Archives vidéo";s:7:"largeur";s:1:"0";}s:13:"resnumeriques";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"1";s:5:"titre";s:22:"Ressources numériques";s:7:"largeur";s:1:"0";}s:11:"babeltheque";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"15";s:5:"titre";s:12:"Babelthèque";s:7:"largeur";s:1:"0";}s:4:"frbr";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"16";s:5:"titre";s:14:"Notices liées";s:7:"largeur";s:1:"0";}s:8:"recounts";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"17";s:5:"titre";s:8:"Contient";s:7:"largeur";s:1:"0";}}s:4:"xslt";s:0:"";s:9:"analytics";s:0:"";s:15:"analytics_title";s:0:"";s:17:"analytics_authors";s:0:"";s:5:"boite";s:0:"";}s:13:"viewnotice119";a:8:{s:6:"entete";s:5:"W;C;N";s:7:"onglets";a:17:{s:6:"detail";a:4:{s:3:"aff";s:1:"2";s:5:"ordre";s:1:"1";s:5:"titre";s:23:"Description du document";s:7:"largeur";s:1:"0";}s:4:"avis";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"2";s:5:"titre";s:9:"Critiques";s:7:"largeur";s:1:"0";}s:11:"exemplaires";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"3";s:5:"titre";s:11:"Exemplaires";s:7:"largeur";s:1:"0";}s:6:"resume";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"4";s:5:"titre";s:9:"Résumés";s:7:"largeur";s:1:"0";}s:4:"tags";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"5";s:5:"titre";s:26:"Rebondir dans le catalogue";s:7:"largeur";s:1:"0";}s:10:"biographie";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"6";s:5:"titre";s:22:"Biographie de l'auteur";s:7:"largeur";s:1:"0";}s:6:"series";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"7";s:5:"titre";s:28:"Documents de la même série";s:7:"largeur";s:1:"0";}s:10:"similaires";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"8";s:5:"titre";s:20:"Documents similaires";s:7:"largeur";s:1:"0";}s:13:"bibliographie";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"9";s:5:"titre";s:12:"Discographie";s:7:"largeur";s:1:"0";}s:8:"morceaux";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"10";s:5:"titre";s:8:"Morceaux";s:7:"largeur";s:1:"0";}s:12:"bandeAnnonce";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"11";s:5:"titre";s:13:"Bande-annonce";s:7:"largeur";s:1:"0";}s:6:"photos";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"12";s:5:"titre";s:6:"Photos";s:7:"largeur";s:1:"0";}s:6:"videos";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"13";s:5:"titre";s:15:"Archives vidéo";s:7:"largeur";s:1:"0";}s:13:"resnumeriques";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"1";s:5:"titre";s:22:"Ressources numériques";s:7:"largeur";s:1:"0";}s:11:"babeltheque";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"15";s:5:"titre";s:12:"Babelthèque";s:7:"largeur";s:1:"0";}s:4:"frbr";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"16";s:5:"titre";s:14:"Notices liées";s:7:"largeur";s:1:"0";}s:8:"recounts";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"17";s:5:"titre";s:8:"Contient";s:7:"largeur";s:1:"0";}}s:4:"xslt";s:0:"";s:9:"analytics";s:0:"";s:15:"analytics_title";s:0:"";s:17:"analytics_authors";s:0:"";s:5:"boite";s:0:"";s:16:"thumbnail_fields";s:5:"959-u";}s:11:"viewnotice7";a:10:{s:9:"barre_nav";s:6:"Notice";s:6:"entete";s:5:"W;N;G";s:9:"analytics";s:0:"";s:15:"analytics_title";s:0:"";s:17:"analytics_authors";s:0:"";s:11:"links_zones";s:0:"";s:16:"thumbnail_fields";s:0:"";s:7:"onglets";a:16:{s:6:"detail";a:4:{s:3:"aff";s:1:"2";s:5:"ordre";s:1:"2";s:5:"titre";s:14:"en savoir plus";s:7:"largeur";s:1:"0";}s:4:"avis";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:2:"17";s:5:"titre";s:9:"Critiques";s:7:"largeur";s:1:"0";}s:11:"exemplaires";a:4:{s:3:"aff";s:1:"1";s:5:"ordre";s:1:"1";s:5:"titre";s:11:"Exemplaires";s:7:"largeur";s:1:"0";}s:6:"resume";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"4";s:5:"titre";s:9:"Résumés";s:7:"largeur";s:1:"0";}s:4:"tags";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"5";s:5:"titre";s:26:"Rebondir dans le catalogue";s:7:"largeur";s:1:"0";}s:10:"biographie";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"6";s:5:"titre";s:22:"Biographie de l'auteur";s:7:"largeur";s:1:"0";}s:6:"series";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"7";s:5:"titre";s:28:"Documents de la même série";s:7:"largeur";s:1:"0";}s:10:"similaires";a:4:{s:3:"aff";s:1:"2";s:5:"ordre";s:2:"20";s:5:"titre";s:20:"Documents similaires";s:7:"largeur";s:1:"0";}s:13:"bibliographie";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"9";s:5:"titre";s:12:"Discographie";s:7:"largeur";s:1:"0";}s:8:"morceaux";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"10";s:5:"titre";s:8:"Morceaux";s:7:"largeur";s:1:"0";}s:12:"bandeAnnonce";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"11";s:5:"titre";s:13:"Bande-annonce";s:7:"largeur";s:1:"0";}s:6:"photos";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"12";s:5:"titre";s:6:"Photos";s:7:"largeur";s:1:"0";}s:6:"videos";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:2:"13";s:5:"titre";s:15:"Archives vidéo";s:7:"largeur";s:1:"0";}s:13:"resnumeriques";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"14";s:5:"titre";s:22:"Ressources numériques";s:7:"largeur";s:1:"0";}s:11:"babeltheque";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"15";s:5:"titre";s:12:"Babelthèque";s:7:"largeur";s:1:"0";}s:4:"frbr";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"16";s:5:"titre";s:14:"Notices liées";s:7:"largeur";s:1:"0";}}s:5:"boite";s:0:"";s:4:"xslt";s:0:"";}s:12:"viewnotice12";a:10:{s:9:"barre_nav";s:6:"Notice";s:6:"entete";s:5:"W;N;G";s:9:"analytics";s:0:"";s:15:"analytics_title";s:0:"";s:17:"analytics_authors";s:0:"";s:11:"links_zones";s:0:"";s:16:"thumbnail_fields";s:0:"";s:7:"onglets";a:16:{s:6:"detail";a:4:{s:3:"aff";s:1:"2";s:5:"ordre";s:1:"2";s:5:"titre";s:14:"en savoir plus";s:7:"largeur";s:1:"0";}s:4:"avis";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:2:"17";s:5:"titre";s:9:"Critiques";s:7:"largeur";s:1:"0";}s:11:"exemplaires";a:4:{s:3:"aff";s:1:"1";s:5:"ordre";s:1:"1";s:5:"titre";s:11:"Exemplaires";s:7:"largeur";s:1:"0";}s:6:"resume";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"4";s:5:"titre";s:9:"Résumés";s:7:"largeur";s:1:"0";}s:4:"tags";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"5";s:5:"titre";s:26:"Rebondir dans le catalogue";s:7:"largeur";s:1:"0";}s:10:"biographie";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"6";s:5:"titre";s:22:"Biographie de l'auteur";s:7:"largeur";s:1:"0";}s:6:"series";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"7";s:5:"titre";s:28:"Documents de la même série";s:7:"largeur";s:1:"0";}s:10:"similaires";a:4:{s:3:"aff";s:1:"2";s:5:"ordre";s:2:"20";s:5:"titre";s:20:"Documents similaires";s:7:"largeur";s:1:"0";}s:13:"bibliographie";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"9";s:5:"titre";s:12:"Discographie";s:7:"largeur";s:1:"0";}s:8:"morceaux";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"10";s:5:"titre";s:8:"Morceaux";s:7:"largeur";s:1:"0";}s:12:"bandeAnnonce";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"11";s:5:"titre";s:13:"Bande-annonce";s:7:"largeur";s:1:"0";}s:6:"photos";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"12";s:5:"titre";s:6:"Photos";s:7:"largeur";s:1:"0";}s:6:"videos";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:2:"13";s:5:"titre";s:15:"Archives vidéo";s:7:"largeur";s:1:"0";}s:13:"resnumeriques";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"14";s:5:"titre";s:22:"Ressources numériques";s:7:"largeur";s:1:"0";}s:11:"babeltheque";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"15";s:5:"titre";s:12:"Babelthèque";s:7:"largeur";s:1:"0";}s:4:"frbr";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"16";s:5:"titre";s:14:"Notices liées";s:7:"largeur";s:1:"0";}}s:5:"boite";s:0:"";s:4:"xslt";s:0:"";}s:12:"viewnotice14";a:10:{s:9:"barre_nav";s:6:"Notice";s:6:"entete";s:5:"W;N;G";s:9:"analytics";s:0:"";s:15:"analytics_title";s:0:"";s:17:"analytics_authors";s:0:"";s:11:"links_zones";s:0:"";s:16:"thumbnail_fields";s:0:"";s:7:"onglets";a:16:{s:6:"detail";a:4:{s:3:"aff";s:1:"2";s:5:"ordre";s:1:"2";s:5:"titre";s:14:"en savoir plus";s:7:"largeur";s:1:"0";}s:4:"avis";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:2:"17";s:5:"titre";s:9:"Critiques";s:7:"largeur";s:1:"0";}s:11:"exemplaires";a:4:{s:3:"aff";s:1:"1";s:5:"ordre";s:1:"1";s:5:"titre";s:11:"Exemplaires";s:7:"largeur";s:1:"0";}s:6:"resume";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"4";s:5:"titre";s:9:"Résumés";s:7:"largeur";s:1:"0";}s:4:"tags";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"5";s:5:"titre";s:26:"Rebondir dans le catalogue";s:7:"largeur";s:1:"0";}s:10:"biographie";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"6";s:5:"titre";s:22:"Biographie de l'auteur";s:7:"largeur";s:1:"0";}s:6:"series";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"7";s:5:"titre";s:28:"Documents de la même série";s:7:"largeur";s:1:"0";}s:10:"similaires";a:4:{s:3:"aff";s:1:"2";s:5:"ordre";s:2:"20";s:5:"titre";s:20:"Documents similaires";s:7:"largeur";s:1:"0";}s:13:"bibliographie";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"9";s:5:"titre";s:12:"Discographie";s:7:"largeur";s:1:"0";}s:8:"morceaux";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"10";s:5:"titre";s:8:"Morceaux";s:7:"largeur";s:1:"0";}s:12:"bandeAnnonce";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"11";s:5:"titre";s:13:"Bande-annonce";s:7:"largeur";s:1:"0";}s:6:"photos";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"12";s:5:"titre";s:6:"Photos";s:7:"largeur";s:1:"0";}s:6:"videos";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:2:"13";s:5:"titre";s:15:"Archives vidéo";s:7:"largeur";s:1:"0";}s:13:"resnumeriques";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"14";s:5:"titre";s:22:"Ressources numériques";s:7:"largeur";s:1:"0";}s:11:"babeltheque";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"15";s:5:"titre";s:12:"Babelthèque";s:7:"largeur";s:1:"0";}s:4:"frbr";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"16";s:5:"titre";s:14:"Notices liées";s:7:"largeur";s:1:"0";}}s:5:"boite";s:0:"";s:4:"xslt";s:0:"";}s:12:"viewnotice17";a:10:{s:9:"barre_nav";s:6:"Notice";s:6:"entete";s:5:"W;N;G";s:9:"analytics";s:0:"";s:15:"analytics_title";s:0:"";s:17:"analytics_authors";s:0:"";s:11:"links_zones";s:0:"";s:16:"thumbnail_fields";s:0:"";s:7:"onglets";a:16:{s:6:"detail";a:4:{s:3:"aff";s:1:"2";s:5:"ordre";s:1:"2";s:5:"titre";s:14:"en savoir plus";s:7:"largeur";s:1:"0";}s:4:"avis";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:2:"17";s:5:"titre";s:9:"Critiques";s:7:"largeur";s:1:"0";}s:11:"exemplaires";a:4:{s:3:"aff";s:1:"1";s:5:"ordre";s:1:"1";s:5:"titre";s:11:"Exemplaires";s:7:"largeur";s:1:"0";}s:6:"resume";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"4";s:5:"titre";s:9:"Résumés";s:7:"largeur";s:1:"0";}s:4:"tags";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"5";s:5:"titre";s:26:"Rebondir dans le catalogue";s:7:"largeur";s:1:"0";}s:10:"biographie";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"6";s:5:"titre";s:22:"Biographie de l'auteur";s:7:"largeur";s:1:"0";}s:6:"series";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"7";s:5:"titre";s:28:"Documents de la même série";s:7:"largeur";s:1:"0";}s:10:"similaires";a:4:{s:3:"aff";s:1:"2";s:5:"ordre";s:2:"20";s:5:"titre";s:20:"Documents similaires";s:7:"largeur";s:1:"0";}s:13:"bibliographie";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"9";s:5:"titre";s:12:"Discographie";s:7:"largeur";s:1:"0";}s:8:"morceaux";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"10";s:5:"titre";s:8:"Morceaux";s:7:"largeur";s:1:"0";}s:12:"bandeAnnonce";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"11";s:5:"titre";s:13:"Bande-annonce";s:7:"largeur";s:1:"0";}s:6:"photos";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"12";s:5:"titre";s:6:"Photos";s:7:"largeur";s:1:"0";}s:6:"videos";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:2:"13";s:5:"titre";s:15:"Archives vidéo";s:7:"largeur";s:1:"0";}s:13:"resnumeriques";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"14";s:5:"titre";s:22:"Ressources numériques";s:7:"largeur";s:1:"0";}s:11:"babeltheque";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"15";s:5:"titre";s:12:"Babelthèque";s:7:"largeur";s:1:"0";}s:4:"frbr";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"16";s:5:"titre";s:14:"Notices liées";s:7:"largeur";s:1:"0";}}s:5:"boite";s:0:"";s:4:"xslt";s:0:"";}s:12:"viewnotice11";a:10:{s:9:"barre_nav";s:6:"Notice";s:6:"entete";s:5:"W;N;G";s:9:"analytics";s:0:"";s:15:"analytics_title";s:0:"";s:17:"analytics_authors";s:0:"";s:11:"links_zones";s:0:"";s:16:"thumbnail_fields";s:0:"";s:7:"onglets";a:16:{s:6:"detail";a:4:{s:3:"aff";s:1:"2";s:5:"ordre";s:1:"2";s:5:"titre";s:14:"en savoir plus";s:7:"largeur";s:1:"0";}s:4:"avis";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:2:"17";s:5:"titre";s:9:"Critiques";s:7:"largeur";s:1:"0";}s:11:"exemplaires";a:4:{s:3:"aff";s:1:"1";s:5:"ordre";s:1:"1";s:5:"titre";s:11:"Exemplaires";s:7:"largeur";s:1:"0";}s:6:"resume";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"4";s:5:"titre";s:9:"Résumés";s:7:"largeur";s:1:"0";}s:4:"tags";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"5";s:5:"titre";s:26:"Rebondir dans le catalogue";s:7:"largeur";s:1:"0";}s:10:"biographie";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"6";s:5:"titre";s:22:"Biographie de l'auteur";s:7:"largeur";s:1:"0";}s:6:"series";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"7";s:5:"titre";s:28:"Documents de la même série";s:7:"largeur";s:1:"0";}s:10:"similaires";a:4:{s:3:"aff";s:1:"2";s:5:"ordre";s:2:"20";s:5:"titre";s:20:"Documents similaires";s:7:"largeur";s:1:"0";}s:13:"bibliographie";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"9";s:5:"titre";s:12:"Discographie";s:7:"largeur";s:1:"0";}s:8:"morceaux";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"10";s:5:"titre";s:8:"Morceaux";s:7:"largeur";s:1:"0";}s:12:"bandeAnnonce";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"11";s:5:"titre";s:13:"Bande-annonce";s:7:"largeur";s:1:"0";}s:6:"photos";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"12";s:5:"titre";s:6:"Photos";s:7:"largeur";s:1:"0";}s:6:"videos";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:2:"13";s:5:"titre";s:15:"Archives vidéo";s:7:"largeur";s:1:"0";}s:13:"resnumeriques";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"14";s:5:"titre";s:22:"Ressources numériques";s:7:"largeur";s:1:"0";}s:11:"babeltheque";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"15";s:5:"titre";s:12:"Babelthèque";s:7:"largeur";s:1:"0";}s:4:"frbr";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"16";s:5:"titre";s:14:"Notices liées";s:7:"largeur";s:1:"0";}}s:5:"boite";s:0:"";s:4:"xslt";s:0:"";}s:12:"viewnotice13";a:10:{s:9:"barre_nav";s:6:"Notice";s:6:"entete";s:5:"W;N;G";s:9:"analytics";s:0:"";s:15:"analytics_title";s:0:"";s:17:"analytics_authors";s:0:"";s:11:"links_zones";s:0:"";s:16:"thumbnail_fields";s:0:"";s:7:"onglets";a:16:{s:6:"detail";a:4:{s:3:"aff";s:1:"2";s:5:"ordre";s:1:"2";s:5:"titre";s:14:"en savoir plus";s:7:"largeur";s:1:"0";}s:4:"avis";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:2:"17";s:5:"titre";s:9:"Critiques";s:7:"largeur";s:1:"0";}s:11:"exemplaires";a:4:{s:3:"aff";s:1:"1";s:5:"ordre";s:1:"1";s:5:"titre";s:11:"Exemplaires";s:7:"largeur";s:1:"0";}s:6:"resume";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"4";s:5:"titre";s:9:"Résumés";s:7:"largeur";s:1:"0";}s:4:"tags";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"5";s:5:"titre";s:26:"Rebondir dans le catalogue";s:7:"largeur";s:1:"0";}s:10:"biographie";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"6";s:5:"titre";s:22:"Biographie de l'auteur";s:7:"largeur";s:1:"0";}s:6:"series";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"7";s:5:"titre";s:28:"Documents de la même série";s:7:"largeur";s:1:"0";}s:10:"similaires";a:4:{s:3:"aff";s:1:"2";s:5:"ordre";s:2:"20";s:5:"titre";s:20:"Documents similaires";s:7:"largeur";s:1:"0";}s:13:"bibliographie";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"9";s:5:"titre";s:12:"Discographie";s:7:"largeur";s:1:"0";}s:8:"morceaux";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"10";s:5:"titre";s:8:"Morceaux";s:7:"largeur";s:1:"0";}s:12:"bandeAnnonce";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"11";s:5:"titre";s:13:"Bande-annonce";s:7:"largeur";s:1:"0";}s:6:"photos";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"12";s:5:"titre";s:6:"Photos";s:7:"largeur";s:1:"0";}s:6:"videos";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:2:"13";s:5:"titre";s:15:"Archives vidéo";s:7:"largeur";s:1:"0";}s:13:"resnumeriques";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"14";s:5:"titre";s:22:"Ressources numériques";s:7:"largeur";s:1:"0";}s:11:"babeltheque";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"15";s:5:"titre";s:12:"Babelthèque";s:7:"largeur";s:1:"0";}s:4:"frbr";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"16";s:5:"titre";s:14:"Notices liées";s:7:"largeur";s:1:"0";}}s:5:"boite";s:0:"";s:4:"xslt";s:0:"";}s:12:"viewnotice15";a:10:{s:9:"barre_nav";s:6:"Notice";s:6:"entete";s:5:"W;N;G";s:9:"analytics";s:0:"";s:15:"analytics_title";s:0:"";s:17:"analytics_authors";s:0:"";s:11:"links_zones";s:0:"";s:16:"thumbnail_fields";s:0:"";s:7:"onglets";a:16:{s:6:"detail";a:4:{s:3:"aff";s:1:"2";s:5:"ordre";s:1:"2";s:5:"titre";s:14:"en savoir plus";s:7:"largeur";s:1:"0";}s:4:"avis";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:2:"17";s:5:"titre";s:9:"Critiques";s:7:"largeur";s:1:"0";}s:11:"exemplaires";a:4:{s:3:"aff";s:1:"1";s:5:"ordre";s:1:"1";s:5:"titre";s:11:"Exemplaires";s:7:"largeur";s:1:"0";}s:6:"resume";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"4";s:5:"titre";s:9:"Résumés";s:7:"largeur";s:1:"0";}s:4:"tags";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"5";s:5:"titre";s:26:"Rebondir dans le catalogue";s:7:"largeur";s:1:"0";}s:10:"biographie";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"6";s:5:"titre";s:22:"Biographie de l'auteur";s:7:"largeur";s:1:"0";}s:6:"series";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"7";s:5:"titre";s:28:"Documents de la même série";s:7:"largeur";s:1:"0";}s:10:"similaires";a:4:{s:3:"aff";s:1:"2";s:5:"ordre";s:2:"20";s:5:"titre";s:20:"Documents similaires";s:7:"largeur";s:1:"0";}s:13:"bibliographie";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"9";s:5:"titre";s:12:"Discographie";s:7:"largeur";s:1:"0";}s:8:"morceaux";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"10";s:5:"titre";s:8:"Morceaux";s:7:"largeur";s:1:"0";}s:12:"bandeAnnonce";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"11";s:5:"titre";s:13:"Bande-annonce";s:7:"largeur";s:1:"0";}s:6:"photos";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"12";s:5:"titre";s:6:"Photos";s:7:"largeur";s:1:"0";}s:6:"videos";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:2:"13";s:5:"titre";s:15:"Archives vidéo";s:7:"largeur";s:1:"0";}s:13:"resnumeriques";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"14";s:5:"titre";s:22:"Ressources numériques";s:7:"largeur";s:1:"0";}s:11:"babeltheque";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"15";s:5:"titre";s:12:"Babelthèque";s:7:"largeur";s:1:"0";}s:4:"frbr";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"16";s:5:"titre";s:14:"Notices liées";s:7:"largeur";s:1:"0";}}s:5:"boite";s:0:"";s:4:"xslt";s:0:"";}s:23:"viewnoticeToutApprendre";a:10:{s:9:"barre_nav";s:6:"Notice";s:6:"entete";s:5:"W;C;N";s:9:"analytics";s:0:"";s:15:"analytics_title";s:0:"";s:17:"analytics_authors";s:0:"";s:11:"links_zones";s:0:"";s:16:"thumbnail_fields";s:5:"959-u";s:7:"onglets";a:17:{s:6:"detail";a:4:{s:3:"aff";s:1:"2";s:5:"ordre";s:1:"1";s:5:"titre";s:23:"Description du document";s:7:"largeur";s:1:"0";}s:4:"avis";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"2";s:5:"titre";s:9:"Critiques";s:7:"largeur";s:1:"0";}s:11:"exemplaires";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"3";s:5:"titre";s:11:"Exemplaires";s:7:"largeur";s:1:"0";}s:6:"resume";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"4";s:5:"titre";s:9:"Résumés";s:7:"largeur";s:1:"0";}s:4:"tags";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"5";s:5:"titre";s:26:"Rebondir dans le catalogue";s:7:"largeur";s:1:"0";}s:10:"biographie";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"6";s:5:"titre";s:22:"Biographie de l'auteur";s:7:"largeur";s:1:"0";}s:6:"series";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"7";s:5:"titre";s:28:"Documents de la même série";s:7:"largeur";s:1:"0";}s:10:"similaires";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"8";s:5:"titre";s:20:"Documents similaires";s:7:"largeur";s:1:"0";}s:13:"bibliographie";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"9";s:5:"titre";s:12:"Discographie";s:7:"largeur";s:1:"0";}s:8:"morceaux";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"10";s:5:"titre";s:8:"Morceaux";s:7:"largeur";s:1:"0";}s:12:"bandeAnnonce";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"11";s:5:"titre";s:13:"Bande-annonce";s:7:"largeur";s:1:"0";}s:6:"photos";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"12";s:5:"titre";s:6:"Photos";s:7:"largeur";s:1:"0";}s:6:"videos";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"13";s:5:"titre";s:15:"Archives vidéo";s:7:"largeur";s:1:"0";}s:13:"resnumeriques";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"1";s:5:"titre";s:22:"Ressources numériques";s:7:"largeur";s:1:"0";}s:11:"babeltheque";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"15";s:5:"titre";s:12:"Babelthèque";s:7:"largeur";s:1:"0";}s:4:"frbr";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"16";s:5:"titre";s:14:"Notices liées";s:7:"largeur";s:1:"0";}s:8:"recounts";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"17";s:5:"titre";s:8:"Contient";s:7:"largeur";s:1:"0";}}s:5:"boite";s:0:"";s:4:"xslt";s:0:"";}s:12:"viewnotice18";a:10:{s:9:"barre_nav";s:6:"Notice";s:5:"boite";s:0:"";s:6:"entete";s:5:"W;N;G";s:9:"analytics";s:0:"";s:15:"analytics_title";s:0:"";s:17:"analytics_authors";s:0:"";s:11:"links_zones";s:0:"";s:16:"thumbnail_fields";s:0:"";s:7:"onglets";a:17:{s:6:"detail";a:4:{s:3:"aff";s:1:"2";s:5:"ordre";s:1:"2";s:5:"titre";s:14:"en savoir plus";s:7:"largeur";s:1:"0";}s:4:"avis";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:2:"17";s:5:"titre";s:9:"Critiques";s:7:"largeur";s:1:"0";}s:11:"exemplaires";a:4:{s:3:"aff";s:1:"1";s:5:"ordre";s:1:"1";s:5:"titre";s:11:"Exemplaires";s:7:"largeur";s:1:"0";}s:6:"resume";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"4";s:5:"titre";s:9:"Résumés";s:7:"largeur";s:1:"0";}s:4:"tags";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"5";s:5:"titre";s:26:"Rebondir dans le catalogue";s:7:"largeur";s:1:"0";}s:10:"biographie";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"6";s:5:"titre";s:22:"Biographie de l'auteur";s:7:"largeur";s:1:"0";}s:6:"series";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"7";s:5:"titre";s:28:"Documents de la même série";s:7:"largeur";s:1:"0";}s:10:"similaires";a:4:{s:3:"aff";s:1:"2";s:5:"ordre";s:2:"20";s:5:"titre";s:20:"Documents similaires";s:7:"largeur";s:1:"0";}s:13:"bibliographie";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"9";s:5:"titre";s:12:"Discographie";s:7:"largeur";s:1:"0";}s:8:"morceaux";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"10";s:5:"titre";s:8:"Morceaux";s:7:"largeur";s:1:"0";}s:12:"bandeAnnonce";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"11";s:5:"titre";s:13:"Bande-annonce";s:7:"largeur";s:1:"0";}s:6:"photos";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"12";s:5:"titre";s:6:"Photos";s:7:"largeur";s:1:"0";}s:6:"videos";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:2:"13";s:5:"titre";s:15:"Archives vidéo";s:7:"largeur";s:1:"0";}s:13:"resnumeriques";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"14";s:5:"titre";s:22:"Ressources numériques";s:7:"largeur";s:1:"0";}s:11:"babeltheque";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"15";s:5:"titre";s:12:"Babelthèque";s:7:"largeur";s:1:"0";}s:4:"frbr";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"16";s:5:"titre";s:14:"Notices liées";s:7:"largeur";s:1:"0";}s:8:"recounts";a:4:{s:5:"titre";s:0:"";s:3:"aff";s:1:"2";s:5:"ordre";s:2:"17";s:7:"largeur";s:1:"0";}}s:4:"xslt";s:0:"";}s:11:"viewnotice6";a:10:{s:9:"barre_nav";s:6:"Notice";s:5:"boite";s:0:"";s:6:"entete";s:5:"W;N;G";s:9:"analytics";s:0:"";s:15:"analytics_title";s:0:"";s:17:"analytics_authors";s:0:"";s:11:"links_zones";s:0:"";s:16:"thumbnail_fields";s:0:"";s:7:"onglets";a:17:{s:6:"detail";a:4:{s:3:"aff";s:1:"2";s:5:"ordre";s:1:"2";s:5:"titre";s:14:"en savoir plus";s:7:"largeur";s:1:"0";}s:4:"avis";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:2:"17";s:5:"titre";s:9:"Critiques";s:7:"largeur";s:1:"0";}s:11:"exemplaires";a:4:{s:3:"aff";s:1:"1";s:5:"ordre";s:1:"1";s:5:"titre";s:11:"Exemplaires";s:7:"largeur";s:1:"0";}s:6:"resume";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"4";s:5:"titre";s:9:"Résumés";s:7:"largeur";s:1:"0";}s:4:"tags";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"5";s:5:"titre";s:26:"Rebondir dans le catalogue";s:7:"largeur";s:1:"0";}s:10:"biographie";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"6";s:5:"titre";s:22:"Biographie de l'auteur";s:7:"largeur";s:1:"0";}s:6:"series";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"7";s:5:"titre";s:28:"Documents de la même série";s:7:"largeur";s:1:"0";}s:10:"similaires";a:4:{s:3:"aff";s:1:"2";s:5:"ordre";s:2:"20";s:5:"titre";s:20:"Documents similaires";s:7:"largeur";s:1:"0";}s:13:"bibliographie";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"9";s:5:"titre";s:12:"Discographie";s:7:"largeur";s:1:"0";}s:8:"morceaux";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"10";s:5:"titre";s:8:"Morceaux";s:7:"largeur";s:1:"0";}s:12:"bandeAnnonce";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"11";s:5:"titre";s:13:"Bande-annonce";s:7:"largeur";s:1:"0";}s:6:"photos";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"12";s:5:"titre";s:6:"Photos";s:7:"largeur";s:1:"0";}s:6:"videos";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:2:"13";s:5:"titre";s:15:"Archives vidéo";s:7:"largeur";s:1:"0";}s:13:"resnumeriques";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"14";s:5:"titre";s:22:"Ressources numériques";s:7:"largeur";s:1:"0";}s:11:"babeltheque";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"15";s:5:"titre";s:12:"Babelthèque";s:7:"largeur";s:1:"0";}s:4:"frbr";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"16";s:5:"titre";s:14:"Notices liées";s:7:"largeur";s:1:"0";}s:8:"recounts";a:4:{s:5:"titre";s:0:"";s:3:"aff";s:1:"2";s:5:"ordre";s:2:"17";s:7:"largeur";s:1:"0";}}s:4:"xslt";s:0:"";}}}
diff --git a/tests/application/modules/telephone/controllers/RechercheControllerTest.php b/tests/application/modules/telephone/controllers/RechercheControllerTest.php
index d2bdced0ced16caa444babdb854c4c4d3feae4e2..7f8e881b88758d8c68a8b2f3546e162ad7fcb1eb 100644
--- a/tests/application/modules/telephone/controllers/RechercheControllerTest.php
+++ b/tests/application/modules/telephone/controllers/RechercheControllerTest.php
@@ -113,16 +113,25 @@ class Telephone_RechercheControllerSimpleByPertinenceActionTest extends Telephon
 
 
 class Telephone_RechercheControllerBibliothequeActionTest extends TelephoneAbstractControllerTestCase {
+  protected $_bib;
+
   public function setUp() {
     parent::setUp();
-    Class_Bib::getLoader()->newInstanceWithId(34)
+
+    $this->_bib = Class_Bib::getLoader()
+      ->newInstanceWithId(34)
       ->setLibelle('La turbine')
       ->setAdresse('5 av. des Harmonies')
       ->setCp('74960')
       ->setVille('Cran-Gevrier')
       ->setTelephone('04 50 50 50 50')
-      ->setMail('turbine@bib.com')
-      ->setHoraire(urlencode('Tous les jours'));
+      ->setMail('turbine@bib.com');
+
+    $this->fixture('Class_Ouverture',
+                   ['id' => 1,
+                    'id_site' => 34,
+                    'jour_semaine' => Class_Ouverture::LUNDI,
+                    'label' => 'D\'habitude']);
 
     $this->dispatch('/telephone/recherche/bibliotheque/id/34', true);
   }
@@ -164,8 +173,48 @@ class Telephone_RechercheControllerBibliothequeActionTest extends TelephoneAbstr
 
 
   /** @test */
-  public function pageShouldContainHoraires() {
-    $this->assertXPathContentContains('//li', 'Tous les jours');
+  public function withOuvertureShouldContainDefaultOpening() {
+    $this->assertXPathContentContains('//li', 'D\'habitude');
+  }
+}
+
+
+
+class Telephone_RechercheControllerBibliothequeOpeningsTest extends TelephoneAbstractControllerTestCase {
+  protected $_bib;
+
+  public function setUp() {
+    parent::setUp();
+
+    $this->_bib = Class_Bib::getLoader()
+      ->newInstanceWithId(34)
+      ->setLibelle('La turbine')
+      ->setAdresse('5 av. des Harmonies')
+      ->setCp('74960')
+      ->setVille('Cran-Gevrier')
+      ->setTelephone('04 50 50 50 50')
+      ->setMail('turbine@bib.com')
+      ->setHoraire('Exceptionnel');
+
+    $this->fixture('Class_Ouverture',
+                   ['id' => 1,
+                    'id_site' => 34,
+                    'jour_semaine' => Class_Ouverture::LUNDI,
+                    'label' => 'D\'habitude']);
+
+    $this->dispatch('/telephone/recherche/bibliotheque/id/34', true);
+  }
+
+
+  /** @test */
+  public function shouldContainHoraireExceptionnel() {
+    $this->assertXPathContentContains('//li', 'Exceptionnel');
+  }
+
+
+    /** @test */
+  public function shouldNotContainOpenings() {
+    $this->assertNotXPathContentContains('//li', 'D\'habitude');
   }
 }
 
diff --git a/tests/library/Class/ArteVodLinkTest.php b/tests/library/Class/ArteVodLinkTest.php
index 21be0b9554cc035810057807f84379f9e943de24..566fc8feaf5a8282fef7cedd0cd57ab57027aa99 100644
--- a/tests/library/Class/ArteVodLinkTest.php
+++ b/tests/library/Class/ArteVodLinkTest.php
@@ -22,10 +22,7 @@
 
 class ArteVodLinkBaseUrlWithoutAlbumTest extends ModelTestCase {
    public function setUp() {
-     $this->fixture('Class_AdminVar',
-                    ['id' => 'ARTE_VOD_LOGIN',
-                     'valeur' => 'miiop'
-                    ]);
+     Class_AdminVar::set('ARTE_VOD_LOGIN', 'miiop');
      $this->_arte_vod_link = new Class_ArteVodLink();
    }
 
@@ -40,8 +37,10 @@ class ArteVodLinkBaseUrlWithoutAlbumTest extends ModelTestCase {
 
 
 class ArteVodLinkWithUserAndAlbumTest extends ModelTestCase {
-  protected $_james_bond;
-  protected $_arte_vod_link;
+  protected
+    $_sso_key = 'secret',
+    $_james_bond,
+    $_arte_vod_link;
 
   public function setUp() {
     parent::setUp();
@@ -57,27 +56,27 @@ class ArteVodLinkWithUserAndAlbumTest extends ModelTestCase {
       ->setMail('jbond@007.fr')
       ->setDateFin('2023-09-12');
 
+    Class_AdminVar::set('ARTE_VOD_SSO_KEY', $this->_sso_key);
+
     $this->_arte_vod_link = Class_ArteVodLink::forAlbumAndUser($entre_les_murs,
                                                                $this->_james_bond);
   }
 
 
   /** @test */
-  public function baseUrlForBondShouldBeMediathequeNumeriqueDotCom() {
+  public function baseUrlForBondShouldBeMediathequeNumeriqueDotComFilmEntreLesMurs() {
     $this->assertEquals('http://www.mediatheque-numerique.com/films/entre-les-murs',
                         $this->_arte_vod_link->baseUrl());
   }
 
 
   /** @test */
-  public function withKeySECRETUrlShouldContainsEncryptedDate() {
-    Class_AdminVar::newInstanceWithId('ARTE_VOD_SSO_KEY')->setValeur('GOGO');
-
+  public function withKeyUrlShouldContainsEncryptedDate() {
     $this->assertEquals('https://portal.mediatheque-numerique.com/sso_login'
                         .'?sso_id=afi'
                         .'&id=45'
-                        .'&id_encrypted='. hash('sha256', '45GOGO')
-                        .'&d='. hash('sha256', date('dmY').'GOGO')
+                        .'&id_encrypted='. hash('sha256', '45' . $this->_sso_key)
+                        .'&d='. hash('sha256', date('dmY') . $this->_sso_key)
                         .'&prenom=James'
                         .'&nom=Bond'
                         .'&email='.urlencode('jbond@007.fr')
@@ -90,8 +89,6 @@ class ArteVodLinkWithUserAndAlbumTest extends ModelTestCase {
 
   /** @test */
   public function userWithoutNomEmailAndPrenomUrlSSOShouldNotContainsNomEmailPrenom() {
-    Class_AdminVar::newInstanceWithId('ARTE_VOD_SSO_KEY')->setValeur('secret');
-
     $this->_james_bond
       ->setPrenom('')
       ->setNom('')
@@ -100,8 +97,8 @@ class ArteVodLinkWithUserAndAlbumTest extends ModelTestCase {
     $this->assertEquals('https://portal.mediatheque-numerique.com/sso_login'
                         .'?sso_id=afi'
                         .'&id=45'
-                        .'&id_encrypted='. hash('sha256', '45secret')
-                        .'&d='. hash('sha256', date('dmY').'secret')
+                        .'&id_encrypted='. hash('sha256', '45' . $this->_sso_key)
+                        .'&d='. hash('sha256', date('dmY'). $this->_sso_key)
                         .'&datout=2023-09-12'
                         .'&return_url=' . urlencode('http://www.mediatheque-numerique.com/films/entre-les-murs'),
                         $this->_arte_vod_link->url());
@@ -110,8 +107,6 @@ class ArteVodLinkWithUserAndAlbumTest extends ModelTestCase {
 
   /** @test */
   public function userInviteShouldHaveUserIdInSSOLink() {
-    Class_AdminVar::newInstanceWithId('ARTE_VOD_SSO_KEY')->setValeur('secret');
-
     $this->_james_bond
       ->setPrenom('')
       ->setNom('')
@@ -123,19 +118,16 @@ class ArteVodLinkWithUserAndAlbumTest extends ModelTestCase {
     $this->assertEquals('https://portal.mediatheque-numerique.com/sso_login'
                         .'?sso_id=afi'
                         .'&id=19'
-                        .'&id_encrypted='. hash('sha256', '19secret')
-                        .'&d='. hash('sha256', date('dmY').'secret')
+                        .'&id_encrypted='. hash('sha256', '19' . $this->_sso_key)
+                        .'&d='. hash('sha256', date('dmY') . $this->_sso_key)
                         .'&return_url=' . urlencode('http://www.mediatheque-numerique.com/films/entre-les-murs'),
 
                         $this->_arte_vod_link->url());
   }
 
 
-
   /** @test */
   public function userWithDateNaissanceShouldContainsDnaissInUrl() {
-    Class_AdminVar::newInstanceWithId('ARTE_VOD_SSO_KEY')->setValeur('secret');
-
     $this->_james_bond
       ->setPrenom('')
       ->setNom('')
@@ -146,8 +138,8 @@ class ArteVodLinkWithUserAndAlbumTest extends ModelTestCase {
     $this->assertEquals('https://portal.mediatheque-numerique.com/sso_login'
                         .'?sso_id=afi'
                         .'&id=45'
-                        .'&id_encrypted='. hash('sha256', '45secret')
-                        .'&d='. hash('sha256', date('dmY').'secret')
+                        .'&id_encrypted='. hash('sha256', '45' . $this->_sso_key)
+                        .'&d='. hash('sha256', date('dmY') . $this->_sso_key)
                         .'&dnaiss=1975-01-01'
                         .'&return_url=' . urlencode('http://www.mediatheque-numerique.com/films/entre-les-murs'),
 
diff --git a/tests/library/Class/File/MimeTest.php b/tests/library/Class/File/MimeTest.php
index 9ee77a4b1b1f204c77294f4b570304e3aa4625fb..92fd9b30b788889ed243ad8ad354a75b04b20200 100644
--- a/tests/library/Class/File/MimeTest.php
+++ b/tests/library/Class/File/MimeTest.php
@@ -16,7 +16,7 @@
  *
  * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
  * along with BOKEH; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA 
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
  */
 
 class MimeTest extends PHPUnit_Framework_TestCase {
@@ -31,4 +31,10 @@ class MimeTest extends PHPUnit_Framework_TestCase {
     $this->assertEquals('application/javascript', Class_File_Mime::getType('js'));
   }
 
+
+  /** @test */
+  public function typeOfJPGShouldBeImageJpg() {
+    $this->assertEquals('image/jpeg', Class_File_Mime::getType('JPG'));
+  }
+
 }
\ No newline at end of file
diff --git a/tests/library/Class/WebService/ArteVODTest.php b/tests/library/Class/WebService/ArteVODTest.php
index 2279151d955bc3a053e0a97872ad94199c6fa3b9..a2961322ca9701a5bbf30ecae5d1f0ff221b9d1a 100644
--- a/tests/library/Class/WebService/ArteVODTest.php
+++ b/tests/library/Class/WebService/ArteVODTest.php
@@ -24,7 +24,6 @@ require_once 'ArteVODFixtures.php';
 
 abstract class ArteVODHarverstingTestCase extends ModelTestCase {
   protected $_web_client;
-  protected $_storm_default_to_volatile = true;
 
   public function setUp() {
     parent::setUp();
@@ -32,7 +31,6 @@ abstract class ArteVODHarverstingTestCase extends ModelTestCase {
     $this->fixture('Class_CosmoVar', ['id' => 'types_docs',
                                       'liste' => "1:cd\r\n200:non identifié\r\n201:livres\r\n202:bd"]);
 
-    Class_AdminVar::set('ARTE_VOD', '1');
     Class_AdminVar::set('ARTE_VOD_LOGIN', 'user');
     Class_AdminVar::set('ARTE_VOD_KEY', 'pass');
 
@@ -217,3 +215,73 @@ class ArteVODHarverstingFourFilmsInTwoPages extends ArteVODHarverstingTestCase {
     $this->assertNotEquals(null, $this->edouard->addAuthor('Cibien, Laurent', '005'));
   }
 }
+
+
+
+
+class ArteVODHarvestingWithoutPasswordTest extends ArteVODHarverstingTestCase {
+  public function setUp() {
+    parent::setUp();
+
+    Class_AdminVar::set('ARTE_VOD_KEY', '');
+
+    $this->_web_client
+      ->whenCalled('open_url')
+      ->with('https://vod.mediatheque-numerique.com/api/v1/films?page_nb=1')
+      ->answers(ArteVODFixtures::emptyPage());
+
+    $this->_web_client->beStrict();
+
+    (new Class_WebService_BibNumerique_ArteVOD())->harvest();
+  }
+
+
+  /** @test */
+  public function shouldHaveHarvestedWithoutAuth() {
+    $this->assertTrue($this->_web_client->methodHasBeenCalled('open_url'));
+  }
+}
+
+
+
+
+class ArteVODHarverstingEnablingTest extends ArteVODHarverstingTestCase {
+  /** @test */
+  public function withAllShouldBeEnabled() {
+    Class_AdminVar::set('ARTE_VOD_LOGIN', 'user');
+    Class_AdminVar::set('ARTE_VOD_KEY', 'pass');
+    Class_AdminVar::set('ARTE_VOD_SSO_KEY', 'key');
+
+    $this->assertTrue((new Class_WebService_BibNumerique_ArteVOD())->isEnabled());
+  }
+
+
+  /** @test */
+  public function withoutLoginShouldNotBeEnabled() {
+    Class_AdminVar::set('ARTE_VOD_LOGIN', '');
+    Class_AdminVar::set('ARTE_VOD_KEY', 'pass');
+    Class_AdminVar::set('ARTE_VOD_SSO_KEY', 'key');
+
+    $this->assertFalse((new Class_WebService_BibNumerique_ArteVOD())->isEnabled());
+  }
+
+
+  /** @test */
+  public function withoutHarvestKeyShouldBeEnabled() {
+    Class_AdminVar::set('ARTE_VOD_LOGIN', 'user');
+    Class_AdminVar::set('ARTE_VOD_KEY', '');
+    Class_AdminVar::set('ARTE_VOD_SSO_KEY', 'key');
+
+    $this->assertTrue((new Class_WebService_BibNumerique_ArteVOD())->isEnabled());
+  }
+
+
+  /** @test */
+  public function withoutSSOKeyShouldNotBeEnabled() {
+    Class_AdminVar::set('ARTE_VOD_LOGIN', 'user');
+    Class_AdminVar::set('ARTE_VOD_KEY', 'pass');
+    Class_AdminVar::set('ARTE_VOD_SSO_KEY', '');
+
+    $this->assertFalse((new Class_WebService_BibNumerique_ArteVOD())->isEnabled());
+  }
+}
\ No newline at end of file
diff --git a/tests/library/Class/WebService/LastfmTest.php b/tests/library/Class/WebService/LastfmTest.php
index 09b96a4afb5c8713c0995c3556b8e281a9a6b235..c0bcc098dc335daf94e516db324c68b44ea86f2a 100644
--- a/tests/library/Class/WebService/LastfmTest.php
+++ b/tests/library/Class/WebService/LastfmTest.php
@@ -154,7 +154,7 @@ class LastfmGetMorceauxNoTracksIntegrationTest extends ModelTestCase {
   public function setUp() {
     parent::setUp();
     $this->_last_fm = new Class_WebService_Lastfm();
-    $this->_album = $this->_last_fm->getMorceaux('Les années de pélerinage', 'Franz Liszt');
+    $this->_album = $this->_last_fm->getMorceaux('No track', 'Franz Liszt');
   }
 
 
@@ -162,9 +162,4 @@ class LastfmGetMorceauxNoTracksIntegrationTest extends ModelTestCase {
   public function nbResultsShouldBeZero() {
     $this->assertEquals(0, $this->_album['nb_resultats']);
   }
-
 }
-
-
-
-?>
diff --git a/tests/library/ZendAfi/View/Helper/Abonne/AbonnementTest.php b/tests/library/ZendAfi/View/Helper/Abonne/AbonnementTest.php
index 81b733740664edadd23305141eb0e83166519684..2bb4de77a7f48c21ef8f79f61fb5b28c4b48f0e9 100644
--- a/tests/library/ZendAfi/View/Helper/Abonne/AbonnementTest.php
+++ b/tests/library/ZendAfi/View/Helper/Abonne/AbonnementTest.php
@@ -44,11 +44,9 @@ class View_Helper_Abonne_AbonnementTest extends ViewHelperTestCase {
   public function userDateFinAbonnementShouldReturnAbonnementValid() {
     $this->assertXPathContentContains($this->_helper->abonne_abonnement(Class_Users::newInstanceWithId(3)
                                                                         ->beAbonneSIGB()
-                                                                        ->setDateFin('2919-08-19')),
+                                                                        ->setDateFin('2050-08-19')),
                                       '//div[@class="abonnement"]',
                                       'Votre abonnement est valide');
   }
-
 }
-
 ?>
\ No newline at end of file
diff --git a/tests/library/ZendAfi/View/Helper/Notice/VignetteTest.php b/tests/library/ZendAfi/View/Helper/Notice/VignetteTest.php
index 2ac8be2e7c1bbd8f75b5726bcd9f920674000c8b..0cf3af2b289e392ac1a23275a45cd33c998bf4e3 100644
--- a/tests/library/ZendAfi/View/Helper/Notice/VignetteTest.php
+++ b/tests/library/ZendAfi/View/Helper/Notice/VignetteTest.php
@@ -68,6 +68,25 @@ class ZendAfi_View_Helper_Notice_VignetteNoThumbnailTest
   }
 
 
+  protected function _setupRecordOtherWayWithThumbnailUrl($thumbnail_url) {
+    $cfg_modules = Class_Profil::getCurrentProfil()->getCfgModulesAsArray();
+    $cfg_modules
+      ['recherche']
+      ['viewnotice1'] = ['thumbnail_fields' => '859-u'];
+
+    if(Class_Profil::getCurrentProfil()->setCfgModules($cfg_modules)->save())
+    return $this
+      ->fixture('Class_Notice',
+                ['id' => 42,
+                 'type_doc' => 1,
+                 'titre_principal' => 'Never Giveup',
+                 'url_vignette' => Class_WebService_Vignette::NO_DATA,
+                 'url_image' => Class_WebService_Vignette::NO_DATA,
+                ])
+      ->set_subfield('859', 'u', $thumbnail_url);
+  }
+
+
   /** @test */
   public function withThumbnailZoneAndUrlInUnimarcViewnoticeShouldContainsThumbnail() {
     $record = $this->_setupRecordWithThumbnailUrl('https://epicpics.org/7bxDlg.png');
@@ -76,6 +95,14 @@ class ZendAfi_View_Helper_Notice_VignetteNoThumbnailTest
   }
 
 
+  /** @test */
+  public function withThumbnailZoneAndUrlInUnimarcAndOtherWayToSaveProfilViewnoticeShouldContainsThumbnail() {
+    $record = $this->_setupRecordOtherWayWithThumbnailUrl('https://epicpics.org/7bxDlg.png');
+    $html = $this->_helper->notice_Vignette($record, [], ZendAfi_View_Helper_Notice_Vignette::MODE_VIEW);
+    $this->assertXPath($html, '//img[@src="https://epicpics.org/7bxDlg.png"]', $html);
+  }
+
+
   public function invalidThumbnailUrls() {
     return [
             ['https://bloub.org/7364?zork=glub'],
@@ -126,4 +153,4 @@ class ZendAfi_View_Helper_Notice_VignetteNoThumbnailTest
     $html = $this->_helper->notice_Vignette($record);
     $this->assertXPath($html, '//img[contains(@src, "/recherche/vignette/clef/")]', $html);
   }
-}
+}
\ No newline at end of file
diff --git a/tests/scenarios/AuthorPage/AuthorPageTest.php b/tests/scenarios/AuthorPage/AuthorPageTest.php
index 327a3fddd6f5bc1827e61e054450d2408f3856f9..d34b38b123a9677f01c762a4746ca3a0081ce0cd 100644
--- a/tests/scenarios/AuthorPage/AuthorPageTest.php
+++ b/tests/scenarios/AuthorPage/AuthorPageTest.php
@@ -212,7 +212,7 @@ class AuthorPageViewByIdTest extends AuthorPageTestCase {
 
   /** @test */
   public function pageTitleShouldBeVictorHugo() {
-    $this->assertXPath('//title[text()="Auteur - Victor Hugo"]', $this->_response->getBody());
+    $this->assertXPath('//title[text()="Auteur - Victor Hugo"]');
   }
 
 
@@ -401,7 +401,7 @@ class AuthorPageViewByNameTest extends AuthorPageTestCase {
 
     $this->dispatch('/author/view/named/Victor+Hugo');
 
-    $this->assertXPathContentContains('//h1', 'Victor Hugo', $this->_response->getBody());
+    $this->assertXPathContentContains('//h1', 'Victor Hugo');
   }
 
 
diff --git a/tests/scenarios/AuthorPage/AuthorWidgetTest.php b/tests/scenarios/AuthorPage/AuthorWidgetTest.php
index 4c09bc448b1777ea90f1b09feac7f93c2b9dbbd4..af7b58786c54126a7948ab0e71d9fff86d7cc91f 100644
--- a/tests/scenarios/AuthorPage/AuthorWidgetTest.php
+++ b/tests/scenarios/AuthorPage/AuthorWidgetTest.php
@@ -184,7 +184,7 @@ class AuthorWidgetOnPageTest extends AuthorWidgetOnPageTestCase {
                   {
                     $this->assertEquals(3, $preferences['id_panier']);
                     $this->assertEquals(10, $preferences['authors_count']);
-                    $this->assertEquals(500, $preferences['nb_notices']);
+                    $this->assertEquals(100, $preferences['nb_notices']);
                     $this->assertEquals(Class_Systeme_ModulesAccueil_Authors::AUTHORS_SELECTION_MODE_ALL,
                                         $preferences['authors_selection_mode']);
                     return Class_Notice::findAll();
@@ -210,7 +210,8 @@ class AuthorWidgetOnPageTest extends AuthorWidgetOnPageTestCase {
   /** @test */
   public function numberOfAuthorsShouldBeTwo() {
     $this->assertXPathCount('//div[@class="boite authors"]//div[@class="author"]',
-                            2);
+                            2,
+                            $this->_response->getBody());
   }
 
 
@@ -449,7 +450,6 @@ class AuthorWidgetConfigurationWithDomainTest extends AuthorWidgetOnPageTestCase
 
 
 
-
 class AuthorWidgetConfigurationPostTest extends AuthorWidgetOnPageTestCase {
   protected $_saved_settings;
 
diff --git a/tests/scenarios/Templates/TemplatesTest.php b/tests/scenarios/Templates/TemplatesTest.php
index 4b78c170edd7717a4d91bea6000491abbc1739d4..c47b908fa19bf7e6663dfea24a0a74950bf0e9bb 100644
--- a/tests/scenarios/Templates/TemplatesTest.php
+++ b/tests/scenarios/Templates/TemplatesTest.php
@@ -116,7 +116,7 @@ class TemplatesControllerResetIntonationTest extends TemplatesEnabledTestCase {
     parent::setUp();
     $this->fixture('Class_Template_Settings',
                    ['id' => 1,
-                   'template' => 'INTONATION']);
+                    'template' => 'INTONATION']);
 
     $this->dispatch('/admin/template/reset/template/INTONATION', true);
   }
@@ -324,6 +324,18 @@ abstract class TemplatesIntonationTestCase extends TemplatesEnabledTestCase {
               '21' => ['division' => 3,
                        'type_module' => 'CALENDAR',
                        'preferences' => []],
+
+              '22' => ['division' => 4,
+                       'type_module' => 'FREE',
+                       'preferences' => []],
+
+              '23' => ['division' => 4,
+                       'type_module' => 'AUTHORS',
+                       'preferences' => []],
+
+              '24' => ['division' => 4,
+                       'type_module' => 'DOMAIN_BROWSER',
+                       'preferences' => ['layout' => Intonation_Library_Widget_Carousel_Definition::HORIZONTAL_LISTING]],
              ],
 
              'section' => [ '1' => ['boite' => ['ultra_light_widget']]]
@@ -1756,7 +1768,7 @@ class TemplateRenderWidgetTest extends TemplatesIntonationTestCase {
   }
 
 
-    /** @test */
+  /** @test */
   public function pageShouldBeHtml5Valid() {
     ZendAfi_Auth::getInstance()->clearIdentity();
     $this->dispatch('/opac/widget/render/widget_id/17/profile_id/72/', true);
@@ -1824,7 +1836,7 @@ class TemplatesArticlesWidgetTest extends TemplatesIntonationTestCase {
 class TemplatesCmsListActionTest extends TemplatesIntonationTestCase {
   /** @test */
   public function dispatchShouldRenderSprechenSieDeutsh() {
-     $this->fixture('Class_Article',
+    $this->fixture('Class_Article',
                    ['id' => 6,
                     'titre' => 'Sprechen Sie Deutsch ?',
                     'contenu' => '<p>Ich ...</p>']);
@@ -2213,12 +2225,6 @@ class TemplatesRecordResumeDispatchTest extends TemplatesIntonationTestCase {
   }
 
 
-  /** @test */
-  public function navLinkToRecordResumeShoulBeActive() {
-    $this->assertXPath('//ul[contains(@class, "nav-tabs")]//li/a[contains(@href, "record/summary")][contains(@class, "active")]');
-  }
-
-
   /** @test */
   public function pageShouldBeHtml5Valid() {
     $this->assertHTML5();
@@ -2359,7 +2365,7 @@ class TemplatesDispatchNoticeAjaxTracksTest extends TemplatesIntonationTestCase
 
   /** @test */
   public function shouldDisplayAudio() {
-        $this->fixture('Class_TypeDoc',
+    $this->fixture('Class_TypeDoc',
                    ['id' => 8,
                     'label' => 'mp3',
                     'famille_id' => Class_CodifTypeDoc::SONORE
@@ -2496,7 +2502,7 @@ class TemplatesRecordDeleteReviewsActionTest extends TemplatesIntonationTestCase
                    ['id' => 2,
                     'clef_oeuvre' => 'PSYKO',
                    ]);
- }
+  }
 
 
   /** @test */
@@ -2574,6 +2580,23 @@ class TemplatesDispatchRecordAuthorTest extends TemplatesIntonationTestCase {
 
 
 
+class TemplatesDispatchRecordItemsTest extends TemplatesIntonationTestCase {
+
+  /** @test */
+  public function shouldRenderDescription() {
+    $record = $this->fixture('Class_Notice',
+                             ['id' => 456,
+                              'type_doc' => 8,
+                              'clef_oeuvre' => 'THE BOOK OF SOULS',
+                              'facettes' => 'G13 M12']);
+
+    $this->dispatch('/record/items/id/456/id_profil/72');
+    $this->assertXPath('//div');
+  }
+}
+
+
+
 class TemplatesDispatchNoticeajaxAuthorActionTest extends TemplatesIntonationTestCase {
 
   /** @test */
@@ -2768,17 +2791,17 @@ abstract class TemplatesIntonationAccountTestCase extends TemplatesIntonationTes
       ->getExemplaire()
       ->setTitre('Potter')
       ->setExemplaireOPAC($this->fixture('Class_Exemplaire',
-                                              ['id' => 967,
-                                               'code_barres' => 123,
-                                               'id_int_bib' => 1,
-                                               'id_origine' => 1234,
-                                               'zone995' => serialize([['clef' => 'a', 'valeur' => 'PotterItem']]),
-                                               'notice' => $this->fixture('Class_Notice',
-                                                                          ['id' => 889,
-                                                                           'titre_principal' => 'Potter',
-                                                                           'type_doc' => Class_TypeDoc::LIVRE,
-                                                                           'url_image' => 'https://monimage.org',
-                                                                           'unimarc' => '00577nam0 2200181   450 001001500000010001800015100004100033101000800074200010700082210003000189215001100219461002000230606002900250676000800279700004500287801005600332940000700388frOr1314913787  a9781408812792  a20140320                  0103        aEng1 aHarry Potter and the deathly hallowsdHarry Potter et les reliques de la mortfJoanne Kathleen Rowling  aLondrescBloomsburyd2010  a831 p. 1tHarry Potterv7  aAnglais (langue)2Rameau  a420 1aRowlingbJoanne Kathleenf1965-....4070  aFRbBibliothèque de l\'agglomération de Saint-Omer  apm'])]));
+                                         ['id' => 967,
+                                          'code_barres' => 123,
+                                          'id_int_bib' => 1,
+                                          'id_origine' => 1234,
+                                          'zone995' => serialize([['clef' => 'a', 'valeur' => 'PotterItem']]),
+                                          'notice' => $this->fixture('Class_Notice',
+                                                                     ['id' => 889,
+                                                                      'titre_principal' => 'Potter',
+                                                                      'type_doc' => Class_TypeDoc::LIVRE,
+                                                                      'url_image' => 'https://monimage.org',
+                                                                      'unimarc' => '00577nam0 2200181   450 001001500000010001800015100004100033101000800074200010700082210003000189215001100219461002000230606002900250676000800279700004500287801005600332940000700388frOr1314913787  a9781408812792  a20140320                  0103        aEng1 aHarry Potter and the deathly hallowsdHarry Potter et les reliques de la mortfJoanne Kathleen Rowling  aLondrescBloomsburyd2010  a831 p. 1tHarry Potterv7  aAnglais (langue)2Rameau  a420 1aRowlingbJoanne Kathleenf1965-....4070  aFRbBibliothèque de l\'agglomération de Saint-Omer  apm'])]));
 
     $potter
       ->parseExtraAttributes(['Dateretourprevue' => '29/10/1990',
@@ -3202,7 +3225,7 @@ class TemplatesIntonationDispatchAbonneAjouterASelectionTest extends TemplatesIn
 class TemplatesIntonationDispatchAbonneAjouterLeDocumentALaSelectionTest extends TemplatesIntonationAccountTestCase {
   /** @test */
   public function recordId89ShouldHaveBeenHadedToSelection2() {
-     $this->fixture('Class_Notice',
+    $this->fixture('Class_Notice',
                    ['id' => 89,
                     'titre_principal' => 'Neige',
                     'type_doc' => 2,
@@ -3408,7 +3431,7 @@ class TemplatesDispatchLibraryWidgetTest extends TemplatesIntonationTestCase {
   }
 
 
-    /** @test */
+  /** @test */
   public function annecyCalendarShouldRenderAgenda() {
     $this->dispatch('/opac/cms/calendar/id_module/library_1/id_profil/72');
     $this->assertXPath('//div', 'L\'agenda');
@@ -3687,3 +3710,179 @@ class TemplatesIntonationPromoteProfileTest extends TemplatesIntonationTestCase
     $this->assertEquals('Sauvegarde de : portail', Class_Profil::find(73)->getLibelle());
   }
 }
+
+
+
+class TemplatesDispatchEditFreeWidgetTest extends TemplatesIntonationTestCase {
+
+  public function setUp() {
+    parent::setUp();
+    $this->dispatch('/admin/widget/edit-widget/id/22/id_profil/72', true);
+  }
+
+
+  /** @test */
+  public function inputTitreTypeShouldBeText() {
+    $this->assertXpath('//input[@name="titre"][@type="text"]');
+  }
+}
+
+
+
+class TemplatesDispatchIntonationWithFreeTest extends TemplatesIntonationTestCase {
+
+  /** @test */
+  public function facebookImageShouldBePresent() {
+    $this->dispatch('/opac/index/index/id_profil/72', true);
+    $this->assertXPathContentContains('//div', 'Boite libre');
+  }
+}
+
+
+
+class TemplatesDispatchEditAuthorWidgetTest extends TemplatesIntonationTestCase {
+
+  public function setUp() {
+    parent::setUp();
+    $this->dispatch('/admin/widget/edit-widget/id/23/id_profil/72', true);
+  }
+
+
+  /** @test */
+  public function inputTitreTypeShouldBeText() {
+    $this->assertXpath('//input[@name="titre"][@type="text"]');
+  }
+}
+
+
+
+class TemplatesDispatchIntonationWithAuthorWidgetTest extends TemplatesIntonationTestCase {
+
+  /** @test */
+  public function rahanAuthorShouldBePresent() {
+    $this->fixture('Class_Notice',
+                   ['id' => 8,
+                    'type_doc' => Class_TypeDoc::LIVRE,
+                    'clef_alpha'=>'GAVROCHE_HUGO',
+                    'titre_principal' => 'Gavroche',
+                    'facettes' => 'A2408 A3 A666 G4 M6',
+                    'url_vignette' => 'gavroche.jpg']);
+
+    $this->fixture('Class_CodifAuteur',
+                   ['id' => 2408,
+                    'libelle' => 'Victor Hugo',
+                    'thumbnail_url' => 'http://wp/hugo.jpg']);
+
+    $this
+      ->onLoaderOfModel('Class_Notice')
+      ->whenCalled('getNoticesFromPreferences')
+      ->answers(Class_Notice::findAll());
+
+    $this->dispatch('/opac/index/index/id_profil/72', true);
+    $this->assertXPathContentContains('//div', 'Victor Hugo');
+  }
+}
+
+
+abstract class TemplatesIntonationWithAuthorTest extends TemplatesIntonationTestCase {
+
+  public function setUp() {
+    parent::setUp();
+    $unimarc = (new Class_NoticeUnimarc_Fluent)
+      ->zoneWithContent('001', '12345')
+
+      ->zoneWithChildren('200', ['f' => 'Iron Maiden'])
+
+      ->zoneWithChildren('461', ['t' => 'The book of souls']);
+
+    $this->fixture('Class_Notice',
+                   ['id' => 456,
+                    'unimarc' => $unimarc->render(),
+                    'type_doc' => 8,
+                    'clef_oeuvre' => 'THE BOOK OF SOULS',
+                    'facettes' => 'G13 M12']);
+
+    $this->fixture('Class_CodifAuteur',
+                   ['id' => 10,
+                    'libelle' => 'Iron Maiden',
+                    'formes' => 'IRONxMAIDEN']);
+  }
+}
+
+
+
+class TemplatesDispatchAuthorActionsTest extends TemplatesIntonationWithAuthorTest {
+
+  /** @test */
+  public function dispatchViewshouldDisplayAuthor() {
+    $this->dispatch('/author/view/id/10/id_profil/72');
+    $this->assertXPath('//div');
+  }
+
+
+  /** @test */
+  public function dispatchBiograpryShouldDisplayBiography() {
+    $this->dispatch('/author/biography/id/10/id_profil/72');
+    $this->assertXPath('//div');
+  }
+
+
+  /** @test */
+  public function dispatchRecordsShouldRenderBookOfSouls() {
+    $this->dispatch('/author/records/id/10/id_profil/72');
+    $this->assertXPath('//div');
+  }
+
+
+  /** @test */
+  public function dispatchCollaborationsShouldRenderCollaborations() {
+    $this->dispatch('/author/collaborations/id/10/id_profil/72');
+    $this->assertXPath('//div');
+  }
+
+
+  /** @test */
+  public function dispatchInterviewsShouldRenderInterviews() {
+    $this->dispatch('/author/interviews/id/10/id_profil/72');
+    $this->assertXPath('//div');
+  }
+
+
+  /** @test */
+  public function dispatchYoutubeChanShouldRenderYoutubeChan() {
+    $this->dispatch('/author/youtube-chan/id/10/id_profil/72');
+    $this->assertXPath('//div');
+  }
+}
+
+
+
+class TemplatesDispatchDomainWidgetTest extends TemplatesIntonationTestCase {
+
+  public function setUp() {
+    parent::setUp();
+    $this->dispatch('/admin/widget/edit-widget/id/24/id_profil/72', true);
+  }
+
+
+  /** @test */
+  public function inputTitreTypeShouldBeText() {
+    $this->assertXpath('//input[@name="titre"][@type="text"]');
+  }
+}
+
+
+
+class TemplatesDispatchIntonationWithDomainWidgetTest extends TemplatesIntonationTestCase {
+
+  /** @test */
+  public function facebookImageShouldBePresent() {
+    $this->fixture('Class_Catalogue',
+                   ['id' => 3,
+                    'libelle' => 'Jeunesse',
+                    'parent_id' => 0]);
+
+    $this->dispatch('/opac/index/index/id_profil/72', true);
+    $this->assertXPathContentContains('//div', 'Boite domaines');
+  }
+}