diff --git a/application/modules/admin/views/scripts/index/adminvar.phtml b/application/modules/admin/views/scripts/index/adminvar.phtml
index f902a7f982c565f3a5a6e301279931c013727594..64a2ab2d0eb11a6c7dab0441948572bff5251a61 100644
--- a/application/modules/admin/views/scripts/index/adminvar.phtml
+++ b/application/modules/admin/views/scripts/index/adminvar.phtml
@@ -5,54 +5,45 @@ Class_ScriptLoader::getInstance()
 'iDisplayLength': -1,
 'bPaginate': false,
 'columnDefs' : [
-	{'orderable': false, 'targets': 2}
+  {'orderable': false, 'targets': 2}
 ]
 })")
-->loadJQueryUI()
-->addJQueryReady('$(document).tooltip({
-items: "[data-tooltip]",
-content: function() {
-	var element = $(this);
-	var html = element.find("span").html();
-  return (html.trim() != "") ? html : "Description non disponible";
-},
-position: { my: "left top+30", at: "left top"},
-hide: {duration: 1000}
-})');
+->loadJQueryUI();
 ?>
 
 <table id="adminvars">
-	<thead>
+  <thead>
     <tr class="soustitre">
       <th><?php echo $this->_('Clef'); ?></th>
       <th><?php echo $this->_('Valeur'); ?></th>
       <th><?php echo $this->_('action'); ?></th>
     </tr>
-	</thead>
-	<tbody>
-		<?php
-		$ligne = 0;
-		foreach($this->vars as $var) {
-			$ligne ++ ;
-			?>
-			<tr class="<?php echo ($ligne & 1) ? "first" : "second";?>" data-tooltip="">
-				<td style="vertical-align:top;" ><?php echo $var->getClef();?>
-					<span style="display:none;">
-						<?php echo $var->getDescription();?>
-					</span>
-				</td>
-				<td>
-					<?php
-					echo ($renderer = $var->getRenderer()) ?
-								$renderer($var->getValeur(), $this) : $this->adminVar($var);
-					?>
-				</td>
-				<td style="width:2%;text-align:center">
-					<a data-popup="true" href="<?php echo $this->url(['controller' => 'index',
-																														'action' => 'adminvaredit',
-																														'cle' => $var->getClef()])?>"><?php echo $this->boutonIco("type=edit");?></a>
-				</td>
-			</tr>
-		<?php	} ?>
+  </thead>
+  <tbody>
+    <?php
+    $ligne = 0;
+    foreach($this->vars as $var) {
+      $ligne ++ ;
+      $edit_url = $this->url(['controller' => 'index',
+                              'action' => 'adminvaredit',
+                              'cle' => $var->getClef()]);
+      ?>
+      <tr class="<?php echo ($ligne & 1) ? "first" : "second";?>">
+        <td style="vertical-align:top;" >
+          <?php echo $var->getDescription();?>
+          <br><sub><a data-popup="true" href="<?php echo $edit_url; ?>">
+            <?php echo $var->getClef();?></a></sub>
+        </td>
+        <td>
+          <?php
+          echo ($renderer = $var->getRenderer()) ?
+                $renderer($var->getValeur(), $this) : $this->adminVar($var);
+          ?>
+        </td>
+        <td style="width:2%;text-align:center">
+          <a data-popup="true" href="<?php echo $edit_url; ?>"><?php echo $this->boutonIco("type=edit");?></a>
+        </td>
+      </tr>
+    <?php } ?>
 </tbody>
 </table>
diff --git a/cosmogramme/php/_init.php b/cosmogramme/php/_init.php
index e6e704e0feeb9b3733e6f45e1cccc1857873db26..dcd5895a549aae6ff38388ecfabbb1f53252dc5b 100644
--- a/cosmogramme/php/_init.php
+++ b/cosmogramme/php/_init.php
@@ -1,7 +1,7 @@
 <?php
 error_reporting(E_ERROR | E_PARSE);
 
-define("PATCH_LEVEL","261");
+define("PATCH_LEVEL","264");
 
 define("APPLI","cosmogramme");
 define("COSMOPATH", "/var/www/html/vhosts/opac2/www/htdocs");
diff --git a/cosmogramme/sql/patch/patch_261.php b/cosmogramme/sql/patch/patch_264.php
similarity index 100%
rename from cosmogramme/sql/patch/patch_261.php
rename to cosmogramme/sql/patch/patch_264.php
diff --git a/library/Class/AdminVar.php b/library/Class/AdminVar.php
index b4a9c0b16c9a86069bb373d00f16a2b1f48dbaf0..4adaa2fbd7ebcd1c77d8b97435ce546ec27e1c33 100644
--- a/library/Class/AdminVar.php
+++ b/library/Class/AdminVar.php
@@ -21,696 +21,763 @@
 
 
 class Class_AdminVarLoader extends Storm_Model_Loader {
-	use Trait_Translator;
-
-	/** @var array */
-	protected $_knownVars;
-
-
-	/**
-	 * @param string $name
-	 * @return mixed
-	 */
-	public function get($name) {
-		$var = Class_AdminVar::find($name);
-		if ($var == null)
-			return null;
-		return $var->getValeur();
-	}
-
-
-	public function getValueOrDefault($name) {
-		return (($var = Class_AdminVar::find($name)) && $var->getValeur()) ?
-			$var->getValeur() : Class_AdminVar::getStaticMeta($name)->getValue();
-	}
-
-
-	/**
-	 * @param string $name
-	 * @param mixed $value
-	 */
-	public function set($name, $value) {
-		if (null === ($instance = Class_AdminVar::find($name))) {
-			$instance = Class_AdminVar::newInstance()->setClef($name);
-		}
-
-		$instance
-			->setValeur($value)
-			->save();
-
-		return $instance->cache();
-	}
-
-
-	public function getDefaultLanguage() {
-		return 'fr';
-	}
-
-
-	public function findAllByController($controller) {
-		$mapping = ['newsletter' => ['NEWSLETTER_ID_PROFIL',
-																 'NEWSLETTER_UNSUBSCRIBE_TEXT',
-																 'NEWSLETTER_UNSUBSCRIBE_HTML']];
-
-		return array_key_exists($controller, $mapping)
-			? array_map(
-									function($clef) {
-										return ($var = Class_AdminVar::find($clef)) ?
-											$var : Class_AdminVar::set($clef, '');
-									},
-									$mapping[$controller])
-			: [];
-	}
-
-
-	/**
-	 * @return array
-	 */
-	public function getKnownVars() {
-		if (null === $this->_knownVars)
-			$this->_knownVars =
-				['AVIS_MAX_SAISIE' => Class_AdminVar_Meta::newDefault($this->_('Nombre de caractères maximum autorisé à saisir dans les avis.')),
-				 'AVIS_MIN_SAISIE' => Class_AdminVar_Meta::newDefault($this->_('Nombre de caractères minimum autorisé à saisir dans les avis.')),
-				 'BLOG_MAX_NB_CARAC' => Class_AdminVar_Meta::newDefault($this->_('Nombre de caractères maximum à afficher dans le bloc critiques.')),
-				 'NB_AFFICH_AVIS_PAR_AUTEUR'  => Class_AdminVar_Meta::newDefault($this->_('Nombre d\'avis maximum à afficher par utilisateur.')),
-				 'CLEF_GOOGLE_MAP' => Class_AdminVar_Meta::newDefault($this->_('Clef d\'activation pour le plan d\'accès google map. <a target="_blank" href="http://code.google.com/apis/maps/signup.html">Obtenir la clé google map</a>')),
-				 'MODO_AVIS' => Class_AdminVar_Meta::newOnOff($this->_('Modération des avis des lecteurs.<br /> Désactivé : affichage sans attente de validation<br /> Activé : affichage seulement après validation.')),
-				 'MODO_AVIS_BIBLIO' => Class_AdminVar_Meta::newOnOff($this->_('Modération des avis des bibliothèquaires.<br />  Désactivé: affichage sans attente de validation<br /> Activé: affichage seulement après validation')),
-				 'AVIS_BIB_SEULEMENT' => Class_AdminVar_Meta::newOnOff($this->_('Désactivé: les lecteurs peuvent donner leur avis. <br /> Activé: seuls les bibliothèquaires peuvent donner leur avis')),
-				 'MODO_BLOG' => Class_AdminVar_Meta::newOnOff($this->_('Désactivé: ne requiert pas d\'identification pour saisir des  commentaires. <br /> Activé: requiert l\'identification pour saisir des commentaires.')),
-				 'REGISTER_OK' => Class_AdminVar_Meta::newEncodedData($this->_('Texte visible par l\'internaute après son inscription.')),
-				 'RESA_CONDITION' => Class_AdminVar_Meta::newEncodedData($this->_('Texte visible après l\'envoi d\'e-mail de demande de réservation.')),
-				 'SITE_OK' => Class_AdminVar_Meta::newOnOff($this->_('Désactiver pour passer le site en maintenance')),
-				 'ID_BIBLIOSURF' => Class_AdminVar_Meta::newDefault($this->_('Nom de la bibliothèque chez bibliosurf (en minuscules)')),
-				 'JS_STAT' => Class_AdminVar_Meta::newRawText($this->_('Javascript code for statistics')),
-				 'ID_READ_SPEAKER' => Class_AdminVar_Meta::newDefault($this->_('Numéro de client Read Speaker <a target="_blank" href="http://webreader.readspeaker.com">http://webreader.readspeaker.com</a>')),
-				 'BLUGA_API_KEY' => Class_AdminVar_Meta::newDefault($this->_('Clé API Bluga Webthumb <a target="_blank" href="http://webthumb.bluga.net/home">http://webthumb.bluga.net/home</a>')),
-				 'AIDE_FICHE_ABONNE' => Class_AdminVar_Meta::newDefault($this->_('Texte d\'aide affiché dans la fiche abonné')),
-				 'INTERDIRE_ENREG_UTIL' => Class_AdminVar_Meta::newDefault($this->_('Supprime l\'affichage du lien d\'enregistrement dans les différents formulaires de connexion et interdit l\'enregistrement d\'utilisateurs')),
-				 'LANGUES' => Class_AdminVar_Meta::newMultiInput($this->_('Liste des codes langue utilisées en plus du français séparées par des ;. Exemple: en;ro;es')),
-				 'CACHE_ACTIF' => Class_AdminVar_Meta::newOnOff(implode('<br/>',
-																																['Activer le cache des boîtes (meilleure performance mais mise à jour toutes les ' . CACHE_LIFETIME / 60 . 'mn)',
-																																 '<a href="' . Class_Url::baseUrl() . '/admin/index/clearcache" >Vider le cache</a>'])),
-				 'WORKFLOW' => Class_AdminVar_Meta::newDefault(implode('<br/>',
-																															 ['Activer ou désactiver la gestion des validations des articles',
-																																'Vide ou 0 = Désactivé, 1 = Activé avec les statuts par défaut, JSON = Activé avec des statuts de validation supplémentaire',
-																																'Exemple JSON :',
-																																'[{"id":10, "label":"À valider niveau 2"}, {"id":11, "label":"À valider niveau 3"}]',
-																																'Les identifiants 1 à 5 sont réservés']),
-																											 ['validate' => 'ZendAfi_Validate_WorkflowVar',
-																												'after_save' => 'setWorkflowPermissions']),
-				 'WORKFLOW_TEXT_MAIL_ARTICLE_PENDING' => Class_AdminVar_Meta::newDefault($this->_('Contenu de l\'email de notification d\'article en attente de validation')),
-				 'WORKFLOW_TEXT_MAIL_ARTICLE_REFUSED' => Class_AdminVar_Meta::newDefault($this->_('Contenu de l\'email de notification de refus d\'un article à valider')),
-				 'WORKFLOW_TEXT_MAIL_ARTICLE_VALIDATED' => Class_AdminVar_Meta::newDefault($this->_('Contenu de l\'email de notification de validation d\'un article')),
-				 'BIBNUM' => Class_AdminVar_Meta::newOnOff($this->_('Activer ou désactiver la bibliothèque numérique')),
-				 'FORMATIONS' => Class_AdminVar_Meta::newOnOff($this->_('Activer ou désactiver le module formation')),
-				 'VODECLIC_KEY' => Class_AdminVar_Meta::newDefault($this->_('Clé de sécurité Vodeclic')),
-				 'VODECLIC_ID' => Class_AdminVar_Meta::newDefault($this->_('Identifiant partenaire Vodeclic')),
-				 'VODECLIC_BIB_ID' => Class_AdminVar_Meta::newDefault($this->_('Identifiant code bibliothèque Vodeclic')),
-				 'CVS_BMKEY' => Class_AdminVar_Meta::newDefault($this->_('Paramétrage CVS')),
-				 'CVS_BMID' => Class_AdminVar_Meta::newDefault($this->_('Paramétrage CVS')),
-				 'CVS_SOURCENAME' => Class_AdminVar_Meta::newDefault($this->_('Paramétrage CVS')),
-				 'CVS_SOURCEID' => Class_AdminVar_Meta::newDefault($this->_('Paramétrage CVS')),
-				 'CVS_SOURCEKEY' => Class_AdminVar_Meta::newDefault($this->_('Paramétrage CVS')),
-				 'CVS_SOURCEPASSWORD' => Class_AdminVar_Meta::newDefault($this->_('Paramétrage CVS')),
-				 'CVS_LOGINTEST' => Class_AdminVar_Meta::newDefault($this->_('Paramétrage CVS')),
-				 'NUMILOG_URL' => Class_AdminVar_Meta::newDefault($this->_('Paramétrage <a href="http://forge.afi-sa.fr/projects/opac3/wiki/Ressources_externes_enrichissements#Numilog">Numilog</a>')),
-				 'NUMILOG_OAI_URL' => Class_AdminVar_Meta::newDefault($this->_('Paramétrage <a href="http://forge.afi-sa.fr/projects/opac3/wiki/Ressources_externes_enrichissements#Numilog">Numilog</a>')),
-				 'NUMILOG_OAI_IDBIB' => Class_AdminVar_Meta::newDefault($this->_('Paramétrage <a href="http://forge.afi-sa.fr/projects/opac3/wiki/Ressources_externes_enrichissements#Numilog">Numilog</a>')),
-				 'CYBERLIBRIS_URL' => Class_AdminVar_Meta::newDefault($this->_('Adresse du serveur OAI Cyberlibris')),
-				 'CYBERLIBRIS_ID' => Class_AdminVar_Meta::newDefault($this->_('Identifiant SSO Cyberlibris')),
-				 'OAI_SERVER' => Class_AdminVar_Meta::newOnOff($this->_('Activation du serveur OAI')),
-				 'PACK_MOBILE' => Class_AdminVar_Meta::newOnOff($this->_('Activation des fonctions avancées du téléphone')),
-				 'ARTE_VOD_LOGIN' => Class_AdminVar_Meta::newDefault($this->_('Login ARTE VOD')),
-				 'ARTE_VOD_KEY' => Class_AdminVar_Meta::newDefault($this->_('Clé ARTE VOD')),
-				 'ARTE_VOD_SSO_KEY' => Class_AdminVar_Meta::newDefault($this->_('Clé ARTE VOD Single Sign-On')),
-				 'BABELTHEQUE_JS' => Class_AdminVar_Meta::newDefault($this->_('URL du javascript Babelthèque à insérer dans l\'OPAC')),
-				 'MULTIMEDIA_KEY' => Class_AdminVar_Meta::newDefault($this->_('Clé publique pour le cryptage des données AFI-Multimédia')),
-				 'WEBKIOSK_KEY' => Class_AdminVar_Meta::newDefault($this->_('Clé publique pour le cryptage des données Aesis Webkiosk')),
-				 'WEBKIOSK_RESERVATION_URL' => Class_AdminVar_Meta::newDefault($this->_('URL d\'accès à l\'interface de réservation des postes Aesis Webkiosk')),
-				 'CSS_EDITOR' => Class_AdminVar_Meta::newDefault(''),
-				 'CMS_FORMULAIRES' => Class_AdminVar_Meta::newOnOff($this->_('Activation des formulaires')),
-				 'MENU_BOITE' => Class_AdminVar_Meta::newOnOff($this->_('Activation des boîtes dans les menus')),
-				 'INTERDIRE_MODIF_FICHE_ABONNE' => Class_AdminVar_Meta::newOnOff($this->_('Interdire la modification de la fiche abonne')),
-				 'ROOT_URL_ECOUTE' => Class_AdminVar_Meta::newDefault(''),
-				 'URL_TYPO3' => Class_AdminVar_Meta::newDefault($this->_('Url d\'import d\'un agenda TYPO3')),
-				 'CHAMPS_FICHE_UTILISATEUR' => Class_AdminVar_Meta::newMultiInput($this->_('Liste des champs que l\'utilisateur peux modifier. <br/>Ex: nom;prenom;pseudo;adresse;<br/>code_postal;ville;mail;is_contact_mail;<br/>telephone;is_contact_telephone;')),
-				 'FACETTE_PCDM4_LIBELLE' => Class_AdminVar_Meta::newDefault($this->_('Libellé pour la PCDM4')),
-				 'FACETTE_DEWEY_LIBELLE' => Class_AdminVar_Meta::newDefault($this->_('Libellé pour la Dewey')),
-				 'FACETTE_TYPE_DOC_LIBELLE' => Class_AdminVar_Meta::newDefault(''),
-				 'FACETTE_LANGUE_LIBELLE' => Class_AdminVar_Meta::newDefault(''),
-				 'FACETTE_GENRE_LIBELLE' => Class_AdminVar_Meta::newDefault(''),
-				 'FACETTE_SITE_LIBELLE' => Class_AdminVar_Meta::newDefault(''),
-				 'FACETTE_SECTION_LIBELLE' => Class_AdminVar_Meta::newDefault(''),
-				 'FACETTE_BIBLIOTHEQUE_LIBELLE' => Class_AdminVar_Meta::newDefault(''),
-				 'FACETTE_AUTEUR_LIBELLE' => Class_AdminVar_Meta::newDefault(''),
-				 'FACETTE_INTERET_LIBELLE' => Class_AdminVar_Meta::newDefault(''),
-				 'FACETTE_MATIERE_LIBELLE' => Class_AdminVar_Meta::newDefault(''),
-				 'FACETTE_TAG_LIBELLE' => Class_AdminVar_Meta::newDefault(''),
-				 'AFFICHER_DISPONIBILITE_SUR_RECHERCHE' => Class_AdminVar_Meta::newOnOff($this->_('Activation de la disponibilite dans le resultat de recherche.')),
-				 'NOM_DOMAINE' => Class_AdminVar_Meta::newDefault($this->_('Nom de domaine principal de l\'OPAC, ex: monopac.macommune.fr')),
-				 'TOUTAPPRENDRE_BIB_ID' => Class_AdminVar_Meta::newDefault($this->_('Paramétrage <a href="http://forge.afi-sa.fr/projects/opac3/wiki/Ressources_externes_enrichissements#Tout-Apprendre">ToutApprendre</a>')),
-				 'TOUTAPPRENDRE_KEY' => Class_AdminVar_Meta::newDefault($this->_('Paramétrage <a href="http://forge.afi-sa.fr/projects/opac3/wiki/Ressources_externes_enrichissements#Tout-Apprendre">ToutApprendre</a>')),
-				 'NUMERIQUE_PREMIUM_URL' => Class_AdminVar_Meta::newDefault(''),
-				 'MUSICME_URL' => Class_AdminVar_Meta::newDefault(''),
-				 'MUSICME_BIB_ID' => Class_AdminVar_Meta::newDefault(''),
-				 'DATE_LAST_FULL_INTEGRATION_USERS' => Class_AdminVar_Meta::newDefault($this->_('Date du dernier import total des abonnés (modifié par cosmogramme)')),
-				 'BOITE_PANIER_AUTO' => Class_AdminVar_Meta::newOnOff($this->_('Ajouter automatiquement une boîte panier dans la division flottante')),
-				 'EXTRA_SKIN_PATH' => Class_AdminVar_Meta::newDefault($this->_('Chemin vers les skins personnalisées, relatif à %s', Class_Profil_Skin::EXTRA_PATH)),
-				 'ENABLE_COLLABORATIVE_BROWSING' => Class_AdminVar_Meta::newOnOff($this->_('Activation de la navigation collaborative')),
-				 'KOHA_MULTI_SITES' => Class_AdminVar_Meta::newOnOff($this->_('WS KOHA : Reservation d\'exemplaires pour les multi sites')),
-				 'LECTURA_DOMAIN' => Class_AdminVar_Meta::newDefault($this->_('Domaine utilisée par le serveur lectura pour authentification')),
-				 'LEKIOSK_ID' => Class_AdminVar_Meta::newDefault($this->_('Identifiant fournit par lekiosk.com')),
-				 'TEXT_REPLACEMENTS' => Class_AdminVar_Meta::newRawText($this->_('Remplacement de textes à la volée. <br/>Ex:<br/>Panier;Sélection<br/>Vous avez %%d paniers;Vous avez %%d sélections')),
-				 'ARTICLES_LIST_MODE' => Class_AdminVar_Meta::newOnOff($this->_('Le gestionnaire de contenu affiche les articles sous forme de liste paginée au lieu de d\'une arborescence. Cet affichage est adapté lorsque le nombre d\'article devient trop important')),
-				 'ALBUMS_LIST_MODE' => Class_AdminVar_Meta::newOnOff($this->_('Le gestionnaire de contenu affiche les albums sous forme de liste paginée au lieu de d\'une arborescence. Cet affichage est adapté lorsque le nombre d\'albums devient trop important')),
-				 'DILICOM_PNB' => Class_AdminVar_Meta::newOnOff($this->_('Activation du PNB Dilicom')),
-				 'DILICOM_PNB_GLN_COLLECTIVITE' => Class_AdminVar_Meta::newDefault($this->_('Gln de la collectivité, il est fourni par Dilicom.')),
-				 'DILICOM_PNB_PWD_COLLECTIVITE' => Class_AdminVar_Meta::newDefault($this->_('Mot de passe de la collectivité, il est fourni par Dilicom.')),
-				 'DILICOM_PNB_GLN_CONTRACTOR' => Class_AdminVar_Meta::newDefault($this->_('Contracteur du PNB Dilicom')),
-				 'DILICOM_PNB_SERVER_URL' => Class_AdminVar_Meta::newDefault($this->_('Url du serveur PNB Dilicom')),
-				 'DILICOM_PNB_IP_ADRESSES' => Class_AdminVar_Meta::newMultiInput($this->_('Liste des adresses IP publiques autorisées pour la consultation des documents'),
-																																				 ['validate' => 'ZendAfi_Validate_Dilicom_IpAdresses']),
-				 'MYCOW_EID' => Class_AdminVar_Meta::newDefault($this->_('Clé d\'identification MyCOW.EU pour le portail. Cette clé doit être fournie par MyCOW.EU. Elle active la ressource numérique dans le portail.')),
-				 'ONEDTOUCH_URL' => Class_AdminVar_Meta::newDefault($this->_('Adresse du serveur OAI 1D touch')),
-				 'ORPHEA_URL' => Class_AdminVar_Meta::newDefault($this->_('Adresse du serveur Orphea')),
-				 'ORPHEA_USERNAME' => Class_AdminVar_Meta::newDefault($this->_('Nom de l\'utilisateur Orphea')),
-				 'ORPHEA_PWD' => Class_AdminVar_Meta::newDefault($this->_('Mot de passe de l\'utilisateur Orphea')),
-				 'ORPHEA_LANGUAGE' => Class_AdminVar_Meta::newDefault($this->_('Paramètre permettant de choisir la langue des des ressources. La liste des codes disponibles se trouve à cette adresse http://help.orphea.com/43/gateway/#language_identifiers')),
-				 'PLANETNEMO' => Class_AdminVar_Meta::newOnOff($this->_('Activation de la ressource numérique PlanetNemo')),
-				 'KIDILANGUES_KEY' => Class_AdminVar_Meta::newDefault($this->_('Clé d\'encodage Kidilangues pour le portail. Cette clé doit être fournie par Kidilangues.')),
-				 'KIDILANGUES_ID' => Class_AdminVar_Meta::newDefault($this->_('Clé d\'identification Kidilangues pour le portail. Cette clé doit être fournie par Kidilangues.')),
-				 'KIDILANGUES_LOGIN' => Class_AdminVar_Meta::newDefault($this->_('Login du portail fourni par Kidilangues.')),
-				 'KIDILANGUES_PWD' => Class_AdminVar_Meta::newDefault($this->_('Password du portail fourni par Kidilangues.')),
-				 'JAMENDO_CLIENT_ID' => Class_AdminVar_Meta::newDefault($this->_('ID client Jamendo')),
-				 'NEWSLETTER_ID_PROFIL' => Class_AdminVar_Meta::newCombo($this->_('Profil de la page de désinscription<br/>Par défaut : page d\'accueil du portail'),
-																																 ['options' => ['selectOptions' => $this->_getProfilsOptions()],
-																																	'renderer' => $this->_getProfilRenderer()]),
-				 'NEWSLETTER_UNSUBSCRIBE_TEXT' => Class_AdminVar_Meta::newDefault($this->_('Texte de désinscription version texte<br/>Le lien est inséré à la place de {{URL}}<br/>Par défaut : Lien pour se désinscrire de cette lettre d\'information : {{URL}}'),
-																																					['value' => $this->_('Lien pour se désinscrire de cette lettre d\'information : {{URL}}')]),
-				'NEWSLETTER_UNSUBSCRIBE_HTML' => Class_AdminVar_Meta::newDefault($this->_('Texte de désinscription version HTML<br/>Le lien de désinscription est appliqué sur tout ce texte<br/>Par défaut : Je ne veux plus recevoir cette lettre d\'information'),
-																																				 ['value' => $this->_('Je ne veux plus recevoir cette lettre d\'information')]),
-				 'PREMIERCHAPITRE_BIB_ID' => Class_Adminvar_Meta::newDefault($this->_('Premier Chapitre : identifiant de la bibliothèque')),
-				'PREMIERCHAPITRE_BMID' => Class_Adminvar_Meta::newDefault($this->_('Premier Chapitre : identifiant de connexion')),
-				'PREMIERCHAPITRE_BMKEY' => Class_Adminvar_Meta::newDefault($this->_('Premier Chapitre : mot de passe'))
-				];
-
-		return $this->_knownVars;
-	}
-
-
-	protected function _getProfilsOptions() {
-		$multioptions = ['' => ''];
-		$ids = [];
-		foreach(Class_Profil::getProfilsByBib('ALL', 'ALL') as $opt_group => $profils) {
-			$options = [];
-			foreach($profils as $profil) {
-				$options[$profil->getId()] = $profil->getLibelle();
-				$ids[] = $profil->getId();
-			}
-			$multioptions[$opt_group] = $options;
-		}
-
-		return ['label' => 'Profil',
-						'multioptions' => $multioptions,
-						'registerInArrayValidator' => false,
-						'validators' => [['InArray', true, [$ids]]]];
-	}
-
-
-	protected function _getProfilRenderer() {
-		return function($value, $view) {
-			if (!$profil = Class_Profil::find($value))
-				return '';
-
-			$library = ($profil->isInPortail()) ?
-				$view->_('Portail') :
-				$profil->getBibLibelle();
-
-			return $view->escape(implode(' > ', array_merge([$library], $profil->getPathParts())));
-		};
-	}
-
-
-	/** @category testing */
-	public function resetKnownVars() {
-		$this->_knownVars = null;
-	}
-
-
-	public function getLangues() {
-		if (!$langues_value = $this->get('LANGUES'))
-			return [];
-
-		$langues = array(Class_AdminVar::getDefaultLanguage());
-
-		foreach(explode(';', strtolower($langues_value)) as $langue)
-			$langues []= trim($langue);
-		return array_unique(array_filter($langues));
-	}
-
-
-	public function getLanguesWithoutDefault() {
-		return array_diff(Class_AdminVar::getLangues(), array(Class_AdminVar::getDefaultLanguage()));
-	}
-
-
-	/**
-	 * @return bool
-	 */
-	public function isTranslationEnabled() {
-		return count(Class_AdminVar::getLangues()) > 1;
-	}
-
-
-	/**
-	 * @return bool
-	 */
-	public function isModuleEnabled($name) {
-		if (!$value = Class_AdminVar::get($name)) {
-			return false;
-		}
-
-		return (1 == (int)$value);
-	}
+  use Trait_Translator;
+
+  /** @var array */
+  protected $all_vars;
+
+
+  /**
+   * @param string $name
+   * @return mixed
+   */
+  public function get($name) {
+    $var = Class_AdminVar::find($name);
+    if ($var == null)
+      return null;
+    return $var->getValeur();
+  }
+
+
+  public function getValueOrDefault($name) {
+    return (($var = Class_AdminVar::find($name)) && ('' !== $var->getValeur())) ?
+      $var->getValeur() : Class_AdminVar::getStaticMeta($name)->getValue();
+  }
+
+
+  /**
+   * @param string $name
+   * @param mixed $value
+   */
+  public function set($name, $value) {
+    if (null === ($instance = Class_AdminVar::find($name))) {
+      $instance = Class_AdminVar::newInstance()->setClef($name);
+    }
+
+    $instance
+      ->setValeur($value)
+      ->save();
+
+    return $instance->cache();
+  }
+
+
+  public function getDefaultLanguage() {
+    return 'fr';
+  }
+
+
+  public function filterByUserRole($variables = []) {
+    $user_level = 0;
+
+    if (Class_Users::hasIdentity())
+      $user_level = Class_Users::getIdentity()->getRoleLevel();
+
+    return array_filter($variables, function($var) use($user_level) {
+      return $var->matchRoleLevel($user_level);
+    });
+  }
+
+
+  public function findAllByController($controller) {
+
+
+    return isset($this->knownVars()[$controller])
+      ? self::filterByUserRole(array_map(
+                  function($clef) {
+                    return ($var = Class_AdminVar::find($clef)) ?
+                      $var : Class_AdminVar::set($clef, '');
+                  },
+                                         array_keys($this->knownVars()[$controller])))
+      : [];
+  }
+
+
+  public function knownVars() {
+    if (null !== $this->all_vars)
+      return $this->all_vars;
+
+    return $this->all_vars=
+      [
+       'avis' => [
+                  'AVIS_MAX_SAISIE' => Class_AdminVar_Meta::newDefault($this->_('Nombre de caractères maximum autorisé à saisir dans les avis.')),
+                  'AVIS_MIN_SAISIE' => Class_AdminVar_Meta::newDefault($this->_('Nombre de caractères minimum autorisé à saisir dans les avis.')),
+                  'BLOG_MAX_NB_CARAC' => Class_AdminVar_Meta::newDefault($this->_('Nombre de caractères maximum à afficher dans le bloc critiques.'))],
+       'modo' => [
+                  'MODO_AVIS' => Class_AdminVar_Meta::newOnOff($this->_('Modération des avis des lecteurs.<br /> Désactivé : affichage sans attente de validation<br /> Activé : affichage seulement après validation.')),
+                  'MODO_AVIS_BIBLIO' => Class_AdminVar_Meta::newOnOff($this->_('Modération des avis des bibliothèquaires.<br />  Désactivé: affichage sans attente de validation<br /> Activé: affichage seulement après validation')),
+                  'AVIS_BIB_SEULEMENT' => Class_AdminVar_Meta::newOnOff($this->_('Désactivé: les lecteurs peuvent donner leur avis. <br /> Activé: seuls les bibliothèquaires peuvent donner leur avis')),
+                  'MODO_BLOG' => Class_AdminVar_Meta::newOnOff($this->_('Désactivé: ne requiert pas d\'identification pour saisir des  commentaires. <br /> Activé: requiert l\'identification pour saisir des commentaires.')),
+                  'MAX_DAY_INVALID_MEMBRE' => Class_AdminVar_Meta::newDefault($this->_('Nombre de jours de validité des nouvelles inscriptions sur le site')),
+       ],
+       'global' => [
+                    'NB_AFFICH_AVIS_PAR_AUTEUR'  => Class_AdminVar_Meta::newDefault($this->_('Nombre d\'avis maximum à afficher par utilisateur.')),
+                    'CLEF_GOOGLE_MAP' => Class_AdminVar_Meta::newDefault($this->_('Clef d\'activation pour le plan d\'accès google map. <a target="_blank" href="http://code.google.com/apis/maps/signup.html">Obtenir la clé google map</a>')),
+                    'REGISTER_OK' => Class_AdminVar_Meta::newEncodedData($this->_('Texte visible par l\'internaute après son inscription.')),
+                    'RESA_CONDITION' => Class_AdminVar_Meta::newEncodedData($this->_('Texte visible après l\'envoi d\'e-mail de demande de réservation.')),
+                    'SITE_OK' => Class_AdminVar_Meta::newOnOff($this->_('Désactiver pour passer le site en maintenance')),
+                    'ID_BIBLIOSURF' => Class_AdminVar_Meta::newDefault($this->_('Nom de la bibliothèque chez bibliosurf (en minuscules)'))->bePrivate(),
+                    'JS_STAT' => Class_AdminVar_Meta::newRawText($this->_('Javascript code for statistics')),
+                    'ID_READ_SPEAKER' => Class_AdminVar_Meta::newDefault($this->_('Numéro de client Read Speaker <a target="_blank" href="http://webreader.readspeaker.com">http://webreader.readspeaker.com</a>')),
+                    'BLUGA_API_KEY' => Class_AdminVar_Meta::newDefault($this->_('Clé API Bluga Webthumb <a target="_blank" href="http://webthumb.bluga.net/home">http://webthumb.bluga.net/home</a>')),
+                    'AIDE_FICHE_ABONNE' => Class_AdminVar_Meta::newDefault($this->_('Texte d\'aide affiché dans la fiche abonné')),
+                    'INTERDIRE_ENREG_UTIL' => Class_AdminVar_Meta::newDefault($this->_('Supprime l\'affichage du lien d\'enregistrement dans les différents formulaires de connexion et interdit l\'enregistrement d\'utilisateurs')),
+                    'LANGUES' => Class_AdminVar_Meta::newMultiInput($this->_('Liste des codes langue utilisées en plus du français séparées par des ;. Exemple: en;ro;es')),
+                    'CACHE_ACTIF' => Class_AdminVar_Meta::newOnOff(implode('<br/>',
+                                                                           ['Activer le cache des boîtes (meilleure performance mais mise à jour toutes les ' . CACHE_LIFETIME / 60 . 'mn)',
+                                                                            '<a href="' . Class_Url::baseUrl() . '/admin/index/clearcache" >Vider le cache</a>']))->bePrivate(),
+
+                    'FORMATIONS' => Class_AdminVar_Meta::newOnOff($this->_('Activer ou désactiver le module formation'))->bePrivate(),
+
+                    'BABELTHEQUE_JS' => Class_AdminVar_Meta::newDefault($this->_('URL du javascript Babelthèque à insérer dans l\'OPAC'))->bePrivate(),
+                    'MULTIMEDIA_KEY' => Class_AdminVar_Meta::newDefault($this->_('Clé publique pour le cryptage des données AFI-Multimédia')),
+
+                    'WEBKIOSK_KEY' => Class_AdminVar_Meta::newDefault($this->_('Clé publique pour le cryptage des données Aesis Webkiosk'))->bePrivate(),
+                    'WEBKIOSK_RESERVATION_URL' => Class_AdminVar_Meta::newDefault($this->_('URL d\'accès à l\'interface de réservation des postes Aesis Webkiosk'))->bePrivate(),
+
+                    'MENU_BOITE' => Class_AdminVar_Meta::newOnOff($this->_('Activation des boîtes dans les menus')),
+                    'INTERDIRE_MODIF_FICHE_ABONNE' => Class_AdminVar_Meta::newOnOff($this->_('Interdire la modification de la fiche abonne')),
+                    'ROOT_URL_ECOUTE' => Class_AdminVar_Meta::newDefault('URL de base à rajouter aux données unimarc pour la lecture des morceaux'),
+                    'URL_TYPO3' => Class_AdminVar_Meta::newDefault($this->_('Url d\'import d\'un agenda TYPO3'))->bePrivate(),
+                    'CHAMPS_FICHE_UTILISATEUR' => Class_AdminVar_Meta::newMultiInput($this->_('Liste des champs que l\'utilisateur peux modifier. <br/>Ex: nom;prenom;pseudo;adresse;<br/>code_postal;ville;mail;is_contact_mail;<br/>telephone;is_contact_telephone;')),
+                    'FACETTE_PCDM4_LIBELLE' => Class_AdminVar_Meta::newDefault($this->_('Libellé pour la PCDM4')),
+                    'FACETTE_DEWEY_LIBELLE' => Class_AdminVar_Meta::newDefault($this->_('Libellé pour la Dewey')),
+                    'FACETTE_TYPE_DOC_LIBELLE' => Class_AdminVar_Meta::newDefault('Libellé de la facette type de document'),
+                    'FACETTE_LANGUE_LIBELLE' => Class_AdminVar_Meta::newDefault('Libellé de la facette langue'),
+                    'FACETTE_GENRE_LIBELLE' => Class_AdminVar_Meta::newDefault('Libelle de la facette genre'),
+                    'FACETTE_SITE_LIBELLE' => Class_AdminVar_Meta::newDefault('Libellé de la facette site'),
+                    'FACETTE_SECTION_LIBELLE' => Class_AdminVar_Meta::newDefault('Libellé de la facette section'),
+                    'FACETTE_BIBLIOTHEQUE_LIBELLE' => Class_AdminVar_Meta::newDefault('Libellé de la facette bibliothèque'),
+                    'FACETTE_AUTEUR_LIBELLE' => Class_AdminVar_Meta::newDefault('Libellé de la facette auteur'),
+                    'FACETTE_INTERET_LIBELLE' => Class_AdminVar_Meta::newDefault('Libellé de la facette centres d\'intérêt'),
+                    'FACETTE_MATIERE_LIBELLE' => Class_AdminVar_Meta::newDefault('Libellé de la facette matière'),
+                    'FACETTE_TAG_LIBELLE' => Class_AdminVar_Meta::newDefault('Libellé de la facette tag'),
+                    'UNLEASHED_FACETS' => Class_AdminVar_Meta::newMultiInput($this->_('Liste des codes des facettes qui ne sont pas limitées à l\'affichage dans le résultat de recherche<br/>Exemple : T => Type de doc, Y => Annexe, B => Bibliothèque, ... (Voir <a href="http://git.afi-sa.fr/afi/opacce/blob/master/library/Class/Codification.php#L24">la liste complète</a>)')),
+                    'AFFICHER_DISPONIBILITE_SUR_RECHERCHE' => Class_AdminVar_Meta::newOnOff($this->_('Activation de la disponibilite dans le resultat de recherche.')),
+                    'NOM_DOMAINE' => Class_AdminVar_Meta::newDefault($this->_('Nom de domaine principal de l\'OPAC, ex: monopac.macommune.fr')),
+                    'DATE_LAST_FULL_INTEGRATION_USERS' => Class_AdminVar_Meta::newDefault($this->_('Date du dernier import total des abonnés (modifié par cosmogramme)')),
+                    'BOITE_PANIER_AUTO' => Class_AdminVar_Meta::newOnOff($this->_('Ajouter automatiquement une boîte panier dans la division flottante')),
+                    'EXTRA_SKIN_PATH' => Class_AdminVar_Meta::newDefault($this->_('Chemin vers les skins personnalisées, relatif à %s', Class_Profil_Skin::EXTRA_PATH)),
+                    'ENABLE_COLLABORATIVE_BROWSING' => Class_AdminVar_Meta::newOnOff($this->_('Activation de la navigation collaborative')),
+                    'KOHA_MULTI_SITES' => Class_AdminVar_Meta::newOnOff($this->_('WS KOHA : Reservation d\'exemplaires pour les multi sites')),
+
+                    'TEXT_REPLACEMENTS' => Class_AdminVar_Meta::newRawText($this->_('Remplacement de textes à la volée. <br/>Ex:<br/>Panier;Sélection<br/>Vous avez %%d paniers;Vous avez %%d sélections')),
+                    'URL_COSMOGRAMME' => Class_AdminVar_Meta::newDefault('')->bePrivate(),
+                    'PACK_MOBILE' => Class_AdminVar_Meta::newOnOff($this->_('Activation des fonctions avancées du téléphone'))->bePrivate()],
+       'catalogue' => [
+                       'OAI_SERVER' => Class_AdminVar_Meta::newOnOff($this->_('Activation du serveur OAI: permet le moissonnage des domaines par d\'autres logiciels via OAI'))],
+       'newsletter' => [
+                        'NEWSLETTER_ID_PROFIL' => Class_AdminVar_Meta::newCombo($this->_('Profil de la page de désinscription<br/>Par défaut : page d\'accueil du portail'),
+                                                                                ['options' => ['selectOptions' => $this->_getProfilsOptions()],
+                                                                                 'renderer' => $this->_getProfilRenderer()]),
+                        'NEWSLETTER_UNSUBSCRIBE_TEXT' => Class_AdminVar_Meta::newDefault($this->_('Texte de désinscription version texte<br/>Le lien est inséré à la place de {{URL}}<br/>Par défaut : Lien pour se désinscrire de cette lettre d\'information : {{URL}}'),
+                                                                                         ['value' => $this->_('Lien pour se désinscrire de cette lettre d\'information : {{URL}}')]),
+                        'NEWSLETTER_UNSUBSCRIBE_HTML' => Class_AdminVar_Meta::newDefault($this->_('Texte de désinscription version HTML<br/>Le lien de désinscription est appliqué sur tout ce texte<br/>Par défaut : Je ne veux plus recevoir cette lettre d\'information'),
+                                                                                         ['value' => $this->_('Je ne veux plus recevoir cette lettre d\'information')])],
+       'cms' => ['ARTICLES_LIST_MODE' => Class_AdminVar_Meta::newOnOff($this->_('Le gestionnaire de contenu affiche les articles sous forme de liste paginée au lieu de d\'une arborescence. Cet affichage est adapté lorsque le nombre d\'article devient trop important')),
+
+                 'CMS_FORMULAIRES' => Class_AdminVar_Meta::newOnOff($this->_('Activation des formulaires')),
+
+                 'WORKFLOW' => Class_AdminVar_Meta::newDefault(implode('<br/>',
+                                                                       ['Activer ou désactiver la gestion des validations des articles',
+                                                                        'Vide ou 0 = Désactivé, 1 = Activé avec les statuts par défaut, JSON = Activé avec des statuts de validation supplémentaire',
+                                                                        'Exemple JSON :',
+                                                                        '[{"id":10, "label":"À valider niveau 2"}, {"id":11, "label":"À valider niveau 3"}]',
+                                                                        'Les identifiants 1 à 5 sont réservés']),
+                                                               ['validate' => 'ZendAfi_Validate_WorkflowVar',
+                                                                'after_save' => 'setWorkflowPermissions']),
+                 'WORKFLOW_TEXT_MAIL_ARTICLE_PENDING' => Class_AdminVar_Meta::newDefault($this->_('Contenu de l\'email de notification d\'article en attente de validation')),
+                 'WORKFLOW_TEXT_MAIL_ARTICLE_REFUSED' => Class_AdminVar_Meta::newDefault($this->_('Contenu de l\'email de notification de refus d\'un article à valider')),
+                 'WORKFLOW_TEXT_MAIL_ARTICLE_VALIDATED' => Class_AdminVar_Meta::newDefault($this->_('Contenu de l\'email de notification de validation d\'un article')),
+
+       ],
+       'album' => ['ALBUMS_LIST_MODE' => Class_AdminVar_Meta::newOnOff($this->_('Le gestionnaire de contenu affiche les albums sous forme de liste paginée au lieu de d\'une arborescence. Cet affichage est adapté lorsque le nombre d\'albums devient trop important')),
+
+                   'ALBUM_MEDIA_NO_AUTOINDEX_TITLE' => Class_AdminVar_Meta::newOnOff($this->_('Ne pas créer de zone 464 pour les médias dont le titre n\'est pas saisi'))->bePrivate(),
+
+                   'BIBNUM' => Class_AdminVar_Meta::newOnOff($this->_('Activer ou désactiver la bibliothèque numérique'))->bePrivate(),
+
+                   'CVS_BMKEY' => Class_AdminVar_Meta::newDefault($this->_('Paramétrage CVS'))->bePrivate(),
+                   'CVS_BMID' => Class_AdminVar_Meta::newDefault($this->_('Paramétrage CVS'))->bePrivate(),
+                   'CVS_SOURCENAME' => Class_AdminVar_Meta::newDefault($this->_('Paramétrage CVS'))->bePrivate(),
+                   'CVS_SOURCEID' => Class_AdminVar_Meta::newDefault($this->_('Paramétrage CVS'))->bePrivate(),
+                   'CVS_SOURCEKEY' => Class_AdminVar_Meta::newDefault($this->_('Paramétrage CVS'))->bePrivate(),
+                   'CVS_SOURCEPASSWORD' => Class_AdminVar_Meta::newDefault($this->_('Paramétrage CVS'))->bePrivate(),
+                   'CVS_LOGINTEST' => Class_AdminVar_Meta::newDefault($this->_('Paramétrage CVS'))->bePrivate(),
+
+                   'NUMILOG_URL' => Class_AdminVar_Meta::newDefault($this->_('Paramétrage <a href="http://forge.afi-sa.fr/projects/opac3/wiki/Ressources_externes_enrichissements#Numilog">Numilog</a>'))->bePrivate(),
+                   'NUMILOG_OAI_URL' => Class_AdminVar_Meta::newDefault($this->_('Paramétrage <a href="http://forge.afi-sa.fr/projects/opac3/wiki/Ressources_externes_enrichissements#Numilog">Numilog</a>'))->bePrivate(),
+                   'NUMILOG_OAI_IDBIB' => Class_AdminVar_Meta::newDefault($this->_('Paramétrage <a href="http://forge.afi-sa.fr/projects/opac3/wiki/Ressources_externes_enrichissements#Numilog">Numilog</a>'))->bePrivate(),
+
+                   '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(),
+
+                   'TOUTAPPRENDRE_BIB_ID' => Class_AdminVar_Meta::newDefault($this->_('Paramétrage <a href="http://forge.afi-sa.fr/projects/opac3/wiki/Ressources_externes_enrichissements#Tout-Apprendre">ToutApprendre</a>'))->bePrivate(),
+                   'TOUTAPPRENDRE_KEY' => Class_AdminVar_Meta::newDefault($this->_('Paramétrage <a href="http://forge.afi-sa.fr/projects/opac3/wiki/Ressources_externes_enrichissements#Tout-Apprendre">ToutApprendre</a>'))->bePrivate(),
+
+                   'NUMERIQUE_PREMIUM_URL' => Class_AdminVar_Meta::newDefault('')->bePrivate(),
+
+                   'MUSICME_URL' => Class_AdminVar_Meta::newDefault('')->bePrivate(),
+                   'MUSICME_BIB_ID' => Class_AdminVar_Meta::newDefault('')->bePrivate(),
+
+                   'JAMENDO_CLIENT_ID' => Class_AdminVar_Meta::newDefault($this->_('ID client Jamendo')),
+
+                   'VODECLIC_KEY' => Class_AdminVar_Meta::newDefault($this->_('Clé de sécurité Vodeclic'))->bePrivate(),
+                   'VODECLIC_ID' => Class_AdminVar_Meta::newDefault($this->_('Identifiant partenaire Vodeclic'))->bePrivate(),
+                   'VODECLIC_BIB_ID' => Class_AdminVar_Meta::newDefault($this->_('Identifiant code bibliothèque Vodeclic'))->bePrivate(),
+
+                   'DILICOM_PNB' => Class_AdminVar_Meta::newOnOff($this->_('Activation du PNB Dilicom'))->bePrivate(),
+                   'DILICOM_PNB_GLN_COLLECTIVITE' => Class_AdminVar_Meta::newDefault($this->_('Gln de la collectivité, il est fourni par Dilicom.'))->bePrivate(),
+                   'DILICOM_PNB_PWD_COLLECTIVITE' => Class_AdminVar_Meta::newDefault($this->_('Mot de passe de la collectivité, il est fourni par Dilicom.'))->bePrivate(),
+                   'DILICOM_PNB_GLN_CONTRACTOR' => Class_AdminVar_Meta::newDefault($this->_('Contracteur du PNB Dilicom'))->bePrivate(),
+                   'DILICOM_PNB_SERVER_URL' => Class_AdminVar_Meta::newDefault($this->_('Url du serveur PNB Dilicom'))->bePrivate(),
+                   'DILICOM_PNB_IP_ADRESSES' => Class_AdminVar_Meta::newMultiInput($this->_('Liste des adresses IP publiques autorisées pour la consultation des documents'),
+                                                                                   ['validate' => 'ZendAfi_Validate_Dilicom_IpAdresses'])->bePrivate(),
+                   'MYCOW_EID' => Class_AdminVar_Meta::newDefault($this->_('Clé d\'identification MyCOW.EU pour le portail. Cette clé doit être fournie par MyCOW.EU. Elle active la ressource numérique dans le portail.'))->bePrivate(),
+
+                   'ONEDTOUCH_URL' => Class_AdminVar_Meta::newDefault($this->_('Adresse du serveur OAI 1D touch'))->bePrivate(),
+
+                   'ORPHEA_URL' => Class_AdminVar_Meta::newDefault($this->_('Adresse du serveur Orphea'))->bePrivate(),
+                   'ORPHEA_USERNAME' => Class_AdminVar_Meta::newDefault($this->_('Nom de l\'utilisateur Orphea'))->bePrivate(),
+                   'ORPHEA_PWD' => Class_AdminVar_Meta::newDefault($this->_('Mot de passe de l\'utilisateur Orphea'))->bePrivate(),
+                   'ORPHEA_LANGUAGE' => Class_AdminVar_Meta::newDefault($this->_('Paramètre permettant de choisir la langue des des ressources. La liste des codes disponibles se trouve à cette adresse http://help.orphea.com/43/gateway/#language_identifiers'))->bePrivate(),
+
+                   'PLANETNEMO' => Class_AdminVar_Meta::newOnOff($this->_('Activation de la ressource numérique PlanetNemo'))->bePrivate(),
+
+                   'LECTURA_DOMAIN' => Class_AdminVar_Meta::newDefault($this->_('Domaine utilisée par le serveur lectura pour authentification')),
+                   'LEKIOSK_ID' => Class_AdminVar_Meta::newDefault($this->_('Identifiant fournit par lekiosk.com'))->bePrivate(),
+
+                   'KIDILANGUES_KEY' => Class_AdminVar_Meta::newDefault($this->_('Clé d\'encodage Kidilangues pour le portail. Cette clé doit être fournie par Kidilangues.'))->bePrivate(),
+                   'KIDILANGUES_ID' => Class_AdminVar_Meta::newDefault($this->_('Clé d\'identification Kidilangues pour le portail. Cette clé doit être fournie par Kidilangues.'))->bePrivate(),
+                   'KIDILANGUES_LOGIN' => Class_AdminVar_Meta::newDefault($this->_('Login du portail fourni par Kidilangues.'))->bePrivate(),
+                   'KIDILANGUES_PWD' => Class_AdminVar_Meta::newDefault($this->_('Password du portail fourni par Kidilangues.'))->bePrivate(),
+
+                   'PREMIERCHAPITRE_BIB_ID' => Class_Adminvar_Meta::newDefault($this->_('Clé d\'identification Premier-Chapitre de la bibliothèque. Cette clé doit être fournie par Premier-Chapitre.'))->bePrivate(),
+                   'PREMIERCHAPITRE_BMID' => Class_Adminvar_Meta::newDefault($this->_('Login du portail fourni par Premier-Chapitre.'))->bePrivate(),
+                   'PREMIERCHAPITRE_BMKEY' => Class_Adminvar_Meta::newDefault($this->_('Password du portail fourni par Premier-Chapitre'))->bePrivate(),
+              ],
+          'users' => ['NDAYS_EXPIRY_NOTICE' => Class_AdminVar_Meta::newDefault($this->_('Prévenir l\'utilisateur xx jour(s) avant l\'expiration de son abonnement (par défaut 30 jours).'), ['value' => 30]),
+        ]
+
+      ];
+  }
+
+
+  public function allVarsValues() {
+    $values=[];
+    foreach ($this->knownVars()  as $key => $value) {
+      $values=array_merge($values,$value);
+    }
+    return $values;
+  }
 
 
-	/**
-	 * @return bool
-	 */
-	public function isWorkflowEnabled() {
-		return !in_array(Class_AdminVar::get('WORKFLOW'), ['', '0']);
-	}
+  protected function _getProfilsOptions() {
+    $multioptions = ['' => ''];
+    $ids = [];
+    foreach(Class_Profil::getProfilsByBib('ALL', 'ALL') as $opt_group => $profils) {
+      $options = [];
+      foreach($profils as $profil) {
+        $options[$profil->getId()] = $profil->getLibelle();
+        $ids[] = $profil->getId();
+      }
+      $multioptions[$opt_group] = $options;
+    }
 
+    return ['label' => 'Profil',
+            'multioptions' => $multioptions,
+            'registerInArrayValidator' => false,
+            'validators' => [['InArray', true, [$ids]]]];
+  }
 
-	/**
-	 * @return bool
-	 */
-	public function isBibNumEnabled() {
-		return Class_AdminVar::isModuleEnabled('BIBNUM');
-	}
 
+  protected function _getProfilRenderer() {
+    return function($value, $view) {
+      if (!$profil = Class_Profil::find($value))
+        return '';
 
-	/**
-	 * @return bool
-	 */
-	public function isDilicomPNBEnabled() {
-		return ('' != Class_AdminVar::get('DILICOM_PNB_GLN_CONTRACTOR')) && ('' != Class_AdminVar::get('DILICOM_PNB_SERVER_URL'));
-	}
+      $library = ($profil->isInPortail()) ?
+        $view->_('Portail') :
+        $profil->getBibLibelle();
 
+      return $view->escape(implode(' > ', array_merge([$library], $profil->getPathParts())));
+    };
+  }
 
-	/**
-	 * @return bool
-	 */
-	public function isJamendoEnabled() {
-		return ('' != trim(Class_AdminVar::get('JAMENDO_CLIENT_ID')));
-	}
 
+  /** @category testing */
+  public function resetAllVars() {
+    $this->all_vars = null;
+  }
 
-	/**
-	 * @return bool
-	 */
-	public function isFormationEnabled() {
-		return Class_AdminVar::isModuleEnabled('FORMATIONS');
-	}
 
+  public function getLangues() {
+    if (!$langues_value = $this->get('LANGUES'))
+      return [];
 
-	public function isLecturaEnabled() {
-		return  '' != Class_AdminVar::get('LECTURA_DOMAIN');
-	}
+    $langues = array(Class_AdminVar::getDefaultLanguage());
 
+    foreach(explode(';', strtolower($langues_value)) as $langue)
+      $langues []= trim($langue);
+    return array_unique(array_filter($langues));
+  }
 
-	/**
-	 * @return bool
-	 */
-	public function isVodeclicEnabled() {
-		return (('' != Class_AdminVar::get('VODECLIC_KEY')) && ('' != Class_AdminVar::get('VODECLIC_ID')) && ('' != Class_AdminVar::get('VODECLIC_BIB_ID')));
-	}
 
+  public function getLanguesWithoutDefault() {
+    return array_diff(Class_AdminVar::getLangues(), array(Class_AdminVar::getDefaultLanguage()));
+  }
 
-	public function isToutApprendreEnabled() {
-		return (('' != Class_AdminVar::get('TOUTAPPRENDRE_BIB_ID')) && ('' != Class_AdminVar::get('TOUTAPPRENDRE_KEY')));
-	}
 
+  /**
+   * @return bool
+   */
+  public function isTranslationEnabled() {
+    return count(Class_AdminVar::getLangues()) > 1;
+  }
 
-	public function isMyCowEnabled()  {
-		return ('' != Class_AdminVar::get('MYCOW_EID'));
-	}
 
+  /**
+   * @return bool
+   */
+  public function isModuleEnabled($name) {
+    if (!$value = Class_AdminVar::get($name)) {
+      return false;
+    }
 
-	public function isPlanetNemoEnabled()  {
-		return ('' != Class_AdminVar::get('PLANETNEMO'));
-	}
+    return (1 == (int)$value);
+  }
 
 
-	public function isNumeriquePremiumEnabled() {
-		return '' != Class_AdminVar::get('NUMERIQUE_PREMIUM_URL');
-	}
+  /**
+   * @return bool
+   */
+  public function isWorkflowEnabled() {
+    return !in_array(Class_AdminVar::get('WORKFLOW'), ['', '0']);
+  }
 
 
-	/**
-	 * @return bool
-	 */
-	public function isCVSEnabled() {
-		return (('' != Class_AdminVar::get('CVS_BMKEY')) && ('' != Class_AdminVar::get('CVS_BMID')) &&
-						('' != Class_AdminVar::get('CVS_SOURCEPASSWORD')) && ('' != Class_AdminVar::get('CVS_SOURCEKEY')) &&
-						('' != Class_AdminVar::get('CVS_SOURCEID')) && ('' != Class_AdminVar::get('CVS_SOURCENAME'))
-		);
-	}
+  /**
+   * @return bool
+   */
+  public function isBibNumEnabled() {
+    return Class_AdminVar::isModuleEnabled('BIBNUM');
+  }
 
 
-	/**
-	 * @return bool
-	 */
-	public function isNumilogEnabled() {
-		return ('' != Class_AdminVar::get('NUMILOG_URL') );
-	}
+  /**
+   * @return bool
+   */
+  public function isDilicomPNBEnabled() {
+    return ('' != Class_AdminVar::get('DILICOM_PNB_GLN_CONTRACTOR')) && ('' != Class_AdminVar::get('DILICOM_PNB_SERVER_URL'));
+  }
 
 
-	/**
-	 * @return bool
-	 */
-	public function isCyberlibrisEnabled() {
-		return ('' != Class_AdminVar::get('CYBERLIBRIS_URL') );
-	}
+  /**
+   * @return bool
+   */
+  public function isJamendoEnabled() {
+    return ('' != trim(Class_AdminVar::get('JAMENDO_CLIENT_ID')));
+  }
 
 
-	/**
-	 * @return bool
-	 */
-	public function isOneDTouchEnabled() {
-		return ('' != Class_AdminVar::get('ONEDTOUCH_URL') );
-	}
+  /**
+   * @return bool
+   */
+  public function isFormationEnabled() {
+    return Class_AdminVar::isModuleEnabled('FORMATIONS');
+  }
 
 
-	public function isKidilanguesEnabled() {
-		return ('' != Class_AdminVar::get('KIDILANGUES_ID'))
-			&& ('' != Class_AdminVar::get('KIDILANGUES_KEY'))
-			&& ('' != Class_AdminVar::get('KIDILANGUES_LOGIN'))
-			&& ('' != Class_AdminVar::get('KIDILANGUES_PWD'));
-	}
+  public function isLecturaEnabled() {
+    return  '' != Class_AdminVar::get('LECTURA_DOMAIN');
+  }
 
 
-	/**
-	 * @return bool
-	 */
-	public function isTypo3Enabled() {
-		return ('' != Class_AdminVar::get('URL_TYPO3'));
-	}
+  /**
+   * @return bool
+   */
+  public function isVodeclicEnabled() {
+    return (('' != Class_AdminVar::get('VODECLIC_KEY')) && ('' != Class_AdminVar::get('VODECLIC_ID')) && ('' != Class_AdminVar::get('VODECLIC_BIB_ID')));
+  }
 
 
-	/**
-	 * @return bool
-	 */
-	public function isOAIServerEnabled() {
-		return Class_AdminVar::isModuleEnabled('OAI_SERVER');
-	}
+  public function isToutApprendreEnabled() {
+    return (('' != Class_AdminVar::get('TOUTAPPRENDRE_BIB_ID')) && ('' != Class_AdminVar::get('TOUTAPPRENDRE_KEY')));
+  }
 
 
-	/**
-	 * @return bool
-	 */
-	public function isPackMobileEnabled() {
-		return Class_AdminVar::isModuleEnabled('PACK_MOBILE');
-	}
+  public function isMyCowEnabled()  {
+    return ('' != Class_AdminVar::get('MYCOW_EID'));
+  }
 
 
-	/**
-	 * @return bool
-	 */
-	public function isPlanningOuverturesEnabled() {
-		return Class_AdminVar::isMultimediaEnabled();
-	}
+  public function isPlanetNemoEnabled()  {
+    return ('' != Class_AdminVar::get('PLANETNEMO'));
+  }
 
 
-	/**
-	 * @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')));
-	}
+  public function isNumeriquePremiumEnabled() {
+    return '' != Class_AdminVar::get('NUMERIQUE_PREMIUM_URL');
+  }
 
 
-	/**
-	 * @return bool
-	 */
-	public function isMusicMeEnabled() {
-		return ('' != Class_AdminVar::get('MUSICME_URL'));
-	}
+  /**
+   * @return bool
+   */
+  public function isCVSEnabled() {
+    return (('' != Class_AdminVar::get('CVS_BMKEY')) && ('' != Class_AdminVar::get('CVS_BMID')) &&
+            ('' != Class_AdminVar::get('CVS_SOURCEPASSWORD')) && ('' != Class_AdminVar::get('CVS_SOURCEKEY')) &&
+            ('' != Class_AdminVar::get('CVS_SOURCEID')) && ('' != Class_AdminVar::get('CVS_SOURCENAME'))
+    );
+  }
 
 
-	/**
-	 * @return bool
-	 */
-	public function isMultimediaEnabled() {
-		return ('' != Class_AdminVar::get('MULTIMEDIA_KEY'));
-	}
+  /**
+   * @return bool
+   */
+  public function isNumilogEnabled() {
+    return ('' != Class_AdminVar::get('NUMILOG_URL') );
+  }
 
 
-	/**
-	 * @return bool
-	 */
-	public function isWebkioskEnabled() {
-		return ('' != Class_AdminVar::get('WEBKIOSK_KEY'));
-	}
+  /**
+   * @return bool
+   */
+  public function isCyberlibrisEnabled() {
+    return ('' != Class_AdminVar::get('CYBERLIBRIS_URL') );
+  }
 
 
-	public function isLeKioskEnabled() {
-		return '' != Class_AdminVar::get('LEKIOSK_ID');
-	}
+  /**
+   * @return bool
+   */
+  public function isOneDTouchEnabled() {
+    return ('' != Class_AdminVar::get('ONEDTOUCH_URL') );
+  }
 
 
-	public function isOrpheaEnabled() {
-		return (('' != Class_AdminVar::get('ORPHEA_URL'))
-						&& ('' != Class_AdminVar::get('ORPHEA_USERNAME'))
-						&& ('' != Class_AdminVar::get('ORPHEA_PWD'))
-						&& ('' != Class_AdminVar::get('ORPHEA_LANGUAGE')));
-	}
+  public function isKidilanguesEnabled() {
+    return ('' != Class_AdminVar::get('KIDILANGUES_ID'))
+      && ('' != Class_AdminVar::get('KIDILANGUES_KEY'))
+      && ('' != Class_AdminVar::get('KIDILANGUES_LOGIN'))
+      && ('' != Class_AdminVar::get('KIDILANGUES_PWD'));
+  }
 
 
-	/**
-	 * @return bool
-	 */
-	public function isBeforeDateLastFullIntegrationUsers($date) {
-		if ('' == Class_AdminVar::get('DATE_LAST_FULL_INTEGRATION_USERS'))	return true;
-		return $date >= Class_AdminVar::get('DATE_LAST_FULL_INTEGRATION_USERS');
-	}
+  /**
+   * @return bool
+   */
+  public function isTypo3Enabled() {
+    return ('' != Class_AdminVar::get('URL_TYPO3'));
+  }
 
 
-	public function isBoitePanierAutoEnabled() {
-		return Class_AdminVar::isModuleEnabled('BOITE_PANIER_AUTO');
-	}
+  /**
+   * @return bool
+   */
+  public function isOAIServerEnabled() {
+    return Class_AdminVar::isModuleEnabled('OAI_SERVER');
+  }
 
 
-	public function getKnownVarsKeys() {
-		return array_keys(Class_AdminVar::getKnownVars());
-	}
+  /**
+   * @return bool
+   */
+  public function isPackMobileEnabled() {
+    return Class_AdminVar::isModuleEnabled('PACK_MOBILE');
+  }
 
 
-	/** @return bool */
-	public function isCacheEnabled() {
-		return Class_AdminVar::isModuleEnabled('CACHE_ACTIF');
-	}
+  /**
+   * @return bool
+   */
+  public function isPlanningOuverturesEnabled() {
+    return Class_AdminVar::isMultimediaEnabled();
+  }
 
 
-	/** @return bool */
-	public function isCmsFormulairesEnabled() {
-		return Class_AdminVar::isModuleEnabled('CMS_FORMULAIRES');
-	}
+  /**
+   * @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 bool */
-	public function getGoogleAnalyticsId() {
-		$script = Class_AdminVar::get('JS_STAT');
-		preg_match_all("/setAccount[\', \n\t]+\'([^\']+)\'/i", $script, $matches);
-		return isset($matches[1][0]) ? $matches[1][0] : '';
-	}
+  /**
+   * @return bool
+   */
+  public function isMusicMeEnabled() {
+    return ('' != Class_AdminVar::get('MUSICME_URL'));
+  }
 
 
-	/** @return string */
-	public function getNomDomaine() {
-		$domaine = trim(Class_AdminVar::get('NOM_DOMAINE'));
-		return $domaine ? $domaine : $_SERVER['SERVER_NAME'];
-	}
+  /**
+   * @return bool
+   */
+  public function isMultimediaEnabled() {
+    return ('' != Class_AdminVar::get('MULTIMEDIA_KEY'));
+  }
 
 
-	/**
-	 * @return bool
-	 */
-	public function isEnregUtilAllowed() {
-		return !Class_AdminVar::isModuleEnabled('INTERDIRE_ENREG_UTIL');
-	}
+  /**
+   * @return bool
+   */
+  public function isWebkioskEnabled() {
+    return ('' != Class_AdminVar::get('WEBKIOSK_KEY'));
+  }
 
 
-	/**
-	 * @return bool
-	 */
-	public function isMenuBoiteEnabled() {
-		return Class_AdminVar::isModuleEnabled('MENU_BOITE');
-	}
+  public function isLeKioskEnabled() {
+    return '' != Class_AdminVar::get('LEKIOSK_ID');
+  }
 
 
-	public function isBlugaEnabled() {
-		return '' != Class_AdminVar::get('BLUGA_API_KEY');
-	}
+  public function isOrpheaEnabled() {
+    return (('' != Class_AdminVar::get('ORPHEA_URL'))
+            && ('' != Class_AdminVar::get('ORPHEA_USERNAME'))
+            && ('' != Class_AdminVar::get('ORPHEA_PWD'))
+            && ('' != Class_AdminVar::get('ORPHEA_LANGUAGE')));
+  }
 
 
-	public function isAfficherDispoSurRechercheEnabled() {
-		return Class_AdminVar::isModuleEnabled('AFFICHER_DISPONIBILITE_SUR_RECHERCHE');
-	}
+  /**
+   * @return bool
+   */
+  public function isBeforeDateLastFullIntegrationUsers($date) {
+    if ('' == Class_AdminVar::get('DATE_LAST_FULL_INTEGRATION_USERS'))  return true;
+    return $date >= Class_AdminVar::get('DATE_LAST_FULL_INTEGRATION_USERS');
+  }
 
 
-	public function getBabelthequeId() {
-		$mathes = [];
-		if (preg_match('/bw_([^\.]+)\.js/', (string)Class_AdminVar::get('BABELTHEQUE_JS'), $matches))
-			return (int)$matches[1];
-	}
+  public function isBoitePanierAutoEnabled() {
+    return Class_AdminVar::isModuleEnabled('BOITE_PANIER_AUTO');
+  }
 
 
-	public function getChampsFicheUtilisateur() {
-		return array_filter(explode(';', trim(Class_AdminVar::get('CHAMPS_FICHE_UTILISATEUR'))));
-	}
+  public function getKnownVarsKeys() {
+    return array_keys(Class_AdminVar::allVarsValues());
+  }
 
 
-	public function getWorkflowTextMailArticlePending() {
-		if(!Class_AdminVar::get('WORKFLOW_TEXT_MAIL_ARTICLE_PENDING'))
-			Class_AdminVar::set('WORKFLOW_TEXT_MAIL_ARTICLE_PENDING',
-													'Un nouvel article est à valider. TITRE_ARTICLE URL_ARTICLE' );
+  /** @return bool */
+  public function isCacheEnabled() {
+    return Class_AdminVar::isModuleEnabled('CACHE_ACTIF');
+  }
 
-		return Class_AdminVar::get('WORKFLOW_TEXT_MAIL_ARTICLE_PENDING');
-	}
 
+  /** @return bool */
+  public function isCmsFormulairesEnabled() {
+    return Class_AdminVar::isModuleEnabled('CMS_FORMULAIRES');
+  }
 
-	public function getWorkflowTextMailArticleRefused() {
-		if(!Class_AdminVar::get('WORKFLOW_TEXT_MAIL_ARTICLE_REFUSED'))
-			Class_AdminVar::set('WORKFLOW_TEXT_MAIL_ARTICLE_REFUSED',
-													'L\'article a été refusé.');
 
-		return Class_AdminVar::get('WORKFLOW_TEXT_MAIL_ARTICLE_REFUSED');
-	}
+  /** @return bool */
+  public function getGoogleAnalyticsId() {
+    $script = Class_AdminVar::get('JS_STAT');
+    preg_match_all("/setAccount[\', \n\t]+\'([^\']+)\'/i", $script, $matches);
+    return isset($matches[1][0]) ? $matches[1][0] : '';
+  }
 
 
-	public function getWorkflowTextMailArticleValidated() {
-		if(!Class_AdminVar::get('WORKFLOW_TEXT_MAIL_ARTICLE_VALIDATED'))
-			Class_AdminVar::set('WORKFLOW_TEXT_MAIL_ARTICLE_VALIDATED', 'L\'article TITRE_ARTICLE a été validé. URL_ARTICLE');
+  /** @return string */
+  public function getNomDomaine() {
+    $domaine = trim(Class_AdminVar::get('NOM_DOMAINE'));
+    return $domaine ? $domaine : $_SERVER['SERVER_NAME'];
+  }
 
-		return Class_AdminVar::get('WORKFLOW_TEXT_MAIL_ARTICLE_VALIDATED');
-	}
 
+  /**
+   * @return bool
+   */
+  public function isEnregUtilAllowed() {
+    return !Class_AdminVar::isModuleEnabled('INTERDIRE_ENREG_UTIL');
+  }
 
-	public function isArticlesListMode() {
-		return Class_AdminVar::isModuleEnabled('ARTICLES_LIST_MODE');
-	}
 
+  /**
+   * @return bool
+   */
+  public function isMenuBoiteEnabled() {
+    return Class_AdminVar::isModuleEnabled('MENU_BOITE');
+  }
 
-	public function getStaticMeta($name) {
-		$known_vars = Class_AdminVar::getKnownVars();
-		return array_key_exists($name, $known_vars) ?
-			$known_vars[$name] : Class_AdminVar_Meta::newDefault('');
-	}
+
+  public function isBlugaEnabled() {
+    return '' != Class_AdminVar::get('BLUGA_API_KEY');
+  }
+
+
+  public function isAfficherDispoSurRechercheEnabled() {
+    return Class_AdminVar::isModuleEnabled('AFFICHER_DISPONIBILITE_SUR_RECHERCHE');
+  }
+
+
+  public function isAlbumMediaNoAutoindexTitleEnabled() {
+    return Class_AdminVar::isModuleEnabled('ALBUM_MEDIA_NO_AUTOINDEX_TITLE');
+  }
+
+
+  public function getBabelthequeId() {
+    $mathes = [];
+    if (preg_match('/bw_([^\.]+)\.js/', (string)Class_AdminVar::get('BABELTHEQUE_JS'), $matches))
+      return (int)$matches[1];
+  }
+
+
+  public function getChampsFicheUtilisateur() {
+    return array_filter(explode(';', trim(Class_AdminVar::get('CHAMPS_FICHE_UTILISATEUR'))));
+  }
+
+
+  public function getWorkflowTextMailArticlePending() {
+    if(!Class_AdminVar::get('WORKFLOW_TEXT_MAIL_ARTICLE_PENDING'))
+      Class_AdminVar::set('WORKFLOW_TEXT_MAIL_ARTICLE_PENDING',
+                          'Un nouvel article est à valider. TITRE_ARTICLE URL_ARTICLE' );
+
+    return Class_AdminVar::get('WORKFLOW_TEXT_MAIL_ARTICLE_PENDING');
+  }
+
+
+  public function getWorkflowTextMailArticleRefused() {
+    if(!Class_AdminVar::get('WORKFLOW_TEXT_MAIL_ARTICLE_REFUSED'))
+      Class_AdminVar::set('WORKFLOW_TEXT_MAIL_ARTICLE_REFUSED',
+                          'L\'article a été refusé.');
+
+    return Class_AdminVar::get('WORKFLOW_TEXT_MAIL_ARTICLE_REFUSED');
+  }
+
+
+  public function getWorkflowTextMailArticleValidated() {
+    if(!Class_AdminVar::get('WORKFLOW_TEXT_MAIL_ARTICLE_VALIDATED'))
+      Class_AdminVar::set('WORKFLOW_TEXT_MAIL_ARTICLE_VALIDATED', 'L\'article TITRE_ARTICLE a été validé. URL_ARTICLE');
+
+    return Class_AdminVar::get('WORKFLOW_TEXT_MAIL_ARTICLE_VALIDATED');
+  }
+
+
+  public function isArticlesListMode() {
+    return Class_AdminVar::isModuleEnabled('ARTICLES_LIST_MODE');
+  }
+
+
+  public function getStaticMeta($name) {
+    $known_vars = Class_AdminVar::allVarsValues();
+    return array_key_exists($name, $known_vars) ?
+      $known_vars[$name] : Class_AdminVar_Meta::newDefault('');
+  }
 }
 
 
 
 class Class_AdminVar extends Storm_Model_Abstract {
-	protected $_table_name = 'bib_admin_var';
-	protected $_table_primary = 'CLEF';
-	protected $_loader_class = 'Class_AdminVarLoader';
+  protected $_table_name = 'bib_admin_var';
+  protected $_table_primary = 'CLEF';
+  protected $_loader_class = 'Class_AdminVarLoader';
+
+  protected $_fixed_id = true;
+
 
-	protected $_fixed_id = true;
+  public function getValeur() {
+    return stripslashes($this->_get('valeur'));
+  }
 
 
-	public function getValeur() {
-		return stripslashes($this->_get('valeur'));
-	}
+  public function getMeta() {
+    return $this->getLoader()->getStaticMeta($this->getClef());
+  }
 
 
-	public function getMeta() {
-		return $this->getLoader()->getStaticMeta($this->getClef());
-	}
+  public function getType() {
+    return $this->getMeta()->getType();
+  }
 
 
-	public function getType() {
-		return $this->getMeta()->getType();
-	}
+  public function getDescription() {
+    return $this->getMeta()->getDescription();
+  }
 
 
-	public function getDescription() {
-		return $this->getMeta()->getDescription();
-	}
+  public function isOnOff() {
+    return $this->getMeta()->isOnOff();
+  }
 
 
-	public function isOnOff() {
-		return $this->getMeta()->isOnOff();
-	}
+  public function isMultiInput() {
+    return $this->getMeta()->isMultiInput();
+  }
 
 
-	public function isMultiInput() {
-		return $this->getMeta()->isMultiInput();
-	}
+  public function isRawText() {
+    return $this->getMeta()->isRawText();
+  }
 
 
-	public function isRawText() {
-		return $this->getMeta()->isRawText();
-	}
+  public function isCombo() {
+    return $this->getMeta()->isCombo();
+  }
 
 
-	public function isCombo() {
-		return $this->getMeta()->isCombo();
-	}
+  public function validate() {
+    $this->getMeta()->validate($this);
+  }
 
 
-	public function validate() {
-		$this->getMeta()->validate($this);
-	}
+  public function afterSave() {
+    $this->getMeta()->afterSave($this);
+  }
 
 
-	public function afterSave() {
-		$this->getMeta()->afterSave($this);
-	}
+  public function getForm() {
+    return $this->getMeta()->getForm($this);
+  }
 
 
-	public function getForm() {
-		return $this->getMeta()->getForm($this);
-	}
+  public function getRenderer() {
+    return $this->getMeta()->getRenderer();
+  }
 
 
-	public function getRenderer() {
-		return $this->getMeta()->getRenderer();
-	}
+  public function setWorkflowPermissions() {
+    $statuses = json_decode($this->getValeur());
+    if (!is_array($statuses)) {
+      Class_Permission::cleanDynamicWorkflow();
+      return;
+    }
 
+    $ids = [];
+    $sorting = 2;
+    foreach ($statuses as $status) {
+      if (!$permission = Class_Permission::findDynamicWorkflow($status->id))
+        $permission = Class_Permission::newDynamicWorkflow($status->id);
 
-	public function setWorkflowPermissions() {
-		$statuses = json_decode($this->getValeur());
-		if (!is_array($statuses)) {
-			Class_Permission::cleanDynamicWorkflow();
-			return;
-		}
+      $permission
+        ->setDescription($status->label)
+        ->setSorting($sorting)
+        ->save();
+      $ids[] = $permission->getId();
+      ++$sorting;
+    }
 
-		$ids = [];
-		$sorting = 2;
-		foreach ($statuses as $status) {
-			if (!$permission = Class_Permission::findDynamicWorkflow($status->id))
-				$permission = Class_Permission::newDynamicWorkflow($status->id);
+    Class_Permission::cleanDynamicWorkflow($ids);
+  }
 
-			$permission
-				->setDescription($status->label)
-				->setSorting($sorting)
-				->save();
-			$ids[] = $permission->getId();
-			++$sorting;
-		}
 
-		Class_Permission::cleanDynamicWorkflow($ids);
-	}
+  public function getPreviousValue() {
+    return isset($this->_attributes_in_db['valeur']) ?
+      $this->_attributes_in_db['valeur'] : '';
+  }
 
 
-	public function getPreviousValue() {
-		return isset($this->_attributes_in_db['valeur']) ?
-			$this->_attributes_in_db['valeur'] : '';
-	}
+  public function matchRoleLevel($role_level) {
+      return ($role_level >= $this->getMeta()->getAttribute('role_level', ZendAfi_Acl_AdminControllerRoles::SUPER_ADMIN));
+  }
 }
 
 ?>
\ No newline at end of file