Subversion Repositories Applications.papyrus

Compare Revisions

No changes between revisions

Ignore whitespace Rev 1335 → Rev 1974

/branches/v1.0-menes/papyrus/pap_initialise_info.inc.php
New file
0,0 → 1,662
<?php
//vim: set expandtab tabstop=4 shiftwidth=4:
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2003 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | |
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library 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 |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// | |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: pap_initialise_info.inc.php,v 1.28.2.1 2007-01-11 18:22:35 ddelon Exp $
/**
*Initialisation de Papyrus : vérification et récupération de paramètres généraux.
*
* La page contient le code initialisant l'éxecution du rendu d'une page par Papyrus.
* Nous y trouvons la recherche des informations disponibles sur :
* - le site présent sur le serveur demandé,
* - l'identification,
* - la langue,
* - le menu,
* - la page
* - l'application
*
*@package Papyrus
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author Alexandre GRANIER <alex@tela-botanica.org>
*@author Laurent COUDOUNEAU <laurent.coudouneau@ema.fr>
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.28.2.1 $ $Date: 2007-01-11 18:22:35 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTÊTE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
/** Inclusion de l'objet PEAR servant à négocier le language avec le navigateur client. */
require_once PAP_CHEMIN_API_PEAR.'HTTP.php';
/** Inclusion de la classe PEAR gérant les URL : Utilisé pour l'url demandée par le client.*/
require_once PAP_CHEMIN_API_PEAR.'Net/URL.php';
/** Inclusion de la bibliothèque de fonctions servant à l'initialisation des variables globales de Papyrus. */
require_once GEN_CHEMIN_BIBLIO.'pap_initialisation.fonct.php';
/** Inclusion de la classe Papyrus gérant les URL : Utilisé pour l'url demandée par le client.*/
require_once GEN_CHEMIN_BIBLIO_CLASSE.'pap_url.class.php';
/** Inclusion de la bibliothèque de fonctions servant au menu pour la réecriture d'url. */
require_once GEN_CHEMIN_BIBLIO.'pap_menu.fonct.php';
 
// +------------------------------------------------------------------------------------------------------+
// | CORPS du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
// +------------------------------------------------------------------------------------------------------+
// Gestion de la réecriture d'url et des url erreur 404
if ((defined('PAP_URL_REECRITURE') AND PAP_URL_REECRITURE == '1' && (! isset($_GET[GEN_URL_CLE_SITE]) || empty($_GET[GEN_URL_CLE_SITE])) && (! isset($_GET[GEN_URL_CLE_MENU]) || empty($_GET[GEN_URL_CLE_MENU]))) ) {
$tab_type_reecriture = array('MENU', 'SITE');
foreach ($tab_type_reecriture as $reecriture) {
if (PAP_URL_REECRITURE_SEP == '/') {
$masque_reecriture = '/^(\/.*?)'.constant('PAP_URL_REECRITURE_'.$reecriture).'\\'.PAP_URL_REECRITURE_SEP.'([^?]+?)(?:\?(.*)|)$/';
} else {
$masque_reecriture = '/^(\/.*?)'.constant('PAP_URL_REECRITURE_'.$reecriture).PAP_URL_REECRITURE_SEP.'([^?]+?)(?:\?(.*)|)$/';
}
if (preg_match($masque_reecriture, rawurldecode($_SERVER['REQUEST_URI']), $tab_raccourci)) {
$chemin_vers_papyrus = $tab_raccourci[1];
$raccourci = $tab_raccourci[2];
$parametres = '';
if (isset($tab_raccourci[3])) {
$parametres = $tab_raccourci[3];
}
if ($reecriture == 'SITE') {
/** Inclusion de la bibliothèque de fonctions servant au site pour la réecriture d'url. */
require_once GEN_CHEMIN_BIBLIO.'pap_site.fonct.php';
}
// Nous cherchons à savoir si le raccourci est entièrement numérique ou pas.
if (preg_match('/^[0-9]+$/', $raccourci)) {
// Nous vérifions si nous utilisons les codes numériques ou alphanumérique dans les url
if (constant('GEN_URL_ID_TYPE_'.$reecriture) != 'int') {
$_GET[constant('GEN_URL_CLE_'.$reecriture)] = call_user_func('GEN_retourner'.$reecriture.'CodeAlpha', $db, $raccourci);
} else {
$_GET[constant('GEN_URL_CLE_'.$reecriture)] = $raccourci;
}
} else {
// Nous vérifions si nous utilisons les codes numériques ou alphanumérique dans les url
if (constant('GEN_URL_ID_TYPE_'.$reecriture) != 'int') {
$_GET[constant('GEN_URL_CLE_'.$reecriture)] = $raccourci;
} else {
$_GET[constant('GEN_URL_CLE_'.$reecriture)] = call_user_func('GEN_retourner'.$reecriture.'CodeNum', $db, $raccourci);
}
}
}
}
}
 
// +------------------------------------------------------------------------------------------------------+
// Gestion des sites : disponibles sur le serveur courant.
// Liste des catégories de site à prendre en compte :
// Pas de site, ni de menu dans l'URL, recherche du site par défaut
$site_liste_id = '102, 103';// 102 = site "principal" et 103 = site "externe"
if ( (! isset($_GET[GEN_URL_CLE_SITE]) || empty($_GET[GEN_URL_CLE_SITE])) && (! isset($_GET[GEN_URL_CLE_MENU]) || empty($_GET[GEN_URL_CLE_MENU])) ) {
$requete = 'SELECT gen_site.*, GSR02.* '.
'FROM gen_site, gen_site_relation AS GSR01, gen_site_relation AS GSR02 '.
'WHERE GSR01.gsr_id_site_01 = GSR01.gsr_id_site_02 '.
'AND GSR01.gsr_id_valeur = 101 '.// 101 = site défaut
'AND GSR01.gsr_id_site_01 = gs_id_site '.
'AND GSR02.gsr_id_site_01 = GSR02.gsr_id_site_02 '.
'AND GSR02.gsr_id_valeur IN ('.$site_liste_id.') '.
'AND GSR02.gsr_id_site_01 = gs_id_site';
$resultat = $db->query($requete);
if (DB::isError($resultat)) {
die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
}
// Aucun site trouvé
if ($resultat->numRows() == 0) {
// Appel à l'application Installateur si nécessaire
/** <br> Inclusion du programme Installateur de Papyrus.
* L'abscence de site oblige à relancer l'installation et le script sql qui regénèrera la base de données.*/
include_once GEN_CHEMIN_APPLICATION.'installateur/installateur.php';
$_GEN_commun['sortie'] = afficherContenuCorps();
include_once GEN_CHEMIN_PAP.'pap_envoi.inc.php';
// Fin du programme Papyrus.
exit(0);
}
// Nous avons trouvé un site.
$_GEN_commun['info_site'] = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
$resultat->free();
if (GEN_URL_ID_TYPE_SITE == 'int') {
$_GEN_commun['url_site'] = $_GEN_commun['info_site']->gs_code_num;
} else {
$_GEN_commun['url_site'] = $_GEN_commun['info_site']->gs_code_alpha;
}
// Le code du menu est présent dans l'url mais pas celui du site
} else if ( (! isset($_GET[GEN_URL_CLE_SITE]) || empty($_GET[GEN_URL_CLE_SITE])) && (isset($_GET[GEN_URL_CLE_MENU]) || !empty($_GET[GEN_URL_CLE_MENU])) ) {
// Nous récupérons les infos du menu et du sites dans la variable globale de Papyrus.
$_GEN_commun['url_menu'] = $_GET[GEN_URL_CLE_MENU];
// Récupération des informations sur le menu demandé
$requete = 'SELECT * '.
'FROM gen_menu '.
'WHERE ';
$requete .= (GEN_URL_ID_TYPE_MENU == 'int')
? 'gm_code_num = '.$_GEN_commun['url_menu']
: 'gm_code_alpha = "'.$_GEN_commun['url_menu'].'"';
 
$resultat = $db->query($requete);
(DB::isError($resultat))
? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete))
: '';
$_GEN_commun['info_menu'] = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
$resultat->free();
if ($_GEN_commun['info_menu']->gm_ce_site != 0) {
// Récupération des infos du site
$requete = 'SELECT * '.
'FROM gen_site, gen_site_relation '.
'WHERE gsr_id_site_01 = gsr_id_site_02 '.
'AND gsr_id_valeur IN ('.$site_liste_id.') '.
'AND gsr_id_site_01 = gs_id_site '.
'AND gs_id_site = '. $_GEN_commun['info_menu']->gm_ce_site;
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
$_GEN_commun['info_site'] = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
$_GEN_commun['url_site'] = (GEN_URL_ID_TYPE_SITE == 'int')
? $_GEN_commun['info_site']->gs_code_num
: $_GEN_commun['info_site']->gs_code_alpha;
$resultat->free();
} else {
// Récupération des infos du site
$requete = 'SELECT * '.
'FROM gen_site, gen_site_relation '.
'WHERE gsr_id_site_01 = gsr_id_site_02 '.
'AND gsr_id_valeur = 101 '.
'AND gsr_id_site_01 = gs_id_site ';
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
$_GEN_commun['info_site'] = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
$_GEN_commun['url_site'] = (GEN_URL_ID_TYPE_SITE == 'int')
? $_GEN_commun['info_site']->gs_code_num
: $_GEN_commun['info_site']->gs_code_alpha;
$resultat->free();
}
} else {
// Récupération de la valeur identifiant le site depuis l'url
$_GEN_commun['url_site'] = $_GET[GEN_URL_CLE_SITE];
// Récupération des informations sur le site
$requete = 'SELECT * '.
'FROM gen_site, gen_site_relation '.
'WHERE gsr_id_site_01 = gsr_id_site_02 '.
'AND gsr_id_valeur IN ('.$site_liste_id.') '.
'AND gsr_id_site_01 = gs_id_site '.
'AND ';
$requete .= (GEN_URL_ID_TYPE_SITE == 'int')
? 'gs_code_num = '.$_GEN_commun['url_site']
: 'gs_code_alpha = "'.$_GEN_commun['url_site'].'"';
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
$_GEN_commun['info_site'] = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
$resultat->free();
}
 
//Gestion de l'erreur aucun site trouvable.
if (! isset($_GEN_commun['info_site'])) {
// Appel à l'application Installateur si nécessaire
/** <br> Inclusion du programme Installateur de Papyrus.
* L'abscence de site oblige à relancer l'installation et le script sql qui regénèrera la base de données.*/
include_once GEN_CHEMIN_APPLICATION.'installateur/installateur.php';
$_GEN_commun['sortie'] .= afficherContenuCorps();
include_once GEN_CHEMIN_PAP.'pap_envoi.inc.php';
// Fin du programme Papyrus.
exit(0);
} else if ($_GEN_commun['info_site']->gsr_id_valeur == 103) {
// Gestion de la redirection pour les sites "externes"
header('Location:'.$_GEN_commun['info_site']->gs_url);
exit(0);
}
 
// Recherche de la présence de la valeur d'i18n dans l'url
if ( (isset($_GET[GEN_URL_CLE_I18N])) && (!empty($_GET[GEN_URL_CLE_I18N])) ) {
$_GEN_commun['i18n'] = $_GET[GEN_URL_CLE_I18N];
} else {
$_GEN_commun['i18n'] = GEN_I18N_ID_DEFAUT;
}
 
// Nous récupérons des informations sur l'internationalisation
$requete = 'SELECT * '.
'FROM gen_i18n '.
'WHERE gi_id_i18n = "'.$_GEN_commun['i18n'].'"';
 
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
 
$_GEN_commun['info_i18n'] = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
$resultat->free();
 
 
// Récupération des informations sur la langue
$requete = 'SELECT * '.
'FROM gen_i18n_langue '.
'WHERE gil_id_langue = "'.$_GEN_commun['info_i18n']->gi_ce_langue.'"';
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
 
$_GEN_commun['info_i18n_langue'] = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
$resultat->free();
 
// Récupération des informations sur le pays
$requete = 'SELECT * '.
'FROM gen_i18n_pays '.
'WHERE gip_id_pays = "'.$_GEN_commun['info_i18n']->gi_ce_pays.'"';
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
 
$_GEN_commun['info_i18n_pays'] = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
$resultat->free();
 
// +------------------------------------------------------------------------------------------------------+
// Gestion des menus
 
// Nous vérifions le cas où le code du menu est introuvable dans l'url.
if ( (! isset($_GET[GEN_URL_CLE_MENU])) || (empty($_GET[GEN_URL_CLE_MENU])) ) {
// Recherche du premier menu du site courant:
$requete = 'SELECT gen_menu.* '.
'FROM gen_menu, gen_menu_relation '.
'WHERE gm_ce_site = '.$_GEN_commun['info_site']->gs_id_site.' '.
'AND gmr_id_menu_01 = gm_id_menu '.
'AND gmr_id_menu_01 = gmr_id_menu_02 '.
'AND gmr_id_valeur = 101 ';// 101 = menu par "defaut"
 
$resultat = $db->query($requete);
(DB::isError($resultat))
? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete))
: '';
// Nous avons trouvé un menu "défaut" pour le site courant.
$_GEN_commun['info_menu'] = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
$resultat->free();
 
if (isset($_GEN_commun['url_menu'])) {
// Stockage du code du menu demandée dans la variable globale de Papyrus.
if (GEN_URL_ID_TYPE_MENU == 'int') {
$_GEN_commun['url_menu'] = $_GEN_commun['info_menu']->gm_code_num;
} else {
$_GEN_commun['url_menu'] = $_GEN_commun['info_menu']->gm_code_alpha;
}
}
}
 
else
if (! isset($_GET['url_menu']) && empty($_GEN_commun['url_menu'])) {
// Le code du menu est présent dans l'url et il n'a pas encore été récupéré
// Nous le récupérons dans la variable globale de Papyrus.
$_GEN_commun['url_menu'] = $_GET[GEN_URL_CLE_MENU];
 
// Récupération des informations sur le menu demandé
$requete = 'SELECT * '.
'FROM gen_menu '.
'WHERE ';
$requete .= (GEN_URL_ID_TYPE_MENU == 'int')
? 'gm_code_num = '.$_GEN_commun['url_menu']
: 'gm_code_alpha = "'.$_GEN_commun['url_menu'].'"';
 
$resultat = $db->query($requete);
(DB::isError($resultat))
? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete))
: '';
 
$_GEN_commun['info_menu'] = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
$resultat->free();
}
 
// +------------------------------------------------------------------------------------------------------+
// Gestion des traductions
 
// Si le résultat de la négociation de l'internationalisation donne une langue différente
// de celle du site principal, nous récupérons les éventuelles valeurs traduite pour le site.
 
if ($_GEN_commun['i18n'] != $_GEN_commun['info_site']->gs_ce_i18n) {
// Récupération des informations sur la traduction du site
$requete = 'SELECT * '.
'FROM gen_site '.
'WHERE gs_ce_i18n = "'.$_GEN_commun['i18n'].'"';
// 'WHERE gs_ce_i18n = "'.$_GEN_commun['i18n'].'" '.
// 'AND gs_code_alpha = "'.$_GEN_commun['info_site']->gs_code_alpha.'"';
 
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
 
// Nous crééons l'entrée 'traduction_info_site' dans _GEN_commun que si nous avons bien trouvé une
// traduction pour le site. Il faut donc tester l'existence de cette entrée avant de l'utiliser.
if ($resultat->numRows() > 0) {
$_GEN_commun['traduction_info_site'] = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
}
$resultat->free();
}
 
// Si le résultat de la négociation de l'internationalisation donne une langue différente
// de celle du menu, nous récupérons les éventuelles valeurs traduite pour le menu.
 
if ((isset($_GEN_commun['info_menu'])) && ($_GEN_commun['i18n'] != $_GEN_commun['info_menu']->gm_ce_i18n)) {
// Récupération des informations sur la traduction du menu
$requete = 'SELECT * '.
'FROM gen_menu '.
'WHERE gm_ce_i18n = "'.$_GEN_commun['i18n'].'" ;';
// 'WHERE gm_ce_i18n = "'.$_GEN_commun['i18n'].'" '.
// 'AND gm_code_alpha = "'.$_GEN_commun['info_menu']->gm_code_alpha.'"';
 
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
 
// Nous crééons l'entrée 'traduction_info_menu' dans _GEN_commun que si nous avons bien trouvé une
// traduction pour le menu. Il faut donc tester l'existence de cette entrée avant de l'utiliser.
if ($resultat->numRows() > 0) {
$_GEN_commun['traduction_info_menu'] = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
}
$resultat->free();
}
 
// +------------------------------------------------------------------------------------------------------+
// Gestion de l'application du menu demandé.
 
// Recherche de la première application liée
if (isset($_GEN_commun['info_menu']->gm_id_menu)) {
$info_appli_menu = GEN_donnerIdPremiereApplicationLiee($_GEN_commun['info_menu']->gm_id_menu);
if (is_array($info_appli_menu)) {
$id_application = $info_appli_menu['gm_ce_application'];
$id_menu_actif = $info_appli_menu['gm_id_menu'];
 
// Si le menu n'a pas d'application lié, on recalcule l'objet $_GEN_commun['info_menu']
if ($id_menu_actif != $_GEN_commun['info_menu']->gm_id_menu) {
$requete = 'SELECT gen_menu.* '.
'FROM gen_menu '.
'WHERE gm_id_menu = '.$id_menu_actif;
 
$resultat = $db->query($requete);
(DB::isError($resultat))
? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete))
: '';
// Nous avons trouvé un menu "défaut" pour le site courant.
$_GEN_commun['info_menu'] = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
$resultat->free();
}
 
 
// Recherche des informations sur l'application liée
$requete_applicaton = 'SELECT * '.
'FROM gen_application '.
'WHERE gap_id_application = '.$id_application;
 
$resultat_applicaton = $db->query($requete_applicaton);
(DB::isError($resultat_applicaton))
? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_applicaton->getMessage(), $requete_applicaton))
: '';
 
$_GEN_commun['info_application'] = $resultat_applicaton->fetchRow(DB_FETCHMODE_OBJECT) ;
$resultat_applicaton->free();
} else {
// Gestion des erreurs sur la recherche de l'application liée.
// Finalement il a été décidé de ne pas afficher cette information sous la forme d'erreur.
//trigger_error('application du menu demandée introuvable', E_USER_NOTICE);
}
}
 
// +------------------------------------------------------------------------------------------------------+
// Gestion des arguments de l'application
 
if (isset($_GEN_commun['info_menu']->gm_application_arguments)) {
$arguments = explode(' ', $_GEN_commun['info_menu']->gm_application_arguments);
 
// Initialisaton de la variable globale $GS_ARGUMENTS
$_GEN_commun['info_application']->cache = false;
$_GEN_commun['info_application']->cache_duree = 0;
 
for ($i = 0; $i < count($arguments); $i++) {
$attr = explode('=', $arguments[$i]);
 
if ($attr[0] == 'cache_duree') {
$_GEN_commun['info_application']->cache_duree = $attr[1];
if ($_GEN_commun['info_application']->cache_duree > 0) {
$_GEN_commun['info_application']->cache = true;
}
} else if ($attr[0] != '') {
$_GEN_commun['info_application']->$attr[0] = (isset($attr[1]) ? $attr[1] : '');
}
}
}
 
// +------------------------------------------------------------------------------------------------------+
// Gestion des applettes
 
$requete = 'SELECT * '.
'FROM gen_application '.
'WHERE gap_bool_applette = 1 ';
$resultat = $_GEN_commun['pear_db']->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
 
$_GEN_commun['info_applette'] = array();
$i = 0;
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
$_GEN_commun['info_applette'][$i] = $ligne;
$i++;
}
$resultat->free();
 
// +------------------------------------------------------------------------------------------------------+
// Gestion de l'objet URL
 
$_GEN_commun['url'] = & new Pap_URL(PAP_URL);
if (isset($_GEN_commun['info_menu'])) {
$_GEN_commun['url']->setId($_GEN_commun['info_menu']->gm_id_menu);
}
 
if ( (isset($_GEN_commun['url_site'])) && (!empty($_GEN_commun['url_site'])) ) {
$_GEN_commun['url']->addQueryString(GEN_URL_CLE_SITE, $_GEN_commun['url_site']);
}
 
if ( (isset($_GEN_commun['url_menu'])) && (!empty($_GEN_commun['url_menu'])) ) {
$_GEN_commun['url']->addQueryString(GEN_URL_CLE_MENU, $_GEN_commun['url_menu']);
}
 
if ( (isset($_GET[GEN_URL_CLE_DATE])) && (!empty($_GET[GEN_URL_CLE_DATE])) ) {
$_GEN_commun['url_date'] = $_GET[GEN_URL_CLE_DATE];
$_GEN_commun['url']->addQueryString(GEN_URL_CLE_DATE, $_GEN_commun['url_date']);
}
 
if ( (isset($_GET[GEN_URL_CLE_FORMAT])) && (!empty($_GET[GEN_URL_CLE_FORMAT])) ) {
$_GEN_commun['url_format'] = $_GET[GEN_URL_CLE_FORMAT];
$_GEN_commun['url']->addQueryString(GEN_URL_CLE_FORMAT, $_GEN_commun['url_format']);
}
 
/* +--Fin du code ---------------------------------------------------------------------------------------+
* $Log: not supported by cvs2svn $
* Revision 1.28 2006/12/01 15:41:21 ddelon
* erreur affichage
*
* Revision 1.27 2006/11/07 18:43:54 jp_milcent
* Modification des expressions régulières des permaliens.
*
* Revision 1.26 2006/10/18 10:18:05 jp_milcent
* Gestion des erreurs HTTP par Papyrus.
*
* Revision 1.25 2006/10/11 18:04:11 jp_milcent
* Gestion avancée de la réecriture d'URL.
*
* Revision 1.24 2006/03/02 10:49:49 ddelon
* Fusion branche multilinguisme dans branche principale
*
* Revision 1.23.2.2 2005/12/20 14:40:24 ddelon
* Fusion Head vers Livraison
*
* Revision 1.23.2.1 2005/12/01 23:31:57 ddelon
* Merge Head vers multilinguisme
*
* Revision 1.23 2005/09/22 14:02:49 ddelon
* nettoyage annuaire et php5
*
* Revision 1.22 2005/09/20 17:01:22 ddelon
* php5 et bugs divers
*
* Revision 1.21 2005/08/31 17:34:52 ddelon
* Integrateur Wikini et administration des Wikini
*
* Revision 1.20 2005/06/24 10:48:35 jpm
* Modification des chemins des fichiers pour fonctionnement avec API Pear locale.
*
* Revision 1.19 2005/04/14 13:52:37 jpm
* Utilisation de la classe Pap_URL.
*
* Revision 1.18 2005/02/28 11:20:42 jpm
* Modification des auteurs.
*
* Revision 1.17 2005/02/23 15:35:04 jpm
* L'erreur "pas d'application" a été supprimé une message dans le corps du texte fourni déjà cette information.
*
* Revision 1.16 2005/02/17 17:51:40 florian
* Correction bug monde sans menu ni appli
*
* Revision 1.15 2004/12/06 12:12:28 jpm
* Début de gestion des auth multiples.
*
* Revision 1.14 2004/11/15 17:14:09 jpm
* Gestion des url avec seulement le code d'un menu.
*
* Revision 1.13 2004/11/03 17:14:38 jpm
* Gestion des sites externes.
*
* Revision 1.12 2004/10/26 18:42:21 jpm
* Gestion des sites externes.
*
* Revision 1.11 2004/10/25 16:28:47 jpm
* Ajout de nouvelles balises Papyrus, ajout vérification mise à jour de Papyrus, meilleure gestion des sessions...
*
* Revision 1.10 2004/10/22 17:23:59 jpm
* Début amélioration de la gestion des erreurs et de l'installation.
*
* Revision 1.9 2004/10/15 18:29:19 jpm
* Modif pour gérer l'appli installateur de Papyrus.
*
* Revision 1.8 2004/09/23 14:30:53 jpm
* Correction bogue sur les menus.
*
* Revision 1.7 2004/09/23 10:46:46 jpm
* Amélioration de la gestion du menu actif quand un menu n'a pas d'application liée.
*
* Revision 1.6 2004/09/10 16:38:34 jpm
* Ajout de l'initialisation d'une variable stockant les infos de débogage.
*
* Revision 1.5 2004/06/30 07:35:16 jpm
* Correction d'un bogue du à une mauvaise gestion de la résolution des conflits entre fichier CVS.
*
* Revision 1.4 2004/06/30 07:25:37 jpm
* Ajout d'un commentaire.
*
* Revision 1.3 2004/06/18 15:52:45 alex
* Actualisation de la variable $_GEN_commun['info_menu'] lorsque un menu n'a pas d'application lié
*
* Revision 1.2 2004/06/17 07:03:01 jpm
* Correction d'un bogue concernant l'internationalisation par défaut quand la langue du navigateur ne correspond pas à celle du site.
*
* Revision 1.1 2004/06/16 08:13:20 jpm
* Changement de nom de Génésia en Papyrus.
* Changement de l'arborescence.
*
* Revision 1.24 2004/05/05 14:33:37 jpm
* Gestion de l'indication de langue dans l'url.
* Utile que si on veut forcer la langue.
*
* Revision 1.23 2004/05/05 10:42:35 jpm
* Amélioration de la gestion de l'internationalisation.
*
* Revision 1.22 2004/05/04 16:17:05 jpm
* Légère amélioration du code (libération de ressource).
 
de ressource).
*
* Revision 1.21 2004/05/03 11:21:58 jpm
* Fin de la gestion des applettes et suppression de l'info_menu_hierarchie de _GEN_commun.
* Ajout de la récupération d'une info sur la hiérarchie.
* Surement à supprimer car inutile.
* Ajout de la récupération d'une info sur la hiérarchie.
* Surement à supprimer car inutile.
* Changement du modèle de la base de données.
* Revision 1.19 2004/04/28 12:04:31 jpm
* Changement du modèle de la base de données.
*
* Revision 1.18 2004/04/22 08:28:12 jpm
* Transformation de $GS_GLOBAL en $_GEN_commun.
*
* Revision 1.17 2004/04/09 16:43:32 jpm
* Suppression d'un blanc.
* Récupération de la création de l'objet URL.
* Revision 1.16 2004/04/09 16:20:11 jpm
* Récupération de la création de l'objet URL.
* Gestion des tables i18n.
* Utilisation de la classe Pear HTTP pour la négociation du langage à utiliser pour le site.
* Revision 1.15 2004/04/05 16:37:43 jpm
* Utilisation de la classe Pear HTTP pour la négociation du langage à utiliser pour le site.
* Déplacement dans le fichier gen_initialisation_pear.inc.php de la création des objets Pear Net_URL et Auth.
* Revision 1.14 2004/04/02 16:29:30 jpm
* Déplacement dans le fichier gen_initialisation_pear.inc.php de la création des objets Pear Net_URL et Auth.
*
* Revision 1.13 2004/04/01 11:27:13 jpm
* Ajout et modification de commentaires pour PhpDocumentor.
* Prise en compte du nouveau modèle de Génésia révision 1.9.
* Revision 1.12 2004/03/31 16:50:04 jpm
* Prise en compte du nouveau modèle de Papyrus révision 1.9.
* Déplacement des fonctions de gestion d'erreur dans la bibliotheque de l'application Installateur.
* Modification des commentaires vis à vis du nouveau modèle.
* Déplacement des fonctions de gestion d'erreur dans la bibliotheque de l'application Installateur.
* Suppression de l'attribution d'une configuration par défaut.
* Changement et simplification des noms des variables globales.
* Traduction en français de certaines variables et partie de code.
* Remplacement de variable par des constante provenant du fichier de configuration.
* Traduction en français de certaines variables et partie de code.
* Mise en forme requête sql.
* Revision 1.10 2004/03/24 07:20:03 jpm
* Mise en forme requête sql.
* Ajout de commentaire dans l'entête.
* Mise en conformité avec la convention de codage.
* Ajout de commentaire dans l'entête.
* Mise en conformité avec la convention de codage.
*
* Revision 1.8 2004/03/23 16:31:54 jpm
* Ajout du code provenant de gen_noyau.inc.php.
* Ajout, formatage et traduction des commentaires.
*
* Amélioration de la conformité avec la convention de codage.
* Changement requête sql pour le nouveau modèle de Génésia.
* Amélioration de la conformité avec la convention de codage.
* Changement requête sql pour le nouveau modèle de Papyrus.
*
* Correction des requêtes sql pour mise en conformité avec le nouveau modèle de Génésia et la convention de codage.
* Ajout de commentaires et mise en forme.
* Correction des requêtes sql pour mise en conformité avec le nouveau modèle de Papyrus et la convention de codage.
*
* Revision 1.5 2003/12/16 16:57:59 alex
* mise à jour pour compatibilité avec genesia
* Ajout de commentaires et début de mise en conformité
* Revision 1.4 2003/11/24 16:05:02 jpm
* Ajout de commentaires et début de mise en conformité
* avec la convention de codage.
*
*
* +--Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/pap_connecte_bdd.inc.php
New file
0,0 → 1,89
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library 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 |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: pap_connecte_bdd.inc.php,v 1.3 2006-04-28 12:41:49 florian Exp $
/**
* Connection à la base de données et inclusions des classes générées par DataObject de Pear.
*
* Ce fichier permet de se connecter à la base de données et d'inclure les classes représentant les tables
* de la base de données de Papyrus. Ces tables sont générées par DataObject de Pear.
*
*@package Papyrus
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author Aucun
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.3 $ $Date: 2006-04-28 12:41:49 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTÊTE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
/** <br> Inclusion de la classe PEAR d'abstraction de base de donnée. */
require_once PAP_CHEMIN_API_PEAR.'DB.php';
 
// +------------------------------------------------------------------------------------------------------+
// | CORPS du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
// +------------------------------------------------------------------------------------------------------+
// Connexion à la base de données.
 
$db = DB::connect(PAP_DSN) ;
$_GEN_commun['pear_db'] = $db;
if (DB::isError($db)) {
$msg_erreur_connection = 'Impossible de se connecter à la base de données.';
die(BOG_afficherErreurSql(__FILE__, __LINE__, $db->getMessage(), 'connexion à la base de données',$msg_erreur_connection));
}
 
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.2 2004/10/15 18:29:19 jpm
* Modif pour gérer l'appli installateur de Papyrus.
*
* Revision 1.1 2004/06/16 08:11:22 jpm
* Changement de nom de Génésia en Papyrus.
* Changement de l'arborescence.
*
* Revision 1.5 2004/05/10 13:24:16 jpm
* Correction gestion de l'erreur impossible de se connecter.
*
* Revision 1.4 2004/05/01 11:41:31 jpm
* Ajout de la variable globale $_GEN_commun['pear_db'] devant être utilisé à la place de $db.
*
* Revision 1.3 2004/04/28 12:04:31 jpm
* Changement du modèle de la base de données.
*
* Revision 1.2 2004/04/22 08:25:05 jpm
* Transformation de $GS_GLOBAL en $_GEN_commun.
*
* Revision 1.1 2004/04/21 16:24:29 jpm
* Ajout d'un fichier spécifique pour la connexion à la base de données et incluant les classes DataObject de Pear.
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/applications/admin_application/langues/adap_langue_fr.inc.php
New file
0,0 → 1,74
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This file is part of Papyrus. |
// | |
// | Foobar is free software; you can redistribute it and/or modify |
// | it under the terms of the GNU General Public License as published by |
// | the Free Software Foundation; either version 2 of the License, or |
// | (at your option) any later version. |
// | |
// | Foobar 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 General Public License for more details. |
// | |
// | You should have received a copy of the GNU General Public License |
// | along with Foobar; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: adap_langue_fr.inc.php,v 1.4 2006-12-01 10:39:14 alexandre_tb Exp $
/**
* Gestion des langues de l'application ADME
*
* Contient les constantes pour la langue française de l'application ADAP.
*
*@package Admin_appli
*@subpackage Langues
//Auteur original :
*@author Alexandre Granier <alexandre@tela-botanica.org>
//Autres auteurs :
*@author Aucun
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.4 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | LISTE des CONSTANTES |
// +------------------------------------------------------------------------------------------------------+
define ('ADAP_NOM_APPL', 'Nom de l\'application') ;
define ('ADAP_MODIFIER', 'Modifier') ;
define ('ADAP_SUPPRIMER', 'Supprimer') ;
define ('ADAP_AJOUTER', 'Ajouter une application') ;
define ('ADAP_NOM_APPL_ALERTE', 'Vous devez spécifier un nom') ;
define ('ADAP_CHAMPS_REQUIS', 'Indique les champs requis') ;
define ('ADAP_DESCRIPTION', 'Description') ;
define ('ADAP_IDENTIFIEZ_VOUS','Veuillez vous identifier pour acc&egrave;der &agrave; ce menu.');
define ('ADAP_CHEMIN', 'Chemin vers l\'application') ;
define ('ADAP_CHEMIN_REQUIS', 'Le chemin vers l\'application est requis') ;
define ('ADAP_APPLETTE', 'L\'application est elle une applette') ;
define ('ADAP_ANNULER', 'Annuler') ;
define ('ADAP_VALIDER', 'Valider') ;
 
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.3 2006/10/06 10:40:51 florian
* harmonisation des messages d'erreur de l'authentification
*
* Revision 1.2 2005/03/09 10:40:37 alex
* version initiale
*
* Revision 1.1 2004/12/13 18:07:38 alex
* version initiale
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/applications/admin_application/admin_application.php
New file
0,0 → 1,207
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library 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 |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: admin_application.php,v 1.7.2.1 2007-03-20 14:19:09 alexandre_tb Exp $
/**
* Application gérant les applications de Papyrus
*
* Cette application permet de gérer les applications de papyrus
* elle permet de spécifier pour un monde quel annuaire utiliser
* et de gérer des authentifications de spip et ou wikini
*
*@package Admin_auth
//Auteur original :
*@author Alexandre GRANIER <alexandre@tela-botanica.org>
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.7.2.1 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTÊTE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
/** Inclusion du fichier de configuration de cette application.*/
require_once GEN_CHEMIN_PAP.'applications/admin_application/configuration/adap_configuration.inc.php';
 
//Utilisation de la bibliothèque PEAR NET_URL
 
/** Inclusion de la bibliothèque PEAR de conception de formulaire.*/
require_once ADAP_CHEMIN_BIBLIOTHEQUE_PEAR.'HTML/QuickForm.php';
require_once ADAP_CHEMIN_BIBLIOTHEQUE_PEAR.'HTML/QuickForm/select.php';
 
/** Inclusion de l'API de fonctions gérant les erreurs sql.*/
require_once ADAP_CHEMIN_BIBLIOTHEQUE_API.'debogage/BOG_sql.fonct.php';
 
/** Inclusion des fonctions de manipulation du sql.
* Permet la récupération d'un nouvel identifiant d'une table.*/
require_once ADAP_CHEMIN_BIBLIOTHEQUE_API.'sql/SQL_manipulation.fonct.php';
 
require_once ADAP_CHEMIN_BIBLIOTHEQUE_API.'html/HTML_TableFragmenteur.php' ;
 
/** <BR> Inclusion de la bibliothèque de fonctions concernant les tables "gen_site..." de Papyrus.*/
require_once ADAP_CHEMIN_BIBLIOTHEQUE_GEN.'pap_site.fonct.php';
 
/** <BR> Inclusion de la bibliothèque de fonctions concernant les tables "gen_menu..." de Papyrus.*/
require_once ADAP_CHEMIN_BIBLIOTHEQUE_GEN.'pap_menu.fonct.php';
 
/** <BR> Inclusion de la bibliothèque de fonctions concernant les tables "gen_applications..." de Papyrus.*/
require_once ADAP_CHEMIN_BIBLIOTHEQUE_GEN.'pap_application.fonct.php';
 
/** <BR> Inclusion de la bibliothèque de fonctions concernant l'affichage commun.*/
require_once ADAP_CHEMIN_BIBLIOTHEQUE.'adap_application.fonct.php';
 
require_once ADAP_CHEMIN_BIBLIOTHEQUE.'HTML_formulaireAppli.class.php' ;
 
 
// Inclusion des fichiers de traduction de l'appli ADME dePapyrus
if (file_exists(ADAP_CHEMIN_LANGUE.'adap_langue_'.$GLOBALS['_GEN_commun']['i18n'].'.inc.php')) {
/** Inclusion du fichier de traduction suite à la transaction avec le navigateur.*/
require_once ADAP_CHEMIN_LANGUE.'adap_langue_'.$GLOBALS['_GEN_commun']['i18n'].'.inc.php';
} else {
/** Inclusion du fichier de traduction par défaut.*/
require_once ADAP_CHEMIN_LANGUE.'adap_langue_'.ADAP_I18N_DEFAUT.'.inc.php';
}
 
// Stockage des styles de l'application
GEN_stockerStyleExterne('adap_standard', ADAP_CHEMIN_STYLE.'adap_standard.css');
 
// +------------------------------------------------------------------------------------------------------+
// | CORPS du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
function afficherContenuCorps()
{
$db = &$GLOBALS['_GEN_commun']['pear_db'] ;
$url = $GLOBALS['_GEN_commun']['url'] ;
$auth = &$GLOBALS['_GEN_commun']['pear_auth'] ;
$res='';
if (!$auth->getAuth()) {
$res .= '<p class="zone_alert">'.ADAP_IDENTIFIEZ_VOUS.'</p>'."\n" ;
$res .= '<form id="form_connexion" style="clear:both;" class="form_identification" action="' ;
$res .= $url->getURL();
$res .= '" method="post">
<fieldset>
<legend>Identifiez vous</legend>
<label for="username">Courriel : </label>
<input type="text" id="username" name="username" maxlength="80" tabindex="1" value="courriel" />
<label for="password">Mot de passe : </label>
<input type="password" id="password" name="password" maxlength="80" tabindex="2" value="mot de passe" />
<input type="submit" id="connexion" name="connexion" tabindex="3" value="ok" />
</fieldset>
</form>';
return $res ;
} else {
// Le lien pour une nouvelle entrée
$res .= '<a href="'.$url->getURL().'&amp;action=nouveau">'.ADAP_AJOUTER.'</a>'."\n<br />" ;
// traitement de la suppression
if (isset ($_REQUEST['action']) && $_REQUEST['action'] == 'supprimer') adap_supprimer_application($_REQUEST['id_appl'], $db) ;
// traitement de l'ajout
if (isset ($_REQUEST['action']) || isset ($_REQUEST['id_appl'])) {
$formulaire = new HTML_formulaireAppl('formulaire_appl', '', str_replace ('&amp;', '&', $url->getURL())) ;
$formulaire->construitFormulaire($url) ;
// On ajoute un champs caché avec action=nouveau_v
if (isset ($_REQUEST['action']) && $_REQUEST['action'] == 'nouveau') {
$formulaire->addElement ('hidden', 'action', 'nouveau_v') ;
return $formulaire->toHTML() ;
}
if (isset ($_REQUEST['id_appl']) && !isset ($_REQUEST['action'])) {
$formulaire->addElement ('hidden', 'action', 'modifier_v') ;
$formulaire->addElement ('hidden', 'id_appl', $_REQUEST['id_appl']) ;
$formulaire->setDefaults(adap_valeurs_par_defaut($_REQUEST['id_appl'], $db)) ;
return $formulaire->toHTML() ;
}
if ($_REQUEST['action'] == 'modifier_v') {
if ($formulaire->validate()) {
mise_a_jour ($formulaire->getSubmitValues(), $db) ;
}
}
if ($_REQUEST['action'] == 'nouveau_v') {
if ($formulaire->validate()) {
insertion ($formulaire->getSubmitValues(), $db) ;
}
}
}
// Comportement par défaut
// requete sur la table gen_application
$requete = 'SELECT gap_id_application, gap_nom FROM gen_application where gap_id_application <> 0 ORDER BY gap_nom ASC' ;
$resultat = $db->query ($requete) ;
if (DB::isError ($resultat)) {
$GLOBALS['_GEN_commun']['debogage_erreur']->gererErreur(E_USER_WARNING, "Echec de la requete : $requete<br />".$resultat->getMessage(),
__FILE__, __LINE__, 'admin_appl') ;
return ;
}
$liste = new HTML_TableFragmenteur () ;
$liste->construireEntete(array (ADAP_NOM_APPL, ADAP_SUPPRIMER)) ;
$tableau_appl = array() ;
while ($ligne = $resultat->fetchRow()) {
$url->addQueryString ('id_appl', $ligne[0]) ;
array_push ($tableau_appl, array ('<a href="'.$url->getURL().'">'.$ligne[1].'</a>'."\n", // Première colonne, le nom de l'application
'<a href="'.$url->getURL().'&amp;action=supprimer" onclick="javascript:return confirm (\''.ADAP_SUPPRIMER.' ?\');">'.ADAP_SUPPRIMER.'</a>'."\n"
));
}
$liste->construireListe($tableau_appl) ;
$res .= $liste->toHTML();
return $res ;
}
}// Fin de la fonction afficherContenuCorps()
 
// +------------------------------------------------------------------------------------------------------+
// | PIED du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.8 2007/03/20 14:17:36 alexandre_tb
* remplacement des varaibles $GLOBALS par $_REQUEST, pour que l appli fonctionne avec les register_globals à Off
*
* Revision 1.7 2006/12/01 10:39:14 alexandre_tb
* Suppression des références aux applettes
*
* Revision 1.6 2006/10/06 10:40:51 florian
* harmonisation des messages d'erreur de l'authentification
*
* Revision 1.5 2006/09/07 13:28:39 jp_milcent
* Mise en majuscule des termes SQL et trie des application par ordre alphabétique.
*
* Revision 1.4 2005/03/09 10:46:17 jpm
* Changement d'un nom de fichier.
*
* Revision 1.3 2005/03/09 10:40:26 alex
* version initiale
*
* Revision 1.2 2005/02/28 10:32:59 jpm
* Changement de nom de dossier.
*
* Revision 1.1 2004/12/13 18:07:19 alex
* version initiale
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/applications/admin_application/configuration/adap_configuration.inc.php
New file
0,0 → 1,80
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library 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 |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: adap_configuration.inc.php,v 1.1 2004-12-13 18:07:33 alex Exp $
/**
* Fichier de configuration général de l'application Administration des applications.
*
* Permet de définir certains paramètres valables pour toutes l'application
* Administrateur des applications.
*
*@package Admin_application
*@subpackage Configuration
//Auteur original :
*@author Alexandre GRANIER <alexandre@tela-botanica.org>
//Autres auteurs :
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.1 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTETE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
// +------------------------------------------------------------------------------------------------------+
// | CORPS du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
/** Constante stockant la valeur de la langue par défaut pour l'appli ADAP.*/
define('ADAP_I18N_DEFAUT', GEN_I18N_ID_DEFAUT);
 
// Chemin des fichiers à inclure.
/** Chemin vers la bibliothèque PEAR.*/
define('ADAP_CHEMIN_BIBLIOTHEQUE_PEAR', '');
/** Chemin vers la bibliothèque API.*/
define('ADAP_CHEMIN_BIBLIOTHEQUE_API', GEN_CHEMIN_API);
/** Chemin vers la bibliothèque de Papyrus.*/
define('ADAP_CHEMIN_BIBLIOTHEQUE_GEN', GEN_CHEMIN_BIBLIO);
 
// Chemin vers les dossiers de l'application
/** Chemin vers l'application Admin Auth de Papyrus.*/
define('ADAP_CHEMIN_APPLICATION', GEN_CHEMIN_APPLICATION.'admin_application/');
/** Chemin vers les images de l'application Admin Auth de Papyrus.*/
define('ADAP_CHEMIN_IMAGE_INTERFACE', ADAP_CHEMIN_APPLICATION.'presentations/images/interface/');
/** Chemin vers la bibliothèque de l'application Admin Auth de Papyrus.*/
define('ADAP_CHEMIN_BIBLIOTHEQUE', ADAP_CHEMIN_APPLICATION.'bibliotheque/');
/** Chemin vers les classes de l'application Admin Auth de Papyrus.*/
define('ADAP_CHEMIN_CLASSES', ADAP_CHEMIN_APPLICATION.'classes/');
/** Chemin vers les fichiers de traduction de l'application Admin Auth de Papyrus.*/
define('ADAP_CHEMIN_LANGUE', ADAP_CHEMIN_APPLICATION.'langues/');
/** Chemin vers les styles de l'application Admin Auth de Papyrus.*/
define('ADAP_CHEMIN_STYLE', ADAP_CHEMIN_APPLICATION.'presentations/styles/');
 
 
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/applications/admin_application/bibliotheque/adap_application.fonct.php
New file
0,0 → 1,153
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This file is part of Papyrus. |
// | |
// | Foobar is free software; you can redistribute it and/or modify |
// | it under the terms of the GNU General Public License as published by |
// | the Free Software Foundation; either version 2 of the License, or |
// | (at your option) any later version. |
// | |
// | Foobar 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 General Public License for more details. |
// | |
// | You should have received a copy of the GNU General Public License |
// | along with Foobar; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: adap_application.fonct.php,v 1.4 2006-12-01 10:39:14 alexandre_tb Exp $
/**
* Contient les fonctions de l'appli admin_auth
*
*
*
*
*@package Admin_auth
*@subpackage Fonctions
//Auteur original :
*@author Alexandre Granier <alexandre@tela-botanica.org>
//Autres auteurs :
*@author Aucun
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.4 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | LISTE de FONCTIONS |
// +------------------------------------------------------------------------------------------------------+
 
/**
*
*
* @return
*/
 
function adap_supprimer_application($id_appl, &$db) {
$requete = 'DELETE FROM gen_application WHERE gap_id_application='.$id_appl;
$resultat = $db->query ($requete) ;
}
 
/**
*
*
* @return
*/
 
function adap_valeurs_par_defaut ($id_appl, &$db) {
// requete sur gen_site_auth
$requete = 'SELECT * FROM gen_application WHERE gap_id_application='.$id_appl ;
$resultat = $db->query ($requete) ;
if (DB::isError ($resultat)) {
trigger_error("Echec de la requete : $requete<br />".$resultat->getMessage(), E_USER_WARNING) ;
return ;
}
$tableau_retour = array () ;
$ligne = $resultat->fetchRow (DB_FETCHMODE_OBJECT) ;
$tableau_retour['nom_appl'] = $ligne->gap_nom ;
$tableau_retour['description'] = $ligne->gap_description ;
$tableau_retour['chemin'] = $ligne->gap_chemin ;
unset ($requete, $resultat) ;
return $tableau_retour ;
}
 
/**
*
*
* @return
*/
 
function insertion ($valeur, &$db) {
$id_appl_bdd = SQL_obtenirNouveauId ($db, 'gen_application', 'gap_id_application') ;
$requete = "insert into gen_application set gap_id_application="
.$id_appl_bdd.","
.requete_site_appl($valeur) ;
$resultat = $db->query ($requete) ;
if (DB::isError ($resultat)) {
trigger_error("Echec de la requete : $requete<br />".$resultat->getMessage(),E_USER_WARNING) ;
}
}
 
/**
*
*
* @return
*/
 
function mise_a_jour ($valeur, &$db) {
$requete = "update gen_application set ".requete_site_appl($valeur)
.' WHERE gap_id_application='.$GLOBALS['id_appl'] ;
$resultat = $db->query ($requete) ;
if (DB::isError ($resultat)) {
trigger_error("Echec de la requete : $requete<br />".$resultat->getMessage(),E_USER_WARNING) ;
}
}
 
/**
*
*
* @return string un morceau de code SQL
*/
 
function requete_site_appl (&$valeur) {
if (!isset($valeur['applette'])) {$valeur['applette']=0;}
return 'gap_nom="'.$valeur['nom_appl'].'", '
.'gap_description="'.$valeur['description'].'", '
.'gap_chemin="'.$valeur['chemin'].'"';
}
 
 
// +------------------------------------------------------------------------------------------------------+
// | PIED du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.3 2006/09/07 13:28:39 jp_milcent
* Mise en majuscule des termes SQL et trie des application par ordre alphabétique.
*
* Revision 1.2 2005/09/23 15:02:38 florian
* correction de bugs
*
* Revision 1.1 2005/03/09 10:44:04 jpm
* Mise au norme du nom du fichier.
*
* Revision 1.2 2005/03/09 10:40:33 alex
* version initiale
*
* Revision 1.1 2004/12/13 18:07:28 alex
* version initiale
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/applications/admin_application/bibliotheque/HTML_formulaireAppli.class.php
New file
0,0 → 1,110
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library 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 |
// | General Public License for more details. |
// | |
// | You should have received a copy of the GNU General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: HTML_formulaireAppli.class.php,v 1.4 2006-12-01 10:39:14 alexandre_tb Exp $
/**
* Application projet
*
* La classe HTML_formulaireAuth
*
*@package projet
//Auteur original :
*@author Alexandre Granier <alexandre@tela-botanica.org>
//Autres auteurs :
*@author Aucun
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.4 $
// +------------------------------------------------------------------------------------------------------+
*/
 
 
// +------------------------------------------------------------------------------------------------------+
// | ENTETE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
/** Inclure le fichier de langue pour utiliser cette classe de façon autonome. */
 
require_once PAP_CHEMIN_API_PEAR.'HTML/QuickForm.php' ;
require_once PAP_CHEMIN_API_PEAR.'HTML/QuickForm/checkbox.php' ;
require_once PAP_CHEMIN_API_PEAR.'HTML/QuickForm/select.php' ;
 
// +------------------------------------------------------------------------------------------------------+
// | LISTE des constantes |
// +------------------------------------------------------------------------------------------------------+
 
 
/**
* class HTML_formulaireProjet
* Cette classe représente un formulaire pour saisir un projet ou le modifier.
*/
class HTML_formulaireAppl extends HTML_QuickForm
{
/**
* Constructeur
*
* @param string formName Le nom du formulaire.
* @param string method Soit get soit post, voir le protocole HTTP
* @param string action L'action du formulaire.
* @param string target La cible du formulaire.
* @param Array attributes Des attributs supplémentaires pour la balise <form>
* @param bool trackSubmit Pour repérer si la formulaire a été soumis.
* @return void
* @access public
*/
function HTML_formulaireAppl( $formName = "", $method = "post", $action = "", $target = "_self", $attributes = "", $trackSubmit = false )
{
HTML_QuickForm::HTML_QuickForm($formName, $method, $action, $target, $attributes, $trackSubmit) ;
} // end of member function HTML_formulaireProjet
 
/**
* Renvoie le code HTML du formulaire.
*
* @return string
* @access public
*/
function toHTML( )
{
$res = HTML_QuickForm::toHTML() ;
return $res ;
} // end of member function toHTML
 
/**
* Ajoute les champs nécessaire au formulaire.
*
* @return void
* @access public
*/
function construitFormulaire($url_retour)
{
$this->addElement ('text', 'nom_appl', ADAP_NOM_APPL, array ('size' => 60)) ;
$this->addRule ('nom_appl', ADAP_NOM_APPL_ALERTE, 'required', '', 'client') ;
$this->addElement ('textarea', 'description', ADAP_DESCRIPTION, array ('cols' => 50, 'rows' => 5)) ;
$this->addElement ('text', 'chemin', ADAP_CHEMIN, array('size' => 50)) ;
 
$this->setRequiredNote('<span style="color: #ff0000">*</span>'.ADAP_CHAMPS_REQUIS) ;
// on fait un groupe avec les boutons pour les mettres sur la même ligne
$buttons[] = &HTML_QuickForm::createElement('button', 'annuler', ADAP_ANNULER, array ("onclick" => "javascript:document.location.href='".str_replace ('&amp;', '&', $url_retour->getURL())."'"));
$buttons[] = &HTML_QuickForm::createElement('submit', 'valider', ADAP_VALIDER);
$this->addGroup($buttons, null, null, '&nbsp;');
} // end of member function _construitFormulaire
} // end of HTML_formulaireProjet
?>
/branches/v1.0-menes/papyrus/applications/admin_menu/bibliotheque/adme_general.fonct.php
New file
0,0 → 1,391
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// Copyright (C) 1999-2004 Tela Botanica (accueil@tela-botanica.org)
//
// Ce logiciel est un programme informatique servant à gérer du contenu et des
// applications web.
// Ce logiciel est régi par la licence CeCILL soumise au droit français et
// respectant les principes de diffusion des logiciels libres. Vous pouvez
// utiliser, modifier et/ou redistribuer ce programme sous les conditions
// de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA
// sur le site "http://www.cecill.info".
 
// En contrepartie de l'accessibilité au code source et des droits de copie,
// de modification et de redistribution accordés par cette licence, il n'est
// offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons,
// seule une responsabilité restreinte pèse sur l'auteur du programme, le
// titulaire des droits patrimoniaux et les concédants successifs.
 
// A cet égard l'attention de l'utilisateur est attirée sur les risques
// associés au chargement, à l'utilisation, à la modification et/ou au
// développement et à la reproduction du logiciel par l'utilisateur étant
// donné sa spécificité de logiciel libre, qui peut le rendre complexe à
// manipuler et qui le réserve donc à des développeurs et des professionnels
// avertis possédant des connaissances informatiques approfondies. Les
// utilisateurs sont donc invités à charger et tester l'adéquation du
// logiciel à leurs besoins dans des conditions permettant d'assurer la
// sécurité de leurs systèmes et ou de leurs données et, plus généralement,
// à l'utiliser et l'exploiter dans les mêmes conditions de sécurité.
 
// Le fait que vous puissiez accéder à cet en-tête signifie que vous avez
// pris connaissance de la licence CeCILL, et que vous en avez accepté les
// termes.
// ----
// CVS : $Id: adme_general.fonct.php,v 1.18.2.2 2007-04-19 13:10:55 florian Exp $
/**
* Contient l'affichage par défaut de l'appli quand aucune actin
*
* Ce fichier contient les fonctions d'affichage commune à toute l'application Admin Menu.
* Nous y trouvons, entre autre, la fonction d'affichage par défaut de l'appli.
*
*@package Admin_menu
*@subpackage Fonctions
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author Aucun
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.18.2.2 $ $Date: 2007-04-19 13:10:55 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTETE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
// +------------------------------------------------------------------------------------------------------+
// | LISTE de FONCTIONS |
// +------------------------------------------------------------------------------------------------------+
/** Fonction ADME_afficherFormPrincipal() - Affichage par défaut.
*
* Fournit l'affichage par défaut de l'application Admin Menus.
*
* @param object objet Pear de connection à la base de données.
* @param object objet Pear représentant l'url de base.
* @return string le XHTML par défaut de la page.
*/
function ADME_afficherFormPrincipal($objet_pear_db, $objet_pear_url, $adme_site_id, $adme_menu_id, $adme_action)
{
$db=$objet_pear_db;
$id_langue = $GLOBALS['_GEN_commun']['i18n']; //identifiant de la langue choisie
// Langue en cours : langue choisie ou langue par defaut (principale)
if (isset($id_langue) && ($id_langue!='')) {
$langue_test=$id_langue;
} else {
$langue_test=GEN_I18N_ID_DEFAUT;
}
 
//$langue_test=GEN_I18N_ID_DEFAUT;
//requete pour recuperer l'id du site par defaut
$requete = 'SELECT gs_id_site '.
'FROM gen_site, gen_site_relation '.
'WHERE gsr_id_site_01 = gsr_id_site_02 '.
'AND gsr_id_site_01 = gs_id_site '.
'AND gsr_id_valeur=101 '.
'AND gs_ce_i18n = "'.$langue_test.'" ';
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
$id_site_par_defaut=$ligne->gs_id_site;
}
// Liste des sites principaux :
// Recherche de tous les sites langue en cours
$requete = 'SELECT * '.
'FROM gen_site, gen_site_relation '.
'WHERE gsr_id_site_01 = gsr_id_site_02 '.
'AND gsr_id_site_01 = gs_id_site '.
'AND gsr_id_valeur IN (102, 103) '.
'AND gs_ce_i18n = "'.$langue_test.'" '.
'ORDER BY gsr_ordre';
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;
$liste_site=array();
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
if ($langue_test == GEN_I18N_ID_DEFAUT) {
$requete_est_traduction = 'SELECT gsr_id_site_01 '.
'FROM gen_site_relation '.
'WHERE '.$ligne->gs_id_site.' = gsr_id_site_02 ' .
'AND gsr_id_site_01 <> gsr_id_site_02 ' .
'AND gsr_id_valeur = 1 ';// 1 = "avoir traduction"
$resultat_est_traduction = $db->query($requete_est_traduction);
(DB::isError($resultat_est_traduction))
? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_est_traduction->getMessage(), $requete_est_traduction))
: '';
if ( $resultat_est_traduction->numRows() == 0 ) {
$liste_site[]=$ligne;
}
}
else {
$liste_site[]=$ligne;
}
}
$resultat->free();
// Si la langue en cours n'est pas la langue par défaut, recherche des sites ayant comme langue
// la langue par defaut, non traduits dans la langue en cours et n'etant pas des traductions
if ($langue_test != GEN_I18N_ID_DEFAUT) {
 
$requete = 'SELECT * '.
'FROM gen_site, gen_site_relation '.
'WHERE gsr_id_site_01 = gsr_id_site_02 '.
'AND gs_id_site = gsr_id_site_01 '.
'AND gsr_id_valeur IN (102, 103) '.
'AND gs_ce_i18n = "'.GEN_I18N_ID_DEFAUT.'" '.
'ORDER BY gs_code_num ASC';// 102 = site "principal" et 103 = site "externe"
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
// Recherche de tous les sites de la langue principale qui ne sont pas traduits dans la langue en cours
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
$requete_est_traduction = 'SELECT gsr_id_site_01 '.
'FROM gen_site_relation '.
'WHERE '.$ligne->gs_id_site.' = gsr_id_site_02 ' .
'AND gsr_id_site_01 <> gsr_id_site_02 ' .
'AND gsr_id_valeur = 1 ';// 1 = "avoir traduction"
$resultat_est_traduction = $db->query($requete_est_traduction);
(DB::isError($resultat_est_traduction))
? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_est_traduction->getMessage(), $requete_est_traduction))
: '';
if ( $resultat_est_traduction->numRows() == 0 ) {
if (isset($id_langue) && ($id_langue!='')) {
$langue_test=$id_langue;
} else {
$langue_test=GEN_I18N_ID_DEFAUT;
}
$requete_traduction = 'SELECT gsr_id_site_01 '.
'FROM gen_site_relation, gen_site '.
'WHERE '.$ligne->gs_id_site.' = gsr_id_site_01 ' .
'AND gsr_id_site_02 = gs_id_site '.
'AND gs_ce_i18n = "'.$langue_test.'" '.
'AND gsr_id_valeur = 1 ';// 1 = "avoir traduction"
$resultat_traduction = $db->query($requete_traduction);
(DB::isError($resultat_traduction))
? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_traduction->getMessage(), $requete_traduction))
: '';
if ( $resultat_traduction->numRows() == 0 ) {
$liste_site []=$ligne;
}
$resultat_traduction->free();
}
$resultat_est_traduction->free();
}
$resultat->free();
}
// Traduction d'un site principal uniquement :
$requete = 'SELECT * '.
'FROM gen_site_relation '.
'WHERE gsr_id_site_02 = '.$adme_site_id.' '.
'AND gsr_id_valeur =1 '; // 1 = "avoir traduction"
$resultat = $db->query($requete);
if (DB::isError($resultat)) {
die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
}
if ( $resultat->numRows() == 0 ) {
$adme_site_id =$adme_site_id;
}
else {
$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
$adme_site_id = $ligne->gsr_id_site_01;
}
$resultat->free();
//---------------------------------------------------------------------------------------------------------------
// Création du formulaire
// Notes : Quickform semble remplacer les & des &amp; à nouveau par des &amp; solution utiliser str_replace()...
$form =& new HTML_Quickform('adme__sites', 'post', str_replace('&amp;', '&', $objet_pear_url->getUrl()));
$tab_index = 1000;
$squelette =& $form->defaultRenderer();
$squelette->setformTemplate("\n".'<form {attributes}>'."\n".'{content}'."\n"."\n".'</form>'."\n");
$squelette->setElementTemplate( '{label}'."\n".'{element}'."\n".
'<!-- BEGIN required --><span class="symbole_obligatoire">*</span><!-- END required -->'."\n".
'<!-- BEGIN error --><span class="erreur">{error}</span><!-- END error -->'."\n");
$partie_site_debut = '<fieldset>'."\n".
'<legend>'.ADME_LG_FORM_SITE_TITRE.'</legend>'."\n";
$form->addElement('html', $partie_site_debut);
$id = 'adme_site_id';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'onchange' => 'javascript:this.form.submit();');
$label = '<label for="'.$id.'">'.ADME_LG_FORM_SITE_CHOIX.'</label>';
$objet_select = new HTML_Quickform_select($id, $label, '', $aso_attributs);
$aso_options = array();
foreach ($liste_site as $ligne ) {
if (!isset($adme_site_id) || $adme_site_id == 0) {
$adme_site_id = $ligne->gs_id_site;
}
if ($ligne->gs_id_site == $adme_site_id) {
$objet_select->addOption(htmlentities($ligne->gs_nom.' ('.$ligne->gs_code_alpha.')'), $ligne->gs_id_site, 'selected="selected"');
// Attribution du nom du site sur lequel on travaille pour le titre
$site_nom = $ligne->gs_nom;
} else {
$objet_select->addOption(htmlentities($ligne->gs_nom.' ('.$ligne->gs_code_alpha.')'), $ligne->gs_id_site);
}
}
$form->addElement($objet_select);
$form->addElement('submit', 'choisir_site', ADME_LG_FORM_SITE_VALIDER);
$partie_site_fin = "\n".'</fieldset>';
$form->addElement('html', $partie_site_fin);
// Instanciation des valeurs par défaut du formulaire
if (isset($id_site_par_defaut)) {
if (!isset($_GET['adme_site_id'])) {
$adme_site_id=$id_site_par_defaut;
} else {
$adme_site_id=$_GET['adme_site_id'];
}
}
$form->setDefaults(array('adme_site_id' => $adme_site_id));
$retour ='';
$retour .= '<h1>'.ADME_LG_MENU_TITRE.$site_nom.'</h1>'."\n";
$retour .= $form->toHTML()."\n";
//---------------------------------------------------------------------------------------------------------------
// Gestion des menus classiques
$retour .= '<p>'."\n";
$objet_pear_url_copie = $objet_pear_url;
$objet_pear_url_copie->addQueryString('adme_action', ADME_LG_ACTION_CLASSIQUE_AJOUTER);
$objet_pear_url_copie->addQueryString('adme_site_id', $adme_site_id);
$objet_pear_url_copie->addQueryString('adme_menu_id', 0);
$url_ajout_menu_classique_n1 = $objet_pear_url_copie->getURL();
//unset($url_ajout_menu_n1);
$retour .= '<a href="'.$url_ajout_menu_classique_n1.'" >'.
ADME_LG_MENU_CLASSIQUE_RACINE.'&nbsp;'.
'<img class="'.ADME_CLASS_IMG_ICONE.'" src="'.ADME_IMAGE_NOUVEAU.'" alt="+" />'.
'</a>'."\n";
$retour .= '</p>'."\n";
$retour .= ADME_afficherListeMenuClassique($objet_pear_db, $objet_pear_url, $adme_site_id, $adme_menu_id, $adme_action, 0);
//---------------------------------------------------------------------------------------------------------------
// Gestion des menus communs
$retour .= '<p>'."\n";
$objet_pear_url_copie = $objet_pear_url;
$objet_pear_url_copie->addQueryString('adme_action', ADME_LG_ACTION_COMMUN_AJOUTER);
$objet_pear_url_copie->addQueryString('adme_site_id', $adme_site_id);
$objet_pear_url_copie->addQueryString('adme_menu_id', 0);
$url_ajout_menu_commun_n1 = $objet_pear_url_copie->getURL();
//unset($url_ajout_menu_n1);
$retour .= '<a href="'.$url_ajout_menu_commun_n1.'">'.
ADME_LG_MENU_COMMUN_RACINE.'&nbsp;'.
'<img class="'.ADME_CLASS_IMG_ICONE.'" src="'.ADME_IMAGE_NOUVEAU.'" alt="+" />'.
'</a>'."\n";
$retour .= '</p>'."\n";
$retour .= ADME_afficherListeMenuCommun($objet_pear_db, $objet_pear_url, $adme_site_id, $adme_menu_id, $adme_action, 0);
return $retour;
}
// +------------------------------------------------------------------------------------------------------+
// | PIED du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.18.2.1 2006/12/01 17:03:09 florian
* correction bug changement de sites
*
* Revision 1.18 2006/10/16 15:49:07 ddelon
* Refactorisation code mulitlinguisme et gestion menu invisibles
*
* Revision 1.17 2006/10/06 13:38:45 florian
* ergonomie amélioree
*
* Revision 1.16 2006/04/28 12:41:49 florian
* corrections erreurs chemin
*
* Revision 1.15 2006/03/24 13:03:24 ddelon
* bug afficheur multilinguisme
*
* Revision 1.14 2006/03/23 20:24:59 ddelon
* *** empty log message ***
*
* Revision 1.13 2006/03/13 21:00:20 ddelon
* Suppression messages d'erreur multilinguisme
*
* Revision 1.12 2006/03/02 10:49:49 ddelon
* Fusion branche multilinguisme dans branche principale
*
* Revision 1.11.2.1 2006/02/28 14:02:11 ddelon
* Finition multilinguisme
*
* Revision 1.11 2005/07/18 16:14:32 ddelon
* css admin + menu communs
*
* Revision 1.10 2005/07/08 21:57:24 ddelon
* Copyright
*
* Revision 1.9 2005/05/12 16:51:37 alex
* Changement de l'odre d'apparition des sites dans l'administration des menus.
*
* Revision 1.8 2005/01/26 16:18:05 jpm
* Correction bogue 221 : mauvais réglage du titre.
*
* Revision 1.7 2004/11/24 11:31:51 jpm
* Ajout d'une contante de langue à la place d'un texte.
*
* Revision 1.6 2004/11/10 17:26:07 jpm
* Fin gestion de la traduction.
*
* Revision 1.5 2004/11/10 11:58:54 jpm
* Mise en place des constantes de traduction de l'appli.
*
* Revision 1.4 2004/11/09 17:48:35 jpm
* Gestion de différentes interfaces d'administration.
*
* Revision 1.3 2004/11/09 12:37:34 jpm
* Fin de gestion des menus et mise en conformité avec la convention de codage.
*
* Revision 1.2 2004/11/08 17:41:07 jpm
* Légères corrections : multisite, corrections SQL.
*
* Revision 1.1 2004/11/04 12:26:42 jpm
* Contient les fonctions d'affichage général de l'appli ADME.
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/applications/admin_menu/bibliotheque/adme_menu_classique.fonct.php
New file
0,0 → 1,1850
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// Copyright (C) 1999-2004 Tela Botanica (accueil@tela-botanica.org)
//
// Ce logiciel est un programme informatique servant à gérer du contenu et des
// applications web.
// Ce logiciel est régi par la licence CeCILL soumise au droit français et
// respectant les principes de diffusion des logiciels libres. Vous pouvez
// utiliser, modifier et/ou redistribuer ce programme sous les conditions
// de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA
// sur le site "http://www.cecill.info".
 
// En contrepartie de l'accessibilité au code source et des droits de copie,
// de modification et de redistribution accordés par cette licence, il n'est
// offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons,
// seule une responsabilité restreinte pèse sur l'auteur du programme, le
// titulaire des droits patrimoniaux et les concédants successifs.
 
// A cet égard l'attention de l'utilisateur est attirée sur les risques
// associés au chargement, à l'utilisation, à la modification et/ou au
// développement et à la reproduction du logiciel par l'utilisateur étant
// donné sa spécificité de logiciel libre, qui peut le rendre complexe à
// manipuler et qui le réserve donc à des développeurs et des professionnels
// avertis possédant des connaissances informatiques approfondies. Les
// utilisateurs sont donc invités à charger et tester l'adéquation du
// logiciel à leurs besoins dans des conditions permettant d'assurer la
// sécurité de leurs systèmes et ou de leurs données et, plus généralement,
// à l'utiliser et l'exploiter dans les mêmes conditions de sécurité.
 
// Le fait que vous puissiez accéder à cet en-tête signifie que vous avez
// pris connaissance de la licence CeCILL, et que vous en avez accepté les
// termes.
// ----
// CVS : $Id: adme_menu_classique.fonct.php,v 1.37.2.1 2006-12-01 17:03:09 florian Exp $
/**
* Fonctions de gestion des menus classiques
*
* Permet de lister, d'ajouter, de modifier, et de déplacer des menus classiques.
* Par menus classiques nous entendons tous les menus devant paraitre dans l'arborescences
* des menus disponibles pour le site courant.
*
*@package Admin_menu
*@subpackage Fonctions
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author Alexandre GRANIER <alexandre@tela-botanica.org>
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.37.2.1 $ $Date: 2006-12-01 17:03:09 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTÊTE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
// +------------------------------------------------------------------------------------------------------+
// | LISTE de FONCTIONS |
// +------------------------------------------------------------------------------------------------------+
 
/** Fonction ADME_afficherListeMenuClassique () - Affiche un arbre de menu en xhtml
*
* Elle forme l'arbre des menus classiques à administrer.
* Ancien nom : deployer_menu().
*
* @param object objet Pear de connection à la base de données.
* @param object objet Pear représentant l'url de base.
* @param integer l'identifiant du menu à administrer.
* @param integer l'identifiant du menu sur lequel on agit.
* @param string le nom de l'action courante.
* @param integer l'identifiant du menu en cours de déploiement.
* @param boolean true indique que l'on a à faire au premier appel de cette fonction récursive.
* @return string le code XHTML constituant l'arbre des menus à administrer.
*/
function ADME_afficherListeMenuClassique($db, $url, $adme_site_id, $adme_menu_id, $adme_action, $id_menu_a_deployer, $bln_premier_appel = true)
{
// Initialisation des variables :
$retour = '';
// Est-ce que ces menus comporte des sous-menus ?
$requete_sous_menu = 'SELECT gm_id_menu '.
'FROM gen_menu, gen_menu_relation AS GMR01, gen_menu_relation AS GMR02 '.
'WHERE GMR01.gmr_id_menu_02 = '.$id_menu_a_deployer.' '.
'AND GMR01.gmr_id_menu_01 = gm_id_menu '.
'AND gm_ce_site = '.$adme_site_id.' '.
'AND GMR01.gmr_id_valeur = 1 '.// 1 = avoir "père"
'AND GMR02.gmr_id_menu_02 = gm_id_menu '.
'AND GMR02.gmr_id_menu_01 = GMR02.gmr_id_menu_02 '.
'AND GMR02.gmr_id_valeur = 100 '.// 100 = type "menu classique"
'ORDER BY GMR01.gmr_ordre ASC';
$resultat_sous_menu = $db->query($requete_sous_menu) ;
if (DB::isError($resultat_sous_menu)) {
die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_sous_menu->getMessage(), $requete_sous_menu));
}
// Gestion du stockage ou déstockage des menus ouverts
if (($adme_action == ADME_LG_ACTION_DEPLIER || $adme_action == ADME_LG_ACTION_CLASSIQUE_AJOUTER) && $id_menu_a_deployer != 0) {
$_SESSION['adme_menus_classiques_ouverts'][$adme_menu_id] = $adme_menu_id;
}
if ($adme_action == ADME_LG_ACTION_PLIER && $id_menu_a_deployer != 0) {
unset($_SESSION['adme_menus_classiques_ouverts'][$adme_menu_id]);
foreach ($_SESSION['adme_menus_classiques_ouverts'] as $val) {
if (GEN_etreAncetre($adme_menu_id, $val)) {
unset($_SESSION['adme_menus_classiques_ouverts'][$val]);
}
}
}
// Gestion affichage des menus
if ($resultat_sous_menu->numRows() > 0) {
// Ici, on sait qu'un menu a des sous menus, on commence par l'afficher:
if ($bln_premier_appel == false) {
$retour .= '<li>'."\n";
if (GEN_etreAncetre($id_menu_a_deployer, $adme_menu_id) ||
($id_menu_a_deployer == $adme_menu_id && $adme_action == ADME_LG_ACTION_DEPLIER) ||
isset($_SESSION['adme_menus_classiques_ouverts'][$id_menu_a_deployer])
){
// Affiche un -
$retour .= ADME_retournerXhtmlMenuClassique($db, $url, $adme_site_id, $id_menu_a_deployer, 1);
} else if ( !GEN_etreAncetre($id_menu_a_deployer, $adme_menu_id) ||
($id_menu_a_deployer == $adme_menu_id && $adme_action == ADME_LG_ACTION_PLIER) ||
!isset($_SESSION['adme_menus_classiques_ouverts'][$id_menu_a_deployer])
){
// Affiche un +
$retour .= ADME_retournerXhtmlMenuClassique($db, $url, $adme_site_id, $id_menu_a_deployer, 2);
}
}
if ($bln_premier_appel == true || GEN_etreAncetre($id_menu_a_deployer, $adme_menu_id) ||
($id_menu_a_deployer == $adme_menu_id && $adme_action == ADME_LG_ACTION_DEPLIER) ||
isset($_SESSION['adme_menus_classiques_ouverts'][$id_menu_a_deployer])
){
$retour .= '<ul class="menu_classique">'."\n";
while ($ligne_sous_menu = $resultat_sous_menu->fetchRow(DB_FETCHMODE_OBJECT)) {
$retour .= ADME_afficherListeMenuClassique($db, $url, $adme_site_id, $adme_menu_id, $adme_action, $ligne_sous_menu->gm_id_menu, false);
}
$retour .= '</ul>'."\n";
}
if ($bln_premier_appel == false) {
$retour .= '</li>'."\n";
}
} else if ($resultat_sous_menu->numRows() == 0 && $bln_premier_appel == false) {
$retour .= '<li>'."\n";
$retour .= ADME_retournerXhtmlMenuClassique($db, $url, $adme_site_id, $id_menu_a_deployer, 0);
$retour .= '</li>'."\n";
}
return $retour;
}
 
/** Fonction ADME_retournerXhtmlMenuClassique() - Effectue une sortie d'un menu en XHTML
*
* Retourne le XHTML d'une ligne de l'arbre des menus "classiques" permettant de l'administer.
* Ancien nom : menu_toHtml().
*
* @param object objet Pear de connection à la base de données.
* @param object objet Pear représentant l'url de base.
* @param integer l'identifiant du site à administrer.
* @param integer l'identifiant du menu à administrer.
* @param integer 0 indique que le menu ne possède pas de fils, 1 qu'il faut afficher un - et 2 un +.
* @return string une ligne de liste XHTML
*/
function ADME_retournerXhtmlMenuClassique($db, $url, $adme_site_id, $adme_menu_id, $int_deplier,$est_traduction=false,$menu_traduction_defaut=0)
{
//-------------------------------------------------------------------------------------------------------------------
// Initialisation des variables
 
//-------------------------------------------------------------------------------------------------------------------
// Récupération des infos concernant l'administrateur d'un menu
$requete = 'SELECT gen_menu.*, ga_prenom '.
'FROM gen_menu, gen_annuaire '.
'WHERE gm_id_menu = '.$adme_menu_id.' '.
'AND gm_ce_admin = ga_id_administrateur';
$resultat = $db->query($requete);
if (DB::isError($resultat)) {
die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));
}
$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
//-------------------------------------------------------------------------------------------------------------------
// Recupération des infos de l'appli du menu courant.
$ligne_app = GEN_retournerInfoAppliMenu($db, $adme_menu_id);
//-------------------------------------------------------------------------------------------------------------------
// XHTML image plier-déplier
$url->addQueryString('adme_site_id', $adme_site_id);
$url->addQueryString('adme_menu_id', $adme_menu_id);
$xhtml_pd = '';
if ($int_deplier != 0) {
if ($int_deplier == 1) {
// Afficher un -
$image_plier_deplier = ADME_IMAGE_MOINS;
$alt = ADME_LG_ACTION_PLIER_ALT;
$url->addQueryString('adme_action', ADME_LG_ACTION_PLIER);
$url_plier_deplier = $url->getURL();
} else if ($int_deplier == 2) {
// Afficher un +
$image_plier_deplier = ADME_IMAGE_PLUS;
$alt = ADME_LG_ACTION_DEPLIER_ALT;
$url->addQueryString('adme_action', ADME_LG_ACTION_DEPLIER);
$url_plier_deplier = $url->getURL();
}
$xhtml_pd = '<a href="'.$url_plier_deplier.'" title="'.$alt.'">'.
'<img class="'.ADME_CLASS_IMG_PD.'" src="'.$image_plier_deplier.'" alt="'.$alt.'" />'.
'</a>'.'&nbsp;'."\n";
}
//-------------------------------------------------------------------------------------------------------------------
// XHTML du nom du menu et de ses infos
$xhtml_info = htmlentities(empty($ligne->gm_nom) ? ADME_LG_PARENTHESE_OUVRANTE.$ligne->gm_nom.ADME_LG_PARENTHESE_FERMANTE : $ligne->gm_nom);
$xhtml_info .= '&nbsp;';
if (!isset($ligne_app->gap_nom)) {
$gap_nom='';
}
else {
$gap_nom=$ligne_app->gap_nom;
}
$xhtml_info .= ADME_LG_PARENTHESE_OUVRANTE.$gap_nom.'&nbsp;'.ADME_LG_SLASH.'&nbsp;'.$ligne->ga_prenom.ADME_LG_PARENTHESE_FERMANTE;
$xhtml_info .= '&nbsp;'."\n";
//-------------------------------------------------------------------------------------------------------------------
// XHTML actions
$url->removeQueryString('adme_action');
$url->addQueryString('adme_action', ADME_LG_ACTION_CLASSIQUE_MODIFIER);
$xhtml_action = '<a href="'.$url->getURL().'" title="'.ADME_LG_ACTION_CLASSIQUE_MODIFIER_TITLE.'">'.
'<img class="'.ADME_CLASS_IMG_ICONE.'" src="'.ADME_IMAGE_VOIR.'" alt="'.ADME_LG_ACTION_CLASSIQUE_MODIFIER_ALT.'" />'.
'</a>&nbsp;'."\n";
$url->removeQueryString('adme_action');
if (!$est_traduction) {
$url->addQueryString('adme_action', ADME_LG_ACTION_CLASSIQUE_MONTER);
$xhtml_action .= '<a href="'.$url->getURL().'" title="'.ADME_LG_ACTION_CLASSIQUE_MONTER_TITLE.'">'.
'<img class="'.ADME_CLASS_IMG_ICONE.'" src="'.ADME_IMAGE_FLECHE_HAUT.'" alt="'.ADME_LG_ACTION_CLASSIQUE_MONTER_ALT.'" />'.
'</a>&nbsp;'."\n";
$url->removeQueryString('adme_action');
$url->addQueryString('adme_action', ADME_LG_ACTION_CLASSIQUE_DESCENDRE);
$xhtml_action .= '<a href="'.$url->getURL().'" title="'.ADME_LG_ACTION_CLASSIQUE_DESCENDRE_TITLE.'">'.
'<img class="'.ADME_CLASS_IMG_ICONE.'" src="'.ADME_IMAGE_FLECHE_BAS.'" alt="'.ADME_LG_ACTION_CLASSIQUE_DESCENDRE_ALT.'" />'.
'</a>&nbsp;'."\n";
$url->addQueryString('adme_action',ADME_LG_ACTION_CLASSIQUE_DIMINUER);
$xhtml_action .= '<a href="'.$url->getURL().'" title="'.ADME_LG_ACTION_CLASSIQUE_DIMINUER_TITLE.'">'.
'<img class="'.ADME_CLASS_IMG_ICONE.'" src="'.ADME_IMAGE_FLECHE_GAUCHE.'" alt="'.ADME_LG_ACTION_CLASSIQUE_DIMINUER_ALT.'" />'.
'</a>&nbsp;'."\n";
$url->removeQueryString('adme_action');
$url->addQueryString('adme_action',ADME_LG_ACTION_CLASSIQUE_AUGMENTER);
$xhtml_action .= '<a href="'.$url->getURL().'" title="'.ADME_LG_ACTION_CLASSIQUE_AUGMENTER_TITLE.'">'.
'<img class="'.ADME_CLASS_IMG_ICONE.'" src="'.ADME_IMAGE_FLECHE_DROITE.'" alt="'.ADME_LG_ACTION_CLASSIQUE_AUGMENTER_ALT.'" />'.
'</a>&nbsp;'."\n";
}
$url->removeQueryString('adme_action');
if (!$est_traduction) {
$url->addQueryString('adme_action', ADME_LG_ACTION_CLASSIQUE_SUPPRIMER);
$xhtml_action .= '<a href="'.$url->getURL().'" title="'.ADME_LG_ACTION_CLASSIQUE_SUPPRIMER_TITLE.'" onclick="javascript:return confirm(\''.ADME_LG_ACTION_SUPPRIMER_CONFIRMATION.'\');">'.
'<img class="'.ADME_CLASS_IMG_ICONE.'" src="'.ADME_IMAGE_SUPPRIMER.'" alt="'.ADME_LG_ACTION_CLASSIQUE_SUPPRIMER_ALT.'" />'.
'</a>&nbsp;'."\n";
}
else {
$url->addQueryString('adme_action', ADME_LG_ACTION_CLASSIQUE_SUPPRIMER_TRADUCTION);
$xhtml_action .= '<a href="'.$url->getURL().'" title="'.ADME_LG_ACTION_CLASSIQUE_SUPPRIMER_TRADUCTION_TITLE.'" onclick="javascript:return confirm(\''.ADME_LG_ACTION_SUPPRIMER_CONFIRMATION.'\');">'.
'<img class="'.ADME_CLASS_IMG_ICONE.'" src="'.ADME_IMAGE_SUPPRIMER.'" alt="'.ADME_LG_ACTION_CLASSIQUE_SUPPRIMER_TRADUCTION_ALT.'" />'.
'</a>&nbsp;'."\n";
}
$url->removeQueryString('adme_action');
if (!$est_traduction) {
$url->addQueryString('adme_action', ADME_LG_ACTION_CLASSIQUE_AJOUTER);
$xhtml_action .= '<a href="'.$url->getURL().'" title="'.ADME_LG_ACTION_CLASSIQUE_AJOUTER_TITLE.'">'.
'<img class="'.ADME_CLASS_IMG_ICONE.'" src="'.ADME_IMAGE_NOUVEAU.'" alt="'.ADME_LG_ACTION_CLASSIQUE_AJOUTER_ALT.'" />'.
'</a>'.'&nbsp;'."\n";
}
$url->removeQueryString('adme_action');
// Si le menu à une application liée on regarde s'il y a une interface d'administration.
if (!isset($ligne_app->gap_id_application)) {
$gap_id_application=0;
}
else {
$gap_id_application=$ligne_app->gap_id_application;
}
if ($gap_id_application != 0 && GEN_verifierPresenceInterfaceAdmin($db, $gap_id_application)) {
$url->removeQueryString('adme_action');
$url->addQueryString('adme_action', ADME_LG_ACTION_ADMINISTRER);
$xhtml_action .= '<a href="'.$url->getURL().'" title="'.ADME_LG_ACTION_ADMINISTRER_TITLE.'">'.
'<img class="'.ADME_CLASS_IMG_ICONE.'" src="'.ADME_IMAGE_TEXTE.'" alt="'.ADME_LG_ACTION_ADMINISTRER_ALT.'" />'.
'</a>'.'&nbsp;'."\n";
}
if (!$est_traduction) {
$url->addQueryString('adme_action',ADME_LG_ACTION_CLASSIQUE_TRADUIRE);
$xhtml_action .= '<a href="'.$url->getURL().'" title="'.ADME_LG_ACTION_CLASSIQUE_TRADUIRE_TITLE.'">'.
ADME_LG_ACTION_CLASSIQUE_TRADUIRE_ALT.
'</a>&nbsp;'."\n";
}
else {
if ($menu_traduction_defaut==$adme_menu_id) {
$xhtml_action .= '<img class="'.ADME_CLASS_IMG_ICONE.'" src="'.ADME_IMAGE_TRADUCTION_DEFAUT_AFFICHAGE.'" alt="'.ADME_LG_ACTION_CLASSIQUE_TRADUCTION_DEFAUT_ALT.'" />'.
'&nbsp;'."\n";
}
else {
$url->removeQueryString('adme_action');
$url->addQueryString('adme_action', ADME_LG_ACTION_CLASSIQUE_TRADUCTION_DEFAUT);
$xhtml_action .= '<a href="'.$url->getURL().'" title="'.ADME_LG_ACTION_CLASSIQUE_TRADUCTION_DEFAUT_TITLE.'">'.
'<img class="'.ADME_CLASS_IMG_ICONE.'" src="'.ADME_IMAGE_TRADUCTION_DEFAUT.'" alt="'.ADME_LG_ACTION_CLASSIQUE_TRADUCTION_DEFAUT_ALT.'" />'.
'</a>'.'&nbsp;'."\n";
}
}
$xhtml_traduction='';
// $id_langue = $GLOBALS['_GEN_commun']['i18n'];
$requete_traduction = 'SELECT gmr_id_menu_02, gm_ce_i18n '.
'FROM gen_menu_relation, gen_menu '.
'WHERE '.$adme_menu_id.' = gmr_id_menu_01 ' .
'AND gmr_id_menu_02 = gm_id_menu '.
'AND gmr_id_valeur = 2 ';// 2 = "avoir traduction"
$resultat_traduction = $db->query($requete_traduction);
(DB::isError($resultat_traduction)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_traduction->getMessage(), $requete_traduction))
: '';
if ($resultat_traduction->numRows() > 0 ) {
$requete_traduction_defaut = 'SELECT gmr_id_menu_02 '.
'FROM gen_menu_relation '.
'WHERE '.$adme_menu_id.' = gmr_id_menu_01 ' .
'AND gmr_id_valeur = 105 ';// 105 traduction par defaut
$resultat_traduction_defaut = $db->query($requete_traduction_defaut);
(DB::isError($resultat_traduction_defaut)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_traduction->getMessage(), $requete_traduction_defaut))
: '';
if ($resultat_traduction_defaut->numRows() == 0 ) {
$menu_traduction_defaut=0;
$xhtml_action .= '<img class="'.ADME_CLASS_IMG_ICONE.'" src="'.ADME_IMAGE_TRADUCTION_DEFAUT_AFFICHAGE.'" alt="'.ADME_LG_ACTION_CLASSIQUE_TRADUCTION_DEFAUT_ALT.'" />'.
'&nbsp;'."\n";
}
else {
$ligne_traduction_defaut = $resultat_traduction_defaut->fetchRow(DB_FETCHMODE_OBJECT);
$menu_traduction_defaut=$ligne_traduction_defaut->gmr_id_menu_02;
if ($menu_traduction_defaut!=$adme_menu_id) {
$url->removeQueryString('adme_action');
$url->addQueryString('adme_action', ADME_LG_ACTION_CLASSIQUE_TRADUCTION_DEFAUT);
$xhtml_action .= '<a href="'.$url->getURL().'" title="'.ADME_LG_ACTION_CLASSIQUE_TRADUCTION_DEFAUT_TITLE.'">'.
'<img class="'.ADME_CLASS_IMG_ICONE.'" src="'.ADME_IMAGE_TRADUCTION_DEFAUT.'" alt="'.ADME_LG_ACTION_CLASSIQUE_TRADUCTION_DEFAUT_ALT.'" />'.
'</a>'.'&nbsp;'."\n";
}
else {
$xhtml_action .= '<img class="'.ADME_CLASS_IMG_ICONE.'" src="'.ADME_IMAGE_TRADUCTION_DEFAUT_AFFICHAGE.'" alt="'.ADME_LG_ACTION_CLASSIQUE_TRADUCTION_DEFAUT_ALT.'" />'.
'&nbsp;'."\n";
}
}
while ($ligne_resultat = $resultat_traduction->fetchRow(DB_FETCHMODE_OBJECT)) {
$xhtml_traduction.="<br><em>".$ligne_resultat->gm_ce_i18n.":&nbsp;".ADME_retournerXhtmlMenuClassique($db, $url, $adme_site_id, $ligne_resultat->gmr_id_menu_02, 0,true,$menu_traduction_defaut)."</em>";
}
}
 
//-------------------------------------------------------------------------------------------------------------------
// Envoi du menu.
//-------------------------------------------------------------------------------------------------------------------
$retour = $xhtml_pd.$xhtml_info.$xhtml_action.$xhtml_traduction;
return $retour;
}
 
/** Fonction ADME_ajouterMenuClassique() - Ajoute un sous menu au menu courant
*
* Cette fonction permet d'ajouter un sous-menu de type "classique" au menu courant.
* Ancien nom : addMenu()
*
* @param object objet Pear de connection à la base de données.
* @param object objet Pear d'authentification.
* @param integer l'identifiant du site à administrer.
* @param integer l'identifiant du menu à administrer.
* @return void le menu classique est ajouté à la base de données.
*/
function ADME_ajouterMenuClassique($db, $auth, $adme_site_id, $adme_menu_id)
{
$url=$GLOBALS['_GEN_commun']['url'];
$url->removeQueryString('adme_action');
//----------------------------------------------------------------------------
// Récupération d'infos sur le site principal.
$objet_site = GEN_lireInfoSitePrincipal($db, $adme_site_id);
if ($objet_site == false) {
die('ERREUR Génésia Administrateur de Menus : impossible de lire les infos du site.<br />'.
'ID du site : '.$adme_site_id.'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br />');
}
$nouveau_id_menu = SQL_obtenirNouveauId($db, 'gen_menu', 'gm_id_menu');
$auteur = $auth->getAuthData('ga_prenom').' '.$auth->getAuthData('ga_nom');
//----------------------------------------------------------------------------
// Ajout du nouveau menu
$requete = 'INSERT INTO gen_menu '.
'SET gm_id_menu = '.$nouveau_id_menu.', '.
'gm_ce_site = '.$adme_site_id.', '.
'gm_ce_i18n = "'.$objet_site->gs_ce_i18n.'", '.
'gm_ce_application = 0, '.
'gm_code_num = '.$nouveau_id_menu.', '.
'gm_code_alpha = "menu_'.$nouveau_id_menu.'", '.
'gm_nom = "menu_'.$nouveau_id_menu.'", '.
'gm_titre = "menu_'.$nouveau_id_menu.'", '.
'gm_description_resume = "menu_'.$nouveau_id_menu.'", '.
'gm_auteur = "'.$auteur.'", '.
'gm_editeur = "'.$objet_site->gs_auteur.'", '.
'gm_date_creation = "'.date('Y-m-d H:i:s').'", '.
'gm_date_soumission = "'.date('Y-m-d H:i:s').'", '.
'gm_date_acceptation = "'.date('Y-m-d H:i:s').'", '.
'gm_date_publication = "'.date('Y-m-d H:i:s').'", '.
'gm_date_debut_validite = "'.date('Y-m-d H:i:s').'", '.
'gm_date_fin_validite = "0000-00-00 00:00:00", '.
'gm_date_copyright = "'.date('Y-00-00 00:00:00').'", '.
'gm_categorie = "menu", '.
'gm_ce_admin = '.$auth->getAuthData('ga_id_administrateur').' '
;
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
//----------------------------------------------------------------------------
// Ajout de la relation "père"
if (!isset($adme_menu_id) && empty($adme_menu_id)) {
$adme_menu_id = 0 ;// Identifiant du père
}
//----------------------------------------------------------------------------
// Récupération d'infos sur la hierarchie du menu
$requete = 'SELECT GMR01.gmr_ordre '.
'FROM gen_menu_relation AS GMR01, gen_menu_relation AS GMR02 '.
'WHERE GMR01.gmr_id_menu_02 = '.$adme_menu_id.' '.
'AND GMR01.gmr_id_valeur = 1 '.// 1 = avoir "père"
'AND GMR02.gmr_id_menu_01 = GMR01.gmr_id_menu_01 '.
'AND GMR02.gmr_id_menu_01 = GMR02.gmr_id_menu_02 '.
'AND GMR02.gmr_id_valeur = 100 '.// 100 = menu type "classique"
'ORDER BY GMR01.gmr_ordre DESC';
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
$nouveau_ordre_menu = $ligne->gmr_ordre + 1;
$resultat->free();
$requete = 'INSERT INTO gen_menu_relation '.
'SET gmr_id_menu_02 = '.$adme_menu_id.', '.
'gmr_id_menu_01 = '.$nouveau_id_menu.', '.
'gmr_id_valeur = 1, '.
'gmr_ordre = '.$nouveau_ordre_menu;
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
//----------------------------------------------------------------------------
// Ajout de la relation-type "menu classique"
// Récupération d'infos sur la hierarchie du menu
$requete = 'SELECT * '.
'FROM gen_menu_relation, gen_menu '.
'WHERE gmr_id_menu_02 = gmr_id_menu_01 '.
'AND gmr_id_valeur = 100 '.// 100 = type menu "classique"
'AND gmr_id_menu_01 = gm_id_menu '.
'AND gm_ce_site = '.$adme_site_id.' '.
'ORDER BY gmr_ordre DESC';
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
$nouveau_ordre_menu_classique = $ligne->gmr_ordre + 1;
$resultat->free();
$requete = 'INSERT INTO gen_menu_relation '.
'SET gmr_id_menu_01 = '.$nouveau_id_menu.', '.
'gmr_id_menu_02 = '.$nouveau_id_menu.', '.
'gmr_id_valeur = 100, '.
'gmr_ordre = '.$nouveau_ordre_menu_classique;
$result = $db->query($requete);
(DB::isError($result)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $result->getMessage(), $requete)) : '';
}
 
/** Fonction ADME_afficherFormMenuClassique() - Affiche le formulaire pour un menu classique
*
* Utilise HTML_QuickForm pour générer le formulaire.
* Ancien nom : showMenu()
*
* @param object objet Pear de connection à la base de données.
* @param object objet Pear représentant l'url de base.
* @param integer l'identifiant du site à administrer.
* @param integer l'identifiant du menu à administrer.
* @param array le tableau associatif des valeurs à afficher dans le formulaire.
* @return string le formulaire XHTML.
*/
function ADME_afficherFormMenuClassique($db, $url, $adme_site_id, $adme_menu_id, $aso_valeurs,$traduction=FALSE)
{
// Initialisation de variable
$url->addQueryString('adme_site_id', $adme_site_id);
$url->addQueryString('adme_menu_id', $adme_menu_id);
// Nous sommes toujours en modification car un menu est ajouté automatiquement!
// Récupération des informations du menu concerné.
if (!isset($aso_valeurs[ADME_LG_ACTION_CLASSIQUE_VERIFIER]) && !isset($aso_valeurs[ADME_LG_ACTION_CLASSIQUE_VERIFIER_TRADUCTION])) {
$aso_valeurs = GEN_lireInfoMenu($db, $adme_menu_id, DB_FETCHMODE_ASSOC);
if ($aso_valeurs === false) {
die('ERREUR Papyrus Administrateur de Menus : '.ADME_LG_ERREUR_INFO_MENU.'<br />'.
'Idenitifiant du menu n° : '. $adme_menu_id .'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br />');
}
// Requete pour récupérer les informations issues des relations du site à modifier
$ligne = GEN_lireInfoMenuRelation($db, $adme_menu_id, $id_valeur = 101);
$aso_valeurs['defaut'] = false;
if (isset($ligne) && !empty($ligne)) {
if ($ligne->gmr_id_valeur != false) {// 101 = site par défaut
$aso_valeurs['defaut'] = true;
}
}
}
// Titre de la page
if ($traduction) {
$retour = '<h1>'.ADME_LG_FORM_MENU_CLASSIQUE_TITRE_GENERAL_TRADUCTION.'</h1>'."\n";
}
else {
$retour = '<h1>'.ADME_LG_FORM_MENU_CLASSIQUE_TITRE_GENERAL.'</h1>'."\n";
}
 
$retour .= '<p class="adme_menu_id" >'.ADME_LG_FORM_MENU_ID.'<span id="adme_menu_id">'.$aso_valeurs['gm_id_menu'].'</span></p>'."\n";
// Création du formulaire
// Notes : Quickform semble remplacer les & des &amp; à nouveau par des &amp; solution utiliser str_replace()...
$form =& new HTML_QuickForm('form_menu_classique', 'post', str_replace('&amp;', '&', $url->getUrl()));
$tab_index = 1000;
$squelette =& $form->defaultRenderer();
$squelette->setFormTemplate("\n".'<form{attributes}>'."\n".'{content}'."\n".'</form>'."\n");
$squelette->setElementTemplate( '<li>'."\n".
'{label}'."\n".
'{element}'."\n".
'<!-- BEGIN required --><span class="symbole_obligatoire">'.ADME_LG_FORM_SYMBOLE_CHP_OBLIGATOIRE.'</span><!-- END required -->'."\n".
'<!-- BEGIN error --><span class="erreur">{error}</span><!-- END error -->'."\n".
'</li>'."\n");
$squelette->setRequiredNoteTemplate("\n".'<p><span class="symbole_obligatoire">'.ADME_LG_FORM_SYMBOLE_CHP_OBLIGATOIRE.'</span> {requiredNote}</p>'."\n");
$partie_menu_debut = '<fieldset>'."\n".'<legend>'.ADME_LG_FORM_MENU_CLASSIQUE_TITRE_CONFIG.'</legend>'."\n".'<ul>'."\n";
$form->addElement('html', $partie_menu_debut);
$id = 'gm_code_num';
$aso_attributs = array('id'=>$id, 'tabindex' => $tab_index++, 'size' => 5, 'maxlength' => 100);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_CODE_NUM.'</label>';
$form->addElement('text', $id, $label, $aso_attributs);
$form->addRule($id, ADME_LG_FORM_MENU_REGLE_CODE_NUM, 'required', '', 'client');
$id = 'gm_code_alpha';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => 50, 'maxlength' => 50);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_CODE_ALPHA.'</label>';
$form->addElement('text', $id, $label, $aso_attributs);
$form->addRule($id, ADME_LG_FORM_MENU_REGLE_CODE_ALPHA, 'required', '', 'client');
$id = 'gm_nom';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => 50, 'maxlength' => 100);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_NOM.'</label>';
$form->addElement('text', $id, $label, $aso_attributs);
$form->addRule($id, ADME_LG_FORM_MENU_REGLE_NOM, 'required', '', 'client');
$form->applyFilter($id, 'trim');
$id = 'gm_raccourci_clavier';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => 1, 'maxlength' => 1);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_RACCOURCI.'</label>';
$form->addElement('text', $id, $label, $aso_attributs);
$id = 'defaut';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++);
if ($aso_valeurs[$id] === true) {
$aso_attributs['checked'] = 'checked';
}
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_DEFAUT.'</label>';
$form->addElement('checkbox', $id, $label, '', $aso_attributs);
$id = 'gm_fichier_squelette';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => 50, 'maxlength' => 255);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_FICHIER_SQUELETTE.'</label>';
$form->addElement('text', $id, $label, $aso_attributs);
$id = 'gm_description_resume';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'rows' => 2, 'cols' => 50);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_INFO_BULLE.'</label>';
$form->addElement('textarea', $id, $label, $aso_attributs);
$form->addRule($id, ADME_LG_FORM_MENU_REGLE_INFO_BULLE, 'required', '', 'client');
// Requête sur les applications
$requete = 'SELECT gap_id_application, gap_nom '.
'FROM gen_application '.
'WHERE gap_bool_applette = 0 '.
'ORDER BY gap_nom ASC';// Pour éviter d'afficher les applettes.
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
$aso_options = array();
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
$aso_options[$ligne->gap_id_application] = $ligne->gap_nom;
}
$resultat->free();
$id = 'gm_ce_application';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_APPLI.'</label>';
$form->addElement('select', $id, $label, $aso_options, $aso_attributs);
if ($traduction) {
// Recherche liste des menu deja traduits
$requete = 'SELECT distinct gm_ce_i18n '.
'FROM gen_menu_relation, gen_menu '.
'WHERE gmr_id_menu_01 = ' . $adme_menu_id .' '.
'AND gm_id_menu = gmr_id_menu_02 '.
'AND gmr_id_valeur = 2 '; // 2 = "avoir traduction"
$resultat = $db->query($requete) ;
if (DB::isError($resultat)) {
die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
}
$not_in_langue='';
if ( $resultat->numRows() == 0 ) {
$not_in_langue="gi_id_i18n not in('".$aso_valeurs['gm_ce_i18n']."')";
}
else {
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
$not_in_langue="'".$ligne->gm_ce_i18n."'".",".$not_in_langue;
$end="'".$ligne->gm_ce_i18n."'";
}
if ($not_in_langue) {
$not_in_langue="'".$aso_valeurs['gm_ce_i18n']."'".",".$not_in_langue;
$not_in_langue=' gi_id_i18n not in('.$not_in_langue.$end.')';
}
else {
$not_in_langue="gi_id_i18n not in('".$aso_valeurs['gm_ce_i18n']."')";
}
}
$resultat->free();
$requete = "SELECT * FROM gen_i18n where ".$not_in_langue;
/*$requete = 'SELECT * '.
'FROM gen_i18n ';*/
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
$aso_options = array();
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT) ) {
$aso_options[$ligne->gi_id_i18n] = $ligne->gi_id_i18n;
}
$resultat->free();
$id = 'gs_ce_i18n';
$aso_attributs = array('id' => $id, 'tabindex' => $tab_index++);
$label = '<label for="'.$id.'">'.'Langue : '.'</label>';
$form->addElement('select', $id, $label, $aso_options, $aso_attributs);
}
$id = 'gm_application_arguments';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => 45, 'maxlength' => 255);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_APPLI_ARGUMENT.'</label>';
$form->addElement('text', $id, $label, $aso_attributs);
$partie_menu_fin = '</ul>'."\n".'</fieldset>'."\n";
$form->addElement('html', $partie_menu_fin);
$partie_entete_debut = '<fieldset>'."\n".'<legend>'.ADME_LG_FORM_MENU_CLASSIQUE_TITRE_ENTETE.'</legend>'."\n".'<ul>'."\n";
$form->addElement('html', $partie_entete_debut);
$id = 'gm_robot';
$aso_options = array( 'index,follow' => ADME_LG_FORM_MENU_INDEX_FOLLOW,
'index' => ADME_LG_FORM_MENU_INDEX,
'noindex' => ADME_LG_FORM_MENU_NOINDEX,
'noindex,nofollow' => ADME_LG_FORM_MENU_NOINDEX_NOFOLLOW,
'' => ADME_LG_FORM_MENU_INDEX_VIDE);
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_ROBOT.'</label>';
$form->addElement('select', $id, $label, $aso_options, $aso_attributs);
$id = 'gm_titre';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => 45, 'maxlength' => 255);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_TITRE.'</label>';
$form->addElement('text', $id, $label, $aso_attributs);
$id = 'gm_titre_alternatif';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => 45, 'maxlength' => 255);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_TITRE_ALTERNATIF.'</label>';
$form->addElement('text', $id, $label, $aso_attributs);
$id = 'gm_mots_cles';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'rows' => 3, 'cols' => 50);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_MOT_CLE.'</label>';
$form->addElement('textarea', $id, $label, $aso_attributs);
$id = 'gm_description_libre';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'rows' => 3, 'cols' => 45);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_DESCRIPTION.'</label>';
$form->addElement('textarea', $id, $label, $aso_attributs);
$id = 'gm_description_table_matieres';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'rows' => 3, 'cols' => 45);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_TABLE_MATIERE.'</label>';
$form->addElement('textarea', $id, $label, $aso_attributs);
$id = 'gm_source';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => 45, 'maxlength' => 255);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_SOURCE.'</label>';
$form->addElement('text', $id, $label, $aso_attributs);
$id = 'gm_auteur';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => 45, 'maxlength' => 255);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_AUTEUR.'</label>';
$form->addElement('text', $id, $label, $aso_attributs);
$id = 'gm_contributeur';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'rows' => 2, 'cols' => 45);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_CONTRIBUTEUR.'</label>';
$form->addElement('textarea', $id, $label, $aso_attributs);
$id = 'gm_editeur';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => 45, 'maxlength' => 65000);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_EDITEUR.'</label>';
$form->addElement('text', $id, $label, $aso_attributs);
$id = 'gm_date_creation';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => 19, 'maxlength' => 19);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_DATE_CREATION.'</label>';
$form->addElement('text', $id, $label, $aso_attributs);
$id = 'gm_date_debut_validite';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => 19, 'maxlength' => 19);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_DATE_VALIDITE_DEBUT.'</label>';
$form->addElement('text', $id, $label, $aso_attributs);
$id = 'gm_date_fin_validite';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => 19, 'maxlength' => 19);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_DATE_VALIDITE_FIN.'</label>';
$form->addElement('text', $id, $label, $aso_attributs);
$id = 'gm_date_copyright';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => 19, 'maxlength' => 19);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_DATE_COPYRIGHT.'</label>';
$form->addElement('text', $id, $label, $aso_attributs);
$id = 'gm_licence';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => 45, 'maxlength' => 255);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_URL_LICENCE.'</label>';
$form->addElement('text', $id, $label, $aso_attributs);
$id = 'gm_categorie';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => 45, 'maxlength' => 100);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_CATEGORIE.'</label>';
$form->addElement('text', $id, $label, $aso_attributs);
$id = 'gm_public';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => 45, 'maxlength' => 255);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_PUBLIC.'</label>';
$form->addElement('text', $id, $label, $aso_attributs);
$id = 'gm_public_niveau';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => 25, 'maxlength' => 45);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_PUBLIC_NIVEAU.'</label>';
$form->addElement('text', $id, $label, $aso_attributs);
$id = 'gm_ce_type_portee_spatiale';
$aso_options = array( '' => ADME_LG_FORM_MENU_ZG_VIDE,
'iso3166' => ADME_LG_FORM_MENU_ZG_ISO,
'Point' => ADME_LG_FORM_MENU_ZG_POINT,
'Box' => ADME_LG_FORM_MENU_ZG_DC,
'TGN' => ADME_LG_FORM_MENU_ZG_GTGN);
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_ZG_TYPE.'</label>';
$form->addElement('select', $id, $label, $aso_options, $aso_attributs);
$id = 'gm_portee_spatiale';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => 45, 'maxlength' => 100);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_ZG_VALEUR.'</label>';
$form->addElement('text', $id, $label, $aso_attributs);
$id = 'gm_ce_type_portee_temporelle';
$aso_options = array( '' => ADME_LG_FORM_MENU_TMP_VIDE,
'W3CDTF' => ADME_LG_FORM_MENU_TMP_W3C,
'Period' => ADME_LG_FORM_MENU_TMP_DC);
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_TMP_TYPE.'</label>';
$form->addElement('select', $id, $label, $aso_options, $aso_attributs);
$id = 'gm_portee_temporelle';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => 45, 'maxlength' => 100);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_TMP_VALEUR.'</label>';
$form->addElement('text', $id, $label, $aso_attributs);
$partie_entete_fin = '</ul>'."\n".'</fieldset>'."\n";
$form->addElement('html', $partie_entete_fin);
// Requete pour connaitre les informations sur l'administrateur ayant fait la dernière modif
if (!isset($aso_valeurs[ADME_LG_ACTION_CLASSIQUE_VERIFIER]) && !isset($aso_valeurs[ADME_LG_ACTION_CLASSIQUE_VERIFIER_TRADUCTION])) {
$requete_admin = 'SELECT * '.
'FROM gen_annuaire '.
'WHERE ga_id_administrateur = '.$aso_valeurs['gm_ce_admin'];
$resultat_admin = $db->query($requete_admin);
if (DB::isError($resultat_admin)) {
die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_admin->getMessage(), $requete_admin));
}
$ligne_admin = $resultat_admin->fetchRow(DB_FETCHMODE_OBJECT);
$info_admin = '<p class="info">Dernière modification par '.$ligne_admin->ga_prenom.' '.$ligne_admin->ga_nom.'</p>';
$form->addElement('html', $info_admin);
}
$liste_bouton_debut = '<ul class="liste_bouton">'."\n";
$form->addElement('html', $liste_bouton_debut);
if ($traduction) {
$form->addElement('submit', ADME_LG_ACTION_CLASSIQUE_VERIFIER_TRADUCTION, ADME_LG_FORM_MENU_VALIDER);
$form->addElement('hidden', 'adme_site_id', $adme_site_id);
}
else {
$form->addElement('submit', ADME_LG_ACTION_CLASSIQUE_VERIFIER, ADME_LG_FORM_MENU_VALIDER);
}
$bouton_annuler = '<li><a class="bouton" href="'.$url->getURL().'" title="'.ADME_LG_FORM_MENU_ANNULER.'" >'.ADME_LG_FORM_MENU_ANNULER.'</a>'.'</li>'."\n";
$form->addElement('html', $bouton_annuler);
$liste_bouton_fin = '</ul>'."\n";
$form->addElement('html', $liste_bouton_fin);
$form->addElement('hidden', 'gm_id_menu', $aso_valeurs['gm_id_menu']);
// Instanciation avec les valeur par défaut
$form->setDefaults($aso_valeurs);
// Note de fin de formulaire
$form->setRequiredNote(ADME_LG_FORM_TXT_CHP_OBLIGATOIRE);
$retour .= $form->toHTML()."\n";
return $retour;
}
 
/** Fonction ADME_validerFormAjouterMenuClassique() - Valide les données issues du formulaire pour gen_menu.
*
* Cette fonction valide les données à ajouter dans la table gen_menu.
*
* @param PEAR::DB l'objet pear de connexion à la base de données.
* @param string le tableau contenant les valeurs du formulaire.
* @return string retourne les messages d'erreurs sinon rien.
*/
function ADME_validerFormAjouterMenuClassique($db, $aso_valeurs)
{
$message = '';
if ($aso_valeurs['gm_code_alpha'] == '') {
$message .= '<p class="pap_erreur">'.ADME_LG_FORM_MENU_REGLE_CODE_ALPHA.'</p>';
}
if ($aso_valeurs['gm_code_num'] == '') {
$message .= '<p class="pap_erreur">'.ADME_LG_FORM_MENU_REGLE_CODE_NUM.'</p>';
}
if ($aso_valeurs['gm_nom'] == '') {
$message .= '<p class="pap_erreur">'.ADME_LG_FORM_MENU_REGLE_NOM.'</p>';
}
if ($aso_valeurs['gm_description_resume'] == '') {
$message .= '<p class="pap_erreur">'.ADME_LG_FORM_MENU_REGLE_INFO_BULLE.'</p>';
}
return $message;
}
 
 
/** Fonction ADME_validerFormTraduireMenuClassique() - Valide les données issues du formulaire de traduction de menu
*
* Cette fonction valide les données à ajouter dans la table gen_menu.
*
* @param PEAR::DB l'objet pear de connexion à la base de données.
* @param string le tableau contenant les valeurs du formulaire.
* @return string retourne les messages d'erreurs sinon rien.
*/
function ADME_validerFormTraduireMenuClassique($db, $aso_valeurs)
{
$message = '';
if ($aso_valeurs['gm_code_alpha'] == '') {
$message .= '<p class="pap_erreur">'.ADME_LG_FORM_MENU_REGLE_CODE_ALPHA.'</p>';
}
if ($aso_valeurs['gm_code_num'] == '') {
$message .= '<p class="pap_erreur">'.ADME_LG_FORM_MENU_REGLE_CODE_NUM.'</p>';
}
if ($aso_valeurs['gm_nom'] == '') {
$message .= '<p class="pap_erreur">'.ADME_LG_FORM_MENU_REGLE_NOM.'</p>';
}
if ($aso_valeurs['gm_description_resume'] == '') {
$message .= '<p class="pap_erreur">'.ADME_LG_FORM_MENU_REGLE_INFO_BULLE.'</p>';
}
return $message;
}
 
 
 
/** Fonction ADME_modifierMenuClassique() - Met à jour les infos d'un menu classique
*
* Fonction modifiant un menu commun à Papyrus.
* Ancien nom : commitUpdateLevel()
*
* @param object objet Pear de connection à la base de données.
* @param object objet Pear représentant l'authentification.
* @param integer l'identifiant du menu à administrer.
* @param array le tableau des valeurs à modifier.
* @return void les changement sont fait dans la base de données.
*/
function ADME_modifierMenuClassique($db, $auth, $adme_menu_id, $aso_valeurs)
{
$requete = 'UPDATE gen_menu SET '.
'gm_ce_application = '.$aso_valeurs['gm_ce_application'].', '.
'gm_application_arguments = "'.$aso_valeurs['gm_application_arguments'].'", '.
'gm_fichier_squelette = "'.$aso_valeurs['gm_fichier_squelette'].'", '.
'gm_code_num = '.$aso_valeurs['gm_code_num'].', '.
'gm_code_alpha = "'.$aso_valeurs['gm_code_alpha'].'", '.
'gm_nom = "'.$aso_valeurs['gm_nom'].'", '.
'gm_raccourci_clavier = "'.$aso_valeurs['gm_raccourci_clavier'].'", '.
'gm_robot = "'.$aso_valeurs['gm_robot'].'", '.
'gm_titre = "'.$aso_valeurs['gm_titre'].'", '.
'gm_titre_alternatif = "'.$aso_valeurs['gm_titre_alternatif'].'", '.
'gm_mots_cles = "'.$aso_valeurs['gm_mots_cles'].'", '.
'gm_description_libre = "'.$aso_valeurs['gm_description_libre'].'", '.
'gm_description_resume = "'.$aso_valeurs['gm_description_resume'].'", '.
'gm_description_table_matieres = "'.$aso_valeurs['gm_description_table_matieres'].'", '.
'gm_source = "'.$aso_valeurs['gm_source'].'", '.
'gm_auteur = "'.$aso_valeurs['gm_auteur'].'", '.
'gm_contributeur = "'.$aso_valeurs['gm_contributeur'].'", '.
'gm_editeur = "'.$aso_valeurs['gm_editeur'].'", '.
'gm_date_creation = "'.$aso_valeurs['gm_date_creation'].'", '.
'gm_date_debut_validite = "'.$aso_valeurs['gm_date_debut_validite'].'", '.
'gm_date_fin_validite = "'.$aso_valeurs['gm_date_fin_validite'].'", '.
'gm_date_copyright = "'.$aso_valeurs['gm_date_copyright'].'", '.
'gm_licence = "'.$aso_valeurs['gm_licence'].'", '.
'gm_categorie = "'.$aso_valeurs['gm_categorie'].'", '.
'gm_public = "'.$aso_valeurs['gm_public'].'", '.
'gm_public_niveau = "'.$aso_valeurs['gm_public_niveau'].'", '.
'gm_ce_type_portee_spatiale = "'.$aso_valeurs['gm_ce_type_portee_spatiale'].'", '.
'gm_portee_spatiale = "'.$aso_valeurs['gm_portee_spatiale'].'", '.
'gm_ce_type_portee_temporelle = "'.$aso_valeurs['gm_ce_type_portee_temporelle'].'", '.
'gm_portee_temporelle = "'.$aso_valeurs['gm_portee_temporelle'].'", '.
'gm_ce_admin = "'.$auth->getAuthData('ga_id_administrateur').'" '.
'WHERE gm_id_menu = '.$adme_menu_id;
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
// Gestion de la relation menu par défaut
if (isset($aso_valeurs['defaut']) && $aso_valeurs['defaut'] == 1) {
$requete_id_menu_supr_defaut = 'SELECT GM01.gm_id_menu AS id_menu_supr_defaut '.
'FROM gen_menu AS GM01, gen_menu AS GM02, gen_menu_relation '.
'WHERE GM02.gm_id_menu = '.$adme_menu_id.' '.
'AND GM02.gm_ce_site = GM01.gm_ce_site '.
'AND GM01.gm_id_menu = gmr_id_menu_01 '.
'AND gmr_id_valeur = 101 ';// 101 = menu par "defaut"
$resultat_menu_supr_defaut = $db->query($requete_id_menu_supr_defaut);
if (DB::isError($resultat_menu_supr_defaut)) {
die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_menu_supr_defaut->getMessage(), $requete_id_menu_supr_defaut));
}
$ligne_menu_supr_defaut = $resultat_menu_supr_defaut->fetchRow(DB_FETCHMODE_OBJECT);
if ($resultat_menu_supr_defaut->numRows() > 0 ) {
$requete_supr_defaut = 'DELETE FROM gen_menu_relation '.
'WHERE gmr_id_menu_01 = gmr_id_menu_02 '.
'AND gmr_id_valeur = 101 '.// 101 = menu par "defaut"
'AND gmr_id_menu_01 = '.$ligne_menu_supr_defaut->id_menu_supr_defaut;
$resultat_supr_defaut = $db->query($requete_supr_defaut);
if (DB::isError($resultat_supr_defaut)) {
die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_supr_defaut->getMessage(), $requete_supr_defaut));
}
}
$resultat_menu_supr_defaut->free();
// Requete d'insertion de la relation menu par défaut
$requete = 'INSERT INTO gen_menu_relation '.
'SET gmr_id_menu_01 = '.$adme_menu_id.', '.
'gmr_id_menu_02 = '.$adme_menu_id.', '.
'gmr_id_valeur = 101, '.
'gmr_ordre = NULL ';
$resultat = $db->query($requete);
if (DB::isError($resultat)) {
die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));
}
}
}
 
/** Fonction ADME_deplacerMenuClassique() - Permet de déplacer un menu dans la hiérarchie.
*
* Permet de déplacer un menu dans la hiérarchie des menus classiques.
* Ancien nom : moveMenu()
*
* @param mixed objet Pear DB de connexion à la base de données.
* @param integer identifiant du site administré.
* @param integer identifiant du menu à déplacer.
* @param boolean indique si on veut monter le menu (true) ou le descendre (false).
* @return void modifie la base de données.
*/
function ADME_deplacerMenuClassique($db, $adme_site_id, $adme_menu_id, $bln_monter)
{
//-------------------------------------------------------------------------------------------------------------------
// Récupération d'information sur le site de ce menu.
$objet_site = GEN_lireInfoSitePrincipal($db, $adme_site_id);
if ($objet_site == false) {
die('ERREUR Papyrus Administrateur de Menus : '.ADME_LG_ERREUR_INFO_SITE.'<br />'.
'Id du site : '. $adme_site_id .'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br />');
}
//-------------------------------------------------------------------------------------------------------------------
// Récupération d'informations sur les relations du menu courant.
$ligne_menu_courant_relation = GEN_lireInfoMenuRelation($db, $adme_menu_id, '1');
if ($ligne_menu_courant_relation == false) {
die('ERREUR Papyrus Administrateur de Menus : '.ADME_LG_ERREUR_INFO_MENU_RELATION.'<br />'.
'Identifiant menu : '. $adme_menu_id .'<br />'.
'Identifiant valeur relation : 1 <br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br />');
}
//-------------------------------------------------------------------------------------------------------------------
// Récupération de l'identifiant du menu pére
$id_pere = GEN_lireIdentifiantMenuPere($adme_menu_id);
if ($id_pere === false) {
die('ERREUR Papyrus Administrateur de Menus : '.ADME_LG_ERREUR_ID_MENU_PERE.'<br />'.
'Identifiant menu fils : '. $adme_menu_id .'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br />');
}
//-------------------------------------------------------------------------------------------------------------------
// Recherche d'information sur le menu précédent ou suivant le menu courant
$requete = 'SELECT GMR01.gmr_ordre AS nouvel_ordre, GMR01.gmr_id_menu_01 AS id_menu_remplace '.
'FROM gen_menu, gen_menu_relation AS GMR01, gen_menu_relation AS GMR02 '.
'WHERE GMR02.gmr_id_menu_01 = GMR01.gmr_id_menu_01 '.
'AND GMR01.gmr_id_menu_01 = gm_id_menu './/jonction avec la table GEN_MENU
'AND gm_ce_site = '.$objet_site->gs_id_site.' '.
'AND GMR02.gmr_id_valeur = 100 '.// 100 = menu type "classique"
'AND GMR01.gmr_id_menu_02 = '.$id_pere.' '.
'AND GMR01.gmr_id_valeur = 1 ';// 1 = relation menu "père"
if ($bln_monter) {
$requete .= 'AND GMR01.gmr_ordre < '.$ligne_menu_courant_relation->gmr_ordre.' '.
'ORDER BY GMR01.gmr_ordre DESC';
} else {
$requete .= 'AND GMR01.gmr_ordre > '.$ligne_menu_courant_relation->gmr_ordre.' '.
'ORDER BY GMR01.gmr_ordre ASC';
}
$resultat_menu = $db->query($requete);
(DB::isError($resultat_menu)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_menu->getMessage(), $requete)) : '';
$ligne_menu = $resultat_menu->fetchRow(DB_FETCHMODE_OBJECT);
$resultat_menu->free();
//-------------------------------------------------------------------------------------------------------------------
// Si la requete ne retourne rien nous ne faisons rien.
if (! $ligne_menu) {
return null;
}
//-------------------------------------------------------------------------------------------------------------------
// Mise à jour des relations du menu courant
$requete = 'UPDATE gen_menu_relation SET '.
'gmr_ordre = '.$ligne_menu->nouvel_ordre.' '.
'WHERE gmr_id_menu_01 = '.$ligne_menu_courant_relation->gmr_id_menu_01.' '.
'AND gmr_id_valeur = 1';// 1 = relation menu "père"
$resultat_update = $db->query($requete);
(DB::isError($resultat_update)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_update->getMessage(), $requete)) : '';
//-------------------------------------------------------------------------------------------------------------------
// Mise à jour des relations du menu précédent ou suivant
$requete = 'UPDATE gen_menu_relation SET '.
'gmr_ordre = '.$ligne_menu_courant_relation->gmr_ordre.' '.
'WHERE gmr_id_menu_01 = '.$ligne_menu->id_menu_remplace.' '.
'AND gmr_id_valeur = 1';// 1 = relation menu "père"
$resultat_update = $db->query($requete);
(DB::isError($resultat_update)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_update->getMessage(), $requete)) : '';
}
 
 
/** Fonction ADME_traduireMenuClassique() - Permet de traduire un menu classique
*
* Permet de traduire un menu classique
*
* @param mixed objet Pear DB de connexion à la base de données.
* @param integer identifiant du site administré.
* @param integer identifiant du menu à déplacer.
* @return void modifie la base de données.
*/
function ADME_traduireMenuClassique($db, $auth, $adme_menu_id, $aso_valeurs) {
 
// Récupération d'infos sur le site principal.
$objet_site = GEN_lireInfoSitePrincipal($db, $aso_valeurs['adme_site_id']);
if ($objet_site == false) {
die('ERREUR Génésia Administrateur de Menus : impossible de lire les infos du site.<br />'.
'ID du site : '.$aso_valeurs['adme_site_id'].'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br />');
}
$nouveau_id_menu = SQL_obtenirNouveauId($db, 'gen_menu', 'gm_id_menu');
$auteur = $auth->getAuthData('ga_prenom').' '.$auth->getAuthData('ga_nom');
$requete = 'INSERT INTO gen_menu '.
'SET gm_id_menu = '.$nouveau_id_menu.', '.
'gm_ce_site = '.$aso_valeurs['adme_site_id'].', '.
'gm_ce_i18n = "'.$aso_valeurs['gs_ce_i18n'].'", '.
'gm_ce_application = '.$aso_valeurs['gm_ce_application'].', '.
'gm_application_arguments = "'.$aso_valeurs['gm_application_arguments'].'", '.
'gm_fichier_squelette = "'.$aso_valeurs['gm_fichier_squelette'].'", '.
'gm_code_num = '.$aso_valeurs['gm_code_num'].', '.
'gm_code_alpha = "'.$aso_valeurs['gm_code_alpha'].'", '.
'gm_nom = "'.$aso_valeurs['gm_nom'].'", '.
'gm_raccourci_clavier = "'.$aso_valeurs['gm_raccourci_clavier'].'", '.
'gm_robot = "'.$aso_valeurs['gm_robot'].'", '.
'gm_titre = "'.$aso_valeurs['gm_titre'].'", '.
'gm_titre_alternatif = "'.$aso_valeurs['gm_titre_alternatif'].'", '.
'gm_mots_cles = "'.$aso_valeurs['gm_mots_cles'].'", '.
'gm_description_libre = "'.$aso_valeurs['gm_description_libre'].'", '.
'gm_description_resume = "'.$aso_valeurs['gm_description_resume'].'", '.
'gm_description_table_matieres = "'.$aso_valeurs['gm_description_table_matieres'].'", '.
'gm_source = "'.$aso_valeurs['gm_source'].'", '.
'gm_auteur = "'.$aso_valeurs['gm_auteur'].'", '.
'gm_contributeur = "'.$aso_valeurs['gm_contributeur'].'", '.
'gm_editeur = "'.$aso_valeurs['gm_editeur'].'", '.
'gm_date_creation = "'.$aso_valeurs['gm_date_creation'].'", '.
'gm_date_debut_validite = "'.$aso_valeurs['gm_date_debut_validite'].'", '.
'gm_date_fin_validite = "'.$aso_valeurs['gm_date_fin_validite'].'", '.
'gm_date_copyright = "'.$aso_valeurs['gm_date_copyright'].'", '.
'gm_licence = "'.$aso_valeurs['gm_licence'].'", '.
'gm_categorie = "'.$aso_valeurs['gm_categorie'].'", '.
'gm_public = "'.$aso_valeurs['gm_public'].'", '.
'gm_public_niveau = "'.$aso_valeurs['gm_public_niveau'].'", '.
'gm_ce_type_portee_spatiale = "'.$aso_valeurs['gm_ce_type_portee_spatiale'].'", '.
'gm_portee_spatiale = "'.$aso_valeurs['gm_portee_spatiale'].'", '.
'gm_ce_type_portee_temporelle = "'.$aso_valeurs['gm_ce_type_portee_temporelle'].'", '.
'gm_portee_temporelle = "'.$aso_valeurs['gm_portee_temporelle'].'", '.
'gm_ce_admin = "'.$auth->getAuthData('ga_id_administrateur').'" ';
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
//----------------------------------------------------------------------------
// Ajout de la relation traduction
if (!isset($adme_menu_id) && empty($adme_menu_id)) {
$adme_menu_id = 0 ;// Identifiant du père
}
//----------------------------------------------------------------------------
// Récupération d'infos sur la hierarchie du menu
$requete = 'SELECT GMR01.gmr_ordre '.
'FROM gen_menu_relation AS GMR01, gen_menu_relation AS GMR02 '.
'WHERE GMR01.gmr_id_menu_02 = '.$adme_menu_id.' '.
'AND GMR01.gmr_id_valeur = 1 '.// 1 = avoir "père"
'AND GMR02.gmr_id_menu_01 = GMR01.gmr_id_menu_01 '.
'AND GMR02.gmr_id_menu_01 = GMR02.gmr_id_menu_02 '.
'AND GMR02.gmr_id_valeur = 100 '.// 100 = menu type "classique"
'ORDER BY GMR01.gmr_ordre DESC';
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
$nouveau_ordre_menu = $ligne->gmr_ordre + 1;
$resultat->free();
// Traduction :
$requete = 'INSERT INTO gen_menu_relation '.
'SET gmr_id_menu_01 = '.$adme_menu_id.', '.
'gmr_id_menu_02 = '.$nouveau_id_menu.', '.
'gmr_id_valeur = 2, '. // Avoir traduction
'gmr_ordre = '.$nouveau_ordre_menu;
 
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
//----------------------------------------------------------------------------
// Ajout de la relation-type "menu classique"
// Récupération d'infos sur la hierarchie du menu
$requete = 'SELECT * '.
'FROM gen_menu_relation, gen_menu '.
'WHERE gmr_id_menu_02 = gmr_id_menu_01 '.
'AND gmr_id_valeur = 100 '.// 100 = type menu "classique"
'AND gmr_id_menu_01 = gm_id_menu '.
'AND gm_ce_site = '.$aso_valeurs['adme_site_id'].' '.
'ORDER BY gmr_ordre DESC';
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
$nouveau_ordre_menu_classique = $ligne->gmr_ordre + 1;
$resultat->free();
$requete = 'INSERT INTO gen_menu_relation '.
'SET gmr_id_menu_01 = '.$nouveau_id_menu.', '.
'gmr_id_menu_02 = '.$nouveau_id_menu.', '.
'gmr_id_valeur = 100, '.
'gmr_ordre = '.$nouveau_ordre_menu_classique;
$result = $db->query($requete);
(DB::isError($result)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $result->getMessage(), $requete)) : '';
}
 
/** Fonction ADME_indenterMenuClassique() - Permet d'augmenter ou diminuer l'indentation d'un menu dans la
* hierarchie
*
* Permet d'augmenter ou diminuer l'indentation d'un menu dans la hierarchie
*
* @param mixed objet Pear DB de connexion à la base de données.
* @param integer identifiant du site administré.
* @param integer identifiant du menu à déplacer.
* @param boolean indique si on veut diminuer (gauche) l'indentation (true) ou augmenter (droite) l'indentation (false).
* @return void modifie la base de données.
*/
function ADME_indenterMenuClassique($db, $adme_site_id, $adme_menu_id, $bln_diminuer) {
 
//-------------------------------------------------------------------------------------------------------------------
// Récupération d'information sur le site de ce menu.
$objet_site = GEN_lireInfoSitePrincipal($db, $adme_site_id);
if ($objet_site == false) {
die('ERREUR Papyrus Administrateur de Menus : '.ADME_LG_ERREUR_INFO_SITE.'<br />'.
'Id du site : '. $adme_site_id .'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br />');
}
//-------------------------------------------------------------------------------------------------------------------
// Récupération d'informations sur les relations du menu courant.
$ligne_menu_courant_relation = GEN_lireInfoMenuRelation($db, $adme_menu_id, '1');
if ($ligne_menu_courant_relation == false) {
die('ERREUR Papyrus Administrateur de Menus : '.ADME_LG_ERREUR_INFO_MENU_RELATION.'<br />'.
'Identifiant menu : '. $adme_menu_id .'<br />'.
'Identifiant valeur relation : 1 <br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br />');
}
//-------------------------------------------------------------------------------------------------------------------
// Récupération de l'identifiant du menu pére
$id_pere = GEN_lireIdentifiantMenuPere($adme_menu_id);
if ($id_pere === false) {
die('ERREUR Papyrus Administrateur de Menus : '.ADME_LG_ERREUR_ID_MENU_PERE.'<br />'.
'Identifiant menu fils : '. $adme_menu_id .'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br />');
}
if ($bln_diminuer) {
// Diminution d'un niveau
if ($id_pere) {
// Récupération de l'identifiant du menu grand pére, sera le nouveau pere
$id_grand_pere = GEN_lireIdentifiantMenuPere($id_pere);
if ($id_grand_pere === false) {
die('ERREUR Papyrus Administrateur de Menus : '.ADME_LG_ERREUR_ID_MENU_PERE.'<br />'.
'Identifiant menu fils : '. $adme_menu_id .'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br />');
}
// Récupération d'informations sur les relations du menu pere
$ligne_menu_pere_relation = GEN_lireInfoMenuRelation($db, $id_pere, '1');
if ($ligne_menu_pere_relation == false) {
die('ERREUR Papyrus Administrateur de Menus : '.ADME_LG_ERREUR_INFO_MENU_RELATION.'<br />'.
'Identifiant menu : '. $adme_menu_id .'<br />'.
'Identifiant valeur relation : 1 <br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br />');
}
//-------------------------------------------------------------------------------------------------------------------
// Recherche d'information sur le menu suivant le menu pere
//-------------------------------------------------------------------------------------------------------------------
$requete = 'SELECT GMR01.gmr_ordre AS nouvel_ordre, GMR01.gmr_id_menu_01 AS id_menu_remplace '.
'FROM gen_menu, gen_menu_relation AS GMR01, gen_menu_relation AS GMR02 '.
'WHERE GMR02.gmr_id_menu_01 = GMR01.gmr_id_menu_01 '.
'AND GMR01.gmr_id_menu_01 = gm_id_menu './/jonction avec la table GEN_MENU
'AND gm_ce_site = '.$objet_site->gs_id_site.' '.
'AND GMR02.gmr_id_valeur = 100 '.// 100 = menu type "classique"
'AND GMR01.gmr_id_menu_02 = '.$id_grand_pere.' '.
'AND GMR01.gmr_id_valeur = 1 '.// 1 = relation menu "père"
'AND GMR01.gmr_ordre > '.$ligne_menu_pere_relation->gmr_ordre.' '.
'ORDER BY GMR01.gmr_ordre DESC';
$resultat_menu = $db->query($requete);
(DB::isError($resultat_menu)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_menu->getMessage(), $requete)) : '';
$ligne_menu = $resultat_menu->fetchRow(DB_FETCHMODE_OBJECT);
$resultat_menu->free();
//-------------------------------------------------------------------------------------------------------------------
// Si la requete ne retourne rien nous ne faisons rien.
if (! $ligne_menu) {
$no=$ligne_menu_pere_relation->gmr_ordre+1;
}
else {
$no=$ligne_menu->nouvel_ordre+1;
}
// Mise à jour pere menu courant
$requete = 'UPDATE gen_menu_relation SET '.
'gmr_id_menu_02 = '.$id_grand_pere.' ,'.
'gmr_ordre = '.$no.' '.
'WHERE gmr_id_menu_01 = '.$ligne_menu_courant_relation->gmr_id_menu_01.' '.
'AND gmr_id_valeur = 1';// 1 = relation menu "père"
$resultat_update = $db->query($requete);
(DB::isError($resultat_update)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_update->getMessage(), $requete)) : '';
}
}
else {
 
$requete = 'SELECT GMR01.gmr_id_menu_01 '.
'FROM gen_menu, gen_menu_relation AS GMR01, gen_menu_relation AS GMR02 '.
'WHERE GMR02.gmr_id_menu_01 = GMR01.gmr_id_menu_01 '.
'AND GMR01.gmr_id_menu_01 = gm_id_menu './/jonction avec la table GEN_MENU
'AND gm_ce_site = '.$objet_site->gs_id_site.' '.
'AND GMR02.gmr_id_valeur = 100 '.// 100 = menu type "classique"
'AND GMR01.gmr_id_menu_02 = '.$id_pere.' '.
'AND GMR01.gmr_id_valeur = 1 '.// 1 = relation menu "père"
'AND GMR01.gmr_ordre < '.$ligne_menu_courant_relation->gmr_ordre.' '.
'ORDER BY GMR01.gmr_ordre DESC';
$resultat_menu = $db->query($requete);
(DB::isError($resultat_menu)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_menu->getMessage(), $requete)) : '';
 
$ligne_menu = $resultat_menu->fetchRow(DB_FETCHMODE_OBJECT);
$resultat_menu->free();
//-------------------------------------------------------------------------------------------------------------------
// Si la requete ne retourne rien nous ne faisons rien.
if (! $ligne_menu) {
return null;
}
//----------------------------------------------------------------------------
// Recherche dernier fils
$requete = 'SELECT GMR01.gmr_ordre '.
'FROM gen_menu_relation AS GMR01, gen_menu_relation AS GMR02 '.
'WHERE GMR01.gmr_id_menu_02 = '.$ligne_menu->gmr_id_menu_01.' '.
'AND GMR01.gmr_id_valeur = 1 '.// 1 = avoir "père"
'AND GMR02.gmr_id_menu_01 = GMR01.gmr_id_menu_01 '.
'AND GMR02.gmr_id_menu_01 = GMR02.gmr_id_menu_02 '.
'AND GMR02.gmr_id_valeur = 100 '.// 100 = menu type "classique"
'ORDER BY GMR01.gmr_ordre DESC';
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
 
$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
$resultat->free();
 
if (isset($ligne)) {
$no = $ligne->gmr_ordre + 1;
}
else {
$no = 1;
}
// Mise à jour pere menu courant
$requete = 'UPDATE gen_menu_relation SET '.
'gmr_id_menu_02 = '.$ligne_menu->gmr_id_menu_01.' ,'.
'gmr_ordre = '.$no.' '.
'WHERE gmr_id_menu_01 = '.$ligne_menu_courant_relation->gmr_id_menu_01.' '.
'AND gmr_id_valeur = 1';// 1 = relation menu "père"
$resultat_update = $db->query($requete);
(DB::isError($resultat_update)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_update->getMessage(), $requete)) : '';
}
}
 
 
/** Fonction ADME_supprimerMenuClassique() - Supprime un menu classique.
*
* Supprime de la base de données de Papyrus toutes les traces du menu classiques
* passé en paramètre.
* Ancien nom : deleteMenu()
*
* @param mixed l'objet Pear DB de connexion à la base de données.
* @param integer l'identifiant du site du menu à supprimer
* @param integer l'identifiant du menu à supprimer
* @return void le menu classique est supprimé de la base de données.
*/
function ADME_supprimerMenuClassique($db, $adme_id_site, $id_menu_a_supprimer)
{
$code_menu = GEN_lireInfoMenu($db, $id_menu_a_supprimer, DB_FETCHMODE_ASSOC);
//----------------------------------------------------------------------------
// Y a t'il des sous_menus
$requete = 'SELECT COUNT(gm_id_menu) AS compte '.
'FROM gen_menu, gen_menu_relation '.
'WHERE gmr_id_menu_02 = '.$id_menu_a_supprimer.' '.
'AND gmr_id_valeur = 1 '.
'AND gmr_id_menu_01 = gm_id_menu ';
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
if ($ligne && ($ligne->compte > 0)) {
return ADME_LG_ERREUR_EXISTE_SOUS_MENU;
}
//-------------------------------------------------------------------------------------------------------------------
// Mise à jour de l'ordre des menus
$ligne_menu_supr_relation = GEN_lireInfoMenuRelation($db, $id_menu_a_supprimer, '1'); // 1 = relation "avoir père"
$requete = 'SELECT GMR01.gmr_id_menu_01, GMR01.gmr_ordre '.
'FROM gen_menu, gen_menu_relation AS GMR01, gen_menu_relation AS GMR02 '.
'WHERE GMR02.gmr_id_menu_01 = GMR01.gmr_id_menu_01 '.
'AND GMR01.gmr_id_menu_01 = gm_id_menu './/jonction avec la table GEN_MENU
'AND gm_ce_site = '.$adme_id_site.' '.// le site du menu!
'AND GMR02.gmr_id_valeur = 100 '.// 100 = menu type "classique"
'AND GMR01.gmr_id_menu_02 = '.$ligne_menu_supr_relation->gmr_id_menu_02.' '.
'AND GMR01.gmr_id_valeur = 1 '.// 1 = relation menu "père"
'AND GMR01.gmr_ordre > '.$ligne_menu_supr_relation->gmr_ordre.' '.
'ORDER BY GMR01.gmr_ordre ASC';
$resultat = $db->query($requete);
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
// Mise à jour des relations hiérarchiques du menu courant
$requete_maj = 'UPDATE gen_menu_relation SET '.
'gmr_ordre = '.($ligne->gmr_ordre - 1).' '.
'WHERE gmr_id_menu_01 = '.$ligne->gmr_id_menu_01.' '.
'AND gmr_id_valeur = 1';// 1 = relation menu "père"
$resultat_maj = $db->query($requete_maj);
(DB::isError($resultat_maj)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_maj->getMessage(), $requete_maj)) : '';
}
$resultat->free();
//----------------------------------------------------------------------------
// S'il n'y a plus de sous niveau, on supprime le menu
$requete = 'DELETE FROM gen_menu '.
'WHERE gm_id_menu = '.$id_menu_a_supprimer;
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
//----------------------------------------------------------------------------
// Puis on supprime les relations de ce menu
$requete = 'DELETE FROM gen_menu_relation '.
'WHERE gmr_id_menu_01 = '.$id_menu_a_supprimer;
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
// Suppression du contenu !!!!
$requete = 'DELETE FROM gen_menu_contenu '.
'WHERE gmc_ce_menu= '.$id_menu_a_supprimer.' ';
 
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
}
 
/** Fonction ADME_supprimerMenuClassiqueTraduction() - Supprime une traduction de menu classique.
*
* Supprime de la base de données de Papyrus toutes les traces du menu classiques
* passé en paramètre.
* Ancien nom : deleteMenu()
*
* @param mixed l'objet Pear DB de connexion à la base de données.
* @param integer l'identifiant du site du menu à supprimer
* @param integer l'identifiant du menu à supprimer
* @return void le menu classique est supprimé de la base de données.
*/
function ADME_supprimerMenuClassiqueTraduction($db, $adme_id_site, $id_menu_a_supprimer)
{
$code_menu = GEN_lireInfoMenu($db, $id_menu_a_supprimer, DB_FETCHMODE_ASSOC);
if ($code_menu === false) {
die('ERREUR Papyrus Administrateur de Menus : '.ADME_LG_ERREUR_INFO_MENU.'<br />'.
'Idenitifiant du menu n° : '. $id_menu_a_supprimer .'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br />');
}
$requete = 'DELETE FROM gen_menu '.
'WHERE gm_id_menu = '.$id_menu_a_supprimer;
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
//----------------------------------------------------------------------------
// Puis on supprime les relations de ce menu
$requete = 'DELETE FROM gen_menu_relation '.
'WHERE gmr_id_menu_01 = '.$id_menu_a_supprimer;
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
//----------------------------------------------------------------------------
// Puis on supprime les relations de ce menu
$requete = 'DELETE FROM gen_menu_relation '.
'WHERE gmr_id_menu_02 = '.$id_menu_a_supprimer;
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
// Suppression du contenu !!!!
$requete = 'DELETE FROM gen_menu_contenu '.
'WHERE gmc_ce_menu = '.$id_menu_a_supprimer.' ';
 
 
 
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
}
 
function ADME_verifier_traduction_possible($db, $url, $adme_site_id, $adme_menu_id) {
$aso_valeurs = GEN_lireInfoMenu($db, $adme_menu_id, DB_FETCHMODE_ASSOC);
if ($aso_valeurs === false) {
die('ERREUR Papyrus Administrateur de Menus : '.ADME_LG_ERREUR_INFO_MENU.'<br />'.
'Idenitifiant du menu n° : '. $adme_menu_id .'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br />');
}
// Recherche liste des menu deja traduits
$requete = 'SELECT distinct gm_ce_i18n '.
'FROM gen_menu_relation, gen_menu '.
'WHERE gmr_id_menu_01 = ' . $adme_menu_id .' '.
'AND gm_id_menu = gmr_id_menu_02 '.
'AND gmr_id_valeur = 2 '; // 2 = "avoir traduction"
$resultat = $db->query($requete) ;
if (DB::isError($resultat)) {
die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
}
$not_in_langue='';
if ( $resultat->numRows() == 0 ) {
$not_in_langue="gi_id_i18n not in('".$aso_valeurs['gm_ce_i18n']."')";
}
else {
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
$not_in_langue="'".$ligne->gm_ce_i18n."'".",".$not_in_langue;
$end="'".$ligne->gm_ce_i18n."'";
}
if ($not_in_langue) {
$not_in_langue="'".$aso_valeurs['gm_ce_i18n']."'".",".$not_in_langue;
$not_in_langue=' gi_id_i18n not in('.$not_in_langue.$end.')';
}
else {
$not_in_langue="gi_id_i18n not in('".$aso_valeurs['gm_ce_i18n']."')";
}
}
$requete = "SELECT * FROM gen_i18n where ".$not_in_langue;
 
$resultat = $db->query($requete) ;
if (DB::isError($resultat)) {
die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
}
$retour = $resultat->numRows();
$resultat->free();
$message='';
if ($retour == 0) {
$message = '<p class="pap_erreur">Plus de traduction possible pour ce menu </p>';
}
return $message;
}
 
 
 
/** Fonction ADME_selectionnerMenuClassiqueTraduction()() Selection un menu classique comme traduction par defaut
*
*
* @param mixed l'objet Pear DB de connexion à la base de données.
* @param integer l'identifiant du site du menu à supprimer
* @param integer l'identifiant du menu à supprimer
* @return void le menu classique est supprimé de la base de données.
*/
function ADME_selectionnerMenuClassiqueTraduction($db, $adme_id_site, $id_menu)
{
// 1 : Rechercher traduction parente : si presente on est dans une traduc. si absente on
// est dans un menu en version originale
$requete_origine_traduction = 'SELECT gmr_id_menu_01 '.
'FROM gen_menu_relation, gen_menu '.
'WHERE gmr_id_menu_02 = ' . $id_menu .' '.
'AND gmr_id_valeur = 2 '; // 2 = "avoir traduction"
$resultat_origine_traduction = $db->query($requete_origine_traduction) ;
if (DB::isError($resultat_origine_traduction)) {
die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete_origine_traduction) );
}
if ($resultat_origine_traduction->numRows() > 0) {
$ligne_origine_traduction = $resultat_origine_traduction->fetchRow(DB_FETCHMODE_OBJECT);
$id_menu_origine=$ligne_origine_traduction->gmr_id_menu_01;
}
else {
$id_menu_origine=$id_menu;
}
 
$requete_suppression = 'DELETE from gen_menu_relation '.
'WHERE gmr_id_menu_01 = ' . $id_menu_origine . ' ' .
'AND gmr_id_valeur=105 '; // 105 Traduction par defaut
 
$resultat_suppression = $db->query($requete_suppression);
(DB::isError($resultat_suppression)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_suppression->getMessage(), $requete_suppression)) : '';
 
$requete_insertion = 'INSERT into gen_menu_relation '.
' SET gmr_id_menu_01 = ' . $id_menu_origine . ', ' .
' gmr_id_menu_02 = ' . $id_menu . ', ' .
' gmr_id_valeur = 105' ;
 
$resultat_insertion = $db->query($requete_insertion);
(DB::isError($resultat_insertion)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_insertion->getMessage(), $requete_insertion)) : '';
 
 
/* $requete = 'UPDATE gen_menu_relation SET gmr_id_menu_02 = '. $g
'WHERE gmr_id_menu_01 = ' . $id_menu .
'AND gmr_id_menu_02 =42 AND `gmr_id_valeur` =105 LIMIT 1 ;
*/
}
 
 
// +------------------------------------------------------------------------------------------------------+
// | PIED du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.37 2006/10/16 15:49:07 ddelon
* Refactorisation code mulitlinguisme et gestion menu invisibles
*
* Revision 1.36 2006/10/06 13:38:45 florian
* ergonomie amélioree
*
* Revision 1.35 2006/09/07 13:45:56 jp_milcent
* Trie par ordre alphabétique des appli.
*
* Revision 1.34 2006/06/29 23:04:01 ddelon
* Bug defaut traduction sur menu commun
*
* Revision 1.33 2006/06/29 18:58:57 ddelon
* Multilinguisme : menu par defaut pour les menu commun
*
* Revision 1.32 2006/06/28 12:53:34 ddelon
* Multilinguisme : menu par defaut
*
* Revision 1.31 2006/04/12 21:11:54 ddelon
* Multilinguisme menus communs
*
* Revision 1.30 2006/03/27 14:33:04 ddelon
* Gestion suppression de contenu menu afficheur
*
* Revision 1.29 2006/03/23 20:24:59 ddelon
* *** empty log message ***
*
* Revision 1.28 2006/03/15 09:30:50 florian
* suppression des echos, qui entrainaient des problemes d'affichages
*
* Revision 1.27 2006/03/13 21:00:20 ddelon
* Suppression messages d'erreur multilinguisme
*
* Revision 1.26 2006/03/10 11:02:36 alexandre_tb
* remplacement de l'image "Traduire" par un texte "traduire" vu qu'on a pas d'image pour la notion de traduire...
*
* Revision 1.25 2006/03/02 10:49:49 ddelon
* Fusion branche multilinguisme dans branche principale
*
* Revision 1.24.2.1 2006/02/28 14:02:11 ddelon
* Finition multilinguisme
*
* Revision 1.24 2005/09/23 13:58:07 ddelon
* Php5, Projet et Redirection
*
* Revision 1.23 2005/09/20 17:01:22 ddelon
* php5 et bugs divers
*
* Revision 1.22 2005/07/08 21:13:15 ddelon
* Gestion indentation menu
*
* Revision 1.21 2005/05/26 16:13:08 jpm
* Correction taille éditeur: passage en text
*
* Revision 1.19 2005/05/26 15:34:46 jpm
* Ajout d'un espace.
*
* Revision 1.18 2005/05/26 08:54:20 jpm
* Ajout info admin ayant fait la dernière modif.
*
* Revision 1.17 2005/04/19 16:47:16 jpm
* Gestion des dates de fin de validité des menus.
*
* Revision 1.16 2005/03/29 15:49:12 jpm
* Ajout de la date de création dans le formulaire des menus.
*
* Revision 1.15 2005/02/28 11:05:06 jpm
* Modification des auteurs.
*
* Revision 1.14 2004/12/01 16:47:28 jpm
* Ajout d'une boite javascript de confirmation de suppression d'un menu.
*
* Revision 1.13 2004/11/29 18:34:51 jpm
* Correction bogue checkbox.
*
* Revision 1.12 2004/11/15 16:51:12 jpm
* Correction bogue de mise à jour de l'ordre des menus.
*
* Revision 1.11 2004/11/10 19:41:14 jpm
* Correction bogue.
*
* Revision 1.10 2004/11/10 17:26:07 jpm
* Fin gestion de la traduction.
*
* Revision 1.9 2004/11/09 17:53:00 jpm
* Changement des noms des actions sur les menus classiques.
*
* Revision 1.8 2004/11/09 17:48:35 jpm
* Gestion de différentes interfaces d'administration.
*
* Revision 1.7 2004/11/09 12:37:34 jpm
* Fin de gestion des menus et mise en conformité avec la convention de codage.
*
* Revision 1.6 2004/11/08 17:40:07 jpm
* Gestion correcte de l'ouverture et fermeture des menus.
* Utilisation des sessions.
*
* Revision 1.5 2004/11/04 19:11:38 jpm
* Mise en conformité vis à vis de la convention de codage.
* Amélioration de la récursivité de la gestion de l'affichage des menus.
*
* Revision 1.4 2004/10/25 16:27:42 jpm
* Correction d'un bogue dans la gestion du déplacement des menus.
*
* Revision 1.3 2004/09/23 17:45:13 jpm
* Amélioration de la gestion des liens annuler et du selecteur de sites.
*
* Revision 1.2 2004/07/06 17:07:37 jpm
* Modification de la documentation pour une mailleur analyse par PhpDocumentor.
*
* Revision 1.1 2004/06/16 15:04:32 jpm
* Changement de nom de Génésia en Papyrus.
* Changement de l'arborescence.
*
* Revision 1.27 2004/05/10 12:13:03 jpm
* Modification des formulaires.
*
* Revision 1.26 2004/05/07 16:31:20 jpm
* Amélioration du formulaire d'un menu classique.
*
* Revision 1.25 2004/05/07 07:23:53 jpm
* Amélioration du code, des commentaires et correction de bogues.
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/applications/admin_menu/bibliotheque/adme_menu_commun.fonct.php
New file
0,0 → 1,1645
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This file is part of Papyrus. |
// | |
// | Foobar is free software; you can redistribute it and/or modify |
// | it under the terms of the GNU General Public License as published by |
// | the Free Software Foundation; either version 2 of the License, or |
// | (at your option) any later version. |
// | |
// | Foobar 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 General Public License for more details. |
// | |
// | You should have received a copy of the GNU General Public License |
// | along with Foobar; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: adme_menu_commun.fonct.php,v 1.27 2006-10-16 15:49:07 ddelon Exp $
/**
* Application de gestion des menus communs
*
* Permet de lister, d'ajouter, de modifier, et de déplacer des menus communs.
* Par menus communs, nous entendons tous les menus devant paraitre sur l'ensemble des pages de plusieurs site,
* comme le lien vers le plan du site, le lien vers la charte d'accessibilité, le flux rss...
*
*@package Admin_menu
*@subpackage Fonctions
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author Alexandre GRANIER <alexandre@tela-botanica.org>
*@author David Delon <david.delon@clapas.net>
*@author Laurent COUDOUNEAU <lc@gsite.org>
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.27 $ $Date: 2006-10-16 15:49:07 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTÊTE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
// +------------------------------------------------------------------------------------------------------+
// | CORPS du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
// +------------------------------------------------------------------------------------------------------+
// | LISTE de FONCTIONS |
// +------------------------------------------------------------------------------------------------------+
/** Fonction ADME_afficherListeMenuCommun () - Affiche un arbre de menu en xhtml
*
* Elle forme l'arbre des menus communs à administrer.
* Ancien nom : deployer_menu().
*
* @param object objet Pear de connection à la base de données.
* @param object objet Pear représentant l'url de base.
* @param integer l'identifiant du menu à administrer.
* @param integer l'identifiant du menu sur lequel on agit.
* @param string le nom de l'action courante.
* @param integer l'identifiant du menu en cours de déploiement.
* @param boolean true indique que l'on a à faire au premier appel de cette fonction récursive.
* @return string le code XHTML constituant l'arbre des menus à administrer.
*/
function ADME_afficherListeMenuCommun($db, $url, $adme_site_id, $adme_menu_id, $adme_action, $id_menu_a_deployer, $bln_premier_appel = true)
{
// Initialisation des variables :
$retour = '';
// Est-ce que ces menus comporte des sous-menus ?
$requete_sous_menu = 'SELECT gm_id_menu '.
'FROM gen_menu, gen_menu_relation AS GMR01, gen_menu_relation AS GMR02 '.
'WHERE GMR01.gmr_id_menu_02 = '.$id_menu_a_deployer.' '.
'AND GMR01.gmr_id_menu_01 = gm_id_menu '.
//'AND gm_ce_site = '.$adme_site_id.' '.
'AND GMR01.gmr_id_valeur = 1 '.// 1 = avoir "père"
'AND GMR02.gmr_id_menu_02 = gm_id_menu '.
'AND GMR02.gmr_id_menu_01 = GMR02.gmr_id_menu_02 '.
'AND GMR02.gmr_id_valeur = 102 '.// 102 = type "menu commun"
'ORDER BY GMR01.gmr_ordre ASC';
$resultat_sous_menu = $db->query($requete_sous_menu) ;
if (DB::isError($resultat_sous_menu)) {
die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_sous_menu->getMessage(), $requete_sous_menu));
}
// Gestion du stockage ou déstockage des menus ouverts
if (($adme_action == ADME_LG_ACTION_DEPLIER || $adme_action == ADME_LG_ACTION_COMMUN_AJOUTER) && $id_menu_a_deployer != 0) {
$_SESSION['adme_menus_communs_ouverts'][$adme_menu_id] = $adme_menu_id;
}
if ($adme_action == ADME_LG_ACTION_PLIER && $id_menu_a_deployer != 0) {
unset($_SESSION['adme_menus_communs_ouverts'][$adme_menu_id]);
foreach ($_SESSION['adme_menus_communs_ouverts'] as $val) {
if (GEN_etreAncetre($adme_menu_id, $val)) {
unset($_SESSION['adme_menus_communs_ouverts'][$val]);
}
}
}
// Gestion affichage des menus
if ($resultat_sous_menu->numRows() > 0) {
// Ici, on sait qu'un menu a des sous menus, on commence par l'afficher:
if ($bln_premier_appel == false) {
$retour .= '<li>'."\n";
if (GEN_etreAncetre($id_menu_a_deployer, $adme_menu_id) ||
($id_menu_a_deployer == $adme_menu_id && $adme_action == ADME_LG_ACTION_DEPLIER) ||
isset($_SESSION['adme_menus_communs_ouverts'][$id_menu_a_deployer])
){
// Affiche un -
$retour .= ADME_retournerXhtmlMenuCommun($db, $url, $adme_site_id, $id_menu_a_deployer, 1);
} else if ( !GEN_etreAncetre($id_menu_a_deployer, $adme_menu_id) ||
($id_menu_a_deployer == $adme_menu_id && $adme_action == ADME_LG_ACTION_PLIER) ||
!isset($_SESSION['adme_menus_communs_ouverts'][$id_menu_a_deployer])
){
// Affiche un +
$retour .= ADME_retournerXhtmlMenuCommun($db, $url, $adme_site_id, $id_menu_a_deployer, 2);
}
}
if ($bln_premier_appel == true || GEN_etreAncetre($id_menu_a_deployer, $adme_menu_id) ||
($id_menu_a_deployer == $adme_menu_id && $adme_action == ADME_LG_ACTION_DEPLIER) ||
isset($_SESSION['adme_menus_communs_ouverts'][$id_menu_a_deployer])
){
$retour .= '<ul class="menu_commun">'."\n";
while ($ligne_sous_menu = $resultat_sous_menu->fetchRow(DB_FETCHMODE_OBJECT)) {
$retour .= ADME_afficherListeMenuCommun($db, $url, $adme_site_id, $adme_menu_id, $adme_action, $ligne_sous_menu->gm_id_menu, false);
}
$retour .= '</ul>'."\n";
}
if ($bln_premier_appel == false) {
$retour .= '</li>'."\n";
}
} else if ($resultat_sous_menu->numRows() == 0 && $bln_premier_appel == false) {
$retour .= '<li>'."\n";
$retour .= ADME_retournerXhtmlMenuCommun($db, $url, $adme_site_id, $id_menu_a_deployer, 0);
$retour .= '</li>'."\n";
}
return $retour;
}
 
/** Fonction ADME_retournerXhtmlMenuCommun() - Effectue une sortie d'un menu en XHTML
*
* Retourne le XHTML d'une ligne de l'arbre des menus communs permettant de l'administer.
* Ancien nom : menu_toHtml().
*
* @param object objet Pear de connection à la base de données.
* @param object objet Pear représentant l'url de base.
* @param integer l'identifiant du site à administrer.
* @param integer l'identifiant du menu à administrer.
* @param integer 0 indique que le menu ne possède pas de fils, 1 qu'il faut afficher un - et 2 un +.
* @return string une ligne de liste XHTML
*/
function ADME_retournerXhtmlMenuCommun($db, $url, $adme_site_id, $adme_menu_id, $int_deplier,$est_traduction=false,$menu_traduction_defaut=0)
{
//-------------------------------------------------------------------------------------------------------------------
// Récupération des infos concernant l'administrateur d'un menu
$requete = 'SELECT gen_menu.*, ga_prenom '.
'FROM gen_menu, gen_annuaire '.
'WHERE gm_id_menu = '.$adme_menu_id.' '.
'AND gm_ce_admin = ga_id_administrateur';
$resultat = $db->query($requete);
if (DB::isError($resultat)) {
die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));
}
$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
//-------------------------------------------------------------------------------------------------------------------
// Recupération des infos de l'appli du menu courant.
$ligne_app = GEN_retournerInfoAppliMenu($db, $adme_menu_id);
//-------------------------------------------------------------------------------------------------------------------
// XHTML image plier-déplier
$url->addQueryString('adme_site_id', $adme_site_id);
$url->addQueryString('adme_menu_id', $adme_menu_id);
$xhtml_pd = '';
if ($int_deplier != 0) {
if ($int_deplier == 1) {
// Afficher un -
$image_plier_deplier = ADME_IMAGE_MOINS;
$alt = ADME_LG_ACTION_PLIER_ALT;
$url->addQueryString('adme_action', ADME_LG_ACTION_PLIER);
$url_plier_deplier = $url->getURL();
} else if ($int_deplier == 2) {
// Afficher un +
$image_plier_deplier = ADME_IMAGE_PLUS;
$alt = ADME_LG_ACTION_DEPLIER_ALT;
$url->addQueryString('adme_action', ADME_LG_ACTION_DEPLIER);
$url_plier_deplier = $url->getURL();
}
$xhtml_pd = '<a href="'.$url_plier_deplier.'" title="'.$alt.'">'.
'<img class="'.ADME_CLASS_IMG_PD.'" src="'.$image_plier_deplier.'" alt="'.$alt.'" />'.
'</a>'.'&nbsp;'."\n";
}
$xhtml_info='';
//-------------------------------------------------------------------------------------------------------------------
// XHTML du nom du menu et de ses infos
$xhtml_info .= htmlentities(empty($ligne->gm_nom) ? ADME_LG_PARENTHESE_OUVRANTE.$ligne->gm_nom.ADME_LG_PARENTHESE_FERMANTE : $ligne->gm_nom);
$xhtml_info .= '&nbsp;';
$xhtml_info .= ADME_LG_PARENTHESE_OUVRANTE.$ligne_app->gap_nom.'&nbsp;'.ADME_LG_SLASH.'&nbsp;'.$ligne->ga_prenom.ADME_LG_PARENTHESE_FERMANTE;
$xhtml_info .= '&nbsp;'."\n";
//-------------------------------------------------------------------------------------------------------------------
// XHTML actions
$url->removeQueryString('adme_action');
$url->addQueryString('adme_action', ADME_LG_ACTION_COMMUN_MODIFIER);
$xhtml_action = '<a href="'.$url->getURL().'" title="'.ADME_LG_ACTION_COMMUN_MODIFIER_TITLE.'">'.
'<img class="'.ADME_CLASS_IMG_ICONE.'" src="'.ADME_IMAGE_VOIR.'" alt="'.ADME_LG_ACTION_COMMUN_MODIFIER_ALT.'" />'.
'</a>&nbsp;'."\n";
$url->removeQueryString('adme_action');
if (!$est_traduction) {
$url->addQueryString('adme_action', ADME_LG_ACTION_COMMUN_MONTER);
$xhtml_action .= '<a href="'.$url->getURL().'" title="'.ADME_LG_ACTION_COMMUN_MONTER_TITLE.'">'.
'<img class="'.ADME_CLASS_IMG_ICONE.'" src="'.ADME_IMAGE_FLECHE_HAUT.'" alt="'.ADME_LG_ACTION_COMMUN_MONTER_ALT.'" />'.
'</a>&nbsp;'."\n";
$url->removeQueryString('adme_action');
$url->addQueryString('adme_action', ADME_LG_ACTION_COMMUN_DESCENDRE);
$xhtml_action .= '<a href="'.$url->getURL().'" title="'.ADME_LG_ACTION_COMMUN_DESCENDRE_TITLE.'">'.
'<img class="'.ADME_CLASS_IMG_ICONE.'" src="'.ADME_IMAGE_FLECHE_BAS.'" alt="'.ADME_LG_ACTION_COMMUN_DESCENDRE_ALT.'" />'.
'</a>&nbsp;'."\n";
$url->addQueryString('adme_action',ADME_LG_ACTION_COMMUN_DIMINUER);
$xhtml_action .= '<a href="'.$url->getURL().'" title="'.ADME_LG_ACTION_COMMUN_DIMINUER_TITLE.'">'.
'<img class="'.ADME_CLASS_IMG_ICONE.'" src="'.ADME_IMAGE_FLECHE_GAUCHE.'" alt="'.ADME_LG_ACTION_COMMUN_DIMINUER_ALT.'" />'.
'</a>&nbsp;'."\n";
$url->removeQueryString('adme_action');
$url->addQueryString('adme_action',ADME_LG_ACTION_COMMUN_AUGMENTER);
$xhtml_action .= '<a href="'.$url->getURL().'" title="'.ADME_LG_ACTION_COMMUN_AUGMENTER_TITLE.'">'.
'<img class="'.ADME_CLASS_IMG_ICONE.'" src="'.ADME_IMAGE_FLECHE_DROITE.'" alt="'.ADME_LG_ACTION_COMMUN_AUGMENTER_ALT.'" />'.
'</a>&nbsp;'."\n";
}
$url->removeQueryString('adme_action');
if (!$est_traduction) {
$url->addQueryString('adme_action', ADME_LG_ACTION_COMMUN_SUPPRIMER);
$xhtml_action .= '<a href="'.$url->getURL().'" title="'.ADME_LG_ACTION_COMMUN_SUPPRIMER_TITLE.'" onclick="javascript:return confirm(\''.ADME_LG_ACTION_SUPPRIMER_CONFIRMATION.'\');">'.
'<img class="'.ADME_CLASS_IMG_ICONE.'" src="'.ADME_IMAGE_SUPPRIMER.'" alt="'.ADME_LG_ACTION_COMMUN_SUPPRIMER_ALT.'" />'.
'</a>&nbsp;'."\n";
}
else {
$url->addQueryString('adme_action', ADME_LG_ACTION_COMMUN_SUPPRIMER_TRADUCTION);
$xhtml_action .= '<a href="'.$url->getURL().'" title="'.ADME_LG_ACTION_COMMUN_SUPPRIMER_TRADUCTION_TITLE.'" onclick="javascript:return confirm(\''.ADME_LG_ACTION_SUPPRIMER_CONFIRMATION.'\');">'.
'<img class="'.ADME_CLASS_IMG_ICONE.'" src="'.ADME_IMAGE_SUPPRIMER.'" alt="'.ADME_LG_ACTION_COMMUN_SUPPRIMER_TRADUCTION_ALT.'" />'.
'</a>&nbsp;'."\n";
}
$url->removeQueryString('adme_action');
 
if (!$est_traduction) {
$url->addQueryString('adme_action', ADME_LG_ACTION_COMMUN_AJOUTER);
$xhtml_action .= '<a href="'.$url->getURL().'" title="'.ADME_LG_ACTION_COMMUN_AJOUTER_TITLE.'">'.
'<img class="'.ADME_CLASS_IMG_ICONE.'" src="'.ADME_IMAGE_NOUVEAU.'" alt="'.ADME_LG_ACTION_COMMUN_AJOUTER_ALT.'" />'.
'</a>'.'&nbsp;'."\n";
}
$url->removeQueryString('adme_action');
// Si l'application liée est "texte simple", on ajoute un icone avec un lien vers
// l'administration de cette application.
if ($ligne_app->gap_id_application != 0 && GEN_verifierPresenceInterfaceAdmin($db, $ligne_app->gap_id_application)) { // l'appli afficheur a pour id 3
$url->removeQueryString('adme_action');
$url->addQueryString('adme_action', ADME_LG_ACTION_ADMINISTRER);
$xhtml_action .= '<a href="'.$url->getURL().'" title="'.ADME_LG_ACTION_ADMINISTRER_TITLE.'">'.
'<img class="'.ADME_CLASS_IMG_ICONE.'" src="'.ADME_IMAGE_TEXTE.'" alt="'.ADME_LG_ACTION_ADMINISTRER_ALT.'" />'.
'</a>'.'&nbsp;'."\n";
}
if (!$est_traduction) {
$url->addQueryString('adme_action',ADME_LG_ACTION_COMMUN_TRADUIRE);
$xhtml_action .= '<a href="'.$url->getURL().'" title="'.ADME_LG_ACTION_COMMUN_TRADUIRE_TITLE.'">'.
ADME_LG_ACTION_COMMUN_TRADUIRE_ALT.
'</a>&nbsp;'."\n";
}
else {
if ($menu_traduction_defaut==$adme_menu_id) {
$xhtml_action .= '<img class="'.ADME_CLASS_IMG_ICONE.'" src="'.ADME_IMAGE_TRADUCTION_DEFAUT_AFFICHAGE.'" alt="'.ADME_LG_ACTION_COMMUN_TRADUCTION_DEFAUT_ALT.'" />'.
'&nbsp;'."\n";
}
else {
$url->removeQueryString('adme_action');
$url->addQueryString('adme_action', ADME_LG_ACTION_COMMUN_TRADUCTION_DEFAUT);
$xhtml_action .= '<a href="'.$url->getURL().'" title="'.ADME_LG_ACTION_COMMUN_TRADUCTION_DEFAUT_TITLE.'">'.
'<img class="'.ADME_CLASS_IMG_ICONE.'" src="'.ADME_IMAGE_TRADUCTION_DEFAUT.'" alt="'.ADME_LG_ACTION_COMMUN_TRADUCTION_DEFAUT_ALT.'" />'.
'</a>'.'&nbsp;'."\n";
}
}
$xhtml_traduction='';
// $id_langue = $GLOBALS['_GEN_commun']['i18n'];
$requete_traduction = 'SELECT gmr_id_menu_02, gm_ce_i18n '.
'FROM gen_menu_relation, gen_menu '.
'WHERE '.$adme_menu_id.' = gmr_id_menu_01 ' .
'AND gmr_id_menu_02 = gm_id_menu '.
'AND gmr_id_valeur = 2 ';// 2 = "avoir traduction"
$resultat_traduction = $db->query($requete_traduction);
(DB::isError($resultat_traduction)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_traduction->getMessage(), $requete_traduction))
: '';
if ($resultat_traduction->numRows() > 0 ) {
 
$requete_traduction_defaut = 'SELECT gmr_id_menu_02 '.
'FROM gen_menu_relation '.
'WHERE '.$adme_menu_id.' = gmr_id_menu_01 ' .
'AND gmr_id_valeur = 105 ';// 105 traduction par defaut
$resultat_traduction_defaut = $db->query($requete_traduction_defaut);
(DB::isError($resultat_traduction_defaut)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_traduction->getMessage(), $requete_traduction_defaut))
: '';
if ($resultat_traduction_defaut->numRows() == 0 ) {
$menu_traduction_defaut=0;
$xhtml_action .= '<img class="'.ADME_CLASS_IMG_ICONE.'" src="'.ADME_IMAGE_TRADUCTION_DEFAUT_AFFICHAGE.'" alt="'.ADME_LG_ACTION_COMMUN_TRADUCTION_DEFAUT_ALT.'" />'.
'&nbsp;'."\n";
}
else {
$ligne_traduction_defaut = $resultat_traduction_defaut->fetchRow(DB_FETCHMODE_OBJECT);
$menu_traduction_defaut=$ligne_traduction_defaut->gmr_id_menu_02;
if ($menu_traduction_defaut!=$adme_menu_id) {
$url->removeQueryString('adme_action');
$url->addQueryString('adme_action', ADME_LG_ACTION_COMMUN_TRADUCTION_DEFAUT);
$xhtml_action .= '<a href="'.$url->getURL().'" title="'.ADME_LG_ACTION_COMMUN_TRADUCTION_DEFAUT_TITLE.'">'.
'<img class="'.ADME_CLASS_IMG_ICONE.'" src="'.ADME_IMAGE_TRADUCTION_DEFAUT.'" alt="'.ADME_LG_ACTION_COMMUN_TRADUCTION_DEFAUT_ALT.'" />'.
'</a>'.'&nbsp;'."\n";
}
else {
$xhtml_action .= '<img class="'.ADME_CLASS_IMG_ICONE.'" src="'.ADME_IMAGE_TRADUCTION_DEFAUT_AFFICHAGE.'" alt="'.ADME_LG_ACTION_COMMUN_TRADUCTION_DEFAUT_ALT.'" />'.
'&nbsp;'."\n";
}
}
while ($ligne_resultat = $resultat_traduction->fetchRow(DB_FETCHMODE_OBJECT)) {
$xhtml_traduction.="<br><em>".$ligne_resultat->gm_ce_i18n.":&nbsp;".ADME_retournerXhtmlMenuCommun($db, $url, $adme_site_id, $ligne_resultat->gmr_id_menu_02, 0,true,$menu_traduction_defaut)."</em>";
}
}
//-------------------------------------------------------------------------------------------------------------------
// Envoi du menu.
$retour = $xhtml_pd.$xhtml_info.$xhtml_action.$xhtml_traduction;
return $retour;
}
 
/** Fonction ADME_ajouterMenuCommun() - Ajoute un sous menu commun au menu commun courant
*
* Fonction ajoutant un menu commun à Papyrus.
*
* @param object objet Pear de connection à la base de données.
* @param object objet Pear représentant l'authentification.
* @param integer l'identifiant du site à administrer.
* @param integer l'identifiant du menu à administrer.
* @return void les changement sont fait dans la base de données.
*/
function ADME_ajouterMenuCommun($db, $auth, $adme_site_id, $adme_menu_id)
{
//----------------------------------------------------------------------------
// Récupération d'infos sur le nouveau menu
$objet_site = GEN_lireInfoSitePrincipal($db, $adme_site_id);
if ($objet_site == false) {
die('ERREUR Génésia Administrateur de Menus : '.ADME_LG_ERREUR_INFO_SITE.'<br />'.
'ID du site : '.$adme_site_id.'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br />');
}
$nouveau_id_menu = SQL_obtenirNouveauId($db, 'gen_menu', 'gm_id_menu');
$auteur = $auth->getAuthData('ga_prenom').' '.$auth->getAuthData('ga_nom');
//----------------------------------------------------------------------------
// Ajout du nouveau menu
$requete = 'INSERT INTO gen_menu '.
'SET gm_id_menu = '.$nouveau_id_menu.', '.
'gm_ce_site = 0, '.
'gm_ce_i18n = "'.$objet_site->gs_ce_i18n.'", '.
'gm_ce_application = 0, '.
'gm_code_num = '.$nouveau_id_menu.', '.
'gm_code_alpha = "menu_commun_'.$nouveau_id_menu.'", '.
'gm_nom = "menu_commun_'.$nouveau_id_menu.'", '.
'gm_titre = "menu_commun_'.$nouveau_id_menu.'", '.
'gm_description_resume = "menu_commun_'.$nouveau_id_menu.'", '.
'gm_auteur = "'.$auteur.'", '.
'gm_date_creation = "'.date('Y-m-d H:i:s').'", '.
'gm_date_soumission = "'.date('Y-m-d H:i:s').'", '.
'gm_date_acceptation = "'.date('Y-m-d H:i:s').'", '.
'gm_date_publication = "'.date('Y-m-d H:i:s').'", '.
'gm_date_debut_validite = "'.date('Y-m-d H:i:s').'", '.
'gm_date_fin_validite = "0000-00-00 00:00:00", '.
'gm_date_copyright = "'.date('Y-00-00 00:00:00').'", '.
'gm_categorie = "menu", '.
'gm_ce_admin = '.$auth->getAuthData('ga_id_administrateur').' '
;
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
//----------------------------------------------------------------------------
// Ajout de la relation "père"
if (!isset($adme_menu_id) && empty($adme_menu_id)) {
$adme_menu_id = 0 ;// Identifiant du père
}
//----------------------------------------------------------------------------
// Récupération d'infos sur la hierarchie du menu
$requete = 'SELECT GMR01.gmr_ordre '.
'FROM gen_menu_relation AS GMR01, gen_menu_relation AS GMR02 '.
'WHERE GMR01.gmr_id_menu_02 = '.$adme_menu_id.' '.
'AND GMR01.gmr_id_valeur = 1 '.// 1 = avoir "père"
'AND GMR02.gmr_id_menu_01 = GMR01.gmr_id_menu_01 '.
'AND GMR02.gmr_id_menu_01 = GMR02.gmr_id_menu_02 '.
'AND GMR02.gmr_id_valeur = 102 '.// 102 = menu type "commun"
'ORDER BY GMR01.gmr_ordre DESC';
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
if ($resultat->numRows()>0) {
$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
$nouveau_ordre_menu = $ligne->gmr_ordre + 1;
}
else {
$nouveau_ordre_menu=1;
}
$resultat->free();
$requete = 'INSERT INTO gen_menu_relation '.
'SET gmr_id_menu_02 = '.$adme_menu_id.', '.
'gmr_id_menu_01 = '.$nouveau_id_menu.', '.
'gmr_id_valeur = 1, '.
'gmr_ordre = '.$nouveau_ordre_menu;
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
//----------------------------------------------------------------------------
// Ajout de la relation-type "commun"
// Récupération d'infos sur la hierarchie du menu
$requete = 'SELECT * '.
'FROM gen_menu_relation, gen_menu '.
'WHERE gmr_id_menu_02 = gmr_id_menu_01 '.
'AND gmr_id_valeur = 102 '.// 102 = type "commun"
'AND gmr_id_menu_01 = gm_id_menu '.
'AND gm_ce_site = 0 '.// un menu commun n'a pas de site lié!
'ORDER BY gmr_ordre DESC';
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
if ($resultat->numRows()>0) {
$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
$nouveau_ordre_commun = $ligne->gmr_ordre + 1;
}
else {
$nouveau_ordre_commun = 0;
}
$resultat->free();
$requete = 'INSERT INTO gen_menu_relation '.
'SET gmr_id_menu_01 = '.$nouveau_id_menu.', '.
'gmr_id_menu_02 = '.$nouveau_id_menu.', '.
'gmr_id_valeur = 102, '.
'gmr_ordre = '.$nouveau_ordre_commun;
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
}
 
/** Fonction ADME_afficherFormMenuCommun() - Affiche le formulaire pour un menu commun.
*
* Utilise HTML_QuickForm pour générer le formulaire.
* Ancien nom : showUpper().
*
* @param object objet Pear de connection à la base de données.
* @param object objet Pear représentant l'url de base.
* @param integer l'identifiant du site à administrer.
* @param integer l'identifiant du menu à administrer.
* @param array le tableau associatif des valeurs à afficher dans le formulaire.
* @return string le formulaire XHTML.
*/
function ADME_afficherFormMenuCommun($db, $url, $adme_site_id, $adme_menu_id, $aso_valeurs,$traduction=FALSE)
{
// Initialisation de variable
$url->addQueryString('adme_site_id', $adme_site_id);
$url->addQueryString('adme_menu_id', $adme_menu_id);
// Récupération des informations du menu concerné.
if (!isset($aso_valeurs[ADME_LG_ACTION_COMMUN_VERIFIER]) && !isset($aso_valeurs[ADME_LG_ACTION_COMMUN_VERIFIER_TRADUCTION])) {
$aso_valeurs = GEN_lireInfoMenu($db, $adme_menu_id, DB_FETCHMODE_ASSOC);
if ($aso_valeurs === false) {
die('ERREUR Papyrus Administrateur de Menus : '.ADME_LG_ERREUR_INFO_MENU.'<br />'.
'Idenitifiant du menu n° : '. $adme_menu_id .'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br />');
}
}
 
// Titre de la page
if ($traduction) {
$retour = '<h1>'.ADME_LG_FORM_MENU_COMMUN_TITRE_GENERAL_TRADUCTION.'</h1>'."\n";
}
else {
$retour = '<h1>'.ADME_LG_FORM_MENU_COMMUN_TITRE_GENERAL.'</h1>'."\n";
}
 
$retour .= '<p class="adme_menu_id" >'.ADME_LG_FORM_MENU_ID.'<span id="adme_menu_id">'.$aso_valeurs['gm_id_menu'].'</span></p>'."\n";
// Création du formulaire
// Notes : Quickform semble remplacer les & des &amp; à nouveau par des &amp; solution utiliser str_replace()...
$form =& new HTML_QuickForm('form_menu_commun', 'post', str_replace('&amp;', '&', $url->getUrl()));
$tab_index = 1000;
$squelette =& $form->defaultRenderer();
$squelette->setFormTemplate("\n".'<form{attributes}>'."\n"."\n".'{content}'."\n"."\n".'</form>'."\n");
$squelette->setElementTemplate( '<li>'."\n".
'{label}'."\n".
'{element}'."\n".
'<!-- BEGIN required --><span class="symbole_obligatoire">'.ADME_LG_FORM_SYMBOLE_CHP_OBLIGATOIRE.'</span><!-- END required -->'."\n".
'<!-- BEGIN error --><span class="erreur">{error}</span><!-- END error -->'."\n".
'</li>'."\n");
$squelette->setRequiredNoteTemplate("\n".'<p><span class="symbole_obligatoire">'.ADME_LG_FORM_SYMBOLE_CHP_OBLIGATOIRE.'</span> {requiredNote}</p>'."\n");
$partie_menu_debut = '<fieldset>'."\n".'<legend>'.ADME_LG_FORM_MENU_COMMUN_TITRE_CONFIG.'</legend>'."\n".'<ul>'."\n";
$form->addElement('html', $partie_menu_debut);
$id = 'gm_code_num';
$aso_attributs = array('id'=>$id, 'tabindex' => $tab_index++, 'size' => 5, 'maxlength' => 5);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_CODE_NUM.'</label>';
$form->addElement('text', $id, $label, $aso_attributs);
$form->addRule($id, ADME_LG_FORM_MENU_REGLE_CODE_NUM, 'required', '', 'client');
$id = 'gm_code_alpha';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => 50, 'maxlength' => 50);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_CODE_ALPHA.'</label>';
$form->addElement('text', $id, $label, $aso_attributs);
$form->addRule($id, ADME_LG_FORM_MENU_REGLE_CODE_ALPHA, 'required', '', 'client');
$id = 'gm_nom';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => 50, 'maxlength' => 100);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_NOM.'</label>';
$form->addElement('text', $id, $label, $aso_attributs);
$form->addRule($id, ADME_LG_FORM_MENU_REGLE_NOM, 'required', '', 'client');
$form->applyFilter($id, 'trim');
$id = 'gm_raccourci_clavier';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => 1, 'maxlength' => 1);
$label = '<label for="'.$id.'">'.'Raccourci clavier'.'</label>';
$form->addElement('text', $id, $label, $aso_attributs);
$id = 'gm_fichier_squelette';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => 50, 'maxlength' => 255);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_FICHIER_SQUELETTE.'</label>';
$form->addElement('text', $id, $label, $aso_attributs);
$id = 'gm_description_resume';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'rows' => 2, 'cols' => 50);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_INFO_BULLE.'</label>';
$form->addElement('textarea', $id, $label, $aso_attributs);
$form->addRule($id, ADME_LG_FORM_MENU_REGLE_INFO_BULLE, 'required', '', 'client');
// Requête sur les applications
$requete = 'SELECT gap_id_application, gap_nom '.
'FROM gen_application '.
'WHERE gap_bool_applette = 0 '.
'ORDER BY gap_nom ASC';// Pour éviter d'afficher les applettes.
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
$aso_options = array();
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
$aso_options[$ligne->gap_id_application] = $ligne->gap_nom;
}
$resultat->free();
$id = 'gm_ce_application';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_APPLI.'</label>';
$form->addElement('select', $id, $label, $aso_options, $aso_attributs);
if ($traduction) {
// Recherche liste des menu deja traduits
$requete = 'SELECT distinct gm_ce_i18n '.
'FROM gen_menu_relation, gen_menu '.
'WHERE gmr_id_menu_01 = ' . $adme_menu_id .' '.
'AND gm_id_menu = gmr_id_menu_02 '.
'AND gmr_id_valeur = 2 '; // 2 = "avoir traduction"
$resultat = $db->query($requete) ;
if (DB::isError($resultat)) {
die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
}
$not_in_langue='';
if ( $resultat->numRows() == 0 ) {
$not_in_langue="gi_id_i18n not in('".$aso_valeurs['gm_ce_i18n']."')";
}
else {
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
$not_in_langue="'".$ligne->gm_ce_i18n."'".",".$not_in_langue;
$end="'".$ligne->gm_ce_i18n."'";
}
if ($not_in_langue) {
$not_in_langue="'".$aso_valeurs['gm_ce_i18n']."'".",".$not_in_langue;
$not_in_langue=' gi_id_i18n not in('.$not_in_langue.$end.')';
}
else {
$not_in_langue="gi_id_i18n not in('".$aso_valeurs['gm_ce_i18n']."')";
}
}
$resultat->free();
$requete = "SELECT * FROM gen_i18n where ".$not_in_langue;
/*$requete = 'SELECT * '.
'FROM gen_i18n ';*/
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
$aso_options = array();
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT) ) {
$aso_options[$ligne->gi_id_i18n] = $ligne->gi_id_i18n;
}
$resultat->free();
$id = 'gs_ce_i18n';
$aso_attributs = array('id' => $id, 'tabindex' => $tab_index++);
$label = '<label for="'.$id.'">'.'Langue : '.'</label>';
$form->addElement('select', $id, $label, $aso_options, $aso_attributs);
}
$id = 'gm_application_arguments';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => 45, 'maxlength' => 255);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_APPLI_ARGUMENT.'</label>';
$form->addElement('text', $id, $label, $aso_attributs);
$partie_menu_fin = '</ul>'."\n".'</fieldset>'."\n";
$form->addElement('html', $partie_menu_fin);
$partie_entete_debut = '<fieldset>'."\n".'<legend>'.ADME_LG_FORM_MENU_COMMUN_TITRE_ENTETE.'</legend>'."\n".'<ul>'."\n";
$form->addElement('html', $partie_entete_debut);
$id = 'gm_robot';
$aso_options = array( 'index,follow' => ADME_LG_FORM_MENU_INDEX_FOLLOW,
'index' => ADME_LG_FORM_MENU_INDEX,
'noindex' => ADME_LG_FORM_MENU_NOINDEX,
'noindex,nofollow' => ADME_LG_FORM_MENU_NOINDEX_NOFOLLOW,
'' => ADME_LG_FORM_MENU_INDEX_VIDE);
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_ROBOT.'</label>';
$form->addElement('select', $id, $label, $aso_options, $aso_attributs);
$id = 'gm_titre';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => 45, 'maxlength' => 255);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_TITRE.'</label>';
$form->addElement('text', $id, $label, $aso_attributs);
$id = 'gm_titre_alternatif';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => 45, 'maxlength' => 255);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_TITRE_ALTERNATIF.'</label>';
$form->addElement('text', $id, $label, $aso_attributs);
$id = 'gm_mots_cles';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'rows' => 3, 'cols' => 50);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_MOT_CLE.'</label>';
$form->addElement('textarea', $id, $label, $aso_attributs);
$id = 'gm_description_libre';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'rows' => 3, 'cols' => 45);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_DESCRIPTION.'</label>';
$form->addElement('textarea', $id, $label, $aso_attributs);
$id = 'gm_description_table_matieres';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'rows' => 3, 'cols' => 45);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_TABLE_MATIERE.'</label>';
$form->addElement('textarea', $id, $label, $aso_attributs);
$id = 'gm_source';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => 45, 'maxlength' => 255);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_SOURCE.'</label>';
$form->addElement('text', $id, $label, $aso_attributs);
$id = 'gm_auteur';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => 45, 'maxlength' => 255);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_AUTEUR.'</label>';
$form->addElement('text', $id, $label, $aso_attributs);
$id = 'gm_contributeur';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'rows' => 2, 'cols' => 45);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_CONTRIBUTEUR.'</label>';
$form->addElement('textarea', $id, $label, $aso_attributs);
$id = 'gm_editeur';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => 45, 'maxlength' => 65000);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_EDITEUR.'</label>';
$form->addElement('text', $id, $label, $aso_attributs);
$id = 'gm_date_creation';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => 19, 'maxlength' => 19);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_DATE_CREATION.'</label>';
$form->addElement('text', $id, $label, $aso_attributs);
$id = 'gm_date_debut_validite';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => 19, 'maxlength' => 19);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_DATE_VALIDITE_DEBUT.'</label>';
$form->addElement('text', $id, $label, $aso_attributs);
$id = 'gm_date_fin_validite';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => 19, 'maxlength' => 19);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_DATE_VALIDITE_FIN.'</label>';
$form->addElement('text', $id, $label, $aso_attributs);
$id = 'gm_date_copyright';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => 19, 'maxlength' => 19);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_DATE_COPYRIGHT.'</label>';
$form->addElement('text', $id, $label, $aso_attributs);
$id = 'gm_licence';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => 45, 'maxlength' => 255);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_URL_LICENCE.'</label>';
$form->addElement('text', $id, $label, $aso_attributs);
$id = 'gm_categorie';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => 45, 'maxlength' => 100);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_CATEGORIE.'</label>';
$form->addElement('text', $id, $label, $aso_attributs);
$id = 'gm_public';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => 45, 'maxlength' => 255);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_PUBLIC.'</label>';
$form->addElement('text', $id, $label, $aso_attributs);
$id = 'gm_public_niveau';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => 25, 'maxlength' => 45);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_PUBLIC_NIVEAU.'</label>';
$form->addElement('text', $id, $label, $aso_attributs);
$id = 'gm_ce_type_portee_spatiale';
$aso_options = array( '' => ADME_LG_FORM_MENU_ZG_VIDE,
'iso3166' => ADME_LG_FORM_MENU_ZG_ISO,
'Point' => ADME_LG_FORM_MENU_ZG_POINT,
'Box' => ADME_LG_FORM_MENU_ZG_DC,
'TGN' => ADME_LG_FORM_MENU_ZG_GTGN);
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_ZG_TYPE.'</label>';
$form->addElement('select', $id, $label, $aso_options, $aso_attributs);
$id = 'gm_portee_spatiale';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => 45, 'maxlength' => 100);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_ZG_VALEUR.'</label>';
$form->addElement('text', $id, $label, $aso_attributs);
$id = 'gm_ce_type_portee_temporelle';
$aso_options = array( '' => ADME_LG_FORM_MENU_TMP_VIDE,
'W3CDTF' => ADME_LG_FORM_MENU_TMP_W3C,
'Period' => ADME_LG_FORM_MENU_TMP_DC);
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_TMP_TYPE.'</label>';
$form->addElement('select', $id, $label, $aso_options, $aso_attributs);
$id = 'gm_portee_temporelle';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => 45, 'maxlength' => 100);
$label = '<label for="'.$id.'">'.ADME_LG_FORM_MENU_TMP_VALEUR.'</label>';
$form->addElement('text', $id, $label, $aso_attributs);
$partie_entete_fin = '</ul>'."\n".'</fieldset>'."\n";
$form->addElement('html', $partie_entete_fin);
 
if (!isset($aso_valeurs[ADME_LG_ACTION_COMMUN_VERIFIER]) && !isset($aso_valeurs[ADME_LG_ACTION_COMMUN_VERIFIER_TRADUCTION])) {
// Requete pour connaitre les informations sur l'administrateur ayant fait la dernière modif
$requete_admin = 'SELECT * '.
'FROM gen_annuaire '.
'WHERE ga_id_administrateur = '.$aso_valeurs['gm_ce_admin'];
$resultat_admin = $db->query($requete_admin);
if (DB::isError($resultat_admin)) {
die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_admin->getMessage(), $requete_admin));
}
$ligne_admin = $resultat_admin->fetchRow(DB_FETCHMODE_OBJECT);
$info_admin = '<p class="info">Dernière modification par '.$ligne_admin->ga_prenom.' '.$ligne_admin->ga_nom.'</p>';
$form->addElement('html', $info_admin);
}
$liste_bouton_debut = '<ul class="liste_bouton">'."\n";
$form->addElement('html', $liste_bouton_debut);
if ($traduction) {
$form->addElement('submit', ADME_LG_ACTION_COMMUN_VERIFIER_TRADUCTION, ADME_LG_FORM_MENU_VALIDER);
$form->addElement('hidden', 'adme_site_id', $adme_site_id);
}
else {
$form->addElement('submit', ADME_LG_ACTION_COMMUN_VERIFIER, ADME_LG_FORM_MENU_VALIDER);
}
$bouton_annuler = '<li><a class="bouton" href="'.$url->getURL().'" title="'.ADME_LG_FORM_MENU_ANNULER.'" >'.ADME_LG_FORM_MENU_ANNULER.'</a>'.'</li>'."\n";
$form->addElement('html', $bouton_annuler);
$liste_bouton_fin = '</ul>'."\n";
$form->addElement('html', $liste_bouton_fin);
$form->addElement('hidden', 'gm_id_menu', $aso_valeurs['gm_id_menu']);
$form->setDefaults($aso_valeurs);
// Note de fin de formulaire
$form->setRequiredNote(ADME_LG_FORM_TXT_CHP_OBLIGATOIRE);
$retour .= $form->toHTML()."\n";
return $retour;
}
 
/** Fonction ADME_validerFormAjouterMenuCommun() - Valide les données issues du formulaire pour gen_menu.
*
* Cette fonction valide les données à ajouter dans la table gen_menu.
*
* @param PEAR:DB l'objet pear de connexion à la base de données.
* @param string le tableau contenant les valeurs du formulaire.
* @return string retourne les messages d'erreurs sinon rien.
*/
function ADME_validerFormAjouterMenuCommun($db, $aso_valeurs)
{
$message = '';
if ($aso_valeurs['gm_code_alpha'] == '') {
$message .= '<p class="pap_erreur">'.ADME_LG_FORM_MENU_REGLE_CODE_ALPHA.'</p>';
}
if ($aso_valeurs['gm_code_num'] == '') {
$message .= '<p class="pap_erreur">'.ADME_LG_FORM_MENU_REGLE_CODE_NUM.'</p>';
}
if ($aso_valeurs['gm_nom'] == '') {
$message .= '<p class="pap_erreur">'.ADME_LG_FORM_MENU_REGLE_NOM.'</p>';
}
if ($aso_valeurs['gm_description_resume'] == '') {
$message .= '<p class="pap_erreur">'.ADME_LG_FORM_MENU_REGLE_INFO_BULLE.'</p>';
}
return $message;
}
 
 
/** Fonction ADME_validerFormTraduireMenuCommun() - Valide les données issues du formulaire de traduction de menu
*
* Cette fonction valide les données à ajouter dans la table gen_menu.
*
* @param PEAR::DB l'objet pear de connexion à la base de données.
* @param string le tableau contenant les valeurs du formulaire.
* @return string retourne les messages d'erreurs sinon rien.
*/
function ADME_validerFormTraduireMenuCommun($db, $aso_valeurs)
{
$message = '';
if ($aso_valeurs['gm_code_alpha'] == '') {
$message .= '<p class="pap_erreur">'.ADME_LG_FORM_MENU_REGLE_CODE_ALPHA.'</p>';
}
if ($aso_valeurs['gm_code_num'] == '') {
$message .= '<p class="pap_erreur">'.ADME_LG_FORM_MENU_REGLE_CODE_NUM.'</p>';
}
if ($aso_valeurs['gm_nom'] == '') {
$message .= '<p class="pap_erreur">'.ADME_LG_FORM_MENU_REGLE_NOM.'</p>';
}
if ($aso_valeurs['gm_description_resume'] == '') {
$message .= '<p class="pap_erreur">'.ADME_LG_FORM_MENU_REGLE_INFO_BULLE.'</p>';
}
return $message;
}
 
 
/** Fonction ADME_modifierMenuCommun() - Met à jour les infos d'un menu commun
*
* Fonction modifiant un menu commun à Papyrus.
*
* @param object objet Pear de connection à la base de données.
* @param object objet Pear représentant l'authentification.
* @param integer l'identifiant du menu à administrer.
* @param array le tableau des valeurs à modifier.
* @return void les changement sont fait dans la base de données.
*/
function ADME_modifierMenuCommun($db, $auth, $adme_menu_id, $aso_valeurs)
{
$requete = 'UPDATE gen_menu SET '.
'gm_ce_application = '.$aso_valeurs['gm_ce_application'].', '.
'gm_application_arguments = "'.$aso_valeurs['gm_application_arguments'].'", '.
'gm_fichier_squelette = "'.$aso_valeurs['gm_fichier_squelette'].'", '.
'gm_code_num = '.$aso_valeurs['gm_code_num'].', '.
'gm_code_alpha = "'.$aso_valeurs['gm_code_alpha'].'", '.
'gm_nom = "'.$aso_valeurs['gm_nom'].'", '.
'gm_raccourci_clavier = "'.$aso_valeurs['gm_raccourci_clavier'].'", '.
'gm_robot = "'.$aso_valeurs['gm_robot'].'", '.
'gm_titre = "'.$aso_valeurs['gm_titre'].'", '.
'gm_titre_alternatif = "'.$aso_valeurs['gm_titre_alternatif'].'", '.
'gm_mots_cles = "'.$aso_valeurs['gm_mots_cles'].'", '.
'gm_description_libre = "'.$aso_valeurs['gm_description_libre'].'", '.
'gm_description_resume = "'.$aso_valeurs['gm_description_resume'].'", '.
'gm_description_table_matieres = "'.$aso_valeurs['gm_description_table_matieres'].'", '.
'gm_source = "'.$aso_valeurs['gm_source'].'", '.
'gm_auteur = "'.$aso_valeurs['gm_auteur'].'", '.
'gm_contributeur = "'.$aso_valeurs['gm_contributeur'].'", '.
'gm_editeur = "'.$aso_valeurs['gm_editeur'].'", '.
'gm_date_creation = "'.$aso_valeurs['gm_date_creation'].'", '.
'gm_date_debut_validite = "'.$aso_valeurs['gm_date_debut_validite'].'", '.
'gm_date_fin_validite = "'.$aso_valeurs['gm_date_fin_validite'].'", '.
'gm_date_copyright = "'.$aso_valeurs['gm_date_copyright'].'", '.
'gm_licence = "'.$aso_valeurs['gm_licence'].'", '.
'gm_categorie = "'.$aso_valeurs['gm_categorie'].'", '.
'gm_public = "'.$aso_valeurs['gm_public'].'", '.
'gm_public_niveau = "'.$aso_valeurs['gm_public_niveau'].'", '.
'gm_portee_spatiale = "'.$aso_valeurs['gm_portee_spatiale'].'", '.
'gm_portee_temporelle = "'.$aso_valeurs['gm_portee_temporelle'].'", '.
'gm_ce_admin = "'.$auth->getAuthData('ga_id_administrateur').'" '.
'WHERE gm_id_menu = '.$adme_menu_id;
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
}
 
/** Fonction ADME_deplacerMenuCommun() - Permet de déplacer un menu dans la hiérarchie.
*
* Permet de déplacer un menu dans la hiérarchie des menus communs.
* Ancien nom : moveUpper()
*
* @param PEAR::DB objet Pear DB de connexion à la base de données.
* @param integer identifiant du site administré.
* @param integer identifiant du menu à déplacer.
* @param boolean indique si on veut monter le menu (true) ou le descendre (false).
* @return void modifie la base de données.
*/
function ADME_deplacerMenuCommun($db, $adme_site_id, $adme_menu_id, $bln_monter)
{
//-------------------------------------------------------------------------------------------------------------------
// Récupération d'informations sur les relations du menu courant.
$ligne_menu_courant_relation = GEN_lireInfoMenuRelation($db, $adme_menu_id, '1'); // 1 = relation "avoir père"
if ($ligne_menu_courant_relation == false) {
die('ERREUR Papyrus Administrateur de Menus : '.ADME_LG_ERREUR_INFO_MENU_RELATION.'<br />'.
'Identifiant menu : '. $adme_menu_id .'<br />'.
'Identifiant valeur relation : 1 <br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br />');
}
$id_pere = GEN_lireIdentifiantMenuPere($adme_menu_id);
if ($id_pere === false) {
die('ERREUR Papyrus Administrateur de Menus : '.ADME_LG_ERREUR_ID_MENU_PERE.'<br />'.
'Identifiant menu fils : '. $adme_menu_id .'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br />');
}
//-------------------------------------------------------------------------------------------------------------------
// Recherche d'information hiérarchiques sur le menu précédent ou suivant le menu courant
$requete = 'SELECT GMR01.gmr_ordre AS nouvel_ordre, GMR01.gmr_id_menu_01 AS id_menu_remplace '.
'FROM gen_menu, gen_menu_relation AS GMR01, gen_menu_relation AS GMR02 '.
'WHERE GMR02.gmr_id_menu_01 = GMR01.gmr_id_menu_01 '.
'AND GMR01.gmr_id_menu_01 = gm_id_menu './/jonction avec la table GEN_MENU
'AND gm_ce_site = 0 '.// les menus communs ne sont pas liés à un site!
'AND GMR02.gmr_id_valeur = 102 '.// 102 = menu type "commun"
'AND GMR01.gmr_id_menu_02 = '.$id_pere.' '.
'AND GMR01.gmr_id_valeur = 1 ';// 1 = relation menu "père"
if ($bln_monter) {
$requete .= 'AND GMR01.gmr_ordre < '.$ligne_menu_courant_relation->gmr_ordre.' '.
'ORDER BY GMR01.gmr_ordre DESC';
} else {
$requete .= 'AND GMR01.gmr_ordre > '.$ligne_menu_courant_relation->gmr_ordre.' '.
'ORDER BY GMR01.gmr_ordre ASC';
}
$resultat_menu = $db->query($requete);
(DB::isError($resultat_menu)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_menu->getMessage(), $requete)) : '';
$ligne_menu = $resultat_menu->fetchRow(DB_FETCHMODE_OBJECT);
$resultat_menu->free();
//-------------------------------------------------------------------------------------------------------------------
// Si la requete ne retourne rien nous ne faisons rien.
if (! $ligne_menu) {
return null;
}
//-------------------------------------------------------------------------------------------------------------------
// Mise à jour des relations hiérarchiques du menu courant
$requete = 'UPDATE gen_menu_relation SET '.
'gmr_ordre = '.$ligne_menu->nouvel_ordre.' '.
'WHERE gmr_id_menu_01 = '.$ligne_menu_courant_relation->gmr_id_menu_01.' '.
'AND gmr_id_valeur = 1';// 1 = relation menu "père"
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
//-------------------------------------------------------------------------------------------------------------------
// Mise à jour des relations hiérarchiques du menu précédent ou suivant
$requete = 'UPDATE gen_menu_relation SET '.
'gmr_ordre = '.$ligne_menu_courant_relation->gmr_ordre.' '.
'WHERE gmr_id_menu_01 = '.$ligne_menu->id_menu_remplace.' '.
'AND gmr_id_valeur = 1';// 1 = relation menu "père"
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
}
 
/** Fonction ADME_traduireMenuCommun() - Permet de traduire un menu commin
*
* Permet de traduire un menu commun
*
* @param mixed objet Pear DB de connexion à la base de données.
* @param integer identifiant du site administré.
* @param integer identifiant du menu à déplacer.
* @return void modifie la base de données.
*/
function ADME_traduireMenuCommun($db, $auth, $adme_menu_id, $aso_valeurs) {
 
// Récupération d'infos sur le site principal.
$objet_site = GEN_lireInfoSitePrincipal($db, $aso_valeurs['adme_site_id']);
if ($objet_site == false) {
die('ERREUR Génésia Administrateur de Menus : impossible de lire les infos du site.<br />'.
'ID du site : '.$aso_valeurs['adme_site_id'].'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br />');
}
$nouveau_id_menu = SQL_obtenirNouveauId($db, 'gen_menu', 'gm_id_menu');
$auteur = $auth->getAuthData('ga_prenom').' '.$auth->getAuthData('ga_nom');
$requete = 'INSERT INTO gen_menu '.
'SET gm_id_menu = '.$nouveau_id_menu.', '.
'gm_ce_site = '.$aso_valeurs['adme_site_id'].', '.
'gm_ce_i18n = "'.$aso_valeurs['gs_ce_i18n'].'", '.
'gm_ce_application = '.$aso_valeurs['gm_ce_application'].', '.
'gm_application_arguments = "'.$aso_valeurs['gm_application_arguments'].'", '.
'gm_fichier_squelette = "'.$aso_valeurs['gm_fichier_squelette'].'", '.
'gm_code_num = '.$aso_valeurs['gm_code_num'].', '.
'gm_code_alpha = "'.$aso_valeurs['gm_code_alpha'].'", '.
'gm_nom = "'.$aso_valeurs['gm_nom'].'", '.
'gm_raccourci_clavier = "'.$aso_valeurs['gm_raccourci_clavier'].'", '.
'gm_robot = "'.$aso_valeurs['gm_robot'].'", '.
'gm_titre = "'.$aso_valeurs['gm_titre'].'", '.
'gm_titre_alternatif = "'.$aso_valeurs['gm_titre_alternatif'].'", '.
'gm_mots_cles = "'.$aso_valeurs['gm_mots_cles'].'", '.
'gm_description_libre = "'.$aso_valeurs['gm_description_libre'].'", '.
'gm_description_resume = "'.$aso_valeurs['gm_description_resume'].'", '.
'gm_description_table_matieres = "'.$aso_valeurs['gm_description_table_matieres'].'", '.
'gm_source = "'.$aso_valeurs['gm_source'].'", '.
'gm_auteur = "'.$aso_valeurs['gm_auteur'].'", '.
'gm_contributeur = "'.$aso_valeurs['gm_contributeur'].'", '.
'gm_editeur = "'.$aso_valeurs['gm_editeur'].'", '.
'gm_date_creation = "'.$aso_valeurs['gm_date_creation'].'", '.
'gm_date_debut_validite = "'.$aso_valeurs['gm_date_debut_validite'].'", '.
'gm_date_fin_validite = "'.$aso_valeurs['gm_date_fin_validite'].'", '.
'gm_date_copyright = "'.$aso_valeurs['gm_date_copyright'].'", '.
'gm_licence = "'.$aso_valeurs['gm_licence'].'", '.
'gm_categorie = "'.$aso_valeurs['gm_categorie'].'", '.
'gm_public = "'.$aso_valeurs['gm_public'].'", '.
'gm_public_niveau = "'.$aso_valeurs['gm_public_niveau'].'", '.
'gm_ce_type_portee_spatiale = "'.$aso_valeurs['gm_ce_type_portee_spatiale'].'", '.
'gm_portee_spatiale = "'.$aso_valeurs['gm_portee_spatiale'].'", '.
'gm_ce_type_portee_temporelle = "'.$aso_valeurs['gm_ce_type_portee_temporelle'].'", '.
'gm_portee_temporelle = "'.$aso_valeurs['gm_portee_temporelle'].'", '.
'gm_ce_admin = "'.$auth->getAuthData('ga_id_administrateur').'" ';
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
//----------------------------------------------------------------------------
// Ajout de la relation traduction
if (!isset($adme_menu_id) && empty($adme_menu_id)) {
$adme_menu_id = 0 ;// Identifiant du père
}
//----------------------------------------------------------------------------
// Récupération d'infos sur la hierarchie du menu
$requete = 'SELECT GMR01.gmr_ordre '.
'FROM gen_menu_relation AS GMR01, gen_menu_relation AS GMR02 '.
'WHERE GMR01.gmr_id_menu_02 = '.$adme_menu_id.' '.
'AND GMR01.gmr_id_valeur = 1 '.// 1 = avoir "père"
'AND GMR02.gmr_id_menu_01 = GMR01.gmr_id_menu_01 '.
'AND GMR02.gmr_id_menu_01 = GMR02.gmr_id_menu_02 '.
'AND GMR02.gmr_id_valeur = 102 '.// 102 = menu type "commun"
'ORDER BY GMR01.gmr_ordre DESC';
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
$nouveau_ordre_menu = $ligne->gmr_ordre + 1;
$resultat->free();
// Traduction :
$requete = 'INSERT INTO gen_menu_relation '.
'SET gmr_id_menu_01 = '.$adme_menu_id.', '.
'gmr_id_menu_02 = '.$nouveau_id_menu.', '.
'gmr_id_valeur = 2, '. // Avoir traduction
'gmr_ordre = '.$nouveau_ordre_menu;
 
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
//----------------------------------------------------------------------------
// Ajout de la relation-type "menu commun"
// Récupération d'infos sur la hierarchie du menu
$requete = 'SELECT * '.
'FROM gen_menu_relation, gen_menu '.
'WHERE gmr_id_menu_02 = gmr_id_menu_01 '.
'AND gmr_id_valeur = 102 '.// 102 = type menu "commun"
'AND gmr_id_menu_01 = gm_id_menu '.
'AND gm_ce_site = '.$aso_valeurs['adme_site_id'].' '.
'ORDER BY gmr_ordre DESC';
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
$nouveau_ordre_menu_commun = $ligne->gmr_ordre + 1;
$resultat->free();
$requete = 'INSERT INTO gen_menu_relation '.
'SET gmr_id_menu_01 = '.$nouveau_id_menu.', '.
'gmr_id_menu_02 = '.$nouveau_id_menu.', '.
'gmr_id_valeur = 102, '.
'gmr_ordre = '.$nouveau_ordre_menu_commun;
$result = $db->query($requete);
(DB::isError($result)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $result->getMessage(), $requete)) : '';
}
 
 
function ADME_indenterMenuCommun($db, $adme_site_id, $adme_menu_id, $bln_diminuer) {
 
//-------------------------------------------------------------------------------------------------------------------
// Récupération d'information sur le site de ce menu.
$objet_site = GEN_lireInfoSitePrincipal($db, $adme_site_id);
if ($objet_site == false) {
die('ERREUR Papyrus Administrateur de Menus : '.ADME_LG_ERREUR_INFO_SITE.'<br />'.
'Id du site : '. $adme_site_id .'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br />');
}
//-------------------------------------------------------------------------------------------------------------------
// Récupération d'informations sur les relations du menu courant.
$ligne_menu_courant_relation = GEN_lireInfoMenuRelation($db, $adme_menu_id, '1');
if ($ligne_menu_courant_relation == false) {
die('ERREUR Papyrus Administrateur de Menus : '.ADME_LG_ERREUR_INFO_MENU_RELATION.'<br />'.
'Identifiant menu : '. $adme_menu_id .'<br />'.
'Identifiant valeur relation : 1 <br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br />');
}
//-------------------------------------------------------------------------------------------------------------------
// Récupération de l'identifiant du menu pére
$id_pere = GEN_lireIdentifiantMenuPere($adme_menu_id);
if ($id_pere === false) {
die('ERREUR Papyrus Administrateur de Menus : '.ADME_LG_ERREUR_ID_MENU_PERE.'<br />'.
'Identifiant menu fils : '. $adme_menu_id .'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br />');
}
if ($bln_diminuer) {
// Diminution d'un niveau
if ($id_pere) {
// Récupération de l'identifiant du menu grand pére, sera le nouveau pere
$id_grand_pere = GEN_lireIdentifiantMenuPere($id_pere);
if ($id_grand_pere === false) {
die('ERREUR Papyrus Administrateur de Menus : '.ADME_LG_ERREUR_ID_MENU_PERE.'<br />'.
'Identifiant menu fils : '. $adme_menu_id .'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br />');
}
// Récupération d'informations sur les relations du menu pere
$ligne_menu_pere_relation = GEN_lireInfoMenuRelation($db, $id_pere, '1');
if ($ligne_menu_pere_relation == false) {
die('ERREUR Papyrus Administrateur de Menus : '.ADME_LG_ERREUR_INFO_MENU_RELATION.'<br />'.
'Identifiant menu : '. $adme_menu_id .'<br />'.
'Identifiant valeur relation : 1 <br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br />');
}
//-------------------------------------------------------------------------------------------------------------------
// Recherche d'information sur le menu suivant le menu pere
//-------------------------------------------------------------------------------------------------------------------
$requete = 'SELECT GMR01.gmr_ordre AS nouvel_ordre, GMR01.gmr_id_menu_01 AS id_menu_remplace '.
'FROM gen_menu, gen_menu_relation AS GMR01, gen_menu_relation AS GMR02 '.
'WHERE GMR02.gmr_id_menu_01 = GMR01.gmr_id_menu_01 '.
'AND GMR01.gmr_id_menu_01 = gm_id_menu './/jonction avec la table GEN_MENU
'AND gm_ce_site = 0 '.// les menus communs ne sont pas liés à un site!
'AND GMR02.gmr_id_valeur = 102 '.// 102 = menu type "commun""
'AND GMR01.gmr_id_menu_02 = '.$id_grand_pere.' '.
'AND GMR01.gmr_id_valeur = 1 '.// 1 = relation menu "père"
'AND GMR01.gmr_ordre > '.$ligne_menu_pere_relation->gmr_ordre.' '.
'ORDER BY GMR01.gmr_ordre DESC';
$resultat_menu = $db->query($requete);
(DB::isError($resultat_menu)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_menu->getMessage(), $requete)) : '';
$ligne_menu = $resultat_menu->fetchRow(DB_FETCHMODE_OBJECT);
$resultat_menu->free();
//-------------------------------------------------------------------------------------------------------------------
// Si la requete ne retourne rien nous ne faisons rien.
if (! $ligne_menu) {
$no=$ligne_menu_pere_relation->gmr_ordre+1;
}
else {
$no=$ligne_menu->nouvel_ordre+1;
}
// Mise à jour pere menu courant
$requete = 'UPDATE gen_menu_relation SET '.
'gmr_id_menu_02 = '.$id_grand_pere.' ,'.
'gmr_ordre = '.$no.' '.
'WHERE gmr_id_menu_01 = '.$ligne_menu_courant_relation->gmr_id_menu_01.' '.
'AND gmr_id_valeur = 1';// 1 = relation menu "père"
$resultat_update = $db->query($requete);
(DB::isError($resultat_update)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_update->getMessage(), $requete)) : '';
}
}
else {
 
$requete = 'SELECT GMR01.gmr_id_menu_01 '.
'FROM gen_menu, gen_menu_relation AS GMR01, gen_menu_relation AS GMR02 '.
'WHERE GMR02.gmr_id_menu_01 = GMR01.gmr_id_menu_01 '.
'AND GMR01.gmr_id_menu_01 = gm_id_menu './/jonction avec la table GEN_MENU
'AND gm_ce_site = 0 '.// les menus communs ne sont pas liés à un site!
'AND GMR02.gmr_id_valeur = 102 '.// 102 = menu type "commun"
'AND GMR01.gmr_id_menu_02 = '.$id_pere.' '.
'AND GMR01.gmr_id_valeur = 1 '.// 1 = relation menu "père"
'AND GMR01.gmr_ordre < '.$ligne_menu_courant_relation->gmr_ordre.' '.
'ORDER BY GMR01.gmr_ordre DESC';
$resultat_menu = $db->query($requete);
(DB::isError($resultat_menu)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_menu->getMessage(), $requete)) : '';
 
$ligne_menu = $resultat_menu->fetchRow(DB_FETCHMODE_OBJECT);
$resultat_menu->free();
//-------------------------------------------------------------------------------------------------------------------
// Si la requete ne retourne rien nous ne faisons rien.
if (! $ligne_menu) {
return null;
}
//----------------------------------------------------------------------------
// Recherche dernier fils
$requete = 'SELECT GMR01.gmr_ordre '.
'FROM gen_menu_relation AS GMR01, gen_menu_relation AS GMR02 '.
'WHERE GMR01.gmr_id_menu_02 = '.$ligne_menu->gmr_id_menu_01.' '.
'AND GMR01.gmr_id_valeur = 1 '.// 1 = avoir "père"
'AND GMR02.gmr_id_menu_01 = GMR01.gmr_id_menu_01 '.
'AND GMR02.gmr_id_menu_01 = GMR02.gmr_id_menu_02 '.
'AND GMR02.gmr_id_valeur = 102 '.// 102 = menu type "commun"
'ORDER BY GMR01.gmr_ordre DESC';
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
 
$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
$no = $ligne->gmr_ordre + 1;
$resultat->free();
 
// Mise à jour pere menu courant
$requete = 'UPDATE gen_menu_relation SET '.
'gmr_id_menu_02 = '.$ligne_menu->gmr_id_menu_01.' ,'.
'gmr_ordre = '.$no.' '.
'WHERE gmr_id_menu_01 = '.$ligne_menu_courant_relation->gmr_id_menu_01.' '.
'AND gmr_id_valeur = 1';// 1 = relation menu "père"
$resultat_update = $db->query($requete);
(DB::isError($resultat_update)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_update->getMessage(), $requete)) : '';
 
}
}
 
 
 
/** Fonction ADME_supprimerMenuCommun() - Supprime un menu commun.
*
* Supprime de la base de données de Génésia toutes les traces du menu commun
* passé en paramètre.
* Ancien nom : deleteUpper()
*
* @param PEAR::DB l'objet Pear DB de connexion à la base de données.
* @param integer l'identifiant du menu à supprimer
* @return void le menu commun est supprimé de la base de données.
*/
function ADME_supprimerMenuCommun($db, $id_menu_a_supprimer)
{
$code_menu = GEN_lireInfoMenu($db, $id_menu_a_supprimer, DB_FETCHMODE_ASSOC);
//-------------------------------------------------------------------------------------------------------------------
// Y a t'il des sous_menus ?
$requete = 'SELECT COUNT(gm_id_menu) AS compte '.
'FROM gen_menu, gen_menu_relation '.
'WHERE gmr_id_menu_02 = '.$id_menu_a_supprimer.' '.
'AND gmr_id_valeur = 1 '.
'AND gmr_id_menu_01 = gm_id_menu ';
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
if ($ligne && ($ligne->compte > 0)) {
return ADME_LG_ERREUR_EXISTE_SOUS_MENU;
}
//-------------------------------------------------------------------------------------------------------------------
// Mise à jour de l'ordre des menus
$ligne_menu_supr_relation = GEN_lireInfoMenuRelation($db, $id_menu_a_supprimer, '1'); // 1 = relation "avoir père"
$requete = 'SELECT GMR01.gmr_id_menu_01, GMR01.gmr_ordre '.
'FROM gen_menu, gen_menu_relation AS GMR01, gen_menu_relation AS GMR02 '.
'WHERE GMR02.gmr_id_menu_01 = GMR01.gmr_id_menu_01 '.
'AND GMR01.gmr_id_menu_01 = gm_id_menu './/jonction avec la table GEN_MENU
'AND gm_ce_site = 0 '.// les menus communs ne sont pas liés à un site!
'AND GMR02.gmr_id_valeur = 102 '.// 102 = menu type "commun"
'AND GMR01.gmr_id_menu_02 = '.$ligne_menu_supr_relation->gmr_id_menu_02.' '.
'AND GMR01.gmr_id_valeur = 1 '.// 1 = relation menu "père"
'AND GMR01.gmr_ordre > '.$ligne_menu_supr_relation->gmr_ordre.' '.
'ORDER BY GMR01.gmr_ordre ASC';
$resultat = $db->query($requete);
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
// Mise à jour des relations hiérarchiques du menu courant
$requete_maj = 'UPDATE gen_menu_relation SET '.
'gmr_ordre = '.($ligne->gmr_ordre - 1).' '.
'WHERE gmr_id_menu_01 = '.$ligne->gmr_id_menu_01.' '.
'AND gmr_id_valeur = 1';// 1 = relation menu "père"
$resultat_maj = $db->query($requete_maj);
(DB::isError($resultat_maj)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_maj->getMessage(), $requete_maj)) : '';
}
$resultat->free();
//-------------------------------------------------------------------------------------------------------------------
// S'il n'y a plus de sous niveau, on supprime le menu
$requete = 'DELETE FROM gen_menu '.
'WHERE gm_id_menu = '.$id_menu_a_supprimer;
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
//-------------------------------------------------------------------------------------------------------------------
// Puis on supprime les relations de ce menu
$requete = 'DELETE FROM gen_menu_relation '.
'WHERE gmr_id_menu_01 = '.$id_menu_a_supprimer;
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
// Suppression du contenu !!!!
$requete = 'DELETE FROM gen_menu_contenu '.
'WHERE gmc_ce_menu = '.$id_menu_a_supprimer.' ';
 
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
}
 
 
/** Fonction ADME_supprimerMenuCommunTraduction() - Supprime une traduction de menu commun.
*
* Supprime de la base de données de Papyrus toutes les traces du menu commun
* passé en paramètre.
* Ancien nom : deleteMenu()
*
* @param mixed l'objet Pear DB de connexion à la base de données.
* @param integer l'identifiant du site du menu à supprimer
* @param integer l'identifiant du menu à supprimer
* @return void le menu commun est supprimé de la base de données.
*/
function ADME_supprimerMenuCommunTraduction($db, $adme_id_site, $id_menu_a_supprimer)
{
$code_menu = GEN_lireInfoMenu($db, $id_menu_a_supprimer, DB_FETCHMODE_ASSOC);
if ($code_menu === false) {
die('ERREUR Papyrus Administrateur de Menus : '.ADME_LG_ERREUR_INFO_MENU.'<br />'.
'Idenitifiant du menu n° : '. $id_menu_a_supprimer .'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br />');
}
$requete = 'DELETE FROM gen_menu '.
'WHERE gm_id_menu = '.$id_menu_a_supprimer;
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
//----------------------------------------------------------------------------
// Puis on supprime les relations de ce menu
$requete = 'DELETE FROM gen_menu_relation '.
'WHERE gmr_id_menu_01 = '.$id_menu_a_supprimer;
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
//----------------------------------------------------------------------------
// Puis on supprime les relations de ce menu
$requete = 'DELETE FROM gen_menu_relation '.
'WHERE gmr_id_menu_02 = '.$id_menu_a_supprimer;
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
// Suppression du contenu !!!!
$requete = 'DELETE FROM gen_menu_contenu '.
'WHERE gmc_ce_menu = '.$id_menu_a_supprimer.' ';
 
 
 
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
}
 
 
/** Fonction ADME_selectionnerMenuCommunTraduction()() Selection un menu classique comme traduction par defaut
*
*
* @param mixed l'objet Pear DB de connexion à la base de données.
* @param integer l'identifiant du site du menu à supprimer
* @param integer l'identifiant du menu à supprimer
* @return void le menu classique est supprimé de la base de données.
*/
function ADME_selectionnerMenuCommunTraduction($db, $adme_id_site, $id_menu)
{
// 1 : Rechercher traduction parente : si presente on est dans une traduc. si absente on
// est dans un menu traduit.
$requete_origine_traduction = 'SELECT gmr_id_menu_01 '.
'FROM gen_menu_relation, gen_menu '.
'WHERE gmr_id_menu_02 = ' . $id_menu .' '.
'AND gmr_id_valeur = 2 '; // 2 = "avoir traduction"
$resultat_origine_traduction = $db->query($requete_origine_traduction) ;
if (DB::isError($resultat_origine_traduction)) {
die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_origine_traduction->getMessage(), $requete_origine_traduction) );
}
if ($resultat_origine_traduction->numRows() > 0) {
$ligne_origine_traduction = $resultat_origine_traduction->fetchRow(DB_FETCHMODE_OBJECT);
$id_menu_origine=$ligne_origine_traduction->gmr_id_menu_01;
}
else {
$id_menu_origine=$id_menu;
}
 
$requete_suppression = 'DELETE from gen_menu_relation '.
'WHERE gmr_id_menu_01 = ' . $id_menu_origine . ' ' .
'AND gmr_id_valeur=105 '; // 105 Traduction par defaut
 
$resultat_suppression = $db->query($requete_suppression);
(DB::isError($resultat_suppression)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_suppression->getMessage(), $requete_suppression)) : '';
 
$requete_insertion = 'INSERT into gen_menu_relation '.
' SET gmr_id_menu_01 = ' . $id_menu_origine . ', ' .
' gmr_id_menu_02 = ' . $id_menu . ', ' .
' gmr_id_valeur = 105' ;
 
$resultat_insertion = $db->query($requete_insertion);
(DB::isError($resultat_insertion)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_insertion->getMessage(), $requete_insertion)) : '';
 
}
 
 
// +------------------------------------------------------------------------------------------------------+
// | PIED du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.26 2006/10/06 13:38:45 florian
* ergonomie amélioree
*
* Revision 1.25 2006/09/20 12:09:16 ddelon
* bug suppression contenu du menu commun
*
* Revision 1.24 2006/09/07 13:45:56 jp_milcent
* Trie par ordre alphabétique des appli.
*
* Revision 1.23 2006/06/29 23:04:01 ddelon
* Bug defaut traduction sur menu commun
*
* Revision 1.22 2006/06/29 19:13:26 ddelon
* Bug defaut traduction sur menu commun
*
* Revision 1.21 2006/06/29 18:58:57 ddelon
* Multilinguisme : menu par defaut pour les menu commun
*
* Revision 1.20 2006/04/12 21:11:54 ddelon
* Multilinguisme menus communs
*
* Revision 1.19 2005/09/27 08:42:49 ddelon
* Menu et Squelette
*
* Revision 1.18 2005/07/18 16:14:32 ddelon
* css admin + menu communs
*
* Revision 1.17 2005/07/08 22:01:25 ddelon
* Copyright
*
* Revision 1.16 2005/05/26 16:13:08 jpm
* Correction taille éditeur: passage en text
*
* Revision 1.14 2005/05/26 15:34:46 jpm
* Ajout d'un espace.
*
* Revision 1.13 2005/05/26 08:54:20 jpm
* Ajout info admin ayant fait la dernière modif.
*
* Revision 1.12 2005/04/19 16:47:16 jpm
* Gestion des dates de fin de validité des menus.
*
* Revision 1.11 2005/03/29 15:49:12 jpm
* Ajout de la date de création dans le formulaire des menus.
*
* Revision 1.10 2005/02/28 11:05:06 jpm
* Modification des auteurs.
*
* Revision 1.9 2005/01/24 11:28:09 jpm
* Correction bogue.
* Ajout d'un troisième = pour comparer le type.
*
* Revision 1.8 2004/12/01 16:47:28 jpm
* Ajout d'une boite javascript de confirmation de suppression d'un menu.
*
* Revision 1.7 2004/11/15 16:51:12 jpm
* Correction bogue de mise à jour de l'ordre des menus.
*
* Revision 1.6 2004/11/10 17:26:07 jpm
* Fin gestion de la traduction.
*
* Revision 1.5 2004/11/09 17:48:35 jpm
* Gestion de différentes interfaces d'administration.
*
* Revision 1.3 2004/09/23 17:45:13 jpm
* Amélioration de la gestion des liens annuler et du selecteur de sites.
*
* Revision 1.2 2004/07/06 17:07:37 jpm
* Modification de la documentation pour une mailleur analyse par PhpDocumentor.
*
* Revision 1.1 2004/06/16 15:04:32 jpm
* Changement de nom de Génésia en Papyrus.
* Changement de l'arborescence.
*
* Revision 1.10 2004/05/10 12:13:03 jpm
* Modification des formulaires.
*
* Revision 1.9 2004/05/07 16:31:40 jpm
* Amélioration du formulaire d'un menu commun.
*
* Revision 1.8 2004/05/07 09:56:52 jpm
* Correction des noms de constantes d'images.
*
* Revision 1.7 2004/05/07 07:23:54 jpm
* Amélioration du code, des commentaires et correction de bogues.
*
* Revision 1.6 2004/05/04 16:27:55 jpm
* Amélioration gestion du déplacement des menus.
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/applications/admin_menu/langues/adme_langue_en.inc.php
New file
0,0 → 1,265
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// Copyright (C) 1999-2004 Tela Botanica (accueil@tela-botanica.org)
//
// Ce logiciel est un programme informatique servant à gérer du contenu et des
// applications web.
// Ce logiciel est régi par la licence CeCILL soumise au droit français et
// respectant les principes de diffusion des logiciels libres. Vous pouvez
// utiliser, modifier et/ou redistribuer ce programme sous les conditions
// de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA
// sur le site "http://www.cecill.info".
 
// En contrepartie de l'accessibilité au code source et des droits de copie,
// de modification et de redistribution accordés par cette licence, il n'est
// offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons,
// seule une responsabilité restreinte pèse sur l'auteur du programme, le
// titulaire des droits patrimoniaux et les concédants successifs.
 
// A cet égard l'attention de l'utilisateur est attirée sur les risques
// associés au chargement, à l'utilisation, à la modification et/ou au
// développement et à la reproduction du logiciel par l'utilisateur étant
// donné sa spécificité de logiciel libre, qui peut le rendre complexe à
// manipuler et qui le réserve donc à des développeurs et des professionnels
// avertis possédant des connaissances informatiques approfondies. Les
// utilisateurs sont donc invités à charger et tester l'adéquation du
// logiciel à leurs besoins dans des conditions permettant d'assurer la
// sécurité de leurs systèmes et ou de leurs données et, plus généralement,
// à l'utiliser et l'exploiter dans les mêmes conditions de sécurité.
 
// Le fait que vous puissiez accéder à cet en-tête signifie que vous avez
// pris connaissance de la licence CeCILL, et que vous en avez accepté les
// termes.
// ----
// CVS : $Id: adme_langue_en.inc.php,v 1.1 2006-04-12 21:11:54 ddelon Exp $
/**
* Gestion des langues de l'application ADME
*
* Contient les constantes pour la langue française de l'application ADME.
*
*@package Admin_menu
*@subpackage Langues
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author Aucun
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.1 $ $Date: 2006-04-12 21:11:54 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTETE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
 
// +------------------------------------------------------------------------------------------------------+
// | CORPS du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
// Le formulaire de sélection du site dont les menus doivent être administrer :
define('ADME_LG_FORM_SITE_TITRE', 'List of the websites');
define('ADME_LG_FORM_SITE_CHOIX', 'Choice the site to administrate : ');
define('ADME_LG_FORM_SITE_VALIDER', 'OK');
 
// Les titres de l'arborescence des menus à administrer:
define('ADME_LG_MENU_TITRE', 'Configuration of the menus of the website:');
define('ADME_LG_MENU_CLASSIQUE_RACINE', 'Add a classical menu');
define('ADME_LG_MENU_COMMUN_RACINE', 'Add a common menu');
 
// Les actions des menus classiques:
define('ADME_LG_ACTION_CLASSIQUE_MODIFIER', 'classical_menu_modify');
define('ADME_LG_ACTION_CLASSIQUE_MODIFIER_ALT', 'Modify');
define('ADME_LG_ACTION_CLASSIQUE_MODIFIER_TITLE', 'Modify this menu');
 
define('ADME_LG_ACTION_CLASSIQUE_MONTER', 'menu_classique_go_up');
define('ADME_LG_ACTION_CLASSIQUE_MONTER_ALT', 'UP');
define('ADME_LG_ACTION_CLASSIQUE_MONTER_TITLE', 'Go up this menu');
 
define('ADME_LG_ACTION_CLASSIQUE_DESCENDRE', 'classical_menu_down');
define('ADME_LG_ACTION_CLASSIQUE_DESCENDRE_ALT', 'Down');
define('ADME_LG_ACTION_CLASSIQUE_DESCENDRE_TITLE', 'Down this menu');
 
define('ADME_LG_ACTION_CLASSIQUE_DIMINUER', 'menu_classical_decrease');
define('ADME_LG_ACTION_CLASSIQUE_DIMINUER_ALT', 'Decrease');
define('ADME_LG_ACTION_CLASSIQUE_DIMINUER_TITLE', 'Decrease of one level this menu');
 
define('ADME_LG_ACTION_CLASSIQUE_AUGMENTER', 'menu_classical_increase');
define('ADME_LG_ACTION_CLASSIQUE_AUGMENTER_ALT', 'Increase');
define('ADME_LG_ACTION_CLASSIQUE_AUGMENTER_TITLE', 'Increase of one level this menu');
 
define('ADME_LG_ACTION_CLASSIQUE_TRADUIRE', 'menu_classical_translate');
define('ADME_LG_ACTION_CLASSIQUE_TRADUIRE_ACTION', 'menu_classical_translate_action');
define('ADME_LG_ACTION_CLASSIQUE_TRADUIRE_ALT', 'Translate');
define('ADME_LG_ACTION_CLASSIQUE_TRADUIRE_TITLE', 'Translate this menu');
 
define('ADME_LG_ACTION_CLASSIQUE_SUPPRIMER', 'classical_menu_remove');
define('ADME_LG_ACTION_CLASSIQUE_SUPPRIMER_ALT', 'Remove');
define('ADME_LG_ACTION_CLASSIQUE_SUPPRIMER_TITLE', 'Remove this menu');
 
define('ADME_LG_ACTION_CLASSIQUE_AJOUTER', 'classical_menu_add');
define('ADME_LG_ACTION_CLASSIQUE_AJOUTER_ALT', 'Add');
define('ADME_LG_ACTION_CLASSIQUE_AJOUTER_TITLE', 'Add this menu');
 
define('ADME_LG_ACTION_CLASSIQUE_VERIFIER', 'classical_menu_check');
 
// Les actions des menus communs:
define('ADME_LG_ACTION_COMMUN_MODIFIER', 'common_menu_modify');
define('ADME_LG_ACTION_COMMUN_MODIFIER_ALT', 'Modify');
define('ADME_LG_ACTION_COMMUN_MODIFIER_TITLE', 'Modify this menu');
 
define('ADME_LG_ACTION_COMMUN_MONTER', 'common_menu_up');
define('ADME_LG_ACTION_COMMUN_MONTER_ALT', 'UP');
define('ADME_LG_ACTION_COMMUN_MONTER_TITLE', 'Up this menu');
 
define('ADME_LG_ACTION_COMMUN_DESCENDRE', 'common_menu_down');
define('ADME_LG_ACTION_COMMUN_DESCENDRE_ALT', 'Down');
define('ADME_LG_ACTION_COMMUN_DESCENDRE_TITLE', 'Down this menu');
 
define('ADME_LG_ACTION_COMMUN_DIMINUER', 'common_menu_decrease');
define('ADME_LG_ACTION_COMMUN_DIMINUER_ALT', 'Decrease');
define('ADME_LG_ACTION_COMMUN_DIMINUER_TITLE', 'Decrease of one level this menu');
 
define('ADME_LG_ACTION_COMMUN_AUGMENTER', 'common_menu_increase');
define('ADME_LG_ACTION_COMMUN_AUGMENTER_ALT', 'Increase');
define('ADME_LG_ACTION_COMMUN_AUGMENTER_TITLE', 'Increase of one level this');
 
define('ADME_LG_ACTION_COMMUN_TRADUIRE', 'commun_menu_translate');
define('ADME_LG_ACTION_COMMUN_TRADUIRE_ACTION', 'commun_menu_translate_action');
define('ADME_LG_ACTION_COMMUN_TRADUIRE_ALT', 'Translate');
define('ADME_LG_ACTION_COMMUN_TRADUIRE_TITLE', 'Translate thid menu');
 
define('ADME_LG_ACTION_COMMUN_SUPPRIMER', 'common_menu_remove');
define('ADME_LG_ACTION_COMMUN_SUPPRIMER_ALT', 'Remove');
define('ADME_LG_ACTION_COMMUN_SUPPRIMER_TITLE', 'Remove this menu');
 
define('ADME_LG_ACTION_COMMUN_AJOUTER', 'common_menu_add');
define('ADME_LG_ACTION_COMMUN_AJOUTER_ALT', 'Add');
define('ADME_LG_ACTION_COMMUN_AJOUTER_TITLE', 'Add this menu');
 
define('ADME_LG_ACTION_COMMUN_VERIFIER', 'common_menu_check');
 
// Les actions générales:
define('ADME_LG_ACTION_ADMINISTRER', 'Manage');
define('ADME_LG_ACTION_ADMINISTRER_ALT', 'Manage');
define('ADME_LG_ACTION_ADMINISTRER_TITLE', 'Manage the application of this menu');
 
define('ADME_LG_ACTION_PLIER', 'adme_menu_close');
define('ADME_LG_ACTION_PLIER_ALT', 'Fold');
 
define('ADME_LG_ACTION_DEPLIER', 'adme_menu_open');
define('ADME_LG_ACTION_DEPLIER_ALT', 'Unfold');
 
define('ADME_LG_ACTION_SUPPRIMER_CONFIRMATION', 'Are you sure to want to remove this menu?');
 
// Les erreurs:
define('ADME_LG_ERREUR_INFO_MENU', 'impossible to read the informations of the menu.');
define('ADME_LG_ERREUR_INFO_SITE', 'impossible to read the informations of the website.');
define('ADME_LG_ERREUR_INFO_MENU_RELATION', 'impossible to read the informations about the relations of the menu.');
define('ADME_LG_ERREUR_ID_MENU_PERE', 'impossible to read identifying of the menu father.');
define('ADME_LG_ERREUR_CODE_NUM', "The value %s for the \"code nuérique\" yet exists");
define('ADME_LG_ERREUR_CODE_ALPHA', "The value %s for the \"Code alphanumérique\" yet exist");
define('ADME_LG_ERREUR_EXISTE_SOUS_MENU', 'This menu includes under-menues. Please, begin to remove them.');
 
// Le formulaire de modification d'un menu :
define('ADME_LG_FORM_MENU_CLASSIQUE_TITRE_GENERAL', 'Mofify menu');
define('ADME_LG_FORM_MENU_COMMUN_TITRE_GENERAL', 'Modify common menu');
 
define('ADME_LG_FORM_MENU_CLASSIQUE_TITRE_CONFIG', 'Menu config');
define('ADME_LG_FORM_MENU_COMMUN_TITRE_CONFIG', 'Common menu confgig');
define('ADME_LG_FORM_MENU_ID', 'Identifier of this menu : ');
define('ADME_LG_FORM_MENU_CODE_NUM', 'Numeric code of this menu');
define('ADME_LG_FORM_MENU_REGLE_CODE_NUM', ' a numeric digital code is necessary for the menu !');
define('ADME_LG_FORM_MENU_CODE_ALPHA', 'Code alphanumérique of the menu');
define('ADME_LG_FORM_MENU_REGLE_CODE_ALPHA', 'An alphanumeric code is necessary for the menu!');
define('ADME_LG_FORM_MENU_NOM', 'Name of the menu');
define('ADME_LG_FORM_MENU_REGLE_NOM', 'a name is necessary for the menu !');
define('ADME_LG_FORM_MENU_RACCOURCI', ' Shortened clavier');
define('ADME_LG_FORM_MENU_DEFAUT', 'Making the menu by défaut');
define('ADME_LG_FORM_MENU_FICHIER_SQUELETTE', ' File squelette');
define('ADME_LG_FORM_MENU_INFO_BULLE', ' Contained information-bulle');
define('ADME_LG_FORM_MENU_REGLE_INFO_BULLE', ' a short description for the information-bubble is necessary for this menu!');
define('ADME_LG_FORM_MENU_APPLI', 'Application');
define('ADME_LG_FORM_MENU_APPLI_ARGUMENT', 'Application arguments');
 
define('ADME_LG_FORM_MENU_CLASSIQUE_TITRE_ENTETE', ' Heading of the pages of the menu');
define('ADME_LG_FORM_MENU_COMMUN_TITRE_ENTETE', ' Heading of the pages of the common menu');
define('ADME_LG_FORM_MENU_ROBOT', ' Indexing by robots');
define('ADME_LG_FORM_MENU_INDEX_FOLLOW', 'Indexeing this page and next');
define('ADME_LG_FORM_MENU_INDEX', 'Indexing only this page');
define('ADME_LG_FORM_MENU_NOINDEX_NOFOLLOW', 'Do notindexing this page and next pages');
define('ADME_LG_FORM_MENU_NOINDEX', 'Do not indexing this page');
define('ADME_LG_FORM_MENU_INDEX_VIDE', 'None');
define('ADME_LG_FORM_MENU_TITRE', 'Title of the page');
define('ADME_LG_FORM_MENU_TITRE_ALTERNATIF', 'Alternative tittle for the page');
define('ADME_LG_FORM_MENU_MOT_CLE', 'key-words');
define('ADME_LG_FORM_MENU_DESCRIPTION', ' Description of the content');
define('ADME_LG_FORM_MENU_TABLE_MATIERE', 'Contents');
define('ADME_LG_FORM_MENU_SOURCE', 'Source');
define('ADME_LG_FORM_MENU_AUTEUR', 'Author');
define('ADME_LG_FORM_MENU_CONTRIBUTEUR', 'Contributor');
define('ADME_LG_FORM_MENU_EDITEUR', 'Éditor');
define('ADME_LG_FORM_MENU_DATE_CREATION', 'Creation date');
define('ADME_LG_FORM_MENU_DATE_VALIDITE_DEBUT', 'Go back to beginning of validity');
define('ADME_LG_FORM_MENU_DATE_VALIDITE_FIN', 'Completion date of validity');
define('ADME_LG_FORM_MENU_DATE_COPYRIGHT', 'Year for the copyright');
define('ADME_LG_FORM_MENU_URL_LICENCE', 'URL of the licence');
define('ADME_LG_FORM_MENU_CATEGORIE', 'Catégory');
define('ADME_LG_FORM_MENU_PUBLIC', 'Public for the page');
define('ADME_LG_FORM_MENU_PUBLIC_NIVEAU', 'level of public for this page');
define('ADME_LG_FORM_MENU_ZG_TYPE', 'Type of space range');
define('ADME_LG_FORM_MENU_ZG_VALEUR', 'Space range of the page');
define('ADME_LG_FORM_MENU_ZG_VIDE', 'None');
define('ADME_LG_FORM_MENU_ZG_ISO', 'Code of the country on two letters(iso3166)');
define('ADME_LG_FORM_MENU_ZG_DC', ' Representation of the geographical areas of Dublin Core');
define('ADME_LG_FORM_MENU_ZG_POINT', 'Géographique point');
define('ADME_LG_FORM_MENU_ZG_GTGN', 'Noms issus du Getty Thesaurus of Geographic Names');
define('ADME_LG_FORM_MENU_TMP_TYPE', ' Standard of range temporal');
define('ADME_LG_FORM_MENU_TMP_VALEUR', ' Temporal dimension of the page');
define('ADME_LG_FORM_MENU_TMP_VIDE', 'None');
define('ADME_LG_FORM_MENU_TMP_W3C', ' Coding of the dates and hours of the W3C');
define('ADME_LG_FORM_MENU_TMP_DC', ' Representation of the intervals of time of Dublin Core');
 
define('ADME_LG_FORM_MENU_VALIDER', 'Record');
define('ADME_LG_FORM_MENU_ANNULER', 'Cancel');
define('ADME_LG_FORM_TXT_CHP_OBLIGATOIRE', ' Indicates the fields obligatoires');
define('ADME_LG_FORM_SYMBOLE_CHP_OBLIGATOIRE', '*');
 
// Charactère spéciaux:
define('ADME_LG_PARENTHESE_OUVRANTE', '(');
define('ADME_LG_PARENTHESE_FERMANTE', ')');
define('ADME_LG_SLASH', '/');
// +------------------------------------------------------------------------------------------------------+
// | PIED du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.7 2005/07/18 16:14:32 ddelon
* css admin + menu communs
*
* Revision 1.6 2005/07/08 21:13:15 ddelon
* Gestion indentation menu
*
* Revision 1.5 2005/05/26 15:45:09 jpm
* Ajout d'une majuscule accentuée.
*
* Revision 1.4 2005/03/29 15:49:31 jpm
* Ajout de la constante pour la date de création dans le formulaire des menus.
*
* Revision 1.3 2004/12/01 16:47:07 jpm
* Ajout d'un texte pour la boite javascript de confirmation de suppression de menu.
*
* Revision 1.2 2004/11/10 17:26:12 jpm
* Fin gestion de la traduction.
*
* Revision 1.1 2004/11/10 11:58:31 jpm
* Début de la traduction de l'appli.
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/applications/admin_menu/langues/adme_langue_es.inc.php
New file
0,0 → 1,291
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// Copyright (C) 1999-2004 Tela Botanica (accueil@tela-botanica.org)
//
// Ce logiciel est un programme informatique servant à gérer du contenu et des
// applications web.
// Ce logiciel est régi par la licence CeCILL soumise au droit français et
// respectant les principes de diffusion des logiciels libres. Vous pouvez
// utiliser, modifier et/ou redistribuer ce programme sous les conditions
// de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA
// sur le site "http://www.cecill.info".
 
// En contrepartie de l'accessibilité au code source et des droits de copie,
// de modification et de redistribution accordés par cette licence, il n'est
// offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons,
// seule une responsabilité restreinte pèse sur l'auteur du programme, le
// titulaire des droits patrimoniaux et les concédants successifs.
 
// A cet égard l'attention de l'utilisateur est attirée sur les risques
// associés au chargement, à l'utilisation, à la modification et/ou au
// développement et à la reproduction du logiciel par l'utilisateur étant
// donné sa spécificité de logiciel libre, qui peut le rendre complexe à
// manipuler et qui le réserve donc à des développeurs et des professionnels
// avertis possédant des connaissances informatiques approfondies. Les
// utilisateurs sont donc invités à charger et tester l'adéquation du
// logiciel à leurs besoins dans des conditions permettant d'assurer la
// sécurité de leurs systèmes et ou de leurs données et, plus généralement,
// à l'utiliser et l'exploiter dans les mêmes conditions de sécurité.
 
// Le fait que vous puissiez accéder à cet en-tête signifie que vous avez
// pris connaissance de la licence CeCILL, et que vous en avez accepté les
// termes.
// ----
// CVS : $Id: adme_langue_es.inc.php,v 1.3 2006-09-27 10:02:08 alexandre_tb Exp $
/**
* Gestion des langues de l'application ADME
*
* Contient les constantes pour la langue française de l'application ADME.
*
*@package Admin_menú
*@subpackage Langues
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author Aucun
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.3 $ $Date: 2006-09-27 10:02:08 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTETE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
 
// +------------------------------------------------------------------------------------------------------+
// | CORPS du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
// Le formulaire de sélection du site dont les menús doivent être administrer :
define('ADME_LG_FORM_SITE_TITRE', 'Lista de los Web site');
define('ADME_LG_FORM_SITE_CHOIX', 'Opcióna el sitio a administrar: ');
define('ADME_LG_FORM_SITE_VALIDER', 'OK');
 
// Les titres de l'arborescence des menús à administrer:
define('ADME_LG_MENU_TITRE', 'Configuración de los menús del Web site:');
define('ADME_LG_MENU_CLASSIQUE_RACINE', 'agregue un menú clásico ');
define('ADME_LG_MENU_COMMUN_RACINE', 'agregue un menú comuno');
 
// Les actions des menús classiques:
define('ADME_LG_ACTION_CLASSIQUE_MODIFIER', 'classico_menú_modicar');
define('ADME_LG_ACTION_CLASSIQUE_MODIFIER_ALT', 'Modificar');
define('ADME_LG_ACTION_CLASSIQUE_MODIFIER_TITLE', 'Modificar estemenú');
define('ADME_LG_ACTION_CLASSIQUE_MODIFIER_ACTION', 'menu_classique_modifier_action');
 
 
define('ADME_LG_ACTION_CLASSIQUE_MONTER', 'menú_classico_subir');
define('ADME_LG_ACTION_CLASSIQUE_MONTER_ALT', 'Subir');
define('ADME_LG_ACTION_CLASSIQUE_MONTER_TITLE', 'Subir este menú');
 
define('ADME_LG_ACTION_CLASSIQUE_DESCENDRE', 'classico_menú_bajar');
define('ADME_LG_ACTION_CLASSIQUE_DESCENDRE_ALT', 'Bajar');
define('ADME_LG_ACTION_CLASSIQUE_DESCENDRE_TITLE', 'Najar este menú');
 
define('ADME_LG_ACTION_CLASSIQUE_DIMINUER', 'menú_classico_disminuir');
define('ADME_LG_ACTION_CLASSIQUE_DIMINUER_ALT', 'Disminuir');
define('ADME_LG_ACTION_CLASSIQUE_DIMINUER_TITLE', 'Disminuir de un nivel este menú');
 
define('ADME_LG_ACTION_CLASSIQUE_AUGMENTER', 'menú_classico_aumentar');
define('ADME_LG_ACTION_CLASSIQUE_AUGMENTER_ALT', 'Aumentar');
define('ADME_LG_ACTION_CLASSIQUE_AUGMENTER_TITLE', 'Aumentar de un nivel este menú');
define('ADME_LG_ACTION_CLASSIQUE_TRADUIRE', 'menu_classique_traduire');
define('ADME_LG_ACTION_CLASSIQUE_TRADUIRE_ACTION', 'menu_classique_traduire_action');
define('ADME_LG_ACTION_CLASSIQUE_TRADUIRE_ALT', 'Traduire');
define('ADME_LG_ACTION_CLASSIQUE_TRADUIRE_TITLE', 'Traduire ce menu');
 
define('ADME_LG_ACTION_CLASSIQUE_SUPPRIMER', 'classico_menú_quite');
define('ADME_LG_ACTION_CLASSIQUE_SUPPRIMER_ALT', 'Quite');
define('ADME_LG_ACTION_CLASSIQUE_SUPPRIMER_TITLE', 'Quite este menú');
 
define('ADME_LG_ACTION_CLASSIQUE_SUPPRIMER_TRADUCTION', 'menu_classique_supprimer_traduction');
define('ADME_LG_ACTION_CLASSIQUE_SUPPRIMER_TRADUCTION_ALT', 'Supprimer');
define('ADME_LG_ACTION_CLASSIQUE_SUPPRIMER_TRADUCTION_TITLE', 'Supprimer ce menu');
 
define('ADME_LG_ACTION_CLASSIQUE_AJOUTER', 'classico_menú_agrege');
define('ADME_LG_ACTION_CLASSIQUE_AJOUTER_ALT', 'Agrege');
define('ADME_LG_ACTION_CLASSIQUE_AJOUTER_TITLE', 'Agrege este menú');
 
define('ADME_LG_ACTION_CLASSIQUE_VERIFIER', 'classico_menú_verificar');
define('ADME_LG_ACTION_CLASSIQUE_VERIFIER_TRADUCTION', 'menu_classique_verifier_traduction');
 
define('ADME_LG_ACTION_CLASSIQUE_TRADUCTION_DEFAUT', 'menu_classique_traduction_defaut');
define('ADME_LG_ACTION_CLASSIQUE_TRADUCTION_DEFAUT_ALT', 'Choisir ce menu comme traduction par défaut');
define('ADME_LG_ACTION_CLASSIQUE_TRADUCTION_DEFAUT_TITLE', 'Choisir ce menu comme traduction par défaut');
 
// Les actions des menús communs:
define('ADME_LG_ACTION_COMMUN_MODIFIER', 'común_menú_modificar');
define('ADME_LG_ACTION_COMMUN_MODIFIER_ALT', 'Modificar');
define('ADME_LG_ACTION_COMMUN_MODIFIER_TITLE', 'Modificar este menú');
define('ADME_LG_ACTION_COMMUN_MODIFIER_ACTION', 'menu_commun_modifier_action');
 
define('ADME_LG_ACTION_COMMUN_TRADUCTION_DEFAUT', 'menu_classique_traduction_defaut');
define('ADME_LG_ACTION_COMMUN_TRADUCTION_DEFAUT_ALT', 'Choisir ce menu comme traduction par défaut');
define('ADME_LG_ACTION_COMMUN_TRADUCTION_DEFAUT_TITLE', 'Choisir ce menu comme traduction par défaut');
 
define('ADME_LG_ACTION_COMMUN_MONTER', 'común_menú_subir');
define('ADME_LG_ACTION_COMMUN_MONTER_ALT', 'Subir');
define('ADME_LG_ACTION_COMMUN_MONTER_TITLE', 'Subir este menú');
 
define('ADME_LG_ACTION_COMMUN_DESCENDRE', 'común_menú_bajar');
define('ADME_LG_ACTION_COMMUN_DESCENDRE_ALT', 'Bajar');
define('ADME_LG_ACTION_COMMUN_DESCENDRE_TITLE', 'Bajar este menú');
 
define('ADME_LG_ACTION_COMMUN_DIMINUER', 'común_menú_disminuir');
define('ADME_LG_ACTION_COMMUN_DIMINUER_ALT', 'Disminuir');
define('ADME_LG_ACTION_COMMUN_DIMINUER_TITLE', 'Disminuir de un nivel este menú');
 
define('ADME_LG_ACTION_COMMUN_AUGMENTER', 'común_menú_aumentar');
define('ADME_LG_ACTION_COMMUN_AUGMENTER_ALT', 'Aumentar');
define('ADME_LG_ACTION_COMMUN_AUGMENTER_TITLE', 'Aumentar de un nivel este menú');
 
define('ADME_LG_ACTION_COMMUN_TRADUIRE', 'menu_commun_traduire');
define('ADME_LG_ACTION_COMMUN_TRADUIRE_ACTION', 'menu_commun_traduire_action');
define('ADME_LG_ACTION_COMMUN_TRADUIRE_ALT', 'Traduire');
define('ADME_LG_ACTION_COMMUN_TRADUIRE_TITLE', 'Traduire ce menu');
 
define('ADME_LG_ACTION_COMMUN_SUPPRIMER', 'común_menú_suprimir');
define('ADME_LG_ACTION_COMMUN_SUPPRIMER_ALT', 'Suprimir');
define('ADME_LG_ACTION_COMMUN_SUPPRIMER_TITLE', 'Suprimir este menú');
 
define('ADME_LG_ACTION_COMMUN_SUPPRIMER_TRADUCTION', 'menu_commun_supprimer_traduction');
define('ADME_LG_ACTION_COMMUN_SUPPRIMER_TRADUCTION_ALT', 'Supprimer');
define('ADME_LG_ACTION_COMMUN_SUPPRIMER_TRADUCTION_TITLE', 'Supprimer ce menu');
 
define('ADME_LG_ACTION_COMMUN_AJOUTER', 'común_menú_añadir');
define('ADME_LG_ACTION_COMMUN_AJOUTER_ALT', 'añadir');
define('ADME_LG_ACTION_COMMUN_AJOUTER_TITLE', 'añadir este menú');
 
define('ADME_LG_ACTION_COMMUN_VERIFIER', 'común_menú_verificar');
define ('ADME_LG_ACTION_COMMUN_VERIFIER_TRADUCTION','menu_commun_verifier_traduction');
 
// Les actions générales:
define('ADME_LG_ACTION_ADMINISTRER', 'Administrar');
define('ADME_LG_ACTION_ADMINISTRER_ALT', 'Administrar');
define('ADME_LG_ACTION_ADMINISTRER_TITLE', 'Administrar la aplicacion de este menú');
 
define('ADME_LG_ACTION_PLIER', 'adme_menú_doblar');
define('ADME_LG_ACTION_PLIER_ALT', 'doblar');
 
define('ADME_LG_ACTION_DEPLIER', 'adme_menú_abrir');
define('ADME_LG_ACTION_DEPLIER_ALT', ' brir');
 
define('ADME_LG_ACTION_SUPPRIMER_CONFIRMATION', 'es usted seguro desear quitar este menú?');
 
// Les erreurs:
define('ADME_LG_ERREUR_INFO_menú', 'imposible leer las informaciones del menú.');
define('ADME_LG_ERREUR_INFO_SITE', 'imposible leer las informaciones del website');
define('ADME_LG_ERREUR_INFO_menú_RELATION', 'imposible leer las informaciones sobre las relaciones del menú.');
define('ADME_LG_ERREUR_ID_menú_PERE', ' imposible leer identificar del padre del menú.');
define('ADME_LG_ERREUR_CODE_NUM', "El valor %s por el \"code nuérique\" ja exista&");
define('ADME_LG_ERREUR_CODE_ALPHA', "El valor %s por el \"Code alphanumérique\" ja exista");
define('ADME_LG_ERREUR_EXISTE_SOUS_menú', 'Este menú incluye debajo de -menúes. Por favor, comience a quitarlos.');
 
// Le formulaire de modification d'un menú :
define('ADME_LG_FORM_MENU_CLASSIQUE_TITRE_GENERAL', 'Moficar menú');
define('ADME_LG_FORM_MENU_COMMUN_TITRE_GENERAL', 'Modicar común menú');
 
define('ADME_LG_FORM_MENU_CLASSIQUE_TITRE_CONFIG', 'menú config');
define('ADME_LG_FORM_MENU_COMMUN_TITRE_CONFIG', 'común menú configurar');
define('ADME_LG_FORM_MENU_ID', 'Identificador de este menú: ');
define('ADME_LG_FORM_MENU_CODE_NUM', 'Codico Numerico de este menú');
define('ADME_LG_FORM_MENU_REGLE_CODE_NUM', 'un código digital numérico es necesario para el menú!');
define('ADME_LG_FORM_MENU_CODE_ALPHA', 'Codico alphanumérique del menú');
define('ADME_LG_FORM_MENU_REGLE_CODE_ALPHA', 'un código alfanumérico es necesario para el menú!');
define('ADME_LG_FORM_MENU_NOM', 'Nombre de el menú');
define('ADME_LG_FORM_MENU_REGLE_NOM', 'un nombre esta necesario por el menú !');
define('ADME_LG_FORM_MENU_RACCOURCI', 'clavier acortada ');
define('ADME_LG_FORM_MENU_DEFAUT', 'haciendo el menú por el défaut ');
define('ADME_LG_FORM_MENU_FICHIER_SQUELETTE', ' squelette del archivo ');
define('ADME_LG_FORM_MENU_INFO_BULLE', 'informacion-bulle contenida ');
define('ADME_LG_FORM_MENU_REGLE_INFO_BULLE', ' una descripción corta para la informacion-burbuja es necesaria para este menú!');
define('ADME_LG_FORM_MENU_APPLI', 'Applicacion');
define('ADME_LG_FORM_MENU_APPLI_ARGUMENT', 'Application argumentes');
 
define('ADME_LG_FORM_MENU_CLASSIQUE_TITRE_ENTETE', ' título de las páginas del menú ');
define('ADME_LG_FORM_MENU_COMMUN_TITRE_ENTETE', ' título de las páginas del menú comun ');
define('ADME_LG_FORM_MENU_ROBOT', ' Indesar los robotes') ;
define('ADME_LG_FORM_MENU_INDEX_FOLLOW', ' poniendo en un índice esta página y después ');
define('ADME_LG_FORM_MENU_INDEX', ' poniendo en un índice solo en esta página ');
define('ADME_LG_FORM_MENU_NOINDEX_NOFOLLOW', ' No poner en un índice esta página y después ');
define('ADME_LG_FORM_MENU_NOINDEX', 'No poner en un índice esta página ');
define('ADME_LG_FORM_MENU_INDEX_VIDE', 'vide');
define('ADME_LG_FORM_MENU_TITRE', ' título de la página ');
define('ADME_LG_FORM_MENU_TITRE_ALTERNATIF', ' título alternativo de la página ');
define('ADME_LG_FORM_MENU_MOT_CLE', 'palabras lavves');
define('ADME_LG_FORM_MENU_DESCRIPTION', ' Descripción del contenido ');
define('ADME_LG_FORM_MENU_TABLE_MATIERE', ' contenido');
define('ADME_LG_FORM_MENU_SOURCE', ' fuente ');
define('ADME_LG_FORM_MENU_AUTEUR', 'Autor');
define('ADME_LG_FORM_MENU_CONTRIBUTEUR', 'Contributor');
define('ADME_LG_FORM_MENU_EDITEUR', 'Éditor');
define('ADME_LG_FORM_MENU_DATE_CREATION', ' fecha de creación ');
define('ADME_LG_FORM_MENU_DATE_VALIDITE_DEBUT', ' vaya de nuevo al principio de la validez ');
define('ADME_LG_FORM_MENU_DATE_VALIDITE_FIN', ' fecha de la terminación de la validez ');
define('ADME_LG_FORM_MENU_DATE_COPYRIGHT', 'año del copyright');
define('ADME_LG_FORM_MENU_URL_LICENCE', ' URL de la licencia ');
define('ADME_LG_FORM_MENU_CATEGORIE', 'Catégoria');
define('ADME_LG_FORM_MENU_PUBLIC', 'Publico por esta pagina');
define('ADME_LG_FORM_MENU_PUBLIC_NIVEAU', ' nivel del público para esta página ');
define('ADME_LG_FORM_MENU_ZG_TYPE', ' tipo de gama del espacio ');
define('ADME_LG_FORM_MENU_ZG_VALEUR', ' espacie la gama de la página ');
define('ADME_LG_FORM_MENU_ZG_VIDE', ' ningunos ');
define('ADME_LG_FORM_MENU_ZG_ISO', ' código del país en dos letras(iso3166)');
define('ADME_LG_FORM_MENU_ZG_DC', ' Representación de las áreas geográficas de Dublin Core');
define('ADME_LG_FORM_MENU_ZG_POINT', 'Punto géografico');
define('ADME_LG_FORM_MENU_ZG_GTGN', ' nombra el issus du Getty Thesaurus de los nombres geográficos');
define('ADME_LG_FORM_MENU_TMP_TYPE', ' Estándar de la gama temporal ');
define('ADME_LG_FORM_MENU_TMP_VALEUR', ' dimensión temporal de la página ');
define('ADME_LG_FORM_MENU_TMP_VIDE', 'Ningunos');
define('ADME_LG_FORM_MENU_TMP_W3C', ' Codificación de las fechas y de las horas del W3C');
define('ADME_LG_FORM_MENU_TMP_DC', ' Representación de los intervalos de la época de la base de Dublín');
 
define('ADME_LG_FORM_MENU_VALIDER', 'Registrar');
define('ADME_LG_FORM_MENU_ANNULER', ' cancelación ');
define('ADME_LG_FORM_TXT_CHP_OBLIGATOIRE', ' indica los obligatories de los campos');
define('ADME_LG_FORM_SYMBOLE_CHP_OBLIGATOIRE', '*');
 
// Charactère spéciaux:
define('ADME_LG_PARENTHESE_OUVRANTE', '(');
define('ADME_LG_PARENTHESE_FERMANTE', ')');
define('ADME_LG_SLASH', '/');
// +------------------------------------------------------------------------------------------------------+
// | PIED du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.2 2006/09/27 09:20:28 alexandre_tb
* Ajout de constante de traduction
*
* Revision 1.1 2006/04/12 21:11:54 ddelon
* Multilinguisme menus communs
*
* Revision 1.7 2005/07/18 16:14:32 ddelon
* css admin + menú communs
*
* Revision 1.6 2005/07/08 21:13:15 ddelon
* Gestion indentation menú
*
* Revision 1.5 2005/05/26 15:45:09 jpm
* Ajout d'une majuscule accentuée.
*
* Revision 1.4 2005/03/29 15:49:31 jpm
* Ajout de la constante pour la date de création dans le formulaire des menús.
*
* Revision 1.3 2004/12/01 16:47:07 jpm
* Ajout d'un texte pour la boite javascript de confirmation de suppression de menú.
*
* Revision 1.2 2004/11/10 17:26:12 jpm
* Fin gestion de la traduction.
*
* Revision 1.1 2004/11/10 11:58:31 jpm
* Début de la traduction de l'appli.
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/applications/admin_menu/langues/adme_langue_fr.inc.php
New file
0,0 → 1,320
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// Copyright (C) 1999-2004 Tela Botanica (accueil@tela-botanica.org)
//
// Ce logiciel est un programme informatique servant à gérer du contenu et des
// applications web.
// Ce logiciel est régi par la licence CeCILL soumise au droit français et
// respectant les principes de diffusion des logiciels libres. Vous pouvez
// utiliser, modifier et/ou redistribuer ce programme sous les conditions
// de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA
// sur le site "http://www.cecill.info".
 
// En contrepartie de l'accessibilité au code source et des droits de copie,
// de modification et de redistribution accordés par cette licence, il n'est
// offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons,
// seule une responsabilité restreinte pèse sur l'auteur du programme, le
// titulaire des droits patrimoniaux et les concédants successifs.
 
// A cet égard l'attention de l'utilisateur est attirée sur les risques
// associés au chargement, à l'utilisation, à la modification et/ou au
// développement et à la reproduction du logiciel par l'utilisateur étant
// donné sa spécificité de logiciel libre, qui peut le rendre complexe à
// manipuler et qui le réserve donc à des développeurs et des professionnels
// avertis possédant des connaissances informatiques approfondies. Les
// utilisateurs sont donc invités à charger et tester l'adéquation du
// logiciel à leurs besoins dans des conditions permettant d'assurer la
// sécurité de leurs systèmes et ou de leurs données et, plus généralement,
// à l'utiliser et l'exploiter dans les mêmes conditions de sécurité.
 
// Le fait que vous puissiez accéder à cet en-tête signifie que vous avez
// pris connaissance de la licence CeCILL, et que vous en avez accepté les
// termes.
// ----
// CVS : $Id: adme_langue_fr.inc.php,v 1.16 2006-10-06 10:40:51 florian Exp $
/**
* Gestion des langues de l'application ADME
*
* Contient les constantes pour la langue française de l'application ADME.
*
*@package Admin_menu
*@subpackage Langues
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author Aucun
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.16 $ $Date: 2006-10-06 10:40:51 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTETE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
 
// +------------------------------------------------------------------------------------------------------+
// | CORPS du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
define ('ADME_IDENTIFIEZ_VOUS','Veuillez vous identifier pour acc&egrave;der &agrave; ce menu.');
// Le formulaire de sélection du site dont les menus doivent être administrer :
define('ADME_LG_FORM_SITE_TITRE', 'Listes des sites');
define('ADME_LG_FORM_SITE_CHOIX', 'Choix du site à administrer : ');
define('ADME_LG_FORM_SITE_VALIDER', 'OK');
// Les titres de l'arborescence des menus à administrer:
define('ADME_LG_MENU_TITRE', 'Configuration des menus du site : ');
define('ADME_LG_MENU_CLASSIQUE_RACINE', 'Ajouter un menu classique');
define('ADME_LG_MENU_COMMUN_RACINE', 'Ajouter un menu commun');
 
// Les actions des menus classiques:
define('ADME_LG_ACTION_CLASSIQUE_MODIFIER', 'menu_classique_modifier');
define('ADME_LG_ACTION_CLASSIQUE_MODIFIER_ACTION', 'menu_classique_modifier_action');
define('ADME_LG_ACTION_CLASSIQUE_MODIFIER_ALT', 'Modifier');
define('ADME_LG_ACTION_CLASSIQUE_MODIFIER_TITLE', 'Modifier ce menu');
 
define('ADME_LG_ACTION_CLASSIQUE_MONTER', 'menu_classique_monter');
define('ADME_LG_ACTION_CLASSIQUE_MONTER_ALT', 'Monter');
define('ADME_LG_ACTION_CLASSIQUE_MONTER_TITLE', 'Monter ce menu');
 
define('ADME_LG_ACTION_CLASSIQUE_DESCENDRE', 'menu_classique_descendre');
define('ADME_LG_ACTION_CLASSIQUE_DESCENDRE_ALT', 'Descendre');
define('ADME_LG_ACTION_CLASSIQUE_DESCENDRE_TITLE', 'Descendre ce menu');
 
define('ADME_LG_ACTION_CLASSIQUE_DIMINUER', 'menu_classique_diminuer');
define('ADME_LG_ACTION_CLASSIQUE_DIMINUER_ALT', 'Diminuer');
define('ADME_LG_ACTION_CLASSIQUE_DIMINUER_TITLE', 'Diminuer d\'un niveau ce menu');
 
define('ADME_LG_ACTION_CLASSIQUE_AUGMENTER', 'menu_classique_augmenter');
define('ADME_LG_ACTION_CLASSIQUE_AUGMENTER_ALT', 'Augmenter');
define('ADME_LG_ACTION_CLASSIQUE_AUGMENTER_TITLE', 'Augmenter d\'un niveau ce menu');
 
define('ADME_LG_ACTION_CLASSIQUE_TRADUIRE', 'menu_classique_traduire');
define('ADME_LG_ACTION_CLASSIQUE_TRADUIRE_ACTION', 'menu_classique_traduire_action');
define('ADME_LG_ACTION_CLASSIQUE_TRADUIRE_ALT', 'Traduire');
define('ADME_LG_ACTION_CLASSIQUE_TRADUIRE_TITLE', 'Traduire ce menu');
 
define('ADME_LG_ACTION_CLASSIQUE_SUPPRIMER', 'menu_classique_supprimer');
define('ADME_LG_ACTION_CLASSIQUE_SUPPRIMER_ALT', 'Supprimer');
define('ADME_LG_ACTION_CLASSIQUE_SUPPRIMER_TITLE', 'Supprimer ce menu');
 
define('ADME_LG_ACTION_CLASSIQUE_SUPPRIMER_TRADUCTION', 'menu_classique_supprimer_traduction');
define('ADME_LG_ACTION_CLASSIQUE_SUPPRIMER_TRADUCTION_ALT', 'Supprimer');
define('ADME_LG_ACTION_CLASSIQUE_SUPPRIMER_TRADUCTION_TITLE', 'Supprimer ce menu');
 
define('ADME_LG_ACTION_CLASSIQUE_AJOUTER', 'menu_classique_ajouter');
define('ADME_LG_ACTION_CLASSIQUE_AJOUTER_ALT', 'Ajouter');
define('ADME_LG_ACTION_CLASSIQUE_AJOUTER_TITLE', 'Ajouter ce menu');
 
define('ADME_LG_ACTION_CLASSIQUE_VERIFIER', 'menu_classique_verifier');
define('ADME_LG_ACTION_CLASSIQUE_VERIFIER_TRADUCTION', 'menu_classique_verifier_traduction');
 
 
define('ADME_LG_ACTION_CLASSIQUE_TRADUCTION_DEFAUT', 'menu_classique_traduction_defaut');
define('ADME_LG_ACTION_CLASSIQUE_TRADUCTION_DEFAUT_ALT', 'Choisir ce menu comme traduction par défaut');
define('ADME_LG_ACTION_CLASSIQUE_TRADUCTION_DEFAUT_TITLE', 'Choisir ce menu comme traduction par défaut');
 
 
define('ADME_LG_ACTION_COMMUN_TRADUCTION_DEFAUT', 'menu_classique_traduction_defaut');
define('ADME_LG_ACTION_COMMUN_TRADUCTION_DEFAUT_ALT', 'Choisir ce menu comme traduction par défaut');
define('ADME_LG_ACTION_COMMUN_TRADUCTION_DEFAUT_TITLE', 'Choisir ce menu comme traduction par défaut');
 
 
// Les actions des menus communs:
define('ADME_LG_ACTION_COMMUN_MODIFIER', 'menu_commun_modifier');
define('ADME_LG_ACTION_COMMUN_MODIFIER_ALT', 'Modifier');
define('ADME_LG_ACTION_COMMUN_MODIFIER_ACTION', 'menu_commun_modifier_action');
define('ADME_LG_ACTION_COMMUN_MODIFIER_TITLE', 'Modifier ce menu');
 
define('ADME_LG_ACTION_COMMUN_MONTER', 'menu_commun_monter');
define('ADME_LG_ACTION_COMMUN_MONTER_ALT', 'Monter');
define('ADME_LG_ACTION_COMMUN_MONTER_TITLE', 'Monter ce menu');
 
define('ADME_LG_ACTION_COMMUN_DESCENDRE', 'menu_commun_descendre');
define('ADME_LG_ACTION_COMMUN_DESCENDRE_ALT', 'Descendre');
define('ADME_LG_ACTION_COMMUN_DESCENDRE_TITLE', 'Descendre ce menu');
 
define('ADME_LG_ACTION_COMMUN_DIMINUER', 'menu_commun_diminuer');
define('ADME_LG_ACTION_COMMUN_DIMINUER_ALT', 'Diminuer');
define('ADME_LG_ACTION_COMMUN_DIMINUER_TITLE', 'Diminuer d\'un niveau ce menu');
 
define('ADME_LG_ACTION_COMMUN_AUGMENTER', 'menu_commun_augmenter');
define('ADME_LG_ACTION_COMMUN_AUGMENTER_ALT', 'Augmenter');
define('ADME_LG_ACTION_COMMUN_AUGMENTER_TITLE', 'Augmenter d\'un niveau ce menu');
 
define('ADME_LG_ACTION_COMMUN_TRADUIRE', 'menu_commun_traduire');
define('ADME_LG_ACTION_COMMUN_TRADUIRE_ACTION', 'menu_commun_traduire_action');
define('ADME_LG_ACTION_COMMUN_TRADUIRE_ALT', 'Traduire');
define('ADME_LG_ACTION_COMMUN_TRADUIRE_TITLE', 'Traduire ce menu');
 
define('ADME_LG_ACTION_COMMUN_SUPPRIMER', 'menu_commun_supprimer');
define('ADME_LG_ACTION_COMMUN_SUPPRIMER_ALT', 'Supprimer');
define('ADME_LG_ACTION_COMMUN_SUPPRIMER_TITLE', 'Supprimer ce menu');
 
define('ADME_LG_ACTION_COMMUN_SUPPRIMER_TRADUCTION', 'menu_commun_supprimer_traduction');
define('ADME_LG_ACTION_COMMUN_SUPPRIMER_TRADUCTION_ALT', 'Supprimer');
define('ADME_LG_ACTION_COMMUN_SUPPRIMER_TRADUCTION_TITLE', 'Supprimer ce menu');
 
 
define('ADME_LG_ACTION_COMMUN_AJOUTER', 'menu_commun_ajouter');
define('ADME_LG_ACTION_COMMUN_AJOUTER_ALT', 'Ajouter');
define('ADME_LG_ACTION_COMMUN_AJOUTER_TITLE', 'Ajouter ce menu');
 
define('ADME_LG_ACTION_COMMUN_VERIFIER', 'menu_commun_verifier');
define ('ADME_LG_ACTION_COMMUN_VERIFIER_TRADUCTION','menu_commun_verifier_traduction');
 
// Les actions générales:
define('ADME_LG_ACTION_ADMINISTRER', 'administrer');
define('ADME_LG_ACTION_ADMINISTRER_ALT', 'Administrer');
define('ADME_LG_ACTION_ADMINISTRER_TITLE', 'Administrer l\'application de ce menu');
 
define('ADME_LG_ACTION_PLIER', 'adme_menu_fermer');
define('ADME_LG_ACTION_PLIER_ALT', 'Plier');
 
define('ADME_LG_ACTION_DEPLIER', 'adme_menu_ouvrir');
define('ADME_LG_ACTION_DEPLIER_ALT', 'Déplier');
 
define('ADME_LG_ACTION_SUPPRIMER_CONFIRMATION', 'Êtes vous sûr de vouloir supprimer ce menu?');
 
// Les erreurs:
define('ADME_LG_ERREUR_INFO_MENU', 'impossible de lire les infos du menu.');
define('ADME_LG_ERREUR_INFO_SITE', 'impossible de lire les infos du site.');
define('ADME_LG_ERREUR_INFO_MENU_RELATION', 'impossible de lire les infos sur les relations du menu.');
define('ADME_LG_ERREUR_ID_MENU_PERE', 'impossible de lire identifiant du menu père.');
define('ADME_LG_ERREUR_CODE_NUM', "La valeur %s pour le champ \"Code numérique\" existe déjà.");
define('ADME_LG_ERREUR_CODE_ALPHA', "La valeur %s pour le champ \"Code alphanumérique\" existe déjà.");
define('ADME_LG_ERREUR_EXISTE_SOUS_MENU', 'Ce menu contient encore des sous menus. Veuillez commencez par supprimer ces sous menus.');
 
// Le formulaire de modification d'un menu :
define('ADME_LG_FORM_MENU_CLASSIQUE_TITRE_GENERAL', 'Modification menu');
define('ADME_LG_FORM_MENU_COMMUN_TITRE_GENERAL', 'Modification menu commun');
 
define('ADME_LG_FORM_MENU_CLASSIQUE_TITRE_GENERAL_TRADUCTION', 'Traduction menu');
define('ADME_LG_FORM_MENU_COMMUN_TITRE_GENERAL_TRADUCTION', 'Traduction menu commun');
 
define('ADME_LG_FORM_MENU_CLASSIQUE_TITRE_CONFIG', 'Configuration du menu');
define('ADME_LG_FORM_MENU_COMMUN_TITRE_CONFIG', 'Configuration du menu commun');
define('ADME_LG_FORM_MENU_ID', 'Identifiant de ce menu : ');
define('ADME_LG_FORM_MENU_CODE_NUM', 'Code numérique du menu');
define('ADME_LG_FORM_MENU_REGLE_CODE_NUM', 'Un code numérique est requis pour le menu !');
define('ADME_LG_FORM_MENU_CODE_ALPHA', 'Code alphanumérique du menu');
define('ADME_LG_FORM_MENU_REGLE_CODE_ALPHA', 'Un code alphanumérique est requis pour le menu !');
define('ADME_LG_FORM_MENU_NOM', 'Nom du menu');
define('ADME_LG_FORM_MENU_REGLE_NOM', 'Un nom est requis pour le menu !');
define('ADME_LG_FORM_MENU_RACCOURCI', 'Raccourci clavier');
define('ADME_LG_FORM_MENU_DEFAUT', 'En faire le menu par défaut');
define('ADME_LG_FORM_MENU_FICHIER_SQUELETTE', 'Fichier squelette');
define('ADME_LG_FORM_MENU_INFO_BULLE', 'Contenu info-bulle');
define('ADME_LG_FORM_MENU_REGLE_INFO_BULLE', 'Une description courte pour l\'info-bulle est requise pour ce menu !');
define('ADME_LG_FORM_MENU_APPLI', 'Application');
define('ADME_LG_FORM_MENU_APPLI_ARGUMENT', 'Arguments de l\'application');
 
define('ADME_LG_FORM_MENU_CLASSIQUE_TITRE_ENTETE', 'Entête des pages du menu');
define('ADME_LG_FORM_MENU_COMMUN_TITRE_ENTETE', 'Entête des pages du menu commun');
define('ADME_LG_FORM_MENU_ROBOT', 'Indexation par robots');
define('ADME_LG_FORM_MENU_INDEX_FOLLOW', 'Indexer cette page et les suivantes');
define('ADME_LG_FORM_MENU_INDEX', 'Indexer seulement cette page');
define('ADME_LG_FORM_MENU_NOINDEX_NOFOLLOW', 'Ne pas indexer cette page et les suivantes');
define('ADME_LG_FORM_MENU_NOINDEX', 'Ne pas indexer cette page');
define('ADME_LG_FORM_MENU_INDEX_VIDE', 'Aucune');
define('ADME_LG_FORM_MENU_TITRE', 'Titre de la page');
define('ADME_LG_FORM_MENU_TITRE_ALTERNATIF', 'Titre alternatif de la page');
define('ADME_LG_FORM_MENU_MOT_CLE', 'Mots-clés');
define('ADME_LG_FORM_MENU_DESCRIPTION', 'Description du contenu');
define('ADME_LG_FORM_MENU_TABLE_MATIERE', 'Table des matières');
define('ADME_LG_FORM_MENU_SOURCE', 'Source');
define('ADME_LG_FORM_MENU_AUTEUR', 'Auteur');
define('ADME_LG_FORM_MENU_CONTRIBUTEUR', 'Contributeur');
define('ADME_LG_FORM_MENU_EDITEUR', 'Éditeur');
define('ADME_LG_FORM_MENU_DATE_CREATION', 'Date de création');
define('ADME_LG_FORM_MENU_DATE_VALIDITE_DEBUT', 'Date de début de validité');
define('ADME_LG_FORM_MENU_DATE_VALIDITE_FIN', 'Date de fin de validité');
define('ADME_LG_FORM_MENU_DATE_COPYRIGHT', 'Année pour le copyright');
define('ADME_LG_FORM_MENU_URL_LICENCE', 'URL de la licence');
define('ADME_LG_FORM_MENU_CATEGORIE', 'Catégorie');
define('ADME_LG_FORM_MENU_PUBLIC', 'Public pour la page');
define('ADME_LG_FORM_MENU_PUBLIC_NIVEAU', 'Niveau du public pour la page');
define('ADME_LG_FORM_MENU_ZG_TYPE', 'Type de portée spatiale');
define('ADME_LG_FORM_MENU_ZG_VALEUR', 'Portée spatiale de la page');
define('ADME_LG_FORM_MENU_ZG_VIDE', 'Aucun');
define('ADME_LG_FORM_MENU_ZG_ISO', 'Code de pays sur deux lettres (iso3166)');
define('ADME_LG_FORM_MENU_ZG_DC', 'Représentation des régions géographiques du Dublin Core');
define('ADME_LG_FORM_MENU_ZG_POINT', 'Point géographique');
define('ADME_LG_FORM_MENU_ZG_GTGN', 'Noms issus du Getty Thesaurus of Geographic Names');
define('ADME_LG_FORM_MENU_TMP_TYPE', 'Type de portée temporelle');
define('ADME_LG_FORM_MENU_TMP_VALEUR', 'Portée temporelle de la page');
define('ADME_LG_FORM_MENU_TMP_VIDE', 'Aucun');
define('ADME_LG_FORM_MENU_TMP_W3C', 'Codage des dates et heures du W3C');
define('ADME_LG_FORM_MENU_TMP_DC', 'Représentation des intervalles de temps du Dublin Core');
 
define('ADME_LG_FORM_MENU_VALIDER', 'Enregistrer');
define('ADME_LG_FORM_MENU_ANNULER', 'Annuler');
define('ADME_LG_FORM_TXT_CHP_OBLIGATOIRE', 'Indique les champs obligatoires');
define('ADME_LG_FORM_SYMBOLE_CHP_OBLIGATOIRE', '*');
 
// Charactère spéciaux:
define('ADME_LG_PARENTHESE_OUVRANTE', '(');
define('ADME_LG_PARENTHESE_FERMANTE', ')');
define('ADME_LG_SLASH', '/');
// +------------------------------------------------------------------------------------------------------+
// | PIED du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.15 2006/06/29 18:58:57 ddelon
* Multilinguisme : menu par defaut pour les menu commun
*
* Revision 1.14 2006/06/28 12:53:34 ddelon
* Multilinguisme : menu par defaut
*
* Revision 1.13 2006/05/10 16:02:49 ddelon
* Finition multilinguise et schizo flo
*
* Revision 1.12 2006/05/10 15:01:57 florian
* ajout de constantes, pour éviter les warnings
*
* Revision 1.11 2006/04/12 21:11:54 ddelon
* Multilinguisme menus communs
*
* Revision 1.10 2006/03/23 20:24:58 ddelon
* *** empty log message ***
*
* Revision 1.9 2006/03/13 21:00:20 ddelon
* Suppression messages d'erreur multilinguisme
*
* Revision 1.8 2006/03/02 10:49:49 ddelon
* Fusion branche multilinguisme dans branche principale
*
* Revision 1.7.2.1 2006/02/28 14:02:10 ddelon
* Finition multilinguisme
*
* Revision 1.7 2005/07/18 16:14:32 ddelon
* css admin + menu communs
*
* Revision 1.6 2005/07/08 21:13:15 ddelon
* Gestion indentation menu
*
* Revision 1.5 2005/05/26 15:45:09 jpm
* Ajout d'une majuscule accentuée.
*
* Revision 1.4 2005/03/29 15:49:31 jpm
* Ajout de la constante pour la date de création dans le formulaire des menus.
*
* Revision 1.3 2004/12/01 16:47:07 jpm
* Ajout d'un texte pour la boite javascript de confirmation de suppression de menu.
*
* Revision 1.2 2004/11/10 17:26:12 jpm
* Fin gestion de la traduction.
*
* Revision 1.1 2004/11/10 11:58:31 jpm
* Début de la traduction de l'appli.
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/applications/admin_menu/presentations/styles/adme_standard.css
New file
0,0 → 1,68
/* vim: set expandtab tabstop=4 shiftwidth=4: */
/* ========================================================================================================
| Copyright (C) 1999-2004 Tela Botanica (accueil@tela-botanica.org) |
+---------------------------------------------------------------------------------------------------------+
| This file is part of Papyrus - Admin Menus. |
| |
| Foobar is free software; you can redistribute it and/or modify it under the terms of the GNU General |
| Public License as published by the Free Software Foundation; either version 2 of the License, or |
| (at your option) any later version. |
| |
| Foobar 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 General Public |
| License for more details. |
| |
| You should have received a copy of the GNU General Public License along with Foobar; if not, write to |
| the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
+---------------------------------------------------------------------------------------------------------+
CVS : $Id: adme_standard.css,v 1.3 2006-10-06 13:38:45 florian Exp $
===========================================================================================================
DESCRIPTION : Fichier contenant les styles css de l'application ADME de Papyrus.
===========================================================================================================
Auteur original : jean-Pascal MILCENT <jpm[at]tela-botanica[point]org>
 
Autres auteurs : aucun
 
===========================================================================================================
AUTEUR : $Author: florian $
VERSION : $Revision: 1.3 $ $Date: 2006-10-06 13:38:45 $
======================================================================================================= */
 
/* +----------------------------------------------------------------------------------------------------+
| STRUCTURE |
+----------------------------------------------------------------------------------------------------+*/
 
 
 
/* +----------------------------------------------------------------------------------------------------+
| DESIGN |
+----------------------------------------------------------------------------------------------------+*/
.adme_img_icone {
border: 0px;
width: 16px;
height: 16px;
}
 
.adme_img_plier_deplier {
border: 0px;
width: 9px;
height: 9px;
}
.menu_classique, .menu_commun {
list-style-type: none;
}
 
/* +--Fin des CSS ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.2 2005/02/28 11:05:55 jpm
* Modification de la licence.
*
* Revision 1.1 2004/11/09 12:51:43 jpm
* Ajout de styles pour les icônes.
*
*
* +-- Fin des CSS ----------------------------------------------------------------------------------------+
*/
/branches/v1.0-menes/papyrus/applications/admin_menu/presentations/images/interface/adme_monter.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.0-menes/papyrus/applications/admin_menu/presentations/images/interface/adme_monter.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.0-menes/papyrus/applications/admin_menu/presentations/images/interface/adme_ouvrir.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.0-menes/papyrus/applications/admin_menu/presentations/images/interface/adme_ouvrir.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.0-menes/papyrus/applications/admin_menu/presentations/images/interface/adme_supprimer.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.0-menes/papyrus/applications/admin_menu/presentations/images/interface/adme_supprimer.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.0-menes/papyrus/applications/admin_menu/presentations/images/interface/adme_augmenter.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.0-menes/papyrus/applications/admin_menu/presentations/images/interface/adme_augmenter.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.0-menes/papyrus/applications/admin_menu/presentations/images/interface/adme_radio_off.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.0-menes/papyrus/applications/admin_menu/presentations/images/interface/adme_radio_off.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.0-menes/papyrus/applications/admin_menu/presentations/images/interface/adme_ajouter.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.0-menes/papyrus/applications/admin_menu/presentations/images/interface/adme_ajouter.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.0-menes/papyrus/applications/admin_menu/presentations/images/interface/adme_radio_on.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.0-menes/papyrus/applications/admin_menu/presentations/images/interface/adme_radio_on.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.0-menes/papyrus/applications/admin_menu/presentations/images/interface/adme_descendre.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.0-menes/papyrus/applications/admin_menu/presentations/images/interface/adme_descendre.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.0-menes/papyrus/applications/admin_menu/presentations/images/interface/adme_diminuer.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.0-menes/papyrus/applications/admin_menu/presentations/images/interface/adme_diminuer.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.0-menes/papyrus/applications/admin_menu/presentations/images/interface/adme_modifier.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.0-menes/papyrus/applications/admin_menu/presentations/images/interface/adme_modifier.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.0-menes/papyrus/applications/admin_menu/presentations/images/interface/adme_fermer.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.0-menes/papyrus/applications/admin_menu/presentations/images/interface/adme_fermer.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.0-menes/papyrus/applications/admin_menu/presentations/images/interface/adme_administrer.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.0-menes/papyrus/applications/admin_menu/presentations/images/interface/adme_administrer.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.0-menes/papyrus/applications/admin_menu/admin_menu.php
New file
0,0 → 1,588
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// Copyright (C) 1999-2004 Tela Botanica (accueil@tela-botanica.org)
//
// Ce logiciel est un programme informatique servant à gérer du contenu et des
// applications web.
// Ce logiciel est régi par la licence CeCILL soumise au droit français et
// respectant les principes de diffusion des logiciels libres. Vous pouvez
// utiliser, modifier et/ou redistribuer ce programme sous les conditions
// de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA
// sur le site "http://www.cecill.info".
 
// En contrepartie de l'accessibilité au code source et des droits de copie,
// de modification et de redistribution accordés par cette licence, il n'est
// offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons,
// seule une responsabilité restreinte pèse sur l'auteur du programme, le
// titulaire des droits patrimoniaux et les concédants successifs.
 
// A cet égard l'attention de l'utilisateur est attirée sur les risques
// associés au chargement, à l'utilisation, à la modification et/ou au
// développement et à la reproduction du logiciel par l'utilisateur étant
// donné sa spécificité de logiciel libre, qui peut le rendre complexe à
// manipuler et qui le réserve donc à des développeurs et des professionnels
// avertis possédant des connaissances informatiques approfondies. Les
// utilisateurs sont donc invités à charger et tester l'adéquation du
// logiciel à leurs besoins dans des conditions permettant d'assurer la
// sécurité de leurs systèmes et ou de leurs données et, plus généralement,
// à l'utiliser et l'exploiter dans les mêmes conditions de sécurité.
 
// Le fait que vous puissiez accéder à cet en-tête signifie que vous avez
// pris connaissance de la licence CeCILL, et que vous en avez accepté les
// termes.
// ----
// CVS : $Id: admin_menu.php,v 1.25.2.1 2007-04-19 13:11:19 florian Exp $
/**
* Application gérant les menus de Papyrus
*
* Cette application permet de gérer les menus classiques, les menus communs
* et les liaison d'une application à un menu.
*
*@package Admin_menu
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author Alexandre GRANIER <alexandre@tela-botanica.org>
*@author Laurent COUDOUNEAU <lc@gsite.org>
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.25.2.1 $ $Date: 2007-04-19 13:11:19 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTÊTE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
/** Inclusion du fichier de configuration de cette application.*/
require_once GEN_CHEMIN_PAP.'applications/admin_menu/configuration/adme_configuration.inc.php';
 
//Utilisation de la bibliothèque PEAR NET_URL
 
/** Inclusion de la bibliothèque PEAR de conception de formulaire.*/
require_once ADME_CHEMIN_BIBLIOTHEQUE_PEAR.'HTML/QuickForm.php';
require_once ADME_CHEMIN_BIBLIOTHEQUE_PEAR.'HTML/QuickForm/select.php';
 
/** Inclusion de l'API de fonctions gérant les erreurs sql.*/
require_once ADME_CHEMIN_BIBLIOTHEQUE_API.'debogage/BOG_sql.fonct.php';
 
/** Inclusion des fonctions de manipulation du sql.
* Permet la récupération d'un nouvel identifiant d'une table.*/
require_once ADME_CHEMIN_BIBLIOTHEQUE_API.'sql/SQL_manipulation.fonct.php';
 
/** <BR> Inclusion de la bibliothèque de fonctions concernant les tables "gen_site..." de Papyrus.*/
require_once ADME_CHEMIN_BIBLIOTHEQUE_GEN.'pap_site.fonct.php';
 
/** <BR> Inclusion de la bibliothèque de fonctions concernant les tables "gen_menu..." de Papyrus.*/
require_once ADME_CHEMIN_BIBLIOTHEQUE_GEN.'pap_menu.fonct.php';
 
/** <BR> Inclusion de la bibliothèque de fonctions concernant les tables "gen_applications..." de Papyrus.*/
require_once ADME_CHEMIN_BIBLIOTHEQUE_GEN.'pap_application.fonct.php';
 
/** <BR> Inclusion de la bibliothèque de fonctions concernant l'affichage commun.*/
require_once ADME_CHEMIN_BIBLIOTHEQUE_ADME.'adme_general.fonct.php';//ok
 
/** <BR> Inclusion de la bibliothèque de fonctions concernant la gestion des menus classiques.*/
require_once ADME_CHEMIN_BIBLIOTHEQUE_ADME.'adme_menu_classique.fonct.php';//ok
 
/** <BR> Inclusion de la bibliothèque de fonctions concernant la gestion des menus communs.*/
require_once ADME_CHEMIN_BIBLIOTHEQUE_ADME.'adme_menu_commun.fonct.php';//ok
 
/** <BR> Inclusion de la bibliothèque de fonctions concernant la gestion de la rédaction de contenu.*/
//require_once ADME_CHEMIN_BIBLIOTHEQUE_ADME.'adme_contenu.fonct.php';//ok
 
// Inclusion des fichiers de traduction de l'appli ADME dePapyrus
if (file_exists(ADME_CHEMIN_LANGUE.'adme_langue_'.$GLOBALS['_GEN_commun']['i18n'].'.inc.php')) {
/** Inclusion du fichier de traduction suite à la transaction avec le navigateur.*/
require_once ADME_CHEMIN_LANGUE.'adme_langue_'.$GLOBALS['_GEN_commun']['i18n'].'.inc.php';
} else {
/** Inclusion du fichier de traduction par défaut.*/
require_once ADME_CHEMIN_LANGUE.'adme_langue_'.ADME_I18N_DEFAUT.'.inc.php';
}
 
// Stockage des styles de l'application
GEN_stockerStyleExterne('adme_standard', ADME_CHEMIN_STYLE.'adme_standard.css');
 
// +------------------------------------------------------------------------------------------------------+
// | CORPS du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
function afficherContenuCorps()
{
 
//-------------------------------------------------------------------------------------------------------------------
// Initialisation des variables
$sortie_xhtml = '';
$objet_pear_auth = $GLOBALS['_GEN_commun']['pear_auth'];
$objet_pear_db = $GLOBALS['_GEN_commun']['pear_db'];
$objet_pear_url = $GLOBALS['_GEN_commun']['url'];
$copie_objet_pear_url = $objet_pear_url;
$url_site = $GLOBALS['_GEN_commun']['url_site'];
if (isset($GLOBALS['_GEN_commun']['url_menu'])) {
$url_menu = $GLOBALS['_GEN_commun']['url_menu'];
}
if (isset($_POST['adme_site_id'])) {
$_GET['adme_site_id'] = $_POST['adme_site_id'];
} else {
$_GET['adme_site_id'] = (!isset($_GET['adme_site_id'])) ? 1 : $_GET['adme_site_id'];
}
$_GET['adme_menu_id'] = (!isset($_GET['adme_menu_id'])) ? 0 : $_GET['adme_menu_id'];
$_GET['adme_action'] = (!isset($_GET['adme_action'])) ? '' : $_GET['adme_action'];
//-------------------------------------------------------------------------------------------------------------------
// Authentification
if ($objet_pear_auth->getAuth()) {
//---------------------------------------------------------------------------------------------------------------
// GESTION DES MENUS CLASSIQUES
// Ajouter un menu classique
if (isset($_GET['adme_action']) && $_GET['adme_action'] == ADME_LG_ACTION_CLASSIQUE_AJOUTER) {
$message = ADME_ajouterMenuClassique($objet_pear_db, $objet_pear_auth, $_GET['adme_site_id'], $_GET['adme_menu_id']);
$copie_objet_pear_url->addQueryString('adme_site_id',$_GET['adme_site_id']);
header("Location: ".str_replace('&amp;', '&', $copie_objet_pear_url->getUrl()));
exit;
}
// Formulaire de mise à jour du menu
if (isset($_GET['adme_action']) && $_GET['adme_action'] == ADME_LG_ACTION_CLASSIQUE_MODIFIER) {
$copie_objet_pear_url->addQueryString('adme_site_id',$_GET['adme_site_id']);
$copie_objet_pear_url->addQueryString('adme_menu_id',$_GET['adme_menu_id']);
$copie_objet_pear_url->addQueryString('adme_action',ADME_LG_ACTION_CLASSIQUE_MODIFIER_ACTION);
header("Location: ".str_replace('&amp;', '&', $copie_objet_pear_url->getUrl()));
exit;
}
if (isset($_GET['adme_action']) && $_GET['adme_action'] == ADME_LG_ACTION_CLASSIQUE_MODIFIER_ACTION) {
$sortie_xhtml .= ADME_afficherFormMenuClassique($objet_pear_db, $objet_pear_url, $_GET['adme_site_id'], $_GET['adme_menu_id'], $_POST);
return $sortie_xhtml;
}
if (isset($_POST[ADME_LG_ACTION_CLASSIQUE_VERIFIER])) {
// Nous cherchons à enregistrer une modification de menu
$message = ADME_validerFormAjouterMenuClassique($objet_pear_db, $_POST);
if (!empty($message)) {
// Les données ne sont pas valide. Nous retournons le formulaires avec les messages d'erreurs.
$sortie_xhtml .= $message;
$sortie_xhtml .= ADME_afficherFormMenuClassique($objet_pear_db, $objet_pear_url, $_GET['adme_site_id'], $_GET['adme_menu_id'], $_POST);
return $sortie_xhtml;
} else {
// Les données sont valide. Nous les enregistrons et retournons au formulaire de départ.
$message = ADME_modifierMenuClassique($objet_pear_db, $objet_pear_auth, $_GET['adme_menu_id'], $_POST);
}
}
// Déplacer le menu vers le haut
if (isset($_GET['adme_action']) && $_GET['adme_action'] == ADME_LG_ACTION_CLASSIQUE_MONTER) {
ADME_deplacerMenuClassique($objet_pear_db, $_GET['adme_site_id'], $_GET['adme_menu_id'], true);
}
// Déplacer le menu vers le bas
if (isset($_GET['adme_action']) && $_GET['adme_action'] == ADME_LG_ACTION_CLASSIQUE_DESCENDRE) {
ADME_deplacerMenuClassique($objet_pear_db, $_GET['adme_site_id'], $_GET['adme_menu_id'], false);
}
// Déplacer le menu vers la gauche (diminuer d'un niveau)
if (isset($_GET['adme_action']) && $_GET['adme_action'] == ADME_LG_ACTION_CLASSIQUE_DIMINUER) {
ADME_indenterMenuClassique($objet_pear_db, $_GET['adme_site_id'], $_GET['adme_menu_id'], true);
}
// Déplacer le menu vers la droite (augmenter d'un niveau)
if (isset($_GET['adme_action']) && $_GET['adme_action'] == ADME_LG_ACTION_CLASSIQUE_AUGMENTER) {
ADME_indenterMenuClassique($objet_pear_db, $_GET['adme_site_id'], $_GET['adme_menu_id'], false);
}
// Traduire le menu
if (isset($_GET['adme_action']) && $_GET['adme_action'] == ADME_LG_ACTION_CLASSIQUE_TRADUIRE) {
$message='';
$message = ADME_verifier_traduction_possible($objet_pear_db, $objet_pear_url, $_GET['adme_site_id'], $_GET['adme_menu_id'], $_POST);
if ((!empty($message))) {
// Pas de traduction possible !
$sortie_xhtml .= $message;
$sortie_xhtml .= ADME_afficherFormPrincipal($objet_pear_db, $objet_pear_url, $_GET['adme_site_id'], $_GET['adme_menu_id'], $_GET['adme_action']);
return $sortie_xhtml;
}
else {
// Les données sont valide. Nous affichons le formulaire de traduction
$copie_objet_pear_url->addQueryString('adme_site_id',$_GET['adme_site_id']);
$copie_objet_pear_url->addQueryString('adme_menu_id',$_GET['adme_menu_id']);
$copie_objet_pear_url->addQueryString('adme_action',ADME_LG_ACTION_CLASSIQUE_TRADUIRE_ACTION);
header("Location: ".str_replace('&amp;', '&', $copie_objet_pear_url->getUrl()));
exit;
}
}
if (isset($_GET['adme_action']) && $_GET['adme_action'] == ADME_LG_ACTION_CLASSIQUE_TRADUIRE_ACTION) {
$sortie_xhtml .= ADME_afficherFormMenuClassique($objet_pear_db, $objet_pear_url, $_GET['adme_site_id'], $_GET['adme_menu_id'], $_POST,TRUE);
return $sortie_xhtml;
}
if (isset($_POST[ADME_LG_ACTION_CLASSIQUE_VERIFIER_TRADUCTION])) {
// Nous cherchons à enregistrer une traduction de menu
$message = ADME_validerFormTraduireMenuClassique($objet_pear_db, $_POST);
if (!empty($message)) {
// Les données ne sont pas valide. Nous retournons le formulaires avec les messages d'erreurs.
$sortie_xhtml .= $message;
$sortie_xhtml .= ADME_afficherFormMenuClassique($objet_pear_db, $objet_pear_url, $_GET['adme_menu_id'], $_POST);
return $sortie_xhtml;
} else {
// Les données sont valide. Nous les enregistrons et retournons au formulaire de départ.
$message = ADME_traduireMenuClassique($objet_pear_db, $objet_pear_auth, $_GET['adme_menu_id'], $_POST);
}
}
// Supprimer le menu
if (isset($_GET['adme_action']) && $_GET['adme_action'] == ADME_LG_ACTION_CLASSIQUE_SUPPRIMER) {
// Récupération du menu de remplacement pour éviter de fermer l'arborescence
if (GEN_donnerDernierFreres($_GET['adme_menu_id']) == false) {
$adme_menu_id_remplacement = GEN_lireIdentifiantMenuPere($_GET['adme_menu_id']);;
} else {
$adme_menu_id_remplacement = GEN_donnerDernierFreres($_GET['adme_menu_id']);
}
// Suppression du menu classique
$message = ADME_supprimerMenuClassique($objet_pear_db, $_GET['adme_site_id'], $_GET['adme_menu_id']);
// Remplacement de l'id du menu courant par le remplaçant.
$_GET['adme_menu_id'] = $adme_menu_id_remplacement;
$copie_objet_pear_url->addQueryString('adme_site_id',$_GET['adme_site_id']);
header("Location: ".str_replace('&amp;', '&', $copie_objet_pear_url->getUrl()));
exit;
}
// Supprimer le menu traduit
if (isset($_GET['adme_action']) && $_GET['adme_action'] == ADME_LG_ACTION_CLASSIQUE_SUPPRIMER_TRADUCTION) {
// Suppression du menu classique
$message = ADME_supprimerMenuClassiqueTraduction($objet_pear_db, $_GET['adme_site_id'], $_GET['adme_menu_id']);
$copie_objet_pear_url->addQueryString('adme_site_id',$_GET['adme_site_id']);
header("Location: ".str_replace('&amp;', '&', $copie_objet_pear_url->getUrl()));
exit;
}
// Selectionner le menu comme traduction par defaut :
if (isset($_GET['adme_action']) && $_GET['adme_action'] == ADME_LG_ACTION_CLASSIQUE_TRADUCTION_DEFAUT) {
$message = ADME_selectionnerMenuClassiqueTraduction($objet_pear_db, $_GET['adme_site_id'], $_GET['adme_menu_id']);
$copie_objet_pear_url->addQueryString('adme_site_id',$_GET['adme_site_id']);
header("Location: ".str_replace('&amp;', '&', $copie_objet_pear_url->getUrl()));
exit;
}
//---------------------------------------------------------------------------------------------------------------
// GESTION DES MENUS COMMUNS
// Ajout un menu commun
if (isset($_GET['adme_action']) && $_GET['adme_action'] == ADME_LG_ACTION_COMMUN_AJOUTER) {
$message = ADME_ajouterMenuCommun($objet_pear_db, $objet_pear_auth, $_GET['adme_site_id'], $_GET['adme_menu_id']);
$copie_objet_pear_url->addQueryString('adme_site_id',$_GET['adme_site_id']);
header("Location: ".str_replace('&amp;', '&', $copie_objet_pear_url->getUrl()));
exit;
}
// Formulaire de mise à jour du menu commun.
if (isset($_GET['adme_action']) && $_GET['adme_action'] == ADME_LG_ACTION_COMMUN_MODIFIER) {
$copie_objet_pear_url->addQueryString('adme_site_id',$_GET['adme_site_id']);
$copie_objet_pear_url->addQueryString('adme_menu_id',$_GET['adme_menu_id']);
$copie_objet_pear_url->addQueryString('adme_action',ADME_LG_ACTION_COMMUN_MODIFIER_ACTION);
header("Location: ".str_replace('&amp;', '&', $copie_objet_pear_url->getUrl()));
exit;
}
if (isset($_GET['adme_action']) && $_GET['adme_action'] == ADME_LG_ACTION_COMMUN_MODIFIER_ACTION) {
$sortie_xhtml .= ADME_afficherFormMenuClassique($objet_pear_db, $objet_pear_url, $_GET['adme_site_id'], $_GET['adme_menu_id'], $_POST);
return $sortie_xhtml;
}
if (isset($_POST[ADME_LG_ACTION_COMMUN_VERIFIER])) {
// Nous cherchons à enregistrer une modification de menu
$message = ADME_validerFormAjouterMenuCommun($objet_pear_db, $_POST);
if (!empty($message)) {
// Les données ne sont pas valide. Nous retournons le formulaires avec les messages d'erreurs.
$sortie_xhtml .= $message;
$sortie_xhtml .= ADME_afficherFormMenuCommun($objet_pear_db, $objet_pear_url, $_GET['adme_site_id'], $_GET['adme_menu_id'], $_POST);
return $sortie_xhtml;
} else {
// Les données sont valide. Nous les enregistrons et retournons au formulaire de départ.
$message = ADME_modifierMenuCommun($objet_pear_db, $objet_pear_auth, $_GET['adme_menu_id'], $_POST);
}
}
// Déplace vers le haut de la hiérarchie un menu commun
if (isset($_GET['adme_action']) && $_GET['adme_action'] == ADME_LG_ACTION_COMMUN_MONTER) {
ADME_deplacerMenuCommun($objet_pear_db, $_GET['adme_site_id'], $_GET['adme_menu_id'], true);
}
// Déplace vers le bas de la hiérarchie un menu commun
if (isset($_GET['adme_action']) && $_GET['adme_action'] == ADME_LG_ACTION_COMMUN_DESCENDRE) {
ADME_deplacerMenuCommun($objet_pear_db, $_GET['adme_site_id'], $_GET['adme_menu_id'], false);
}
 
// Déplacer le menu vers la gauche (diminuer d'un niveau)
if (isset($_GET['adme_action']) && $_GET['adme_action'] == ADME_LG_ACTION_COMMUN_DIMINUER) {
ADME_indenterMenuCommun($objet_pear_db, $_GET['adme_site_id'], $_GET['adme_menu_id'], true);
}
// Déplacer le menu vers la droite (augmenter d'un niveau)
if (isset($_GET['adme_action']) && $_GET['adme_action'] == ADME_LG_ACTION_COMMUN_AUGMENTER) {
ADME_indenterMenuCommun($objet_pear_db, $_GET['adme_site_id'], $_GET['adme_menu_id'], false);
}
// Traduire le menu
if (isset($_GET['adme_action']) && $_GET['adme_action'] == ADME_LG_ACTION_COMMUN_TRADUIRE) {
$message='';
$message = ADME_verifier_traduction_possible($objet_pear_db, $objet_pear_url, $_GET['adme_site_id'], $_GET['adme_menu_id'], $_POST);
if ((!empty($message))) {
// Pas de traduction possible !
$sortie_xhtml .= $message;
$sortie_xhtml .= ADME_afficherFormPrincipal($objet_pear_db, $objet_pear_url, $_GET['adme_site_id'], $_GET['adme_menu_id'], $_GET['adme_action']);
return $sortie_xhtml;
}
else {
// Les données sont valide. Nous affichons le formulaire de traduction
$copie_objet_pear_url->addQueryString('adme_site_id',$_GET['adme_site_id']);
$copie_objet_pear_url->addQueryString('adme_menu_id',$_GET['adme_menu_id']);
$copie_objet_pear_url->addQueryString('adme_action',ADME_LG_ACTION_COMMUN_TRADUIRE_ACTION);
header("Location: ".str_replace('&amp;', '&', $copie_objet_pear_url->getUrl()));
exit;
}
}
if (isset($_GET['adme_action']) && $_GET['adme_action'] == ADME_LG_ACTION_COMMUN_TRADUIRE_ACTION) {
$sortie_xhtml .= ADME_afficherFormMenuCommun($objet_pear_db, $objet_pear_url, $_GET['adme_site_id'], $_GET['adme_menu_id'], $_POST,TRUE);
return $sortie_xhtml;
}
if (isset($_POST[ADME_LG_ACTION_COMMUN_VERIFIER_TRADUCTION])) {
// Nous cherchons à enregistrer une traduction de menu
$message = ADME_validerFormTraduireMenuCommun($objet_pear_db, $_POST);
if (!empty($message)) {
// Les données ne sont pas valide. Nous retournons le formulaires avec les messages d'erreurs.
$sortie_xhtml .= $message;
$sortie_xhtml .= ADME_afficherFormMenuCommun($objet_pear_db, $objet_pear_url, $_GET['adme_menu_id'], $_POST);
return $sortie_xhtml;
} else {
// Les données sont valide. Nous les enregistrons et retournons au formulaire de départ.
$message = ADME_traduireMenuCommun($objet_pear_db, $objet_pear_auth, $_GET['adme_menu_id'], $_POST);
}
}
// Supprime définitivement un menu commun
if (isset($_GET['adme_action']) && $_GET['adme_action'] == ADME_LG_ACTION_COMMUN_SUPPRIMER) {
// Récupération du menu de remplacement pour éviter de fermer l'arborescence
if (GEN_donnerDernierFreres($_GET['adme_menu_id']) == false) {
$adme_menu_id_remplacement = GEN_lireIdentifiantMenuPere($_GET['adme_menu_id']);;
} else {
$adme_menu_id_remplacement = GEN_donnerDernierFreres($_GET['adme_menu_id']);
}
// Suppression du menu commun
ADME_supprimerMenuCommun($objet_pear_db, $_GET['adme_menu_id']);
// Remplacement de l'id du menu courant par le remplaçant.
$_GET['adme_menu_id'] = $adme_menu_id_remplacement;
$copie_objet_pear_url->addQueryString('adme_site_id',$_GET['adme_site_id']);
header("Location: ".str_replace('&amp;', '&', $copie_objet_pear_url->getUrl()));
exit;
}
// Supprimer le menu traduit
if (isset($_GET['adme_action']) && $_GET['adme_action'] == ADME_LG_ACTION_COMMUN_SUPPRIMER_TRADUCTION) {
// Suppression du menu commun
$message = ADME_supprimerMenuCommunTraduction($objet_pear_db, $_GET['adme_site_id'], $_GET['adme_menu_id']);
$copie_objet_pear_url->addQueryString('adme_site_id',$_GET['adme_site_id']);
header("Location: ".str_replace('&amp;', '&', $copie_objet_pear_url->getUrl()));
exit;
}
if (isset($_GET['adme_action']) && $_GET['adme_action'] == ADME_LG_ACTION_COMMUN_TRADUCTION_DEFAUT) {
$message = ADME_selectionnerMenuCommunTraduction($objet_pear_db, $_GET['adme_site_id'], $_GET['adme_menu_id']);
$copie_objet_pear_url->addQueryString('adme_site_id',$_GET['adme_site_id']);
header("Location: ".str_replace('&amp;', '&', $copie_objet_pear_url->getUrl()));
exit;
}
//---------------------------------------------------------------------------------------------------------------
// GESTION DES INTERFACES D'ADMINISTRATION
// Appel de l'application d'administration
if (isset($_GET['adme_action']) && $_GET['adme_action'] == ADME_LG_ACTION_ADMINISTRER) {
$id_appli = GEN_retournerIdAppliMenu($objet_pear_db, $_GET['adme_menu_id']);
$chemin_admin = GEN_retournerCheminInterfaceAdmin($objet_pear_db, $id_appli);
$nom_admin = GEN_retournerNomInterfaceAdmin($objet_pear_db, $id_appli);
if ($chemin_admin !== false) {
include_once $chemin_admin;
$objet_admin = new $nom_admin;
if (method_exists($objet_admin, 'afficherContenuCorps')) {
$retour_admin = $objet_admin->afficherContenuCorps();
}
if ($retour_admin !== false) {
return $retour_admin;
}
}
}
//---------------------------------------------------------------------------------------------------------------
// Affichage des messages si nécessaire
if (! empty($message)) {
$sortie_xhtml .= "\n".'<p class="pap_erreur">'.$message.'</p>';
}
//---------------------------------------------------------------------------------------------------------------
// Affichage formulaire principal et retour du XHTML!
$sortie_xhtml .= ADME_afficherFormPrincipal($objet_pear_db, $objet_pear_url, $_GET['adme_site_id'], $_GET['adme_menu_id'], $_GET['adme_action']);
return $sortie_xhtml;
// Fin de l'authentification
} else {
// Pas d'authentification nous affichons un message!
$res='';
$res .= '<p class="zone_alert">'.ADME_IDENTIFIEZ_VOUS.'</p>'."\n" ;
$res .= '<form id="form_connexion" style="clear:both;" class="form_identification" action="' ;
$res .= $objet_pear_url->getURL();
$res .= '" method="post">
<fieldset>
<legend>Identifiez vous</legend>
<label for="username">Courriel : </label>
<input type="text" id="username" name="username" maxlength="80" tabindex="1" value="courriel" />
<label for="password">Mot de passe : </label>
<input type="password" id="password" name="password" maxlength="80" tabindex="2" value="mot de passe" />
<input type="submit" id="connexion" name="connexion" tabindex="3" value="ok" />
</fieldset>
</form>';
return $res ;
}
}// Fin de la fonction afficherContenuCorps()
 
// +------------------------------------------------------------------------------------------------------+
// | PIED du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.25 2006/10/06 10:40:51 florian
* harmonisation des messages d'erreur de l'authentification
*
* Revision 1.24 2006/06/29 19:13:26 ddelon
* Bug defaut traduction sur menu commun
*
* Revision 1.23 2006/06/29 18:58:57 ddelon
* Multilinguisme : menu par defaut pour les menu commun
*
* Revision 1.22 2006/06/28 12:53:34 ddelon
* Multilinguisme : menu par defaut
*
* Revision 1.21 2006/04/12 21:11:54 ddelon
* Multilinguisme menus communs
*
* Revision 1.20 2006/03/23 20:24:58 ddelon
* *** empty log message ***
*
* Revision 1.19 2006/03/02 10:49:49 ddelon
* Fusion branche multilinguisme dans branche principale
*
* Revision 1.18.2.2 2006/02/28 14:02:08 ddelon
* Finition multilinguisme
*
* Revision 1.18.2.1 2005/12/27 15:56:00 ddelon
* Fusion Head vers multilinguisme (wikini double clic)
*
* Revision 1.18 2005/09/23 15:27:17 florian
* correction de bugs
*
* Revision 1.17 2005/07/18 16:14:32 ddelon
* css admin + menu communs
*
* Revision 1.16 2005/07/08 21:13:15 ddelon
* Gestion indentation menu
*
* Revision 1.15 2005/02/28 11:04:25 jpm
* Modification des auteurs.
*
* Revision 1.14 2005/02/28 10:31:41 jpm
* Changement de nom de dossier.
*
* Revision 1.13 2004/11/16 13:01:41 jpm
* Ajout d'un commentaire.
*
* Revision 1.12 2004/11/15 16:51:08 jpm
* Correction bogue de mise à jour de l'ordre des menus.
*
* Revision 1.11 2004/11/10 17:26:18 jpm
* Fin gestion de la traduction.
*
* Revision 1.10 2004/11/10 11:58:58 jpm
* Mise en place des constantes de traduction de l'appli.
*
* Revision 1.9 2004/11/09 17:53:03 jpm
* Changement des noms des actions sur les menus classiques.
*
* Revision 1.8 2004/11/09 17:49:11 jpm
* Mise en conformité et gestion de différentes interfaces d'administration.
*
* Revision 1.7 2004/10/25 16:28:02 jpm
* Correction convention de codage.
*
* Revision 1.6 2004/09/23 17:45:19 jpm
* Amélioration de la gestion des liens annuler et du selecteur de sites.
*
* Revision 1.5 2004/09/23 16:49:24 jpm
* Correction d'une erreur dans l'url de l'ajout de menu commun.
*
* Revision 1.4 2004/07/06 17:24:54 jpm
* Suppression d'inclusions de fichiers inutiles.
*
* Revision 1.3 2004/07/06 17:07:28 jpm
* Modification de la documentation pour une mailleur analyse par PhpDocumentor.
*
* Revision 1.2 2004/06/16 15:06:30 jpm
* Suppression fichier inutile.
*
* Revision 1.1 2004/06/16 15:04:39 jpm
* Changement de nom de Papyrus en Papyrus.
* Changement de l'arborescence.
*
* Revision 1.26 2004/05/10 14:32:21 jpm
* Changement du titre.
*
* Revision 1.25 2004/05/10 12:13:23 jpm
* Ajout de la sélection des sites.
*
* Revision 1.24 2004/05/07 16:33:05 jpm
* Intégration de constantes.
*
* Revision 1.23 2004/05/07 07:23:53 jpm
* Amélioration du code, des commentaires et correction de bogues.
*
* Revision 1.22 2004/05/05 06:45:44 jpm
* Suppression de l'appel de la fonction générant le "vous êtes ici" dans la fonction affichant l'entête de l'application.
*
* Revision 1.21 2004/05/04 16:27:33 jpm
* Réduction de code pour la fonction afficherContenuTete().
*
* Revision 1.20 2004/05/03 11:23:26 jpm
* Début mise en conformité des commentaires.
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/applications/admin_menu/configuration/adme_configuration.inc.php
New file
0,0 → 1,150
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// Copyright (C) 1999-2004 Tela Botanica (accueil@tela-botanica.org)
//
// Ce logiciel est un programme informatique servant à gérer du contenu et des
// applications web.
// Ce logiciel est régi par la licence CeCILL soumise au droit français et
// respectant les principes de diffusion des logiciels libres. Vous pouvez
// utiliser, modifier et/ou redistribuer ce programme sous les conditions
// de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA
// sur le site "http://www.cecill.info".
 
// En contrepartie de l'accessibilité au code source et des droits de copie,
// de modification et de redistribution accordés par cette licence, il n'est
// offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons,
// seule une responsabilité restreinte pèse sur l'auteur du programme, le
// titulaire des droits patrimoniaux et les concédants successifs.
 
// A cet égard l'attention de l'utilisateur est attirée sur les risques
// associés au chargement, à l'utilisation, à la modification et/ou au
// développement et à la reproduction du logiciel par l'utilisateur étant
// donné sa spécificité de logiciel libre, qui peut le rendre complexe à
// manipuler et qui le réserve donc à des développeurs et des professionnels
// avertis possédant des connaissances informatiques approfondies. Les
// utilisateurs sont donc invités à charger et tester l'adéquation du
// logiciel à leurs besoins dans des conditions permettant d'assurer la
// sécurité de leurs systèmes et ou de leurs données et, plus généralement,
// à l'utiliser et l'exploiter dans les mêmes conditions de sécurité.
 
// Le fait que vous puissiez accéder à cet en-tête signifie que vous avez
// pris connaissance de la licence CeCILL, et que vous en avez accepté les
// termes.
// ----
// CVS : $Id: adme_configuration.inc.php,v 1.6 2006-06-28 12:53:34 ddelon Exp $
/**
* Fichier de configuration général de l'application Administrateur de Menus.
*
* Permet de définir certains paramètres valables pour toutes l'application
* Administrateur de Menus.
*
*@package Admin_menu
*@subpackage Configuration
//Auteur original :
*@author Alexandre GRANIER <alexandre@tela-botanica.org>
//Autres auteurs :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.6 $ $Date: 2006-06-28 12:53:34 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTETE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
// +------------------------------------------------------------------------------------------------------+
// | CORPS du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
/** Constante stockant la valeur de la langue par défaut pour l'appli ADME.*/
define('ADME_I18N_DEFAUT', GEN_I18N_ID_DEFAUT);
 
// Chemin des fichiers à inclure.
/** Chemin vers la bibliothèque PEAR.*/
define('ADME_CHEMIN_BIBLIOTHEQUE_PEAR', '');
/** Chemin vers la bibliothèque API.*/
define('ADME_CHEMIN_BIBLIOTHEQUE_API', GEN_CHEMIN_API);
/** Chemin vers la bibliothèque de Papyrus.*/
define('ADME_CHEMIN_BIBLIOTHEQUE_GEN', GEN_CHEMIN_BIBLIO);
 
// Chemin vers les dossiers de l'application
/** Chemin vers l'application Admin Menus de Papyrus.*/
define('ADME_CHEMIN_APPLICATION', GEN_CHEMIN_APPLICATION.'admin_menu/');
/** Chemin vers les images de l'application Admin Menus de Papyrus.*/
define('ADME_CHEMIN_IMAGE_INTERFACE', ADME_CHEMIN_APPLICATION.'presentations/images/interface/');
/** Chemin vers la bibliothèque de l'application Admin Menus de Papyrus.*/
define('ADME_CHEMIN_BIBLIOTHEQUE_ADME', ADME_CHEMIN_APPLICATION.'bibliotheque/');
/** Chemin vers les fichiers de traduction de l'application Admin Menus de Papyrus.*/
define('ADME_CHEMIN_LANGUE', ADME_CHEMIN_APPLICATION.'langues/');
/** Chemin vers les styles de l'application Admin Menus de Papyrus.*/
define('ADME_CHEMIN_STYLE', ADME_CHEMIN_APPLICATION.'presentations/styles/');
 
// Chemin vers le dossier contenant les images des drapeaux des pays
/** Chemin vers le dossier contenant les images i18n l'application Admin Menus de Papyrus.*/
define('ADME_CHEMIN_IMAGE_DRAPEAUX', GEN_CHEMIN_COMMUN.GEN_DOSSIER_GENERIQUE.'/'.GEN_DOSSIER_IMAGE.'/drapeaux/');
 
// Chemin (intégrant le nom du fichier) vers les images de l'interface de l'application
/** Chemin vers l'image ouvrir une branche.*/
define('ADME_IMAGE_PLUS', ADME_CHEMIN_IMAGE_INTERFACE.'adme_ouvrir.png');
/** Chemin vers l'image fermer une branche.*/
define('ADME_IMAGE_MOINS', ADME_CHEMIN_IMAGE_INTERFACE.'adme_fermer.png');
/** Chemin vers l'image voir la définition d'un menu.*/
define('ADME_IMAGE_VOIR', ADME_CHEMIN_IMAGE_INTERFACE.'adme_modifier.png');
/** Chemin vers l'image monter un menu.*/
define('ADME_IMAGE_FLECHE_HAUT', ADME_CHEMIN_IMAGE_INTERFACE.'adme_monter.png');
/** Chemin vers l'image descendre un menu.*/
define('ADME_IMAGE_FLECHE_BAS', ADME_CHEMIN_IMAGE_INTERFACE.'adme_descendre.png');
/** Chemin vers l'image diminuer un menu.*/
define('ADME_IMAGE_FLECHE_GAUCHE', ADME_CHEMIN_IMAGE_INTERFACE.'adme_diminuer.png');
/** Chemin vers l'image augmenter un menu.*/
define('ADME_IMAGE_FLECHE_DROITE', ADME_CHEMIN_IMAGE_INTERFACE.'adme_augmenter.png');
/** Chemin vers l'image supprimer un menu.*/
define('ADME_IMAGE_SUPPRIMER', ADME_CHEMIN_IMAGE_INTERFACE.'adme_supprimer.png');
/** Chemin vers l'image ajouter un menu.*/
define('ADME_IMAGE_NOUVEAU', ADME_CHEMIN_IMAGE_INTERFACE.'adme_ajouter.png');
/** Chemin vers l'image accéder à l'interface d'administration de l'application du menu courant.*/
define('ADME_IMAGE_TEXTE', ADME_CHEMIN_IMAGE_INTERFACE.'adme_administrer.png');
/** Chemin vers l'image choix d'une traduction par défaut */
define('ADME_IMAGE_TRADUCTION_DEFAUT',ADME_CHEMIN_IMAGE_INTERFACE.'adme_radio_off.png');
 
/** Chemin vers l'image traduction par défaut */
define('ADME_IMAGE_TRADUCTION_DEFAUT_AFFICHAGE',ADME_CHEMIN_IMAGE_INTERFACE.'adme_radio_on.png');
 
 
// Nom des classes des images
/** Constante stockant le nom de la classe des fichiers icônes de 16x16px de ADME.*/
define('ADME_CLASS_IMG_ICONE', 'adme_img_icone');
/** Constante stockant le nom de la classe des fichiers plier-déplier de 9x9px de ADME.*/
define('ADME_CLASS_IMG_PD', 'adme_img_plier_deplier');
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.5 2005/07/08 21:13:15 ddelon
* Gestion indentation menu
*
* Revision 1.4 2004/11/09 13:00:06 jpm
* Changement de noms des images.
*
* Revision 1.3 2004/11/09 12:51:16 jpm
* Ajout de commentaires.
*
* Revision 1.2 2004/07/06 17:07:42 jpm
* Modification de la documentation pour une mailleur analyse par PhpDocumentor.
*
* Revision 1.1 2004/06/16 14:39:44 jpm
* Changement de nom de Génésia en Papyrus.
* Changement de l'arborescence.
*
* Revision 1.7 2004/05/07 16:32:46 jpm
* Correction erreur de chemin.
*
* Revision 1.6 2004/05/07 09:53:58 jpm
* Ajout de commentaires et de nouvelles constantes.
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/applications/admin_site/admin_site.php
New file
0,0 → 1,408
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library 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 |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
/**
* Application Administrateur de Papyrus.
*
* Application permettant de gérer actulement les projets et la mise en cache des pages.
* Dans l'avenir la gestion via l'interface d'administration des fichiers CSS et
* des Squelettes pourrait être envisagée.
* Cette application peut prendre 1 des 3 arguments ci-dessous lors de son appel par un menu de Papyrus :
* - site : pour indiquer que l'on veut gérer les sites
* - cache : pour indiquer que l'on veut gérer le cache
* Liste des paquetages Pear nécessaire à cette application :
* - DB
* - Auth
* - Net_URL
*
*@package Admin_site
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author Alexandre GRANIER <alexandre@tela-botanica.org>
*@author Laurent COUDOUNEAU <lc@gsite.org>
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.12 $ $Date: 2006-10-06 10:40:51 $
// +------------------------------------------------------------------------------------------------------+
//
// $Id: admin_site.php,v 1.12 2006-10-06 10:40:51 florian Exp $
// FICHIER : $RCSfile: admin_site.php,v $
// AUTEUR : $Author: florian $
// VERSION : $Revision: 1.12 $
// DATE : $Date: 2006-10-06 10:40:51 $
// +------------------------------------------------------------------------------------------------------+
**/
// +------------------------------------------------------------------------------------------------------+
// | ENTÊTE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
// Note : cette application fait appel à des fonctions présentent dans la bibliotheque de Papyrus.
 
/** Inclusion du fichier de configuration de cette application.*/
require_once GEN_CHEMIN_APPLICATION.'admin_site/configuration/adsi_configuration.inc.php';
 
 
 
// Inclusion des fichiers de traduction de l'appli ADSI de Papyrus
if (file_exists(ADSI_CHEMIN_LANGUE.'adsi_langue_'.$GLOBALS['_GEN_commun']['i18n'].'.inc.php')) {
require_once ADSI_CHEMIN_LANGUE.'adsi_langue_'.$GLOBALS['_GEN_commun']['i18n'].'.inc.php';
} else {
require_once ADSI_CHEMIN_LANGUE.'adsi_langue_'.ADSI_I18N_DEFAUT.'.inc.php';
}
 
/** Inclusion de la bibliothèque PEAR de conception de formulaire.*/
require_once ADSI_CHEMIN_BIBLIOTHEQUE_PEAR.'HTML/QuickForm.php';
require_once ADSI_CHEMIN_BIBLIOTHEQUE_PEAR.'HTML/QuickForm/element.php';
 
 
/** Inclusion de l'API de fonctions gérant les erreurs sql.*/
require_once ADSI_CHEMIN_BIBLIOTHEQUE_API.'debogage/BOG_sql.fonct.php';
 
/** Inclusion des fonctions de manipulation du sql.
* Permet la récupération d'un nouvel identifiant d'une table.*/
require_once ADSI_CHEMIN_BIBLIOTHEQUE_API.'sql/SQL_manipulation.fonct.php';
 
/** Inclusion des fonctions de manipulation de fichiers et dossiers.
* Permet la suppression d'un dossier et de son contenu.*/
require_once ADSI_CHEMIN_BIBLIOTHEQUE_API.'fichier/FIC_manipulation.fonct.php';
 
/** Inclusion de la bibliothèque de fonctions concernant les tables "gen_menu..." de Papyrus.
* Permet d'inclure la fonction d'affichage du "Vous êtes ici".*/
require_once ADSI_CHEMIN_BIBLIOTHEQUE_GEN.'pap_menu.fonct.php';
 
/** Inclusion de la bibliothèque de fonctions concernant les tables "gen_site..." de Papyrus.*/
require_once ADSI_CHEMIN_BIBLIOTHEQUE_GEN.'pap_site.fonct.php';
 
/** Inclusion de la bibliotheque de fonction gérant l'affichage de l'application Administrateur.*/
require_once ADSI_CHEMIN_BIBLIOTHEQUE_ADSI.'adsi_affichage.fonct.php';
 
/** Inclusion de la bibliotheque de fonction gérant l'administration des sites de Papyrus.*/
require_once ADSI_CHEMIN_BIBLIOTHEQUE_ADSI.'adsi_site.fonct.php';
 
 
 
///** Inclusion de la bibliotheque de fonction gérant l'administration du cache de Papyrus.*/
//require_once ADSI_CHEMIN_BIBLIOTHEQUE_ADSI.'adsi_cache.fonct.php';
 
///** Inclusion de la bibliotheque de fonction gérant l'administration des squelettes des sites de Papyrus.*/
//require_once ADSI_CHEMIN_BIBLIOTHEQUE_ADSI.'adsi_squelette.fonct.php';
 
///** Inclusion de la bibliotheque de fonction gérant l'administration des feuilles de styles des sites de Papyrus.*/
//require_once ADSI_CHEMIN_BIBLIOTHEQUE_ADSI.'adsi_style.fonct.php';
 
// +------------------------------------------------------------------------------------------------------+
// | CORPS du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
/** Fonction afficherContenuTete() - Fonction appelé par le gestionnaire Papyrus.
*
* Elle retourne l'entête de l'application..
*
* @return string du code XHTML correspondant à la zone d'entête de l'application.
*/
function afficherContenuTete()
{
return '';
}
 
/** Fonction afficherContenuCorps() - Retourne le contenu XHTML à afficherdans la zone contenu corps.
*
* Cette fonction retourne le contenu final d'un appel à l'application Administrateur.
* Cette fonction peut être appelé par Papyrus où depuis n'importe quel autre interface.
*
* @return string le contenu xhtml généré par l'application Administrateur et devant être affiché.
*/
function afficherContenuCorps()
{
 
// +----------------------------------------------------------------------------------------------+
// Initialisation des variables
// +----------------------------------------------------------------------------------------------+
// Objet Pear Auth
$objet_pear_auth =& $GLOBALS['_GEN_commun']['pear_auth'];
// +----------------------------------------------------------------------------------------------+
// Gestion de l'URL pour revenir sur le menu courant.
$url = $GLOBALS['_GEN_commun']['url']->getUrl();
// +----------------------------------------------------------------------------------------------+
if ($objet_pear_auth->getAuth()) {
// +----------------------------------------------------------------------------------------------+
// Initialisation des variables.
$sortie_xhtml = '';// Le XHTML à renvoyer.// Ancien nom : $outputText
$msg = '';
// +----------------------------------------------------------------------------------------------+
// Arguments passé par le menu de Papyrus à l'application l'Administrateur de site.
// Initialisation des variables qui contiendront les arguments
$id_site_a_administrer = '';
$bool_site = false;
$bool_auth = false;
$bool_cache = false;
$bool_squelette = false;
$bool_style = false;
// Instantciation des variables arguments
if (isset($GLOBALS['_GEN_commun']['info_application']->id_site)) {
$id_site_a_administrer = $GLOBALS['_GEN_commun']['info_application']->id_site;
}
if (isset($GLOBALS['_GEN_commun']['info_application']->bool_site) && $GLOBALS['_GEN_commun']['info_application']->bool_site == 'true') {
// Interface d'administration des sites
$bool_site = true;
}
if (isset($GLOBALS['_GEN_commun']['info_application']->bool_auth) && $GLOBALS['_GEN_commun']['info_application']->bool_auth == 'true') {
// Interface d'administration du cache d'un site
$bool_cache = true;
}
if (isset($GLOBALS['_GEN_commun']['info_application']->bool_cache) && $GLOBALS['_GEN_commun']['info_application']->bool_cache == 'true') {
// Interface d'administration du cache d'un site
$bool_cache = true;
}
if (isset($GLOBALS['_GEN_commun']['info_application']->bool_squelette) && $GLOBALS['_GEN_commun']['info_application']->bool_squelette == 'true') {
// Interface d'administration du fichier squelette d'un site
$bool_squelette = true;
}
if (isset($GLOBALS['_GEN_commun']['info_application']->bool_style) && $GLOBALS['_GEN_commun']['info_application']->bool_style == 'true') {
// Interface d'administration du fichier de styles d'un site
$bool_style = true;
}
// Si aucun argument transmis on affiche l'interface de gestion des sites
if ( !($bool_site && $bool_cache && $bool_squelette && $bool_style) ) {
$bool_site = true;
}
// +----------------------------------------------------------------------------------------------+
// Gestion des sites...
if ($bool_site) {
if (isset($_POST['form_sites_ajouter'])) {
// Nous voulons le formulaire d'ajout d'un site
$sortie_xhtml .= ADMIN_afficherFormSite($GLOBALS['_GEN_commun']['pear_db'], $url);
return $sortie_xhtml;
} else if (isset($_POST['site_enregistrer'])) {
// Nous cherchons à enregistrer un site
$message = ADMIN_validerFormSite($GLOBALS['_GEN_commun']['pear_db'], $_POST);
if (!empty($message)) {
// Les données ne sont pas valide. Nous retournons le formulaires avec les messages d'erreurs.
$sortie_xhtml .= ADMIN_afficherFormSite($GLOBALS['_GEN_commun']['pear_db'], $url, $_POST, $message);
} else {
// Les données sont valide. Nous les enregistrons et retournons au formulaire de départ.
$message = ADMIN_enregistrerSite($GLOBALS['_GEN_commun']['pear_db'], $_POST, $objet_pear_auth->getAuthData('ga_id_administrateur'));
$sortie_xhtml .= ADMIN_afficherFormListeSites($GLOBALS['_GEN_commun']['pear_db'], $url, $message);
}
return $sortie_xhtml;
} else if (isset($_POST['form_sites_modifier'])) {
// Nous cherchons à modifier un site
$message = ADMIN_validerFormListesSites($GLOBALS['_GEN_commun']['pear_db'], $_POST);
if (!empty($message)) {
// Les données ne sont pas valide. Nous retournons le formulaires avec les messages d'erreurs.
$sortie_xhtml .= ADMIN_afficherFormListeSites($GLOBALS['_GEN_commun']['pear_db'], $url, $message);
} else {
// Les données sont valide. Nous affichons le formulaire de modification.
$sortie_xhtml .= ADMIN_afficherFormSite($GLOBALS['_GEN_commun']['pear_db'], $url, $_POST, $message);
}
return $sortie_xhtml;
} else if (isset($_POST['site_modifier'])) {
// Nous cherchons à enregistrer les modification d'un site
$message = ADMIN_validerFormSite($GLOBALS['_GEN_commun']['pear_db'], $_POST);
if (!empty($message)) {
// Les données ne sont pas valide. Nous retournons le formulaires avec les messages d'erreurs.
$sortie_xhtml .= ADMIN_afficherFormSite($GLOBALS['_GEN_commun']['pear_db'], $url, $_POST, $message);
} else {
// Les données sont valide. Nous les enregistrons et retournons au formulaire de départ.
$message = ADMIN_modifierSite($GLOBALS['_GEN_commun']['pear_db'], $_POST, $objet_pear_auth->getAuthData('ga_id_administrateur'));
$sortie_xhtml .= ADMIN_afficherFormListeSites($GLOBALS['_GEN_commun']['pear_db'], $url, $message);
}
return $sortie_xhtml;
} else if (isset($_POST['form_sites_supprimer'])) {
// Nous cherchons à supprimer un site
$message = ADMIN_validerFormListesSites($GLOBALS['_GEN_commun']['pear_db'], $_POST);
if (!empty($message)) {
// Les données ne sont pas valide. Nous retournons le formulaires avec les messages d'erreurs.
$sortie_xhtml .= ADMIN_afficherFormListeSites($GLOBALS['_GEN_commun']['pear_db'], $url, $message);
} else {
// Les données sont valide. Nous supprimons et retournons au formulaire de départ.
$message = ADMIN_supprimerSite($GLOBALS['_GEN_commun']['pear_db'], $_POST);
$sortie_xhtml .= ADMIN_afficherFormListeSites($GLOBALS['_GEN_commun']['pear_db'], $url, $message);
}
return $sortie_xhtml;
} else if (isset($_POST['form_sites_traduire'])) {
// Nous cherchons à traduire un site
$message = ADMIN_validerFormListesSites($GLOBALS['_GEN_commun']['pear_db'], $_POST);
if ((!empty($message))) {
// Les données ne sont pas valide. Nous retournons le formulaires avec les messages d'erreurs.
$sortie_xhtml .= ADMIN_afficherFormListeSites($GLOBALS['_GEN_commun']['pear_db'], $url, $message);
} else {
$message = ADMIN_verifier_traduction_possible($GLOBALS['_GEN_commun']['pear_db'], $_POST);
if ((!empty($message))) {
// Les données ne sont pas valide. Nous retournons le formulaires avec les messages d'erreurs.
$sortie_xhtml .= ADMIN_afficherFormListeSites($GLOBALS['_GEN_commun']['pear_db'], $url, $message);
}
else {
// Les données sont valide. Nous affichons le formulaire de traduction
$sortie_xhtml .= ADMIN_afficherFormSite($GLOBALS['_GEN_commun']['pear_db'], $url, $_POST, $message);
}
}
return $sortie_xhtml;
} else if (isset($_POST['site_traduire'])) {
// Nous cherchons à enregistrer la traduction d'un site
$message = ADMIN_validerFormSite($GLOBALS['_GEN_commun']['pear_db'], $_POST);
$message='';
if (!empty($message)) {
// Les données ne sont pas valide. Nous retournons le formulaires avec les messages d'erreurs.
$sortie_xhtml .= ADMIN_afficherFormSite($GLOBALS['_GEN_commun']['pear_db'], $url, $_POST, $message);
} else {
// Les données sont valide. Nous les enregistrons et retournons au formulaire de départ.
$message = ADMIN_traduireSite($GLOBALS['_GEN_commun']['pear_db'], $_POST, $objet_pear_auth->getAuthData('ga_id_administrateur'));
$sortie_xhtml .= ADMIN_afficherFormListeSites($GLOBALS['_GEN_commun']['pear_db'], $url, $message);
}
return $sortie_xhtml;
} else if (isset($_POST['form_annuler'])) {
// Retour à la liste des sites
$sortie_xhtml .= ADMIN_afficherFormListeSites($GLOBALS['_GEN_commun']['pear_db'], $url);
return $sortie_xhtml;
} else {
// Liste des sites
$sortie_xhtml .= ADMIN_afficherFormListeSites($GLOBALS['_GEN_commun']['pear_db'], $url);
}
}
// +----------------------------------------------------------------------------------------------+
// Gestion du cache... A FAIRE
if ($bool_cache) {
}
// +----------------------------------------------------------------------------------------------+
// Gestion des squelettes... A FAIRE
if ($bool_squelette) {
}
// +----------------------------------------------------------------------------------------------+
// Gestion des styles... A FAIRE
if ($bool_style) {
}
return $sortie_xhtml;
} else {
// L'utilisateur n'est pas identifie, nous lui demandons de le faire.
$res='';
$res .= '<p class="zone_alert">'.ADSI_IDENTIFIEZ_VOUS.'</p>'."\n" ;
$res .= '<form id="form_connexion" style="clear:both;" class="form_identification" action="' ;
$res .= $url;
$res .= '" method="post">
<fieldset>
<legend>Identifiez vous</legend>
<label for="username">Courriel : </label>
<input type="text" id="username" name="username" maxlength="80" tabindex="1" value="courriel" />
<label for="password">Mot de passe : </label>
<input type="password" id="password" name="password" maxlength="80" tabindex="2" value="mot de passe" />
<input type="submit" id="connexion" name="connexion" tabindex="3" value="ok" />
</fieldset>
</form>';
return $res ;
}
}//Fin de la fonction afficherContenuCorps().
 
/* +--Fin du code ---------------------------------------------------------------------------------------+
* $Log: not supported by cvs2svn $
* Revision 1.11 2006/03/15 23:35:25 ddelon
* Gestion site
*
* Revision 1.10 2006/03/02 10:49:49 ddelon
* Fusion branche multilinguisme dans branche principale
*
* Revision 1.9.2.2 2006/02/28 14:02:09 ddelon
* Finition multilinguisme
*
* Revision 1.9.2.1 2006/01/19 21:26:20 ddelon
* Multilinguisme site + bug ftp
*
* Revision 1.9 2005/04/08 13:28:43 jpm
* Utiliation de références.
*
* Revision 1.8 2005/02/28 13:09:17 jpm
* Correction bogue : virgule manquante.
*
* Revision 1.7 2005/02/28 11:07:05 jpm
* Modification des auteurs.
*
* Revision 1.6 2005/02/28 10:58:38 jpm
* Suppression de code inutile.
*
* Revision 1.5 2005/02/28 10:32:06 jpm
* Changement de nom de dossier.
*
* Revision 1.4 2004/12/03 19:22:57 jpm
* Gestion des types de sites externes gérés par Papyrus.
*
* Revision 1.3 2004/10/18 18:27:37 jpm
* Correction problèmes FTP et manipulation de fichiers.
*
* Revision 1.2 2004/07/06 17:08:14 jpm
* Modification de la documentation pour une mailleur analyse par PhpDocumentor.
*
* Revision 1.1 2004/06/16 14:20:39 jpm
* Changement de nom de Génésia en Papyrus.
* Changement de l'arborescence.
*
* Revision 1.23 2004/05/10 12:23:26 jpm
* Correction mineure.
*
* Revision 1.22 2004/05/07 16:33:18 jpm
* Intégration de constantes.
*
* Revision 1.21 2004/05/07 07:23:03 jpm
* Ajout de la gestion des modification et suppression de site. Amélioration de la création des sites.
*
* Revision 1.20 2004/05/05 06:45:36 jpm
* Suppression de l'appel de la fonction générant le "vous êtes ici" dans la fonction affichant l'entête de l'application.
*
* Revision 1.19 2004/05/04 16:28:30 jpm
* Réduction de code pour la fonction afficherContenuTete().
*
* Revision 1.18 2004/04/30 16:22:59 jpm
* Poursuite de l'administration des sites.
*
* Revision 1.17 2004/04/22 08:33:11 jpm
* Transformation de $GS_GLOBAL en $_GEN_commun.
*
* Revision 1.16 2004/04/09 16:24:08 jpm
* Prise en compte des tables i18n.
*
* Revision 1.15 2004/04/02 16:37:09 jpm
* Modification de la gestion des actions d'administration.
* Ajout de commentaires.
*
* Revision 1.14 2004/03/31 16:58:15 jpm
* Changement des chemins d'accès aux fichiers à inclure.
*
* Revision 1.13 2004/03/24 10:07:04 jpm
* Ajout des commentaires d'entête.
* Début mise en conformité avec la convention de codage.
* Déplacement de la fonction d'affichage du xhtml dans la bibliothèque de fonctions.
*
* +--Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/applications/admin_site/configuration/adsi_configuration.inc.php
New file
0,0 → 1,90
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library 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 |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: adsi_configuration.inc.php,v 1.5 2006-03-22 13:18:00 alexandre_tb Exp $
/**
* Fichier de configuration général de l'application Administrateur de sites.
*
* Permet de définir certains paramètres valables pour toutes l'application
* Administrateur de sites.
*
*@package Admin_site
*@subpackage Configuration
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author Aucun
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.5 $ $Date: 2006-03-22 13:18:00 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTETE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
// +------------------------------------------------------------------------------------------------------+
// | CORPS du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
// Chemin des fichiers à inclure.
/** <br> Chemin vers le dossier de Pear.*/
define('ADSI_CHEMIN_BIBLIOTHEQUE_PEAR','');
/** <br> Chemin vers le dossier des API.*/
define('ADSI_CHEMIN_BIBLIOTHEQUE_API', GEN_CHEMIN_API);
/** <br> Chemin vers le dossier des bibliothèques de l'appli Papyrus.*/
define('ADSI_CHEMIN_BIBLIOTHEQUE_GEN', GEN_CHEMIN_BIBLIO);
/** <br> Chemin vers le dossier des bibliothèques de l'appli Admin sites.*/
define('ADSI_CHEMIN_BIBLIOTHEQUE_ADSI', GEN_CHEMIN_APPLICATION.'admin_site/bibliotheque/');
 
// Chemin vers les dossiers de l'application
/** Chemin vers l'application Admin Site de Papyrus.*/
define('ADSI_CHEMIN_APPLICATION', GEN_CHEMIN_APPLICATION.'admin_site/');
/** Chemin vers les fichiers de traduction de l'application Admin Auth de Papyrus.*/
define('ADSI_CHEMIN_LANGUE', ADSI_CHEMIN_APPLICATION.'langues/');
 
define ('ADSI_I18N_DEFAUT', 'fr');
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.4 2006/03/02 10:49:49 ddelon
* Fusion branche multilinguisme dans branche principale
*
* Revision 1.3.2.1 2006/02/28 14:02:11 ddelon
* Finition multilinguisme
*
* Revision 1.3 2005/02/28 10:59:38 jpm
* Modification des commentaires.
*
* Revision 1.2 2004/07/06 17:08:20 jpm
* Modification de la documentation pour une mailleur analyse par PhpDocumentor.
*
* Revision 1.1 2004/06/16 14:20:28 jpm
* Changement de nom de Génésia en Papyrus.
* Changement de l'arborescence.
*
* Revision 1.1 2004/05/07 08:21:39 jpm
* Ajout des constantes de définition des chemins des fichiers à inclure.
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/applications/admin_site/bibliotheque/adsi_affichage.fonct.php
New file
0,0 → 1,107
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library 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 |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: adsi_affichage.fonct.php,v 1.5 2005-02-28 11:07:00 jpm Exp $
/**
* Bibliothèque de fonctions de construction du xhtml de l'application Administrateur de Sites.
*
* Contient un ensemble de fonctions permettant à l'application Administrateur de Sites de généré son xhtml.
*
*@package Admin_site
*@subpackage Fonctions
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author Alexandre GRANIER <alexandre@tela-botanica.org>
*@author Laurent COUDOUNEAU <lc@gsite.org>
*@copyright Tela-Botanica 2000-2004
*@version $Date: 2005-02-28 11:07:00 $
// +------------------------------------------------------------------------------------------------------+
**/
 
// +------------------------------------------------------------------------------------------------------+
// | LISTE des FONCTIONS |
// +------------------------------------------------------------------------------------------------------+
 
/** Fonction ADMIN_contruirePage()- Génére le xhtml d'une page de l'application administrateur.
*
* Cette fonction formate de la même façon toutes les pages de l'application Administrateur
* avant de les renvoyer.
*
* @param string le titre du contenu de la page.
* @param string le corps du contenu de la page.
* @param string un message important à destination de l'utilisateur.
* return string le code XHTML à retourner.
*/
function ADMIN_contruirePage($titre, $texte, $message = '')
{
// Page.
$sortie = '';
$sortie .= "\n";
$sortie .= '<!-- Application page -->'."\n";
$sortie .= str_repeat(' ', 12).'<h1>'.$titre.'</h1>'."\n";
if (! empty ($message)) {
$sortie .= $message;
}
$sortie .= $texte."\n";
return $sortie;
}
 
// +- Fin du code source --------------------------------------------------------------------------------+
/*
* $Log: not supported by cvs2svn $
* Revision 1.4 2005/02/28 10:59:07 jpm
* Modification des commentaires et copyright.
*
* Revision 1.3 2005/02/28 10:40:49 jpm
* Suppression d'une fonction inutile.
*
* Revision 1.2 2004/07/06 17:08:01 jpm
* Modification de la documentation pour une mailleur analyse par PhpDocumentor.
*
* Revision 1.1 2004/06/16 14:23:01 jpm
* Changement de nom de Génésia en Papyrus.
* Changement de l'arborescence.
*
* Revision 1.6 2004/05/07 16:33:39 jpm
* Modification de commentaires.
*
* Revision 1.5 2004/04/30 16:22:53 jpm
* Poursuite de l'administration des sites.
*
* Revision 1.4 2004/04/02 16:36:35 jpm
* Ajout d'une fonction générant des boutons pour les formulaires.
*
* Revision 1.3 2004/04/01 11:21:41 jpm
* Ajout et modification de commentaires pour PhpDocumentor.
*
* Revision 1.2 2004/03/24 20:02:25 jpm
* Modification de l'indentation du xhtml renvoyé.
*
* Revision 1.1 2004/03/24 10:01:33 jpm
* Changement de nom de la bibliothèque de fonction d'affichage du xhtml.
*
* Revision 1.1 2004/03/24 10:00:11 jpm
* Transfert de la fonction de contruction du xhtml de l'application dans ce fichier.
*
*
*/
/branches/v1.0-menes/papyrus/applications/admin_site/bibliotheque/adsi_site.fonct.php
New file
0,0 → 1,1968
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library 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 |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: adsi_site.fonct.php,v 1.32.2.1 2007-03-19 14:57:44 alexandre_tb Exp $
/**
* Bibliothèque de fonctions d'admininistration des projets
*
* Contient un ensemble de fonctions permettant à l'application Administrateur de Papyrus, de modifier des informations
* sur les projets (=sites gérés par Papyrus).
*
*@package Admin_site
*@subpackage Fonctions
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author Alexandre GRANIER <alexandre@tela-botanica.org>
*@author Laurent COUDOUNEAU <lc@gsite.org>
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.32.2.1 $ $Date: 2007-03-19 14:57:44 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTÊTE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
if (GEN_FTP_UTILISE) {
/** Inclusion bibliothèque de PEAR gérant le FTP.*/
require_once ADSI_CHEMIN_BIBLIOTHEQUE_PEAR.'Net/FTP.php';
}
 
// +------------------------------------------------------------------------------------------------------+
// | CORPS du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
/** Fonction ADMIN_afficherListeSites()- Génére le xhtml permettant de choisir un site parmis une liste.
*
* Cette fonction fournie une liste des sites principaux gérés par Génésia.
*
* @param string l'objet Pear DB.
* @param string l'url de la page à laquelle renvoyer le formulaire.
* @param string un message important à destination de l'utilisateur.
* return string le code XHTML à retourner.
*/
function ADMIN_afficherFormListeSites(&$db, $url, $message = '')
{
$id_langue = $GLOBALS['_GEN_commun']['i18n']; //identifiant de la langue choisie
// Langue en cours : langue choisie ou langue par defaut (principale)
if (isset($id_langue) && ($id_langue!='')) {
$langue_test=$id_langue;
} else {
$langue_test=GEN_I18N_ID_DEFAUT;
}
 
// Liste des sites principaux :
// Recherche de tous les sites langue en cours
$requete = 'SELECT * '.
'FROM gen_site, gen_site_relation '.
'WHERE gsr_id_site_01 = gsr_id_site_02 '.
'AND gsr_id_site_01 = gs_id_site '.
'AND gsr_id_valeur IN (102, 103) '.
'AND gs_ce_i18n = "'.$langue_test.'" '.
'ORDER BY gsr_ordre';
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;
$liste_site=array();
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
if ($langue_test == GEN_I18N_ID_DEFAUT) {
$requete_est_traduction = 'SELECT gsr_id_site_01 '.
'FROM gen_site_relation '.
'WHERE '.$ligne->gs_id_site.' = gsr_id_site_02 ' .
'AND gsr_id_site_01 <> gsr_id_site_02 ' .
'AND gsr_id_valeur = 1 ';// 1 = "avoir traduction"
$resultat_est_traduction = $db->query($requete_est_traduction);
(DB::isError($resultat_est_traduction))
? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_est_traduction->getMessage(), $requete_est_traduction))
: '';
if ( $resultat_est_traduction->numRows() == 0 ) {
$liste_site[]=$ligne;
}
}
else {
$liste_site[]=$ligne;
}
}
$resultat->free();
// Si la langue en cours n'est pas la langue par défaut, recherche des sites ayant comme langue
// la langue par defaut, non traduits dans la langue en cours et n'etant pas des traductions
if ($langue_test != GEN_I18N_ID_DEFAUT) {
 
$requete = 'SELECT * '.
'FROM gen_site, gen_site_relation '.
'WHERE gsr_id_site_01 = gsr_id_site_02 '.
'AND gs_id_site = gsr_id_site_01 '.
'AND gsr_id_valeur IN (102, 103) '.
'AND gs_ce_i18n = "'.GEN_I18N_ID_DEFAUT.'" '.
'ORDER BY gs_code_num ASC';// 102 = site "principal" et 103 = site "externe"
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
// Recherche de tous les sites de la langue principale qui ne sont pas traduits dans la langue en cours
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
$requete_est_traduction = 'SELECT gsr_id_site_01 '.
'FROM gen_site_relation '.
'WHERE '.$ligne->gs_id_site.' = gsr_id_site_02 ' .
'AND gsr_id_site_01 <> gsr_id_site_02 ' .
'AND gsr_id_valeur = 1 ';// 1 = "avoir traduction"
$resultat_est_traduction = $db->query($requete_est_traduction);
(DB::isError($resultat_est_traduction))
? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_est_traduction->getMessage(), $requete_est_traduction))
: '';
if ( $resultat_est_traduction->numRows() == 0 ) {
if (isset($id_langue) && ($id_langue!='')) {
$langue_test=$id_langue;
} else {
$langue_test=GEN_I18N_ID_DEFAUT;
}
$requete_traduction = 'SELECT gsr_id_site_01 '.
'FROM gen_site_relation, gen_site '.
'WHERE '.$ligne->gs_id_site.' = gsr_id_site_01 ' .
'AND gsr_id_site_02 = gs_id_site '.
'AND gs_ce_i18n = "'.$langue_test.'" '.
'AND gsr_id_valeur = 1 ';// 1 = "avoir traduction"
$resultat_traduction = $db->query($requete_traduction);
(DB::isError($resultat_traduction))
? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_traduction->getMessage(), $requete_traduction))
: '';
if ( $resultat_traduction->numRows() == 0 ) {
$liste_site []=$ligne;
}
$resultat_traduction->free();
}
$resultat_est_traduction->free();
}
$resultat->free();
}
//----------------------------------------------------------------------------
// Création du formulaire
$form =& new HTML_QuickForm('form_sites', 'post', str_replace('&amp;', '&', $url));
$tab_index = 1000;
$squelette =& $form->defaultRenderer();
$squelette->setFormTemplate("\n".'<form{attributes}>'."\n".'{content}'."\n".'</form>'."\n");
$squelette->setElementTemplate( '<li>'."\n".'{label}'."\n".'{element}'."\n".
'<!-- BEGIN required --><span class="symbole_obligatoire">*</span><!-- END required -->'."\n".
'<!-- BEGIN error --><span class="erreur">{error}</span><!-- END error -->'."\n".
'</li>'."\n");
$squelette->setRequiredNoteTemplate("\n".'<p>'."\n".'<span class="symbole_obligatoire">*</span> {requiredNote}'."\n".'</p>'."\n");
$partie_site_debut = '<fieldset>'."\n".
'<legend>Listes des sites</legend>'."\n".
'<ul>'."\n";
$form->addElement('html', $partie_site_debut);
$aso_options = array();
foreach ($liste_site as $ligne ) {
$aso_options[$ligne->gs_id_site] = htmlentities($ligne->gs_nom.' ('.$ligne->gs_code_alpha.')');
// Affichage des traductions
$requete_traduction = 'SELECT * '.
'FROM gen_site_relation, gen_site '.
'WHERE '.$ligne->gs_id_site.' = gsr_id_site_01 ' .
'AND gsr_id_site_02 <> gsr_id_site_01 '.
'AND gsr_id_site_02 = gs_id_site '.
'AND gsr_id_valeur = 1 ';// 1 = "avoir traduction"
$resultat_traduction = $db->query($requete_traduction);
(DB::isError($resultat_traduction))
? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_traduction->getMessage(), $requete_traduction))
: '';
while ($ligne_traduction = $resultat_traduction->fetchRow(DB_FETCHMODE_OBJECT)) {
$aso_options[$ligne_traduction->gs_id_site] = '&nbsp;&nbsp;&nbsp;'.$ligne_traduction->gs_ce_i18n.":&nbsp;".htmlentities($ligne_traduction->gs_nom.' ('.$ligne_traduction->gs_code_alpha.')');
}
$resultat_traduction->free();
}
$id = 'form_sites_id_site';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++);
$label = '<label for="'.$id.'">'.'Listes des sites : '.'</label>';
$form->addElement('select', $id, $label, $aso_options, $aso_attributs);
$partie_site_fin = '</ul>'."\n".
'</fieldset>'."\n";
$form->addElement('html', $partie_site_fin);
$liste_bouton_debut = '<ul class="liste_bouton">'."\n";
$form->addElement('html', $liste_bouton_debut);
$id = 'form_sites_ajouter';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++);
$label = 'Ajouter';
$form->addElement('submit', $id, $label, $aso_attributs);
$id = 'form_sites_modifier';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++);
$label = 'Modifier';
$form->addElement('submit', $id, $label, $aso_attributs);
 
$id = 'form_sites_traduire';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++);
$label = 'Traduire';
$form->addElement('submit', $id, $label, $aso_attributs);
$id = 'form_sites_supprimer';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'onclick' => 'javascript:return confirm(\''.'Êtes vous sûr de vouloir supprimer ce site ?'.'\');');
$label = 'Supprimer';
$form->addElement('submit', $id, $label, $aso_attributs);
$liste_bouton_fin = '</ul>'."\n";
$form->addElement('html', $liste_bouton_fin);
$sortie = $form->toHTML()."\n";
// Titre de la page:
$titre = 'Configuration des sites';
// Construction de la page.
return ADMIN_contruirePage($titre, $sortie, $message);
}
 
/** Fonction ADMIN_validerFormListesSites() - Valide les données issues du formulaire de liste de sites.
*
* Cette fonction valide les données du formulaire de liste de site.
*
* @param string l'objet pear de connexion à la base de données.
* @param string le tableau contenant les valeurs du formulaire.
* @return string retourne les messages d'erreurs sinon rien.
*/
function ADMIN_validerFormListesSites(&$db, $aso_valeurs)
{
$message = '';
// Validation des données du formulaire
if (empty($aso_valeurs['form_sites_id_site'])) {
$message .= '<p class="pap_erreur">Vous devez d\'abord sélectionner un site.</p>';
}
return $message;
}
 
/** Fonction ADMIN_afficherFormSite()- Génére un formulaire pour gen_site.
*
* Cette fonction retourne un formulaire pour modification ou pour ajout.
*
* @param string l'objet pear de connexion à la base de données.
* @param string l'url à laquelle renvoyer le formulaire.
* @param string le tableau contenant les valeurs du formulaire.
* @param string un message à destination de l'utilisateur.
* return string le code XHTML à retourner.
*/
function ADMIN_afficherFormSite(&$db, $url, $aso_valeurs = array(), $message = '')
{
// Initialisation des valeurs
$sortie = '';
$aso_valeurs['modification'] = false;
$aso_valeurs['traduction'] = false;
$aso_valeurs['defaut'] = false;
$aso_valeurs['type_site_externe'] = 0;
// Nous cherchons à savoir si nous somme en modification
if ((isset($aso_valeurs['form_sites_modifier'])) || (isset($aso_valeurs['form_sites_traduire']))) {
if ((isset($aso_valeurs['form_sites_modifier']))) {
$as_val['modification'] = true;
$as_val['traduction'] = false;
}
else {
$as_val['traduction'] = true;
$as_val['modification'] = false;
}
if ($as_val['traduction']) {
// Traduction d'un site principal uniquement :
$requete = 'SELECT * '.
'FROM gen_site_relation '.
'WHERE gsr_id_site_02 = '.$aso_valeurs['form_sites_id_site'].' '.
'AND gsr_id_valeur =1 '; // 1 = "avoir traduction"
$resultat = $db->query($requete);
if (DB::isError($resultat)) {
die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
}
if ( $resultat->numRows() == 0 ) {
$site_id = $aso_valeurs['form_sites_id_site'];
}
else {
$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
$site_id = $ligne->gsr_id_site_01;
}
$resultat->free();
}
else {
$site_id = $aso_valeurs['form_sites_id_site'];
}
// Requete pour récupérer les informations sur le site à modifier
$requete = 'SELECT * '.
'FROM gen_site '.
'WHERE gs_id_site = '.$site_id;
$resultat = $db->query($requete);
if (DB::isError($resultat)) {
die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
}
$aso_valeurs = $resultat->fetchRow(DB_FETCHMODE_ASSOC);
$site_ligne = $aso_valeurs;
$resultat->free();
// Requete pour récupérer les informations issues des relations du site à modifier
$requete = 'SELECT * '.
'FROM gen_site_relation '.
'WHERE gsr_id_site_01 = '.$site_id.' '.
'AND gsr_id_site_01 = gsr_id_site_02';
$resultat = $db->query($requete);
if (DB::isError($resultat)) {
die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
}
$tab_type = GEN_retournerTableauTypeSiteExterne($db);
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT) ) {
if ($ligne->gsr_id_valeur == 101) {// 101 = site par défaut
$aso_valeurs['defaut'] = true;
}
foreach ($tab_type as $cle => $val) {
if ($ligne->gsr_id_valeur == $val['id']) {// 20x = type de site externe à Papyrus
$aso_valeurs['type_site_externe'] = $val['id'];
}
}
}
$resultat->free();
if (($as_val['modification'])) {
$aso_valeurs['modification'] = true;
$aso_valeurs['traduction'] = false;
}
else {
$aso_valeurs['traduction'] = true;
$aso_valeurs['modification'] = false;
};
} else if (isset($aso_valeurs['gs_id_site'])) {
$aso_valeurs['modification'] = true;
}
// Débogage :
//$GLOBALS['_DEBOGAGE_'] .= '<pre>'.print_r($aso_valeurs, true).'</pre>';
//-------------------------------------------------------------------------------------------------------------------
// Information précédent le formulaire (en modification)
if ((isset($aso_valeurs['modification'])||isset($aso_valeurs['traduction']))&&isset($aso_valeurs['gs_id_site'])) {
$sortie .= '<p>'.'Identifiant de ce site : '.'<span id="adsi_site_id">'.$aso_valeurs['gs_id_site'].'</span></p>'."\n";
}
//-------------------------------------------------------------------------------------------------------------------
// Création du formulaire
$form =& new HTML_QuickForm('site', 'post', str_replace('&amp;', '&', $url));
$tab_index = 1000;
$squelette =& $form->defaultRenderer();
$squelette->setFormTemplate("\n".'<form{attributes}>'."\n".'{content}'."\n".'</form>'."\n");
$squelette->setElementTemplate( '<li>'."\n".
'{label}'."\n".
'{element}'."\n".
'<!-- BEGIN required --><span class="symbole_obligatoire">*</span><!-- END required -->'."\n".
'<!-- BEGIN error --><span class="erreur">{error}</span><!-- END error -->'."\n".
'</li>'."\n");
$squelette->setGroupElementTemplate('{label}'."\n".
'{element}'."\n".
'<!-- BEGIN required --><span class="symbole_obligatoire">*</span><!-- END required -->'."\n".
'&nbsp;'."\n"
, 'double');
$squelette->setRequiredNoteTemplate("\n".'<p><span class="symbole_obligatoire">*</span> {requiredNote}</p>'."\n");
$partie_site_debut = '<fieldset>'."\n".'<legend>Configuration du site</legend>'."\n".'<ul>'."\n";
$form->addElement('html', $partie_site_debut);
if ($aso_valeurs['modification'] || $aso_valeurs['traduction']) {
$form->addElement('hidden', 'gs_id_site');
$form->addElement('hidden', 'modification');
$form->addElement('hidden', 'traduction');
}
$id = 'gs_nom';
$aso_attributs = array('id'=>$id, 'tabindex' => $tab_index++, 'size' => 45, 'maxlength' => 100, 'value' => 'nom du site');
$label = '<label for="'.$id.'">'.'Nom du site : '.'</label>';
$form->addElement('text', $id, $label, $aso_attributs);
$form->addRule($id, 'Un nom est requis pour le site !', 'required', '', 'client');
$id = 'gs_code_alpha';
$aso_attributs = array('id'=>$id, 'tabindex' => $tab_index++, 'size' => 20, 'maxlength' => 20, 'value' => 'site_01');
$label = '<label for="'.$id.'">'.'Code alphanumérique : '.'</label>';
$form->addElement('text', $id, $label, $aso_attributs);
$form->addRule('gs_code_alpha', 'Un code alphanumérique est requis pour le site !', 'required', '', 'client');
$id = 'gs_code_num';
$aso_attributs = array('id'=>$id, 'tabindex' => $tab_index++, 'size' => 20, 'maxlength' => 20, 'value' => 1);
$label = '<label for="'.$id.'">'.'Code numérique : '.'</label>';
$form->addElement('text', $id, $label, $aso_attributs);
$form->addRule('gs_code_num', 'Un code numérique est requis pour le site !', 'required', '', 'client');
$id = 'gs_raccourci_clavier';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => 1, 'maxlength' => 1, 'value' => 'Z');
$label = '<label for="'.$id.'">'.'Raccourci clavier : '.'</label>';
$form->addElement('text', $id, $label, $aso_attributs);
// Requete pour connaitre les identifications dispo
$requete = 'SELECT * '.
'FROM gen_site_auth '.
'WHERE gsa_id_auth != 0';
$resultat = $db->query($requete) ;
if (DB::isError($resultat)) {
die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
}
$aso_options = array();
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT) ) {
// Test pour connaître le type d'authentification.
$type = '';
if ($ligne->gsa_ce_type_auth == '1' ) {
$type = 'Base de données';
} else if ($ligne->gsa_ce_type_auth == '2' ) {
$type = 'LDAP';
}
$aso_options[$ligne->gsa_id_auth] = $ligne->gsa_nom.' ('.$type.')';
}
$resultat->free();
$id = 'gs_ce_auth';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++);
$label = '<label for="'.$id.'">'.'Identification : '.'</label>';
if (isset($aso_valeurs['gs_ce_auth'])) {
$s = &$form->createElement('select', $id , $label, "", $aso_attributs);
$s->loadArray($aso_options,$aso_valeurs['gs_ce_auth']);
$form->addElement($s);
}
else {
$form->addElement('select', $id, $label, $aso_options, $aso_attributs);
}
// En modification nous affichons la liste des squelettes disponibles dans
// le dossier du site.
if ($aso_valeurs['modification'] || $aso_valeurs['traduction']) {
$aso_options = array();
if (!GEN_FTP_UTILISE) {
$chemin_squelettes = PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.
$aso_valeurs['gs_ce_i18n'].GEN_SEP.GEN_DOSSIER_SQUELETTE.GEN_SEP;
$dossier = opendir($chemin_squelettes);
while(($fichier = readdir($dossier)) !== false) {
if ($fichier != '.' && $fichier != '..') {
$chemin_type = $chemin_squelettes.GEN_SEP.$fichier;
if (filetype($chemin_type) != 'dir') {
$aso_options[$fichier] = $fichier;
}
}
}
} else {
// ouverture des squelettes présent dans le dossier du site
// création de l'objet pear ftp
$objet_pear_ftp = new Net_FTP(PAP_FTP_SERVEUR, PAP_FTP_PORT);
// création de la connexion
$ftp_conn = $objet_pear_ftp->connect(PAP_FTP_SERVEUR, PAP_FTP_PORT);
// identification
$ftp_login_result = $objet_pear_ftp->login(PAP_FTP_UTILISATEUR, PAP_FTP_MOT_DE_PASSE);
// Gestion des erreurs ftp
if ((PEAR::isError($ftp_conn) || PEAR::isError($ftp_login_result))) {
die('ERREUR Papyrus admin : impossible de se connecter par ftp.<br />'.
'Serveur : '. GEN_FTP_SERVEUR .'<br />'.
'Utilisateur : '. GEN_FTP_UTILISATEUR .'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br />');
//'Message erreur de connection : '.$ftp_conn->getMessage().'<br />'.
//'Message erreur de login : '.$ftp_login_result->getMessage());
}
$chemin_squelettes = PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.
$aso_valeurs['gs_ce_i18n'].GEN_SEP.GEN_DOSSIER_SQUELETTE.GEN_SEP;
$tab_squelettes = $objet_pear_ftp->ls($chemin_squelettes);
$aso_options = array();
for ($i = 0; $i < count($tab_squelettes) ; $i++) {
if ($tab_squelettes[$i]['is_dir'] == false) {
$aso_options[$tab_squelettes[$i]['name']] = $tab_squelettes[$i]['name'];
}
}
$objet_pear_ftp->disconnect();
}
// Vérification de la présence de squelettes
if (count($aso_options) == 0) {
$aso_options['Aucun squelette'] = 'Aucun squelette';
}
$id = 'gs_fichier_squelette';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++);
$label = '<label for="'.$id.'">'.'Squelette : '.'</label>';
$s = &$form->createElement('select', $id , $label, "", $aso_attributs);
$s->loadArray($aso_options,$aso_valeurs['gs_fichier_squelette']);
$form->addElement($s);
}
// Requete pour connaitre les internationalisation dispo
if (!$aso_valeurs['modification'] && !$aso_valeurs['traduction']) {
$requete = 'SELECT * '.
'FROM gen_i18n ';
}
else {
if ($aso_valeurs['traduction']) {
// Recherche liste des sites deja traduits
$requete = 'SELECT distinct gs_ce_i18n '.
'FROM gen_site_relation, gen_site '.
'WHERE gsr_id_site_01 = ' .$site_ligne['gs_id_site'] .' '.
'AND gs_id_site = gsr_id_site_02 '.
'AND gsr_id_valeur =1 '; // 1 = "avoir traduction"
$resultat = $db->query($requete) ;
if (DB::isError($resultat)) {
die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
}
$not_in_langue='';
if ( $resultat->numRows() == 0 ) {
$not_in_langue="gi_id_i18n not in('".$site_ligne['gs_ce_i18n']."')";
}
else {
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
$not_in_langue="'".$ligne->gs_ce_i18n."'".",".$not_in_langue;
$end="'".$ligne->gs_ce_i18n."'";
}
if ($not_in_langue) {
$not_in_langue="'".$site_ligne['gs_ce_i18n']."'".",".$not_in_langue;
$not_in_langue=' gi_id_i18n not in('.$not_in_langue.$end.')';
}
else {
$not_in_langue="gi_id_i18n not in('".$site_ligne['gs_ce_i18n']."')";
}
}
$resultat->free();
$requete = "SELECT * FROM gen_i18n where ".$not_in_langue;
}
else
{
$requete = "SELECT * FROM gen_i18n where gi_id_i18n =('".$site_ligne['gs_ce_i18n']."')";
}
}
$resultat = $db->query($requete) ;
if (DB::isError($resultat)) {
die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
}
$aso_options = array();
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT) ) {
$aso_options[$ligne->gi_id_i18n] = $ligne->gi_id_i18n;
}
$resultat->free();
$id = 'gs_ce_i18n';
$aso_attributs = array('id' => $id, 'tabindex' => $tab_index++);
$label = '<label for="'.$id.'">'.'Langue : '.'</label>';
$form->addElement('select', $id, $label, $aso_options, $aso_attributs);
$id = 'defaut';
$aso_attributs = array('id' => $id, 'tabindex' => $tab_index++);
if (isset($aso_valeurs[$id]) && $aso_valeurs[$id] === true) {
$aso_attributs['checked'] = 'checked';
}
$label = '<label for="'.$id.'">'.'En faire le site par défaut : '.'</label>';
$form->addElement('checkbox', $id, $label, null, $aso_attributs);
// Groupe site externe
$tab_type = GEN_retournerTableauTypeSiteExterne($db);
$aso_options = array('0' => 'Aucun');
foreach ($tab_type as $cle => $val) {
$aso_options[$val['id']] = $val['intitule'];
}
$id = 'type_site_externe';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++);
$label = '<label>'.'Type de site externe : '.'</label>';
$form->addElement('select', $id, $label, $aso_options, $aso_attributs);
$id = 'gs_url';
$aso_attributs = array('id' => $id, 'tabindex' => $tab_index++,'size' => 45, 'maxlength' => 255, 'value' => 'http://');
$label = '<label>'.'URL du site externe : '.'</label>';
$form->addElement('text', $id, $label, $aso_attributs);
$partie_site_fin = '</ul>'."\n".'</fieldset>'."\n";
$form->addElement('html', $partie_site_fin);
$partie_entete_debut = '<fieldset>'."\n".'<legend>Entête par défaut des pages du site</legend>'."\n".'<ul>'."\n";
$form->addElement('html', $partie_entete_debut);
$id = 'gs_titre';
$aso_attributs = array('id'=>$id, 'tabindex' => $tab_index++, 'size' => 45, 'maxlength' => 255, 'value' => ADSI_TITRE_SITE);
$label = '<label for="'.$id.'">'.ADSI_TITRE_SITE.' : '.'</label>';
$form->addElement('text', $id, $label, $aso_attributs);
$form->addRule('gs_titre', 'Un titre est requis pour le site !', 'required', '', 'client');
$id = 'gs_mots_cles';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'rows' => 3, 'cols' => 45);
$label = '<label for="'.$id.'">'.'Mots-clés : '.'</label>';
$zone_mots_cles = $form->createElement('textarea', $id, $label, $aso_attributs);
$zone_mots_cles->setValue('mots-clés du site');
$form->addElement($zone_mots_cles);
$form->addRule($id, 'Des mots clés sont requis pour le site !', 'required', '', 'client');
$id = 'gs_description';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'rows' => 3, 'cols' => 45);
$label = '<label for="'.$id.'">'.'Description du contenu : '.'</label>';
$zone = $form->createElement('textarea', $id, $label, $aso_attributs);
$zone->setValue('description du site');
$form->addElement($zone);
$form->addRule($id, 'Une description est requise pour le site !', 'required', '', 'client');
$id = 'gs_auteur';
$aso_attributs = array('id'=>$id, 'tabindex' => $tab_index++, 'size' => 45, 'maxlength' => 255, 'value' => 'auteur du site');
$label = '<label for="'.$id.'">'.'Auteur du site : '.'</label>';
$form->addElement('text', $id, $label, $aso_attributs);
$form->addRule('gs_auteur', 'Un auteur est requis pour le site !', 'required', '', 'client');
$partie_entete_fin = '</ul>'."\n".'</fieldset>'."\n";
$form->addElement('html', $partie_entete_fin);
if ($aso_valeurs['modification'] || $aso_valeurs['traduction']) {
// Requete pour connaitre les informations sur l'administrateur ayant fait la dernière modif
$requete_admin = 'SELECT * '.
'FROM gen_annuaire '.
'WHERE ga_id_administrateur = '.$aso_valeurs['gs_ce_admin'];
$resultat_admin = $db->query($requete_admin);
if (DB::isError($resultat_admin)) {
die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_admin->getMessage(), $requete_admin));
}
$ligne_admin = $resultat_admin->fetchRow(DB_FETCHMODE_OBJECT);
if (isset($ligne_admin)) {
$info_admin = '<p class="info">Site créé le '.$aso_valeurs['gs_date_creation'].'. Dernière modification par '.
$ligne_admin->ga_prenom.' '.$ligne_admin->ga_nom.'.'.'</p>';
$form->addElement('html', $info_admin);
$form->addElement('hidden', 'gs_ce_admin');
$form->addElement('hidden', 'gs_date_creation');
}
// Titre de la page:
if ($aso_valeurs['modification']) {
$titre = 'Modifier un site';
$bouton_validation = '<input type="submit" id="site_modifier" name="site_modifier" value="Enregistrer" />';
}
else {
$titre = 'Traduire un site';
$bouton_validation = '<input type="submit" id="site_traduire" name="site_traduire" value="Enregistrer" />';
}
} else {
// Titre de la page:
$titre = 'Ajouter un site';
// Bouton validant le formulaire
$bouton_validation = '<input type="submit" id="site_enregistrer" name="site_enregistrer" value="Enregistrer" />';
}
$bouton_annuler = '<input type="submit" id="form_annuler" name="form_annuler" value="Annuler" />';
$bouton_effacer = '<input type="reset" id="effacer" name="effacer" value="Effacer" />';
$boutons = '<p>'."\n".
$bouton_validation."\n".
$bouton_annuler."\n".
$bouton_effacer."\n".
'</p>'."\n";
$form->addElement('html', $boutons);
// Instanciation des valeurs par défaut du formulaire
$form->setDefaults($aso_valeurs);
// Javascript pour la validation côté client
$regles_javascript = $form->getValidationScript();
// Suppression des balises déjà créées par GEN_stockerCodeScript()
// Le code ci-dessous devrait être utilisé si on arrive à empécher Quickform de l'ajouter lui-même!
/*
$regles_javascript = ereg_replace ( '<script type="text\/javascript">', '', $regles_javascript);
$regles_javascript = ereg_replace ( '<!--', '', $regles_javascript);
$regles_javascript = ereg_replace ( '\/\/-->', '', $regles_javascript);
$regles_javascript = ereg_replace ( '<\/script>', '', $regles_javascript);
GEN_stockerCodeScript($regles_javascript);
*/
// Note de fin de formulaire
$form->setRequiredNote('Indique les champs obligatoires');
$sortie .= $form->toHTML()."\n";
// Construction de la page.
return ADMIN_contruirePage($titre, $sortie, $message);
}
 
/** Fonction ADMIN_validerFormAjouterSite() - Valide les données issues du formulaire pour gen_site.
*
* Cette fonction valide les données à ajouter dans la table gen_site.
*
* @param string l'objet pear de connexion à la base de données.
* @param string le tableau contenant les valeurs du formulaire.
* @return string retourne les messages d'erreurs sinon rien.
*/
function ADMIN_validerFormSite(&$db, $aso_valeurs)
{
$message = '';
// Validation des données du formulaire
if (empty($aso_valeurs['gs_nom'])) {
$message .= '<p class="pap_erreur">Le champ "Nom" ne doit pas être vide.</p>';
}
if (empty($aso_valeurs['gs_code_alpha'])) {
$message .= '<p class="pap_erreur">Le champ "Code alphanumérique" ne doit pas être vide.</p>';
}
if ($aso_valeurs['gs_code_num'] == '') {
// Note: ne pas utilisez empty() car si on veut saisir 0, cela est conscidéré comme vide!
$message .= '<p class="pap_erreur">Le champ "Code numérique" ne doit pas être vide.</p>';
}
if (preg_match('/^[0-9]+$/',$aso_valeurs['gs_code_num']) == 0) {
$message .= '<p class="pap_erreur">Le champ "Code numérique" doit contenir un nombre.</p>';
}
// Requete pour vérifier l'absence du code numérique et alphanumérique de la table gen_site
// en mode creation uniquement !
if (!isset($aso_valeurs['site_modifier'])) $aso_valeurs['site_modifier']=0;
if (!isset($aso_valeurs['site_traduire'])) $aso_valeurs['site_traduire']=0;
if (@!$aso_valeurs['site_modifier'] && @!$aso_valeurs['site_traduire'] ) {
$requete = 'SELECT gs_code_alpha, gs_code_num '.
'FROM gen_site, gen_site_relation '.
'WHERE gsr_id_site_01 = gsr_id_site_02 '.
'AND gsr_id_site_01 = gs_id_site '.
'AND gsr_id_valeur IN (102, 103) ';// 102 = site "principal" et 103 = site "externe"
$requete .= (isset($aso_valeurs['gs_id_site'])) ? 'AND gs_id_site != '.$aso_valeurs['gs_id_site'] : '';
$resultat = $db->query($requete);
if (DB::isError($resultat)) {
die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
}
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT) ) {
if ($ligne->gs_code_num == $aso_valeurs['gs_code_num']) {
$message .= '<p class="pap_erreur">La valeur "'.$aso_valeurs['gs_code_num'].'" pour le champ "Code numérique" existe déjà.</p>';
}
if ($ligne->gs_code_alpha == $aso_valeurs['gs_code_alpha']) {
$message .= '<p class="pap_erreur">La valeur "'.$aso_valeurs['gs_code_alpha'].'" pour le champ "Code alphanumérique" existe déjà.</p>';
}
}
$resultat->free();
}
else {
// Refuser si plus de traduction disponible !
}
if (empty($aso_valeurs['gs_titre'])) {
$message .= '<p class="pap_erreur">Le champ "Titre" ne doit pas être vide.</p>';
}
if (empty($aso_valeurs['gs_mots_cles'])) {
$message .= '<p class="pap_erreur">Le champ "Mots clés" ne doit pas être vide.</p>';
}
if (empty($aso_valeurs['gs_description'])) {
$message .= '<p class="pap_erreur">Le champ "Description" ne doit pas être vide.</p>';
}
if (empty($aso_valeurs['gs_auteur'])) {
$message .= '<p class="pap_erreur">Le champ "Auteur" ne doit pas être vide.</p>';
}
if (isset($aso_valeurs['externe']) && $aso_valeurs['externe'] == 1 && (empty($aso_valeurs['gs_url']) || $aso_valeurs['gs_url'] == 'http://')) {
$message .= '<p class="pap_erreur">'.'Vous avez désigné ce site comme étant externe. Il est nécessaire de saisir son URL!'.'</p>';
}
if (isset($aso_valeurs['externe']) && $aso_valeurs['externe'] == 0 && (!empty($aso_valeurs['gs_url']) && $aso_valeurs['gs_url'] != 'http://')) {
$message .= '<p class="pap_erreur">'.'Vous avez saisie une l\'url : '.$aso_valeurs['gs_url'].'<br />'.
'Vous conscidérez donc ce site comme étant externe. Il est nécessaire de cocher la case "oui"!'.'</p>';
}
return $message;
}
 
/** Fonction ADMIN_enregistrerSite() - Ajoute un site à Papyrus.
*
* Cette fonction ajoute le site à Papyrus, c'est à dire :
* - 1. Création des répertoire du projet en fonction du nom et des sous-répertoires.
* - 2. Insertion d'une ligne dans la table "gen_site".
* - 3. Insertion d'une ligne dans la table "gen_site_auth" et ses tables liées si nécessaire.
*
* @param string l'objet pear de connexion à la base de données.
* @param string le tableau contenant les valeurs du formulaire.
* @param int identifiant de l'administrateur réalisant cette création.
* @return string retourne un message en cas de succès ou d'échec.
*/
function ADMIN_enregistrerSite(&$db, $aso_valeurs, $id_admin)
{
// Nous vérifions si nous avons à faire à un site externe.
$id_type_site = '102';// par défaut on conscidére que c'est un site "principal"
if (isset($aso_valeurs['type_site_externe']) && $aso_valeurs['type_site_externe'] > 0 && !empty($aso_valeurs['gs_url']) && $aso_valeurs['gs_url'] != 'http://') {
$id_type_site = '103';// c'est un site "externe"
}
// Ajout des répertoires des sites "principaux" soit par manipulation de fichier soit par FTP en fonction de la constante définie
// par l'utilisateur dans le fichier de config avancée.
$tab_rep_langue = array(GEN_DOSSIER_GENERIQUE, $aso_valeurs['gs_ce_i18n']);
$tab_rep_site = array( GEN_DOSSIER_IMAGE,
GEN_DOSSIER_STYLE,
GEN_DOSSIER_SCRIPT,
GEN_DOSSIER_SQUELETTE,
GEN_DOSSIER_DOC);
if (!GEN_FTP_UTILISE && $id_type_site != '103') {
foreach ($tab_rep_langue as $nom_rep_langue) {
foreach ($tab_rep_site as $nom_rep_site) {
$chemin_repertoire = PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.
$nom_rep_langue.GEN_SEP.$nom_rep_site;
$vieux_umask = umask(0);
$resultat = creerDossier($chemin_repertoire, 0777, GEN_SEP);
umask($vieux_umask);
if ($resultat == false) {
$message = '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de créer le répertoire.<br />'.
'Répertoire : '. $chemin_repertoire .'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br /></p>';
return $message;
}
}
}
$chemin_squelette_defaut = PAP_CHEMIN_RACINE.GEN_CHEMIN_COMMUN.GEN_DOSSIER_GENERIQUE.GEN_SEP.
GEN_DOSSIER_SQUELETTE.GEN_SEP.GEN_FICHIER_SQUELETTE;
$chemin_squelette_site = PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.
$aso_valeurs['gs_ce_i18n'].GEN_SEP.GEN_DOSSIER_SQUELETTE.GEN_SEP.GEN_FICHIER_SQUELETTE;
if (!copy($chemin_squelette_defaut, $chemin_squelette_site)) {
$message = '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de créer le fichier de squellete par défaut.<br />'.
'Fichier : '. $chemin_squelette_site .'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br /></p>';
return $message;
}
$chemin_style_defaut = PAP_CHEMIN_RACINE.GEN_CHEMIN_COMMUN.GEN_DOSSIER_GENERIQUE.GEN_SEP.
GEN_DOSSIER_STYLE.GEN_SEP.GEN_FICHIER_STYLE;
$chemin_style_site = PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.
$aso_valeurs['gs_ce_i18n'].GEN_SEP.GEN_DOSSIER_STYLE.GEN_SEP.GEN_FICHIER_STYLE;
if (!copy($chemin_style_defaut, $chemin_style_site)) {
$message = '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de créer le fichier de style par défaut.<br />'.
'Fichier : '. $chemin_style_site .'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br /></p>';
return $message;
}
} else if (GEN_FTP_UTILISE && $id_type_site != '103') { // 103 est le type "site externe"
// Création d'une connection ftp avec Net_FTP de PEAR
// voir http://pear.php.net/manual/fr/package.networking.net-ftp.php
// création de l'objet pear ftp
$objet_pear_ftp = new Net_FTP(PAP_FTP_SERVEUR, PAP_FTP_PORT);
// création de la connexion
$ftp_conn = $objet_pear_ftp->connect(PAP_FTP_SERVEUR, PAP_FTP_PORT);
// identification
$ftp_login_result = $objet_pear_ftp->login(PAP_FTP_UTILISATEUR, PAP_FTP_MOT_DE_PASSE);
// Gestion des erreurs ftp
if ((PEAR::isError($ftp_conn) || PEAR::isError($ftp_login_result))) {
$message = '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de se connecter par ftp.<br />'.
'Serveur : '. PAP_FTP_SERVEUR .'<br />'.
'Utilisateur : '. PAP_FTP_UTILISATEUR .'<br />'.
'Erreur connexion : '.$ftp_conn->getMessage().'<br />'.
'Erreur login : '.$ftp_login_result->getMessage().'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br /><p>';
return $message;
}
$resultat = $objet_pear_ftp->mkdir(PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha']) ;
if (PEAR::isError($resultat)) {
$message = '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de créer le répertoire par ftp.<br />'.
'Répertoire : '. PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'] .'<br />'.
'Erreur origine : '. $resultat->getMessage() .'<br />'.
'Informations de debogage : '.$resultat->getDebugInfo().'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br /></p>';
return $message;
}
//$objet_pear_ftp->cd(PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha']) ;
foreach ($tab_rep_langue as $nom_rep_langue) {
$objet_pear_ftp->mkdir(PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.$nom_rep_langue) ;
foreach ($tab_rep_site as $nom_rep_site) {
$chemin_repertoire = PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.$nom_rep_langue.GEN_SEP.$nom_rep_site;
$resultat = $objet_pear_ftp->mkdir($chemin_repertoire) ;
if (PEAR::isError($resultat)) {
$message = '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de créer le répertoire par ftp.<br />'.
'Répertoire : '. $chemin_repertoire .'<br />'.
'Erreur origine : '. $resultat->getMessage() .'<br />'.
'Informations de debogage : '.$resultat->getDebugInfo().'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br /></p>';
return $message;
}
}
}
$chemin_squelette_defaut = PAP_CHEMIN_RACINE.GEN_CHEMIN_COMMUN.GEN_DOSSIER_GENERIQUE.GEN_SEP.
GEN_DOSSIER_SQUELETTE.GEN_SEP.GEN_FICHIER_SQUELETTE;
$chemin_squelette_site = PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.
$aso_valeurs['gs_ce_i18n'].GEN_SEP.GEN_DOSSIER_SQUELETTE.GEN_SEP.GEN_FICHIER_SQUELETTE;
$resultat = $objet_pear_ftp->put($chemin_squelette_defaut, $chemin_squelette_site, true, FTP_BINARY);
if (PEAR::isError($resultat)) {
$message = '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de copier le squelette defaut par ftp.<br />'.
'Fichier origine : '. $chemin_squelette_defaut .'<br />'.
'Fichier copié : '. $chemin_squelette_site .'<br />'.
'Erreur origine : '. $resultat->getMessage() .'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br /></p>';
return $message;
}
$chemin_style_defaut = PAP_CHEMIN_RACINE.GEN_CHEMIN_COMMUN.GEN_DOSSIER_GENERIQUE.GEN_SEP.
GEN_DOSSIER_STYLE.GEN_SEP.GEN_FICHIER_STYLE;
$chemin_style_site = PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.
$aso_valeurs['gs_ce_i18n'].GEN_SEP.GEN_DOSSIER_STYLE.GEN_SEP.GEN_FICHIER_STYLE;
$resultat = $objet_pear_ftp->put($chemin_style_defaut, $chemin_style_site, true, FTP_BINARY);
if (PEAR::isError($resultat)) {
$message = '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de copier les styles defaut par ftp.<br />'.
'Fichier origine : '. $chemin_style_defaut .'<br />'.
'Fichier copié : '. $chemin_style_site .'<br />'.
'Erreur origine : '. $resultat->getMessage() .'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br /></p>';
return $message;
}
$chemin_image_defaut = PAP_CHEMIN_RACINE.GEN_CHEMIN_COMMUN.GEN_DOSSIER_GENERIQUE.GEN_SEP.
GEN_DOSSIER_IMAGE.GEN_SEP;
$chemin_image_site = PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.
$aso_valeurs['gs_ce_i18n'].GEN_SEP.GEN_DOSSIER_IMAGE.GEN_SEP;
$resultat = $objet_pear_ftp->putRecursive($chemin_image_defaut, $chemin_image_site, false, FTP_BINARY);
if (PEAR::isError($resultat)) {
$message = '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de copier les styles defaut par ftp.<br />'.
'Fichier origine : '. $chemin_style_defaut .'<br />'.
'Fichier copié : '. $chemin_style_site .'<br />'.
'Erreur origine : '. $resultat->getMessage() .'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br /></p>';
return $message;
}
 
$objet_pear_ftp->disconnect();
}
$id_site = SQL_obtenirNouveauId($db, 'gen_site','gs_id_site');
if ($id_site == false) {
$message = '<p class="erreur"> ERREUR Génésia admin : impossible de récupérer un identifiant pour la table gen_site.<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br /></p>';
return $message;
}
// Modification de la requete si nous avons à faire à un site externe.
$requete_complement = ', gs_url = NULL';
if (isset($aso_valeurs['type_site_externe']) && $aso_valeurs['type_site_externe'] > 0 && !empty($aso_valeurs['gs_url']) && $aso_valeurs['gs_url'] != 'http://') {
$requete_complement = ', gs_url = "'.$aso_valeurs['gs_url'].'"';
}
// Requete d'insertion des infos d'un site dans gen_site
$requete = 'INSERT INTO gen_site '.
'SET gs_id_site = '.$id_site.', '.
'gs_ce_i18n = "'.$aso_valeurs['gs_ce_i18n'].'", '.
'gs_ce_auth = '.$aso_valeurs['gs_ce_auth'].', '.
'gs_fichier_squelette = "defaut.html", '.
'gs_code_num = '.$aso_valeurs['gs_code_num'].', '.
'gs_code_alpha = "'.$aso_valeurs['gs_code_alpha'].'", '.
'gs_nom = "'.$aso_valeurs['gs_nom'].'", '.
'gs_raccourci_clavier = "'.$aso_valeurs['gs_raccourci_clavier'].'", '.
'gs_titre = "'.$aso_valeurs['gs_titre'].'", '.
'gs_mots_cles = "'.$aso_valeurs['gs_mots_cles'].'", '.
'gs_description = "'.$aso_valeurs['gs_description'].'", '.
'gs_auteur = "'.$aso_valeurs['gs_auteur'].'", '.
'gs_date_creation = "'.date('Y-m-d H:i:s').'", '.
'gs_ce_admin = '.$id_admin.
$requete_complement;
$resultat = $db->query($requete);
if (DB::isError($resultat)) {
die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
}
// Recherche du nouveau numéro d'ordre de ce site "principal" ou "externe"
$requete = 'SELECT MAX(gsr_ordre) AS max_ordre '.
'FROM gen_site_relation '.
'WHERE gsr_id_site_01 = gsr_id_site_02 '.
'AND gsr_id_valeur IN (102, 103) ';// 102 = site "principal" et 103 = site "externe"
$resultat = $db->query($requete) ;
if (DB::isError($resultat)) {
die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
}
$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
$nouvel_ordre = $ligne->max_ordre + 1;
// Requete d'insertion des relations dans gen_site_relation
$requete = 'INSERT INTO gen_site_relation '.
'SET gsr_id_site_01 = '.$id_site.', '.
'gsr_id_site_02 = '.$id_site.', '.
'gsr_id_valeur = '.$id_type_site.', '.
'gsr_ordre = '.$nouvel_ordre;
$resultat = $db->query($requete);
if (DB::isError($resultat)) {
die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));
}
// Gestion du site par défaut
if (isset($aso_valeurs['defaut']) && $aso_valeurs['defaut'] == 1) {
$requete_supr_defaut = 'DELETE FROM gen_site_relation '.
'WHERE gsr_id_site_01 = gsr_id_site_02 '.
'AND gsr_id_valeur = 101 ';// 101 = site par "defaut"
$resultat_supr_defaut = $db->query($requete_supr_defaut);
if (DB::isError($resultat_supr_defaut)) {
die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_supr_defaut->getMessage(), $requete_supr_defaut));
}
// Requete d'insertion de la relations site par défaut
$requete = 'INSERT INTO gen_site_relation '.
'SET gsr_id_site_01 = '.$id_site.', '.
'gsr_id_site_02 = '.$id_site.', '.
'gsr_id_valeur = 101, '.
'gsr_ordre = NULL ';
$resultat = $db->query($requete);
if (DB::isError($resultat)) {
die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));
}
}
// Gestion des sites externes
if ($id_type_site == '103') {
// Requete d'insertion des relations dans gen_site_relation
$requete = 'INSERT INTO gen_site_relation '.
'SET gsr_id_site_01 = '.$id_site.', '.
'gsr_id_site_02 = '.$id_site.', '.
'gsr_id_valeur = '.$aso_valeurs['type_site_externe'].', '.
'gsr_ordre = NULL ';
$resultat = $db->query($requete);
if (DB::isError($resultat)) {
die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));
}
}
$message = '<p class="pap_info">'.'Succés de l\'ajout du site.'.'</p>';
return $message;
}
 
/** Fonction ADMIN_traduireSite() - Traduire un site papyrus
*
* Cette fonction traduit un site à Papyrus, c'est à dire :
* - 1. Création des répertoire du projet en fonction du nom et des sous-répertoires.
* - 2. Insertion d'une ligne dans la table "gen_site".
* - 3. Insertion d'une ligne dans la table "gen_site_auth" et ses tables liées si nécessaire.
*
* @param string l'objet pear de connexion à la base de données.
* @param string le tableau contenant les valeurs du formulaire.
* @param int identifiant de l'administrateur réalisant cette création.
* @return string retourne un message en cas de succès ou d'échec.
*/
function ADMIN_traduireSite(&$db, $aso_valeurs, $id_admin)
{
// Nous vérifions si nous avons à faire à un site externe.
$id_type_site = '102';// par défaut on considére que c'est un site "principal"
if (isset($aso_valeurs['type_site_externe']) && $aso_valeurs['type_site_externe'] > 0 && !empty($aso_valeurs['gs_url']) && $aso_valeurs['gs_url'] != 'http://') {
$id_type_site = '103';// c'est un site "externe"
}
// Ajout des répertoires des sites "principaux" soit par manipulation de fichier soit par FTP en fonction de la constante définie
// par l'utilisateur dans le fichier de config avancée.
$tab_rep_langue = array(GEN_DOSSIER_GENERIQUE, $aso_valeurs['gs_ce_i18n']);
$tab_rep_site = array( GEN_DOSSIER_IMAGE,
GEN_DOSSIER_STYLE,
GEN_DOSSIER_SCRIPT,
GEN_DOSSIER_SQUELETTE,
GEN_DOSSIER_DOC);
if (!GEN_FTP_UTILISE && $id_type_site != '103') {
foreach ($tab_rep_langue as $nom_rep_langue) {
foreach ($tab_rep_site as $nom_rep_site) {
$chemin_repertoire = PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.
$nom_rep_langue.GEN_SEP.$nom_rep_site;
$vieux_umask = umask(0);
$resultat = creerDossier($chemin_repertoire, 0777, GEN_SEP);
umask($vieux_umask);
if ($resultat == false) {
$message = '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de créer le répertoire.<br />'.
'Répertoire : '. $chemin_repertoire .'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br /></p>';
return $message;
}
}
}
$chemin_squelette_defaut = PAP_CHEMIN_RACINE.GEN_CHEMIN_COMMUN.GEN_DOSSIER_GENERIQUE.GEN_SEP.
GEN_DOSSIER_SQUELETTE.GEN_SEP.GEN_FICHIER_SQUELETTE;
$chemin_squelette_site = PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.
$aso_valeurs['gs_ce_i18n'].GEN_SEP.GEN_DOSSIER_SQUELETTE.GEN_SEP.GEN_FICHIER_SQUELETTE;
if (!copy($chemin_squelette_defaut, $chemin_squelette_site)) {
$message = '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de créer le fichier de squellete par défaut.<br />'.
'Fichier : '. $chemin_squelette_site .'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br /></p>';
return $message;
}
$chemin_style_defaut = PAP_CHEMIN_RACINE.GEN_CHEMIN_COMMUN.GEN_DOSSIER_GENERIQUE.GEN_SEP.
GEN_DOSSIER_STYLE.GEN_SEP.GEN_FICHIER_STYLE;
$chemin_style_site = PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.
$aso_valeurs['gs_ce_i18n'].GEN_SEP.GEN_DOSSIER_STYLE.GEN_SEP.GEN_FICHIER_STYLE;
if (!copy($chemin_style_defaut, $chemin_style_site)) {
$message = '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de créer le fichier de style par défaut.<br />'.
'Fichier : '. $chemin_style_site .'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br /></p>';
return $message;
}
} else if (GEN_FTP_UTILISE && $id_type_site != '103') { // 103 est le type "site externe"
// Création d'une connection ftp avec Net_FTP de PEAR
// voir http://pear.php.net/manual/fr/package.networking.net-ftp.php
// création de l'objet pear ftp
$objet_pear_ftp = new Net_FTP(PAP_FTP_SERVEUR, PAP_FTP_PORT);
// création de la connexion
$ftp_conn = $objet_pear_ftp->connect(PAP_FTP_SERVEUR, PAP_FTP_PORT);
// identification
$ftp_login_result = $objet_pear_ftp->login(PAP_FTP_UTILISATEUR, PAP_FTP_MOT_DE_PASSE);
// Gestion des erreurs ftp
if ((PEAR::isError($ftp_conn) || PEAR::isError($ftp_login_result))) {
$message = '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de se connecter par ftp.<br />'.
'Serveur : '. PAP_FTP_SERVEUR .'<br />'.
'Utilisateur : '. PAP_FTP_UTILISATEUR .'<br />'.
'Erreur connexion : '.$ftp_conn->getMessage().'<br />'.
'Erreur login : '.$ftp_login_result->getMessage().'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br /><p>';
return $message;
}
$objet_pear_ftp->mkdir(PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha']) ;
//$objet_pear_ftp->cd(PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha']) ;
foreach ($tab_rep_langue as $nom_rep_langue) {
$objet_pear_ftp->mkdir(PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.$nom_rep_langue) ;
foreach ($tab_rep_site as $nom_rep_site) {
$chemin_repertoire = PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.$nom_rep_langue.GEN_SEP.$nom_rep_site;
$resultat = $objet_pear_ftp->mkdir($chemin_repertoire) ;
if (PEAR::isError($resultat)) {
$message = '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de créer le répertoire par ftp.<br />'.
'Répertoire : '. $chemin_repertoire .'<br />'.
'Erreur origine : '. $resultat->getMessage() .'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br /></p>';
return $message;
}
}
}
$chemin_squelette_defaut = PAP_CHEMIN_RACINE.GEN_CHEMIN_COMMUN.GEN_DOSSIER_GENERIQUE.GEN_SEP.
GEN_DOSSIER_SQUELETTE.GEN_SEP.GEN_FICHIER_SQUELETTE;
$chemin_squelette_site = PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.
$aso_valeurs['gs_ce_i18n'].GEN_SEP.GEN_DOSSIER_SQUELETTE.GEN_SEP.GEN_FICHIER_SQUELETTE;
$resultat = $objet_pear_ftp->put($chemin_squelette_defaut, $chemin_squelette_site, true, FTP_BINARY);
if (PEAR::isError($resultat)) {
$message = '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de copier le squelette defaut par ftp.<br />'.
'Fichier origine : '. $chemin_squelette_defaut .'<br />'.
'Fichier copié : '. $chemin_squelette_site .'<br />'.
'Erreur origine : '. $resultat->getMessage() .'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br /></p>';
return $message;
}
$chemin_style_defaut = PAP_CHEMIN_RACINE.GEN_CHEMIN_COMMUN.GEN_DOSSIER_GENERIQUE.GEN_SEP.
GEN_DOSSIER_STYLE.GEN_SEP.GEN_FICHIER_STYLE;
$chemin_style_site = PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.
$aso_valeurs['gs_ce_i18n'].GEN_SEP.GEN_DOSSIER_STYLE.GEN_SEP.GEN_FICHIER_STYLE;
$resultat = $objet_pear_ftp->put($chemin_style_defaut, $chemin_style_site, true, FTP_BINARY);
if (PEAR::isError($resultat)) {
$message = '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de copier les styles defaut par ftp.<br />'.
'Fichier origine : '. $chemin_style_defaut .'<br />'.
'Fichier copié : '. $chemin_style_site .'<br />'.
'Erreur origine : '. $resultat->getMessage() .'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br /></p>';
return $message;
}
$objet_pear_ftp->disconnect();
}
$id_site = SQL_obtenirNouveauId($db, 'gen_site','gs_id_site');
if ($id_site == false) {
$message = '<p class="erreur"> ERREUR Génésia admin : impossible de récupérer un identifiant pour la table gen_site.<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br /></p>';
return $message;
}
// Modification de la requete si nous avons à faire à un site externe.
$requete_complement = ', gs_url = NULL';
if (isset($aso_valeurs['type_site_externe']) && $aso_valeurs['type_site_externe'] > 0 && !empty($aso_valeurs['gs_url']) && $aso_valeurs['gs_url'] != 'http://') {
$requete_complement = ', gs_url = "'.$aso_valeurs['gs_url'].'"';
}
// Requete d'insertion des infos d'un site dans gen_site
$requete = 'INSERT INTO gen_site '.
'SET gs_id_site = '.$id_site.', '.
'gs_ce_i18n = "'.$aso_valeurs['gs_ce_i18n'].'", '.
'gs_ce_auth = '.$aso_valeurs['gs_ce_auth'].', '.
'gs_fichier_squelette = "defaut.html", '.
'gs_code_num = '.$aso_valeurs['gs_code_num'].', '.
'gs_code_alpha = "'.$aso_valeurs['gs_code_alpha'].'", '.
'gs_nom = "'.$aso_valeurs['gs_nom'].'", '.
'gs_raccourci_clavier = "'.$aso_valeurs['gs_raccourci_clavier'].'", '.
'gs_titre = "'.$aso_valeurs['gs_titre'].'", '.
'gs_mots_cles = "'.$aso_valeurs['gs_mots_cles'].'", '.
'gs_description = "'.$aso_valeurs['gs_description'].'", '.
'gs_auteur = "'.$aso_valeurs['gs_auteur'].'", '.
'gs_date_creation = "'.date('Y-m-d H:i:s').'", '.
'gs_ce_admin = '.$id_admin.
$requete_complement;
$resultat = $db->query($requete);
if (DB::isError($resultat)) {
die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
}
// Recherche du nouveau numéro d'ordre de ce site "principal" ou "externe"
$requete = 'SELECT MAX(gsr_ordre) AS max_ordre '.
'FROM gen_site_relation '.
'WHERE gsr_id_site_01 = gsr_id_site_02 '.
'AND gsr_id_valeur IN (102, 103) ';// 102 = site "principal" et 103 = site "externe"
$resultat = $db->query($requete) ;
if (DB::isError($resultat)) {
die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
}
$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
$nouvel_ordre = $ligne->max_ordre + 1;
// Requete d'insertion des relations dans gen_site_relation
$requete = 'INSERT INTO gen_site_relation '.
'SET gsr_id_site_01 = '.$id_site.', '.
'gsr_id_site_02 = '.$id_site.', '.
'gsr_id_valeur = '.$id_type_site.', '.
'gsr_ordre = '.$nouvel_ordre;
$resultat = $db->query($requete);
if (DB::isError($resultat)) {
die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));
}
// Traduction : Requete d'insertion des relations dans gen_site_relation
 
$requete = 'SELECT MAX(gsr_ordre) AS max_ordre '.
'FROM gen_site_relation '.
'WHERE gsr_id_site_01 = ' .$aso_valeurs['gs_id_site'] .' '.
'AND gsr_id_valeur =1 '; // 1 = "avoir traduction"
$resultat = $db->query($requete) ;
if (DB::isError($resultat)) {
die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
}
if ( $resultat->numRows() == 0 ) {
$nouvel_ordre = 1;
}
else {
$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
$nouvel_ordre = $ligne->max_ordre + 1;
}
 
// 1 : insertion information traduction pere (si inexistant)
$requete = 'SELECT * '.
'FROM gen_site_relation '.
'WHERE gsr_id_site_01 = ' .$aso_valeurs['gs_id_site'] .' '.
'AND gsr_id_site_01 = gsr_id_site_02 '.
'AND gsr_id_valeur =1 '; // 1 = "avoir traduction"
$resultat = $db->query($requete) ;
if (DB::isError($resultat)) {
die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
}
if ( $resultat->numRows() == 0 ) {
$requete = 'INSERT INTO gen_site_relation '.
'SET gsr_id_site_01 = '. $aso_valeurs['gs_id_site'].', '.
'gsr_id_site_02 = '.$aso_valeurs['gs_id_site'].', '.
'gsr_id_valeur = 1, '. // 1 = "avoir traduction"
'gsr_ordre = 1 ';
$resultat = $db->query($requete);
if (DB::isError($resultat)) {
die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));
}
$nouvel_ordre = 2;
}
 
 
// 2 : insertion information traduction site en cours (si inexistant ?) (et la mise a jour, c'est ailleurs
// dans les mises à jour
$requete = 'INSERT INTO gen_site_relation '.
'SET gsr_id_site_01 = '. $aso_valeurs['gs_id_site'].', '.
'gsr_id_site_02 = '.$id_site.', '.
'gsr_id_valeur = 1, '. // 1 = "avoir traduction"
'gsr_ordre = '.$nouvel_ordre;
$resultat = $db->query($requete);
if (DB::isError($resultat)) {
die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));
}
// Gestion du site par défaut
if (isset($aso_valeurs['defaut']) && $aso_valeurs['defaut'] == 1) {
$requete_supr_defaut = 'DELETE FROM gen_site_relation '.
'WHERE gsr_id_site_01 = gsr_id_site_02 '.
'AND gsr_id_valeur = 101 ';// 101 = site par "defaut"
$resultat_supr_defaut = $db->query($requete_supr_defaut);
if (DB::isError($resultat_supr_defaut)) {
die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_supr_defaut->getMessage(), $requete_supr_defaut));
}
// Requete d'insertion de la relations site par défaut
$requete = 'INSERT INTO gen_site_relation '.
'SET gsr_id_site_01 = '.$id_site.', '.
'gsr_id_site_02 = '.$id_site.', '.
'gsr_id_valeur = 101, '.
'gsr_ordre = NULL ';
$resultat = $db->query($requete);
if (DB::isError($resultat)) {
die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));
}
}
// Gestion des sites externes
if ($id_type_site == '103') {
// Requete d'insertion des relations dans gen_site_relation
$requete = 'INSERT INTO gen_site_relation '.
'SET gsr_id_site_01 = '.$id_site.', '.
'gsr_id_site_02 = '.$id_site.', '.
'gsr_id_valeur = '.$aso_valeurs['type_site_externe'].', '.
'gsr_ordre = NULL ';
$resultat = $db->query($requete);
if (DB::isError($resultat)) {
die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));
}
}
$message = '<p class="pap_info">'.'Succés de l\'ajout du site.'.'</p>';
return $message;
}
 
 
/** Fonction ADMIN_modifierSite() - Modifie un site de Papyrus.
*
* Cette fonction modifie un site géré par Papyrus.
* Il faudrait aussi pouvoir renomer le dossier du site si le code alpha change.
*
* @param string l'objet pear de connexion à la base de données.
* @param string le tableau contenant les valeurs du formulaire.
* @param int identifiant de l'administrateur réalisant cette modification.
* @return string retourne un message en cas de succès ou d'échec.
*/
function ADMIN_modifierSite(&$db, $aso_valeurs, $id_admin)
{
// Initialisation de variables
$message_complement = '';
// Récupération de l'ancien code alphanumérique
$requete = 'SELECT gs_code_alpha '.
'FROM gen_site '.
'WHERE gs_id_site = '.$aso_valeurs['gs_id_site'];
$ancien_code_alphnum = $db->getOne($requete);
if (DB::isError($ancien_code_alphnum)) {
die( BOG_afficherErreurSql(__FILE__, __LINE__, $ancien_code_alphnum->getMessage(), $requete) );
}
// Nous vérifions si nous avons à faire à un site externe.
$id_type_site = '102';// par défaut on conscidére que c'est un site "principal"
$requete_complement = ', gs_url = NULL ';
if (isset($aso_valeurs['type_site_externe']) && $aso_valeurs['type_site_externe'] > 0 && !empty($aso_valeurs['gs_url']) && $aso_valeurs['gs_url'] != 'http://') {
$requete_complement = ', gs_url = "'.$aso_valeurs['gs_url'].'" ';
$id_type_site = '103';// c'est un site "externe"
}
// Si le code alphanumérique à changé et que nous n'avons pas à faire à un site externe.
if ($aso_valeurs['gs_code_alpha'] != $ancien_code_alphnum && $id_type_site != 103) {
if (!GEN_FTP_UTILISE) {
$chemin_site_ancien = PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$ancien_code_alphnum.GEN_SEP;
$chemin_site_nouveau = PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP;
if (!rename($chemin_site_ancien, $chemin_site_nouveau)) {
$message = '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de changer le nom du dossier du site.<br />'.
'Ancien nom : '. $chemin_site_ancien .'<br />'.
'Nouveau nom : '. $chemin_site_nouveau .'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br /></p>';
return $message;
}
} else {
$chemin_site_ancien = PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$ancien_code_alphnum.GEN_SEP;
$chemin_site_nouveau = PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP;
// Création d'une connection ftp avec Net_FTP de PEAR
// voir http://pear.php.net/manual/fr/package.networking.net-ftp.php
// création de l'objet pear ftp
$objet_pear_ftp = new Net_FTP(PAP_FTP_SERVEUR, PAP_FTP_PORT);
// création de la connexion
$ftp_conn = $objet_pear_ftp->connect(PAP_FTP_SERVEUR, PAP_FTP_PORT);
// identification
$ftp_login_result = $objet_pear_ftp->login(PAP_FTP_UTILISATEUR, PAP_FTP_MOT_DE_PASSE);
// Gestion des erreurs ftp
if ((PEAR::isError($ftp_conn) || PEAR::isError($ftp_login_result))) {
$message = '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de se connecter par ftp.<br />'.
'Serveur : '. PAP_FTP_SERVEUR .'<br />'.
'Utilisateur : '. PAP_FTP_UTILISATEUR .'<br />'.
'Erreur connexion : '.$ftp_conn->getMessage().'<br />'.
'Erreur login : '.$ftp_login_result->getMessage().'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br /><p>';
return $message;
}
$resultat = $objet_pear_ftp->putRecursive($chemin_site_ancien, $chemin_site_nouveau, false, FTP_BINARY);
if (PEAR::isError($resultat)) {
$message = '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de copier l\'ancien dossier du site.<br />'.
'Dossier site ancien : '. $chemin_site_ancien .'<br />'.
'Dossier site nouveau : '. $chemin_site_nouveau .'<br />'.
'Erreur origine : '. $resultat->getMessage() .'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br /></p>';
return $message;
}
// On utilise la racine FTP pour rm
$chemin_site_ancien = PAP_FTP_RACINE.GEN_CHEMIN_SITES.$ancien_code_alphnum.GEN_SEP;
// Changement du niveau d'erreur pour éviter les Notices PHP dues à Net_FTP
error_reporting(E_PARSE);
$resultat = $objet_pear_ftp->rm($chemin_site_ancien, true);
if (PEAR::isError($resultat)) {
$message = '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de supprimer l\'ancien dossier du site.<br />'.
'Dossier site ancien : '. $chemin_site_ancien .'<br />'.
'Erreur origine : '. $resultat->getMessage() .'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br /></p>';
return $message;
}
// Retour au niveau d'erreur définit dans le fichier de config de Papyrus
error_reporting(GEN_DEBOGAGE_NIVEAU);
$objet_pear_ftp->disconnect();
}
}
// Requete de mise à jour des infos d'un site dans gen_site
$requete = 'UPDATE gen_site '.
'SET gs_ce_i18n = "'.$aso_valeurs['gs_ce_i18n'].'", '.
'gs_ce_auth = '.$aso_valeurs['gs_ce_auth'].', '.
'gs_fichier_squelette = "'.$aso_valeurs['gs_fichier_squelette'].'", '.
'gs_code_num = '.$aso_valeurs['gs_code_num'].', '.
'gs_code_alpha = "'.$aso_valeurs['gs_code_alpha'].'", '.
'gs_nom = "'.$aso_valeurs['gs_nom'].'", '.
'gs_raccourci_clavier = "'.$aso_valeurs['gs_raccourci_clavier'].'", '.
'gs_titre = "'.$aso_valeurs['gs_titre'].'", '.
'gs_mots_cles = "'.$aso_valeurs['gs_mots_cles'].'", '.
'gs_description = "'.$aso_valeurs['gs_description'].'", '.
'gs_auteur = "'.$aso_valeurs['gs_auteur'].'", '.
'gs_date_creation = "'.$aso_valeurs['gs_date_creation'].'", '.
'gs_ce_admin = '.$id_admin.' '.
$requete_complement.
'WHERE gs_id_site = '.$aso_valeurs['gs_id_site'];
$resultat = $db->query($requete) ;
if (DB::isError($resultat)) {
die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
}
// Gestion du site externe
if ($id_type_site == 103) {
// Vérification pour voir si nous avons à faire à une transformation d'un site "principal" en site "externe"
$requete = 'SELECT COUNT(gsr_id_site_01) AS nbre_relation '.
'FROM gen_site_relation '.
'WHERE gsr_id_site_01 = gsr_id_site_02 '.
'AND gsr_id_site_01 = '.$aso_valeurs['gs_id_site'].' '.
'AND gsr_id_valeur = 102 ';// 102 = site "principal"
$nbre_relation = $db->getOne($requete);
if (DB::isError($nbre_relation)) {
die( BOG_afficherErreurSql(__FILE__, __LINE__, $nbre_relation->getMessage(), $requete) );
}
// Nous supprimons l'ancienne relation si nécessaire
if ($nbre_relation >= 1) {
$requete_supr_ext = 'DELETE FROM gen_site_relation '.
'WHERE gsr_id_site_01 = gsr_id_site_02 '.
'AND gsr_id_site_01 = '.$aso_valeurs['gs_id_site'].' '.
'AND gsr_id_valeur = 102 ';// 102 = site "principal"
$resultat_supr_ext = $db->query($requete_supr_ext);
if (DB::isError($resultat_supr_ext)) {
die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_supr_ext->getMessage(), $requete_supr_ext));
}
$message_complement = 'Le site "principal" a été transformé en site "externe". Si nécessaire, veuillez '.
'supprimer manuellement par FTP, le dossier contenant les fichiers de ce site sur '.
'le serveur!';
}
// Vérification pour voir si le site est déjà "externe"
$requete = 'SELECT COUNT(gsr_id_site_01) AS nbre_relation '.
'FROM gen_site_relation '.
'WHERE gsr_id_site_01 = gsr_id_site_02 '.
'AND gsr_id_site_01 = '.$aso_valeurs['gs_id_site'].' '.
'AND gsr_id_valeur = 103 ';// 103 = site "externe"
$nbre_relation = $db->getOne($requete);
if (DB::isError($nbre_relation)) {
die( BOG_afficherErreurSql(__FILE__, __LINE__, $nbre_relation->getMessage(), $requete) );
}
if ($nbre_relation == 0) {
// Requete d'insertion de la relations site "externe"
$requete = 'INSERT INTO gen_site_relation '.
'SET gsr_id_site_01 = '.$aso_valeurs['gs_id_site'].', '.
'gsr_id_site_02 = '.$aso_valeurs['gs_id_site'].', '.
'gsr_id_valeur = '.$id_type_site.', '.
'gsr_ordre = NULL ';
$resultat = $db->query($requete);
if (DB::isError($resultat)) {
die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));
}
}
// Ajout du type de site externe
$requete = 'INSERT INTO gen_site_relation '.
'SET gsr_id_site_01 = '.$aso_valeurs['gs_id_site'].', '.
'gsr_id_site_02 = '.$aso_valeurs['gs_id_site'].', '.
'gsr_id_valeur = '.$aso_valeurs['type_site_externe'].', '.
'gsr_ordre = NULL ';
$resultat = $db->query($requete);
if (DB::isError($resultat)) {
die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));
}
}
// Gestion du site par défaut
if (isset($aso_valeurs['defaut']) && $aso_valeurs['defaut'] == 1) {
$requete_supr_defaut = 'DELETE FROM gen_site_relation '.
'WHERE gsr_id_site_01 = gsr_id_site_02 '.
'AND gsr_id_valeur = 101 ';// 101 = site par "defaut"
$resultat_supr_defaut = $db->query($requete_supr_defaut);
if (DB::isError($resultat_supr_defaut)) {
die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_supr_defaut->getMessage(), $requete_supr_defaut));
}
// Requete d'insertion de la relations site par défaut
$requete = 'INSERT INTO gen_site_relation '.
'SET gsr_id_site_01 = '.$aso_valeurs['gs_id_site'].', '.
'gsr_id_site_02 = '.$aso_valeurs['gs_id_site'].', '.
'gsr_id_valeur = 101, '.
'gsr_ordre = NULL ';
$resultat = $db->query($requete);
if (DB::isError($resultat)) {
die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));
}
}
$message = '<p class="pap_info">'.'Succés de la modification du site.'.'</p>';
$message .= '<p class="pap_info">'.$message_complement.'</p>';
return $message;
}
 
/** Fonction ADMIN_supprimerSite() - Ajoute un site à Papyrus.
*
* Cette fonction ajoute le site à Papyrus, c'est à dire :
* - 1. Création des répertoire du projet en fonction du nom et des sous-répertoires.
* - 2. Insertion d'une ligne dans la table "gen_site".
* - 3. Insertion d'une ligne dans la table "gen_site_auth" et ses tables liées si nécessaire.
*
* @param string l'objet pear de connexion à la base de données.
* @param string le tableau contenant les valeurs du formulaire.
* @param int identifiant de l'administrateur réalisant cette création.
* @return string retourne un message en cas de succès ou d'échec.
*/
function ADMIN_supprimerSite(&$db, $aso_valeurs)
{
// Recherche du coda alpha du site principal afin de pouvoir détruire ses répertoires
$requete = 'SELECT gs_code_alpha '.
'FROM gen_site '.
'WHERE gs_id_site = '.$aso_valeurs['form_sites_id_site'];
$code_alpha_site_principal = $db->getOne($requete);
if (DB::isError($code_alpha_site_principal)) {
die(BOG_afficherErreurSql(__FILE__, __LINE__, $code_alpha_site_principal->getMessage(), $requete));
}
// Nous vérifions que le site n'a pas le code alphanum correspondant au site par défaut d'administration (admin).
if ($code_alpha_site_principal == GEN_SITE_DEFAUT) {
$message = '<p class="pap_erreur">Si vous voulez vraiment supprimer le site d\'administration par défaut de '.
'Papyrus, veuillez commencer par changer la valeur de son code alphanumérique. Vous pourrez '.
'ensuite le supprimer via cette interface.</p>';
return $message;
}
// Recherche des différents sites liés à celui que l'on veut détruire
// Cela comprend le site à détruire lui méme car il posséde la relations
// sur lui meme "site principale".
$requete = 'SELECT gs_id_site '.
'FROM gen_site, gen_site_relation '.
'WHERE gsr_id_site_01 = '.$aso_valeurs['form_sites_id_site'].' '.
'AND gsr_id_site_02 = gs_id_site ';
$resultat = $db->query($requete);
if (DB::isError($resultat)) {
die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));
}
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
// Requete de suppression des sites liés dans gen_site
$requete_supr_site = 'DELETE FROM gen_site '.
'WHERE gs_id_site = '.$ligne->gs_id_site;
$resultat_supr_site = $db->query($requete_supr_site);
if (DB::isError($resultat_supr_site)) {
die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_supr_site->getMessage(), $requete_supr_site));
}
// Requete de suppression des relations des sites à détruire
$requete_supr_site_relation = 'DELETE FROM gen_site_relation '.
'WHERE gsr_id_site_01 = '.$ligne->gs_id_site;
$resultat_supr_site_relation = $db->query($requete_supr_site_relation);
if (DB::isError($resultat_supr_site_relation)) {
die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_supr_site_relation->getMessage(), $requete_supr_site_relation));
}
// Recherche des différents menus liés au site à détruire
$requete_menu = 'SELECT gm_id_menu '.
'FROM gen_menu '.
'WHERE gm_ce_site = '.$ligne->gs_id_site;
$resultat_menu = $db->query($requete_menu) ;
if (DB::isError($resultat_menu)) {
die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_menu->getMessage(), $requete_menu));
}
while ($ligne_menu = $resultat_menu->fetchRow(DB_FETCHMODE_OBJECT)) {
// Requete de suppression des des menus
$requete_supr_menu = 'DELETE FROM gen_menu '.
'WHERE gm_id_menu = '.$ligne_menu->gm_id_menu;
$resultat_supr_menu = $db->query($requete_supr_menu);
if (DB::isError($resultat_supr_menu)) {
die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_supr_menu->getMessage(), $requete_supr_menu));
}
// Requete de suppression des relations des menus
$requete_supr_menu_relation = 'DELETE FROM gen_menu_relation '.
'WHERE gmr_id_menu_01 = '.$ligne_menu->gm_id_menu;
$resultat_supr_menu_relation = $db->query($requete_supr_menu_relation);
if (DB::isError($resultat_supr_menu_relation)) {
die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_supr_menu_relation->getMessage(), $requete_supr_menu_relation));
}
// Requete de suppression des contenus des menus
$requete_supr_menu_contenu = 'DELETE FROM gen_menu_contenu '.
'WHERE gmc_ce_menu = '.$ligne_menu->gm_id_menu;
$resultat_supr_menu_contenu = $db->query($requete_supr_menu_contenu);
if (DB::isError($resultat_supr_menu_contenu)) {
die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_supr_menu_contenu->getMessage(), $requete_supr_menu_contenu));
}
// Requete de suppression des ulr alternatives des menus
$requete_supr_menu_url_alt = 'DELETE FROM gen_menu_url_alternative '.
'WHERE gmua_ce_menu = '.$ligne_menu->gm_id_menu;
$resultat_supr_menu_url_alt = $db->query($requete_supr_menu_url_alt);
if (DB::isError($resultat_supr_menu_url_alt)) {
die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_supr_menu_url_alt->getMessage(), $requete_supr_menu_url_alt));
}
}
$resultat_menu->free();
}
$resultat->free();
// Suppression des répertoires du site
if (!GEN_FTP_UTILISE) {
$chemin_repertoire = PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$code_alpha_site_principal;
$resultat = supprimerDossier($chemin_repertoire, GEN_SEP);
if (!$resultat) {
$message = '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de supprimer le répertoire.<br />'.
'Répertoire : '. $chemin_repertoire .'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br /></p>';
return $message;
}
} else {
// Création d'une connection ftp avec Net_FTP de PEAR
// voir http://pear.php.net/manual/fr/package.networking.net-ftp.php
// création de l'objet pear ftp
$objet_pear_ftp = new Net_FTP(PAP_FTP_SERVEUR, PAP_FTP_PORT);
// création de la connexion
$ftp_conn = $objet_pear_ftp->connect(PAP_FTP_SERVEUR, PAP_FTP_PORT);
// identification
$ftp_login_result = $objet_pear_ftp->login(PAP_FTP_UTILISATEUR, PAP_FTP_MOT_DE_PASSE);
// Gestion des erreurs ftp
if ((PEAR::isError($ftp_conn) || PEAR::isError($ftp_login_result))) {
$message = '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de se connecter par ftp.<br />'.
'Erreur connexion : '.$ftp_conn->getMessage().'<br />'.
'Erreur login : '.$ftp_login_result->getMessage().'<br />'.
'Serveur : '. PAP_FTP_SERVEUR .'<br />'.
'Utilisateur : '. PAP_FTP_UTILISATEUR .'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br /><p>';
return $message;
}
// Changement du niveau d'erreur pour éviter les Notices PHP dues à Net_FTP
error_reporting(E_PARSE);
$chemin_repertoire = PAP_FTP_RACINE.GEN_CHEMIN_SITES.$code_alpha_site_principal.'/';
if ($code_alpha_site_principal!='') {
$resultat = $objet_pear_ftp->rm($chemin_repertoire, true);
if (PEAR::isError($resultat)) {
$message = '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de supprimer le répertoire par ftp.<br />'.
'Erreur ftp : '.$resultat->getMessage().'<br />'.
'Répertoire : '. $chemin_repertoire .'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br /></p>';
return $message;
}
}
$objet_pear_ftp->disconnect();
// Retour au niveau d'erreur définit dans le fichier de config de Papyrus
error_reporting(GEN_DEBOGAGE_NIVEAU);
}
$message = '<p class="pap_info">Succés de la suppression du site.</p>';
return $message;
}
 
 
function ADMIN_verifier_traduction_possible(&$db, $aso_valeurs) {
// Traduction d'un site principal uniquement :
$requete = 'SELECT gsr_id_site_01, gs_ce_i18n '.
'FROM gen_site_relation, gen_site '.
'WHERE gsr_id_site_02 = '.$aso_valeurs['form_sites_id_site'].' '.
'AND gs_id_site = gsr_id_site_01 '.
'AND gsr_id_valeur =1 '; // 1 = "avoir traduction"
$resultat = $db->query($requete);
if (DB::isError($resultat)) {
die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
}
 
if ( $resultat->numRows() == 0 ) {
$site_id = $aso_valeurs['form_sites_id_site'];
}
else {
$ligne_site = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
$site_id = $ligne_site->gsr_id_site_01;
}
$requete = 'SELECT distinct gs_ce_i18n '.
'FROM gen_site_relation, gen_site '.
'WHERE gsr_id_site_01 = ' . $site_id .' '.
'AND gs_id_site = gsr_id_site_02 '.
'AND gsr_id_valeur =1 '; // 1 = "avoir traduction"
$resultat = $db->query($requete) ;
if (DB::isError($resultat)) {
die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
}
$not_in_langue='';
if ( $resultat->numRows() == 0 ) {
$not_in_langue="gi_id_i18n not in('".$ligne_site->gs_ce_i18n."')";
}
else {
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
$not_in_langue="'".$ligne->gs_ce_i18n."'".",".$not_in_langue;
$end="'".$ligne->gs_ce_i18n."'";
}
$not_in_langue=' gi_id_i18n not in('.$not_in_langue.$end.')';
}
$resultat->free();
 
$requete = "SELECT * FROM gen_i18n where ".$not_in_langue;
$resultat = $db->query($requete) ;
if (DB::isError($resultat)) {
die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
}
$retour = $resultat->numRows();
$resultat->free();
$message='';
if ($retour == 0) {
$message = '<p class="pap_erreur">Plus de traduction possible pour ce site </p>';
}
return $message;
}
// +- Fin du code source --------------------------------------------------------------------------------+
/*
* $Log: not supported by cvs2svn $
* Revision 1.32 2006/10/16 15:49:06 ddelon
* Refactorisation code mulitlinguisme et gestion menu invisibles
*
* Revision 1.31 2006/09/12 09:54:02 ddelon
* Affichage des identifications disponibles lors de la création d'un site. Un bug faisait que l'affichage de l'identification par défaut ne fonctionnait plus en creation.
*
* Revision 1.30 2006/07/19 13:57:35 ddelon
* Bug suppression de site
*
* Revision 1.29 2006/03/23 20:24:58 ddelon
* *** empty log message ***
*
* Revision 1.28 2006/03/15 23:44:19 ddelon
* Gestion site
*
* Revision 1.27 2006/03/15 23:35:25 ddelon
* Gestion site
*
* Revision 1.26 2006/03/02 10:49:49 ddelon
* Fusion branche multilinguisme dans branche principale
*
* Revision 1.25.2.2 2006/02/28 14:02:10 ddelon
* Finition multilinguisme
*
* Revision 1.25.2.1 2006/01/19 21:26:20 ddelon
* Multilinguisme site + bug ftp
*
* Revision 1.25 2005/10/17 13:48:59 jp_milcent
* Ajout d'un espace après le texte "Dernière modification par".
*
* Revision 1.24 2005/09/23 14:32:54 florian
* compatibilité XHTML + correction interface
*
* Revision 1.23 2005/09/20 17:01:22 ddelon
* php5 et bugs divers
*
* Revision 1.22 2005/05/27 16:06:16 jpm
* Gestion des infos sur l'admin modifiant les infos.
*
* Revision 1.21 2005/04/08 13:29:04 jpm
* Utiliation de références.
* Correction du double &amp; dans les urls du formulaire.
*
* Revision 1.20 2005/03/08 11:17:47 jpm
* Suppression de l'inclusion d'un fichier inutile.
*
* Revision 1.19 2005/02/28 11:07:00 jpm
* Modification des auteurs.
*
* Revision 1.18 2005/02/28 10:59:07 jpm
* Modification des commentaires et copyright.
*
* Revision 1.17 2005/02/17 17:51:11 florian
* Correction bug FTP
*
* Revision 1.16 2005/02/17 16:44:55 florian
* correction du bug sur les sites par défaut
*
* Revision 1.15 2005/01/04 19:52:50 alex
* correction de bug de copie de répertoire récursif de PEAR.
*
* Revision 1.14 2004/12/03 19:22:53 jpm
* Gestion des types de sites externes gérés par Papyrus.
*
* Revision 1.13 2004/12/03 16:37:34 jpm
* Correction d'un bogue qui empécher la mise à jour des url des sites externes.
*
* Revision 1.12 2004/12/01 17:22:58 jpm
* Ajout d'une confirmation javascript pour la suppression d'un site.
*
* Revision 1.11 2004/11/30 16:43:51 jpm
* Correction de bogues.
*
* Revision 1.10 2004/11/29 17:05:28 jpm
* Correction d'un bogue concernat les cases à cocher.
*
* Revision 1.9 2004/11/26 13:13:51 jpm
* Mise en commentaire de variable passée dans un message d'erreur car elles semblent provoquer un bogue et ne sont pas obligatoire.
*
* Revision 1.8 2004/11/03 17:59:59 jpm
* Corrections bogues erreurs variable inconnue.
*
* Revision 1.7 2004/10/26 18:41:28 jpm
* Gestion des sites externes à Papyrus.
*
* Revision 1.6 2004/10/22 17:25:31 jpm
* Changement du nom de la class CSS d'erreur.
*
* Revision 1.5 2004/10/19 15:57:55 jpm
* Amélioration de la gestion des fichiers sur le serveur.
* Ajout d'une contrainte pour éviter la suppression par erreur du site par défaut.
*
* Revision 1.4 2004/10/18 18:27:41 jpm
* Correction problèmes FTP et manipulation de fichiers.
*
* Revision 1.3 2004/09/23 16:51:27 jpm
* Ajout d'informations supplémentaires sur les messages d'erreur.
*
* Revision 1.2 2004/07/06 17:08:01 jpm
* Modification de la documentation pour une mailleur analyse par PhpDocumentor.
*
* Revision 1.1 2004/06/16 14:28:46 jpm
* Changement de nom de Génésia en Papyrus.
* Changement de l'arborescence.
*
* Revision 1.20 2004/05/10 14:32:14 jpm
* Changement du titre.
*
* Revision 1.19 2004/05/10 12:23:39 jpm
* Modification formulaire.
*
* Revision 1.18 2004/05/07 16:33:53 jpm
* Amélioration des formulaires.
*
* Revision 1.17 2004/05/07 07:22:51 jpm
* Ajout de la gestion des modification et suppression de site.
* Amélioration de la création des sites.
*
* Revision 1.16 2004/04/30 16:22:53 jpm
* Poursuite de l'administration des sites.
*
* Revision 1.14 2004/04/02 15:58:39 jpm
* Modification fonction liste des projets.
*
* Revision 1.13 2004/04/01 11:21:41 jpm
* Ajout et modification de commentaires pour PhpDocumentor.
*
* Revision 1.12 2004/03/24 20:01:02 jpm
* Traduction, mise en forme, ajout de commentaire pour les fonctions listProjects() et updateProject().
*
* Revision 1.11 2004/03/24 10:06:01 jpm
* Ajout des commentaires d'entête.
* Début mise en conformité avec la convention de codage.
* Début traitement de la fonction listant les projets.
*
*
*/
?>
/branches/v1.0-menes/papyrus/applications/admin_site/langues/adsi_langue_en.inc.php
New file
0,0 → 1,65
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This file is part of Papyrus. |
// | |
// | Foobar is free software; you can redistribute it and/or modify |
// | it under the terms of the GNU General Public License as published by |
// | the Free Software Foundation; either version 2 of the License, or |
// | (at your option) any later version. |
// | |
// | Foobar 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 General Public License for more details. |
// | |
// | You should have received a copy of the GNU General Public License |
// | along with Foobar; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: adsi_langue_en.inc.php,v 1.2 2006-03-02 10:49:49 ddelon Exp $
/**
* Gestion des langues de l'application ADME
*
* Contient les constantes pour la langue française de l'application ADSI
*
*@package Admin_auth
*@subpackage Langues
//Auteur original :
*@author Alexandre Granier <alexandre@tela-botanica.org>
//Autres auteurs :
*@author Aucun
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.2 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | LISTE des CONSTANTES |
// +------------------------------------------------------------------------------------------------------+
define('ADSI_TITRE_SITE', 'Site title');
 
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.1.2.1 2006/02/28 14:02:10 ddelon
* Finition multilinguisme
*
* Revision 1.3 2005/04/14 13:54:51 jpm
* Amélioration de l'interface et mise en conformité.
*
* Revision 1.2 2004/12/13 18:07:57 alex
* ajout de labels
*
* Revision 1.1 2004/12/06 11:31:37 alex
* version initiale
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/applications/admin_site/langues/adsi_langue_fr.inc.php
New file
0,0 → 1,68
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This file is part of Papyrus. |
// | |
// | Foobar is free software; you can redistribute it and/or modify |
// | it under the terms of the GNU General Public License as published by |
// | the Free Software Foundation; either version 2 of the License, or |
// | (at your option) any later version. |
// | |
// | Foobar 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 General Public License for more details. |
// | |
// | You should have received a copy of the GNU General Public License |
// | along with Foobar; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: adsi_langue_fr.inc.php,v 1.3 2006-10-06 10:40:51 florian Exp $
/**
* Gestion des langues de l'application ADME
*
* Contient les constantes pour la langue française de l'application ADSI
*
*@package Admin_auth
*@subpackage Langues
//Auteur original :
*@author Alexandre Granier <alexandre@tela-botanica.org>
//Autres auteurs :
*@author Aucun
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.3 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | LISTE des CONSTANTES |
// +------------------------------------------------------------------------------------------------------+
define('ADSI_TITRE_SITE', 'Titre du site');
define('ADSI_IDENTIFIEZ_VOUS','Veuillez vous identifier pour acc&egrave;der &agrave; ce menu.');
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.2 2006/03/02 10:49:49 ddelon
* Fusion branche multilinguisme dans branche principale
*
* Revision 1.1.2.1 2006/02/28 14:02:10 ddelon
* Finition multilinguisme
*
* Revision 1.3 2005/04/14 13:54:51 jpm
* Amélioration de l'interface et mise en conformité.
*
* Revision 1.2 2004/12/13 18:07:57 alex
* ajout de labels
*
* Revision 1.1 2004/12/06 11:31:37 alex
* version initiale
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/applications/afficheur/afficheur.php
New file
0,0 → 1,386
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library 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 |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: afficheur.php,v 1.13 2006-11-21 18:52:20 jp_milcent Exp $
/**
* Application réalisant l'affichage du contenu stocké dans Papyrus.
*
* Récupère le dernier contenu lié à un menu et le retourne.
*
*@package Afficheur
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author Alexandre GRANIER <alexandrel@tela-botanica.org>
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.13 $ $Date: 2006-11-21 18:52:20 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTÊTE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
/** Inclusion du fichier de configuration de cette application.*/
require_once GEN_CHEMIN_PAP.'applications/afficheur/configuration/affi_configuration.inc.php';
// Inclusion de la bibliothèque PEAR Text_Wiki réalisées par Papyrus.
 
// +------------------------------------------------------------------------------------------------------+
// | CORPS du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
/** Fonction afficherContenuTete() - Fonction appelé par le gestionnaire Papyrus.
*
* Elle retourne l'entête de l'application..
*
* @return string du code XHTML correspondant à la zone d'entête de l'application.
*/
function afficherContenuTete()
{
return '';
}
 
function afficherContenuCorps() {
 
 
$retour = '';
$db=$GLOBALS['_AFFICHEUR']['objet_pear_db'];
 
$id_or=GEN_rechercheMenuCode($db,GEN_rechercheMenuIdentifiant($db,$GLOBALS['_AFFICHEUR']['menu_courant_id']));
 
$ligne_contenu=GEN_rechercheContenu($db,$id_or);
$contenu = $ligne_contenu->gmc_contenu;
// Inclusion de la bibliothèque Text_Wiki_Papyrus effectuées par Papyrus précédement
// Les actions Text_Wiki_Papyrus sont gérées par Papyrus
// Nous regardons si nous avons à faire à un texte sous format Wikini ou XHTML
if (($ligne_contenu->gmc_ce_type_contenu == 1)||(substr($ligne_contenu->gmc_ce_type_contenu,-1)== 1)) {
$retour = $contenu;
} elseif (($ligne_contenu->gmc_ce_type_contenu == 2) || (substr($ligne_contenu->gmc_ce_type_contenu,-1)== 2)){
include_once AFFI_CHEMIN_BIBLIOTHEQUE_API.'text/wiki_wikini/Wikini.class.php';
// Création d'un objet Text_Wikini :
$wikini =& new Text_Wikini();
// Pour éviter de remplacer les caractères spéciaux du XHTML:
$wikini->setFormatConf('Xhtml', 'translate', false);
// Configuration de la règle Freelink :
$wikini->setRenderConf('Xhtml', 'freelink', 'pages', null);
$wikini->setRenderConf('Xhtml', 'freelink', 'view_url', AFFI_URL_PAPYRUS);
// Configuration de la règle Interwiki :
$wikini->setRenderConf('Xhtml', 'interwiki', 'sites', $GLOBALS['_AFFICHEUR']['interwiki_sites']);
// Application des règles de Wikini :
$retour = $wikini->transform($contenu, 'Xhtml');
}
 
//----------------------------------------------------------------------------
// Renvoie du contenu de la page
return $retour;
}
 
 
/** Fonction afficherContenuCorps() - Fonction appelé par le gestionnaire Papyrus.
*
* Elle retourne le contenu stocké dans Papyrus pour le menu courant demandé.
*
* @return string du code XHTML correspondant au contenu du menu demandé.
*/
function afficherContenuCorpsOld()
{
//----------------------------------------------------------------------------
// Initialisation des variable
$retour = '';
$id_langue = $GLOBALS['_GEN_commun']['i18n'];
if (isset($id_langue) && ($id_langue!='')) {
$langue_test=$id_langue;
} else {
$langue_test=GEN_I18N_ID_DEFAUT;
}
 
//-------------------------------------------------------------------------------------------------------------------
// Récupération des informations du contenu concerné.
$ligne_menu = GEN_lireInfoMenu($GLOBALS['_AFFICHEUR']['objet_pear_db'], $GLOBALS['_AFFICHEUR']['menu_courant_id'], DB_FETCHMODE_ASSOC);
if ($ligne_menu == false) {
die('ERREUR Papyrus Administrateur de Menus: impossible de lire les infos du menu.<br />'.
'Idenitifiant du menu n° : '. $GLOBALS['_AFFICHEUR']['objet_pear_db'] .'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br />');
}
 
// Comment ca marche ?
// Historiquement, le code menu est associé au contenu
// Depuis le passage au multilinguisme : ce comportement est conservé mais :
// Tout nouveau contenu, contient également l'information code gm_id_menu, enfoui dans le
// type contenu.
// Récupération identifiant du menu en cours
$requete = 'SELECT gm_id_menu, gm_code_num '.
'FROM gen_menu '.
'WHERE gm_code_num = '.$ligne_menu['gm_code_num'].' '.
'AND gm_ce_i18n = "'.$langue_test.'" ';
 
$resultat = $GLOBALS['_AFFICHEUR']['objet_pear_db']->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
if ( $resultat->numRows() > 0 ) {
$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
}
else {
// Recherche defaut :
 
$requete = 'SELECT gm_id_menu, gm_code_num '.
'FROM gen_menu '.
'WHERE gm_code_num = '.$ligne_menu['gm_code_num'].' ';
'AND gm_ce_i18n = "'.GEN_I18N_ID_DEFAUT.'" ';
 
$resultat = $GLOBALS['_AFFICHEUR']['objet_pear_db']->query($requete);
 
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
if ($langue_test!=GEN_I18N_ID_DEFAUT) {
$requete_defaut = 'SELECT gmr_id_menu_02 as gm_id_menu , ' . $ligne->gm_code_num . ' as gm_code_num '.
'FROM gen_menu_relation '.
'WHERE '.$ligne->gm_id_menu. ' = gmr_id_menu_01 ' .
'AND gmr_id_valeur = 105 ';// 105 Traduction par defaut
$resultat_defaut = $GLOBALS['_AFFICHEUR']['objet_pear_db']->query($requete_defaut);
(DB::isError($resultat_defaut)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_defaut->getMessage(), $requete_defaut))
: '';
if ($resultat_defaut->numRows() > 0) {
$ligne=$resultat_defaut->fetchRow(DB_FETCHMODE_OBJECT);
}
}
}
 
// Cas historique : ce menu n'a jamais été traduit.
$requete = 'SELECT gmc_contenu , gmc_ce_type_contenu '.
'FROM gen_menu_contenu '.
'WHERE gmc_ce_menu = '.$ligne->gm_id_menu.' '.
'AND gmc_ce_type_contenu in (1,2) '.
'AND gmc_bool_dernier = 1';
$resultat = $GLOBALS['_AFFICHEUR']['objet_pear_db']->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
// Rien trouvé ? : Migration multilinguisme ou pas encore de contenu
if ( $resultat->numRows() == 0 ) {
// Migration multilinguisme
$requete = 'SELECT gmc_contenu , gmc_ce_type_contenu '.
'FROM gen_menu_contenu '.
'WHERE gmc_ce_menu = '.$ligne_menu['gm_code_num'].' '.
'AND truncate((gmc_ce_type_contenu/10),0) = '. $ligne->gm_id_menu . ' '.
'AND gmc_bool_dernier = 1';
$resultat = $GLOBALS['_AFFICHEUR']['objet_pear_db']->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
// Pas de contenu, tentative de recuperation du contenu se
if ( $resultat->numRows() == 0 ) {
$requete = 'SELECT gmr_id_menu_02 as gm_id_menu , ' . $ligne->gm_code_num . ' as gm_code_num '.
'FROM gen_menu_relation '.
'WHERE '.$ligne->gm_id_menu. ' = gmr_id_menu_01 ' .
'AND gmr_id_valeur = 105 ';// 105 Traduction par defaut
$resultat = $GLOBALS['_AFFICHEUR']['objet_pear_db']->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete))
: '';
 
$requete = 'SELECT gmc_contenu , gmc_ce_type_contenu '.
'FROM gen_menu_contenu, gen_menu_relation '.
'WHERE truncate((gmc_ce_type_contenu/10),0) = gmr_id_menu_01 '.
'AND '.$ligne->gm_id_menu.' = gmr_id_menu_02 '.
'AND gmr_id_valeur = 2 '.
'AND gmc_bool_dernier = 1';
 
$resultat = $GLOBALS['_AFFICHEUR']['objet_pear_db']->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
 
/*
$requete = 'SELECT gmr_id_menu_02 as gm_id_menu , ' . $ligne->gm_code_num . ' as gm_code_num '.
'FROM gen_menu_relation '.
'WHERE '.$ligne->gm_id_menu. ' = gmr_id_menu_01 ' .
'AND gmr_id_valeur = 105 ';// 105 Traduction par defaut
$resultat = $GLOBALS['_AFFICHEUR']['objet_pear_db']->query($requete);
print_r ($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete))
: '';
*/
}
// Toujours rien ?
if ( $resultat->numRows() == 0 ) {
$requete = 'SELECT gmc_contenu , gmc_ce_type_contenu '.
'FROM gen_menu_contenu '.
'WHERE gmc_ce_menu = '.$ligne->gm_code_num.' '.
'AND gmc_ce_type_contenu in (1,2) '.
'AND gmc_bool_dernier = 1';
$resultat = $GLOBALS['_AFFICHEUR']['objet_pear_db']->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
}
}
$ligne_contenu = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
$contenu = $ligne_contenu->gmc_contenu;
// Inclusion de la bibliothèque Text_Wiki_Papyrus effectuées par Papyrus précédement
// Les actions Text_Wiki_Papyrus sont gérées par Papyrus
// Nous regardons si nous avons à faire à un texte sous format Wikini ou XHTML
if (($ligne_contenu->gmc_ce_type_contenu == 1)||(substr($ligne_contenu->gmc_ce_type_contenu,-1)== 1)) {
$retour = $contenu;
} elseif (($ligne_contenu->gmc_ce_type_contenu == 2) || (substr($ligne_contenu->gmc_ce_type_contenu,-1)== 2)){
include_once AFFI_CHEMIN_BIBLIOTHEQUE_API.'text/wiki_wikini/Wikini.class.php';
// Création d'un objet Text_Wikini :
$wikini =& new Text_Wikini();
// Pour éviter de remplacer les caractères spéciaux du XHTML:
$wikini->setFormatConf('Xhtml', 'translate', false);
// Configuration de la règle Freelink :
$wikini->setRenderConf('Xhtml', 'freelink', 'pages', null);
$wikini->setRenderConf('Xhtml', 'freelink', 'view_url', AFFI_URL_PAPYRUS);
// Configuration de la règle Interwiki :
$wikini->setRenderConf('Xhtml', 'interwiki', 'sites', $GLOBALS['_AFFICHEUR']['interwiki_sites']);
// Application des règles de Wikini :
$retour = $wikini->transform($contenu, 'Xhtml');
}
 
// +---------------------------------------------------------------------------------------------------------------+
// Nous regardons si nous voulons surligner ou pas des mots
if (isset($_GET['var_recherche'])) {
$tab_mots = explode(' ', rawurldecode($_GET['var_recherche']));
foreach ($tab_mots as $mot) {
if (strlen($mot) >= 2) {
$regexp = '/(>[^<]*)('.$mot.'\b)/Uis';
$retour = preg_replace($regexp, '$1<span class="surlignage">$2</span>', $retour);
}
}
}
 
//----------------------------------------------------------------------------
// Renvoie du contenu de la page
return $retour;
}
// +------------------------------------------------------------------------------------------------------+
// | LISTE de FONCTIONS |
// +------------------------------------------------------------------------------------------------------+
 
 
 
// +------------------------------------------------------------------------------------------------------+
// | PIED du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.12 2006/11/21 15:50:05 jp_milcent
* Ajout du surlignage des mots passé dans la query string via la variable var_recherche.
*
* Revision 1.11 2006/10/16 15:49:07 ddelon
* Refactorisation code mulitlinguisme et gestion menu invisibles
*
* Revision 1.10 2006/06/29 15:12:26 ddelon
* Multilinguisme : contenu par defaut
*
* Revision 1.9 2006/03/27 10:50:24 ddelon
* Still some pb
*
* Revision 1.7 2006/03/13 21:00:20 ddelon
* Suppression messages d'erreur multilinguisme
*
* Revision 1.6 2006/03/02 10:49:49 ddelon
* Fusion branche multilinguisme dans branche principale
*
* Revision 1.5.2.3 2006/03/02 00:22:23 ddelon
* bug afficheur multilinguisme
*
* Revision 1.5.2.2 2006/03/01 23:51:07 ddelon
* bug afficheur multilinguisme
*
* Revision 1.5.2.1 2006/02/28 14:02:11 ddelon
* Finition multilinguisme
*
* Revision 1.5 2005/04/21 16:46:17 jpm
* Gestion via Papyrus du XHTML.
*
* Revision 1.4 2005/02/22 18:25:13 jpm
* Déplacement d'un message d'alerte en cas d'erreur sql.
*
* Revision 1.3 2004/12/07 12:24:30 jpm
* Changement chemin d'accés à l'api Text/Wiki...
*
* Revision 1.2 2004/11/26 13:10:05 jpm
* Utilisation des actions Papyrus et implémentation de la syntaxe Wikini.
*
* Revision 1.1 2004/06/16 14:35:26 jpm
* Changement de nom de Génésia en Papyrus.
* Changement de l'arborescence.
*
* Revision 1.12 2004/05/05 11:35:12 jpm
* Amélioration de la gestion de l'internationalisation.
*
* Revision 1.11 2004/05/05 06:45:40 jpm
* Suppression de l'appel de la fonction générant le "vous êtes ici" dans la fonction affichant l'entête de l'application.
*
* Revision 1.10 2004/05/04 16:28:22 jpm
* Réduction de code pour la fonction afficherContenuTete().
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/applications/afficheur/configuration/affi_configuration.inc.php
New file
0,0 → 1,148
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.3 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This file is part of Papyrus. |
// | |
// | Foobar is free software; you can redistribute it and/or modify |
// | it under the terms of the GNU General Public License as published by |
// | the Free Software Foundation; either version 2 of the License, or |
// | (at your option) any later version. |
// | |
// | Foobar 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 General Public License for more details. |
// | |
// | You should have received a copy of the GNU General Public License |
// | along with Foobar; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: affi_configuration.inc.php,v 1.13 2006-04-28 12:41:49 florian Exp $
/**
* Application réalisant l'affichage du contenu stocké dans Papyrus.
*
* Les constantes et variables de configuration de l'application Afficheur.
*
*@package Afficheur
*@subpackage Configuration
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author Aucun
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.13 $ $Date: 2006-04-28 12:41:49 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTETE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
// +------------------------------------------------------------------------------------------------------+
// | CORPS du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
// Chemin des fichiers à inclure.
/** Chemin vers la bibliothèque PEAR.*/
define('AFFI_CHEMIN_BIBLIOTHEQUE_PEAR', '');
/** Chemin vers la bibliothèque API.*/
define('AFFI_CHEMIN_BIBLIOTHEQUE_API', 'api'.GEN_SEP);
/** Chemin vers la bibliothèque API : fckeditor.*/
define('AFFI_CHEMIN_FCKEDITOR', AFFI_CHEMIN_BIBLIOTHEQUE_API.'fckeditor'.GEN_SEP);
/** Chemin vers l'application Admin de l'afficheur de Papyrus.*/
define('AFFI_CHEMIN_APPLICATION', GEN_CHEMIN_APPLICATION.'afficheur'.GEN_SEP);
/** Chemin vers le dossier des styles de l'application.*/
define('AFFI_CHEMIN_STYLE', AFFI_CHEMIN_APPLICATION.'presentations'.GEN_SEP.'styles'.GEN_SEP);
/** Chaine à utiliser pour l'URL de la règle Freelink.*/
define('AFFI_URL_PAPYRUS', PAP_URL.'?menu=%s');
 
/** Utilisation de fckeditor (true).*/
$GLOBALS['_AFFI_']['fckeditor']['utilisation'] = true;
/** Hauteur de fckeditor.*/
$GLOBALS['_AFFI_']['fckeditor']['hauteur'] = '400';
/** Type de barre d'outil de fckeditor.*/
$GLOBALS['_AFFI_']['fckeditor']['barre'] = 'Papyrus';
/** Langue de fckeditor.*/
$GLOBALS['_AFFI_']['fckeditor']['langue'] = $GLOBALS['_GEN_commun']['i18n'];
/** Fichier de config personnalisé de fckeditor.*/
$base_url=parse_url(PAP_URL);
$dirname_base_url=dirname($base_url['path']);
$GLOBALS['_AFFI_']['fckeditor']['CustomConfigurationsPath'] =$dirname_base_url.GEN_SEP.AFFI_CHEMIN_APPLICATION."configuration".GEN_SEP."affi_fckconfig.js";
// Suppression double slash pour site interdisant ce type d'url (a confirmer ...)
// Probleme également avec des sous-domaines (~ree05/papyrus etc.) ....
$GLOBALS['_AFFI_']['fckeditor']['CustomConfigurationsPath'] = str_replace("//", "/", $GLOBALS['_AFFI_']['fckeditor']['CustomConfigurationsPath']);
 
// L'objet PEAR::DB à utiliser pour l'afficheur :
$GLOBALS['_AFFICHEUR']['objet_pear_db'] =& $GLOBALS['_GEN_commun']['pear_db'];
 
// L'identifiant du menu courant :
if (isset($GLOBALS['_GEN_commun']['traduction_info_menu'])) {
$GLOBALS['_AFFICHEUR']['menu_courant_id'] = $GLOBALS['_GEN_commun']['traduction_info_menu']->gm_id_menu;
} else if (isset($GLOBALS['_GEN_commun']['info_menu'])) {
$GLOBALS['_AFFICHEUR']['menu_courant_id'] = $GLOBALS['_GEN_commun']['info_menu']->gm_id_menu;
} else {
$GLOBALS['_AFFICHEUR']['menu_courant_id'] = $GLOBALS['_GEN_commun']['url_menu'];
}
 
// Le jeu de caractère à utiliser pour la page courante :
$GLOBALS['_AFFICHEUR']['jeu_de_caracteres'] = $GLOBALS['_PAPYRUS_']['page']['jeu_de_caracteres'];
 
// Les sites correspodant aux liens interwiki:
$GLOBALS['_AFFICHEUR']['interwiki_sites'] =& $GLOBALS['_PAPYRUS_']['interwiki_sites'];
 
// Les sites correspodant à l'action inclure:
$GLOBALS['_AFFICHEUR']['inclure_sites'] =& $GLOBALS['_PAPYRUS_']['inclure_sites'];
 
// +------------------------------------------------------------------------------------------------------+
// | PIED du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.12 2005/08/25 08:59:12 ddelon
* Integrateur Wikini et administration des Wikini
*
* Revision 1.11 2005/08/18 10:20:04 ddelon
* Integrateur Wikini et Acces PEAR
*
* Revision 1.10 2005/07/21 18:11:43 ddelon
* configuration barre outil fcke
*
* Revision 1.9 2005/07/18 08:53:14 ddelon
* Configuration Fcsk et menage
*
* Revision 1.8 2005/07/15 17:10:08 ddelon
* Configuration Fcsk et menage
*
* Revision 1.7 2005/06/03 18:39:30 jpm
* Ajout de la barre d'outil Papyrus FCKeditor.
*
* Revision 1.6 2005/04/25 13:56:19 jpm
* Ajout de chemin vers les styles.
*
* Revision 1.5 2005/04/21 16:46:21 jpm
* Gestion via Papyrus du XHTML.
*
* Revision 1.4 2005/02/23 18:16:49 jpm
* Changement de l'url de Papyrus pour qu'elle corresponde à l'url courante de Papyrus.
*
* Revision 1.3 2005/02/23 17:41:21 jpm
* Modification de l'initialisation d'une variable.
*
* Revision 1.2 2005/02/22 17:55:38 jpm
* Changement de variable pour la récupération de l'identifiant du menu courant.
*
* Revision 1.1 2004/11/26 13:10:20 jpm
* Utilisation des actions Papyrus et implémentation de la syntaxe Wikini.
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/applications/afficheur/configuration/affi_fckconfig.js
New file
0,0 → 1,185
/*
* FCKeditor - The text editor for internet
* Copyright (C) 2003-2005 Frederico Caldeira Knabben
*
* Licensed under the terms of the GNU Lesser General Public License:
* http://www.opensource.org/licenses/lgpl-license.php
*
* For further information visit:
* http://www.fckeditor.net/
*
* File Name: fckconfig.js
* Editor configuration settings.
* See the documentation for more info.
*
* File Authors:
* Frederico Caldeira Knabben (fredck@fckeditor.net)
*/
 
FCKConfig.CustomConfigurationsPath = '' ;
 
FCKConfig.EditorAreaCSS = FCKConfig.BasePath + 'css/fck_editorarea.css' ;
 
FCKConfig.DocType = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">' ;
 
FCKConfig.BaseHref = '' ;
 
FCKConfig.FullPage = false ;
 
FCKConfig.Debug = false ;
 
FCKConfig.SkinPath = FCKConfig.BasePath + 'skins/default/' ;
 
FCKConfig.PluginsPath = FCKConfig.BasePath + 'plugins/' ;
 
// FCKConfig.Plugins.Add( 'placeholder', 'en,it' ) ;
 
FCKConfig.AutoDetectLanguage = true ;
FCKConfig.DefaultLanguage = 'fr' ;
FCKConfig.ContentLangDirection = 'ltr' ;
 
FCKConfig.EnableXHTML = true ; // Unsupported: Do not change.
FCKConfig.EnableSourceXHTML = true ; // Unsupported: Do not change.
 
FCKConfig.ProcessHTMLEntities = false ;
FCKConfig.IncludeLatinEntities = false ;
FCKConfig.IncludeGreekEntities = false ;
 
FCKConfig.FillEmptyBlocks = true ;
 
FCKConfig.FormatSource = true ;
FCKConfig.FormatOutput = true ;
FCKConfig.FormatIndentator = ' ' ;
 
FCKConfig.GeckoUseSPAN = true ;
FCKConfig.StartupFocus = false ;
FCKConfig.ForcePasteAsPlainText = false ;
FCKConfig.ForceSimpleAmpersand = false ;
FCKConfig.TabSpaces = 0 ;
FCKConfig.ShowBorders = true ;
FCKConfig.UseBROnCarriageReturn = false ;
FCKConfig.ToolbarStartExpanded = true ;
FCKConfig.ToolbarCanCollapse = true ;
FCKConfig.IEForceVScroll = false ;
FCKConfig.IgnoreEmptyParagraphValue = true ;
 
FCKConfig.ToolbarSets["Default"] = [
['Source','DocProps','-','Save','NewPage','Preview','-','Templates'],
['Cut','Copy','Paste','PasteText','PasteWord','-','Print','SpellCheck'],
['Undo','Redo','-','Find','Replace','-','SelectAll','RemoveFormat'],
['Bold','Italic','Underline','StrikeThrough','-','Subscript','Superscript'],
['OrderedList','UnorderedList','-','Outdent','Indent'],
['JustifyLeft','JustifyCenter','JustifyRight','JustifyFull'],
['Link','Unlink','Anchor'],
['Image','Flash','Table','Rule','Smiley','SpecialChar','UniversalKey'],
['Form','Checkbox','Radio','TextField','Textarea','Select','Button','ImageButton','HiddenField'],
'/',
['Style','FontFormat','FontName','FontSize'],
['TextColor','BGColor'],
['About']
] ;
 
FCKConfig.ToolbarSets["Basic"] = [
['Bold','Italic','-','OrderedList','UnorderedList','-','Link','Unlink','-','About']
] ;
FCKConfig.ToolbarSets["Papyrus"] = [
['Source','Preview','-','Cut','Copy','Paste','PasteText','PasteWord','SelectAll','-','Undo','Redo','Find','Replace'],
['RemoveFormat','Bold','Italic','Underline','StrikeThrough','Subscript','Superscript','-','JustifyLeft','JustifyCenter','JustifyRight','JustifyFull','-','OrderedList','UnorderedList'],
'/',
['Image','Table','Link','Unlink','Rule','SpecialChar','UniversalKey'],
['FontFormat','FontName','FontSize','TextColor'],
['About']
] ;
 
FCKConfig.ContextMenu = ['Generic','Link','Anchor','Image','Flash','Select','Textarea','Checkbox','Radio','TextField','HiddenField','ImageButton','Button','BulletedList','NumberedList','TableCell','Table','Form'] ;
 
FCKConfig.FontColors = '000000,993300,333300,003300,003366,000080,333399,333333,800000,FF6600,808000,808080,008080,0000FF,666699,808080,FF0000,FF9900,99CC00,339966,33CCCC,3366FF,800080,999999,FF00FF,FFCC00,FFFF00,00FF00,00FFFF,00CCFF,993366,C0C0C0,FF99CC,FFCC99,FFFF99,CCFFCC,CCFFFF,99CCFF,CC99FF,FFFFFF' ;
 
FCKConfig.FontNames = 'Arial;Comic Sans MS;Courier New;Tahoma;Times New Roman;Verdana' ;
FCKConfig.FontSizes = '1/xx-small;2/x-small;3/small;4/medium;5/large;6/x-large;7/xx-large' ;
FCKConfig.FontFormats = 'p;div;pre;address;h1;h2;h3;h4;h5;h6' ;
 
FCKConfig.StylesXmlPath = FCKConfig.EditorPath + 'fckstyles.xml' ;
FCKConfig.TemplatesXmlPath = FCKConfig.EditorPath + 'fcktemplates.xml' ;
 
FCKConfig.SpellChecker = 'ieSpell' ; // 'ieSpell' | 'SpellerPages'
FCKConfig.IeSpellDownloadUrl = 'http://www.iespell.com/rel/ieSpellSetup211325.exe' ;
 
FCKConfig.MaxUndoLevels = 15 ;
 
FCKConfig.DisableImageHandles = false ;
FCKConfig.DisableTableHandles = false ;
 
FCKConfig.LinkDlgHideTarget = false ;
FCKConfig.LinkDlgHideAdvanced = false ;
 
FCKConfig.ImageDlgHideLink = false ;
FCKConfig.ImageDlgHideAdvanced = false ;
 
FCKConfig.FlashDlgHideAdvanced = false ;
 
FCKConfig.LinkBrowser = true ;
//FCKConfig.LinkBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Connector=connectors/asp/connector.asp' ;
//FCKConfig.LinkBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Connector=connectors/asp/connector.asp&ServerPath=/CustomFiles/' ;
// ASP.Net // FCKConfig.LinkBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Connector=connectors/aspx/connector.aspx' ;
// ColdFusion // FCKConfig.LinkBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Connector=connectors/cfm/connector.cfm' ;
// Perl // FCKConfig.LinkBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Connector=connectors/perl/connector.cgi' ;
// PHP //
FCKConfig.LinkBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Connector=connectors/php/connector.php' ;
// PHP - mcpuk
//FCKConfig.LinkBrowserURL = FCKConfig.BasePath + 'filemanager/browser/mcpuk/browser.html?Connector=connectors/php/connector.php' ;
FCKConfig.LinkBrowserWindowWidth = screen.width * 0.7 ; // 70%
FCKConfig.LinkBrowserWindowHeight = screen.height * 0.7 ; // 70%
 
FCKConfig.ImageBrowser = true ;
//FCKConfig.ImageBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Type=Image&Connector=connectors/asp/connector.asp' ;
// ASP.Net // FCKConfig.ImageBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Type=Image&Connector=connectors/aspx/connector.aspx' ;
// ColdFusion // FCKConfig.ImageBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Type=Image&Connector=connectors/cfm/connector.cfm' ;
// Perl // FCKConfig.ImageBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Type=Image&Connector=connectors/perl/connector.cgi' ;
// PHP //
FCKConfig.ImageBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Type=Image&Connector=connectors/php/connector.php' ;
// PHP - mcpuk
//FCKConfig.ImageBrowserURL = FCKConfig.BasePath + 'filemanager/browser/mcpuk/browser.html?Type=Image&Connector=connectors/php/connector.php' ;
FCKConfig.ImageBrowserWindowWidth = screen.width * 0.7 ; // 70% ;
FCKConfig.ImageBrowserWindowHeight = screen.height * 0.7 ; // 70% ;
 
FCKConfig.FlashBrowser = true ;
//FCKConfig.FlashBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Type=Flash&Connector=connectors/asp/connector.asp' ;
// ASP.Net // FCKConfig.FlashBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Type=Flash&Connector=connectors/aspx/connector.aspx' ;
// ColdFusion // FCKConfig.FlashBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Type=Flash&Connector=connectors/cfm/connector.cfm' ;
// Perl // FCKConfig.FlashBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Type=Flash&Connector=connectors/perl/connector.cgi' ;
// PHP //
FCKConfig.FlashBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Type=Flash&Connector=connectors/php/connector.php' ;
// PHP - mcpuk
// FCKConfig.FlashBrowserURL = FCKConfig.BasePath + 'filemanager/browser/mcpuk/browser.html?Type=Flash&Connector=connectors/php/connector.php' ;
FCKConfig.FlashBrowserWindowWidth = screen.width * 0.7 ; //70% ;
FCKConfig.FlashBrowserWindowHeight = screen.height * 0.7 ; //70% ;
 
FCKConfig.LinkUpload = true ;
//FCKConfig.LinkUploadURL = FCKConfig.BasePath + 'filemanager/upload/asp/upload.asp' ;
// PHP //
FCKConfig.LinkUploadURL = FCKConfig.BasePath + 'filemanager/upload/php/upload.php' ;
FCKConfig.LinkUploadAllowedExtensions = "" ; // empty for all
FCKConfig.LinkUploadDeniedExtensions = ".(php|php3|php5|phtml|asp|aspx|ascx|jsp|cfm|cfc|pl|bat|exe|dll|reg|cgi)$" ; // empty for no one
 
FCKConfig.ImageUpload = true ;
//FCKConfig.ImageUploadURL = FCKConfig.BasePath + 'filemanager/upload/asp/upload.asp?Type=Image' ;
// PHP //
FCKConfig.ImageUploadURL = FCKConfig.BasePath + 'filemanager/upload/php/upload.php?Type=Image' ;
FCKConfig.ImageUploadAllowedExtensions = ".(jpg|gif|jpeg|png)$" ; // empty for all
FCKConfig.ImageUploadDeniedExtensions = "" ; // empty for no one
 
FCKConfig.FlashUpload = true ;
//FCKConfig.FlashUploadURL = FCKConfig.BasePath + 'filemanager/upload/asp/upload.asp?Type=Flash' ;
// PHP //
FCKConfig.FlashUploadURL = FCKConfig.BasePath + 'filemanager/upload/php/upload.php?Type=Flash' ;
FCKConfig.FlashUploadAllowedExtensions = ".(swf|fla)$" ; // empty for all
FCKConfig.FlashUploadDeniedExtensions = "" ; // empty for no one
 
FCKConfig.SmileyPath = FCKConfig.BasePath + 'images/smiley/msn/' ;
FCKConfig.SmileyImages = ['regular_smile.gif','sad_smile.gif','wink_smile.gif','teeth_smile.gif','confused_smile.gif','tounge_smile.gif','embaressed_smile.gif','omg_smile.gif','whatchutalkingabout_smile.gif','angry_smile.gif','angel_smile.gif','shades_smile.gif','devil_smile.gif','cry_smile.gif','lightbulb.gif','thumbs_down.gif','thumbs_up.gif','heart.gif','broken_heart.gif','kiss.gif','envelope.gif'] ;
FCKConfig.SmileyColumns = 8 ;
FCKConfig.SmileyWindowWidth = 320 ;
FCKConfig.SmileyWindowHeight = 240 ;
 
if( window.console ) window.console.log( 'Config is loaded!' ) ; // @Packager.Compactor.RemoveLine
/branches/v1.0-menes/papyrus/applications/afficheur/afficheur.admin.php
New file
0,0 → 1,346
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library 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 |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: afficheur.admin.php,v 1.20.2.1 2006-12-14 15:07:08 ddelon Exp $
/**
* Gestion de la rédaction du contenu pour Papyrus.
*
* Contient les fonctions nécessaires à la gestion du contenu de Papyrus.
*
*@package Afficheur
*@subpackage Administration
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author Aucun
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.20.2.1 $ $Date: 2006-12-14 15:07:08 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTÊTE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
// +------------------------------------------------------------------------------------------------------+
// | CLASSE |
// +------------------------------------------------------------------------------------------------------+
class Afficheur_Admin {
var $objet_pear_auth;
var $objet_pear_db;
var $objet_pear_url;
var $sortie_xhtml;
/** Fonction redigerContenu() - Affiche le formulaire de rédaction
*
*
* @return string Le HTML
*/
function afficherContenuCorps()
{
/** Inclusion du fichier de configuration de cette application.*/
require_once GEN_CHEMIN_PAP.'applications/afficheur/configuration/affi_configuration.inc.php';
//-------------------------------------------------------------------------------------------------------------------
// Stockage des styles de l'application
GEN_stockerStyleExterne('afficheur', AFFI_CHEMIN_STYLE.'afficheur.css');
//-------------------------------------------------------------------------------------------------------------------
// Initialisation des attributs
$this->objet_pear_auth = $GLOBALS['_GEN_commun']['pear_auth'];
$this->objet_pear_db = $GLOBALS['_GEN_commun']['pear_db'];
$this->objet_pear_url = $GLOBALS['_GEN_commun']['url'];
$this->sortie_xhtml = '';
//-------------------------------------------------------------------------------------------------------------------
// Gestion de l'interface
if (isset($_POST['afficheur_annuler'])) {
return false;
} else if (isset($_POST['afficheur_enregistrer_quitter'])) {
// Mise à jour du contenu
$this->_ajouterContenu($this->objet_pear_db, $this->objet_pear_url, $this->objet_pear_auth, $_GET['adme_menu_id'], $_POST);
return false;
} else if (isset($_POST['afficheur_enregistrer_rester'])) {
// Mise à jour du contenu
$this->_ajouterContenu($this->objet_pear_db, $this->objet_pear_url, $this->objet_pear_auth, $_GET['adme_menu_id'], $_POST);
}
$this->sortie_xhtml .= $this->_redigerContenu($this->objet_pear_db, $this->objet_pear_url, $_GET['adme_site_id'], $_GET['adme_menu_id'], $_GET['adme_action']);
return $this->sortie_xhtml;
}
function _redigerContenu($db, $url, $adme_site_id, $adme_menu_id, $adme_action) {
$contenu='';
//-------------------------------------------------------------------------------------------------------------------
// Initialisation de variable
$url->addQueryString('adme_site_id', $adme_site_id);
$url->addQueryString('adme_menu_id', $adme_menu_id);
$url->addQueryString('adme_action', $adme_action);
$ligne_dernier_contenu=GEN_rechercheContenu($db,$adme_menu_id,DB_FETCHMODE_ASSOC);
// Hack :
$retour = '<h1>'.'Rédaction'.'</h1>'."\n";
//-------------------------------------------------------------------------------------------------------------------
// Création du formulaire
$form =& new HTML_QuickForm('form_modifier_contenu', 'post', str_replace('&amp;', '&', $url->getUrl()));
$tab_index = 1000;
$squelette =& $form->defaultRenderer();
$squelette->setFormTemplate("\n".'<form{attributes}>'."\n".'<ul>'."\n".'{content}'."\n".'</ul>'."\n".'</form>'."\n");
$squelette->setElementTemplate( '<li>'."\n".
'{label}'."\n".
'{element}'."\n".
'<!-- BEGIN required --><span class="symbole_obligatoire">*</span><!-- END required -->'."\n".
'<!-- BEGIN error --><span class="erreur">{error}</span><!-- END error -->'."\n".
'</li>'."\n");
//$squelette->setHeaderTemplate('<p>{header}</p>');
//$form->addElement('header', 'Entete', 'REDACTION');.liste_bouton li{display:inline;}
$aso_options = array();
$form->addElement('hidden','gmc_ce_type_contenu',1);
if ($GLOBALS['_AFFI_']['fckeditor']['utilisation']) {
/** Inclusion du fichier de FCKeditor*/
require_once AFFI_CHEMIN_FCKEDITOR.'fckeditor.php';
$fckeditor = new FCKeditor('gmc_contenu');
if ($ligne_dernier_contenu['gmc_contenu']) {
$fckeditor->Value = $ligne_dernier_contenu['gmc_contenu'];
}
else {
if ($contenu) {
$fckeditor->Value = $contenu;
}
else {
$fckeditor->Value = '';
}
}
$fckeditor->Height = $GLOBALS['_AFFI_']['fckeditor']['hauteur'];
$fckeditor->ToolbarSet = $GLOBALS['_AFFI_']['fckeditor']['barre'];
$fckeditor->Config['CustomConfigurationsPath']=$GLOBALS['_AFFI_']['fckeditor']['CustomConfigurationsPath'];
$fckeditor->Config['AutoDetectLanguage'] = false;
$fckeditor->Config['DefaultLanguage'] = $GLOBALS['_AFFI_']['fckeditor']['langue'];
$fckeditor->BasePath = AFFI_CHEMIN_FCKEDITOR;
if ($fckeditor->IsCompatible()) {
$form->addElement('html', '<li>'.$fckeditor->CreateHtml().'</li>');
} else {
$GLOBALS['_AFFI_']['fckeditor']['utilisation'] = false;
}
}
if (!$GLOBALS['_AFFI_']['fckeditor']['utilisation']) {
$id = 'gmc_contenu';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'rows' => 20, 'cols' => 100);
$label = '<label for="'.$id.'">'.'Contenu : '.'</label>';
$form->addElement('textarea', $id, $label, $aso_attributs);
}
$aso_options = array();
$aso_options[1] = 'Mineure';
$aso_options[2] = 'Majeure';
$id = 'gmc_ce_type_modification';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++);
$label = '<label for="'.$id.'">'.'Type de modification : '.'</label>';
$form->addElement('select', $id, $label, $aso_options, $aso_attributs);
$id = 'gmc_resume_modification';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => 45, 'maxlength' => 255);
$label = '<label for="'.$id.'">'.'Resumé modification : '.'</label>';
$form->addElement('text', $id, $label, $aso_attributs);
$ligne_dernier_contenu['gmc_ce_menu']=$adme_menu_id;
$form->addElement('hidden','gmc_ce_menu',$ligne_dernier_contenu['gmc_ce_menu']);
$form->addElement('hidden','gmc_ce_type_contenu_table',$ligne_dernier_contenu['gmc_ce_type_contenu']);
// .liste_bouton li{display:inline;}
$liste_bouton_debut = '<ul class="liste_bouton">'."\n";
$form->addElement('html', $liste_bouton_debut);
$form->addElement('submit', 'afficheur_enregistrer_quitter', 'Enregistrer et quitter');
$form->addElement('submit', 'afficheur_enregistrer_rester', 'Enregistrer et rester en édition');
$form->addElement('submit', 'afficheur_annuler', 'Annuler');
$liste_bouton_fin = '</ul>'."\n";
$form->addElement('html', $liste_bouton_fin);
$form->setDefaults($ligne_dernier_contenu);
$retour .= $form->toHTML()."\n";
return $retour;
}
/** Méthode ajouterContenu() - Enregistre les infos du formulaire de saisie d'un menu
*
*
* @return void les données sont enregistrées dans la base de données.
*/
function _ajouterContenu($db, $url, $auth, $adme_menu_id, $tab_valeur)
{
//-------------------------------------------------------------------------------------------------------------------
// Récupération des informations du contenu concerné.
$ligne_menu = GEN_lireInfoMenu($db, $adme_menu_id, DB_FETCHMODE_ASSOC);
if ($ligne_menu == false) {
die('ERREUR Papyrus Administrateur de Menus: impossible de lire les infos du menu.<br />'.
'Idenitifiant du menu n° : '. $adme_menu_id .'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br />');
}
if ((isset($tab_valeur['gmc_ce_menu']) && $tab_valeur['gmc_ce_menu']!='') && (isset($tab_valeur['gmc_ce_type_contenu_table']) && $tab_valeur['gmc_ce_type_contenu_table']!='')) {
//-------------------------------------------------------------------------------------------------------------------
// Mise à jour de l'ancien contenu du menu
$requete = 'UPDATE gen_menu_contenu SET '.
'gmc_bool_dernier = 0 '.
'WHERE gmc_ce_menu = '.$tab_valeur['gmc_ce_menu'] . ' '.
'AND gmc_ce_type_contenu = '. $tab_valeur['gmc_ce_type_contenu_table']. ' ';
$result = $db->query($requete);
(DB::isError($result)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $result->getMessage(), $requete)) : '';
}
//-------------------------------------------------------------------------------------------------------------------
// Obtention d'un nouvel identifiant de contenu
$nouveau_id_contenu = SQL_obtenirNouveauId($db, 'gen_menu_contenu', 'gmc_id_contenu');
//-------------------------------------------------------------------------------------------------------------------
// Ajout du nouveau contenu pour ce menu
$requete = 'INSERT INTO gen_menu_contenu SET '.
'gmc_id_contenu = '.$nouveau_id_contenu.', '.
'gmc_ce_admin = '.$auth->getAuthData('ga_id_administrateur').', '.
'gmc_ce_menu = '.$adme_menu_id.', '.
'gmc_ce_type_contenu = '.$tab_valeur['gmc_ce_type_contenu'].', '.
'gmc_contenu = "'.$tab_valeur['gmc_contenu'].'", '.
'gmc_ce_type_modification = '.$tab_valeur['gmc_ce_type_modification'].', '.
'gmc_resume_modification = "'.$tab_valeur['gmc_resume_modification'].'", '.
'gmc_date_modification = "'.date('Y-m-d H:i:s').'", '.
'gmc_bool_dernier = 1';
$result = $db->query($requete);
(DB::isError($result)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $result->getMessage(), $requete)) : '';
}
}// Fin de la classe
 
// +------------------------------------------------------------------------------------------------------+
// | PIED du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.20 2006/12/01 11:23:23 ddelon
* Suppression mode wiki afficheur
*
* Revision 1.19 2006/10/16 15:49:07 ddelon
* Refactorisation code mulitlinguisme et gestion menu invisibles
*
* Revision 1.18 2006/04/28 12:41:49 florian
* corrections erreurs chemin
*
* Revision 1.17 2006/03/27 13:42:32 ddelon
* the last but not the least
*
* Revision 1.16 2006/03/27 11:21:49 ddelon
* Still some pb
*
* Revision 1.15 2006/03/27 10:14:43 ddelon
* Still some pb
*
* Revision 1.11 2006/03/13 22:27:23 ddelon
* bug afficheur multilinguisme
*
* Revision 1.10 2006/03/13 22:12:20 ddelon
* bug afficheur multilinguisme
*
* Revision 1.9 2006/03/13 21:00:20 ddelon
* Suppression messages d'erreur multilinguisme
*
* Revision 1.8 2006/03/02 10:49:49 ddelon
* Fusion branche multilinguisme dans branche principale
*
* Revision 1.7.2.1 2006/02/28 14:02:11 ddelon
* Finition multilinguisme
*
* Revision 1.7 2005/07/18 08:53:14 ddelon
* Configuration Fcsk et menage
*
* Revision 1.6 2005/07/15 17:10:08 ddelon
* Configuration Fcsk et menage
*
* Revision 1.5 2005/06/03 18:39:30 jpm
* Ajout de la barre d'outil Papyrus FCKeditor.
*
* Revision 1.4 2005/05/31 13:43:57 jpm
* Ajout d'un bouton pour remplacer les entités html.
*
* Revision 1.3 2005/04/25 13:56:31 jpm
* Ajout de styles.
*
* Revision 1.2 2005/02/28 10:34:15 jpm
* Changement de nom Genesia en Papyrus.
*
* Revision 1.1 2004/11/09 17:53:49 jpm
* Interface d'administration de l'application afficheur.
*
* Revision 1.4 2004/11/08 17:40:33 jpm
* Mise en conformité avec la convention de codage.
* Légères corrections.
*
* Revision 1.3 2004/09/23 17:45:13 jpm
* Amélioration de la gestion des liens annuler et du selecteur de sites.
*
* Revision 1.2 2004/07/06 17:07:37 jpm
* Modification de la documentation pour une mailleur analyse par PhpDocumentor.
*
* Revision 1.1 2004/06/16 15:04:32 jpm
* Changement de nom de Génésia en Papyrus.
* Changement de l'arborescence.
*
* Revision 1.5 2004/05/07 16:32:27 jpm
* Modification des commentaires.
*
* Revision 1.4 2004/05/07 07:23:53 jpm
* Amélioration du code, des commentaires et correction de bogues.
*
* Revision 1.3 2004/05/04 16:27:55 jpm
* Amélioration gestion du déplacement des menus.
*
* Revision 1.2 2004/05/03 14:51:59 jpm
* Normalisation du nom d'une fonction et ajout de la gestion d'une erreur.
*
* Revision 1.1 2004/04/30 16:21:30 jpm
* Ajout de la rédaction de contenu.
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/applications/afficheur/presentations/styles/afficheur.css
New file
0,0 → 1,50
/* vim: set expandtab tabstop=4 shiftwidth=4: */
/* ========================================================================================================
| Copyright (C) 1999-2004 Tela Botanica (accueil@tela-botanica.org) |
+---------------------------------------------------------------------------------------------------------+
| This file is part of Papyrus. |
| |
| Foobar is free software; you can redistribute it and/or modify it under the terms of the GNU General |
| Public License as published by the Free Software Foundation; either version 2 of the License, or |
| (at your option) any later version. |
| |
| Foobar 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 General Public |
| License for more details. |
| |
| You should have received a copy of the GNU General Public License along with Foobar; if not, write to |
| the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
+---------------------------------------------------------------------------------------------------------+
CVS : $Id: afficheur.css,v 1.1 2005-04-25 13:56:08 jpm Exp $
===========================================================================================================
DESCRIPTION : Fichier de style de l'application d'administration de l'affichage.
===========================================================================================================
Auteur original : Jean-Pascal MILCENT <jpm@tela-botanica.org>
 
Autres auteurs :
 
===========================================================================================================
AUTEUR : $Author: jpm $
VERSION : $Revision: 1.1 $ $Date: 2005-04-25 13:56:08 $
======================================================================================================= */
 
/* +----------------------------------------------------------------------------------------------------+
| STRUCTURE |
+----------------------------------------------------------------------------------------------------+*/
#gmc_contenu {
width: 100%;
min-height:400px;
}
 
/* +----------------------------------------------------------------------------------------------------+
| DESIGN |
+----------------------------------------------------------------------------------------------------+*/
 
/* +--Fin des CSS ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
*
* +-- Fin des CSS ----------------------------------------------------------------------------------------+
*/
/branches/v1.0-menes/papyrus/applications/installateur/bibliotheque/instal_installation.fonct.php
New file
0,0 → 1,353
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library 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 |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: instal_installation.fonct.php,v 1.6 2006-04-28 12:41:49 florian Exp $
/**
* Bibliothèque des fonctions de l'application Installateur de Papyrus.
*
* Ce sous-paquetage contient les fonctions de l'application Installateur de Papyrus. Cette application gère
* l'installation de Papyrus (base de données).
*
*@package Installateur
*@subpackage Fonctions
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author aucun
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.6 $ $Date: 2006-04-28 12:41:49 $
*/
 
// +------------------------------------------------------------------------------------------------------+
// | LISTE de FONCTIONS |
// +------------------------------------------------------------------------------------------------------+
 
 
/**Fonction donnerUrlCourante() - Retourne la base de l'url courante.
*
* Cette fonction renvoie la base de l'url courante.
* Origine : fonction provenant du fichier header.php de Wikini version 0.4.1
* Licence : la même que celle figurant dans l'entête du fichier header.php de Wikini version 0.4.1
* ou le fichier install_defaut.inc.php de cette application.
* Auteurs : Hendrik MANS, David DELON, Patrick PAUL, Jean-Pascal MILCENT
*
* @return string l'url courante.
*/
function donnerUrlCourante()
{
list($url, ) = explode('?', $_SERVER['REQUEST_URI']);
return $url;
}
 
/**Fonction testerConfig() - Retourne un message en fonction du résultat du test.
*
* Cette fonction retourne un message en fonction du résultat du test.
* Origine : fonction provenant du fichier header.php de Wikini version 0.4.1
* Licence : la même que celle figurant dans l'entête du fichier header.php de Wikini version 0.4.1
* ou le fichier install_defaut.inc.php de cette application.
* Auteurs : Hendrik MANS, David DELON, Patrick PAUL, Jean-Pascal MILCENT
*
* @return string l'url courante.
*/
function testerConfig(&$sortie, $texte, $test, $texte_erreur = '', $stop_erreur = 1, $erreur) {
if ($erreur == 2) {
return 2;
}
$sortie .= $texte.' ';
if ($test) {
$sortie .= '<span class="ok">&nbsp;OK&nbsp;</span><br />'."\n";
return 0;
} else {
$sortie .= '<span class="failed">&nbsp;ECHEC&nbsp;</span>';
if ($texte_erreur) {
$sortie .= ' <span class="erreur">'.$texte_erreur.'</span>';
}
$sortie .= '<br />'."\n" ;
if ($stop_erreur == 1) {
return 2;
} else {
return 1;
}
}
}
/**
* Removes comment lines and splits up large sql files into individual queries
*
* Last revision: September 23, 2001 - gandon
* Origine : fonction provenant de PhpMyAdmin version 2.6.0-pl1
* Licence : GNU
* Auteurs : voir le fichier Documentation.txt ou Documentation.html de PhpMyAdmin.
*
* @param array the splitted sql commands
* @param string the sql commands
* @param integer the MySQL release number (because certains php3 versions
* can't get the value of a constant from within a function)
*
* @return boolean always true
*
* @access public
*/
function PMA_splitSqlFile(&$ret, $sql, $release)
{
// do not trim, see bug #1030644
//$sql = trim($sql);
$sql = rtrim($sql, "\n\r");
$sql_len = strlen($sql);
$char = '';
$string_start = '';
$in_string = FALSE;
$nothing = TRUE;
$time0 = time();
 
for ($i = 0; $i < $sql_len; ++$i) {
$char = $sql[$i];
 
// We are in a string, check for not escaped end of strings except for
// backquotes that can't be escaped
if ($in_string) {
for (;;) {
$i = strpos($sql, $string_start, $i);
// No end of string found -> add the current substring to the
// returned array
if (!$i) {
$tab_info = retournerInfoRequete($sql);
$ret[] = array('query' => $sql, 'table_nom' => $tab_info['table_nom'], 'type' => $tab_info['type']);
return TRUE;
}
// Backquotes or no backslashes before quotes: it's indeed the
// end of the string -> exit the loop
else if ($string_start == '`' || $sql[$i-1] != '\\') {
$string_start = '';
$in_string = FALSE;
break;
}
// one or more Backslashes before the presumed end of string...
else {
// ... first checks for escaped backslashes
$j = 2;
$escaped_backslash = FALSE;
while ($i-$j > 0 && $sql[$i-$j] == '\\') {
$escaped_backslash = !$escaped_backslash;
$j++;
}
// ... if escaped backslashes: it's really the end of the
// string -> exit the loop
if ($escaped_backslash) {
$string_start = '';
$in_string = FALSE;
break;
}
// ... else loop
else {
$i++;
}
} // end if...elseif...else
} // end for
} // end if (in string)
// lets skip comments (/*, -- and #)
else if (($char == '-' && $sql_len > $i + 2 && $sql[$i + 1] == '-' && $sql[$i + 2] <= ' ') || $char == '#' || ($char == '/' && $sql_len > $i + 1 && $sql[$i + 1] == '*')) {
$i = strpos($sql, $char == '/' ? '*/' : "\n", $i);
// didn't we hit end of string?
if ($i === FALSE) {
break;
}
if ($char == '/') $i++;
}
 
// We are not in a string, first check for delimiter...
else if ($char == ';') {
// if delimiter found, add the parsed part to the returned array
$retour_sql = substr($sql, 0, $i);
$tab_info = retournerInfoRequete($retour_sql);
$ret[] = array('query' => $retour_sql, 'empty' => $nothing, 'table_nom' => $tab_info['table_nom'], 'type' => $tab_info['type']);
$nothing = TRUE;
$sql = ltrim(substr($sql, min($i + 1, $sql_len)));
$sql_len = strlen($sql);
if ($sql_len) {
$i = -1;
} else {
// The submited statement(s) end(s) here
return TRUE;
}
} // end else if (is delimiter)
 
// ... then check for start of a string,...
else if (($char == '"') || ($char == '\'') || ($char == '`')) {
$in_string = TRUE;
$nothing = FALSE;
$string_start = $char;
} // end else if (is start of string)
 
elseif ($nothing) {
$nothing = FALSE;
}
 
// loic1: send a fake header each 30 sec. to bypass browser timeout
$time1 = time();
if ($time1 >= $time0 + 30) {
$time0 = $time1;
header('X-pmaPing: Pong');
} // end if
} // end for
 
// add any rest to the returned array
if (!empty($sql) && preg_match('@[^[:space:]]+@', $sql)) {
$tab_info = retournerInfoRequete($sql);
$ret[] = array('query' => $sql, 'empty' => $nothing, 'table_nom' => $tab_info['table_nom'], 'type' => $tab_info['type']);
}
 
return TRUE;
}
 
/**Fonction retournerInfoRequete() - Retourne le type de requête sql et le nom de la table touchée.
*
* Cette fonction retourne un tableau associatif contenant en clé 'table_nom' le nom de la table touchée
* et en clé 'type' le type de requête (create, alter, insert, update...).
* Licence : la même que celle figurant dans l'entête de ce fichier
* Auteurs : Jean-Pascal MILCENT
*
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @return string l'url courante.
*/
function retournerInfoRequete($sql)
{
$requete = array();
$resultat='';
if (preg_match('/(?i:CREATE TABLE) +(.+) +\(/', $sql, $resultat)) {
if (isset($resultat[1])) {
$requete['table_nom'] = $resultat[1];
}
$requete['type'] = 'create';
} else if (preg_match('/(?i:ALTER TABLE) +(.+) +/', $sql, $resultat)) {
if (isset($resultat[1])) {
$requete['table_nom'] = $resultat[1];
}
$requete['type'] = 'alter';
} else if (preg_match('/(?i:INSERT INTO) +(.+) +(?i:\(|VALUES +\()/', $sql, $resultat)) {
if (isset($resultat[1])) {
$requete['table_nom'] = $resultat[1];
}
$requete['type'] = 'insert';
} else if (preg_match('/(?i:UPDATE) +(.+) +(?i:SET)/', $sql, $resultat)) {
if (isset($resultat[1])) {
$requete['table_nom'] = $resultat[1];
}
$requete['type'] = 'update';
}
return $requete;
}
/**
* Reads (and decompresses) a (compressed) file into a string
*
* Origine : fonction provenant de PhpMyAdmin version 2.6.0-pl1
* Licence : GNU
* Auteurs : voir le fichier Documentation.txt ou Documentation.html de PhpMyAdmin.
*
* @param string the path to the file
* @param string the MIME type of the file, if empty MIME type is autodetected
*
* @global array the phpMyAdmin configuration
*
* @return string the content of the file or
* boolean FALSE in case of an error.
*/
function PMA_readFile($path, $mime = '')
{
global $cfg;
 
if (!file_exists($path)) {
return FALSE;
}
switch ($mime) {
case '':
$file = @fopen($path, 'rb');
if (!$file) {
return FALSE;
}
$test = fread($file, 3);
fclose($file);
if ($test[0] == chr(31) && $test[1] == chr(139)) return PMA_readFile($path, 'application/x-gzip');
if ($test == 'BZh') return PMA_readFile($path, 'application/x-bzip');
return PMA_readFile($path, 'text/plain');
case 'text/plain':
$file = @fopen($path, 'rb');
if (!$file) {
return FALSE;
}
$content = fread($file, filesize($path));
fclose($file);
break;
case 'application/x-gzip':
if ($cfg['GZipDump'] && @function_exists('gzopen')) {
$file = @gzopen($path, 'rb');
if (!$file) {
return FALSE;
}
$content = '';
while (!gzeof($file)) {
$content .= gzgetc($file);
}
gzclose($file);
} else {
return FALSE;
}
break;
case 'application/x-bzip':
if ($cfg['BZipDump'] && @function_exists('bzdecompress')) {
$file = @fopen($path, 'rb');
if (!$file) {
return FALSE;
}
$content = fread($file, filesize($path));
fclose($file);
$content = bzdecompress($content);
} else {
return FALSE;
}
break;
default:
return FALSE;
}
return $content;
}
/* +--Fin du code ---------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.5 2005/09/23 14:20:23 florian
* nouvel habillage installateur, plus correction de quelques bugs
*
* Revision 1.4 2004/10/25 16:26:56 jpm
* Ajout de la gestion des requêtes de type alter et update.
*
* Revision 1.3 2004/10/19 16:47:06 jpm
* Modification de la gestion du texte de sortie dans la fonction testerConfig().
*
* Revision 1.2 2004/10/15 18:28:44 jpm
* Ajout de fonction utilisée pour l'installation de Papyrus.
*
* Revision 1.1 2004/06/16 14:34:12 jpm
* Changement de nom de Génésia en Papyrus.
* Changement de l'arborescence.
*
* +--Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/applications/installateur/installateur.php
New file
0,0 → 1,217
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library 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 |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: installateur.php,v 1.15 2006-10-16 15:49:07 ddelon Exp $
/**
* Application Installateur de Papyrus.
*
* Application permettant de gérer l'installation et les erreurs liés à l'abscence de base de données,
* d'extenssin PHP...
*
*@package Installateur
//Auteur original :
*@author
'AND gm_ce_i18n = "'.GEN_I18N_ID_DEFAUT.'" ';
$resultat = $db->query($requete);
 
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
if ($langue_test!=GEN_I18N_ID_DEFAUT) {
return GEN_rechercheMenuIdentifiantVersionParDefaut($db,$ligne->gm_id_menu);
}
} Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author Aucun
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.15 $ $Date: 2006-10-16 15:49:07 $
// +------------------------------------------------------------------------------------------------------+
**/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTÊTE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
// Constante de l'application Installateur. On devrait créer un fichier de config et un de langue pour rendre l'appli portable...
preg_match('/^(.*)papyrus.php/', $_SERVER['SCRIPT_FILENAME'], $instal_tab_txt);
define('INSTAL_CHEMIN_ABSOLU', $instal_tab_txt[1]);
/** Nom du dossier contenant l'application Installateur.*/
define('INSTAL_DOSSIER_APPLI', INSTAL_CHEMIN_ABSOLU.GEN_CHEMIN_APPLICATION.'installateur'.GEN_SEP);
/** Nom du dossier contenant la bibliothèque de code de l'application Installateur.*/
define('INSTAL_DOSSIER_BIBLIO', INSTAL_DOSSIER_APPLI.'bibliotheque'.GEN_SEP);
/** Chemin vers le fichier de configuration de base de l'application Papyrus.*/
define('INSTAL_CHEMIN_CONFIG', GEN_CHEMIN_CONFIG.GEN_FICHIER_CONFIG);
/** Nom du fichier de configuration de Papyrus à créer.*/
define('INSTAL_FICHIER_CONFIG', GEN_FICHIER_CONFIG);
/** Chemin vers le fichier de configuration de base de l'application Papyrus.*/
define('INSTAL_CHEMIN_SQL', INSTAL_CHEMIN_ABSOLU.GEN_CHEMIN_INSTAL);
/** Nom de la constante stockant le numéro de la nouvelle version de l'application Papyrus.*/
define('INSTAL_VERSION_NOUVELLE_NOM', 'PAP_VERSION');
/** Numéro de la nouvelle version de l'application Papyrus.*/
define('INSTAL_VERSION_NOUVELLE', GEN_VERSION);
if (defined('PAP_VERSION')) {
define('INSTAL_VERSION_ANCIENNE', PAP_VERSION);
} else {
define('INSTAL_VERSION_ANCIENNE', '');
}
/** Nombre d'étapes totale de l'installation.*/
define('INSTAL_NBRE_ETAPE', 3);
 
// Fichiers à inclure
require_once INSTAL_DOSSIER_BIBLIO.'instal_installation.fonct.php';
 
// +------------------------------------------------------------------------------------------------------+
// | CORPS du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
function afficherContenuCorps()
{
// Entêtre XHTML des pages de l'installation de Papyrus
$sortie = '';
$sortie .= '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"'."\n";
$sortie .= '"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'."\n";
$sortie .= '<html xmlns="http://www.w3.org/1999/xhtml" lang="fr-FR" xml:lang="fr-FR">'."\n";
$sortie .= ' <head>'."\n";
$sortie .= ' <link rel="stylesheet" type="text/css" media="screen" title="Installateur" href="papyrus/applications/installateur/presentations/styles/installateur.css" />'."\n";
$sortie .= ' <title>Installation de Papyrus</title>'."\n";
$sortie .= ' </head>'."\n";
$sortie .= ' <body xml:lang="fr" lang="fr" >'."\n";
$sortie .= ' <div id="page">'."\n";
$sortie .= ' <div id="zone_bandeau">'."\n";
$sortie .= ' <div id="logo">'."\n";
$sortie .= ' <img src="papyrus/applications/installateur/presentations/images/Logo_papyrus.jpg" alt="Logo Papyrus" />'."\n";
$sortie .= ' </div>'."\n";
$sortie .= ' <div id="site_nom">'."\n";
$sortie .= ' <h1>Installation de Papyrus</h1>'."\n";
$sortie .= ' </div>'."\n";
$sortie .= ' </div>'."\n";
$sortie .= ' <div id="zone_contenu">'."\n";
// Message situation de l'installation
if (defined('PAP_VERSION')) {
$sortie .= '<p class="zone_info">Votre syst&egrave;me Papyrus existant a &eacute;t&eacute; reconnu comme &eacute;tant la version '.
INSTAL_VERSION_ANCIENNE.'.<br />'.
'Vous &ecirc;tes sur le point de <strong>mettre &agrave; jour</strong> Papyrus pour la version '.
INSTAL_VERSION_NOUVELLE.'.<br />'.
'Veuillez revoir vos informations de configuration ci-dessous.</p><br style="clear:both;">'."\n";
} else {
$sortie .= '<p class="zone_info">Vous &ecirc;tes sur le point d\'installer Papyrus '.INSTAL_VERSION_NOUVELLE.'.<br />'.
'Veuillez configurer votre Papyrus en remplissant les formulaires étape par étape.</p><br style="clear:both;">'."\n";
}
if(!isset($_GET['installation']) || ($_GET['installation'] == 'form_pref' || $_GET['installation'] == 'verif_pref')) {
include_once GEN_CHEMIN_APPLICATION.'installateur/instal_preference.inc.php';
} else if($_GET['installation'] == 'form_bdd' || $_GET['installation'] == 'verif_bdd') {
include_once GEN_CHEMIN_APPLICATION.'installateur/instal_base_de_donnees.inc.php';
} else if($_GET['installation'] == 'form_fichier' || $_GET['installation'] == 'verif_fichier') {
include_once GEN_CHEMIN_APPLICATION.'installateur/instal_fichier.inc.php';
}
// Pied XHTML des pages de l'installation de Papyrus
$sortie .= ' </div>'."\n";
$sortie .= ' <div id="zone_pied">'."\n";
$sortie .= ' <div id="copyright">'."\n";
$sortie .= ' <a href="http://frenchmozilla.org"><img src="papyrus/applications/installateur/presentations/images/logo-firefox.png" alt="Logo Firefox" /></a>&nbsp;'."\n";
$sortie .= ' <a href="http://validator.w3.org/check?uri=referer"><img src="papyrus/applications/installateur/presentations/images/logo-xhtml11.png" alt="Logo XHTML" /></a>&nbsp;'."\n";
$sortie .= ' <a href="http://jigsaw.w3.org/css-validator/check/referer"><img src="papyrus/applications/installateur/presentations/images/logo-css.png" alt="Logo CSS" /></a><br />'."\n";
$sortie .= ' &copy;&nbsp;<a href="http://www.tela-botanica.org/">Tela Botanica</a> et <a href="http://www.ecole-et-nature.org/">Réseau Ecole et Nature</a> / 2004-2006<br />'."\n";
$sortie .= ' Site utilisant <a href="http://outils-reseaux.org/wiki_papyrus">Papyrus, le CMS coop&eacute;ratif</a>'."\n";
$sortie .= ' </div>'."\n";
$sortie .= ' </div>'."\n";
$sortie .= ' </div>'."\n";
$sortie .= ' </body>'."\n";
$sortie .= '</html>';
return $sortie;
}
 
 
// +------------------------------------------------------------------------------------------------------+
// | PIED du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.14 2006/10/09 14:35:50 ddelon
* bug caractere invalide trainant dans fichier
*
* Revision 1.13 2006/10/05 15:17:29 florian
* changement presentation
*
* Revision 1.12 2006/10/05 15:11:17 florian
* changement presentation
*
* Revision 1.11 2006/10/05 14:41:53 florian
* changement presentation
*
* Revision 1.10 2005/09/23 14:20:23 florian
* nouvel habillage installateur, plus correction de quelques bugs
*
* Revision 1.9 2004/10/27 11:43:32 jpm
* Correction bogues diff mise à jour / installation.
*
* Revision 1.8 2004/10/25 10:22:48 jpm
* Correction de quelques bogues, ajouts d'explications pour l'utilisateur et modification des styles CSS.
*
* Revision 1.7 2004/10/22 17:23:04 jpm
* Simplification del'installation de Papyrus.
*
* Revision 1.6 2004/10/19 17:01:12 jpm
* Correction bogues.
*
* Revision 1.5 2004/10/19 16:47:28 jpm
* Transformation en fonction de l'appel de l'application.
*
* Revision 1.4 2004/10/19 15:59:18 jpm
* Ajout de la gestion des valeurs propre à Papyrus à insérer dans la base de données.
* Ajout des constantes FTP.
*
* Revision 1.3 2004/10/18 09:12:09 jpm
* Changement de nom d'un fichier.
*
* Revision 1.2 2004/10/15 18:28:59 jpm
* Début appli installateur de Papyrus.
*
* Revision 1.1 2004/06/16 14:33:13 jpm
* Changement de nom de Génésia en Papyrus.
* Changement de l'arborescence.
*
* Revision 1.6 2004/04/22 08:25:48 jpm
* Transformation de $GS_GLOBAL en $_GEN_commun.
*
* Revision 1.5 2004/04/08 13:21:05 jpm
* Le code pour l'installation uniquement.
*
* Revision 1.4 2004/04/08 12:25:16 jpm
* Suppression de tous le code réalisant les vérifications. L'application Installateur ne fera qu'installer Génésia et non vérifier son bon fonctionnement.
*
* Revision 1.3 2004/04/02 16:37:51 jpm
* Modification des commentaires.
*
* Revision 1.2 2004/03/31 16:57:16 jpm
* Ajout de la gestion des erreur de base de données, de la connexion à celle-ci et des extenssions php disponibles.
*
* Revision 1.1 2004/03/29 11:00:12 jpm
* Transfert d'un morceau de code gérant les erreurs et l'installation mais qui a actuellement aucun effet sur Génésia.
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/applications/installateur/presentations/styles/installateur.old.css
New file
0,0 → 1,38
* {padding: 0;margin: 0;}
body {font-family: Tahoma, Arial, Helvetica, sans-serif;text-align: center;color: #566047;line-height: 19px;
background: #FBFBE5 url(../images/grass.png) right bottom fixed no-repeat;}
a, a:link, a:visited {color: #566047;text-decoration: underline;background: transparent;}
a:hover {color: #6878C6;background: transparent;text-decoration: none;}
a:active, a:focus {color: #566047;background-color: #FBFBE5;}
p {line-height: 19px;}
acronym {font-weight: bold;text-decoration: none;border-bottom: none;}
#container {margin: auto;text-align: left;width: 760px;border-left:solid 2px #BCBCAB;border-right:solid 2px #BCBCAB;}
#zone_bandeau {color: #566047;background: #E9EBD3;width: 760px;height: 70px;margin:5px auto;
border-top:solid 3px #838E6C;border-bottom:solid 3px #838E6C;}
#logo {float : left;margin: 3px 0 0 10px;}
#site_nom {width:300px;text-align: center;margin:20px auto;background: transparent;color: #566047;}
#zone_contenu {margin: 6px;font-size:70%;}
#zone_pied {clear:both;text-align:center;background: #E9EBD3;color: #566047;width: 760px;height: 40px;margin:5px auto;
border-top:solid 3px #838E6C;border-bottom:solid 3px #838E6C;font-size:70%;padding-top:5px;}
h1, h2, h3 {margin-bottom: 10px;height: 22px;border-bottom: 1px solid #7D8965;}
h1 {font-size: 1.5em;}
h2 {font-size: 1.3em;}
h3 {font-size: 1.2em;}
li {text-align:left;margin-left:20px;}
table {border-collapse: collapse;border-spacing: 0;}
th, td {text-align:left;padding:2px;border: solid 1px }
tt {font-size:12px;}
img {border:0;}
fieldset {border:solid 1px #7D8965;padding:3px;margin:2px;}
legend {font-weight:bold;}
input:hover {background:#7D8965;color: #FBFBE5;}
input, select, textarea {font-family: Tahoma, Arial, Helvetica, sans-serif;font-size:11px;color: #566047;background:#FDFDF3;border:solid 1px #7D8965;}
/* Mise en ligne des formulaires */
form li {margin:0;padding:0;display: block;}
form ul {margin:0;padding:0;list-style-type: none;}
form label {clear:both;float: left;width:250px;font-weight:bold;}
.liste_bouton li {display:inline;}
.erreur {color:red;}
.etape_info {margin:10px auto;padding 5px;text-align:center;width:90%;border: 1px solid green;color:green;}
.ok {text-align:center;border: 1px solid green;color:green;}
.failed {text-align:center;border: 1px solid red;color:red;}
/branches/v1.0-menes/papyrus/applications/installateur/presentations/styles/installateur.css
New file
0,0 → 1,105
/*****************Proprietes generales******************************************/
* {margin: 0; padding: 0;text-indent:0;}
body {background:#FFF;font:12px Myriad, Arial, sans-serif;color:#000;text-align:center;}
hr {margin:2px; width:100%; color: #7F8343; background-color: #7F8343; height: 1px;}
a {margin:0;padding:0;text-decoration: underline;color: #000;}
a:hover {text-decoration: underline;color:#C3D759;}
table {width:480px;margin:0 auto; border: 1px solid #006495;border-spacing:0;border-collapse:collapse;}
.table_cadre {width:480px;margin:2px;}
th {font-size:11px;padding:2px;text-align:center;border: 1px solid #006495;font-weight: normal;background:#3082AA;height:23px;}
td {font-size:11px;text-align:center;border: 1px solid #006495;background:#FFF;height:23px;}
td:hover {background: #C3D759;}
.code { background: #FFFFFF; border: solid #888888 2px; font-family: 'Courier New', Courier; width: 90%; height: 350px; overflow: scroll; padding: 3px; }
.navi {padding:0;margin:0;text-align:center;}
.other_month {color:#AAA;}
.current_day {background: #FBB63C; color: #FFF;}
.label_inscription {margin: 2px;float:left; clear:both; width:170px; text-align:right; }
.symbole_obligatoire {color:red;}
.input_inscription {float:left; width:180px;}
.input_inscription input, .input_inscription select {margin: 2px;border: 1px solid #000;font:12px Myriad, Arial, sans-serif; }
.erreur {background-color:#FFEEEE;border:1px;
border: 1px dotted #A81106;padding:1px;margin:3px;}
/*****************Titres********************************************************/
h1, h2, h3, h4, h5, h6 {font-family: Myriad, Arial, sans-serif;text-align:left;margin:4px 0;}
h1 {font-size:22px; color: #BBD049;border-bottom: solid #7FB1CA 1px ;}
h2 {font-size:18px; color: #A81106;}
h3 {font-size:17px; color: #000;}
h4 {font-size:16px; color: #FFF;background: #006495;border: 1px solid #C3D759;;-moz-border-radius:5px}
h5 {font-size:16px; color: #006495;border-bottom: solid #006495 1px;}
h6 {font-size:32px; color: #006495;}
/*****************Boutons et formulaires****************************************/
a img {border: none;}
form li {list-style-type:none;color:#000;}
form table, form td, form th {border:0}
form td:hover {background: transparent;}
label {padding-right:10px;}
input {margin:2px;background:#EEEEE9;}
/*****************Listes********************************************************/
ul {padding:0;margin: 0 0 0 10px;}
li {padding:0;margin: 2px 0 0 0;color:#000;}
/*--------------------------------------------------------------------------------------------------------------*/
/* Structure de la page */
#page {position: relative;top:3px;width: 760px; text-align: left;margin: 0 auto;}
.page {clear:both;background-color:transparent;text-align: justify;line-height: 22px;}
#zone_bandeau {height: 130px;background: url(../images/Bandeau_haut.png) no-repeat top left;}
#logo {position: absolute;top: 10px;left: 30px;}
#site_nom {position: absolute;top: 40px;left: 210px;width:500px;}
#site_nom h1 {margin: 0 auto;width:500px;font-size: 30px; font-family: Georgia, serif;color:#3082AA;border:0;}
#site_nom h6 { margin: 0 auto;width:500px;}
#vous_etes_ici {clear:both;float:left;width:762px;margin: 0 0 10px 20px;}
#zone_contenu {float:left; margin : 10px auto; padding : 10px ;width: 740px;_width: 760px;border: 1px solid #3082AA;-moz-border-radius:10px;}
#zone_bandeau_menu {clear: both;float:left;width:178px;border: 1px solid #7FB1CA;background: #7FB1CA;-moz-border-radius:10px;margin : 5px; padding:0;}
#zone_bandeau_menu h1 {width:90%;padding:0;margin:10px auto 6px auto;font:13px Myriad, Arial, sans-serif;font-weight: bold;text-align:center;color:#A01B12;background:transparent;border-bottom:1px solid #FFF;}
#menu ul {display: block;margin:3px 3px 3px 20px;padding:0;}
#menu li, #menu li li {margin:2px 0;padding:0;}
#menu li ul {margin:4px 0 2px 2px;padding:0;}
.calendar {width:160px;margin:0 auto;}
#menu li a {display: block;padding: 3px; margin: 0 3px 0 3px; width: 145px; text-decoration: none; color: #FFF; background: transparent ;border: 1px solid #7FB1CA; height:17px;text-align:left;}
#menu li a:hover {color: #000;background: #C3D759;width: 145px;border: 1px solid #006495;}
#menus_communs {float:right;text-align : right;width:600px;margin:10px 10px 0 0;}
#menus_communs li {padding: 0 1px;list-style-type:none; display: inline;background: transparent;}
#menus_communs a:hover {color: #7FB1CA;}
#zone_menu {float:left;margin: 0 20px 10px 20px;padding:1px;height:26px;background: #BBD049;}
#zone_menu ul {margin:0;padding:0;color: #000;}
#zone_menu li {list-style-type:none;float: left;margin:1px;padding:0;width: 135px;background: #3082AA;height:23px;}
#zone_menu li:hover {background: #C3D759;}
#zone_menu li a {display: block;padding: 3px; width: 135px; color : #FFF;text-decoration: none; background: transparent; height:17px;text-align:center;}
#zone_menu li a:hover {color: #000;}
#zone_onglets {float : right;margin : 0 20px -1px 0 ;text-align:left;font-weight:bold;}
#zone_onglets ul { margin:0; padding:0; list-style:none;}
#zone_onglets li { background:url(../images/Boutons/right_both_green.png) no-repeat right top; float:left; margin:0; padding:0; color: #006495;}
#zone_onglets a {float:left; display:block; color: #006495; font-size:12px; background:url(../images/Boutons/left_both_green.png) no-repeat left top; width:.1em; white-space:nowrap;/*2 lignes ajoutees pour compatibilite IE : extension de la zone cliquable a l'ensemble de zone_contenu_haut*/ padding:5px 15px 4px; text-decoration:none;}
/* On retablit le float a sa valeur correct mais le hack de l'antislash commente cache cette regle a IE5-Mac \*/ #zone_onglets a {float:none;} /* End IE5-Mac hack */
#zone_onglets > ul a { width:auto;} /*propriete ajoutee pour contredire la ligne speciale IE (ci dessus) pour les autres navigateurs*/
#zone_onglets li:hover { background-position:100% -150px;}
#zone_onglets li:hover a { background-position:0% -150px;}
#zone_onglets .inactif { border-bottom:0px solid; font-weight:normal;}
#zone_onglets .actif, #zone_onglets .actif { position:relative; background-position:100% -150px; padding-bottom:2px; font-weight:bold;}
#zone_onglets .actif a, #zone_onglets .actif a { position:relative; background-position:0% -150px; padding-bottom:3px;}
#zone_contenu_tete {float :left; width : 530px; padding : 10px 0 0 20px;}
.zone_alert, .pap_erreur {float:left;clear:both;text-indent : 0; text-align: left;min-height:56px;width : 460px; margin : 5px 0 5px 0; border: 1px solid #A81106; background: #FFF url(../images/Main_Erreur.png) no-repeat top left;padding: 5px 0px 5px 76px;-moz-border-radius:12px;}
.zone_info, .etape_info {float:left;clear:both;-moz-border-radius:12px; text-indent : 0; text-align: left;min-height:56px;width :460px; margin : 0 15px 15px 0; border: 1px solid #D0DF7F; background: #FFF url(../images/Infos.png) no-repeat top left;padding: 5px 0px 5px 76px;}
#zone_contenu_corps {text-indent : 15px; float: left; width:521px; margin : 20px 0px 10px 20px;padding : 0 0px 10px 0; text-align: justify;}
.spacer {width:742px;clear: both;}
#zone_pied {margin: 3px 0 10px 0;padding:0;float:left;width: 762px;height : 65px;background: url(../images/Bandeau_bas.png) repeat-x top left;}
#zone_pied a {font: 12px arial, sans-serif; color: #006495;}
#zone_pied a:hover {text-decoration: none;font: 12px arial, sans-serif; color: #FFF;}
/*-------------------------------APPLETTES--------------------------------------*/
#moteur_recherche {clear:both;float:right;margin:0 5px 0 0;padding:0;width:180px;height: 33px;text-align:right;}
#moteur_recherche legend {display:none;}
#moteur_recherche fieldset {margin:0;padding:0;border: 0;}
#moteur_recherche label {display:none;}
#more_motif {padding:2px;width:140px;border:#000 1px groove;font: 12px arial, sans-serif; color: #000;}
#sesi_ok, #more_ok {border:#B77744 1px solid;font: 12px arial, sans-serif; color: #FFF;padding:0;margin:0;background: #B77744;text-transform: uppercase;}
#selecteur_monde {clear:right;float:right;margin:25px 5px 0 0;padding:0;width: 180px;height: 33px;text-align:right;}
#selecteur_monde select {font: 12px arial, sans-serif;width:140px;border:#000 1px groove;}
#selecteur_monde legend { display: none;}
#selecteur_monde fieldset { border: 0; margin: 0; padding: 0;}
#copyright {margin:15px 0 10px 10px;padding : 0;float:left;width: 400px;}
#copyright a {color: #006495;;}
#copyright a:hover {color: #222;}
#identification {width:170px;margin:0 auto;}
#identification fieldset {border: 1px #FFF;margin: 0 auto;padding: 5px;background:#FFF;-moz-border-radius:20px;}
#identification legend {display: none;}
#identification label {display: block;}
#identification input {border:1px solid #000;}
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/logo-xhtml11.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/logo-xhtml11.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/navigation/adme_modifier.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/navigation/adme_modifier.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/navigation/adme_fermer.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/navigation/adme_fermer.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/navigation/adme_administrer.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/navigation/adme_administrer.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/navigation/adme_monter.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/navigation/adme_monter.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/navigation/adme_ouvrir.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/navigation/adme_ouvrir.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/navigation/adme_supprimer.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/navigation/adme_supprimer.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/navigation/adme_augmenter.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/navigation/adme_augmenter.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/navigation/adme_ajouter.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/navigation/adme_ajouter.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/navigation/adme_descendre.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/navigation/adme_descendre.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/navigation/adme_diminuer.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/navigation/adme_diminuer.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/Calendrier-coin-jaune.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/Calendrier-coin-jaune.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/Infos.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/Infos.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/picto.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/picto.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/Logo_papyrus.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/Logo_papyrus.jpg
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/Bandeau_haut.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/Bandeau_haut.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/logo-firefox.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/logo-firefox.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/Bandeau_bas.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/Bandeau_bas.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/Boutons/onglet_contenu_droit.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/Boutons/onglet_contenu_droit.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/Boutons/left_both_green.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/Boutons/left_both_green.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/Boutons/onglet_contenu_hover_droit.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/Boutons/onglet_contenu_hover_droit.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/Boutons/onglet_contenu_milieu.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/Boutons/onglet_contenu_milieu.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/Boutons/right_both_green.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/Boutons/right_both_green.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/Boutons/onglet_contenu_hover_milieu.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/Boutons/onglet_contenu_hover_milieu.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/Boutons/onglet_contenu_gauche.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/Boutons/onglet_contenu_gauche.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/Boutons/onglet_contenu_hover_gauche.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/Boutons/onglet_contenu_hover_gauche.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/logo-css.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/logo-css.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/Agraphe.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/Agraphe.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/Main_Erreur.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.0-menes/papyrus/applications/installateur/presentations/images/Main_Erreur.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.0-menes/papyrus/applications/installateur/instal_fichier.inc.php
New file
0,0 → 1,431
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (c) 2002, Hendrik Mans <hendrik@mans.de> |
// | Copyright 2002, 2003 David DELON |
// | Copyright 2002 Patrick PAUL |
// | Copyright 2003 Jean-Pascal MILCENT |
// | All rights reserved. |
// | Redistribution and use in source and binary forms, with or without |
// | modification, are permitted provided that the following conditions |
// | are met: |
// | 1. Redistributions of source code must retain the above copyright |
// | notice, this list of conditions and the following disclaimer. |
// | 2. Redistributions in binary form must reproduce the above copyright |
// | notice, this list of conditions and the following disclaimer in the |
// | documentation and/or other materials provided with the distribution. |
// | 3. The name of the author may not be used to endorse or promote products |
// | derived from this software without specific prior written permission. |
// | |
// | THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
// | IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
// | OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
// | IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
// | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
// | NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
// | THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: instal_fichier.inc.php,v 1.25.2.1 2007-03-15 10:47:31 alexandre_tb Exp $
/**
* Page de création des fichiers nécessaire à l'installation de Papyrus.
*
* Page permettant de créer le fichier de configuration de Papyrus.
*
*@package Installateur
//Auteur original :
*@author Hendrik MANS <hendrik@mans.de>
//Autres auteurs :
*@author David DELON
*@author Patrick PAUL
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.25.2.1 $ $Date: 2007-03-15 10:47:31 $
// +------------------------------------------------------------------------------------------------------+
**/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTÊTE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
// Numéro de l'étape d'installation :
$num_etape = 3;
 
// Initialisation du tableau contenant les valeurs de configuration de la base de données
$tableau = array( 'PAP_FTP_SERVEUR' => '', 'PAP_FTP_PORT' => '', 'PAP_FTP_UTILISATEUR' => '',
'PAP_FTP_MOT_DE_PASSE' => '', 'PAP_FTP_RACINE' => '');
foreach ($tableau as $cle => $val) {
if (!empty($_POST['fichier'][$cle])) {
$fichier[$cle] = $_POST['fichier'][$cle];
} else if (defined($cle)) {
$fichier[$cle] = constant($cle);
} else {
if ($cle == 'PAP_FTP_SERVEUR') {
$fichier[$cle] = $_SERVER['HTTP_HOST'];
} else if ($cle == 'PAP_FTP_PORT') {
$fichier[$cle] = 21;
} else {
$fichier[$cle] = '';
}
}
}
 
// Récupération des paramêtres de configuration du formulaire précédent
if (isset($_POST['pref_serial'])) {
$pref = unserialize(stripslashes($_POST['pref_serial']));
}
if (isset($_POST['bdd'])) {
$bdd = $_POST['bdd'];
} else if (isset($_POST['bdd_serial'])) {
$bdd = unserialize(stripslashes($_POST['bdd_serial']));
}
 
// +------------------------------------------------------------------------------------------------------+
// | CORPS du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
// Affichage d'informations...
$sortie .= '<br /><h1>Etape n°'.$num_etape.' sur '.INSTAL_NBRE_ETAPE.'.</h1>'."\n";
 
// Correction éventuelle des informations saisies par l'utilisateur
if (ereg('^[\/\\]', $fichier['PAP_FTP_RACINE']) == false) {
// le chemin FTP ne doit pas commencer par un slash, nous le supprimons
$fichier['PAP_FTP_RACINE'] = GEN_SEP.$fichier['PAP_FTP_RACINE'];
}
 
// Nous vérifions si nous sommes en phase de test du formulaire de config de l'écriture de fichier
$erreur = 0;
$sortie_verif = '';
if ($_GET['installation'] == 'verif_fichier') {
// Test de la configuration du FTP
$sortie_verif .= ' <br /><h2>Test de la connexion FTP</h2>'."\n";
$erreur = testerConfig($sortie_verif, 'Test connexion FTP ...', $ftp = @ftp_connect($fichier['PAP_FTP_SERVEUR'], $fichier['PAP_FTP_PORT']), '', 1, $erreur);
$erreur = testerConfig($sortie_verif, 'Test identification sur le serveur FTP ...', @ftp_login($ftp, $fichier['PAP_FTP_UTILISATEUR'],
$fichier['PAP_FTP_MOT_DE_PASSE']), 'Les paramêtres FTP saisies ne permettent pas l\'identification !', 1, $erreur);
$sortie_verif .= '<br />'."\n";
$configCode = "<?php\n// pap_config.inc.php construit le ".strftime("%c")."\n// ne changez pas la version de Papyrus manuellement!\n\n";
$entries[] = 'define(\''.INSTAL_VERSION_NOUVELLE_NOM.'\',\''.INSTAL_VERSION_NOUVELLE.'\');'."\n";
foreach ($bdd as $cle => $val) {
$entries[] = 'define(\''.$cle.'\',\''.$val.'\');'."\n";
}
$entries[] = "define('PAP_DSN', 'mysql://'.PAP_BDD_UTILISATEUR.':'.PAP_BDD_MOT_DE_PASSE.'@'.PAP_BDD_SERVEUR.'/'.PAP_BDD_NOM);"."\n";
foreach ($fichier as $cle => $val) {
$entries[] = 'define(\''.$cle.'\',\''.$val.'\');'."\n";
}
foreach ($pref as $cle => $val) {
// Nous récupérons uniquement les constantes à stocker dans le fichier de config (leur nom commence par PAP_)
if (preg_match('/^PAP_/', $cle)) {
if (preg_match('/^[0-9]+|(?i:true|false)$/', $val)) {
$entries[] = 'define(\''.$cle.'\','.$val.');'."\n";
} else {
$entries[] = 'define(\''.$cle.'\',\''.$val.'\');'."\n";
}
}
}
$configCode .= implode("\n", $entries)."\n\n?>";
if ($erreur==0) {
// Tentative d'écriture du fichier de config
$sortie_verif .= ' <h2>Ecriture des fichiers sur le serveur par FTP</h2>'."\n";
$chemin_fpt_absolu = $fichier['PAP_FTP_RACINE'].INSTAL_CHEMIN_CONFIG;
$url_ftp = 'ftp://'.$fichier['PAP_FTP_UTILISATEUR'].':'.$fichier['PAP_FTP_MOT_DE_PASSE'].
'@'.$fichier['PAP_FTP_SERVEUR'].$chemin_fpt_absolu;
// Dans le cas, où nous mettons à jour Papyrus, il faut supprimer l'ancien fichier de config
if (INSTAL_VERSION_ANCIENNE != '') {
$txt_suppression = 'Suppression de <tt>'.$chemin_fpt_absolu.'</tt>...';
$txt_suppression_erreur = '<p>Le fichier <tt>'.$chemin_fpt_absolu.'</tt> ne peut être supprimer automatiquement. '.
'Veuillez utiliser un logiciel de transfert de fichier par FTP pour le supprimer.</p>';
$erreur = testerConfig($sortie_verif, $txt_suppression, unlink($url_ftp), $txt_suppression_erreur, 1, $erreur);
}
// Nous écrivons le fichier de config sur le disque
$fp = @fopen($url_ftp, 'w');
$txt_ecriture_conf = '&Eacute;criture sur le serveur de <tt>'.$chemin_fpt_absolu.'</tt>...';
$txt_ecriture_conf_erreur = '<span class="failed">AVERTISSEMENT:</span> Le fichier de configuration <tt>'.$chemin_fpt_absolu.
'</tt> n\'a pu &ecirc;tre cr&eacute;&eacute;. Veuillez vous assurez que votre serveur a les droits '.
'd\'acc&egrave;s en &eacute;criture pour ce fichier. Si pour une raison quelconque vous ne pouvez pas '.
'faire &ccedil;a vous devez copier les informations suivantes dans un fichier et les transf&eacute;rer '.
'au moyen d\'un logiciel de transfert de fichier (ftp) sur le serveur dans un fichier '.
'<tt>pap_config.inc.php</tt> directement dans le r&eacute;pertoire <tt>configuration</tt> du répertoire '.
'<tt>papyrus</tt> de Papyrus. Une fois que vous aurez fait cela, votre site Papyrus devrait fonctionner '.
'correctement.';
$txt_ecriture_conf_erreur .= '<div class="code"><code><pre>'.htmlentities($configCode).'</pre></code></div>'."\n";
$erreur = testerConfig($sortie_verif, $txt_ecriture_conf, $fp, $txt_ecriture_conf_erreur, 1, $erreur);
// tentative d ecriture du fichier .htaccess
$url_ftp_htaccess = 'ftp://'.$fichier['PAP_FTP_UTILISATEUR'].':'.$fichier['PAP_FTP_MOT_DE_PASSE'].
'@'.$fichier['PAP_FTP_SERVEUR'].$fichier['PAP_FTP_RACINE'].'/.htaccess';
$url_parse = parse_url('http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
$prefixe = dirname($url_parse['path']);
 
$url = 'http://'.$_SERVER['HTTP_HOST'].$prefixe;
if (isset($pref['PAP_URL_REECRITURE']) && $pref['PAP_URL_RRECRITURE'] == 1) {
$on_off = 'on';
} else {
$on_off = 'off';
}
$contenu_htaccess = '# Raccourci pour les menus et sites de Papyrus'."\n".
'RewriteEngine '.$on_off."\n".
'# si le fichier ou le dossier existe dans le système de fichier on l\'utilise directement'."\n".
'RewriteCond %{REQUEST_FILENAME} !-d'."\n".
'RewriteCond %{REQUEST_FILENAME} !-f'."\n\n".
'# ATTENTION : remplace localhoste par votre nom de domaine !'."\n".
'# Réecriture d\'url pour les applications de Papyrus n\'utilisant pas correctement Pap_URL'."\n".
'# ATTENTION : ne marche pas pour les formulaires en mode POST !'."\n".
'RewriteRule ^([^\/]+)&(.*)$ '.$url.'/$1?$2 [QSA,L,R=301]'."\n".
'# Réecriture d\'url pour les vieux permaliens'."\n".
'RewriteCond %{REQUEST_FILENAME}/ !-d'."\n".
'RewriteRule ^([^\/\?:.]+)$ '.$url.'/page:$1 [QSA,L,R=301]'."\n".
'# Redirection d\'url pour le sélecteur de site'."\n".
'# Le point d\'interrogation sans rien après, vide la QUERY_STRING sinon elle est concacténée à l\'url et cela plante...'."_n".
'# Le "/" initial dans la RewriteCond est obligatoire!'."\n".
'RewriteCond %{REQUEST_URI}?%{QUERY_STRING} ^/papyrus\.php\?site=([^&]+)$'."\n".
'RewriteRule ^papyrus.php$ '.$url.'/site:%1? [L,R=301]'."\n\n".
'# Réecriture d\'url pour les sites de Papyrus : à modifier si les valeurs par défaut ont été changées'."\n".
'RewriteRule ^site:.+$ papyrus.php [QSA,L]'."\n".
'# Réecriture d\'url pour les menus de Papyrus : à modifier si les valeurs par défaut ont été changées'."\n".
'RewriteRule ^page:.+$ papyrus.php [QSA,L]'."\n\n".
'# Gestion des erreurs 404'."\n".
'ErrorDocument 404 '.$prefixe.'/erreur_http.php?erreur=404';
if (file_exists($pref['PAP_CHEMIN_RACINE'].'/.htaccess')) {
$sortie_verif .='<p>Attention: Un fichier .htaccess est déjà présent sur le serveur.'.
'<br />'.$pref['PAP_CHEMIN_RACINE'].'/.htaccess'.
'<br />Veillez à le configurer correctement<br /><br />'.
'Contenu par défaut: <br /><br /> ErrorDocument 404 /erreur_404.php';
} else {
$tempfn = tempnam("","");
$temp = fopen($tempfn, "w");
 
fwrite($temp, $contenu_htaccess);
fclose($temp);
$fichier_config_source = $tempfn;
$fichier_config_cible = substr($fichier['PAP_FTP_RACINE']."/.htaccess", 1) ;
$txt_ecriture_conf_erreur = 'AVERTISSEMENT: Le fichier .htaccess <tt>'.$fichier_config_cible.
'</tt> n\'a pu &ecirc;tre cr&eacute;&eacute;. Veuillez vous assurez que votre serveur a les droits '.
'd\'acc&egrave;s en &eacute;criture pour ce fichier. Si pour une raison quelconque vous ne pouvez pas '.
'faire &ccedil;a vous devez copier les informations suivantes dans un fichier et les transf&eacute;rer '.
'au moyen d\'un logiciel de transfert de fichier (ftp) sur le serveur dans un fichier '.
'<tt>.htaccess</tt> directement &agrave la racine de '.
'<tt>papyrus</tt> de Papyrus.';
$txt_ecriture_conf_erreur .= '<div class="code"><code><pre>'.htmlentities($contenu_htaccess).'</pre></code></div>'."\n";
$txt_ecriture_conf = '&Eacute;criture sur le serveur du fichier .htaccess... <tt>'.$fichier_config_cible.'</tt>'."\n";
$erreur = testerConfig($sortie_verif, $txt_ecriture_conf, ftp_put($ftp, $fichier_config_cible,$fichier_config_source, FTP_ASCII), $txt_ecriture_conf_erreur, 1, 0);
}
}
}
 
 
 
// Mise à jour des fichiers de configuration de chaque application :
 
function maj_fichier_config_appli($fichier, $fichierconfig, $elements) {
 
$url_ftp = 'ftp://'.$fichier['PAP_FTP_UTILISATEUR'].':'.$fichier['PAP_FTP_MOT_DE_PASSE'].
'@'.$fichier['PAP_FTP_SERVEUR'].$fichier['PAP_FTP_RACINE'].GEN_SEP.$fichierconfig;
$fp = @fopen($url_ftp, 'w');
if ($fp) {
while (!feof($fp)) {
$cont .= fread($fp, 500);
}
foreach ($elements as $element) {
list($expr,$rempl)=$elements;
preg_replace('/'.$expr.'/',$rempl,$cont);
}
fwrite($fp, $cont);
fclose($fp);
}
}
 
// Maj Fckeditor
 
maj_fichier_config_appli($fichier,'api/fckeditor/editor/filemanager/browser/default/connectors/php/config.php',array("test"=>"test"));
 
 
 
 
// Gestion de l'affichage
if ($erreur == 0 && empty($sortie_verif)) {
// Premier appel du fichier...
$sortie .= creerFormulaire($fichier);
$sortie .= '<li><input type="hidden" name="pref_serial" value="'.htmlentities(serialize($pref)).'" /></li>'."\n";
$sortie .= '<li><input type="hidden" name="bdd_serial" value="'.htmlentities(serialize($bdd)).'" /></li>'."\n";
$sortie .= '<li><input type="submit" value="Tester" /></li>'."\n";
$sortie .= ' </ul>'."\n";
$sortie .= ' </form>';
} else if ($erreur == 2 && !empty($sortie_verif)) {
// Vérification du fichier avec interuption...
$sortie .= creerFormulaire($fichier);
$sortie .= '<li><input type="hidden" name="pref_serial" value="'.htmlentities(serialize($pref)).'" /></li>'."\n";
$sortie .= '<li><input type="hidden" name="bdd_serial" value="'.htmlentities(serialize($bdd)).'" /></li>'."\n";
$sortie .= '<li><input type="submit" value="Tester à nouveau" /></li>'."\n";
$sortie .= ' </ul>'."\n";
$sortie .= ' </form>';
$sortie .= $sortie_verif;
} else if (($erreur == 0 || $erreur == 1) && !empty($sortie_verif)) {
// Vérification du fichier sans interuption... passage à l'étape suivante
$sortie .= creerFormulaire($fichier, true);
$sortie .= ' </ul>'."\n";
$sortie .= ' </form>';
$sortie .= $sortie_verif;
// Ecriture du fichier...
fwrite($fp, $configCode);
fclose($fp);
$sortie .= ' <br /><p class="etape_info">Voila c\'est termin&eacute; ! Vous pouvez <a href="'.donnerUrlCourante().'">retourner sur votre site '.
'Papyrus</a>. Il est conseill&eacute; de retirer l\'acc&egrave;s en &eacute;criture au fichier '.
'<tt>pap_config.inc.php</tt>. Ceci peut &ecirc;tre une faille dans la s&eacute;curit&eacute;.</p>'."\n";
}
 
// +------------------------------------------------------------------------------------------------------+
// | LISTE DES FONCTIONS |
// +------------------------------------------------------------------------------------------------------+
 
// Création du formulaire de configuration de la base de donneés
function creerFormulaire($fichier, $bln_lecture = false) {
$disabled = '';
if ($bln_lecture) {
$disabled = ' disabled="disabled" ';
}
$sortie_form .= ' <form action="'.donnerUrlCourante().'?installation=verif_fichier" method="post">';
$sortie_form .= ' <ul>'."\n";
$sortie_form .= '<li><br /><h2>Configuration du FTP et des chemins d\'accès</h2></li>'."\n";
$sortie_form .= '<li>Entrer le nom de dommaine pour accéder à votre dépôt FTP</li>'."\n";
$sortie_form .= '<li>'."\n".
'<label for="ftp_serveur">Nom du serveur FTP :</label>'.
'<input id="ftp_serveur"'.$disabled.'type="text" size="30" name="fichier[PAP_FTP_SERVEUR]" value="'.$fichier['PAP_FTP_SERVEUR'].'" />'.
'</li>'."\n";
$sortie_form .= '<li>Le numéro du port pour le service FTP sur la machine hébergeant Papyrus. '.
'En g&eacute;n&eacute;ral c\'est 21.</li>'."\n";
$sortie_form .= '<li>'."\n".
'<label for="ftp_port">N° du port d\'accès au serveur FTP :</label>'.
'<input id="ftp_port"'.$disabled.'type="text" size="20" name="fichier[PAP_FTP_PORT]" value="'.$fichier['PAP_FTP_PORT'].'" />'.
'</li>'."\n";
$sortie_form .= '<li>Nom et mot de passe FTP qui sera utilis&eacute; pour se connecter &agrave; au dépôt FTP.</li>'."\n";
$sortie_form .= '<li>'."\n".
'<label for="ftp_utilisateur">Nom d\'utilisateur pour le serveur FTP :</label>'.
'<input id="ftp_utilisateur"'.$disabled.'type="text" size="20" name="fichier[PAP_FTP_UTILISATEUR]" value="'.$fichier['PAP_FTP_UTILISATEUR'].'" />'.
'</li>'."\n";
$sortie_form .= '<li>'."\n".
'<label for="ftp_mot_de_passe">Mot de passe pour le serveur FTP :</label>'.
'<input id="ftp_mot_de_passe"'.$disabled.'type="password" size="20" name="fichier[PAP_FTP_MOT_DE_PASSE]" value="'.$fichier['PAP_FTP_MOT_DE_PASSE'].'" />'.
'</li>'."\n";
$sortie_form .= '<li>Lorsque vous vous connectez par FTP sur le serveur où vous avez déposé les fichiers de Papyrus, le '.
'dossier le plus haut auquel vous pouvez accéder dans l\'arborescence est la racine. Il vous faut donc '.
'indiquez dans le champ ci-dessous le chemin absolu depuis cette racine jusqu\'au dossier contenant le fichier '.
'<tt>papyrus.php</tt>. Exemple : <i>/www/</i></li>'."\n";
$sortie_form .= '<li>'."\n".
'<label for="ftp_racine">Racine dépôt FTP :</label>'.
'<input id="ftp_racine"'.$disabled.'type="text" size="60" name="fichier[PAP_FTP_RACINE]" value="'.$fichier['PAP_FTP_RACINE'].'" />'.
'</li>'."\n";
return $sortie_form;
}
 
// +------------------------------------------------------------------------------------------------------+
// | PIED du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.25 2006/12/01 15:43:01 alexandre_tb
* prise en compte dans le rewriteengine de l'activation ou non de la reecriture
*
* Revision 1.24 2006/12/01 11:47:10 alexandre_tb
* suppression de var_dump
*
* Revision 1.23 2006/12/01 11:46:11 alexandre_tb
* correction creation .htaccess
*
* Revision 1.22 2006/11/30 17:41:30 alexandre_tb
* ecriture htaccess
*
* Revision 1.21 2006/11/30 17:36:29 alexandre_tb
* ecriture htaccess
*
* Revision 1.20 2006/11/30 16:41:42 alexandre_tb
* ecriture htaccess
*
* Revision 1.19 2006/11/30 15:50:25 ddelon
* installation fichier
*
* Revision 1.18 2006/11/30 15:34:51 alexandre_tb
* ecriture htaccess
*
* Revision 1.17 2006/11/30 15:27:31 alexandre_tb
* ecriture htaccess
*
* Revision 1.16 2006/11/30 14:52:42 alexandre_tb
* Ecriture du fichier htaccess lors de l installation
*
* Revision 1.15 2006/10/09 14:35:27 ddelon
* bug caractere invalie trainant dans fichier
*
* Revision 1.14 2006/10/06 15:34:30 florian
* mise en commentaire .htaccess
*
* Revision 1.13 2006/10/06 15:23:00 florian
* amelioration graphique de l'installateur
*
* Revision 1.12 2006/10/06 14:49:45 ddelon
* ecriture htaccess a l'installation
*
* Revision 1.11 2006/10/06 14:46:15 alexandre_tb
* ecriture du fichier .htaccess
*
* Revision 1.10 2005/09/23 14:20:23 florian
* nouvel habillage installateur, plus correction de quelques bugs
*
* Revision 1.9 2005/04/12 16:09:45 jpm
* Amélioration de la gestion de la constante de redirection des urls et de la gestion des constantes de type entier et booléen.
*
* Revision 1.8 2004/10/25 16:26:35 jpm
* Début gestion des mises à jours.
*
* Revision 1.7 2004/10/25 10:22:48 jpm
* Correction de quelques bogues, ajouts d'explications pour l'utilisateur et modification des styles CSS.
*
* Revision 1.6 2004/10/22 17:39:14 jpm
* Correction gestion du slash devant le chemin racine ftp.
*
* Revision 1.5 2004/10/22 17:23:04 jpm
* Simplification del'installation de Papyrus.
*
* Revision 1.4 2004/10/19 17:01:12 jpm
* Correction bogues.
*
* Revision 1.3 2004/10/19 15:59:18 jpm
* Ajout de la gestion des valeurs propre à Papyrus à insérer dans la base de données.
* Ajout des constantes FTP.
*
* Revision 1.2 2004/10/18 09:12:09 jpm
* Changement de nom d'un fichier.
*
* Revision 1.1 2004/10/18 09:11:05 jpm
* Changement de nom du fichier.
*
* Revision 1.1 2004/10/15 18:28:59 jpm
* Début appli installateur de Papyrus.
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/applications/installateur/instal_base_de_donnees.inc.php
New file
0,0 → 1,381
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (c) 2002, Hendrik Mans <hendrik@mans.de> |
// | Copyright 2002, 2003 David DELON |
// | Copyright 2002 Patrick PAUL |
// | Copyright 2003 Eric FELDSTEIN |
// | All rights reserved. |
// | Redistribution and use in source and binary forms, with or without |
// | modification, are permitted provided that the following conditions |
// | are met: |
// | 1. Redistributions of source code must retain the above copyright |
// | notice, this list of conditions and the following disclaimer. |
// | 2. Redistributions in binary form must reproduce the above copyright |
// | notice, this list of conditions and the following disclaimer in the |
// | documentation and/or other materials provided with the distribution. |
// | 3. The name of the author may not be used to endorse or promote products |
// | derived from this software without specific prior written permission. |
// | |
// | THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
// | IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
// | OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
// | IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
// | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
// | NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
// | THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: instal_base_de_donnees.inc.php,v 1.29 2006-12-01 14:05:57 alexandre_tb Exp $
/**
* Page de création de la base de données de Papyrus.
*
* Page permettant de créer la base de données de Papyrus.
*
*@package Installateur
//Auteur original :
*@author Hendrik MANS <hendrik@mans.de>
//Autres auteurs :
*@author David DELON
*@author Patrick PAUL
*@author Eric FELDSTEIN
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.29 $ $Date: 2006-12-01 14:05:57 $
// +------------------------------------------------------------------------------------------------------+
**/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTÊTE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
// Numéro de l'étape d'installation :
$num_etape = 2;
 
// Initialisation du tableau contenant les valeurs de configuration de la base de données
$tableau = array('PAP_BDD_SERVEUR' => '', 'PAP_BDD_NOM' => '', 'PAP_BDD_UTILISATEUR' => '', 'PAP_BDD_MOT_DE_PASSE' => '');
foreach ($tableau as $cle => $val) {
if ($_POST['bdd'][$cle] != '') {
$bdd[$cle] = $_POST['bdd'][$cle];
} else if (defined($cle)) {
$bdd[$cle] = constant($cle);
} else {
$bdd[$cle] = '';
}
}
 
// Récupération des paramêtres de configuration du formulaire précédent
if (isset($_POST['pref'])) {
$pref = $_POST['pref'];
} else if (isset($_POST['pref_serial'])) {
$pref = unserialize(stripslashes($_POST['pref_serial']));
}
 
// +------------------------------------------------------------------------------------------------------+
// | CORPS du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
// Affichage d'informations...
$sortie .= '<br /><h1>Etape n°'.$num_etape.' sur '.INSTAL_NBRE_ETAPE.'.</h1>'."\n";
 
// Nous vérifions si nous sommes en phase de test du formulaire de config de la base de données
$erreur = 0;
$sortie_verif = '';
if ($_GET['installation'] == 'verif_bdd') {
// Test de la configuration à la base de données
$sortie_test .= ' <br /><h2>Test de la configuration de la base de données</h2>'."\n";
$dblink = @mysql_connect($bdd['PAP_BDD_SERVEUR'], $bdd['PAP_BDD_UTILISATEUR'], $bdd['PAP_BDD_MOT_DE_PASSE']);
$erreur = testerConfig($sortie_test, 'Test connexion au serveur MySQL, recherche base de donn&eacute;es ...', @mysql_select_db($bdd['PAP_BDD_NOM'], $dblink),
'<br />La base de donn&eacute;es, le serveur MySQL, ou votre identifiant / mot de passe sont invalides, veuillez vérifer vos paramêtres.', 1, $erreur);
$sortie .= '<br />'."\n";
if ($erreur==0) {
// L'exécution du SQL peut commencer...
if (!defined('PAP_VERSION')) {
$version_actuelle = 0.1;
} else {
// On ajoute pour éviter l'étape qui a déjà eu lieu lors d'une installation précédente!
$version_actuelle = PAP_VERSION + 0.01;
}
if (!defined('GEN_VERSION')) {
$version_maj = 0.1;
} else {
$version_maj = GEN_VERSION + 0.01;
}
$sortie_test .= '<h2>Insertion des informations dans la base de données</h2>';
for ( $version = $version_actuelle; $version <= $version_maj; $version = $version + 0.01) {
//Insertion des requêtes présentes dans le fichier sql
$file_sql_contenu = INSTAL_CHEMIN_SQL.'papyrus_v'.$version.'.sql';
if (file_exists($file_sql_contenu)) {
$sortie_verif .= '<h2>Insertion des données du fichier sql version '.$version.'</h2>';
$sql_contenu = PMA_readFile($file_sql_contenu);
}
$tab_requete_sql = array();
PMA_splitSqlFile($tab_requete_sql, $sql_contenu, '');
foreach ($tab_requete_sql as $value) {
$table_nom = '';
if (!empty($value['table_nom'])) {
$table_nom = $value['table_nom'];
}
$requete_type = '';
if (!empty($value['type'])) {
$requete_type = $value['type'];
}
if ($requete_type == 'create') {
$erreur = testerConfig( $sortie_verif, 'Création table '.$table_nom.'...', @mysql_query($value['query'], $dblink),
'Déjà créée ?', 0, $erreur);
} else if ($requete_type == 'alter') {
$erreur = testerConfig( $sortie_verif, 'Modification structure table '.$table_nom.'...', @mysql_query($value['query'], $dblink),
'Déjà modifiée ?', 0, $erreur);
} else if ($requete_type == 'insert') {
$erreur = testerConfig( $sortie_verif, 'Insertion table '.$table_nom.'...', @mysql_query($value['query'], $dblink),
'Données déjà présente ?', 0, $erreur);
}
}
// Chargement des hooks sql : fichier sql de configuration spécifiques à chaque application
 
$d = dir(GEN_CHEMIN_CLIENT);
$sql_contenu_hook = '';
while (false !== ($repertoire = $d->read())) {
$hook=GEN_CHEMIN_CLIENT.$repertoire.GEN_SEP.'documentation'.GEN_SEP.$repertoire.'_v'.$version.'.sql';
if (file_exists($hook)) {
$sortie_verif .= '<h2>Insertion des informations dans la base de données, fichier : '.$hook.' </h2>';
$sql_contenu_hook = PMA_readFile($hook);
$tab_requete_sql = array();
PMA_splitSqlFile($tab_requete_sql, $sql_contenu_hook, '');
foreach ($tab_requete_sql as $value) {
$table_nom = '';
if (!empty($value['table_nom'])) {
$table_nom = $value['table_nom'];
}
$requete_type = '';
if (!empty($value['type'])) {
$requete_type = $value['type'];
}
if ($requete_type == 'create') {
$erreur = testerConfig( $sortie_verif, 'Création table '.$table_nom.'...', @mysql_query($value['query'], $dblink),
'Déjà créée ?', 0, $erreur);
} else if ($requete_type == 'alter') {
$erreur = testerConfig( $sortie_verif, 'Modification structure table '.$table_nom.'...', @mysql_query($value['query'], $dblink),
'Déjà modifiée ?', 0, $erreur);
} else if ($requete_type == 'insert') {
$erreur = testerConfig( $sortie_verif, 'Insertion table '.$table_nom.'...', @mysql_query($value['query'], $dblink),
'Données déjà présente ?', 0, $erreur);
}
}
}
}
}
//Insertion des requêtes dépendant du formulaire d'installation
$sortie_verif .= '<h2>Insertion des données dépendant du formulaire précédent</h2>';
$requete_admin = 'INSERT INTO gen_annuaire VALUES (1, "'.$pref['ADMIN_I18N'].'", "'.$pref['ADMIN_NOM'].
'", "'.$pref['ADMIN_PRENOM'].'", "'.md5($pref['ADMIN_MDP_01']).'", "'.
$pref['ADMIN_MAIL'].'");';
$erreur = testerConfig($sortie_verif, 'Insertion de l\'administrateur...', @mysql_query($requete_admin, $dblink),
'Données déjà présente ?', 0, $erreur);
$requete_auth = 'INSERT INTO gen_site_auth_bdd VALUES (1, "mysql://'.
$bdd['PAP_BDD_UTILISATEUR'].':'.$bdd['PAP_BDD_MOT_DE_PASSE'].'@'.$bdd['PAP_BDD_SERVEUR'].'/'.$bdd['PAP_BDD_NOM'].'", "gen_annuaire", "ga_mail", '.
'"ga_mot_de_passe", "md5","chp_personne_prenom=ga_prenom chp_personne_nom=ga_nom");';
$erreur = testerConfig($sortie_verif, 'Insertion de l\'authentification...', @mysql_query($requete_auth, $dblink),
'Données déjà présente ?', 0, $erreur);
$url_inscription = preg_replace ('/papyrus\.php/', 'inscription', $pref['PAP_URL']);
$requete_auth = 'INSERT INTO gen_site_auth_bdd VALUES (2, "mysql://'.
$bdd['PAP_BDD_UTILISATEUR'].':'.$bdd['PAP_BDD_MOT_DE_PASSE'].'@'.$bdd['PAP_BDD_SERVEUR'].'/'.$bdd['PAP_BDD_NOM'].'", "annuaire", "a_mail", '.
'"a_mot_de_passe", "md5","chp_personne_prenom=a_prenom chp_personne_nom=a_nom '.
'url_inscription='.$url_inscription.' url_inscription_modif='.$url_inscription.'");';
 
$erreur = testerConfig($sortie_verif, 'Insertion de l\'authentification utilisateurs ...', @mysql_query($requete_auth, $dblink),
'Données déjà présente ?', 0, $erreur);
}
}
 
// Gestion de l'affichage de sortie
if ($erreur == 0 && empty($sortie_verif)) {
// Premier appel du fichier...
$sortie .= creerFormulaire($bdd);
$sortie .= '<li><input type="hidden" name="pref_serial" value="'.htmlentities(serialize($pref)).'" /></li>'."\n";
$sortie .= '<li><input type="submit" value="Tester" /></li>'."\n";
$sortie .= ' </ul>'."\n";
$sortie .= ' </form>';
} else if ($erreur == 2 && !empty($sortie_test)) {
// Vérification du fichier avec interuption...
$sortie .= creerFormulaire($bdd);
$sortie .= $sortie_test;
$sortie .= '<li><input type="hidden" name="pref_serial" value="'.htmlentities(serialize($pref)).'" /></li>'."\n";
$sortie .= '<li><input type="submit" value="Tester à nouveau" /></li>'."\n";
$sortie .= ' </ul>'."\n";
$sortie .= ' </form>';
//$sortie .= '<div class="code"><code>'.$sortie_verif.'</code></div>';
} else if (($erreur == 0 || $erreur == 1) && !empty($sortie_verif)) {
// Vérification du fichier sans interuption... passage à l'étape suivante
$sortie .= creerFormulaire($bdd, true);
$sortie .= $sortie_test;
$sortie .= ' </ul>'."\n";
$sortie .= ' </form>';
$sortie .= '<div class="code"><code>'.$sortie_verif.'</code></div>';
$sortie .= ' <br /><p class="etape_info">A l\'&eacute;tape suivante, le programme d\'installation va essayer d\'&eacute;crire le fichier de '.
'configuration <tt>'.INSTAL_FICHIER_CONFIG.'</tt>.<br />Assurez vous que le serveur web a bien le '.
'droit d\'&eacute;crire dans ce fichier, sinon vous devrez le modifier manuellement.</p>'."\n";
$sortie .= ' <form style="clear:both;" action="'.donnerUrlCourante().'?installation=form_fichier" method="POST" />'."\n";
$sortie .= ' <input type="hidden" name="bdd_serial" value="'.htmlentities(serialize($bdd)).'" />'."\n";
$sortie .= ' <input type="hidden" name="pref_serial" value="'.htmlentities(serialize($pref)).'" />'."\n";
$sortie .= ' <input type="submit" value="Continuer" />'."\n";
$sortie .= ' </form>'."\n";
}
// +------------------------------------------------------------------------------------------------------+
// | LISTE DES FONCTIONS |
// +------------------------------------------------------------------------------------------------------+
 
// Création du formulaire de configuration de la base de donneés
function creerFormulaire($bdd, $bln_lecture = false) {
$disabled = '';
if ($bln_lecture) {
$disabled = ' disabled="disabled" ';
}
$sortie_form .= ' <form action="'.donnerUrlCourante().'?installation=verif_bdd" method="post">';
$sortie_form .= ' <ul>'."\n";
$sortie_form .= '<li><br /><h2>Configuration de la base de donn&eacute;es</h2></li>'."\n";
$sortie_form .= '<li>La machine sur laquelle se trouve votre serveur MySQL. En g&eacute;n&eacute;ral c\'est "localhost" '.
'(ie, la m&ecirc;me machine que celle o&ugrave; se trouve les pages de Papyrus.).</li>'."\n";
$sortie_form .= '<li>'."\n".
'<label for="mysql_serveur">Nom du serveur MySQL :</label>'.
'<input id="mysql_serveur"'.$disabled.'type="text" size="30" name="bdd[PAP_BDD_SERVEUR]" value="'.$bdd['PAP_BDD_SERVEUR'].'" />'.
'</li>'."\n";
$sortie_form .= '<li>La base de donn&eacute;es MySQL &agrave; utiliser pour Papyrus. Cette base de donn&eacute;es doit d&eacute;j&agrave; '.
'exister avant de pouvoir continuer.</li>'."\n";
$sortie_form .= '<li>'."\n".
'<label for="mysql_database">Base de donn&eacute;es MySQL :</label>'.
'<input id="mysql_database"'.$disabled.'type="text" size="30" name="bdd[PAP_BDD_NOM]" value="'.$bdd['PAP_BDD_NOM'].'" />'.
'</li>'."\n";
$sortie_form .= '<li>Nom et mot de passe de l\'utilisateur MySQL qui sera utilis&eacute; pour se connecter &agrave; votre base de donn&eacute;es.</li>'."\n";
$sortie_form .= '<li>'."\n".
'<label for="mysql_user">Nom de l\'utilisateur MySQL :</label>'.
'<input id="mysql_user"'.$disabled.'type="text" size="30" name="bdd[PAP_BDD_UTILISATEUR]" value="'.$bdd['PAP_BDD_UTILISATEUR'].'" />'.
'</li>'."\n";
$sortie_form .= '<li>'."\n".
'<label for="mysql_password">Mot de passe MySQL :</label>'.
'<input id="mysql_password"'.$disabled.'type="password" size="30" name="bdd[PAP_BDD_MOT_DE_PASSE]" value="'.$bdd['PAP_BDD_MOT_DE_PASSE'].'" />'.
'</li>'."\n";
return $sortie_form;
}
// +------------------------------------------------------------------------------------------------------+
// | PIED du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.28 2006/10/06 15:23:00 florian
* amelioration graphique de l'installateur
*
* Revision 1.27 2006/10/06 10:35:38 alexandre_tb
* correction du lien vers l'inscription.
*
* Revision 1.26 2006/10/05 18:38:36 ddelon
* reglage inititialisation base de donnes : authorisation utilisateur
*
* Revision 1.25 2006/10/05 17:56:37 ddelon
* Gestion hooks creation base de donnee
*
* Revision 1.24 2006/10/05 17:39:35 ddelon
* Gestion hooks creation base de donnee
*
* Revision 1.23 2006/10/05 17:16:21 ddelon
* Gestion hooks creation base de donnee
*
* Revision 1.22 2006/10/05 16:44:02 ddelon
* Gestion hooks creation base de donnee
*
* Revision 1.21 2006/10/05 16:39:01 ddelon
* Gestion hooks creation base de donnee
*
* Revision 1.20 2006/10/05 16:25:58 ddelon
* Gestion hooks creation base de donnee
*
* Revision 1.19 2006/10/05 15:38:22 ddelon
* Gestion hooks creation base de donnee
*
* Revision 1.18 2006/10/05 15:27:53 ddelon
* Gestion hooks creation base de donnee
*
* Revision 1.17 2006/10/05 15:04:00 ddelon
* Gestion hooks creation base de donnee
*
* Revision 1.16 2006/10/05 15:00:56 ddelon
* Gestion hooks creation base de donnee
*
* Revision 1.15 2006/10/05 14:41:12 ddelon
* Gestion hooks creation base de donnee
*
* Revision 1.14 2006/10/05 14:24:58 ddelon
* Gestion hooks creation base de donnee
*
* Revision 1.13 2006/10/05 14:01:21 ddelon
* Gestion hooks creation base de donnee
*
* Revision 1.12 2005/09/23 14:20:23 florian
* nouvel habillage installateur, plus correction de quelques bugs
*
* Revision 1.11 2004/11/03 17:31:13 jpm
* Corrections bogues erreurs noms de variables (suite).
*
* Revision 1.10 2004/11/03 17:26:19 jpm
* Corrections bogues erreurs noms de variables.
*
* Revision 1.9 2004/10/27 11:43:32 jpm
* Correction bogues diff mise à jour / installation.
*
* Revision 1.8 2004/10/26 18:41:12 jpm
* Correction bogue pour la mise à jour.
*
* Revision 1.7 2004/10/25 16:26:35 jpm
* Début gestion des mises à jours.
*
* Revision 1.6 2004/10/25 10:22:48 jpm
* Correction de quelques bogues, ajouts d'explications pour l'utilisateur et modification des styles CSS.
*
* Revision 1.5 2004/10/22 17:56:28 jpm
* Correction erreur auth.
*
* Revision 1.4 2004/10/22 17:23:04 jpm
* Simplification del'installation de Papyrus.
*
* Revision 1.3 2004/10/19 16:47:28 jpm
* Transformation en fonction de l'appel de l'application.
*
* Revision 1.2 2004/10/19 15:59:18 jpm
* Ajout de la gestion des valeurs propre à Papyrus à insérer dans la base de données.
* Ajout des constantes FTP.
*
* Revision 1.1 2004/10/15 18:28:59 jpm
* Début appli installateur de Papyrus.
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/applications/installateur/instal_preference.inc.php
New file
0,0 → 1,273
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (c) 2002, Hendrik Mans <hendrik@mans.de> |
// | Copyright 2002, 2003 David DELON |
// | Copyright 2002 Patrick PAUL |
// | All rights reserved. |
// | Redistribution and use in source and binary forms, with or without |
// | modification, are permitted provided that the following conditions |
// | are met: |
// | 1. Redistributions of source code must retain the above copyright |
// | notice, this list of conditions and the following disclaimer. |
// | 2. Redistributions in binary form must reproduce the above copyright |
// | notice, this list of conditions and the following disclaimer in the |
// | documentation and/or other materials provided with the distribution. |
// | 3. The name of the author may not be used to endorse or promote products |
// | derived from this software without specific prior written permission. |
// | |
// | THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
// | IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
// | OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
// | IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
// | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
// | NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
// | THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: instal_preference.inc.php,v 1.12 2006-10-06 15:23:00 florian Exp $
/**
* Page d'initialisation de l'installation de Papyrus.
*
* Contenu de la page par défaut de l'installation de Papyrus.
*
*@package Installateur
//Auteur original :
*@author Hendrik MANS <hendrik@mans.de>
//Autres auteurs :
*@author David DELON
*@author Patrick PAUL
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.12 $ $Date: 2006-10-06 15:23:00 $
// +------------------------------------------------------------------------------------------------------+
**/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTÊTE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
// Numéro de l'étape d'installation :
$num_etape = 1;
 
// Initialisation du tableau contenant les valeurs de configuration de la base de données
$tableau = array('ADMIN_PRENOM' => '', 'ADMIN_NOM' => '', 'ADMIN_MAIL' => '', 'ADMIN_MDP_01' => '',
'ADMIN_MDP_02' => '', 'ADMIN_I18N' => '', 'PAP_URL' => '', 'PAP_CHEMIN_RACINE' => '', 'PAP_URL_REECRITURE' => '0');
foreach ($tableau as $cle => $val) {
if (!empty($_POST['pref'][$cle])) {
$pref[$cle] = $_POST['pref'][$cle];
} else if (defined($cle)) {
$pref[$cle] = constant($cle);
if ($cle == 'PAP_CHEMIN_RACINE') $pref[$cle] = INSTAL_CHEMIN_ABSOLU;
} else {
if ($cle == 'PAP_URL') {
$pref[$cle] = 'http://'.$_SERVER['SERVER_NAME'].
($_SERVER['SERVER_PORT'] != 80 ? ':'.$_SERVER['SERVER_PORT'] : '').
$_SERVER['REQUEST_URI'];
} else if ($cle == 'PAP_CHEMIN_RACINE') {
$pref[$cle] = INSTAL_CHEMIN_ABSOLU;
} else {
$pref[$cle] = '';
}
}
}
 
// +------------------------------------------------------------------------------------------------------+
// | CORPS du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
// Affichage d'informations...
$sortie .= '<br /><h1>Etape n°'.$num_etape.' sur '.INSTAL_NBRE_ETAPE.'.</h1>'."\n";
$sortie .= '<p>NOTE: Ce programme d\'installation va essayer de modifier les options de configurations dans le '.
'fichier <tt>pap_config.inc.php</tt>, situ&eacute; dans le r&eacute;pertoire <tt>configuration</tt> du réportoire '.
'<tt>papyrus</tt>. Pour que cela fonctionne, veuillez vous assurez que votre serveur a les droits d\'acc&egrave;s '.
'en &eacute;criture pour ce fichier. Si pour une raison quelconque vous ne pouvez pas faire &ccedil;a vous '.
'devrez modifier ce fichier manuellement (ce programme d\'installation vous dira comment).</p><br />'."\n";
 
// Nous vérifions si nous sommes en phase de test du formulaire de config des préférences
if ($_GET['installation'] == 'verif_pref' ) {
$sortie_verif = '';
$sortie_verif .= testerPresenceExtension();
// En mise à jour, nous n'affichons pas les champs pour saisir un administrateur
if (!defined(INSTAL_VERSION_NOUVELLE_NOM)) {
// Nous vérifions que l'utilisateur à bien saisie les infos dans les champs du formulaire
if(empty($_POST['pref']['ADMIN_PRENOM'])) {
$sortie_verif .= '<p class="erreur">Le champ "Prénom" ne doit pas être vide!</p>'."\n";
}
if(empty($_POST['pref']['ADMIN_NOM'])) {
$sortie_verif .= '<p class="erreur">Le champ "Nom" ne doit pas être vide!</p>'."\n";
}
if(empty($_POST['pref']['ADMIN_MAIL'])) {
$sortie_verif .= '<p class="erreur">Le champ "Courriel" ne doit pas être vide!</p>'."\n";
}
if(empty($_POST['pref']['ADMIN_MDP_01'])) {
$sortie_verif .= '<p class="erreur">Le champ "Mot de passe" ne doit pas être vide!</p>'."\n";
}
if($_POST['pref']['ADMIN_MDP_01'] != $_POST['pref']['ADMIN_MDP_02']) {
$sortie_verif .= '<p class="erreur">Le deux mots de passes saisis pour le compte administrateur sont différents!</p>'."\n";
}
}
}
 
// Gestion de l'affichage de sortie
if (!isset($sortie_verif) && empty($sortie_verif)) {
// Premier appel du fichier...
$sortie .= creerFormulaire($pref);
$sortie .= ' </ul>'."\n";
$sortie .= '<input type="submit" value="Passer à l\'étape suivante" />'."\n";
$sortie .= '</form>';
} else if (isset($sortie_verif) && !empty($sortie_verif)) {
// Vérification du fichier avec interuption...
$sortie .= $sortie_verif;
$sortie .= creerFormulaire($pref);
$sortie .= ' </ul>'."\n";
$sortie .= '<input type="submit" value="Tester à nouveau" />'."\n";
$sortie .= ' </form>';
} else if (isset($sortie_verif) && empty($sortie_verif)) {
// Vérification du fichier sans interuption... passage à l'étape suivante
$sortie .= creerFormulaire($pref, true);
$sortie .= ' </ul>'."\n";
$sortie .= ' </form>';
$sortie .= ' <br /><p class="etape_info">La configuration est OK. A l\'&eacute;tape suivante, le programme d\'installation va essayer de configurer '.
'et créer la base de données.</p>'."\n";
$sortie .= ' <form style="clear:both;" action="'.donnerUrlCourante().'?installation=form_bdd" method="post">'."\n";
$sortie .= ' <input type="hidden" name="pref_serial" value="'.htmlentities(serialize($pref)).'" />'."\n";
$sortie .= ' <input type="submit" value="Continuer" />'."\n";
$sortie .= ' </form>'."\n";
}
// +------------------------------------------------------------------------------------------------------+
// | LISTE DES FONCTIONS |
// +------------------------------------------------------------------------------------------------------+
 
// Création du formulaire de configuration de la base de donneés
function creerFormulaire($pref, $bln_lecture = false) {
$disabled = '';
if ($bln_lecture) {
$disabled = ' disabled="disabled" ';
}
$sortie_form = '';
$sortie_form .= ' <form action="'.donnerUrlCourante().'?installation=verif_pref" method="post">'."\n";
$sortie_form .= '<ul>'."\n";
// En mise à jour, nous n'affichons pas les champs pour saisir un administrateur
if (!defined(INSTAL_VERSION_NOUVELLE_NOM)) {
$sortie_form .= '<li><h2>Configuration d\'un administrateur de Papyrus</h2></li>'."\n";
$sortie_form .= '<li>Tous les champs ci-dessous sont obligatoires.</li>'."\n";
$sortie_form .= '<li>'."\n".
'<label for="admin_prenom">Prénom :</label>'.
'<input id="admin_prenom"'.$disabled.'type="text" size="30" name="pref[ADMIN_PRENOM]" value="'.$pref['ADMIN_PRENOM'].'" />'.
'</li>'."\n";
$sortie_form .= '<li>'."\n".
'<label for="admin_nom">Nom :</label>'.
'<input id="admin_nom"'.$disabled.'type="text" size="30" name="pref[ADMIN_NOM]" value="'.$pref['ADMIN_NOM'].'" />'.
'</li>'."\n";
$sortie_form .= '<li>'."\n".
'<label for="admin_mail">Courriel :</label>'.
'<input id="admin_mail"'.$disabled.'type="text" size="30" name="pref[ADMIN_MAIL]" value="'.$pref['ADMIN_MAIL'].'" />'.
'</li>'."\n";
$sortie_form .= '<li>'."\n".
'<label for="admin_mdp_01">Mot de passe :</label>'.
'<input id="admin_mdp_01"'.$disabled.'type="password" size="10" name="pref[ADMIN_MDP_01]" value="'.$pref['ADMIN_MDP_01'].'" />'.
'</li>'."\n";
$sortie_form .= '<li>'."\n".
'<label for="admin_mdp_02">Taper à nouveau votre mot de passe :</label>'.
'<input id="admin_mdp_02"'.$disabled.'type="password" size="10" name="pref[ADMIN_MDP_02]" value="'.$pref['ADMIN_MDP_02'].'" />'.
'</li>'."\n";
$sortie_form .= '<li>'."\n".
'<label for="admin_i18n">Langue :</label>'.
'<select id="admin_i18n"'.$disabled.'name="pref[ADMIN_I18N]">'.
'<option value="fr-FR" selected="selected">français</option>'.
'</select>'.
'</li>'."\n";
}
$sortie_form .= '<li>&nbsp;</li>'."\n".'<li><h2>Configuration de l\'URL</h2></li>'."\n";
$sortie_form .= '<li>L\'URL courante dans la barre d\'adresse de votre navigateur devrait correspondre à la valeur '.
'présente dans le champ ci-dessous. Si ce n\'est pas le cas, veuillez corriger la valeur ci-dessous.'."\n";
$sortie_form .= '<li>'."\n".
'<label for="url_courante">URL courante :</label>'.
'<input id="url_courante"'.$disabled.'type="text" size="60" name="pref[PAP_URL]" value="'.$pref['PAP_URL'].'" />'.
'</li>'."\n";
$sortie_form .= '<li>Le mode "redirection automatique" doit &ecirc;tre s&eacute;lectionn&eacute; uniquement si '.
'vous utilisez Papyrus avec la redirection d\'URL (si vous ne savez pas ce qu\'est la redirection d\'URL '.
'n\'activez pas cette option).</li>'."\n";
$sortie_form .= '<li>'."\n".
'<label for="rewrite_mode">Mode "redirection" :</label>'.
'<input id="rewrite_mode"'.$disabled.'type="checkbox" name="pref[PAP_URL_REECRITURE]" value="1" />'.
'Activation'.'</li>'."\n";
$sortie_form .= '<li>Le champ suivant devrait contenir le chemin d\'accès absolu vers le fichier <tt>papyrus.php</tt> '.
'sur le serveur où sont déposés les fichiers de Papyrus.</li>'."\n";
$sortie_form .= '<li>'."\n".
'<label for="web_racine">Dossier de <tt>papyrus.php</tt> :</label>'.
'<input id="web_racine"'.$disabled.'type="text" size="60" name="pref[PAP_CHEMIN_RACINE]" value="'.$pref['PAP_CHEMIN_RACINE'].'" />'.
'</li>'."\n";
return $sortie_form;
}
 
// Vérification des variables d'environnement de PHP.
function testerPresenceExtension() {
$message = '';
$phrase_deb = '<p class="erreur">Pour fonctionner Papyrus à besoin que l\'extension PHP : ';
$phrase_fin = 'soit installée sur le serveur.<br /> Sans cette extension vous ne pourrez pas installer Papyrus !</p>';
// Nous avons besoin de quelques extensions
if (! extension_loaded('mysql')) {
$message .= $phrase_deb.'MYSQL'.$phrase_fin;
}
if (! extension_loaded('ftp')) {
$message .= $phrase_deb.'FTP'.$phrase_fin;
}
if (! extension_loaded('gd')) {
$message .= $phrase_deb.'GD'.$phrase_fin;
}
return $message;
}
// +------------------------------------------------------------------------------------------------------+
// | PIED du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.11 2006/10/05 15:14:18 alexandre_tb
* Mise en place du chemin par défaut
*
* Revision 1.10 2005/09/23 14:20:23 florian
* nouvel habillage installateur, plus correction de quelques bugs
*
* Revision 1.9 2005/04/12 16:09:45 jpm
* Amélioration de la gestion de la constante de redirection des urls et de la gestion des constantes de type entier et booléen.
*
* Revision 1.8 2004/10/27 11:43:32 jpm
* Correction bogues diff mise à jour / installation.
*
* Revision 1.7 2004/10/25 10:22:48 jpm
* Correction de quelques bogues, ajouts d'explications pour l'utilisateur et modification des styles CSS.
*
* Revision 1.6 2004/10/22 17:23:04 jpm
* Simplification del'installation de Papyrus.
*
* Revision 1.5 2004/10/22 09:07:18 jpm
* Début simplification installateur.
*
* Revision 1.4 2004/10/19 17:01:12 jpm
* Correction bogues.
*
* Revision 1.3 2004/10/19 16:47:28 jpm
* Transformation en fonction de l'appel de l'application.
*
* Revision 1.2 2004/10/19 15:59:18 jpm
* Ajout de la gestion des valeurs propre à Papyrus à insérer dans la base de données.
* Ajout des constantes FTP.
*
* Revision 1.1 2004/10/15 18:28:59 jpm
* Début appli installateur de Papyrus.
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/applications/admin_auth/configuration/adau_configuration.inc.php
New file
0,0 → 1,81
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library 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 |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: adau_configuration.inc.php,v 1.1 2004-12-06 11:31:42 alex Exp $
/**
* Fichier de configuration général de l'application Administrateur de authentification.
*
* Permet de définir certains paramètres valables pour toutes l'application
* Administrateur de Menus.
*
*@package Admin_auth
*@subpackage Configuration
//Auteur original :
*@author Alexandre GRANIER <alexandre@tela-botanica.org>
//Autres auteurs :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.1 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTETE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
// +------------------------------------------------------------------------------------------------------+
// | CORPS du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
/** Constante stockant la valeur de la langue par défaut pour l'appli ADME.*/
define('ADAU_I18N_DEFAUT', GEN_I18N_ID_DEFAUT);
 
// Chemin des fichiers à inclure.
/** Chemin vers la bibliothèque PEAR.*/
define('ADAU_CHEMIN_BIBLIOTHEQUE_PEAR', '');
/** Chemin vers la bibliothèque API.*/
define('ADAU_CHEMIN_BIBLIOTHEQUE_API', GEN_CHEMIN_API);
/** Chemin vers la bibliothèque de Papyrus.*/
define('ADAU_CHEMIN_BIBLIOTHEQUE_GEN', GEN_CHEMIN_BIBLIO);
 
// Chemin vers les dossiers de l'application
/** Chemin vers l'application Admin Auth de Papyrus.*/
define('ADAU_CHEMIN_APPLICATION', GEN_CHEMIN_APPLICATION.'admin_auth/');
/** Chemin vers les images de l'application Admin Auth de Papyrus.*/
define('ADAU_CHEMIN_IMAGE_INTERFACE', ADAU_CHEMIN_APPLICATION.'presentations/images/interface/');
/** Chemin vers la bibliothèque de l'application Admin Auth de Papyrus.*/
define('ADAU_CHEMIN_BIBLIOTHEQUE', ADAU_CHEMIN_APPLICATION.'bibliotheque/');
/** Chemin vers les classes de l'application Admin Auth de Papyrus.*/
define('ADAU_CHEMIN_CLASSES', ADAU_CHEMIN_APPLICATION.'classes/');
/** Chemin vers les fichiers de traduction de l'application Admin Auth de Papyrus.*/
define('ADAU_CHEMIN_LANGUE', ADAU_CHEMIN_APPLICATION.'langues/');
/** Chemin vers les styles de l'application Admin Auth de Papyrus.*/
define('ADAU_CHEMIN_STYLE', ADAU_CHEMIN_APPLICATION.'presentations/styles/');
 
 
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/applications/admin_auth/bibliotheque/HTML_formulaireAuth.class.php
New file
0,0 → 1,182
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library 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 |
// | General Public License for more details. |
// | |
// | You should have received a copy of the GNU General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: HTML_formulaireAuth.class.php,v 1.4 2006-04-28 12:41:49 florian Exp $
/**
* Application projet
*
* La classe HTML_formulaireAuth
*
*@package projet
//Auteur original :
*@author Alexandre Granier <alexandre@tela-botanica.org>
//Autres auteurs :
*@author Aucun
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.4 $
// +------------------------------------------------------------------------------------------------------+
*/
 
 
// +------------------------------------------------------------------------------------------------------+
// | ENTETE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
/** Inclure le fichier de langue pour utiliser cette classe de façon autonome. */
 
require_once PAP_CHEMIN_API_PEAR.'HTML/QuickForm.php' ;
require_once PAP_CHEMIN_API_PEAR.'HTML/QuickForm/checkbox.php' ;
require_once PAP_CHEMIN_API_PEAR.'HTML/QuickForm/select.php' ;
 
// +------------------------------------------------------------------------------------------------------+
// | LISTE des constantes |
// +------------------------------------------------------------------------------------------------------+
 
 
/**
* class HTML_formulaireProjet
* Cette classe représente un formulaire pour saisir un projet ou le modifier.
*/
class HTML_formulaireAuth extends HTML_QuickForm
{
/**
* Constructeur
*
* @param string formName Le nom du formulaire.
* @param string method Soit get soit post, voir le protocole HTTP
* @param string action L'action du formulaire.
* @param string target La cible du formulaire.
* @param Array attributes Des attributs supplémentaires pour la balise <form>
* @param bool trackSubmit Pour repérer si la formulaire a été soumis.
* @return void
* @access public
*/
function HTML_formulaireAuth($formName = '', $method = 'post', $action = '', $target = '_self', $attributes = '', $trackSubmit = false)
{
HTML_QuickForm::HTML_QuickForm($formName, $method, $action, $target, $attributes, $trackSubmit);
$squelette =& $this->defaultRenderer();
$squelette->setFormTemplate("\n".'<form{attributes}>'."\n".'{content}'."\n".'</form>'."\n");
$squelette->setElementTemplate( '<li>'."\n".
'{label}'."\n".
'{element}'."\n".
'<!-- BEGIN required --><span class="symbole_obligatoire">'.ADAU_SYMBOLE_CHP_OBLIGATOIRE.'</span><!-- END required -->'."\n".
'<!-- BEGIN error --><span class="erreur">{error}</span><!-- END error -->'."\n".
'</li>'."\n");
$squelette->setRequiredNoteTemplate("\n".'<p><span class="symbole_obligatoire">'.ADAU_SYMBOLE_CHP_OBLIGATOIRE.'</span> {requiredNote}</p>'."\n");
} // end of member function HTML_formulaireProjet
 
/**
* Renvoie le code HTML du formulaire.
*
* @return string
* @access public
*/
function toHTML()
{
$res = HTML_QuickForm::toHTML();
return $res;
} // end of member function toHTML
 
/**
* Ajoute les champs nécessaire au formulaire.
*
* @return void
* @access public
*/
function construitFormulaire($url_retour)
{
$tab_index = 1000;
$size = 60;
$cols = 50;
$rows = 6;
$form_debut = '<fieldset>'."\n".'<legend>'.ADAU_NOM_FORM.'</legend>'."\n".'<ul>'."\n";
$this->addElement('html', $form_debut);
$id = 'nom_auth';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => $size);
$label = '<label for="'.$id.'">'.ADAU_NOM_AUTH.'</label>';
$this->addElement('text', $id, $label, $aso_attributs);
$this->addRule('nom_auth', ADAU_NOM_AUTH_ALERTE, 'required', '', 'client');
$id = 'abreviation';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => $size);
$label = '<label for="'.$id.'">'.ADAU_ABREVIATION.'</label>';
$this->addElement('text', $id, $label, $aso_attributs);
$this->addRule('abreviation', ADAU_ABREVIATION_ALERTE, 'required', '', 'client');
$id = 'dsn';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => $size);
$label = '<label for="'.$id.'">'.ADAU_DSN.'</label>';
$this->addElement('text', $id, $label, $aso_attributs);
$this->addRule('dsn', ADAU_DSN_ALERTE, 'required', '', 'client');
$id = 'nom_table';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => $size);
$label = '<label for="'.$id.'">'.ADAU_NOM_TABLE.'</label>';
$this->addElement('text', $id, $label, $aso_attributs);
$this->addRule('nom_table', ADAU_NOM_TABLE_ALERTE, 'required', '', 'client');
$id = 'champs_login';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => $size);
$label = '<label for="'.$id.'">'.ADAU_CHAMPS_LOGIN.'</label>';
$this->addElement('text', $id, $label, $aso_attributs);
$this->addRule('champs_login', ADAU_CHAMPS_LOGIN_ALERTE, 'required', '', 'client');
$id = 'champs_passe';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => $size);
$label = '<label for="'.$id.'">'.ADAU_CHAMPS_PASSE.'</label>';
$this->addElement('text', $id, $label, $aso_attributs);
$this->addRule('champs_passe', ADAU_CHAMPS_PASSE_ALERTE, 'required', '', 'client');
$id = 'cryptage';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => $size);
$label = '<label for="'.$id.'">'.ADAU_CRYPTAGE.'</label>';
$this->addElement('text', $id, $label, $aso_attributs);
$this->addRule('cryptage', ADAU_CRYPTAGE_ALERTE, 'required', '', 'client');
$id = 'parametres';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'rows' => $rows, 'cols' => $cols);
$label = '<label for="'.$id.'">'.ADAU_PARAMETRE.'</label>';
$this->addElement('textarea', $id, $label, $aso_attributs);
$form_fin = '</ul>'."\n".'</fieldset>'."\n";
$this->addElement('html', $form_fin);
// Gestion des boutons
$liste_bouton_debut = '<ul class="liste_bouton">'."\n";
$this->addElement('html', $liste_bouton_debut);
$this->addElement('submit', 'valider', ADAU_VALIDER);
$bouton_annuler = '<li><a class="bouton" href="'.str_replace ('&amp;', '&', $url_retour->getURL()).'">'.ADAU_ANNULER.'</a></li>'."\n";
$this->addElement('html', $bouton_annuler);
$liste_bouton_fin = '</ul>'."\n";
$this->addElement('html', $liste_bouton_fin);
$this->setRequiredNote(ADAU_CHAMPS_REQUIS);
} // end of member function _construitFormulaire
 
} // end of HTML_formulaireProjet
?>
/branches/v1.0-menes/papyrus/applications/admin_auth/bibliotheque/adau_auth.fonct.php
New file
0,0 → 1,210
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This file is part of Papyrus. |
// | |
// | Foobar is free software; you can redistribute it and/or modify |
// | it under the terms of the GNU General Public License as published by |
// | the Free Software Foundation; either version 2 of the License, or |
// | (at your option) any later version. |
// | |
// | Foobar 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 General Public License for more details. |
// | |
// | You should have received a copy of the GNU General Public License |
// | along with Foobar; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: adau_auth.fonct.php,v 1.2 2005-04-14 13:54:51 jpm Exp $
/**
* Contient les fonctions de l'appli admin_auth
*
*
*
*
*@package Admin_auth
*@subpackage Fonctions
//Auteur original :
*@author Alexandre Granier <alexandre@tela-botanica.org>
//Autres auteurs :
*@author Aucun
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.2 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | LISTE de FONCTIONS |
// +------------------------------------------------------------------------------------------------------+
 
/**
*
*
* @return
*/
function adau_supprimer_authentification($id_auth, &$db)
{
// Recherche l'identifiant de gen_site_auth_bdd à partir de gen_site_auth
$requete = 'SELECT gsa_ce_auth_bdd FROM gen_site_auth WHERE gsa_id_auth = '.$GLOBALS['id_auth'];
$resultat = $db->query ($requete) ;
$ligne = $resultat->fetchRow (DB_FETCHMODE_OBJECT) ;
$id_auth_bdd = $ligne->gsa_ce_auth_bdd ;
$requete = 'DELETE FROM gen_site_auth WHERE gsa_id_auth = '.$id_auth;
$resultat = $db->query($requete);
$requete = 'DELETE FROM gen_site_auth_bdd WHERE gsab_id_auth_bdd = '.$id_auth_bdd;
$resultat = $db->query($requete);
}
 
/**
*
*
* @return
*/
function adau_valeurs_par_defaut($id_auth, &$db)
{
// Requete sur gen_site_auth
$requete = 'SELECT * FROM gen_site_auth WHERE gsa_id_auth = '.$id_auth;
$resultat = $db->query($requete);
if (DB::isError($resultat)) {
trigger_error('Échec de la requete : '.$requete.'<br />'.$resultat->getMessage(), E_USER_WARNING);
return ;
}
$tableau_retour = array();
$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
$tableau_retour['nom_auth'] = $ligne->gsa_nom;
$tableau_retour['abreviation'] = $ligne->gsa_abreviation;
$tableau_retour['id_auth_bdd'] = $ligne->gsa_ce_auth_bdd;
$tableau_retour['id_auth'] = $ligne->gsa_id_auth;
unset($requete, $resultat);
// Requete sur gen_site_auth_bdd
$requete = 'SELECT * FROM gen_site_auth_bdd WHERE gsab_id_auth_bdd = '.$ligne->gsa_ce_auth_bdd;
unset($ligne);
$resultat = $db->query($requete);
if (DB::isError($resultat)) {
trigger_error('Échec de la requete : '.$requete.'<br />'.$resultat->getMessage(), E_USER_WARNING);
return ;
}
$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
$tableau_retour['dsn'] = $ligne->gsab_dsn;
$tableau_retour['nom_table'] = $ligne->gsab_nom_table;
$tableau_retour['champs_login'] = $ligne->gsab_nom_champ_login;
$tableau_retour['champs_passe'] = $ligne->gsab_nom_champ_mdp;
$tableau_retour['cryptage'] = $ligne->gsab_cryptage_mdp;
$tableau_retour['parametres'] = $ligne->gsab_parametres;
return $tableau_retour;
}
 
/**
*
*
* @return
*/
function insertion ($valeur, &$db)
{
$id_auth_bdd = SQL_obtenirNouveauId($db, 'gen_site_auth_bdd', 'gsab_id_auth_bdd');
$requete = 'INSERT INTO gen_site_auth SET gsa_id_auth = '
.SQL_obtenirNouveauId($db, 'gen_site_auth', 'gsa_id_auth').', '
.requete_site_auth($valeur)
.', gsa_ce_auth_bdd = '.$id_auth_bdd;
$resultat = $db->query($requete);
if (DB::isError($resultat)) {
trigger_error('Échec de la requete : '.$requete.'<br />'.$resultat->getMessage(), E_USER_WARNING);
return ;
}
$requete = 'INSERT INTO gen_site_auth_bdd SET gsab_id_auth_bdd = '.$id_auth_bdd.', '.requete_site_auth_bdd($valeur);
$resultat = $db->query($requete);
if (DB::isError($resultat)) {
trigger_error('Échec de la requete : '.$requete.'<br />'.$resultat->getMessage(), E_USER_WARNING);
return ;
}
}
 
/**
*
*
* @return
*/
function mise_a_jour($valeur, &$db)
{
$requete = 'UPDATE gen_site_auth SET '.requete_site_auth($valeur).' '.
'WHERE gsa_id_auth = '.$GLOBALS['id_auth'];
$resultat = $db->query($requete);
if (DB::isError($resultat)) {
trigger_error('Échec de la requete : '.$requete.'<br />'.$resultat->getMessage(), E_USER_WARNING);
return ;
}
unset($requete);
// Recherche l'identifiant de gen_site_auth_bdd à partir de gen_site_auth
$requete = 'SELECT gsa_ce_auth_bdd FROM gen_site_auth WHERE gsa_id_auth = '.$GLOBALS['id_auth'];
$resultat = $db->query($requete);
$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
$id_auth_bdd = $ligne->gsa_ce_auth_bdd;
$requete = 'UPDATE gen_site_auth_bdd SET '
.requete_site_auth_bdd($valeur)
.' WHERE gsab_id_auth_bdd = '.$id_auth_bdd;
$resultat = $db->query($requete);
if (DB::isError($resultat)) {
trigger_error('Échec de la requete : '.$requete.'<br />'.$resultat->getMessage(), E_USER_WARNING);
return ;
}
}
 
/**
*
*
* @return string un morceau de code SQL
*/
function requete_site_auth(&$valeur)
{
return 'gsa_nom="'.$valeur['nom_auth'].'", '
.'gsa_ce_type_auth=1, '
.'gsa_abreviation="'.$valeur['abreviation'].'"' ;
}
 
/**
*
*
* @return
*/
function requete_site_auth_bdd (&$valeur)
{
return 'gsab_dsn="'.$valeur['dsn'].'", '
.'gsab_nom_table="'.$valeur['nom_table'].'", '
.'gsab_nom_champ_login="'.$valeur['champs_login'].'", '
.'gsab_nom_champ_mdp="'.$valeur['champs_passe'].'", '
.'gsab_parametres="'.$valeur['parametres'].'", '
.'gsab_cryptage_mdp="'.$valeur['cryptage'].'"';
}
// +------------------------------------------------------------------------------------------------------+
// | PIED du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.1 2005/03/09 10:49:52 jpm
* Changement d'un nom de fichier.
*
* Revision 1.2 2004/12/06 12:43:21 alex
* ajout du champs paramètre dans ls authentification
*
* Revision 1.1 2004/12/06 11:31:54 alex
* version initiale
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/applications/admin_auth/langues/adau_langue_fr.inc.php
New file
0,0 → 1,86
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This file is part of Papyrus. |
// | |
// | Foobar is free software; you can redistribute it and/or modify |
// | it under the terms of the GNU General Public License as published by |
// | the Free Software Foundation; either version 2 of the License, or |
// | (at your option) any later version. |
// | |
// | Foobar 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 General Public License for more details. |
// | |
// | You should have received a copy of the GNU General Public License |
// | along with Foobar; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: adau_langue_fr.inc.php,v 1.4 2006-10-06 10:40:51 florian Exp $
/**
* Gestion des langues de l'application ADME
*
* Contient les constantes pour la langue française de l'application ADME.
*
*@package Admin_auth
*@subpackage Langues
//Auteur original :
*@author Alexandre Granier <alexandre@tela-botanica.org>
//Autres auteurs :
*@author Aucun
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.4 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | LISTE des CONSTANTES |
// +------------------------------------------------------------------------------------------------------+
define('ADAU_NOM_AUTH', 'Nom authentification');
define('ADAU_NOM_TABLE', 'Nom de la table annuaire');
define('ADAU_MODIFIER', 'Modifier');
define('ADAU_SUPPRIMER', 'Supprimer');
define('ADAU_SUPPRIMER_MESSAGE', 'Êtes vous sûr de vouloir supprimer cette identification ?');
define('ADAU_AJOUTER', 'Ajouter une authentification base de donnée');
define('ADAU_IDENTIFIEZ_VOUS','Veuillez vous identifier pour acc&egrave;der &agrave; ce menu.');
define('ADAU_NOM_FORM', 'Édition des informations d\'une identification');
define('ADAU_NOM_AUTH_ALERTE', 'Vous devez spécifier un nom');
define('ADAU_CHAMPS_REQUIS', 'Indique les champs requis');
define('ADAU_ABREVIATION', 'Abréviation');
define('ADAU_ABREVIATION_ALERTE', 'Vous devez indiquer une abréviation');
define('ADAU_DSN', 'Source des donnée (dsn)');
define('ADAU_DSN_ALERTE', 'Vous devez indiquer une source des données');
define('ADAU_NOM_TABLE_ALERTE', 'Vous devez indiquer le nom de la table annuaire');
define('ADAU_CHAMPS_LOGIN', 'Nom du champs login');
define('ADAU_CHAMPS_LOGIN_ALERTE', 'Vous devez indiquer le nom du champs login');
define('ADAU_CHAMPS_PASSE', 'Nom du champs mot de passe');
define('ADAU_CHAMPS_PASSE_ALERTE', 'Vous devez indiquer le nom du champs mot de passe');
define('ADAU_CRYPTAGE', 'Fonction de cryptage');
define('ADAU_CRYPTAGE_ALERTE', 'Vous devez indiquer un algorithme de cryptage');
define('ADAU_PARAMETRE', 'Paramètres');
define('ADAU_ANNULER', 'Annuler');
define('ADAU_VALIDER', 'Valider');
define('ADAU_SYMBOLE_CHP_OBLIGATOIRE', '*');
 
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.3 2005/04/14 13:54:51 jpm
* Amélioration de l'interface et mise en conformité.
*
* Revision 1.2 2004/12/13 18:07:57 alex
* ajout de labels
*
* Revision 1.1 2004/12/06 11:31:37 alex
* version initiale
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/applications/admin_auth/admin_auth.php
New file
0,0 → 1,200
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library 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 |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: admin_auth.php,v 1.6 2006-10-06 10:40:51 florian Exp $
/**
* Application gérant les authentifications de Papyrus
*
* Cette application permet de gérer les authentifications de papyrus
* elle permet de spécifier pour un monde quel annuaire utiliser
* et de gérer des authentifications de spip et ou wikini
*
*@package Admin_auth
//Auteur original :
*@author Alexandre GRANIER <alexandre@tela-botanica.org>
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.6 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTÊTE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
/** Inclusion du fichier de configuration de cette application.*/
require_once GEN_CHEMIN_PAP.'applications/admin_auth/configuration/adau_configuration.inc.php';
 
//Utilisation de la bibliothèque PEAR NET_URL
/** Inclusion de la bibliothèque PEAR de conception de formulaire.*/
require_once ADAU_CHEMIN_BIBLIOTHEQUE_PEAR.'HTML/QuickForm.php';
/** Inclusion de la bibliothèque PEAR de conception de formulaire : select.*/
require_once ADAU_CHEMIN_BIBLIOTHEQUE_PEAR.'HTML/QuickForm/select.php';
 
/** Inclusion de l'API de fonctions gérant les erreurs sql.*/
require_once ADAU_CHEMIN_BIBLIOTHEQUE_API.'debogage/BOG_sql.fonct.php';
/** Inclusion des fonctions de manipulation du sql.
* Permet la récupération d'un nouvel identifiant d'une table.*/
require_once ADAU_CHEMIN_BIBLIOTHEQUE_API.'sql/SQL_manipulation.fonct.php';
/** Inclusion de la bibliothèque premettant de créer des Tableau HTML fragmentés.*/
require_once ADAU_CHEMIN_BIBLIOTHEQUE_API.'html/HTML_TableFragmenteur.php' ;
 
/** Inclusion de la bibliothèque de fonctions concernant les tables "gen_site..." de Papyrus.*/
require_once ADAU_CHEMIN_BIBLIOTHEQUE_GEN.'pap_site.fonct.php';
/** Inclusion de la bibliothèque de fonctions concernant les tables "gen_menu..." de Papyrus.*/
require_once ADAU_CHEMIN_BIBLIOTHEQUE_GEN.'pap_menu.fonct.php';
/** Inclusion de la bibliothèque de fonctions concernant les tables "gen_applications..." de Papyrus.*/
require_once ADAU_CHEMIN_BIBLIOTHEQUE_GEN.'pap_application.fonct.php';
 
/** Inclusion de la bibliothèque de fonctions concernant l'affichage commun.*/
require_once ADAU_CHEMIN_BIBLIOTHEQUE.'adau_auth.fonct.php';
/** Inclusion de la classe créer les formulaire des l'appli.*/
require_once ADAU_CHEMIN_BIBLIOTHEQUE.'HTML_formulaireAuth.class.php' ;
 
 
// Inclusion des fichiers de traduction de l'appli ADME dePapyrus
if (file_exists(ADAU_CHEMIN_LANGUE.'adau_langue_'.$GLOBALS['_GEN_commun']['i18n'].'.inc.php')) {
/** Inclusion du fichier de traduction suite à la transaction avec le navigateur.*/
require_once ADAU_CHEMIN_LANGUE.'adau_langue_'.$GLOBALS['_GEN_commun']['i18n'].'.inc.php';
} else {
/** Inclusion du fichier de traduction par défaut.*/
require_once ADAU_CHEMIN_LANGUE.'adau_langue_'.ADAU_I18N_DEFAUT.'.inc.php';
}
 
// Stockage des styles de l'application
GEN_stockerStyleExterne('adau_standard', ADAU_CHEMIN_STYLE.'adau_standard.css');
 
// +------------------------------------------------------------------------------------------------------+
// | CORPS du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
function afficherContenuCorps()
{
$db =& $GLOBALS['_GEN_commun']['pear_db'] ;
$url =& $GLOBALS['_GEN_commun']['url'] ;
$auth =& $GLOBALS['_GEN_commun']['pear_auth'] ;
isset ($GLOBALS['action']) ? '' : $GLOBALS['action'] = '' ; // On déclare action si elle n'existe pas
$res='';
if (!$auth->getAuth()) {
$res .= '<p class="zone_alert">'.ADAU_IDENTIFIEZ_VOUS.'</p>'."\n" ;
$res .= '<form id="form_connexion" style="clear:both;" class="form_identification" action="' ;
$res .= $url->getURL();
$res .= '" method="post">
<fieldset>
<legend>Identifiez vous</legend>
<label for="username">Courriel : </label>
<input type="text" id="username" name="username" maxlength="80" tabindex="1" value="courriel" />
<label for="password">Mot de passe : </label>
<input type="password" id="password" name="password" maxlength="80" tabindex="2" value="mot de passe" />
<input type="submit" id="connexion" name="connexion" tabindex="3" value="ok" />
</fieldset>
</form>';
return $res ;
} else {
// Le lien pour une nouvelle entrée
$res = '<a href="'.$url->getURL().'&amp;action=nouveau">'.ADAU_AJOUTER.'</a>'."\n".'<br />';
// traitement de la suppression
if (isset ($GLOBALS['action']) && $GLOBALS['action'] == 'supprimer') adau_supprimer_authentification($GLOBALS['id_auth'], $db);
// Traitement de l'ajout
if (isset ($GLOBALS['action']) || isset ($GLOBALS['id_auth'])) {
$formulaire = new HTML_formulaireAuth('formulaire_auth', '', str_replace ('&amp;', '&', $url->getURL()));
$formulaire->construitFormulaire($url);
// On ajoute un champs caché avec action=nouveau_v
if ($GLOBALS['action'] == 'nouveau') {
$formulaire->addElement ('hidden', 'action', 'nouveau_v');
return $formulaire->toHTML();
}
if (isset ($GLOBALS['id_auth']) && $GLOBALS['action'] != 'modifier_v' && $GLOBALS['action'] != 'supprimer') {
$formulaire->addElement ('hidden', 'action', 'modifier_v');
$formulaire->addElement ('hidden', 'id_auth', $GLOBALS['id_auth']);
$formulaire->setDefaults(adau_valeurs_par_defaut($GLOBALS['id_auth'], $db));
return $formulaire->toHTML();
}
if ($GLOBALS['action'] == 'modifier_v') {
if ($formulaire->validate()) {
mise_a_jour ($formulaire->getSubmitValues(), $db);
}
}
if ($GLOBALS['action'] == 'nouveau_v') {
if ($formulaire->validate()) {
insertion ($formulaire->getSubmitValues(), $db);
}
}
}
// Comportement par défaut
// requete sur la table gen_site_auth
$requete = 'SELECT gsa_ce_auth_bdd, gsa_nom, gsab_nom_table '.
'FROM gen_site_auth, gen_site_auth_bdd '.
'WHERE gsa_id_auth <> 0 '.
'AND gsa_ce_auth_bdd = gsab_id_auth_bdd';
$resultat = $db->query($requete);
if (DB::isError($resultat)) {
trigger_error('Échec de la requete : '.$requete.'<br />'.$resultat->getMessage(), E_USER_WARNING);
return ;
}
$liste = new HTML_TableFragmenteur() ;
$liste->construireEntete(array (ADAU_NOM_AUTH, ADAU_NOM_TABLE, ADAU_MODIFIER, ADAU_SUPPRIMER));
$tableau_auth = array();
while ($ligne = $resultat->fetchRow()) {
$url->addQueryString('id_auth', $ligne[0]);
array_push ($tableau_auth, array ('<a href="'.$url->getURL().'">'.$ligne[1].'</a>'."\n", // Première colonne, le nom de l'authentification
$ligne[2], // deuxième colonne, le nom de la table d'annuaire
'<a href="'.$url->getURL().'">'.ADAU_MODIFIER.'</a>'."\n", // Colonne modifier
'<a href="'.$url->getURL().'&amp;action=supprimer" onclick="javascript:return confirm(\''.ADAU_SUPPRIMER_MESSAGE.'\');">'.ADAU_SUPPRIMER.'</a>'."\n"
));
$url->removeQueryString('id_auth');
}
$liste->construireListe($tableau_auth);
$res .= $liste->toHTML();
return $res;
}
}// Fin de la fonction afficherContenuCorps()
 
// +------------------------------------------------------------------------------------------------------+
// | PIED du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.5 2006/09/21 15:22:04 jp_milcent
* Nettoyage dans l'url de la querystring id_auth.
*
* Revision 1.4 2005/04/14 13:54:51 jpm
* Amélioration de l'interface et mise en conformité.
*
* Revision 1.3 2005/03/09 10:50:08 jpm
* Changement d'un nom de fichier.
*
* Revision 1.2 2005/02/28 10:32:37 jpm
* Changement de nom de dossier.
*
* Revision 1.1 2004/12/06 11:31:59 alex
* version initiale
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/applications/plan/configuration/plan_config.inc.php
New file
0,0 → 1,76
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2005 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This file is part of Papyrus. |
// | |
// | Foobar is free software; you can redistribute it and/or modify |
// | it under the terms of the GNU General Public License as published by |
// | the Free Software Foundation; either version 2 of the License, or |
// | (at your option) any later version. |
// | |
// | Foobar 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 General Public License for more details. |
// | |
// | You should have received a copy of the GNU General Public License |
// | along with Foobar; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: plan_config.inc.php,v 1.2 2006-03-02 10:49:49 ddelon Exp $
/**
* Configuration de l'applette Identification.
*
* Fichier de configuration de l'applette selection de site.
*
*@package Applette
*@subpackage Selecteur
//Auteur original :
*@author David Delon <david.delon@clapas.net>
//Autres auteurs :
*@author Aucun
*@copyright Tela-Botanica 2000-2005
*@version $Revision: 1.2 $ $Date: 2006-03-02 10:49:49 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTETE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
// +------------------------------------------------------------------------------------------------------+
// | CORPS du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
 
/** Constante stockant la valeur de la langue par défaut pour l'appli ADME.*/
define('PLAN_I18N_DEFAUT', GEN_I18N_ID_DEFAUT);
 
// Chemin vers les dossiers de l'application
/** Chemin vers l'application Plan de Papyrus.*/
define('PLAN_CHEMIN_APPLICATION', GEN_CHEMIN_APPLICATION.'plan/');
/** Chemin vers les fichiers de traduction de l'application Admin Auth de Papyrus.*/
define('PLAN_CHEMIN_LANGUE', PLAN_CHEMIN_APPLICATION.'langues/');
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.1.2.1 2006/02/28 14:02:09 ddelon
* Finition multilinguisme
*
* Revision 1.1.2.1 2005/12/07 19:46:15 ddelon
* Merge + navi sites
*
* Revision 1.1 2005/03/15 14:18:49 jpm
* Ajout d'un fichier de config.
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/applications/plan/langues/plan_langue_en.inc.php
New file
0,0 → 1,65
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This file is part of Papyrus. |
// | |
// | Foobar is free software; you can redistribute it and/or modify |
// | it under the terms of the GNU General Public License as published by |
// | the Free Software Foundation; either version 2 of the License, or |
// | (at your option) any later version. |
// | |
// | Foobar 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 General Public License for more details. |
// | |
// | You should have received a copy of the GNU General Public License |
// | along with Foobar; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: plan_langue_en.inc.php,v 1.2 2006-03-02 10:49:49 ddelon Exp $
/**
* Gestion des langues de l'application PLAN
*
* Contient les constantes pour la langue française de l'application PLAN
*
*@package Plan
*@subpackage Langues
//Auteur original :
*@author David Delon<dd@clapas.net>
//Autres auteurs :
*@author Aucun
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.2 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | LISTE des CONSTANTES |
// +------------------------------------------------------------------------------------------------------+
define('PLAN_PLAN_DU_SITE', 'Site map');
define('PLAN_PLAN_DES_SITES', 'Sites map');
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.1.2.1 2006/02/28 14:02:10 ddelon
* Finition multilinguisme
*
* Revision 1.3 2005/04/14 13:54:51 jpm
* Amélioration de l'interface et mise en conformité.
*
* Revision 1.2 2004/12/13 18:07:57 alex
* ajout de labels
*
* Revision 1.1 2004/12/06 11:31:37 alex
* version initiale
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/applications/plan/langues/plan_langue_fr.inc.php
New file
0,0 → 1,65
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This file is part of Papyrus. |
// | |
// | Foobar is free software; you can redistribute it and/or modify |
// | it under the terms of the GNU General Public License as published by |
// | the Free Software Foundation; either version 2 of the License, or |
// | (at your option) any later version. |
// | |
// | Foobar 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 General Public License for more details. |
// | |
// | You should have received a copy of the GNU General Public License |
// | along with Foobar; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: plan_langue_fr.inc.php,v 1.2 2006-03-02 10:49:49 ddelon Exp $
/**
* Gestion des langues de l'application PLAN
*
* Contient les constantes pour la langue française de l'application PLAN
*
*@package Plan
*@subpackage Langues
//Auteur original :
*@author David Delon<dd@clapas.net>
//Autres auteurs :
*@author Aucun
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.2 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | LISTE des CONSTANTES |
// +------------------------------------------------------------------------------------------------------+
define('PLAN_PLAN_DU_SITE', 'Plan du site');
define('PLAN_PLAN_DES_SITES', 'Plan des sites');
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.1.2.1 2006/02/28 14:02:10 ddelon
* Finition multilinguisme
*
* Revision 1.3 2005/04/14 13:54:51 jpm
* Amélioration de l'interface et mise en conformité.
*
* Revision 1.2 2004/12/13 18:07:57 alex
* ajout de labels
*
* Revision 1.1 2004/12/06 11:31:37 alex
* version initiale
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/applications/plan/plan.php
New file
0,0 → 1,209
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library 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 |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: plan.php,v 1.7 2006-10-11 18:05:15 jp_milcent Exp $
/**
* Application réalisant le plan d'un site web géré par Papyrus.
*
* Construit une liste de listes représentant le plans des sites web gérés par Papyrus.
* Cette application est fortement dépendante de Papyrus puisqu'elle se base sur
* le modèle de données de Papyrus.
*
*@package Plan
//Auteur original :
*@author Alexandre GRANIER <alexandrel@tela-botanica.org>
//Autres auteurs :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.7 $ $Date: 2006-10-11 18:05:15 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTÊTE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
/** Constante permettatn de configurer l'application en affichant que le plan du site courant si sa valeur vaut true.*/
define('PLAN_SITE_COURRANT', false);
define('PLAN_AFFICHER_PERMALIEN', false);
 
/** Inclusion du fichier de configuration de cette application.*/
require_once GEN_CHEMIN_PAP.'applications/plan/configuration/plan_config.inc.php';
 
// Inclusion des fichiers de traduction de l'applette.
if (file_exists(PLAN_CHEMIN_LANGUE.'plan_langue_'.$_GEN_commun['i18n'].'.inc.php')) {
require_once PLAN_CHEMIN_LANGUE.'plan_langue_'.$_GEN_commun['i18n'].'.inc.php';
} else {
require_once PLAN_CHEMIN_LANGUE.'plan_langue_'.PLAN_I18N_DEFAUT.'.inc.php';
}
 
// +------------------------------------------------------------------------------------------------------+
// | CORPS du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
/** Fonction afficherContenuTete() - Fonction appelé par le gestionnaire Papyrus.
*
* Elle retourne l'entête de l'application..
*
* @return string du code XHTML correspondant à la zone d'entête de l'application.
*/
function afficherContenuTete()
{
return '';
}
 
/** Fonction afficherContenuCorps() - Fonction appelé par le gestionnaire Papyrus.
*
* Elle démarre la création de la liste contenant le plan du site.
*
* @return string le code HTML produit par l'application.
*/
function afficherContenuCorps()
{
// Initialisation des variables
$retour = '';
$bdd =& $GLOBALS['_GEN_commun']['pear_db'];
$site_courant_id = $GLOBALS['_GEN_commun']['info_site']->gs_id_site;
// Si on veut seulement le plan du site courrant.
if (PLAN_SITE_COURRANT) {
$aso_sites = GEN_lireInfoSitePrincipal($bdd, $site_courant_id, DB_FETCHMODE_ASSOC);
$retour .= '<h1 id="titre_page">'.PLAN_PLAN_DU_SITE.'</h1>'."\n";
} else {
$aso_sites = GEN_lireInfoSites($bdd, DB_FETCHMODE_ASSOC);
$retour .= '<h1 id="titre_page">'.PLAN_PLAN_DES_SITES.'</h1>'."\n";
}
foreach ($aso_sites as $cle => $site) {
// On ignore le site admin
if ($site['gs_code_alpha'] == 'admin' && $GLOBALS['_GEN_commun']['info_site']->gs_code_alpha!='admin') continue;
if (count($aso_sites) >= 1) {
if (!empty($site['gs_titre'])) {
$titre = $site['gs_titre'];
} else {
$titre = $site['gs_nom'];
}
$url_site =& new Pap_URL();
$url_site->setUrlType('SITE');
$url_site->setId($site['gs_id_site']);
$retour .= '<h2><a href="'.$url_site->getUrl().'">'.htmlentities($titre).'</a></h2>'."\n";
}
$retour .= '<ul class="plan_site_'.$site['gs_nom'].'" >'."\n";
$aso_menus = GEN_retournerTableauMenusSiteCodeAlpha($bdd, $site['gs_code_alpha']);
$retour .= parserTableauMenus($aso_menus, PLAN_AFFICHER_PERMALIEN);
$retour .= '</ul>'."\n";
}
return $retour;
}
 
// +------------------------------------------------------------------------------------------------------+
// | LISTE de FONCTIONS |
// +------------------------------------------------------------------------------------------------------+
 
function parserTableauMenus($aso_menus, $permalien)
{
$retour = '';
// Création de l'url
foreach ($aso_menus as $menu_id => $menu_valeur) {
if ($menu_valeur['gm_date_fin_validite'] == '0000-00-00 00:00:00' || strtotime($menu_valeur['gm_date_fin_validite']) > time() ) {
$retour .= '<li>';
// Création de l'url
$une_url =& new Pap_URL();
$une_url->setId($menu_id);
// Construction de l'attribut title
$title = '';
if (!empty($menu_valeur['gm_titre'])) {
$title = ' title="'.htmlentities($menu_valeur['gm_titre']).'"';
} elseif (!empty($menu_valeur['gm_titre_alternatif'])) {
$title = ' title="'.htmlentities($menu_valeur['gm_titre_alternatif']).'"';
}
// Construction du lien
$retour .= '<a href="'.$une_url->getURL().'"'.$title.'>'.htmlentities($menu_valeur['gm_nom']).'</a>';
// Nous affichons ou pas le permalien
if ($permalien) {
$une_url->setPermalien(true);
$retour .= ' <span class="plan_permalien">'.'('.$une_url->getURL().')'.'</span>';
$une_url->setPermalien(false);
}
// Nous ajoutons les sous-menus s'il y en a.
$retour_menus = parserTableauMenus($menu_valeur['sous_menus'], $permalien);
if ($retour_menus != '') {
$retour .= "\n".'<ul>'."\n".$retour_menus."\n".'</ul>'."\n";
}
$retour .= '</li>'."\n";
}
}
return $retour;
}
// +------------------------------------------------------------------------------------------------------+
// | PIED du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.6 2006/10/06 10:03:14 florian
* amelioration: affichage du plan des menus d'administration, dans le monde administration
*
* Revision 1.5 2006/03/02 10:49:49 ddelon
* Fusion branche multilinguisme dans branche principale
*
* Revision 1.4.2.1 2006/02/28 14:02:09 ddelon
* Finition multilinguisme
*
* Revision 1.4 2005/10/14 11:49:51 alexandre_tb
* Pas d'affichage du site admin
*
* Revision 1.3 2005/04/19 17:21:02 jpm
* Amélioration de l'application.
* Gestion des dates de fin de validité des menus.
*
* Revision 1.2 2005/02/28 10:38:24 jpm
* Modification de l'utilisation d'une variable globale.
*
* Revision 1.1 2004/06/16 14:34:53 jpm
* Changement de nom de Génésia en Papyrus.
* Changement de l'arborescence.
*
* Revision 1.7 2004/05/05 15:33:59 jpm
* Gestion de l'indication des langues disponibles pour un menu d'un site donné.
*
* Revision 1.6 2004/05/05 14:33:00 jpm
* Gestion de l'indication de langue dans l'url.
* Utile que si on veut forcer la langue.
*
* Revision 1.5 2004/05/05 06:45:51 jpm
* Suppression de l'appel de la fonction générant le "vous êtes ici" dans la fonction affichant l'entête de l'application.
*
* Revision 1.4 2004/05/04 16:27:27 jpm
* Réduction de code pour la fonction afficherContenuTete().
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/configuration/pap_config_avancee.inc.php
New file
0,0 → 1,314
<?php
 
//vim: set expandtab tabstop=4 shiftwidth=4:
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2003 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | |
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library 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 |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// | |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: pap_config_avancee.inc.php,v 1.27 2006-11-20 17:48:33 jp_milcent Exp $
/**
* Page de configuration avancée de Papyrus
*
* La page contient différents paramêtre permettant de configurer, le chronométrage, le débogage, les url...
*
*@package Papyrus
*@subpackage Configuration
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author Alexandre GRANIER <alex@tela-botanica.org>
*@author Laurent COUDOUNEAU <laurent.coudouneau@ema.fr>
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.27 $ $Date: 2006-11-20 17:48:33 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTÊTE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
//test au cas ou il s'agirai d'une nouvelle installation ou si le fichier de conf n'existe pas
if (file_exists('papyrus/configuration/pap_config.inc.php') ) {include_once 'papyrus/configuration/pap_config.inc.php';}
if (!defined("PAP_CHEMIN_RACINE")) define('PAP_CHEMIN_RACINE','');
// +------------------------------------------------------------------------------------------------------+
// Paramétrage du mode d'écriture des fichiers sur le serveur
/** Booléen permetant de savoir si on utilise ou pas le ftp. */
define('GEN_FTP_UTILISE', true) ;//ini_get('safe_mode')
 
// +------------------------------------------------------------------------------------------------------+
// | CORPS du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
// +------------------------------------------------------------------------------------------------------+
// Paramétrage de la version : NE PAS MODIFIER MANUELLEMENT!
/** Constante stockant la version de Papyrus.*/
define('GEN_VERSION', '0.24');
 
// +------------------------------------------------------------------------------------------------------+
// Paramétrage du débogage.
 
/** Constante stockant une valeur booléen permettant de savoir si on veut déboguer le code (true) ou pas (false).*/
define('GEN_DEBOGAGE', true);// true ou false
/** Constante stockant une valeur correspondant au niveau d'erreur à employer pour le code PHP
* de Papyrus et de ses applications.*/
define('GEN_DEBOGAGE_NIVEAU', E_ALL);// Voir le manuel de PHP pour les différents niveaux disponibles.
/** Constante permettant de savoir si on veut afficher le contexte des variables d'une erreur
* pour le code PHP de Papyrus et de ses applications.*/
define('GEN_DEBOGAGE_CONTEXTE', false);// true or false
/** Constante permettant de savoir la langue pour le débogage du code PHP de Papyrus et de ses
* applications.*/
define('GEN_DEBOGAGE_I18N', 'fr');
 
// +------------------------------------------------------------------------------------------------------+
// Paramétrage de l'identification : Auth
$tps = time()+3600*24*30;
// Mettre 0 pour "déconnecter en fin de session" sinon utiliser la variable $tps
define('PAP_AUTH_SESSION_DUREE', (int)0);
 
// +------------------------------------------------------------------------------------------------------+
// Paramétrage du nom du champ servant à identifier un site dans l'url
/** Type du code d'un site passé dans l'url.*/
define('GEN_URL_ID_TYPE_SITE', 'int');// string ou int
/** Type du code d'un menu passé dans l'url.*/
define('GEN_URL_ID_TYPE_MENU', 'int');// string ou int
/** Type du code d'un site pour les urls raccourcies.*/
define('GEN_URL_RACCOURCI_ID_TYPE_SITE', 'string');// string ou int
/** Type du code d'un menu pour les urls raccourcies.*/
define('GEN_URL_RACCOURCI_ID_TYPE_MENU', 'string');// string ou int
 
// +------------------------------------------------------------------------------------------------------+
// Paramétrage des clés de l'url
// Redéfini le séparateur utilisé lorsque PHP génère des URLs pour séparer les arguments. (compatible XHTML strict)
ini_set('arg_separator.output', '&amp;');
/** Nom de la variable passée dans l'url et contenant l'identifiant d'un site.*/
define('GEN_URL_CLE_SITE', 'site');
/** Nom de la variable passée dans l'url et contenant l'identifiant d'un menu.*/
define('GEN_URL_CLE_MENU', 'menu');
/** Nom de la variable passée dans l'url et contenant l'identifiant d'une internationalisation.*/
define('GEN_URL_CLE_I18N', 'langue');
/** Nom de la variable passée dans l'url et contenant une date.*/
define('GEN_URL_CLE_DATE', 'date');
/** Nom de la variable passée dans l'url et contenant un format.*/
define('GEN_URL_CLE_FORMAT', 'format');
 
// +------------------------------------------------------------------------------------------------------+
// Paramétrage des langues
/** Identifiant de l'I18N par défaut de Papyrus. */
define('GEN_I18N_ID_DEFAUT', 'fr');
 
// +------------------------------------------------------------------------------------------------------+
// Noms des sites
/** Nom du site par défaut d'administration de Papyrus.*/
define('GEN_SITE_DEFAUT', 'admin');
 
// +------------------------------------------------------------------------------------------------------+
// Paramétrage réecriture d'URL et erreur HTTP
/** Mot signalant une réecriture d'url présent à la base de l'url. */
define('PAP_URL_REECRITURE_MENU', 'page');
/** Mot signalant une réecriture d'url présent à la base de l'url. */
define('PAP_URL_REECRITURE_SITE', 'site');
/** Caractère séparant les informations constituant le permalien Papyrus. */
// Si vous utilisez "/", vous devrez indiquer le chemin depuis la racine pour les chemins présent dans les squelettes.
// Exemple : "/sites/commun..." et non "sites/commun..."
define('PAP_URL_REECRITURE_SEP', ':');
/** Chemin et nom du fichier affichant une erreur HTTP.*/
define('PAP_FICHIER_ERREUR_HTTP', PAP_CHEMIN_RACINE.'sites/commun/%s/http_erreurs/erreur%s.php');
/** URL absolue du fichier affichant une erreur HTTP.*/
define('PAP_URL_ERREUR_HTTP', '/sites/commun/%s/http_erreurs/erreur%s.php?url=%s');
 
// +------------------------------------------------------------------------------------------------------+
/** Séparateur dans les chemins d'accès aux fichiers.*/
define('GEN_SEP', '/');
/** Chemin relatif par rapport au fichier papyrus.php vers le dossier contenant les fichiers des api.*/
define('GEN_CHEMIN_API', PAP_CHEMIN_RACINE.'api'.GEN_SEP);
/** Chemin relatif par rapport au fichier papyrus.php vers le dossier contenant les fichiers des api.*/
define('PAP_CHEMIN_API_PEAR', GEN_CHEMIN_API.'pear'.GEN_SEP);
/** Chemin relatif par rapport au fichier papyrus.php vers le dossier contenant le reste de l'application Papyrus.*/
define('GEN_CHEMIN_PAP', 'papyrus'.GEN_SEP);
/** Chemin relatif par rapport au fichier papyrus.php vers le dossier contenant les applications clientes.*/
define('GEN_CHEMIN_CLIENT', 'client'.GEN_SEP);
/** Chemin relatif par rapport au fichier papyrus.php vers le dossier contenant les fichiers des sites.*/
define('GEN_CHEMIN_SITES', 'sites'.GEN_SEP);
/** Chemin relatif par rapport au fichier papyrus.php vers le dossier contenant les fichiers de configuration de Papyrus.*/
define('GEN_CHEMIN_CONFIG', GEN_CHEMIN_PAP.'configuration'.GEN_SEP);
/** Chemin relatif par rapport au fichier papyrus.php vers le dossier contenant les fichiers sql d'installation de Papyrus.*/
define('GEN_CHEMIN_INSTAL', GEN_CHEMIN_PAP.'installation'.GEN_SEP);
/** Chemin relatif par rapport au fichier papyrus.php vers le dossier contenant les applications internes à Papyrus.*/
define('GEN_CHEMIN_APPLICATION', GEN_CHEMIN_PAP.'applications'.GEN_SEP);
/** Chemin relatif par rapport au fichier papyrus.php vers le dossier contenant les applettes.*/
define('GEN_CHEMIN_APPLETTE', GEN_CHEMIN_PAP.'applettes'.GEN_SEP);
/** Chemin relatif par rapport au fichier papyrus.php vers le dossier contenant la bibliothèque de codes de Papyrus.*/
define('GEN_CHEMIN_BIBLIO', GEN_CHEMIN_PAP.'bibliotheque'.GEN_SEP.'fonctions'.GEN_SEP);
/** Chemin relatif par rapport au fichier papyrus.php vers le dossier contenant la bibliothèque de codes de Papyrus.*/
define('GEN_CHEMIN_BIBLIO_CLASSE', GEN_CHEMIN_PAP.'bibliotheque'.GEN_SEP.'classes'.GEN_SEP);
/** Chemin relatif par rapport au fichier papyrus.php vers le dossier contenant les traductions de Papyrus.*/
define('GEN_CHEMIN_LANGUE', GEN_CHEMIN_PAP.'langues'.GEN_SEP);
/** Chemin vers le dossier Commun des sites.*/
define('GEN_CHEMIN_COMMUN', GEN_CHEMIN_SITES.'commun'.GEN_SEP);
/** Chemin vers le dossier contenant des fichiers temporaires.*/
define('GEN_CHEMIN_TMP', 'tmp');
 
// +------------------------------------------------------------------------------------------------------+
// Nom des dossiers d'un site présent dans le dossier de langue.
/** Nom du dossier contenant les squelettes d'un site donné.*/
define('GEN_DOSSIER_SQUELETTE', 'squelettes');
/** Nom du dossier contenant les feuilles de styles d'un site donné.*/
define('GEN_DOSSIER_STYLE', 'styles');
/** Nom du dossier contenant les scripts côté client d'un site donné.*/
define('GEN_DOSSIER_SCRIPT', 'scripts');
/** Nom du dossier contenant les images d'un site donné.*/
define('GEN_DOSSIER_IMAGE', 'images');
/** Nom du dossier contenant les documents d'un site donné.*/
define('GEN_DOSSIER_DOC', 'documents');
/** Nom du dossier contenant des dossiers et fichiers communs à plusieurs langues.*/
define('GEN_DOSSIER_GENERIQUE', 'generique');
 
// +------------------------------------------------------------------------------------------------------+
// Nom des fichiers par défaut d'un site présent dans le dossier de langue.
/** Nom du fichier de configuration principal de Papyrus.*/
define('GEN_FICHIER_CONFIG', 'pap_config.inc.php');
/** Nom du fichier squelette par défaut d'un site donné.*/
define('GEN_FICHIER_SQUELETTE', 'defaut.html');
/** Nom du fichier de styles par défaut d'un site donné.*/
define('GEN_FICHIER_STYLE', 'defaut.css');
/** Chemin relatif par rapport au fichier papyrus.php vers le dossier contenant les fichiers des wikini*/
define('GEN_CHEMIN_WIKINI', 'wikini'.GEN_SEP);
 
 
// +------------------------------------------------------------------------------------------------------+
// Nom des styles de Papyrus.
/** Style erreur.*/
define('GEN_CSS_ERREUR', 'pap_erreur');
// +------------------------------------------------------------------------------------------------------+
//Gestion des actions Papyrus
 
/** Les sites correspodant aux liens interwiki. */
$GLOBALS['_PAPYRUS_']['interwiki_sites'] = array(
'Papyrus' => 'http://'.$_SERVER['HTTP_HOST'].'/'.$_SERVER['PHP_SELF'].'?menu=%s',
'Weflore' => 'http://wiki.tela-botanica.org/eflore/wakka.php?wiki=%s',
'Wikipedia' => 'http://fr.wikipedia.org/wiki/%s',
'Wikipedia_fr' => 'http://fr.wikipedia.org/wiki/%s'
);
 
/** Les sites correspodant à l'action inclure. */
$GLOBALS['_PAPYRUS_']['inclure_sites'] = array(
'Papyrus' => array('preg' => '/<!-- start contenu -->(.*)<!-- end contenu -->/Umsi', 'url' => 'http://'.$_SERVER['HTTP_HOST'].'/'.$_SERVER['PHP_SELF'].'?menu=%s'),
'Wikipedia' => array('preg' => '/<!-- start content -->(.*)<!-- end content -->/Umsi', 'url' => 'http://fr.wikipedia.org/wiki/%s'),
'Wikipedia_fr' => array('preg' => '/<!-- start content -->(.*)<!-- end content -->/Umsi', 'url' => 'http://fr.wikipedia.org/wiki/%s'),
'Wikipedia_en' => array('preg' => '/<!-- start content -->(.*)<!-- end content -->/Umsi', 'url' => 'http://en.wikipedia.org/wiki/%s'),
'Wikini_eFlore' => array('preg' => '/<div class="page">(.*)<\/div>.*<div class="commentsheader">/Umsi', 'url' => 'http://wiki.tela-botanica.org/eflore/wakka.php?wiki=%s'),
'Wikini_isff' => array('preg' => '/<div class="page">(.*)<\/div>.*<div class="commentsheader">/Umsi', 'url' => 'http://wiki.tela-botanica.org/isff/wakka.php?wiki=%s')
);
/* +--Fin du code ---------------------------------------------------------------------------------------+
* $Log: not supported by cvs2svn $
* Revision 1.26 2006/11/20 17:29:04 jp_milcent
* Ajout d'une constante permettant de gérer la durée des session de Papyrus.
*
* Revision 1.25 2006/10/26 16:29:52 jp_milcent
* Correction erreur redirection en boucle.
*
* Revision 1.24 2006/10/18 10:18:04 jp_milcent
* Gestion des erreurs HTTP par Papyrus.
*
* Revision 1.23 2006/10/11 18:04:11 jp_milcent
* Gestion avancée de la réecriture d'URL.
*
* Revision 1.22 2006/10/05 13:17:47 ddelon
* Changement Version Papyrus : 0.21 --> 0.24
*
* Revision 1.21 2006/09/13 12:31:18 florian
* ménage: fichier de config Papyrus, fichiers temporaires
*
* Revision 1.20 2006/04/28 12:41:49 florian
* corrections erreurs chemin
*
* Revision 1.19 2006/03/13 21:00:20 ddelon
* Suppression messages d'erreur multilinguisme
*
* Revision 1.18 2006/03/02 10:49:49 ddelon
* Fusion branche multilinguisme dans branche principale
*
* Revision 1.17.2.1 2005/12/01 23:31:57 ddelon
* Merge Head vers multilinguisme
*
* Revision 1.14 2005/04/18 16:40:39 jpm
* Ajout de constantes pour contrôler les permaliens.
*
* Revision 1.12 2005/04/06 13:22:58 jpm
* Ajout du chemin vers l'API PEAR présente dans le dossier api.
*
* Revision 1.11 2005/02/28 11:12:24 jpm
* Modification des auteurs.
*
* Revision 1.10 2005/02/17 17:56:33 jpm
* Changement de version de 0.2 à 0.21.
*
* Revision 1.9 2004/10/25 16:26:19 jpm
* Changement de la valeur de la variable GEN_VERSION.
*
* Revision 1.8 2004/10/22 17:22:41 jpm
* Modification du au changement de place de l'inclusion de ce fichier dans Papyrus.
*
* Revision 1.7 2004/10/21 18:16:18 jpm
* Ajout de contantes pour le débogage et corrections de commentaires.
*
* Revision 1.6 2004/10/19 16:00:23 jpm
* Extraction de constante pour ajout dans le fichier de conf géré par l'installateur de Papyrus.
* Ajout de nouvelles constantes.
*
* Revision 1.4 2004/10/14 16:37:04 jpm
* Correction.
*
* Revision 1.3 2004/09/13 17:09:25 jpm
* Redéfini le séparateur utilisé lorsque PHP génère des URLs pour séparer les arguments. (compatible XHTML strict)
*
* Revision 1.2 2004/06/16 15:06:45 jpm
* Ajout de constantes de chemin.
*
* Revision 1.1 2004/06/15 15:19:56 jpm
* Changement de nom et d'arborescence de Genesia en Papyrus.
*
* Revision 1.10 2004/05/06 11:14:56 jpm
* Ajout de nouvelles constantes.
*
* Revision 1.8 2004/04/01 11:26:27 jpm
* Ajout et modification de commentaires pour PhpDocumentor.
*
* Revision 1.7 2004/03/31 16:55:44 jpm
* Ajout de constant gérant l'url.
*
* Revision 1.6 2004/03/27 11:09:21 jpm
* Transformation de variable en constante.
*
* Revision 1.5 2004/03/22 10:58:59 jpm
* Ajout de commentaires.
*
* Revision 1.4 2003/12/16 16:57:59 alex
* mise à jour pour compatibilité avec genesia
*
* Revision 1.3 2003/12/05 14:35:41 alex
* en cours
*
* Revision 1.2 2003/11/24 15:19:52 jpm
* Mise en conformité avec la convention de codage.
*
* +--Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/documentation/modele/images/modele_papyrus_general.png
New file
0,0 → 1,2618
‰PNG

+IHDRâ5=‘‡ IDATxœìÝlWº8üÇ+s5ƒÂ+
+®Á5¸æ­É®TÀÔ5@!„B!„B!„Ðݲ\Q•NÓ+;„B!„z-WTe—ïµq[¸×d×8÷;›v5±ë@!„ÐâQ¤R)„Å!„B!„(ËU·®Ý(³QÉqS$IJ¼J)©R;'Ëôü0v]n”Ú=Õ5($ ¥¤ s]^º;Ô°…UU¨¤„Ä®ÖÈIJ
+Çb¼˜ (–ãj_0̼Y3ð‘ž4™7³³ìr6Û{ï3µÚ¸úª@„°ïH T:û^}f•Ì{»Cö÷l³odÁÃ^ØcD!„BÝ»J¦}ÊävËüÑP¶qìz.ýÞ{]ː:Ûï\–C1‰S¥¤H’Ð$!‚’‚¤ J€ä´åô²ó?.„B-iú øÄ/ª8ÃË&¶’‘%!6|›öY¹eS[ ç°Î8ûý,·×Õꘅ+ÃßáAŀ4"LèÙ%óia¡ÂÎMÍ/ì1"„B!„îM
+…âÆ?ËM!‹ÐB ]’BWˆi­JJBD’™›–jÆ2B!„î ÊT*%‚}Î9(VèlM™áç*†c9Ž:ä ämM\v3zÍfó\fCšåö†-ú²ÛÌÖ ýBt¿µÄø‡¿ÍOÎgî¦;öB#B!„Bè^–Êl ,•*%IRâUªä¾PrßEîš*Ù5¹c]—Þ÷ŽõÜ»¦@I‘$¡”Tº”ü,—¾4j b‚È„&Dœ *ðˆÐ}k¹¢*•J)ŠôÓìt ¸×Üãk e_KÓ®&vÝmÍ3So’¼4½ï÷>ý›6]Þûä¦(%h›¹ð>òE(v•¦v«¥¼¿÷ß0ò_„ù8¡*Í“a]©í¥"Ás1Q"PÁèžÝlx’œQçR,ú:"Ä P•¬~‹Q·zn_ H,è;Mì/üË¬}¿ SôÆú²fð«!À¬Ò˜¶TK¦â ‘uæ†ÍLÁ°c}þ0e°5d.WÄþì3FÛv¶tØÞ|é*Ü.«‰¥¦FÖOð…b—À®Ö_I¡3™£Hõ~8<<̋ B©YË\èhxr›¹þÔB!„B·e¹¢êÚ?F;
+ôp$¨ëŽÚžçx‰ã„ãG^*°ÝöS™‰dO6b¶ݧ–+ªn]+wÇR¹b·uqnwRŠ¹÷r”î½|w¦w
+bäthð(e۝Þ>r2¦ÛlbW2ÅÂæ^äBGÃÀ„ŠãΜz8E¶¿kóþÞgڗ_>v|0–äL¿52 ‡O?clMšgr%kØbÈ['}
+ž“Œ;Mœš&q!t<œ}i®?5„B!„ÐmJ¥RÂU~±£@~ê?6<ω "Œ^"R‚ÀöSprÛ´ívžšJƒ´ÐýžK™‡Â-,HØûƒÕ;=ßeÕ
+³5½×2ŠQ« Þ?Hnr“¹Ð0Y‘@³‘!7 ŽUÂðßÄì‹Æ× ì
+šÕÓö£’Rèä0!€¢
+]%BÐw$S«gfíé»aêŸOþí0l1¥§FµÓIà–pªÉ¡Ås³†
+ž ‰‹~%p/óú-öY,Éäÿgrx¦Ê©ÑT%À—>œy÷…B!„*‹Rf¾ñóŸÙš?‰wÿ©ß¤a㱐swWöÕÀžz˜ýÁNˆ¾š·™¤Ñ°'½—wÐ}xÈ¿‚Ÿ47·4»¶†‹u„¯k9Üâ=Õ_Ë #/ٶٶröÔùso|¥}ªñ&_Ã;ƒŽS¿lj}¥“$M”€ð]—¤Ž¾ZJIÞ·dÉ65Ù¿“v—÷½7»N¯ŸÍ£ÿkšJUlœ„IRh
+!„B!tÛ
+V5]l_SÉÄÇT›è.âã²õ(o}šÓT«cq)…H
+z ”½U¥\2·Lf·Â`ïó  |ìN~ñÞeHí}.Ë¡˜Ä©€RR$Ih’AIAR%@rú2BE(ó¦å^51|}Ä𬆭d !òߏD„ìޔ¡š
+œŒ˜^ÐRJ™ÿ۹Дý€©xûE¶Ÿ€ÀgãN3·’–¥™¿x2ÉܸG‘ëBä«0L~‰˜•›1ž€é™œo‡Ë4ŽüUнú,lÚªg@ ŸSՆBÍ?ÌeŽ
+O‡™uƙóº–›¼Ê°’
+OG"GN‡©•#)b‚Œ|ÇçÕ½1>Ëú? ²;7gjӟÎþXçúSC!„B-€lµ“s鮞z
+o¸¬›)Y.Ðx‚˜TÆêìß´ûåêæ߇Ü‹¯{¤ö}7ˆEöÝ\òfÜt›ek¼”x^z÷;·ï=Ø5¥¤IR.ý(ÚúoÚȉ„Ä Œ‹bH‚@2&K>"tßR(7þYn
+Y„îŠÐ%)t…˜Öª¤!D$™¢b$7/8§Ô&z¨dKxÍ ±„1ï3‡ÿ{$|:HP §ÓØvk>ȔLÑí´È_†?!I`ª9óoó ¿ä)¼ýÊü¢æ܁P(£Ûjž^›ž1oÑOÂ(5kØbbãßÁPvÖÓ҄¿F B“7_«¡–ñ"`K-úEì*e{~…÷²‡ix–ñ%÷±ùû[³’
+}âãß°šØ©_HÝk&ù¿†Ÿú€]­±¼Z8’Â’Bø«p^š^õ¬É¤ Ÿ„@©9ãv½p4\öpB!„BwH69««€á1°nÌ<•Ç†3¯Vhàâè(›ùËLŽ]⹕ôäîT¦å´Ö
+T¹ÝËÌñ°¸½S™Ý—WUõGGMªüÖ¹“½C™Ã/}ìå¸3½S ¤H’P“Ÿ–³\øVШˆ "šq2È×G±Ú*F‘7šÝ¿¤b¢ZíÈ<%×þ£ŽšG!„BhQ0À
+W3…(cŸZë>‘<êÞ¬aãW†]{\ÃãRº$Žo‡Þ§jð½kUS$ð‰£ë õèß}PõhMïß4©h R°æ G¶„NI¡æ±ºß)Ó:66ìÛfï;ÿs”£fÕxšã md-•žð¡LÔÂû&"UÚmM=§\[õâX¸½É‹§›Ù&ºs¼_‰¡1ɸF-$@J>. $™É$ƒ&–LXRrù¿¶µìkiÚÕÄ®ÃjEè>³\QUêSMÂç;M ®;j{žã%"Œ~\Œy©ÀvÛO IR'¬ÎýNüàEY dƂ+
+Š\BÇcÌ:ÌÑ#„B!´h²•L¸7z=ÐånÙæˆõÚÍ®?ۇÍ]éº%¶cCÂ~§åׇ¥$¥ÙhìÿKwÎî„$fSôFɞzßìhÙÖ:NT+5{þxŠUÊ$ Ö¾AþÀTã½ÁŽbµYZÞÔlêéŽè²‘ޗÒô¶š]}-¤zýfס–à+­ÅŽº,z3ËÝ º‰Œ‰]g$¶’Ò¬TÅ~‘ IŒK@d € ž9¶l¹,zƒîs©T*{)¡ÅCý§Ñ†ç91A„qÂKDJØ~
+Nn›¶]zoœ¢P(Òuo€iúÆșP䞀
+Š[§7m™K!„B!„Й6šþô ¿ÎdZ•ÉՊ?¹7Ç®E/:tÿ‰ý"÷|%‰I`("Š—H<!Q ”éÇlY›Y=¦¾²ã NtŸb€åùhöièHWçÑàX\R¯­myÏÔº£}tôGJICRôþÎé;=' {ÞÜq°M¯¢ êÑOÐ3x óÜ¥¸J]ÝðŽÇù2—×Eö[ú–¦óÚÓÜÖ“@÷ŒÙóçNŽ’”ù3}®Oý#?Å PêUÛ>·m‹:OÏgÁØ/’zíf×{FǎöÌØÿÜxž1µlÓÏ(G3­÷¤èmsú¾ÈÄï>Ô©©þŒÏù‰䧱¼N!)yçô}1"ål\õhM·¿#Ðáþ)®Rkl힖—9 DðþÎåÿ¢p$·y]³l ÷ì$÷Ñz$ÎVR*•*óã H¢” `B‚%ÔT¦~û©ÉÂô€‚“xšf¹¢*¦ŸQ›ÝÏt/u/.v!„B!…Ba~Õ<õüÜp0çUó œc/–¦EsCAæÆx
+€É{JNð[„ý¶ƒBhÑdS±üg¶æOâÝê7iØx,äÜݕ}5°§Þf°S¢ïƒæm&i4ìIïåÞtò¯„à'ÍÍ-Í®­áÒÝY?•<'Î2I¾g¯£¾‹lT2^oïQý¦eèÏfµ†¿p5Û­öÑpÁxÒòâi|¥=OA=õÞ¸±ÿó³,%úö7Zvpр±îÿuÍì{ê|qcÿçƒ6èjîí2¬„à§ÍÍoY[^@p¯Å?—HŠüù¹—w/=)Hî£ÿkšJUlœ„IßÏDS$°óߖGŸ;ABE`mz„B!„ZxÙ±Q »÷6zÇƉJ]mÚi÷|èd–Ì­A1f]®(øÒÅ¥ôËn+ZôÐÂÑôè>•[›Þú„–é;ï٘y‹ß97®ýc’bM͆³?réKYI¡ªf“'ò£¹’®z´¦)t±s³˜ÿ#½ÁÔ|!ãƒ5ú֋££¬RŽýÄ«ViÓ³móܛv¾öÑyÄS¸ã¤XS³Á“­,ŸûN ¶×L;-²±¥ð‘Î54—­GyëӜ@@’¤X\ %Ò„d’òPxGÓ£é¦jÓ/n!„B!ô ‡‡n« FãO¥ü B
+…¢e_ËbGÐ<eK—œ“HwuN%“êZ€IÊTb„lz¬&w¯ôN†J*½KÁù?`Ƙëì,¬T¥ 5–™
+cEæ@¨ÉÓGšßz¹H°èM‰G™ÐÖÏxÓFN$$ža\@’0›©AR©”s?ÞN‡
+À4=B!„B-¼œ¡ô!„^6««€á1°nÌ<•Ç†3¯Vhàâè(›É~ɱK<·’ÎoA9­µbãrz°9€¦‚¦@¨oho;q¾w# é±ê_SJ:O%äÆ…ã©fŠN*Z¡€$әz)äú8ÜÙn«ÛÑÚvâ¼gz§”JáLÛø}W‰–çÉ ÷r՚Ûܽt¡1A7‰ZÖs2€”a\´Dd0½¸M±e„Šø•B¡XìB!„BèÁç=äõôvþ¾Óõ®Ë¾k‚#„Ðüå^
+u¿Yx½1ðuTc‚Í»C™”lÇÓ*ËwlL㼯m[}CÏì3Ñy\M]‘+‚p%âzÝ¥ÚØÆ*’¢”’$áJĽ¿ÄäÂÅ£d;žV9ÒýþíÜã
+ 3Å:-¼qɖêÌ<$¼_‰–#|à¹v-ÇKdø§x芓ã’HˆI€
+v+À’îÝ60$ìu6š6IIJóŒ©?`
+N½Óà(ЩÇzlPØ?}ãâ¬}ƒü¢‘`ћÜÇȘØuFb+)ÍJUìI@Ä¸D–(é™c˕»I?bµ1TŒn¤®-v!„B!ô@™>…,tþ¾Óõ®Ú].ó˄É{XöýÙÇUsw.S¯P(Nýó–eÅ´l…|}pé¿o{jòð§ëkvDnÜr'ãì×n:ÊÉâPú©ø­mùS}ªUâå©Êù÷”W¨j_hè=æÕNNÃ+_·¿åò5ÏLùëô|hO÷2ó”Î<Ÿóën†õOù#1/ȗ‡›Zƒb„R™¶·ôÿɕîï3Ô؆³m¨Öô‹1k‰õvÖúMÔPrzaœBݧ`…«|z9vz_g2­ÊübŠ?¹7Ç®Eª¯²sÌæ¹Óñ »&ö‹Üó•$&¡ˆL(^"ñ„LD €P¦³emf÷øWN!‹re¿1*S©”ÂbǃB!„B2i\®¶$qµºÂßڀx\ŠþUU¨öNý¡ÞÒÚ¢©¸­¾÷2î%
+jÿ³lveûQ^óföi`oZU+]ißtåf«=ßü˜•Qz÷4n2râ·N€›‘M5›`k›ÿs7§¢¢ßÛßrêyŠ?m›e`óéÀ·ÃbˆLˆuú—¤­ÙèD̵â·jøþGPÿ¦wð=Mzª"³Pl}ç1“v‡O83ÛȺ(
+ÀN.0y/@Ŝ ,@P聒½Ò¯À4=B!„B-¸¼ÑôÂUÁÙælØ
+ óôÿWc\ ª¨ ïѦ7+0"þjçҚ®Ô„ ƒ[9q
+g¦ŠEˆ±ÎåÚö³7RFf£éçÕ)ˆ!º¦SC ó®¥5=×þOf—¤Ûë\ú˜75!€o5ãÛw>ÛfV±õ``èÎQÙXäJPºöêD÷£éŸ±²{o£÷xp,sŒÝ󡓙ãJb̺\;Pð¥‹×Î::CçB_-dñ”ê÷_)}É»aÐ}
+´·~<ûEª^oê<dn|®9Ý`䘫ùw¾‘±¸J­ihïõî1”ˆ!›üÀÖþi ö‹¤^»¹å=KÙà ÷2!vÚ½'Cñè~ÓÐ{Ì£gèt/ý‘S^s³´ól˹z—Ê#œÉtáÕ1îÕýü‰ú‚ûæ%¸sŸæ¶ý@_ì҂éYÒ;yÙÎѱîjåžLŽ€ÿo¡tîulx{u]Gìñ=`% JGáørÌ5ڔû"£qþlUÍnÈä¼:…è§Nõ‹îÌú
+3Þ¡xJ÷‹zxLÕ¦_®¨ºuíÆvËì³é)’f‰RÎeÖã䬷Ā'Ý©€a1?Ô'”@’„RRóX^º;Ô°…UU¨¤„Ä®Öșêf@+!wÙý"ƒiz„B¡E”•1üok²y{Ν«w¾ï?Ö¯_¯/X›>z¸þñ·…Þ@¯i=+|r48†Ç¥T*rT±ôñ¶çíÏsÂ߆WÚ¼•Ò¯j“NÓsGê7tÄ=½æ§9áû`óÇH‚”M_¤ÿVÎÖÁì,Þ–žï òUºMu­½«­¶Öȍ;–?¼ñ/Y G饏{®Ý²±tÁ}K§é³mê9dÞýÉ óÀ̒²~ÙRUßhh;õ -öDÃM\ú5G^<=l¯º—>ÚÚÿÏ[Ö™ë
+¤ÓôôÒÇ;>¿hYOˆ×EfE©/{é4½÷±å̉ÑÁ-“­³VJ§é ô2!Òÿ¶üböªÀ„ ø·ªtZ¡P4}sÃ÷d:YK/­ýß¾'þ˜QÛ¦‘¯z‹ík†`‰4}N›¥„wkë¾2Ë|§,x—V9¦jDˆ!Åòºî¿Z+)¨¬Š¼q1zPSíJõ©è¨e5ÞëÆÿ¥Š•§È˶CznImæ^‡yv
+ ¥M£·œlΛaBôýÁéìèÓíêú³“€ ÁðœÅðFgÇkFøž·Œ]çô²0Xt}ú¬
+€»mØxÈYvßbrÚ,E÷~ ë
+߄X·Wµ¦;[Ç9ò‰ZŸ¨©ªªªªªI@ìˆ#»×©ÞJeýëFï›L£¡€©U)Á?($ IDAT—óz±Ôêmg2“º©*ÕluåÔ¹g§1\Ν¾òÕ!ãcU®¯Hï7×Bé=,aÃÃaw“‘^ô
+Îcy䊠ª I’ D"K‘ÆEIi\Ì[^¼O„B!T”(‰Ðú6ñüÑS¢Z£®‚?M¥à¥+“óN‘¤Æw:Ä ÂàïMŽW´Ñü|r›UTàûœÖ.ËìP¨ºB £ÿ—M3ߺøÍÅ®À­µ]Îøw^<Wõ¾ÄÌv_2>\þ`f Y[C%å8m?ÊZ³ëÛ?ŽiZ/Nuy­ݗ ¯eLÃ;md<nÏ󼺧iÚ \1Ö¸0¢Ï¹ÔQÌ|;µâÙ÷ÄX÷Ä6x­_øÚoÑM–yçG¹•îåôŽÅÖg$ã T—¡ûNÞ¥PB€$\µ¹:\ÑK®ÈwQù1&'¶Áëù¿øòõÁN—Û&ßgPä`4 Sï¾à±dñ§ëKXqúIŽì×ÒL}ö©ø­M¡P0«;óšfcØjÞœÚ@¾v6Ù´B¡`XκߛíefH3Ïíü:…›a½frNr~ȲYKÓ
+Íè_´…'{”/YžÕÒKŠeL}Sg6*»FÎm
+¡YË&ç§WæNÎâ+ÞÔÆsضx±Ä‚-Ï%Œ94;‡m1àyšuÌ{ÀI ³›Íe9“8PJŠ$ M"()HÊ HN_F!„B÷žÈ7‘ªG«:Þï(5O’çÍLõ¦@¯q='^
+YájÑ2&yÜût^©ó¦kÓ_
+vÙYJ ü¡Ñy’•¯Íܛ~ÄÞ r_wTo÷gæA-¶/Å€ýXØ½Ó ] 9^,RÑÚômíºÇß®IR×^È$µå«î Dú[5SQ±6s¥Ãw ä:]_ ‰œ;¬'»ݤÝïÞß USÑoƒíövõóv¶Ìß·Ó©¹’
+ÇIº áoÍÃD}þE6<În`¨5Ð*¶«­n$I¹_3B‚÷°¨ŸéÖÒÅÖ‰‡©Js±˜ÓµJB÷i\®¶$qµºÂßڀx\ŠþUU¨ön—iimÑTÌ-‹pû„ÿÔ¿é|/óDUhJo¿ ¸—<*¨q\²UÚ ý(¯y³?û4°7H­ª•®´‡oº 9s\{¾ùѤʜ%q<êÝÓ¸Éȉß:nF6Õl‚­mþÏݜŠŠ~lË©ç)þ´m–Í§Sß‹q š^n|j¿Ý}±ÏÌ$_›¥ÞÐ.^vÄX§IÚÚqñ˜NÄ\;,z«†?a€Îc&íŸp¦|„©Tʹ¿ðgè!7õÅP¡PÜøç\¦EÝ]¡KRè
+Nš;ÿÇ&KÓ&Gœ¨ªumÿy±Äü±S­½î%ÖÎÝuŽqR½ÞäúÜÝü\s©Šôb†y›­î‰.)Iiž1Ez‹5ÐöŽæñ–‘ÞkµÙ5…÷]¦ÿ²«ÉñVÝáÿ ÕMîWà©ÂÉ‰HëÛ­ÅÒôÚ]xkƒú™~v² üðÛ^Jݔž»5«cŸæñ‡ 2æ4•“Ïb >ï|ËÕlòÆD¥®6íê>ûaù¯Ö·Ó©u+×|”Â鐱M†M¹§R)`Œ£Aõ€«¦m *Ô¦íöHÀ E×t„ÛZô'…У¥µÅÙælØ
+ï™
+O]Íq“˜ÜjÎóyK_M;€_·Ïx„c™69Öð$Y®m‰6ãl®¹Ì«SCŽ YÇÜ Æɍ?ڙ%À¶x]íÿîpË¿ô '¨k>»ØÞ`ËÒÇ`žtsèÙFˆP!Ó¦½1::‡]‹RœiN‹%J40û–•,´ªÿïÓ&üÉì°6=W;pÑ¿q¶¿X ðòššþÈÔe= ær†É=p†aïŠ{â-‹p’€’"IB)©9-;N
+"!l¥JˆKü8Ä%‘$a2/Ÿÿ˜:aÁÉ B!„Q)d`ø1^ˆ ¬šåª9(2OidÀÇëÌM拜øƒmùs±”.¼5ºÿɂwùaùú©Èe]Aÿ~ÃVäVœÉÝ¿ò>cAˆ|9|èp÷¡îúWêm¯Ù(%¥Y§ÑoÔ³lO㡃ö֏b¿HÕëM‡ÌÏ5§R©ôDÖ£':ê÷vÅÆA÷BSÀ;9÷µØioôœ {¡¡÷˜O_ü—&=}·e=ø­ýÓ@ìI½vsË{–ÖŽÒC*
+®1É0ËJt0}Ê
+…¢?rÊkn–vž~ ÏKÞ.Yâˆ}¹¾oô–œ®dÙ¯Ýtr³|5S:Œ?]_󺐺 7qugŒ²àË;ES! ö¤&™]²Ô5zËþÈ´.þ2¯ªæ˜%…öÛ¼:…èúúKn~À˜®D!ð±Åq\'^öÊ×½ŸçþL5ñ²kùþìÝ¡ιv(ònù+%˜®A¹²SÈN»Í’¿é²9%CçÔîj™Àžßîa©R]4=gÿü|ËÚ9üªÜNÀUÖôþ=“šßóÛ=l=õS˜[ºyÛÞ±3 sxW<Ì+€€Ù/ ]mÏs¼DH’"I‘ßV ñí§ ÙG!„B÷ %ÀUsªJSÁËÑ|ïml ²AAÃ
+±ã•ÍÎåeЃfí-•.//Û •ûŸ7ùª7¨nñ/׃÷à¢[Éj×he"Cœo‚óí®þcýÚ5Z¶²@Ž>z¸þ¥ß ½³¦õ¬ð}Èavä¾j<(øCQ6Éw6Xꌜ0ìÿ}OÜ4ôÍ(G =MõuF·8Ræw'òq[GÜ30d~š¾6ïp”Þ>ÍÝG¿&~×õø¯·¾n Ft+©àê·ÙëÜMB‰6ƒa÷×)þgª7š}~ã#óü<é2÷Ø»úkk§•Í¡+ôÝvÏܘѹu‡m_ò¡í´åu=Sÿaùö‡4¯Ýûvr´Õݓ½åH ÉÌG2Î{÷öhvzÄáxšfÏ­æ²ËÛþ}i‰øçÓ)@àHL;_)ÈÍ1­c(Uý£g€^aqîϼ$_4ÿºG÷ÆÔÁjÞÔÆv \š«¡b¦FÓ30‡â†°Ü¼ùƒ×ºOñãPÿi´áiŽ$H,Nx‰Hé¡ô'§gêwžJ½‡$ÀÉm8.!„Bh-WT™_-Z¡E7xzpP'ºo¸ciôOéûûú7<·ÁÝåÖ¬ÓÔn¬¥—È·Ô3´êóÑl9uákkÕsÙÑôÙײà_ZÕxíÿR,ˆô¿-ïÏÄCÞã‚}ufËiéQÛÞǖ3'F·LörÎZe(?šþÚ­ô4
+…¢û·œÐ3ZÜÈЅۜ ÏY otv¼f‰ïyËØuN/ E'ü(=š¾é›¾'™Üc±¬(•¶
+ïÖÖ}e–ùNYð.­r\üWJŸÎ/†Ëëºÿ>j­¤ þ±*òÆÅèA=̘@©>µ¬¦Ó{Ýø¿Säb¶B¡èN«“A¤`¶9s8óë@K+šFo9§_ה¯‹ñqÞ··Þ·‹?¸2k'DߜΎ>Ý®î¡?;³;Ȃ{i7;¸¾¼ å™MŸJ¥DÒkIμ—¡#]GƒcqI½¶¶å=SëŽöÑÑ’’÷w.ÿÃqºçÍÛô*ª­ñ=Áw;ƒßÇUj­ÝÓòòÔe.2}FMY:÷¸ÞqÖ»Çö»¾1 4Ϙ=‡Û8
+€?Óçútpä§1”z•ÆÖê±oa t¤³ëhæ¦×{FǎökÿB„©xž1µlÓ)hC)3q¦ÓâÖjµÐüԆÍÇÎú6ª€Ä;8‘@¥{Þì>ؒ²¦æñî g`·“¼Ü?Ôª©©y¼ãO-¿óÆÆaó.wçÓ¼£Ã72&Q•ÕMïø\Û9àÏøœŸø§ŽkŸÛ¶E­ÕnÈtwâ¬o­ª¦æqOä¢IEåö[û‚Ù}Еî·ÄI&s™d5}*féµü0L’2¥¤çôè<7®a@<!II’‚ ¶ŸšÊÔo?I@eB!„ÐbK§Aš%ñr”Y½u¥£—EíjL¡“B¡ÈOy/BI’Žvp¼å8ÿ¿ç‹í’HïUö©j ` û4›’¦Y+@c$!!LrÖc´ï)á9‰ô¯Ïéeí´^ŠQçÜÊÏÍø˾h›Kr&^Á¹|¡ö¥5¡›`,Wý¦ SõÜR
+º÷[ȑæðÍNªÛ«ZÓ­Ÿì4ò‰ZŸ¨iÍnzÄ3qNËþß}¿ÛÔhh´\¦V¥_\vNPo©Õ«Þò½È€ªRÍæÖ®QN“yv
+#ÀeOþ„þ.f¨5Ð+nÓvÌÕUåp€|u¨þ¹m±•æÞo®YtÓ¯)9 cs:uAÎlF¿Ê]K)éô?ḣù“{Oÿ‘‹þwÌ»{²¯÷Zü¢Æ<{1tªVÚfšzÛ»÷›]ûù¢{;Õó–µ`Ëé´ÀvDòœ8{>Ø«‰-¯PJšJÆëí=üJËÐÿžÿ1|¶s»ªëÿY€ÿÌÖøñpӇéxL¾Ý=ٖ§ÅC…_iÏë+ûoæY˜p4€Þo.úŸf)%ío²âšþ¿œ¿ø—^Ýx ¤’€¾Ý>ó;ÏkšôSßIè]<ÿŸMçŽ8ê?:Ž½öóEÏNæðÛVÂ×ý¿®iÇe·RJzôçÉîÖ³év(%•×¯&¨oð•=ÉŎz–§¢„;ÔòÃðäÏz¶þ¯ h*U’DB‰ ‘$)4@`ç)€§H¦Ô¾’š[M*„B!„Ð=`asôP6G_`l)B÷3Q õmâù£’E7ÓU@ð')ûTºÊ}Õ=3J/=]„–¢iJ CâäzqȾ·|µ¨Í**ð}N/—‚³>Ž9·)óþΏ|9Ê0=ã_¾¨hÖÖPI9ŽDۏòƃS©ªöcšÖ‹©I·®õBb¸ór¡AË˜†wÚÈx ݞçyuO“7÷u1Ö¸0¢Ï¹DQÌ|;µâÙ÷ ‰m2lŠfw""Pj€ ±î‰mðZ¿ðµ??GÉ8(Õe#,}Gz˜M¥ésÿ{vu›õ[ŸÕ2•ŒæYKßäü IÑùßñÁCNM5ËVk]‡É/ÁÀxæmk<ÜaXÅÅß°A2^¶o×±6ý*–[cp´Ißu IJ=ô—/‡Û5+YFÍjÖiÒíÌ/ž²ÊœÚ/Hî¾6}5ËVë]}™ @w¸×ö²Q³2“µ}ÔÄVÐܳNhékÓWOo¶ÈqV²ß¹ždt_ãã²áQ”¦Z‹K±_>.ÆI’ÉD<°½jyr=~î#„B-.ü>†BwYä›È†§6t¼ßPj†9Ï;›Lõþ¯"Âu1zÎo1OK ;LÎpŒç;~íP?ÝÍÑ4çy^ÝüŠ3>Úµ£yà\ù|±{Ÿ.ðJ÷tX„ÈW¾zó¤é‹µI«Ø®¶fË~þªÀÇ®uêgºµÅÇÒöcay„X¨ù•YÜû%óîÜÅ^lk׍´Õ”ç…LòZ¾êJ¤­uªÚ;ÍÚ̕”ï@¨pÊ©!üփ̅VíVçÐ×þrthÀ]ghW?ßa/>ÓÆíwj®¤ÂñÉ!Ë M+©mvw”øÂsOõV7k&êÎÙðp8û/Û‰‡©J,v‡æO©P(Òµé!§¬Ç9‰tWçTù¨®¤,KÃ`Óc5¹MD¤ßƒ†Ê¢7Åä½I+&׫L­#’Ȩ(JéÚÝÅK€b'/A“ˆ'玺º )O‚˜
+}ZÎã\:`Y™dÅfH †•ÓŠÍùôg ´J«±ÉãVMåž’$d2 O’Dœì7¶Ê±„̪è1?Ì5dîNËw¿èLhëg¼i#'O€0.Š IÈ)nSì!„BÝ{Äë¢ï³ËVÇqå·F!TDáK¡Jøòó/Ç.©YµªRES…ÿ6׿:¥´·7Õ5þ"Uo4u\Æ©ÑñC»ÀjЎ%@÷›¦³'2ëíÁ0o³Õ뫤$¥{¡áìÿº
+¡<Ù^Ó®-fs‹º
+ëÆÌSyl8ý*¥ÒÀÅÑÑɬ´»Äs+Ë':ó³–J€ æJÈxt*†¡¾¡½íÄyÏFÒS@|9œŽ'4FÒgã¨Ðˆ§š¹ý eö`C HÏïJ¤P&Hezj¹ã¤P·£5︲»ç6E))¦"Û/dûÕT̪ŽÊp‡Z~˜žM¡1A7‰ZÖs2€”a\´Dd)n“PRSÆÎ\F!„B÷Y”}Ÿù¸uzßÉAÛv+Ç͸_~¡Ífê¿y/û–>Ö\úvþt}͎ȍ[BýÚMG9YJ?¿µ-ªOµªC¼<•ðÊ/ÃR¡ª}¡¡÷˜W;YìX¾nËåÿj8>NTêjÓN§çC{º—™Ç›7Mâ¼;…›aýSþHÌ 2?Ô¼»=ð·¢TÕ¾ØÐëËn&»woëú,H(µyŸÇÿž%½Ö®ÑZ¿‰æU!úNK¥RÎýå3_Ý/ØJV»F˨VÍrÕ™ƒ42àƒ—;£2eUÄl Òe_5ìñò{¼ùûМ{ Tt0ùtÙÏÛ~ÛSëm)Û,wÌ[¦WXʶÉn±‡Fì³  þ]_ý»SurR“íä}¶gŸæÆPÀ2}Þ«Æ~æhGí»‘Ô»z µÓ™5xO„fü
+l2N&ÇnF6Õl
+ÀäèNYð%òå¾É
+2ïø.nDB†*çgÑðž©ÙSÕÕ79"ž[Íy>oé«ipÀàëáp,Ó&§Ñž$˵Í!Ñf,3[êü;1丠‘Ó•Ä¡s¹‘¿Ï¶vuU9:ÀÙ=Òð—kÆu wê}ݦ=_Ì̓nî=ÛB³£P(̯λ8gZ=ï:zÒÏ֛4‚×²Õ æW͖­–ŠÝoÖcû‹”±/ϸ
+ʾyOÏbôÉWdÓô °ÂU>½6vz_g2­Ê|Gr=nŽ]‹.Ø;‰HÁš'×þ1:Ëíït<-®Ø/rÏW’˜†"2¡x‰Ä2%B@™~̖µ™Ýã_-ûZšv5±ëð¯„B¡E°\Q•ý»«ó°—y¤ºöåz @ˆ€(Çþ'ç†=­-ì#ªß ´·~<ûEª^oê<dn|.Sd&rÌÕü;ßÈX\¥Ö4´÷z÷JĐ.c‚àÒß6z¢£~oWlt/4õ¼%¦ôÕ².•G8“É5xuŒ{u?¢Ä˾*}ÏÙ¿·mªiÌÝÌÂ2iâˆ}¹¾oô–ÌÑéŠ7'7ËW35 øÓõ5¯ ©›‘pWwÆ( ¾Ü˜§®ÜKíIM2»d©kô–ý‘iÑó—yU5Ç,)_ôf^Bô}ý%7?`L¿¢_¶”k?Õû¦…"B_[ëÜf1æ™W,­¹ø¯”~€Ì»–>L݌¤[ 5pεC‘w§®
+w/b[àmPª¾ü§d}¶}…]Ù~5ojc;pï¥éBåš_ŽfŸ£G¨¥B¡¸‘º–~’sç…ìÞÛè=ËÌÉc÷|èdJTõ*DŒY—k
+–:ùûˆAÍpÕ·šÓ¬Õ0ª·Éë* øÓT
+çÙ ‘þ½³mcõ›ª–J”º¡õ”w3›m?:Âmí-äݧP(Zöµ,vÝ.ù¦ìý¸ÇX«Ó¯ÒÀ¸ÀQ”EMûÞvZßws®üþ÷¤ìåOqĦ%0=I/“ȍíÌ`Û»ºª3Û)c çyZíØ€‘ÉAè‚/(‘/÷M~ʼ㻸= ªœŸEÃ{¦fXUWsÜä‡*·šó|ÞÒWÓà€Á×-Â3áX¦MN£5<I–k›C¢Í8›™VçÕ)ˆ!Ǎœþ¬.~~˜'Ýܺp$¹-Ìè® tŽ¾éO½M™™NJµ©Tʹ¿ü[è!4Uô&ï:$!@®Ú\®è%Wä;‡(‰ü3ژ—™w¸Ìfƒ™wÁÌ£å¡õôEý×B‰mRÎ+Û\å6¨P(Ø-ÓÆ°dOWä]íÌ[u
+Eý"º‹GAçLl-ó{-ÚG…BA3¬a«m(ç¶ÐûÎé^¤lgy÷p[÷•…e¬B!„WÁïc4M³+Yím‰=D|ðrgôª˜J¥øo‡LPe
+{¼¼(§&äÈÞÙ$÷µû#©TÊVh”:½Â’{tyOó-Ó§R)á멊7Æ^òGjߍ¤džžódÚiݱp³ÀÔe3÷ÍÆv;êÚíüñžœ#ÒzO‡E9•’Åði¯vj
+4ÚÕ'R©›‚ÿ=Knc=Çù–v „ÿŸ½÷mâÊúÿÏTIå‰`å‰òD´ÊDM…§€j·¬g©g©ì‚>Ä©1ÛIÚÕ‡~Tâ´Ú&yªnœ®Jª¶6Õ·Ä ¥$H‡G´vWí³Z§‚ÅAekW°òDK•‰b¬%b¬Éß?Æ;¶Çv~s^òö{Ͻ3‰¯gÎ=ïs?éתUú
+k\R8Lž¶Ù‡Äˎ²êÞĬ Èj‡($A
+ã-ì?@|êçXúð”ÊÀ@‘Ž¨X”ZêažÇÞ¼³™^‹×AAä.@ÁRž›Dç;ÜGýWãjM•é›ëƒTÌx:BÄZÎå4qî? é¹®[º§ nˆÌ!rƒì«<wz1i
+Ú'´ô
+:çN݁XÜ´Z-T¯ž÷í–=ã$m€ÐŒ(Îãiå@}ô9+K…OɑُVÀøÌNùzðàD|ä˜C¯e­Þql$v¾_N\[‘CCÝ{íñ‰Þàuˆô¹Õ«ûä_Ð'vèXW]YYYYY9>‘mr«ãWn¤~9þsm`7µð€ªU—€g*Óég©Õ·|ÌA¤®ÐÐih*RŽEv
+54]cpž˜ú®M^í1Ÿ­É¬Ÿ›4ퟵÓÉnt@û°ËP#› 5£¡s¡.–¡išÑ¯×å[7ËÛoî1“Œý­¢–(ÈÆяLC¯´Ãê@8:™F4Ø 0n¹ÞÊ4
+´€V¶Z®_½®®ÿ;èéNþo MÅë«
+ÏÎyPWÕǯbzzAAAE‚\¤$oiÆÇ;SR<$I2«ÃF“q—M·F§­ÑêÖèr†Ò€ëõC&óà·!~ZŸ´4úӏ¶™ìÁÇ]¶½Ø¦y®!HÆõ‚¦u‹=áy.Ü»½u蔲C#gåRÆõ‚Æhí
+O=YÝ°½ÓX'ÏÒ)¶Í"i †(?8ï#‚ ‚Ü]ÒïÇ$½a£Q«Óó*-CmµØy¸KZö›ÎîúƒMÆPv˜9E35 SÃ0UH¾¯aäì
+²ô{G{6ƒõùj‚ Xc‹jkÏèGF Utý õÅX"֜
+”SÅh×hóøèP.„,˜%*‰
+éúØξ¡VZö8m› ÜËNv’¶ì͈FÍ+_a€ÐŒh¦H0Uåˆî_(ì._ûÊò¢#z²Øpuu…†Î^ jÕ%Ð?!8j( G"á‘÷”U¶h ó–® žwëvvX¦½‰S² ÓÊ¢„øÄÒL ȽÎ]q…Ë¥ùëd
+i_(VE’ËXð¦Ê½À.»Åù${^øG÷¶Ï—˜Ý‚x©Ê½½7ã,Ç>ì_Œ±åTÓ;ãW“ij4%0usi£»9%š¥™¸Ë`02ò !
+¢ç€GË0Þž»e.y "9{ÏÞ
+Ÿf„ú[›üÉ7ãÛLuΓ£MÏÒü墜Pm&;sØNß䯶ižëcH`úžÓ´n±3‡»hàÍmšßô1
+[‘MÍÄAŠF9ç'^û[öÜõ² )㈻ñ©?tYj‚ãbó–
+45 `òõ?þLõÞù–M·šŽ_åü‡ýg5ÒF¼ùÛæ m'€Æ
+Up*n[Â~Wñ© ª3Ç"È=x]tÒoÜ`ЯÖ2*ìsZ;ìôSßÞÑ®]Fñhá¤dE2õ¿-',ž­™×Jß1Ý1æê×mыQ©\U•\]vùѤN€<ÁŠœùI6TÕèÜïÓ­¦ã?‡<ûì/±ÕÇÿµÌM¹Šm箆ݻvÔálò×dzÝb
+˕¥M‰#ñ̓ÊYî8lb·{ø¯[r^‡ ˙#TåX”å¿vToénrŸó¼®/hA
+ë*c ®ÝÜüKnçû®çªÚªËg®y×SâL¨ãíŽâÝôÀ¾îí<@õþ#V¸*@Û¯ŸÊ(9rå†u $Œžëjïîjn˜¸W¯Ò6îlŸ<ÓÂþŠ(Ü6 R•JÂcÝÊ´â@·x.whœÙ:°èær_±âxÇ:-˜›>}`âuÑýa¿±V§B WyF¥²hHÏÛvë{NFû@¹³œ{…+-ÎîúÞ&£í
+§_>ÿE3€8­¦&óJjª&×Lëûƒ1¨iŸ<íH«aôõ¨¡Ú¶[N[ó·Í8ÄÔ0®“í«»ìB í{­87®©»> IDATo ã-ú-~€L'½R9µÞÉ|O„cöÄ?ßrþJH>úæÿY_Ø>‚(#Oeù’Þˆ‚èùÜìÕz¾ðr\¤` %C$²8d%Î($ âN˜‰RZ˜_-´‡%)³üQ8ÛBUãH¯SP˜#NíMFzIE3Ö=n¹—ì«‘}j‹ë´85è|ÝL‘IÑÖ?y –©âAAA$’$éU4»šÍ㣀А6;—…D"Áõ™–…@­“éw¹9^L$r¼Z8‡¤a—›ÄĬúҝò铬ûDP Qsʑç‰D"=6Ó=Æ% ïz
+È–œ®ºô&ÍÀqVÈh•ÓN")?ûrÖñ™—›‰„p9ìùS Y
+œ˜(Ø6{<@²rïºnw43yŽÒiæ,ï?ʵwë²+ßG`îävàÜëä–êïY?éתUú
+&"ðÓ8œ=¥Q[w¿kç/çvgùöÙ¤”,ŒÎ<xÚ#}$W ÷…ƒ¥I¢”Ôo²¥‹Í
+g—gX.HÒGïùQöÑ緟¦3A”H¹é3¾ºâu±ÿ€[_o4l4ê6[œG9…©mqÈ:; ñhåæ%—¦Ú¾Ÿw²Ý‡8íîùãð~Õµ±ugx«]g~Œ^ŒJ¯sßÑN Õ禹롺êº@‰aðäh4üã‘l‘CvývOñ#_L§IÍNʳÏ_
+ZžPi
+s<½Þ }BK¯ é
+:[½ˆÅM«S>YõjSúQ9YI[ 4#Š3ÁxZ9PFÛ.«ÒXrV–
+Ÿ’ã³­€ñå3"ÙhàH䠝¥i}½eè{ÅK´`Ë
+°»|í«c– ÜRWhè4(锩Zu ôO$³‘ŒCúUº19P¸-¿r#•Âì?×vS; ;¤C‘80% >µy”0ŸÈ.ζœ1ÂôCÙjiÇ7#êõßc?ô AÒIý0SúŸ s\ÿQ/ó²j˜øu1>~ç>´<ghÚÜHљÓmx¿ù©·ùáÓÓ4>ÐÖÔ6v5–H$ÄioÙÊmUÏí<h§orŽ&‹Y'?f‚(°'5AÚªZ[ogm­Qϐîzº+Þè;ÜÅçxÕ<\âàOÛ$ûšgwyÛ雜ãUËpI»p¶ rÖÏìW䜟xs--ŠúåeêƒÑÀË ˜)R蛓2‚.†Þ4Þo/;Ëï÷&""}©-~•s¿añ?æ
+)‚S|öwO¹?VÈ!æªÜo#­Žþ’`’ƒCg#ÚõzE§Ø,ïûoިúù¶oˆ,™rj¥¼[³ÜÂ,Ï÷Œ¥¿…@õÊý=þöîô?G†)ÛHÞ­Lë„erܙ~,ðÛБŒäi›}(ÝE—]ÿ¾a›Ÿm,çð”ÊEÞ]ö¸#1›ùߕa¹Èò_Ú*·¸x­¥†Ìo?úktʉJéµ$§’ˆÕ0¦õz÷çf“I¥¡c?…¹£C†
+@¤`Û¤í.ÐX¡
+ö%wܞ·Ôv]ð¼[·ðÃ2í•$?ž)ÑþؼXjõêÿöy6Ñ ©iÒW ÓÒr-²ÓâÔ@¤Š€ÈuHžc<Ëtyʓ¡âAAA‡t}ÞaÆOGtro-(Ç©É:fù‘ø–—f’A» šUC‰A˜è
+;~ŽU=kr wR¾lßN°؉ÐýWóȱd¹ÍäZZÌúÊØM•î·M#϶˜³²TØ°®7vS¥ýM£/##qæ¹0£5[šëÚ¦âê*]ç_αóZ»ž«j«.œ¹æ]O)YgBowï¦öuoçª÷E¥!jûõS%I!É£çºÚ»»š&®ÆÕ«´;Û'Ï´°¿"
+mo O‹¥@ëÛcMûó—ªxAAAäáàÎïo<ú÷т£Rt¦—νòpÞ½ÃÔŒðÀG­[†´¯,`ëTänAÒ¶ö
+Nϛډ¿¶åü§ s€2œ»8Z_j5ÕU?ùԎv·vg_ø›¹Ý—Ò©u+3~(w
+AîeÆO'·÷”W¼§÷f‰”Þꯑ{áR˜ªaÑ0|I`kòyHm¹Hûè®A2Hí #ç¦_ÊzK_÷3âw´4 ´™Ì‘M¾ð~#ºéï:]ZŠöOÚ“iHñ²»ÒÄ PvOƒó>‚ ‚ òPQ¤›^zJ€Ú¿Dƒ¯Ê»"K–…Å¢] eüAÐ/‡ÀV¦á& +‚ÝôÈýHžoнÉ]Iš KÝ5H©Üô·ÄÜâäB¨î¹,]³“M‘*AAA;†i›Mv†Ä/ ÙGÏ_
+SŠ·J”v0¡€~ùƂ¤A2ÖÐAÓ­µY0d} ÓÝÜë༏ ‚ ‚ ŠÌåtÆ[ôF³ãD¤˜F”Öé{_ç¿©
+ă_ZnãðY´àÜç渻ô!‚Ük<‚Ký<KÉ«•“b2m!‚ ‚ ‚ÜûP:™†Š¬xÿà‘¢¦H?'ÞÖq!ȝ&åÞ$;4MDÏçf­Öó…—ãî§>·‚ ¼Ó
+“”È9ß°²QAP4cÙåà®ÏkHotΫ>íç99Ç©9Iц­-¾Kbzó¥$£3ž–>$%›ò` ÅnMÒAAA¹‹ÈûLfs •¦Öa+C¹ÇCJû¡ªAî
+›i]¥ù÷>î˜Y*ëì®ïm2Ú®pÙù¨}05퓧å挾Þ5TÛöaËi«T¦©b˜Òq†]ãëø¤<8#š)ÅÌÉÅ i¡6ä>å‘<Ký·U.”Oí"‘¶2–ª|‹–˸f¢”ÎX| íaIÊ,ζAÕ8Òëdîu»œ2lµ…ÓÄ8âtÐÞd¤W’TǺÇ-÷’}ʙҡÅv
+Æ^l™œ•Ý&ƒç²Ö÷Ãää>ÝeáE·\¿·±ßÚ{äÈkZňág~ßkÚ라29òYÓ~[ä¾'—éû>è+ö2]Ÿº ¶U™¾8²Ê7§in¨ž€7þ]‡õ‹ù©o®æ7yžçy>VBњÔEÞ¶²,ZVþÒÿêôYúfóžs£!J¤’Þ!ÿ£Ü¹so¾m)•‹¢”q=§i{cÆç‚Ðy?ÿêÍäœ"×ö)[(0TÚ?w¥vaMÓÚSøN¶¬î°€÷U ÿ8i“Ѳ†õñr¶5 ´‹ÙuuQ‚hû^+ê(î›QMzºèR üíeO¶X 2cÞ¬5Ôfn'«TN­w2ߓŎ¹÷H$ö=öÂõAA…r¢R~/?ÜÉ^㣮%&•®À-Ĺ×iÙmWJ@ È=«aLëõîÏ=Ì&“JCÇ~
+I’°íñrËYA®œ](˂æ$EI”J’¢¤q%éãÆØù”È(ÒׯZµKVÍpm‹«tε´ëåªñžþ|—°D –ºjûj¢ë³æôƒ”¶+z1ª[–π̢:…ð§vͦ®dù2]_ÿ=÷󿇹uã@,N×Ò
+5tAAAîs<ð%·›Ž·;B3·@ɍ ÷ yô(÷&ó&„0<¡µ>¡åŽO|àŽ4´ö -½‚¦+è =bqÓjµüQ½Ú”~Ô2%IÒV͈âL0žV”Ѷ˪4°œ•Å™Ð<Ë+,’e飩j^Èö€d£#‘ƒv–¦õõ–¡ïcy¯T­ºú'2óõˆ?»¡DS;?F“Ýåk_³¼èPjN2iZ¾19ÞP]¡¡%clùâ1 OFå↴0›r¿!;®s'½¹r¡üˆ¢Çÿ}Í»žÊS˜. Ü®÷Lë|g¢“áQSI n]2‰•’ˆÒ9uËâ-_%%<݇8Ý{©a{ö´¿s€î=[|êà`ڊBìê?w!ØÝÔ¯}Å ŒM݄æÇ2Ã-˜†šûIHét$±ÎÊmé5Ó)Àð»;) WXì{’?ât¨õÅ~ÝkÉÄ5þX<²§(+/ÿÁ¬·.‹ùË@»›|:œ}éAAAî5òdÖ.èß'WX2êD‡ë©’ÅÄÒc6¹ ”‚Z£6Ö,ÏêÄó!ƒ†bª¦†Ñ®ÑRê)tËÀÿSÊÓû×¼%
+Ù#N«"I >9TðÙÞPŒaÏY™\Æ€7eÙ ¬B.èìÀ,º©õœp<ïý“©m ^Ì2"9ðR•{{oFÓÞíýU[²‡ÒðÂ?º·}Éß|ìÃ<a¦"äp#.vHÅÙ¼×ÁÜhˆ)7}ú̈́$
+|îáƂÂÕ)þ|0rÈ£WS’\({׎Î@“ßײQO¯ õ­ÞáyëÎ“Nƒ–aÖ]߸¦¾ïàoÑ6° ɂšÌz†”$E¾!‡¾†¦kôŽcÁøÏCÉyMQDº^ю½å‘wûcq×Ësù|„@ïD¼ùÿÒ<ÏÇJ¬ºeÐûgyV‚V¶ºrŽêuuýßAOwê|ãyÏn L#N[r\l§CSñú*õ¼nfϟZ*+Ÿ6öŒ~l˜åµÏ֚~ç¼ñKâƕhKMÈüëùÊ@]U¿ŠééïWpÞGAyØxÄÏ1=óOxžò:¹ôïP…ó
+¶MFݝ¶F«[£ËJ®?֙̃߆øi!|jÐÒèO?Úf²#w!Øöb›æ¹>† × šÖ-ö`„ç¹pïöÖ¡Sêv“CÉU¹”é{NӺźÄó—BöÆ6Íoú˜\cË=€›ñm¦:÷×!ašç/§¥Œ9¥4ÑSw)õ’&<ːOû³»º¾eðë`øüÖÛRO÷Oè|1ç8Ê8ânô·wË%É欃_׸ÐXÀñºÑò­&w¿‘ófÕªfÃò¥)Myx$÷]Îm– ݪÑ˲ IRô”ªþh%ŒÏh®{¯=>Ѽ‘>·zuŸ~îKúÄ뒞ññˆh“[¿rCV\&þsm`7µð )ÕñLež¥Vßòu2SPJ§CÓ4Mk*Rm‘DâÀ¤¶ñ²Ïøde×·ñ3“ÏìÉK_JǂÎf#Y
+FϵhãÉæÛÛ8uòL =gOª_öwDï;ãZúòØDÙ9Ÿ;éÍí– ÝŠS˜‡¤Šþ"{²oœ;s®§Ðv?$ÝÒT¡j;î>Ä÷¥ÒŠuÑvœKٚ€™1Ç¥\« Ë©¦?vƯJ™aH× šþfwúq!âþ~\ÿ´ò*ëR;M LÉûxÌ
+ë¶ÁïŽð§-:Zn!rƒŽ½éqñ¢ÔP©<ÉÍ)(™·(Š ‚ ‚ Èý‚ï-3YJ˜OóJûuåCäoX¤íÇHŠ6lmñ¥?›ÌòÎ7, MA® ÍÍ]E¥_X¬Íü›ÉHç(=ëfxêÓO_Êo“H$‚¯2÷Zr IDAT°4Œ'¸ìŒù¨jE»I’ô*š]ÍæñÑ@hÈ›áËB"‘àÎúLËB Nm•jØåæ11+†¾t§œÅ$ã
+b"1+†¾öèó«mrV&Y÷‰  &¢<æ”]V‰D"•È^yú]nŽ‰„À…¯²É~²vÉ63°Ñs†–³]û½’)qšóîïb—Ïk˜1ÇYa^ËYÇg^nZL$Âå°çO-d)pb"g¿ÜY¯q®ß¥ IÉæ}Êà }CGÊMŸq3q{åBÅ15“cÇ眅Pʸ^Э]¡K<9ìÞUWgêNö£¬€ÎnÝx§Ù?£rý6éÔ/;ý±xg‡V®CÒ-*Ï[
+»©¤%ë·óRßw°[í¾Ó!îRØ7äl0tk^豚A–Òic…*8•¼&üw­cqc Ê/ Õtog«åýAî2ÏE‚]Û4¿écIÅr‰øTPUјäÈ= Îû‚ ‚ ÏtÛ>ô·'}h¥úŠˆœùIÖ=®êÜïûñbttØ¥»x‰­öòI_¹g‹¾wL흜œ<wr ŠóÔéÃBo­M%'¸ä——îszêyX({åá¼{‡©5ဏZ· i_qäm€ rÛy$ßRÿí” d×sUmÕ喳BÁB ›?h) 6¬«¬¬~ÆÑúBÇ¥ò<
+ `wº >¡yÎEϝÚØÛn•¦Ù:ñ°çMíÄ_ÛrÆoª”o(ù‹£õ¥¡VS]õ“Oíhwkwö…¿É§„Zz§Ö­Ìø¡¤Z“?øD¡.ý@£~—ðEWõã•Õ¿¶Œ¯°…¤?„R9p‡Æ™­Š{—#‚ ‚ r/¿ ºªºÞl|05íÑӃÖͶ†Ñ×[Ü_r»ªâmۓŠ^ûÿN9NºÌµ,MÓl­Ùí‰ýÔ¼~§mʤûè%ÐS %pZ!Lð^e)¡iú½£=›Áú|5A¬±Eµµgô##*ºþ…úb,+¡@¨¸‰+'ÅAÙ9OÀµÄ$”•¹ç8yOÔ¼r!N×hÑ&5?…–òç# !(N{ËVnèÞۊȻË×¥„B·ë
+ÍååÏe'ӓþ‘ ˆÁq¯¡ØwBy†QT0}Ð;ß-žûk[\¥s®¥]/W÷ôçkyKÑÿ·û<õ“ç+`x¿ñŽõŽ â¥;i)R_o4l4ê6[œG9…©mq´w´k—å[ª"Mù…åÊ酷›;ÐWÎsÜö¡¿=8éÛ ¨Ìb^r©aªíûyŽîCœvwü1MI4¯­ë̏ыQéuî›#ډ¡:ã\ˆÊõP]u] Ä0xr4þñȶÈ!»~»§øÓYL§žíã`VhпašÎ]œŒ½ê±~½Õ+ÕáÿÆkþk`48*½FŽ™ò—;›, 9‚ ‚ ‚ ÷#ù=õ˜ëAŠÇ¸!3…÷=Nú¿q“)t!â¿Ä"×Å8/ðçDŽ/ýÆ5ZU®&áýæ—Þk?82yeÒ»·ÉÝhO?jÜÇÂѐO÷óPÜûbp»¾ÿB•÷Lt2<jœñ7å>¡÷ÛzÆlû&''}{­CÍ©pr¶±ƒ«j9wqròßaç﨎íFEŽÿûšw=%uä™ÖùÎD'㦒@ݺւ—¾+à8ºñŸk¯©{[Œò€j§·±ßÚ{äÈkÚ<ÍÉeú¾ú
+û)Ì2Tкgu:Ž}‚…ÒymÍ©>œ‹äO[+ŸJ$’£Cvbˆü`YåŽÉ_4ä£åGdç†påm»¬9f¤HêXÔ»qÎø)k¥q(‘Hˆ¡ñµZϐܩ®jc¯t
+)Ïɬ@>Z~îF‚•œ(³<ñhå‘+7¬Ê>"‚ ÚÃלZ
+Ò5
+"#ߙ¤’Þ¤¯CÞ¹Pþ¤7’©rva1z%rJ” d<c ÒGóz&CjTŒ¬I:Gjy²PJz£$&2}Ü;oçæN1ÒׯZµ+é£_’¨D ±í«‰®ÏšÓRÚ®èŨnYþ 9w=Ó)„?µk6͉–éúúè¹ßÎø͸¼kG §kia~œ¾R986i쟆‹ú
+JkAA6ŠO{Hi
+,ڟ~;lf“ó³cê1ŽA.JÀð„Öú„–;:<ñu€;:lÐÐÚ'´ô
+š® 3|ôˆÅM«ÕòGõjSúQÙ×LÒV͈âL0žV”QÉG§bñƧӌ¯‘“ôL¤k»Q_k0l0ÚŒg·•:zJŽí~´Æg
+£]£¥Ô9–uËàÿgïþcÚ*÷ǁ¿)¦gÙnz0=d³vÓØN”;#ÅÝÜ]¾£s‰ýdýä®ÌOeF)÷æ^Ê5nÅg»›(Ýòqƒ%se7»¶Þè]ýÄI1óRçڛÍô·pš±ì4w„s"$ýþÑҖÒßÀ`ÛûBÚóãyž(íû<ï÷ãùw$q7òӼǞh“ ”’¤T îD}vÞmzs^à+U½L:t1¥ñ=ñ[«Ô¶hßuúG|¾óÞ6/<—\«€Ð/‰«œÓ£F{˜¢£Æ¶#ÞYÌé¹y޶ʞ쉝Óý— ¢s4ÙÜD?LX¯Þ¡¢ÖäÃfÕì×6–mÿWäÐoqIa´ê$Þ3<q·RÎèžV{;Ù3Ì]ô9Õ2J¶VÊE¸…k«vvy›=nã65]A«·\Có®CÚÎÚ4
+íhpœñqçÿÊ٘h|–Ì‚(
+ pA_w«ø¹8LxJ(cìÏ˵‹ÿ*Ç] 8öÖÕéºK™Ú¥RʀéSŸ0\ÐÛ¶ÃUÔék;˜ynxœe¯²ìU6ð½×ºW»ëxÄ~ÖÂ5›'"vu*G’´±©\ê<ÿÊP¢ÍÄWi¡}ÛËU}­PÕ¥Ìôl.U/Âÿ(›d˜~ÞuÈeNZªÑ/"'ªQBîÆcˆY˜jTT_…Sý±Cïõ݆à!‡lã¡DiîL¢Ó7¦“©§ÿ¹Õ¿jÑ´Pµ2 8Ãé?}­ÚøE¼ÌQZ¼<ù/±S€ Œ$ٝpÍ­}¬Òò•ØaÂû±9þ{SFûF|¶V-YdcqzÅð÷vöí1¦ˆË!÷"|ÝG!„º¥ÍãNäÂÞ3[†¿ÎñðcÑù¢Ë?Î}Âånjjm£õL0çÑIŏZ^$È7È5OjT*•j³Š*§2Æè@ý®÷twmokCåCë š†,É`Ž{4ÊjuÃ؆æsÞøÔI“Çgx8ب®¬|l‹G¢;÷%sÓêßûúßRÙÞh¨¬¬Ô2 j¯SŸ{¿Õ¶{˚ M³Eñ¦»~ƒ´ò=ì}¶ª½:^Ùäñé%¾†'*+«·8‚
+C˜òw¾Ý™ñ”ög6U?V]ýXõ&MãP:}!dx˜€‘·RykZ]ûž·ãÿhÏL´™ø*líÙ4ªncøÿ‚ª?f.U´T½ ´H™—AÂ×ÞŸë[ŸZF2UŒ¢F¡Ø¬È¦×¬#ÏDrñc¥æhbñÄ*ÂäÀš‡ZBÓQ†Ì¿P*±`͇´e]çµ0ÃV‡~‰2ñ± þ§ÕY[XêWÕ¶oBÆZ&1°´…;’ígo<íQ¤ÞM.dQ@_Ùcn†
+2øÎ(ݳE:rm?ùɾ>8_ˆ#¶ºlϕiKM†–S3°6C÷Urò~l YûÄ´‰Îxnr¥Ž’;¥ËËÏÓ&:öCä5UJ÷ðþi^¥0èûL´0ÎÝk6]žŽ2áÌÛc—FαæklÚûKÈ"„B¡ûRî•0S—Ì¸ü`ƍ9,<~á‚ °P>Zåîî%dS%êd‰Ñ€ÐɪšôŠø‡eþ’qýsÁ(ï+öÏ¡`¸¥IÄä%َ˜Kù:©x[¤i:Ç¥Hû;õ[tº¡~í“ ÿ£§­9=]ˆùÔLÏrÖ×æ҅
+N¹z©Sî Ú߬”Kß{ºMÝòç{â1ôìÓiS¹Ôc]p߶ˆòáí´oė8@S«!etoWÃجÔöª¦Xç½üׇ”$@¶í †}Òò¦Ü#G!„BÝoV$—˜‡P^ë‰JHùEMd–܁-±®Wª÷ÔšE]ÖʝOºèhéòлFAsAoûŽAÅ+yZœh4jޟumt?K½ÉP"c9ӅòJMùɽ1¦¸´ ì©FûZTÎQaiMåH&å;ˆãògíôÜÏ¥ØL"RšŒ­¥½2\_æoÓÕU?¶©¥áØs(ðeÖ¨„ÅtjØɌ‹/Öĝ ‚8^§©Ký ´!ÿÌRýHeõ3ú±
+ÚږzfB!„Ð<,ÑUJÒ|ØÅN
+ÙU³Þ•Õ..+wîP÷ŽÈìCãgû«XgÚ¼„í€ýÂåЕPèJè²Ï­“zŸi‹ï¸í¯«®óJ4g‡CË'Þ7™Õ»Ÿ"FÄ ÎãNæq…ó3Ë®èj\rH\ Yx£X©'Ao³¥îM\àñ¿«ÌXp¢ñi—UbȔXMá—d柛¾}¥Ùi
+6½à3E3€0)€…ÏLÊe•yŠ¼$“.uSÃØÏv­î0ðÞöï‚*~€3ªwx҃ôÙ¶SOۘïÈÅ\ÝAh5HLÏUôfYӅJÎåɪÈ*fÅbÏ4etZ­4ÿ~%I5&îòß ‚ j¬©ÇäMðÉQ‘má³´°]i¦f WÝú­J²Œ ÖQ­ÖDïìQMj”b ÷ö»4Û!„B!tÿHý<«WFsÄ若=ÃÆÚÌÖ)B¹¥þòð·8ýó­Ô¢7ރú†® ;+F·½áY0mH pÇq\DBÑòø4灳68Þ¾æW”æ%ƒõ°ÓÏòEŒ²€ö r3ÛÎ]õ[ÿK+-×i)~$< ­ ֓cj˜Ø2‡%Tzè;~”ªQÈTê @`ärx\aþÈÁ]ËÎr`Š•paT睱?ÒXȅý̪¤I¢ŒTo7%êõà o}£‘^G$©~ÉèÏþl‘düâŠþ{Ø36­Š!Ë¢Œd×Øþ¯›Ÿ+,ë‹"‰²X_ñÃ
+ǾΝÒåÞnýT§/fähYáë>B!„º?i·jWz-×ïÞêð¹µ ÂÜóÌλ'°½•)bé­&ËOüpδ]Źm IDATüÊYW½^ÿ'o¡ã( }hSVÇ7=¶ÅÉ*OûO'v‰K:Õ²i»Î)è¹Êú‚·‘㹋#üß=ÚÍ
+iJõ•„À‘Æÿ0ÒqôÜč ×ÁfGÓ¼‚±Ú¸~o äw«®6ÌRv«û.U¹.„&ÃÚ)Oƒ6k\âW\OS °Ê¦N¶Ê8zebâç€íUªswþ¨Ýjç¤Ê}!4ÖI¼uOÄkú“kՇÞ?TÈÒãu‰ßv>+n)Ý]­™7)³ÆPè%™Ìç@êÕŽc/ùº›û¯Øc»†> *÷Q£l!Å>eð¯C‹i¡ÕCFyH¿ßt¡åËîY.eŒýYyû›C067 sz"âçoͽ lû¿Â&¿ß«©4øö&—Úȑà³ØŠl%uššU$\ï™’N8-tÐýžŽ5µè 8aÞªÕÔ¦¯ïšm;f!„B!„B˧í yÏ ò¾Ý½ÖK9ƒ*T­L}ã¼µ†’±F£V8çšÊ6€nà¤×𚁮QjԆ½þ{ÇúgØÎ(SȌʼí@æúìT­Lΰ`ž¥A_«–ýÞíÜ^h5ùÔ•rF÷´ÚqÜÉl×Iåtäßöä ¦œ–­•rŽ*§ lÞ¹]ÞfOȸ•z›Á5ä©|n0±×vÖ¦© û—ö5•-܌™¾íoã'nĶӶ¡æda3YIù°”Ú¨Ž=«ê§U zòœ2÷ým|tÚª$€¶žòõ>X90Ùo¨ dÌ
+¾œÅäõƒnÅuGõVÃÀß}«¬Äk}C«ÿJßM*½ o{fWlo`ÄkÞ­•mîЬËÕfíçd8墾ëTî4»ÏûÙ«÷ ­AÓ-¾ÇD—Z¹ dr™¶V£J%\ôkäSÅ05Œb³‚’eÈ÷W­Ï¿#‰»‘ŸæUûI„V„ÉPJIRªw¢F<ï6½YЬvX¥¶Eû®Ó?âó÷žø°9ïäZ%„~I¶§G/Œö”㐮Çë‚uï:,áÜÔ-â’Ìë¨æwºÄ›ñÀ‘\áB¯ e1IA¿u­~d¼JKòw²#>þf˜»è sªeT,]háb­]ÞfÛ¸MMWÐêm×м됶³6‚a×Ú¿´‡¿ëä
+)kiE1rÀ çðDDûËso¶xoï¸Øú;šã¸ˆÄ Z ½ï%_“åØ*+«Ÿ¨ëûzº“OQîŠlýÐDŠP åre©†Åú´¬¢Þù'ceå~[Ïða-À §xªV÷ªmú—èô±ÆßøLK®íÏ6Âòô!„B!„Ðra^èy
+¼Uss/͞@ÏNilï!Hé‡}ÅT'Î×~.”fôÊp}™¿MWWýئ–‡bÏ¡À—ÅÕ-I›šF’$³ÑÕjLÛµªÍ*EBµY•q*=Øß©Ô5|åç&ùÀ×ú¦y…hÚuf_e/ùÚÓ.öCŒýyyÛ³/Èql wwÛà×yJµ„§D€Y>2 ¢(3À}Ý­às‡ÅÊûór­Áâ¿Êq׎½uuºîx^`‹ª MRÚsŽ&OGwÇ‡ÇYö꼯X(­K2ÙÎÍ eúoS¹Ô D ‰aŸ´¼i1- ´âÁù,¹%Ð<ªˆpÜÀÉ!r£‚ÿΧ‘ÓŠª\éBýééBɪ^óӅZüSB¢PLv$=4ï6oŠR‰”ν4Ê|‰ü ÔcSД³ŒŒ® ÿ$ úc‡øI›ï¶UzÈ!ÛxH=wÙÿ‘:Ÿ¨îLúI;|à‹ÝœWŽí6ïüC]‹¦E?é*¤"›¬\N§ä
+ )å½JìtAV‘pÍÝøÜ®à†¦þ zÕ\¸2Ú7o
+*‹ÓÛ½¦Ú{´ë²m€»2Û!„BÝKÖñÕ œÄ‡܂[pË*ÜbÞonÝÓJ?ŽKœÅ¥EŸwÉ
+ã7EÙEӞŽ‰ F寈üç.@J“kÆv2mÇXP•þçÏcvöç?n5!¢ã­Ž•Z¸
+&^ëù y½²/v7Ùà K<Xú%ÊÄÇ)ø¿*žVC!çÀPAߥ{¶HC®¹µM)’}}8pPï’s®©lë¹2m©!6žx80°6C÷UòE–Z×+»íÓ&:ã¹ÉGQr§taùy:žM6Ãkª”î;áý“~þO` ï3ÑrÀ8w?@¬Ùty:ʄ3oW’±18Ö<bÎ”ô-©Øë>¾ßE!„Ðýf=Q9=q«ˆ
+®Š+Î:ã/c¥Ð¬
+Ï÷Ç¡nE‡
+oó6Z¶V™ŠÐ5
+!¶
+|ïé6T‘m1Æ²Šb]p߶ˆòáí)sä4µRF÷v5ŒÍJm¯jaŠuÐË}HIdÛ˜m„B!„V’^–ϽwQ ‡ºîÏ¡’¥Þ–U€T"L‰‘)ˆp¢4ÁqRo£Åàƒ†õÊÁŒ»FÿU\e~¥Ú_$‚ 2ÇÓ³Gç“.:Zº<´Ç®QÐ\ÐÛ¾cPñŠ{©ˆò#iSG¹ÅÁ
+ÒÊGô°Nýyo«çÖ<Hh^ëkL&ÅRŠôßó`òøô_Õ•Õ[A…Û:Öf¶sÓÄ҈²íU8.ÖNÏ=#o;¤òÖ´\žž·ãÿhÏXŠ+5Á§äŠl‹éÔ°“;_—;q¼NS—ú@iC;ÿ™¥ú‘Êêgôc&ìg—m;ij
+Xü!MÖàÌ}ƒ ˆXqæÜð‰ºgðWT²„WyeÍ]ùҁá”*QÂK’ÿåӅî9‹Ì*ʳB!„ЪPLŒ²ð ios‹@Íz µË1TXžÑÞù¡Î™8 ˜ÛÞ`„‘T"gERœâA"…Y$³óo#T*ŒÑß3J‹ÑÀ]£G(M¢„WÁ—ãsRî[ ÏUßeò*Ý+=ÃïçOZåeÎîm]»ò5‡é|ëƒçu´Ùf÷–°A„B!„ŠEÄ­Å,!‹ZRÞ#ޟDÝfYdJE^Œ/g+ˆsÕq“·£Ñ¨yÿR~,½7Ī¾$ÂЉ"0÷ɖáo†3=+Ý#bKÈ®ô(ÐjD@l6=.&~¿)9«(›»7Û螄K‡#„Bèþ´ž¨¼
+÷?IÁ,ïøƒÙy&½ÇŒÍf$•‹YŽ6—©Ù{r¨ËÔìª8+H%dQß͟…µ) <‰ˆ Š¼8+…™¼|>››Sÿòi˜¤ñï-…XŒ^³M«P©9©‚¡@o>æ´½b`jîåp–í -ÿA%éê®ïm֚n°é+GR4C“rXøôÊ«&Ó\~÷k}òŽ‰óÖø¾F]¯‡ª}÷þ¼!÷¹i»˜Æ~¶ãhu7€€÷¶§Tñëü˜Q½ó0ý(ÛvêióéåZ¬VÚ9®]Ï¥ )œŸ¹Xv‰/BDž«‚îdÑxþN]üœÉ³Ÿ=ÓH”ÑüüÃüû•$՘¸Ëo$‚ª±¦C¤YGivš·““>s³–® ‚ hưߑèeá³$LºÒ~d¥u
+¾Ñ—ØëyS?À+<çF½§k%Þ]ºÎÄé¶ýžÖÜWFm/KûþÇ°°Ùä×løŎ£ºwúGý£§ß×ýC 7K&‚ž¡+è¿0Úÿ$C{“zÌÐl–¯ž%l‡Zx›+þ ,ÉPc»
+ÿ>p^E¹,9QÊOñâ¬@R
+çîN
+}Tî[ÔêNJ}Êà_‡ÓBQîºKbèŽI½Iýïx҅ò&戳 ª’-I_K£Œ±?+osÆâ“ÐÎ鉈Ÿ¿5÷Z °íÿ
+›ü~¯¦Ò|<àۛ\ 5GnŽë5=÷k;÷i¼MF¡Ô<-®W¶šnSR§&™59¡}œ`NÿQU·wÈ4å؎‰B«Jléð•B!„Ð
+HTüø:"ªJ)RU 0$Î
+&öÚÎÚ4$cÿÒ¾¦²…›1ÓÀ·ýmüčØvÚ64ÀœÌ:“5WãeÞßkÍ_3+*ß
+±q¤|Ø?JmT3$€úiˆž<§Ìðm¶*I ­§|½VLö*H ó‚
+ä’Úáu›^Ӛ~˪
+)ôB:YòO[*‘ÌÎ;F`{+«{wÉÌç@›rÞ?PÈOt±›ƒa±uqñCYU½xÓ`É(BË遌׮ï@ºPî¢7ÔºxvO¼èÀšwk)’ HJ³Û̦420æÒ0”ò]ì®ãŒMý0E”‘û]웺†&‚¢•æ£ñ알‰BiÉDÙ2€t‡›"“½õI7ìm¤âïiØ´‹R•íqÚþrÕXO_Ö§Rss„öÏÇ-·Î{ì
+KèJHµ6W %uZXBÀ~Msk€0/ë"ם¹¶&
+!„B¡U QÍCµFƓwa|$¶—’©`4šø9öuùœçsˆ<1Ð C@dAa?:à÷ûûèzÿûEv6K‘µŠl=Þ-uTp¨KRIæ.ª´€B7ü¹ë¯ý“ D¦€»á¦Èˆ›6¿¸M¶Ûh¥%bô‰ïw˜úyq hUU°'‡Æ¿ð²'‡4rZñ¨‚® érDýQ·1ؕmÔ¥îÕÏMy$iø§aÊ'¦lJkÚk€,r78jløKäœÿ4SÄß4IO-»µêZf«ÖüÉXÞbޔ˜›þ`%ŒMÞcœr¯»ccDÿkþCçÈÊåt
+£Ø¬ dòýUkÁóïHânä'oêÞDhE˜¥”$¥Jp'Ê»ónӛY'¤çhœûʺÅä9qáœ&ËB©™ ¬RÛ¢}×éñùÎ{O|؜÷ r­B¿$ÛÓ£F{Š¹2ÐãuÁ¿ºw–pnêˆú_¬rìîM›®;ò—œóM³YG5¿Ó%ތGŸäÏæ>!ŸÙ0Hä‹k¢Xì e“¼ÞDDâeÙӅ
+W¯‰–òCﵘ?£…I7€ÀÚ>rX÷HJ{ÎÑ´é¿» <><β‘y¯*ò†ÐºûÙR½•³0©6ÒâMÖsÌÚ÷½ ˜÷Ü Ræ7•K}aÑD—r"F û¤åM%ŸŽÐR‘‘á•WšGŽ89DnTðßù4rZQ•+]¨?=£'¦ŸŸ.Ô⟅b
+?ÅÓåt¶=¨ßõž–˜º[Z®GªžÒY‡,#šdØÚ½ åø¨~ÛzîT|»ÉãcÆFuedVªz¡ùÜ7Y§'fk<xÈž{u•‰¢ìõ_Nx·ÑÙÚÙûlU{õzï…[®§ÕçÞo5îÞÒ~S¬z²ÞrÐ]qKå#zsåx~bnx¢72+UüºÉ=WèX˜òw¾ÝYx˜”o¸º>¡zÿUÐlû3›Ò¶œ¸1m¨ TúB£–ŽnKkÃøMQ¶AÑ´§câ‚Qù+"ÿ¹ Òd‰ÃN¦í ªÒ—Id1;ûó‡ÐòHL' ö²»ž¨œ·Š¬ „¯‡=#>×·>µŒdªEB±Y‘1L¯YG0ž‰­ñnÄX©9F…Iך‡v%þ¨„Ɂ5µ„¦£ A̋#gbü€–x°:qp¬ÍÐ/Q¦,½‘Ô»©·c§D£QXêWÕ¶oBÆZ&1žø‘o< †
+;™±clÞ.Ô¿?×µ•««\³^m`:O;êéÜÛ!ž(”u¹s„B!„î,Ò|ØÅN
+¶ÊD£Qóþ¥œ=†
+*kðä*Ë]éQ „B­°ÈÍw­Cœ-ß÷FÅp8øw@¶VFы}ûÚÑÙ¡X›kžJÞJëŽx0ÏåÂ…ÿÙi<£wîdÒ¶«;υöˆ D<›ži] ŶK«âOšýÂe,eiü†À6>¦ôW5َ¸UiñºßùùEeõéŸCú¹%¬²ž;3àØÛR§eøïãa\çn½v09و»êú¨=(¦?¨ŒÛ­Ÿê”»ÜÆBž„îÙ"õwEŒ!„î=’Dmz„B!„ºÇttv˜»ÌÍ;A¹Ñ
+bÄÒÃ÷#|$Vg‘lm‹<`i»+AWw}o³ÖtƒM/:JÑ  LÊ€©IãË«&Óu÷k}òŽ‰óÖø¾F]¯‡ª}÷þ¼!÷¹i»˜Æ~¶ãhu7€€÷¶§Tñëü˜Q½Ãþs̶zÚÆ|Gzy£'!4ga¤cô!t‡%^È}?ÉÛ>p°,»üCB!„B¡ÅJÏ–@óËÍGŽD,ïñÆ=F©D*£dÙʺ?0)¦‚`T睉2,þO-j†&‚¢•¦#¾ØF‚ \“BŽÁ$pýÙk–~\ëø¿pÞG‘£;’$`×#ëõßó3¼õFš"‰2Rý’ÑÏÇÇ#Lº2”—Y@µÏÝñh¤qǒ]h;9Þqª+-oó»kJiN"Ånþj–o·$öP*'w ùûÓÎȶ¬Ûåæ¿âbZ«K!¿¥hYÅ"ò±ÆèBh%Ãô ÿ;
+£Ü¨¤Ëé…Ž4¾ø‡‘Ž£ç&nL¸6;šæJf -ÿÕ«;蚸1qîãæ#¦º@1ŸüÖîê1vOLL¸[óUâÎٝ púç[®§)Ø­vNªÜBaÄ[÷D[ì0r­úÐû‡
+2bŸ2øסŴ€Ð=)5R1z„Z)‚ 2¾
+ÛÉó«æá ïeK³´UÓ,a­ÆeùÚÁ ¦¹ÊŒ °æ§§dR®‘¿ÉzŽ[w©«O„& %¬Ýšs¥£$iýð‡ºMÿSç~e¢±‚g³6(kšø°‘šRçn!„B¡¥WL™ŠÀ,˜»¶÷mT9%—Ë3.ÁÚÙåmö„Œ[i ·\CžÊçc»¤2©TVAÓ/YnÝ0Qżû6i:2m£€¦î³ÞJí`îS
+ÆèBèÎ#æ*e.z“£ç¤
+†Ú©7s²W—¬úí M¹Z£èË­õÿÉï%îrߚ¥ӓLåU S“òÅÐ w©kµ–#ÞÓ¯ÊÚw8 xy†AÑñ®«âÅ(c_ôÜç™l#Tîuw=-ϙ€ûÊÜöy¸ßw‚*Ëß B!„B‹—¡†Fˆ¢(Ί=ÝÐþ?íҔ0i¼Q·1–mŒˆT†¼'‚GÍJšV×ë¿‹5¤¯#bӓ)ÍnÖå8¸¨î„)Ÿ°)17ýÁJ›*jtʽýo¬…Ÿ"+—Ó)¨Ø)ªV&¾ñx¾,ÉX£Ñh4žèÏ.œ¾1MøÏ­þ}T‹¦%¶+(“¥TQ¡$ ˆã‹k-1L^=Î}sn¥‡€B÷µd˜>õ¿cßñ£TB¦R‚# —Ãã
+óGîZæê7k8ƪ¬°ŸY•4I”‘êí¦D¶fÞJ2A8ÎØÔSDÙ¸ßŞ±©kâÅÍGçjª¬y·–" ‚¤4»Í¬V«1cUǬb…ב+ì˜i»ÈQ Rý{{<9ƒÃsÀ«ùsSže§{ß¹Ø]BQž¥F*ë—çdãG´v56õéú†K™é-Û¯B!„Ð}ˆðÐù¶hÿО6ã;•j-xþŒ‰G~òÆoÍpþY…óŒ—å8ןtí;”E½©—I‡.¦4û£'Ï wG®U@è—D`{zôÂhSÊÛï¯ þÕ½ëx°„sSGÔÿb•cwoÚxGþÒWJcë¨æwºÄ›ñ25r „³ÿì
+2‰|qM „B-‹2^»nÚ®ó_
+Ž3>Žãü_9›ò…é è.<%”1öçåZƒÅ•ã®{ëêtÝñ ½ÀÚñዤ´çMžŽî³ìÕy_±OZúA·âº£z«aàï¾ÀUÖ?âµ¾¡Õ%/äÜ R>~6•K}áôb¡EÃ>iùÒÌLBèޣݚ¾|B¡; œÏ\ôF)gtO«½Çìˆ¿æ.ú‚Çœj%[+å"ÜÂZ;»¼Í·q›š® ÕÛ ®¡yYœ¶³6‚a×Ú¿´‡¿ëä
+OTVVoqnÿéØ1”¿óíÎ"F  |ÃÕõT¡Åß۟ÙTýXuê×P,[šTúB£F…himØôXuÃîvVn˜¸à­’pîÂgBš\3Ö°“;¶¨*¬ì±1f§a1- %‡IÀ!„PLr&I¢\}l³æQE„ãN‘üw>œVT)è
+š.§®¶äˆýé5“k"%–r%i@‹Jh,lÅ%yÊ<fÁ$~aÊ?¯ñ
+ˆç‰ò—Œ ‹/ªªÞë`÷¦g¸æ-«8Àøç㟓ۍQcîswça“ûHÆ6è]ø'+ô‡—ºqáÖïù´OÛÉóÀ×)­»¬ÏÛÆ
+B¡å“xô@îãB!„Bè.’ðÜŒp×Lâ¬hé´Dnsâm>þàoò‹ï«£³C±6ת¤y(äDîªßñfCPœw@£zû¸q40ºàÖÎxê4–za^´Ë ÜþݼjÔÝÇXžžÄÝ¡7=ÒGk#?u§EŸí.‡®„b_£_žPŒÖimñ}·ýuÕu^‰fàìp(pùÄû¦à1³z·³ð•Ò)€s·^;ìg{~¬ŸêôÙG’ÚBZw¡+!¿·yá)ÜÖêÝ͎Qç^MÞöÑB˜ŒBÅp+:9–E݅p Y„BݟҖå®qæ.sóNPn´úFô–Þ¸ÇÈT1Úz-ýðÊ|&]kÚU`t’3*wxÄðõHòÞM¬ñÖ/ÑX³À9×T¶G£¹æõg3°•nŸ²ðcs“Ð9çšÊ¶ÏoM7R$€À’¿ª6ù'¼šJéû—}{•±Ã‚8}cZ_‘¼!\³®©îÎàÚÉ´‹fî SòQ­ë•ÝÿŸ½ómâJ÷þ3+g5ƒà•òDt•‰š6a÷‡§EÅYV­SÐ%HiW³]]œ¶*q¨–$]õâP-qZ•ÆT·ÄT[p*Q®hí^µ7fU6‚ÅA¥«Re¢m•±HÄX—ˆ],åýÎíØ㱝ð|„}æÌsžsìŒÏ<óœï¼>c¢åÎ͐y5
+BªtŠB°àøiÊ9&šrçșäšK‘:”ˆÑ7ýç%w“!u4¯}$¸…ìaä\Dÿ´ön{ òÀ‘š»þJyv(L
+±ç¨Û°ÅdÜjÒo³¸>õr?/f¤~Þ*‹NAOˆ_§ãηÏí;1 ±³n>ã~Bä?HYU²äÇFs]
+úê«øC¥÷çy=±PtÃÐ6˜håû ½ò¤o­à!ÅX†Þ7Zkü³Ÿ”§ÑQ×½_WÐàý
+Š<"‚ ‚”[ÁƦcG{ÔõW½ŠÖh4P&S·­=ØðÛ¶˜ÕŒa«Õ7`N"Ô$©^Ͷu\¿v]WÊÌÝÑ=\fоÃÈ0Œá9›ÿLý‚{ŽíšçÛ/Ž^j–ÜmêL2Ÿì5jŠ¢Í¯¶‚4ž,¥XÇ>ÙÇTï Úá}yw &õîd“G„`׸Ôôï Ïó1•U¿ºÞ‰¤NkÖU–ÏR¹±¦çp 3=\’â½}£cŒf¬˜o£ýQiK…º˜ñQWl‘¦däã³,äúIg|gÚl×7cíIu›³G5Ÿ}AA~%ûì:£7n5iõ€Ô²ô‹ãcwuÑÔo\‡\%Mmo%yrûܾÒôo÷;#©·ü?ä:WVMËVeüc™ÜC†jSǑà©Õ-Û݋ïÍ$›®Ð@ÊfvNœÏCÝûc°{³ø¯Í_DûB'è²ÂAAûœ2$IŠK:¡åõREæ«ŒIæué@­zÝlܙҍODŽ9t cØbé?+©ý³1©~S†ÙGÌ
+•‹âFèظ4xÒiв¬Öà<9»Ü“ÚmµzUÞÊ¢»Uï
+ªê1 Ï9-}YâÏï¶ ‚ "©à¼¼èMÏñct•V­7D"àÑÀ­ã7Ÿ'§^VÃ1¡vÂ}æÔ1QFž³§‡TÉ«ÞxKp¾RÇÐQF¶ÙÂB҈¬Xd²ò
+Š •“M{G|F–ÖíÃ\µ™\W)Š€†ß¬´\æ¸-rŽ]&š"Š6îJ‹9y´ ’9 áìêY7n¤+dºods oÙ¹ãi±ÅÀ¾ ñàüyÌíˆ]îœG:ý⺑‰ó«AõøÓA_]}¹gȚ³ÒAA¹ï‘ 1Úޔzßï…xÞsõË!ðC:ûi6hu‹ǵžÓAŽç}ÿanÙ®+Iôf‹š¸œaö»@ 'Ë#ˆ/-6ŸÅØW‘-GG;?æLïZSåïE´m—RQñ›}0=ì¼*×ótãŸÛ¥©„Ò ÕûŒ¦§iNBqœ1lR˜;—ù6
+Dӟ¬âøÄ£ ÒäV˜k¡ú‡Õ+ ¡“{ζ×x2=Ìc‘#‚ H‚t˜>ó×±þ9søJ$p• Dnˆ/𗇅ϦG´²¹'y5Àô.ß ûõ¿ôך²Ó·eQPoôî2x&õþ c£CfU°fc3@^±Hï.Cϕ
+ÜÃíþ× ùm< È#‚ ‚ HŠð…ð£O<zàíoóXèýó–~s÷ë0?)ŒžõZêgãéq©Á\ãþ2,LòüÏ%¯0v½¡Ø^ë>ây>üµ§®~Áaú†ÖGÔµ»:ÂW9.îØU§~¤5•/È¹å½kïԏ´×¦ÉÔÌ\üÙˆIímé;&Š±Õ¯"=ûòäÛfÜ'ZOúèómºÿ¹0wuÔßïª5vjž9`g
+¤Ýˆý³3•ªŸv;ÿ8äpí¬HÎðçððœȑ‰ 5ÍÃÿ‚tCe¹‹P‘Ò/¡b¾f‚ ‚ ȃ‚
+ûƒ§:«»šjË׬¬Û×oèH&aSìÐûM®¦š•kÊëÚí»T’^¥á­Pßz×+µååå–}ö3E¥.)ã
+íø·È.$ ÈŒ(ÚxéÇ¡-eáfsMåo×ïnuk_îýªCî¼9,¤Qëväãô…ñá>awX!‡, Åcó†ªãÁš?y•í#ÈÇôô|² A’
+{Üܞ앦õ:Rl½¶ƒérی­¤^P«-Ùm­Ð¹O‡r—¾fVË<KÆÂk†¬£¦~.72®ÛžÙ/㥛Ó4ctŸ Ê®ÌÍ=7åÛBÕwÚ¹=pØ;Û#ùñ€žO¹Öoõ¹åY†+ûPҎ糏ÈBDë­wÛ A¹û¤EoæHd”Z£6U-éÅËa£†f+X¶ŠÕ>¢¥Õ2qÙ¼ŽàLɦ{@—'u%“|êÔrŒý_Z«ð҅KXJV,’"uàO‰¶ ~ûkyÓÌKr5á†/]ٺ勦„žå†!ÇrÞq(õC?ë⸖ƺŸeâdàM§zӁÜ&µ$Ç笍ý€ås橋èFš[¼e³Cûï_8ôlß7½ãŸîv|)¿ÂŠ<"‚ ‚¤)¶‚Õ>¢UˆÑ\vï67‡"<ð‘`óö~í ¥å” w Š±·®
+|ìì<;1fϵÐ÷Fu©†yÿ@}µâBd8Ðùú±-—JrC|z¬Æa•iâý: «lƒmîÚzcã5®€F'‚ ‚ rßaÙa™ï©¬yôìoéI¼ÛdÖònËå{dÉ°ÎÙ»;Œ}ÓÃù¿!ÅY˜¿}d.¾Ó¾»í’&x.¨:{?AävCD"×6ÿöI@f­Æ¨2
+Õ_Ykê.b‚ ‚ ÈDêVy®ŽÒU:…
+£W]•’pgA Ê´d133ãØ»˜wÓ‚ rB@"›žF¾Jj+ÎüÙâá~§¯·h“ÓáŠmåæȌ'}ËÖ4ܳä{ÈU)†„ÈcÓËM̼O@Aäb%QŽ³z¹‡pìuàmËR`ä\³éAî<©¹ë¯
+OaËfÿ)€Ž‚ ‚ ‚ ‚ ÷&¦§MwÛA‘TpþWÊõŠÄphèÀ6°n®$Bg²‘; ½oŠd¶<³%ßYBÄJä!|cQü*eW’ê&‚ ‚ ‚ÜßÈæ! “‚û‹ã¸ÜC‚ÜE‚¸Û. ‚ Ȓ ¦_د#å8ìã&ř™ç¼ï:’á+ŒÁ³y7ࡵޙ<܅m?]]K«›È®õFAI
+¢ç¨G˲¾£~Q#õAø&ÅE48¿Vüûê¨2¢î»=¹Mˆ“¾‚w£ êã­ÂU2™ f«KÖÃð~lVÝ!qb6T†Ì½È9_³è¢ ‚ hƸÃæ¿*f:ïÜìò´q‡}43åëFÈ ÍÚÒLÔQ²Cš]n×êB
+ïZCÎÇól6v_°>¿&N]»iY]Â'ýŸ6Ûi‹gGö÷ÄÐ68ö²b,°þ‰–±ÇådERW½÷Â÷fuFC*2ùBäê~« WÔ»Žøõë闰ç]ÇóºÊSÿ³0Tsç¦FÝ{vטXábrçUÏ.‹©4U™¿ø %"ewJ¶Üù‰Y·ËÃi“‡,ËÙ’šÜSø/•Û;ݗ<¯
+ Nj€­Êþi*XVîy€ÿO¦¦uâœ3y¬Š5l±@ݲkÀrΪ|nÖ!¶Ší=Óz¬²À [ÎkE}ò90b3ldéó•Ó»ØóTP°™r7pkYÙÉ}Ó^r7
+G¹ç@‘GAAcôhÕ¤aãøa.žÕ€¨UIî¿8øŸååSüïÚ²$¬¾Î{ÚS…?é0° A4£³ %
+Ýí.8&p è“þÑfý¬´”µ†5Ë檷»n£q°¯MEéEžçyž©hFC8bSQ~îJ¨³±GûBoâÐÀшîÕ •h_ÕE>È-ϵœå¡q§Ì}ÙU¹½Ku›.ËN>ûÈRÃô´ÒŸ‚ r›HçóŠÞˆ7Ğ£nãV“Vo€µ¬ëS¯ãE+ûТÉÞÇb(èI¦”áÒqû.;ëæEû¬r"ˆœã‡ì%“ÅÈ)
+Õ&­Ä6ow[GJV!,àÆ|Å"u{üíÇéݛBÄÍíhþ"zbì]VØà’EA¹­¬$Ê/R7©·¯®ÏL”à¥
+ºZ­‚žqÁYEÅ:gfœ òžeåÍ΀9[àÞ<©ÙmÜm™ô@Dv[ΩXÆs‹s-+xØþMØ^ÍÀWƒÞ5š6÷gèÞä±wYI”'®0Kñ… ‚<üŠ“é9~Œ®Òªõ†@`4Ø u|à.IÃQAë0WÛ$‹’Ä
+xLÆs«Oúíu†œüŽb]½Å·ü=ÚwÆe¬b˜*£ëL_ô-©Ê擽F-CQ´ùÕÖb÷¥)©wÊøQ+CSº­Nhè5V¥ü‰*£²V£kg…ûàÏ;àa™ü˜¾Ñ±‰ ÆBM»?
+º¡€²‡ÜŨHé—P1ßÒ%N¾U‚ ‚ ‹Â] ®Í³Q
+4k5ÆMF½^¯DŸ+IŸ°?xª³º«©¶|Íʺ}ýö€b‡Þor5Õ¬\S^×hÿÛ¥‚òö@ÈúP¤ÎP^þÛG*óà7‰B‹*T»±¼¼òQwD럚O§òà6jFj7–—o¬a¬¡¯
+« ú_«QWi¨YÛ8t¬0 þµÉµëÑe¿&ŒÚ×ü[֒忱äŸ;ex+Ô÷†ÞõJmyy¹e߀ýL:n^ØNß`…á‹®¦ÀëµË~M_êiìO/ÀÝódEKery´8n{³­ÈÁL {Å×þX±âï-O¬¯üme濁ä}–.4vɦ•:šj×ÿ¶²vW §±N\VEœ›E¦ά;ؑKÛç6 îãv‡5·|ޖmÞPu<Xó'¯²ý»Ë¼‚á£A¤ˆ™™x !#%ùð¿ðsAï?G¨uZá|Ȩ¡µZ¶ŠÕoÒÓ«³×‡RÑwífjcqÒ»lÍqÒ·lMCæoA_\¿YGSAÌÑ×Ër‹ NÈüËV>ŸU¹u즋¥ø³ÞŽÞàù”X$›¨œû‹˜Õtâ­¾š¬¬
+›uá-}\ÿœ©d1Ÿæ’"±SÓËMÌÜíAAÅgÎíÃ$qó¢@Jr:›TFþìòp¿‡Ó×[´Éé“pŶrsdFå=á§Ô)îƒ6>÷"ï^¹1”,šÖՔéÛë6&û.iᖕí§pìuÜùۖ;|+xáZ
+ÐÀÜ~"‚Üg¤~’äEoŽ¦j£å1½x9lÔÐlż4@Vë°%‹ʉEÊjA*·[¤«óÓ|,HI½Ë¢$íÅy bR9ôñ³.Žkùg¬ûÙm¦xÓ©Þt ·I- Áñ9++c?`¹þ6¹‘æoÙìÐþû=Û÷Mïø§»_âAA¤(ûaü$3÷VÔQ%-ï›S?¸ƒMØ,ՙ¼Aç²Ù
+GsµÑþœiþŽ «uXˆ’Å
+¶é{ꍉ™Ö=Ê=”ø ‚ ȽHnjæÿfB/%S(ø«a÷kµ‘¢u­së›Ns7¯e žÜîà—áÐЁm`Ý\I„Îd#wz¿À^SBÄJä¡øÉ䢙‡ñHœÞò̖âM•4>·µSH&í^×KywSæX£«7Ð~;,cÿ.²XW0!â0lµžIî×-Æm¾»ráBAîTA\Ÿ™?˜ÐpT…iYÅÐpTÙ;›jwÿ«xÌìè6¦óÖZ‡ãÓ ¶iðdamDHˆJVç+µ-SRÅ&sÇWóæä§ö@ˆ³Ùj7vÅâ¤ö©z¸ )iiªi‰Jê
+Õ_Ykê.b~‚ ‚ HqÌN¥„›a{ Ø }©õo'”ã°Ïq¸„h­wff¡ª ‹bd~ƃg <‡˜K ãs[;…dB±Öð±Ñù»åXX'w_¶pËÅØ_ZÌë
+Fk]þƒ®rS Bªç>·ÜF÷n?ÁsAýÓÚÂõAE… ˆ¤Ö7$Âô·CÃñ’ó¾‡\E"¹+"‚ ‚< dÞ>ÈÎ¥K`ç֗Ýé*oŽ‘œc‚,}îÊmË"^Á¼;tðîP¨¾Ö
+³Ô</\K‘s Ó#‚ÜyR?IiÑ-š;™ IDATÔpDû \Y‰ ‚ Èm宄Â1þŽ È¢°ˆëéQ+K»GÂù~ñ… ‚ïå#ŸF!E2
+Z‡KJ¬PÙՅ°¤º‰ ‚ ‚  ¤à>äâ8®pUAÓÓ%I`!‚ ‹C*8ÿ+åzEC9û¸IqffFà9ﻎ¤Æ÷
+cðl0ß9´Ö;“ÊEò«x]]K«›‚ ‚ r_“›‡$
+¢ç¨G˲¾£~Q#õAø&ÅE4x#Êá֜Âð^E×¥Þ
+mAÐUs^g§2­ ;ì£ùLâdÈÑhbVSAÐ kÝëNµ’;þâ¤/kQéü…!ƒÖž´yÕoyZG•Ä
+ìh÷žq±jrôb óu‡#¹Ó¶"›O£ž]Sÿ(À-¡Öð|lǁKŸØ¨éHÇ.‹ÁªåNZ€ÿ;¯y¶Ï÷VR˛\ž|‘¯Üù‰Y·ËÃ)ïyºÅ÷HMî)ü—ÎÊ흍îKžW í#YÜÉ+Ø<.\‚ Ȉ
+0A;IæQîÝÑ}V‚ b‚ ™¸¹,¯:òÉ7ßÄ¢û½SµÞð°¦x–$-Êó¦Ãú¶‹Õ.B¤Þuȵp#÷ el–×`d6 ÷bÒoÌîH)r-ÿŒÚÃá ±Üq|4´G—:USÁ²«“_ ¶Ší=Óz¬²À¾—,üS½ü'I›¬Vg|\Z©k
+6S1ŽÎ«Q‚-çµ¢žñ—žáirÂÓÁ”Óh]öÛ D†cìÕÆj]V›ùÊéÇ]ìyJÞóŒsݓ%£oúÏKî&CaûÈbpç¯`w˜à¹ n!‹ rçI=9. z#L
+«À#pñ¬D­JrÿÅÁÿÌ˞î×®{ˆ&‚Õ×yÏyRÖŸtX† šÑُ„Rm½¹%8_©cVPE¶ÙÂBF!Me‰Âc"Ût>#AxG|F–Öí{ªæ9_ʎ[O³»üùÎ͒‹É|›i3·f
+[­¾+B¦ñL#
+N\›ðjt×ÏJŠ£þ¡Ë|È7qmbð£Æ#öšÑâfÁÞ]†ž+¾ c£C¦é@­É•(ôLêýÆ&F‡Ìª`ÍÆf%yšV0ÒUßcí:qâÚúÃæèß[’Zêâ¨ãr¬ã}SÉ̵ ÔrC÷_»sëÐz—~¹dû"™ãÕù1§;­ÁèÙÔ¾Ø ú·íRô˜7c¦›Šò³pWB=Úz„áhšÊþΰU,=7oX³,sn¼lMCfÍù4
+esê·µc¶§`¶Z}òÍý‰C$€š$Õ«f[Çõkv…n¦¹%4ÿ×ø‰k.ãj
+xÙOùDᥛNŒód¨ë×åÞÉ>kþ;™¦TŸôÛ§Ø^-,s\<ÓÜg-°v¡ò[¯Ø•´M XÇ>Ù=¨Þ´µû<°Ó)òî@Lº´sVYHvKÝÿÎð<*«~y[×;ë»ÉLðf]å3*Í©Qsêt ¨¹S&}£cfuzª/Å•ºÙ§óm´?*5U¨ç½%xÞq8Ó¿Ü=tØp‹×>Vm|Ñyé+ĸž×MuOìy_ÞrPWl‘¦Üىó¹-fõ‹Î6›§÷›1~¯®n³C¸2Gv)Ÿ}¤ç
+ïLÁ‰SëBËÖ4”–j$rÎ7ý§ƒ‘_b¤Z£ÆÜ~¨·®*ùg5gA‰ŠÔ>UßûIŸé!*q¨¨ç£ŠöáïjmqÆÈUÓ6[·;ï(Ú>‚ È}GyyyõßÆB/坥_¾C¹› µÿ5>7æüš¨@»ÉÈïˆ|êÕªÉДÄ<nÔ>¬eV3Ì*r‚¿Á˜Ô·.-U¯3ôPº±à‰ŽÃÝ+zÑ¶×eßV8UBœIé_Údߢà—Ö/›³ðqd¬«óX‘k:a9ŸsE*¼Kõ¾€a««}Øtؓò*÷ÜzE™ ›Jèßn•Ž6‡n8Én·z]·avËÖðhÛXٖªz´ÞM
+ªÇ˜úêê{Ì=CóÉôǕ•ÈR%ëïºá½@khÂÿtéKµD®î·:÷Ù~ÄÿýcC½úxðy]¥Oÿ5÷^ø~ìDZ±ǾùÍd°î‰Â+ú‹·ïÙnèV÷ MLL\:ÓWÁyj 2OûP~
+ºñÏíÒTB¹…ê}FÓÓäÎ<.DœçG ›Ô2çÎe¾‚FÑøì¡[BíÆxñˎшœ×yȓaBLœ˜¯<I<
+*MnûsZ,„þa5À
+Cè䞳í5žÌ屏är›®`‹sáZbܜ¸.òBâß͉ë‰2%“BâßÍk×ÿrKžOü»>1‘ø—[RŒq²ø¢ìô'ñ¶°?“EøÃѯIAœ
+ú#ð|1v
+û“()hçÚõ‚þ\Ÿ˜(ÆÎÍkEø3Q”‚þÌùFñÉ^ܼ–ün$Çp"ùÍT®ϟ²ُZ‡Z×÷œ™Ø¸nÿ\p|)Ø?ç÷®ï9s½5pý^ÿcGî:*‚ ®ÏLd•Ö?gîùÔ'¬ÓA+Ý¥iIøaDø<`yҘ_Ñï4obøËÁ–ú9yͦwyop”‰sÎFK­‰å‡ §-‡šD{ûýõO²üå@ó®´Aï.ƒ¬þ } ðî}–šÍâÏބbcûÉ!ÿ3,ÞóèöûË3:
+ÆsM¾@X¿– ¼S×`¯u5ñùœÉ7
+XÎ%ƒkVX×À`ϲõ¡^ãŠ<K´ïøŸ¨ó_½u  Sç Y¶>tÃU¤}AäŽAQ»–…­f’ÑH7$†aôèsånôþyË£æ:ó@Ÿi+|hn $Ä¥sëÌPãc ÿ³R"ÎܶÙÞg4ÍÛ¾:XRp¿Òܵ»ËØÞg4&k‡¯ËΐÂÀ;»Ÿ1â¤?¯Ù¦‹6B=doT;L/µTìô&÷AÍw.É€ý“ëcì§`Ëöü‰Ã"çúÀ—G÷Ú;õë߬‰“¿KµÅŸ]˜t¢-}óE1¶úU-ž}ÁŽÓu2&2n9­'}]¿©ÑíˆvïmÔiÈыN{§æ™iåÉ|>. ÑúUd(*%šàÿÑ<,i†žËȑ0V)5ÓÕ^;']/š`šóì³hžêÖQùÊ@Š†ÈU2™=™-³ÍÝ·3Ðbl¨Ÿð'TqòÙGbž êŸÎ’Å,Z^ð\mº]‚%éÕýá5ß×êÕ@ªÈØ´›†/‘*â‰ÿ!ó5‚Ì‚ ÏwåEotÖü¸Á}ÜÃ>g&5Lì‡QîÓ~ã*F½œ,UÃ\gjŒlïW½ËÊwó·L~mÁŽîáú3cö­ 0ŒÍ&XnêÈ/¸<¯bc¶$dI+fP¬«·ø–¿GO¥,Ÿé;²¦¿eOT6Ÿì5ji0¿Ú
+äΗƒÒ …/Ñë ‰DÃãz©ƒ½´cÇÖìæĎt¾Kéê–àø¨•¡)f« «u ×ø5ÇaEgrF£8e̒>;P¼pí¬h~gÄ~ØȟwÀÃ2™CYbŽ¤j>qÀ‚tCe¹‹P‘Ò/!þü{A{zErŽù«±SëÒå¡#¶Ú7‡O„/YªòþQ5:Þúc{ÖaWpÈ6•ï
+{ÜÜwVýÂ,Šuõ³7t’-̏lÓùŒäº¤ÛžÙ[Ô¹uû=uûӂ-336Y› …¼î®0d5õs¹B3ºýá™ýòg=ü¦£ûd0§ÿòç¦|[H£úN;·±{Àpxtæ°\ÛÌV{pDfÁn¾rèù”kýVŸ[žÙ¢¼{³d*c‚’§ùì#²Ü±+ؼ/\K…"%bå³@çZŠ¶E©Š{
+ZLHt‘\‚"½Z$—`ªÈÀñƒðÙÅT ÆEJE•úzä'^½œ’â’¤ 1 D
+@ 2_ãsGd¨ä#e Ö¨MÕF À÷QC³…5S©
+GðNŠ‰Câ¤tdá¿Û-jràr̺uÖàwÉT"›œ[‹á‹-K¥€;ç©Ü¬ÛrSÔÍjA&¢ç¢àwüå¬û°Ò|¸HWnø&EK²²t˶Hät¦Ý®oƼÕleŸ¦س3d´•wLn›3Yé@iŸ]!÷©‡úx›‹ãºþzvA‚7êMrԒ—2å}b?`ùœYï"º‘æoÙìÐþû=+|Ó»ò·»/š\ϕ®Ü ÷ ¾·êÚG¯+Åè!{b'r]å•]©·©;¢f]Z†ªâ1ó©ð©bý(Â>ó´=ÄÙù«áàׁÀ—ž®×›ÍoúÞ2Û‚ ȽOJ93u7qJD1+/»w·˜@¯QËð‘`Ëö~í ùåhûŠ±·®êps¢}wUsv4­^9e›EiQÁ>’˝¼‚iŸ^´M;n+²Š7ÅC‹‰½õí,²¹¢L®RìÌbyU\Üü^¨%èdx*õ¶”×ÁHŒU©"¥¸@IÓ¨Hˆ‹ ˆÏ} ó"ÄÈû|*¡áh®Í
+ÇÃæÝFÇ̌(Nú–­irﱶŸý³M'NºÑL‚ ”(žýVçсñ)©b“¹ãp}óææ¤{"ç°Ù<§Ï&„{?éK$]†Ø-ŽG%u…Þþö çKº¬Êúß5öõ{ tvӉ·fäsÕ^Í9?^áºïq:}®8jolîÿïᨫ·Ù¼s±9ýJt_ù>!ÓxðÍÖÝ?>%UlÚÒq¨×ÛôèpÜ|ýÛÆek¾ÿ[k]«{<úg›|'ÝÙm哼Ÿz†“ù–uFä}yFCށìO¹”Ï.ßè¥lŠœsYeçïX°‘ÍíTn¯O\»i]MÍ9¤"õO™Ûßí³Ìª@f9ì?ìè:êù.*©ÈŠuzë«Nç+¦âÝHvZ®#ù<4w”o?Òûíuû†Ô²Ѭ ®m.: ÊâØëhz¹‰Ù°hþ ÈÂÉú­Iÿ)Mú–­i¸þ3´f×<jxÿ{ß+:;¾ló¸ebĕy± îÓÕvGö~e
+xACæAjîJÀìš,Ù0=À­ÙŠŽœ¾Þ¢M~ …+¶•›#3B¨øxâ]çrAŠÃôÈD9LŸ8Ä}f­l ]ã
+_^qÔø›G¹uõ®}vý:Fšâ;{.BìòÙE Ó´ïÚÊtþ`è;Ò®_ÇÀwì Í3n®¸ ç©!†éAî0¦G{ Ó/qVåÿ*.LÛp¾ã²¼áВPþ›Ê¾o¿7«ï„²Sf[w²]dIÁÇ ¶{Ôö ËÅ$~J⦄èÑçeêí<•ÜHö³ÝxACæA*NRĦ ¨áˆ ‚ÜA؝Þï2uf§0ܑ·¥ ]êhíìhªŸ’Ôkµõ/·N\°éþŸÌR•ùPȾ#0
+­Í‰£¤ZcÚfê/~/À;ÄJ¢<õúNnðˆ%X²dKðöA˜|ƒ ÷
+sê½p
+≄zÔ½AJ:›~aY'¢ëµÝîO³ŽöÞ¿:è2€!ÓöŽàÙ ì9KKQÑՅpWº¹´Æ¹`Z
+²4y3ó }ÞVå7'ŠÐ-â‘ý¢­r-f׬;æϒræú³¤œIúPÁìã’_/{%ظ•Q/WǦcL•VŒK "!”
+ìw.GÕm㟻۔.£§{ÚÞˆü#WU4¾ár¾h€Ùdö–'•$ HÒ|r¨o-I¼û/Þχ£èŸ2·¿ÛnÈ¥!UéüwîKãïÈ㐚‡µ¶¶^ûVFŠ*7¶$» Æή7´Œ}¯Ó%ÛÚrrÐ󈺲r}·÷ÀÀ÷ðQµFkëìm•ë…TĪ™.)°X¦Š±³ˆ¦–r露Hª¨’þ·2«HµZF¹)àcBlš„[1(#ӑú§2EofNZð‚†Ìƒt6}J›~aPŽÃ>ÇáœâF…À7­õÎÌxÜô"¡èêB¸+Ý\Zc‹ ‚Ü%(fq&ˆKm‰ï’ògI9K̟’œ¡æûZ½H›–bÓã%2Á)™¯oß.…ÈÒGDÏq»ÁàùÌgÛieÙE{f\”Z‰,¢g–›æwÝü×é¤ÔTCáýºG߉äžnþöº-³©©gÃv"ç|ÓÑ:ù%Fª5úgÌí‡zëªÒۀå;7ûÐruõïû>qëRE7B†'¼áˆ;£’¨£–Š¹#“]n×ê¬F˜œ„ ‹A*`Ê·5íþÏf-¯t¥Žì©õ@½7àTƒà9ØÜ`Ž…zg¹öM²æ IDAT\Gü}k!ðAssksǎPޖ$îùÖc­îS'ªY~¤ÿy[ƒmç;{ûq´ü7•}.%Äg¯Y¼-îÞޙjQÖrퟺÔ϶ú?ª×¨`øóŽæ?Yìc¡¬&RH•Õtµ÷ó×BàÃææ×­­ÛdzQdºËÔtiM•d'Q¹øÿ½ç$ЮRG¦$^"…i^Š“P$Ä%xá|ڐ̣OfÅî€ 9¤f}EäA!‚ Èçv¯
+±éD¾|†¸ÍÎ0+tƒ¢7ÈâÓ£†#‚ÜO È#²4)þ·æv¯
+º3«Žîþ²Å¬-⑽XĒRª˜|–E’RY–”3wП%åLҟ8€
+n Nûn÷gÁè4èŸmìû¤×@SP´NŽþUëéòºí.þìâü-4:Þúc{Vç]Á!ÛÔ¼Œ©H€dŒmôC‡æ¹ô#ZïáNv3óŒ|åà|Nãøp4¼_7OÉ 0Õ/‡áq°>–|+Ž'Ž’j=\c’ðÅÈw»Vþ: ~ h]Y€û§¯¦¾Öøã˜V6<¾\+ÓbEÞä{ˆóµ»ÚÚOõ>ƀ T~1œë’ g¾%Uä<dU½Yt;ÅÝÓÔ–M¬›~*ÆOS1I”æŠÛä{ ó"•Î¨”uû4áöÈ8ÞˆÿÏÞùÇ6qe}ÿÌ*Tž(<ò @‹®2TØÐ
+s䇀»Aéƒ÷j/ Œó°¾æ©fî–ð
+t=&uOôÖà€S–ÃE9:ñ5ꡏ4›öªM ÅT€ÞPêåDeb€ô%5Ý%­êJl&nˆÙë@³|Ž`”I·4ÂÛþßT9W½bžˆ+kùI'€u!F¤H‹Pîu@—½µÞá%›k­Ÿ˜†u]Â^ÃIsتÿýñèŒHö´ºï˜‡y…JÄ}:Kk}Û$/^'kùè<5÷îÝô´¤CµuØw½w3a8é¡[-öú:3-'£­Eòóo6š÷k;¢¼dsuë›îêïµ[Ÿ5Ž]½m:k瞓­¼ds­õ˜É·«C°Ó(´uqȱ¹ØkÑÃ. sº´ˆ¦Eô&8Æv}%W‹dëÄáÛQ&
+ûûr4šz˜`-­‰ÖÑ{qläz¸°(·¨uô¢,mT?ÏŽXQn
+D¦÷M=Ê®xž@bþГ ý[¨q;ÅNñÌ$OGùè/Ÿ‡ssõ©_9?J¢é—sð+@,««U<€çÿ* AURÔJ¶YFˆ³<B+*À÷c4á1þ<+é0Ígd® ~ /»ªž—×Þã
+ŠÞàrðLpq?û„äKŠkÅ¢QÎÙF¿÷A6k£ÿ‰Qñ\ðZX–ÛGŸ‡N¿Ç½¶®þLg uS{ÔûResCWûˆ=µÃö”bl%Ñøf{ó‡{„-IDŠÉe‡™”I
+ ï÷öüvkÕ6Æ~ؤØHò“´ï”­çšDôÊ_7 )OšºÕ¢@„OÊ{Î>­Ö>@Âs!/ÏÙîq~ê›äŒJÍ+&Ç{"Ûµ4lØ°Jޟu×õǔ+Kïç¯g(4ïˆX e†Ý‰§•.¢†#Ø/
+ODg‰ºç Y¿—
+ÅE0ÃÃ+çáÓúx}™f ¾ M`/gp¬“¨ÊTìK®&sùè@yľÌÔÑT·çv´òimÀ:¬²àÔÐGMú¦s„W*Úÿ~½˜ü±`ñҍÍuOI…ÕÀ¿gù*ß
+ôòÛþ:ó$_¹Ec½ho~¾9«5“/@uOuEgD²ßé¼Á^¡œ›
+« åÓß^/ÙG¸ÏÐNõnˆ‘¬RŽD÷:ÂF¦Dü  è,‰^îK¾O-G,R¯~ p'בòò<>zö»`§-t‹Åbô5¯¦"âøje‹“f¸X,ÆÒAÛ^¹P‹ÅòÈxàrç…ËÅb8›”‘O«h<ê¦'¸X,FxÛŒ‰UÎéöqÊÞïg¹Xlš ]r«O>eÕêL­žÙUÛ56­VV;±l$ýì+å¶O<BçÙ[!×_ø
+ ¹XÁºYN.O´®è0џ¦‹çäú˜YË{>¥[;ŠÏ’‹x` üKôB ˆûFRôæWÑp÷gˆ«1º@.*"ò$«øc.mǹ! üäpV“¸H^–ÓñL–·/9{LP’Â#þ¸E1Óf§é®o¢CXPZ]ß6ñ–ÎÌ&e"ðñ©ƒ×èÏ>¨˜3Ö\Än$™fôÏ[dùÜ¢ Ø¯«žØcyUm1KBÄR-¶B ï|,Ã0l&]n1õ ɑKQ¾»2E¤²`€Ÿá¸è0PóÄÉ´ ‚L€jõìT÷Ìk¥0ì¿Í~i¢D ¶ë=.)mUV(Åqã\qJÄêŠÙΈ5m#Q–‹DёŽ¦:
+ÆÁ6gNÕø ¤ÜÄCGÂGËÕSŸp¤**`x OÇ7¹±aa¯H¬€ë££d|➠OSëÒï(xÙk¥S†‹Êâo@$ŠoŠÊDqãÙsۧ㋂n5ü¤bBŒ¶±£ýìPïÓ$öŸÇ§íe¯¶F»›ƒ?ó—¦Ä?T“3lxšrœtý§F÷’ú§Q½Yl#ÅÛ)F膝Â÷œé·P@t
+˜É(3…GyŽ˜#n“ë=šÀFƒòý¡N~áùªYååΡ÷Ôù« 5ä_‰vŸC¾×iº\Š¿ãd£Ýá -z—ˆûIÖ¥-‹[’uíQ~ìïÛ-‡€gnùô»õž³ž¢æA‘Äe9‡è€ á¸E¥P(òøèAÐpì¨îjª“®]¥=Üo°¦†,y÷A%¯R֍¬kô7Ì©¡šìM5«ÖJµí¾„ø£Å?Ø(©{J*}ªn„4¾´¬T~ÞÕä{­®ü1Lµ·§±ßšËªÉ0<Ö*¥Ò'¶úÊ4ƒ_[…B}Y î)©´j«3,óÏ 
+yú¨è0FþV¼cȺ×ü즪'ªR_\Ú®M*í@˜8uÔðx–‡XÕÑÀç]߇æ­òªMÊËÇ>ÝGƒþ#é ]ów#Y{È|fj>7f÷÷%òÀ¨ß҉#uêœg@ –&©>záýòQ¿IýìöÕ{÷ \±“løŠ¯yÿ캷2²ó9±¾ÅcØíj¯×6öü*QÇʖbC‹=8Æ0?‡l-ñÆ&e©-Y›º‚?3ÌÏAë^«øév² `†Î?Ãà 0?í‡lÀ
+ÇÃñµNìwƄ†#¨ZœtKú2¨‚£ge¶Z‚¶cæ’*í—öˆ+¾1{+8eï÷Ϲ(æ*Ì«ð8[Ï‹Y3˳´›­z1{µíڃ™]+¶ñrHLfïÁNg,–v‚q3ç&”ëÌ –h±b™“é£Xn1õ ÉêϽ買֛#¼ds­õÓ°®KØk<íeYô¿?ɞV÷}ٝigDo¬}ü¡ŽzõqDŠt}­ ƒü ÏÏ$*HïnhÖÕE¦@ö;çx#?ÃAÕ÷¦Î²_Ûå%›«Mm½Õß×o}Ö8t€ñuÙÉ7FZÏVÇ뗑çßљ[ëÛ&yñ:YKOYÆñٚ^‚ú0 ·³¤:yEo‚cl×QrµH¶N¾e¢ÀDÙHx.
+ àAÈ[Pî‰Þ 'Äyჲ!ßPzîYâÁr?Ÿµs‰+ä!:enµò3¼µÍ¸fžD¢¡Câ
+1AÞïß]k[«¬â~LÈaaç¹W IqDþ_›ñ‚Þµ;]²XÙ68º.êÛô¬yô§Q¡\T?«Ž«?hÄ)(›Øp´ö y°Rg?îUl$ùÛA×–—äUçÿ5ªŸþÊYwî.v2älÙS£¦ØkqO‚«A¯îO®Lbn>6‡ùô•µÜvZ#op1_‹9- hí&b”aVÀU4ñP‘ËG/°¬<õ Gjø‚G´£=ð›°Éþh…
+ŬΠn=îÎ\35þ¯ÑÄ{bµ&u3+iˆÄU*ä¶O<¶¼EE4ª}¶à¾tKê¿ØƒIÎm¯&*Db‘Xc”$ŸO”¯Ú¯fö¥–”XÍbÙyà¢7tz¾bØ *€Bp,™âx6
+ùë¦í¢6PŽ‹­'«:,¬ß|EÆ)âóìˆQ¹ËþÎUN<c§®à~Ö¨FÓ¦D!¡óÅIÀ"—†#."k·×檅d±èä÷Ñ ,O=†aº?ê’Û—†SSÇè^ ÌJ—¥îºù÷œÐl‡‡ôó.[D ,瑶*J0™%â‘$ë*av‚ué×ïÖPTºï@<@Ðj¸ OùÚz¨þûh`oâÚÅÉñòWTн"Ô߲ʕàßMÕýc æ­Ÿ~|4¾ÜxüØñîcœõ]Ö¸Ï(*‰ q.ߒ÷SۇýáÛÑÊ-Û1ݞ盃ÁÓÖæ·]#c±DÖØÑëlQ}Ánü«søû1D•¦£nËÎ|Wl ‹¹{Ž;þ6¾•l®m}K_ðCemH8ۉϛØÄqê»J÷õ¸ç¢7úՇ¬—¾ˆ×ÉLïymTêñù›Vð¶^jwٙK‹óµoþt¬õ§ö4¼Ý?dœ,)ä¢L ކþf‘¼˜œ!.æVò;Y°l/J, ”¸.
+@À*L*\\R‰kÍ¢—Àòp­"æÁØø*LšUë +Â×éþ"¡tßby’zõKõÑ3"E€ÞrÊeŐ©ü[KHyåxNb>8#ñIŽqù¢üç¯ÏÆBr´ù›ˆ)ô«¤–3¡@K2¼16±g¯žùƒ9·IÉäªgøUòæbå†Kj´HAdK÷Hã—ãê' êü;Šš–Wؔ§ %/MÐjñäQɊÿèɾoGº:š3P¥Î'fZ¯žçù¾³̯™‡¾Êف(ß»1éçoÔôàòQŸõ˜E¾?LlTÙM; œœ
+[,áI^T&"/¶Ç—¢|ߖ”V6϶’“JP½z¡yéå-ÞÖ„þ÷¶Ñ‹Å†«‹WKÈ̕[Dµ¸ zÆXÛpÊ‹Ù€c\åÒæu`Ί¨»¬ëíš=ª=ú „y è2,£€[˜ byñ›Ä»ô…‡ÀN°öœ4]xXR<X÷\l–ûP‚@¤"øܳÞÑÒxä}ôYqs:?pÚþj³±šZN7xôé9s’Ø +”a€0À0H$ð¤Ìò±“¹•}I±÷“üqÃ0J¡u_v%î)ÁÓV%EbFrÓñ€Pˆa˜g‚ËÓ ÃÜ#í3†aÄãrkÿìƒG[ÔŽa8¡j°Ð\òxç»òq[kyè vå†x£–“ñèrn“õN§9¦‹ÞHš
+-n‹iдØ
+ ±€@,7’®
+G`8L‡Ï¹KÃqÑÔÙ²Þ?0 ›#¶õ«áÞFš§¬lŠd¹´ùó;÷âëL9ÿ¯*Spܯ’ŠÞû!!˘Ù=¼ª+6Í€g7eæ-ÌI]6l[%ï¼SÙꦝ‡’֏WÙ8Öm-¯êÿG®ìÙʟpƦpm \¯¥êK
+ä*ÛF9¤yÀ0¬õõÖ¦}Mä“÷^Fî(ý5"?Y3Ê.=¤¤‹°´´¶µò3<Ì@àšx¾«;Úý~·êiAÎãBa9lizÇ^¼*Å<wðÆ4M”Wiüã©iµÎ
+Ç/Á¿*·¾=2çЊêØÝ@–p—u½]c>#ã&<±¢¼}ôžen@½¾Z)~Ëëz‘Ìí*µÑìg5óI+¯ºþï˜8Ïݲ–Ë}±»ÁœåY –èâœJê,ë7¶ä¯qfE Ã
+Ì·çˆÇ8W=à&Ü%[0¬ÁÕßÞ1’K"Ñú}]Ð%¸òÿ&ëÅ}±4…@0úœMNâØ
+\ù¢)”¢º˜'/WŴȲ´Íà'jÍìñAaɧYÛ~-IàØ
+\¹Ód¹ü–1 sxT!?Ì<2Á£©Y¡èîé%goºü ŸXåòd5 ËÎ=Õ¹ÊiA.3„_
+cgZƏ¢,gæÜ×$•µ!þRVk[£7âk™…4ŒÁÓ6uµ’’ɵ{-ƒö±4ûóf¥PR£BF»‚îvÏð”hÐe•S$õ¤º××:vÁ,E<c§®˜‹íÉC º,SV€X"VW«ôO+¸A•„ *)j%Û,#ÄY¡ç§¤\*x…OC‚oZ¾ qÒظZd>ê8E«?HÆ0v|–µ]Oäø¹7Þ Sö›Ù>Ãmbܱ]ÒÓäLÝφmWF”[
+G€–Úhq‚È8U+9Ž_¹èÏüâuÆ|åËO(±°¿oÏ-bòë°¨JJ¶Y–ÇGpùGÓ3‚ŒL¿ì[î£K œ4µ®ö9Kýnq·œ>IëróÑ#¥‘pÎgWÓ½¨éùÔÃn”Ê¿ËñS<ûãû™Oÿœ*·†#Ó;0¨ÙB27üf9u¯úÆí‘3´­Q_§¦˜á¬+4³0ߊÚœçë9CÛöêkÔ${͚õ0wƒÒïÕ^ça}ÍSÍÜ­Ӄ]ºSW_uµ
+hA7~Nû_¦@Ђìñ&öºùe¯‚ ËxªÍ=áHéD'#ÌLü¬ò“´ó`a-ÈÄûúµåyº]J£‚d܁¯Ñ[Å­qÁæß÷(þÿP¾(OªÃþ9•Oë\}êÇñ<å hA6 À‘,öˆG ÃÒfþbÿ‰%ÆmÌÍàÀÇæpþ@6l©;ȐQ>üš><ÑøŒ¾7áI“:-&ô¸_…I…oæ2ôѧÏėAãˍǏï>ÆYßeûŒ¢2‘˜çRõ~`jû°?|;Z¹Ec;¦Ûó|³`PrԀ¯|mýèÙNíÁ®ð$(^hêpæ÷Â'¢#=GߎJ6׶¾U`-³ù•µ!ú‚ÝøWçð÷c<ˆ*7*LGݖT E®6%·Ù6¯ßRO[›ßvŒEÄYcG¯³E¹ãÑ4ÇtQ¥…æLBʵ\S+ë:{ %·~BÚÔûhæÔ»A<Ï©÷ù4*L½Ï.ýÎ=õ³SéAtF<¤ý¨q§ÖQšj¬ñwy’$›Äj"«kÉñfíVV3ЫÞB±ßûšç()Û/5>M&•”KfÕýœ¤y—…:m%±5™%¿ë¦ò¸ºÒàhûǞº7ÐÞ¡Øô†vdF4þB<–»e÷Eù¾¶¤”Nu«Í®Ã~ëm)ÃYO×okä»#݇åQ蚯ÃÔ!ÙÞi*äyYH£‚ rÁ&ì¯+jÌ­^2:ÜüÆpãEOþr@BÉKaðƒîÅÃMÛmÔ>…ÿ*þP Ãt,ùWCi¶@Ïs<fp‹FÆ8õ»ùë –ÕáC{ü…ËŽz=èw–-zdð\ð>ÈKòÑ<Õ¿&h8:ϸ¨5" ý1DÚ¯ZM
+¾FŸvÌè@-]VÊ%)‹£#ŠœËöfˆØPÊø0t“•oXvÂ/hÞ±@’n‹_CÃ1«öY¦êb&¹*ªg|©åIyÇ"ŠGÿ•ùËW½”Ö\ëè½ÎŠì–a>êö¤$wË«}¾>¼Nç8f×+r(s4V^5øï˜ze¾r¤yŸ¹ÿšh‹(¤èÞ-‡†º:K Há%
+òIÀ3)X‘ŸÎs¼2›¼£ 9úŸ¤Fâõ«×;3¢îÓ,É#¨9ÍÖ=U¯ö1—Ý©>zŽvÛÞO]nÏ s•ÇAZ:‹8€3\(Â9̲&f±ÛB,¿|Ð]xdqஞçù¾³̯™³
+jeµJµMm9‘œ™n? v@[wX}L*–úûÂ'-r’TÖêû¯D³´1Å;­üXWà.„»âÝÊÙyèàÇh{ªJ*•J¥Ò‘)ŸH.8ÿ˽ĝ7öï;½ˆ=ª=Dµ¸ \‘ôó£¯V¿ˆ?‹WKÈ$«“g©ÄFÂ<P)¢FÜ-¯ú ©õ+¾÷ê¸?ÅGPF?Vð´ 9ó¬˜}å))/(ˆœ $”¼4A£ú‚H¥Rí¹|óè…}ôþ&eråý|@ÿ ¸o$Ýô94U¦ՊÍ
+Ù™b³‚\MæÒpì×hÝ_™ 6tÉ­×ùR÷š5–@˜¦¿ ˜o–<םËé–IfE\D€ét€›ÆÍsîF–Ôã·;²ô­ Û%jƒ5x“an…œ-55š
+n}vkç;¹Éš€OPÂL¼ýuÅÀ®:ç…Ã0Á¯\Ú– 74ÃFg€ç9n˜p £É
+ì4Nh[$ ÝÕU¹Ó™™áë55Î/‚ì3'÷#šzŸe9L¥£ lDqà–cz‚‹Åb,C»?°äÒªJ@Èܱ(W¨‹ÈN‚'‹ZnU<µ'ƒ†Œ!b¾p,ç:á’Q”ç„‹Y†žúéä[ Ã<Å®ûá&<Å ErVLõÔþ`Fî˜3ÊMX‘gZÖ~Ç
+ÓÁS´é9ÚvP/œÀ0 'HÕn£7%p$OÝôò•„j·)”:™}7 ”¥ùñ89žõ#§—›dò@žyñ˙$6¸2Ï0_Øð˜ñx °}bÁ$œó¹ÐÇq|N
+¥E,‘ËaÅ6Yáã-²'QœzŒf" )!©J*×|Á$Š÷íN]ZCô9­¼E$¤F_Ο†q9¤UDI½–9SÈ"ˆ¥º8§±
+oƒŸD õ¢—.dÛ
+xØç<âÝåœö¨«ʍJˆ2aèáKîïiÃ;vJ¶\<õ–tÓ§¾/H‘cÚ\‡S=­oíµ]Ýôõ_haiW¦…¬6ó|(ï^jOØ0~͖ºÏ´8˜Ë†üu3wq·låU]±i€õãU6Ž/eGŒò]>>r;šÚ½\å "pÛ(§Î¼ŠÌµ\L}Óÿ\w6) ÛÏ0‚.hˆHŒ]³(ësi8â"²v{m®ZydÃ3DžŠˆ_¤‰¸o´½ÑVLÎI±h¬ª’’m–åñÑ<ÌI§YæVÈÒâWÂ>˛"Ó0.“´Š(þc™ÃN°öœHI@,qîÄƅ ŒðúõJ
+ú{áQ IDATèÓ8ùqL,R®&a, ?ŽÀµKàde¼óm s‹ÉZÅûIH¡Z÷eWÂ<mUR$†a)7‚Ðìj…¯À°8õ¤ÊþY¡+ö4kÛ¯%WâŽ+wƒlJ!c+„£ ¬¦)Ì$6q€úß®Ò_ƒè~õ“$†aÄãrká[Lð µÇVàÊ“’/ž£Fá,‘OªÿŒ$ÎU^¤~Žâ€·u}T»+§Àã|iþt¬õl{ÚxÑîòS•b®LOÑú›EòbRޙP¸˜[Ìh0}¡g®r°½(±ü-”Yžf¹ q½ë‡T}ûÄ¢øE½)ÜrÌcÉTGY©ò_Ê!œ—qÌÞ忄Òý=0pÊ<¹È Ú“A9҂|Ô)èÉԌ¨¥ËJùb$V!ˆ\`¦ûcÉjã”f ô1÷[[42Æ©ß=gW÷G~·~a},ŠRú†üªCÿÕ¯Ó¡‡‹êð¡=9Gc³¨×Ãýùo>(<–ûҊeE¦
+Çr®3.êI¥ëœÇø²¢-Ü~^¡”Éþü: ’
+wf:)dZZÏsA_ÐV5ïÜcR¥üƒ‡ä5§(Žõ
+_sCü,å*¼BÙý^wþ†:ý—´ÎpNï~yS2õkËS7ÅëìMÜõGfÀ´.qÉå&
+²²‘Éè¢ö ±ìPoS/ÏyäšD{3”ÿ¶ºÉ¢Û4↻Ëõœpªv¨e
+%¬£ìŸº-¯¨ÇÇSßÚÖ*«X*‘(;“*©¼¸=§^rˆ¡Ê|…qoKžØŽS´ì@_bsà O´¾:úsGà®5ՋO­øn°¦ªv·»/Ú)±(tÍ×ñšEI‹è Å
+—ÒhqÉÁ£uŸÞ«£’©`½ºÞ¸mÜUK’0~˜Ét‰<ò%†%d!Cå<B‘T¥\¹SçúÄ©¡H²BŠDûi†|F%‹™(C¬&ÒVj¶µû}£Æm$; žŸôù~a—@,‰×äNë_L’¡àub£RDU>£Þ—«'Óló?Æú~±«Öà¤}ÀM}Ê…×ïÙä8¶³®Ç¤î‰^C®)I|žf`¼èPÉÐü¥Þ®/x¼Ã't˜r|é8¹vÍY-Ýú‹£¦$¤Ñ{Ñ/U÷@®rœÊ•Z)ýó­Q}¤Ù´Wmú]|žÀÞШFœœw•‰fæÃÑ]Òª®ÄfâK•½.4Ë«æ˜(“œÅS…÷Gø¦J1,qe-?éHœÏ´œÖÃÔÙå6£Ëñõ(sH®}ÞÂ~7gB.ûi<ØyGÄ#Àow@üzH¥Rí¹|l¸°Ñߤ¬’Î0‰@ ˆ¬œz_&>úEQzD<t¤úè‘Œ"vë-§\ôÍÅQ¿±¿o—//ýü:³È=_A9ž“ø$
+8Æå‹ò¯Ïúû8ÚüMÄ4àQT€å̜e»’JŠÚ)«µŽ‹­ÑÂ.Ï^=ó;Gð´M]­¤drí^Ë` }ìÍ~¶¸^•Ô(°~ó™]1›eĨTkmÒãJ,Ý#ûÔORòjýùw-ñÏN<c§®˜‹í!ñpQ²-*Ùný@˜öߤh†|F%[/#אäj2SMÑå5“RñƸOpù¨¿/|Ò"'Ie­¾ÿŠ’…“SakƒZY­RmS[NŒäï 7à’ëiµ©Å n*ŸÕS~L
+#SyÌ̯ÑLªWgYF‡D‡ñ5ñÜ¥(¯Û’r–6ÇÏR®òù"oñ¶nŒê?ùJñj ™!ô™¨—AÏXüê†S¶X,‹Åî÷® ç¹Kðï;½ˆ=ª=®0ÔÅ>Ê(àÇ2‹3-§õ0uWû×AS5iûrPüsúh°ûÄ¢pÎÿ&ÿqHÁ@OªDз‰Åb½ Í&¤¾@ ¦rµ…@ ²‚fâÄò$õê×sæ$±A&V(Ãa€aHàI™åcç¢()cæ™È'|œGj9«B1†a"äG‚ÙE–]Õ$ùb2ÐÁ© ¨ojg²6š&©œì9G[ÔŽa8¡j°$’Y=Ñ>C¥i.çÒDÖÓEo$«‡»{DëZ´³k*éÿ5ó"…ýIÒñråHgOž3–¢V̙?³~Ҕº“YGUTä3 ¤F‹“HæèKQÞ´1îʧ^ÖDo»;‘„ñ¼x°£úe>X*æãÏù­±D¬ªÕ(^6§€¨VQë)j%Û,#ÄY¦üàû1¹*:úó¬ß4œ‘¹.øi†ñüUcÞ%q-WïQq‡Ëþ¾ów ÉÀ;+=ϱ^ÓA ^!€Ñÿ$œÁ÷®_½ÞI垓,®Q~r8gŠÇ={Ëà&Ü ¬ÀkÅ¢)géûx8®òèô{à›Žú3—±çï}©ÒÙЕvÏþ0ïÕ5+‰Æ7ÛùÉø§¤ "3ù+b&e’ÌâyYV¬¬Tζ\j¯qÝLù¬9ì#‹KÒMŸywœÕp”¹Îyhz‘µ
+Žh‡é(2óF‘6ú‚[A²s[ ’ã„6±É^3bFl˜3šž‡w%¡Úñ7°4ªÉ58†aI9­dþ;2ÏLiÂ݀RW"ãnzõÛäø
+L8ÐÑd6û§Û%Í»,0ÃС®†æþKbXA9¶KÔkð&ÃÜ
+MˆX ¿Éõև*kÕªjÅN½ýS7#Þ¤4#öXÎɀ’;Çæ¢@½äCÄ|eÎÙî8EËt&6S4çÔu\ýaô§QáuýË>ÙXzöÚ}7XSUã/S¹/†~è{Ï>eQ6¸ hJi4.ìh˜fë”/…©Æë?<âá¥!~«cþÉHþÐ;^ƒg5ùËm§5úùô@ ‹2Ÿ&ÚšðFÞYAØ˹„Ò<£ôŸqÑÃv2ÂÜ„O¹”bB\!b¢LfüM[»¿Ñç5îP’kHåƒg )2PRVî´ÞùåNQŠ1¸d(xÝßo•S$IRÊg©Kæ>»JFQOª_:¢ßt$<Õg½¦F­’‘eo¿M¹$7(mgüí~÷G<ãAÄrƒúœÖµI¼ÈFәfÌÿŒô^´«6ä•ýboäÿÌÌìiќu¨d$Žš­I#95‘qÇ+²áÃ.à§/Ê; Y×ßô’a˜h™AQ]ï&ƒ:›åUÒYªžªéù?èìHžv>oŒToht<…ÑPJÌ{©öGøÚâ$’sÝ Å•µü$zZy(ñÖâ+0íe¦”x>Ž¶Ô kqp‚Tí6zSCq§ûA=E†ákHm“5mª/ë á×hnr8HÖIT[T
+…B±Y‘)IŸ@yľ£º«©Nºv•öp¿iÀ
+ À©¡šìM5«ÖJµí¾ö¿_—ã+•ƒï5Ù¶–?†©­²ƒÞÚu"éoóå·7ù†ÇÃZ¥TúÄV_™fðk«P¨/ Ô=%•Vmu†eÞàù|Ÿ%W£+•Ÿw5ù^«+ SííiìO®°iy®Ò\_–TƒpÃóò*eÝȺƀÏÊ·½¯+ìûë¤R©þð€ébܝ’«¸©`ÛmójW¾ßÓþt±âïæg7U=Q•ú¾3¸<0zÝ(ã­Mu›ž¨ªk0ÓÃøU¥¨ˆºà¢ä„¨a75rjAQDô©j·!³¼dËFw zÆ_óß³ƒêöˆE!qÇÁàNlæ¦8k8ÖÆ5€á0>綿b 6,T¿â~‚aÉ,IYá&<åkëçõØVÐæÂqo#ÍSVvdö™œq•K›?¿s/¾h”£ñÿª2Çý*©è½-ò\ãnÙÊ«ºbÓxvSfÞÂ|aJìeöUòŽÁ;15‘­nڙ)©Q`ýx•cýÀÑÖòªžñÿpä
+Áž­ü glš×ÂõúPÂf‚\å "pÛèÿgïüc›¸ïÿÿºÉ©î¢0ù"¨|rQ©°[*l j̊gLÃ.՗"§ˆ³~4œ¶*1LkœV]œN‡j4¦ú¬1h€ƒ8L´6ÓúÁLc8ŠƒÚήF•‹J•‹šˆ³JĝKþþqþq¶ïlÇIH ÷öûîý~½ïì¼ßï{½ßïç‹5, )Ýò±ï³·íi#Ö=¸ÛTÔðo„Q‰(%t%¤~áajŽd—‘+Ñá°U„=;ðûÇIæP”
+©]¯ÅWåþ0øá~:Ø ;é­|¼•/¾ìuñ¯Eñµzë>—m; %<ÐW¼öƒžè‡*Pâ lèt ‘Hä·‚ð£}a,㯬~)§ÀÎÑû. ¾JZn;éa‹í lìHÄ¿#«2¢FsjË¿7*‚•Õ/¯IiMücËÕ軚ƋmL4َ…ÿ Ûðn¶âsU}â^HäÞc<ïnî8©f'},^QÙ5zߞ½ Þ\¯S¾ã÷l#
+7¼åÿNóŽÊº›?&øõìG¥&¸?Y¦‹Ø8ç –°
+¤34îÜDÌúKd)ÓSšpm“ë€M»–à¾{ۏþ;÷ݨ™ÀÀ³°OOéÔÕâÌXØývûà„…‰
+Â\N;À»ƒ
+Ó>㬔óå…:B¤t!óÉ)ST,²0Â:,+aGl•Ù¾/9Xg'Ãí¿ìÓþ&¹4ã¢û‘ÊêêŸ"ä&sð[8dÁÇÅcäJ”á@ð/9ENYú)‹ýw³$˜Ç Šˆ ¸‹èL¼¢sê…æàÝç]º'p¤3íóQç]º5ÉàöcÉ'Xy›/Ox—‚¬ºlᕔõzÛ6Ã<+)¥ Ôr¾Bq.Ò"Ëض%gxµ£v—77cA£¹’Êä¡çUí/Û÷iúvØÞÔ¡úù!²°ß­ &rW·v¤Ë˜Fû‘ìÙ;®@ŒëڟyÃkÓJÔs@"lŒàyÓrƇ_Û¯Ùa÷_ S·#þAW£¾[õb­˜¯d.FK2v½¥lîˆL²Ìí`ûï†[Žf4‹K”0–Yjà+’kòLW²†F¡£Vl…Æ':Ǔ¢ýôX癮œß¥+xÕDÏ¿×V¡Þ‡Øô
+tL“HdVÍÏb0溃W{¶ƒeK‚ ƒÝÑsUH£˜¨%W0E¸äY‡y)d ÚzÄè
+'½•·ŽÞO¨¦³ö¸‰—9Ã`Uß¼ŸH.*œ¡‘ÇjNýp¿ ò
+ëP€ÐkšÆϛXÊÉÒîʚŽô†J`‚Huã¡/G-+Q0=UÃýæfä°D>ªs‘QóŒÏu÷¿ \b̍ È@dÔ¨Ì O¹X NӞ¼ŠòŒh0¤mô¾]8Œža<´Û{Ži÷òÿَÀ ­ßbÖÿÆÙóŠbTߛ†ÞË:–öI¦ów•vUÖ¹¬Qy³•ŒŒŒ°gPTßi¹Ë kHîËMsÌ7#ÔI¯ùy}Ëö&œÈm("GMOÿŽ0®'è[ÁŽ–Žá©˜°ä;ÐÚç÷zÙ‰8ål1ªºèaQµâ$‚¨Ÿi8ãÒÖ¢?šv¢ùfÜÝ@8¸&ÿ  ”óUӐÂI_±ñç×¾Ô:ÑÉ|Ñûô/{UÛ|ƒNíj>/•`i–r}äSIfu+*•ÇFƒ»H0áÓ µ%œ:HlhÛ¥ÈQ={ÇUù³ý§R9½!7E¹ß0žèœ0ó]áýDBÊ3$åNÊ1
+à$±áÁQ}îl;n}n3µÝ>b¼!~®þcj76y†NžÀ
+Mk| rT/~‹d²YÜÆ9§¹Hÿ¨2¿¥ƒfÓiÿ—— y‹Þ2Ü "?>n³4Ù”CÐWÜæWÃPÿ £q«Á¸½IGf®Wj°ærþpxwPrtddæv_#"z\”ÈmF³¦PRvÉ%–/D–X”)ƒtg”qÓ/„†c‰ª‹ùð:Œ9A~¢hiÜôB‹B/C~™†x!W{²ç–‹ì©*žWâ{\ì£(ìÈÞñ›¶ìŒ®nê?â2k%Ö·²RYwéDŽaE¡tYð±äîAFf™³ð 5Ï-˜‰—B|N}†.0ß?~Ÿ_2‰ ȡX‰]€<á-Oxç »é—²’²Ì\X8‰dQ–²›þ\·qgO +rש.X·ìAK9*ëzÓ…#úv8øy p10ôÙ°ñ½K¾w é좃„…0'»éedy´)SéÎè'⋿æKÃòT5hññ
+†jÀϤ22~ÛöùUN,PÃ|]HnjX¤’Òb‘EóåvœaŸÝ ¯œ¢¯x…>z–ò:
+×¹°|F©ô$²à£ŒŒŒÌ¬P€þIµåI5uzhìb:=¤Wê'ÕÄ*BTù!ãŒk3„r­Q´Ôô3FX <]Dø¦~e®t;Î*g•YXN¦Ù ET÷
+ÑO:Ò¹Îýp?Ýß%~¼;ð:ÞªoÀë•
+ô3gu?«©{Î<²Êæ$Ré@!wX@Fš¹< ÊÈÈ<’Ìã|šrfâs(k>ƒ<á-OxËÈÌ3˜ýˆšd‰CSÞÃv)©«4¸Ú›@÷À6ÊÌ i ßFV”†caKs™‡
+&z‹rÓmjM¨À¹ äü
+/±ç*Ð IDATe$BÈ
+Es.‘?þÜm9àº|k ªTÆ]¶ÿuðsüRé°,#Ê=ãòAVR–‘y¸XĐZ9Í’B–OwÖ}`c† ®r»qtv{ÏƦ8åjuӞÎþn«æ§Å&fWg»ût`lŠC•*ÃvË!·K³¢ÈȤÐÀª,s7¾º›/|‹r<Eì=ÖýaŸá½n­šú"ä»´ì·$Y¸G ©êló¦Y¿YN% mhÔ³ƒÌµÈÐÔl,ðôs£ÿåO@kÉd˜¨ëÿ6*µU $I°”é)M¸¶ÉuÀ¦]Kp߇=‡íGÿƝûnԜ
++%•7ç3qïmRt17’ë2=ۈèû—6٠зÃCut|4œs‹DәvÍ;jú¢Uô¶K©!ª"ŸÈýZé‹Îº—»[Ü7=¯éŠ–Ï#Ç”)‘²’núÐm>K^
+vMÑmþÈQƒì¦—q¨q"0n+g¥$ìw‘f¾’uB !;#ddd4ˆ¢ÜÅ?ä ïyDî—sy®‘‘‘yÀ,nã,7³
+y}ÛÿÞt·eB:K–ŸBvÓ˔A&„l:i.»l¤41”hx±A*—,㸘‹°£²àc)Ⱦ3Iä ŠsŒd(…áPfÂL2®ÃnYIYFFF¦lŽ}Ô§V¢º•ŒEᛸqY¬ZÁ¹ßµÓwÄÝýþÃ6^…Ôš¼W<i¿Sø„CG‚à„Æv4¹„:ï2hI¬A*0rÞõi±{†q¾f"V`†é¶[Ì ǐ
+>±È JÔhŽMú#†a°ógiåØ­AÃ:Aü c°Ô.Æ÷¾•¿-Ä:ƒû¥T†:ëÔRé¶Ù"©k*Q0Gûº¿óɘéeI¡ÈÙÒ~z¬óLWÎ8Ò¼ê?RÖ6M
+¢(:/OÀ/ò„÷|!O`/gX†õœôëԞ³>Š*²ttV ³&^âYÔdzʅ¡Î›
+‚™ÉJ ïÓ`¸)ý‘¹aE_“5ã[T¡˜ Ù[ Ä* Aœ -ûÜi+ù—{Ë3*/foûÍ/h°
+Y›ÚœiëÔ1½° \í-œ^TÎXféó€9KsLeÜѽ5B}>7‚l4ÌL³ÃßÇ4«~р
+"뤉5½ôîpç±Kã?Œû¶¸›RÑæØȆ_÷úÆ¿ô疣¶Í€¥4Mû©ZëÍÿŒq½‚ïo.ÁÛÛ¬ëûªÖw}t<rÕ0h4¸øDϤÖ}t<rÕ¨n~¶½P³4ʲ,œûî®oSr­´}oÐy&|ÿÇ»¿QöZ‹T˜'ü¾agÏ°íˆ||ÜÐ2ؖ¾-…*c8L#£a¿öûAþJ«ÒúàP)F{‚>î_û-gg7W½óñʬ6mà^p"¶ÕiŸ KÓ4MÓ1N¨Ð"y 65A§ ¾
+u·ô©w÷ó‡†>‰j^Yœ=ê×5я‡òÓóKΩ¡°£.öÖ½Üˁʲ]“SŽTù22s!=€Q,n=d–øšÜvmŽhÖÈ»‡ddddŠƒ Èü’˜ýˆÏ~Dú¸ØL<®ö&ó/ϲÌÁHKø˜äšòh8ÖÈÞ2.9­{íûÄ­ßjPku°štöÚ_±ȌÒEçþNuՒøk*Zä±Ìÿù­6ùR¿ê:®ÑÞ2wµû8¥~ýTúãÐôÉúØ·Ý¡{aË|…âÍ2©P|/¼¹n3ìèò^p‘J4r#Ðý¦]G¡ÔùB¢ÀBÊ1
+7]µm%€ ¬þ ÁÃ`Ñʸ.ðWJöÿ½¿²¦•ž±i?Pҟ¶ÊpõOƧ_5Ø~EiK¾ºÈ¨Q™ñ¼£
+%@<ë–ê­©ëMLÿ`Äó@»¦.«…ê\$¹¸sp‚k«UÂPÖ6pSn€Ü…óù%çÔP1~¿ÕÓÿÏQzŸÆ´ÅÎ|•µ Aª|™y!㦗WÉÈ<J ÒùVçb×BFFFFf'¼edÊF裧P5‰ƒÙ~ÜãÚm!×̃’²ëà¼ȋYÕdž«]Aö?¯êxcFR‹ÐiO Æ}öVjÝ"Ku|1a ‡ƒúûÉHho¦MSՒdÊ}F®!û/t«ë°€ïU3ýó~úD²LR­Ñoâª5íAÆZ@8CYF v\S³ZØïû†§Ñq|›tV>Õ`€èpŒ|«^_ŸÛ8K¥ã›\ä5¬ÔšËÈ,Y ^¯§wL öª•hhŠ#6éÕOª‰U±’ÈT ƸµǨr­€÷GkFƒ§Gìš×¢øZ½uŸË¶Àˆé¨½ÙâPJ[OÀN‡8€Œ¶8n°í–ñsOWfm¬™Ë*©bfg4Ÿú•"Û
+s9ƝZ/¸-ϤnKÁʤ¯#,­áiքϮ¶š½þÎOpó/£J]®®\©"òg8ðz¥úÆç0ҙH8€¥=•5íEò@–(ü=ÆóîæV}«yÒQÈ9.'VÀå'ç—\ †]ÿ Ûê øû%ïã ï·ßèÞH”ϳ¸óŽ2?)읗5eddddddddY-tYÒwò¾F­Ôê¢Q€aP©`Úþ‘{^””ó¥Wr –ROµ"ª¿Œ ˆwħ'qÍÛátM¤$Œsô”3Õf){³ÇÃõÍöt ¾pÓ&É\–Òí1iŠÝÊdêCWïM»¨¿up¨ÖµŽèßU;ÒÓWàv ŠÙŽÏÆnÄՎÑÿŒj«
+$=lgYAsßÝÍy$qõ®Éÿ¥—ÊùªIÿK’¾’\½ÞûêÐÀ™Ð¹Z4ðGÓN«ÁÙB´2®ui«ŽZ?£‚»Hè>Niûü飞}Aõ+—@ûž;¾ß;ٟ ˆMMÐñäÁMQî7R
+ÅÌðDÚòV¶
+Mp6¢üÛËM„ЕMùéå•Llwì
+tèw6ûùŸ¢Tù22ó’H$ Aà_ãaï±}'÷‡†¢Tð¼o5À~ÀÞöž«èÐ6Y™Üôóë
+Ÿ;ÂúÌêb‹3Cá•uÆà¸PüфcôëWÃHîÄñÔS$÷íðÕi/6‚ ù:ŒCŠ®´ø£®fìèrý¶)%þØͼØϋ?–â¦/Ç(€g}?âÒ
+»æµ,ò(Ń÷fV#5÷Çï:Czf‹sR‡DŸ¢“ž„ÍÜ ¸(æP@A\œC(Äa¶ï+_ ¶l%”UÊØtŒX£fùkqÀ |ïچËnúÒÁ!·×fÖ}ÜM®ÓŒ„Ëž€/»Ãõ0íü0`Žû_
+Èr «õcÁ÷¯ ûJÜfDUDì›uzP¿’ÐnÔjµZ͓šג ǔFÓÃlúŠ¥fË`"‘6‚U>Ýsá¦m»`&|ÅÚ%ŽágF}[S¥]¶Ô‰Ì0ØcÕ7ï§ý34òXÍ©î[ª(+3 öXõ©´&è>MÛöZi»~ד
+ó¿Ï¢zñ’O˲±‰3Í+ )=ï ­û£Áè÷±ÚFçc«ÞžH°>j3÷›à”µZÛ{§œ¯j xÐj=486ÅÕ®opì÷¶mŽÓD"°”Ýjõœ¿‹£Ú_´ ztxV¢úçMý' ¥l¤Œúß·v‹qµ®£M;ŸK6/¶zòèµ±¦ëw}›pa»:+·•çm‹ó“¡±)®v½Ñq¤©}K²pÑÊÜý²¥òñWÝ{-]ÇƦAû«¶SgÜ|÷!eT¤ÁôSŽMxï±, X9¢{§Nýp?9åy/âèìöžŒMqÊÕê¦=ýÝVÍOŠMÎ+Òo²¤òiÞzh¯¦]q*rD'Ì(u™¢éá74­ñÈQ}ÎÉ9%è¾sÍІÇë&v DŽY
+”ŸÎ»4™y'=vÍôÂÆ7©áؐÔp¤†£Tô¬w¾4gËÃw¼/ÓF þXYÓþÙÝûɍ¥,…ý´ÎêkÐþÖayؾ㬬ëMÌ°àÛAvpvú¢-}”‰:«5ݗî& x êe&ˆÕ9Y&+að€Î|YûârºpÏÜóÖU¡ d=Ž9GYYäQ”EqÓ/}W—ÌÒoó5m$¹8Ħ9P‘¨¸8äÿ°ÖÈãžÒÉqÓÏ×|ÙsÏXÒwn"Š"ՇÎó´7<<núGv’~†ÑWWÇvôœ{/¡1´n€Ð(5I?—É{yžo™ÕúÍý=¸ô~1‚­U3×Bz®®U“kHíz-ïj‚!È@ÚÀNz+oåóôe¯ãˆ'x-­¤LB±1?‚ §ÄJceõK9'wŽÞw‘X¾þäÂ^ÈvÓ OF„LÈ÷ÚÁœ’EO.±äI®þ˜@ßÕ4^lc¢É¿÷ðtÞÉ:µª>q/$r÷î1žw7wœT³“>¯¨ì½oÏQg®×)ßñ{¶‰L÷
+ëY®ÑÜ£ì¿iËÎèê¦þ#.³V¢Çd)¤²îҏ ÊBéMwóÀY^­}ô<KÍS/ùˆ7“z#í£z(m“Yüf™¯¬Õ[¢ &$™AFŒeÕz°´»úÙ/ìS–U˜á˻ּUós/¹pù<Ë¡A“YÒ-íODϗ†£”6"ÌAƑ:ï2hI¬A*0rÞõ)yb‹RR’” ö(Uf)õ‘Å%Œf‹?sÛcú˜óŸÉzƖE–ÉÐAfÞ ßfP.ôTŒšâÂ_S¡¯©ð×ÑÐ×TÎûÅ®éC†° ¢¸Ãl?î¡nÏú®º–é(çâ ­UÎ¥²M?
+TýÏ«o ¥ø=9‡|Ú*°ŸÌêUµ$¹&ùÒ՛ú/tÆn%7;óÃ'œ†z©Ö˜^µ_
+Ië Î±óIUèpŒÜ^¯¯×ó/]êiG*ßä"¯u”Zs™Gš¬ñs(UJC½Þ¼QËÞ
+t4Øþò z·sþ«(ó¶Î•7UB+{ÇPuŠúÐçXrÑòed慌›>GÃ1üU4p›
+Ӂt%{›ú,½§NýF-YfiõIã6ê=wÔþ/ÇÇ¿ôkïxô¿ÌŒ;{_ê:ºÿîÀe¯ÕÀ'䬟%}+ÝÇ)í{™{îÙT¿Ò¼ãÄ1¯`:$65A§ ¾
+^ÒVeýÌ1.º¯©¬®þ)Bn2ïd
+ÿà_ ¥ ׯ¤l¬×Û¶´ÏhÕkÔÚg´ÄJBJIyÐhò~¦'™Èe¯¹)KIÙ}1ÌLÒ%åb¸ÞÒ½Üè>¢i:ü¹Ç”.-¥ž¾MÓw"7»1)+)ýåP”¦©Hosûàå"~ê£=¥¨¯B¿HózÊB*ÈCÏ«Ú_¶‡oÓôí°½©CõóCda§K¹J>ÐuukGºLi´ÿI§6{Ljq]û3~Œ°6­D=‚âE6-g|øµýšvÿ•0u;ât5ê»U/öUž‹Q^¼˜Oÿ«}˜S9·¡áPú˜’èíj7¿ï¥îÐT4ähnTýü“Lç‘北-üºøҟΖÚjú¹ ;xµg;X¶Ô!¢1XÑ=Wÿd˜U LԂHÎ,h!‹h C‰†浚Kš®@¿ëUwñóÄ8Öâêt-DÉ¥”Ë`ÞQf¡Q¤µé…hT¤q“Î}ғ£á¨¬Bé/=¶¿+ص¾@±Õâ
+ÔlLu]péWadÿßû+kZé;Q,Ö«ýÐpӅQÛVÂ꿬1 `ª«á›øZ?ÖÔmÒÈÍ<ôÿuìæ}§Ây&ÔûXwrÀ"¥?3ôÿuìÔ|% א—<¼!õgü6ÞÏ.Yf õÉ¢;þ1q.mèÂÀÑÇwÒ36þnÏôëÕ8_”#%‚`ý»Õ<°ËÉÒî@Œ»¹+%FÄ{ǸC¿%hš…E[µ¿÷QËáävøvM]V1
+µ$_f1‰tÔI«ŸzÞ*\æò4WP%‘̱,mb6ïƒÑ©Trqã¦P gAÏzχ-ç–=óD1›ü(…R`î‰G/”Š‹hßô_kW£3¡ …¹DB/€t@Å4":feg)MÓ~Õÿë¹9dÅQ.t²cg³ÁžÒ½p‰€…ÊEŽÐÈœ÷ÈbG)|$ÉyÍ:÷”2"` Z­Ò+ôE•”uoÏ)lÝm­¼’òcXoÀÈ«j3·mî˜à”µÚ®¿Ü,esîÐgq¾ÖØÁ _pµoIŽŸmeµ6>ÛË«'ûìð'›t5¼þò¥úú÷€E¯á%Œ/I¶Ì{Ÿ¯í¨«^ÏZHd^¢ZÚŸ­‰²~»5ô—",;Þÿ»ýRá
+ÿ΍ªÚrÄzÞR?ÝÓÁ‚)¿ ´Þ¸þæ®Úßt´ÝӜRUkÜsèÒŇs1jÙA¶§@‹}>
+ÜØfýfáɉDpÃh ßrÀQ×5U*ã.[xÈ’é@!w ­¼Ì#ÉÝÄx5RƒdÇbåQòÑf?â³)??®ö&sU)™—BÓÖ
+}ð²Ä,ã£FZÂÇÊ\uÑp,¬‘E0—’K)_F¦l2Ý´›~!4ó%´DåóA$d€¾âµôD§8TO`C§|zºÀR¢¶JQ{,$Y¬> ‹?–&þÈҞê:‡?V£É9€ññqTIà9ߛ,òX‹¢‰VÔÜý¡`Y™<‚_Ç:ÎRÆg”±i.:ÁÐ1ˆMs HEŽ¾Oœ1ËÒÒ¥³ AKˆR(E~ÏhVrRqEC
+DÓ3ñÔeG¡7=¶¹p¹
+
+qÜDc]f#sMMöOÿ¾º}¤ï,ç8V«—EKbÑOÇ
+[´ËÃÅ%õLD—ú€û¸Ç¸ÛBfš1<ímٝùsŽ ^ŽN0 @‰Õ¤á½2uò¬Ì¹{Œ»­$
+  •¾:nÖWPÐ\\eÝ̹›C@rqU ¼W½Ä÷ƒ7hµ
+8fšc9Œã˜TeP‘eÊFú'Õ1šöžJMÀêZ5±ŠU~Ƹµ™ö_¹Ö0˜{@z#,­ái֔;¹Zv:Ä
+Ü`ۛ|[¿Ròëæs=]™å™Ë*cm‘ßÉåwJе)ŸÉº4AvŒ˜ŽÚ›íé™xa!ùn©Z*g¶hßëä>iÝs¢‡Üʵ‡t©p…áì°ÿÙºýéS?é€ÃIÇbþ|y«¾Õ<é¼^©Ï+5Iʕ*B8愭 IDATI¯Èܺ2D96Ýé×Ç3êÏ/.°Štx‚Ý•uÁ{`X!•
+,òøpÁ)
+ª8åû4Tž9€Tb᫋sR¯2®®ˆ¹¹Êº™s7ǟ–4Qò{z‚_3ºÕ*Ž.Žrq–;½Î­Yÿßtp‹tá`¾‚(fSb”B)ʈ‹B/–†TDÇ\XJch5¼í ‡BW‚§þÔ"<˜ᒵ*XNnj¸”ÊËç¡Q^ (S
+e()?HÕã¢,7 ã…`îâÅù•3–Y&HéÔ?t>zf’qvST©:ddddd
+î¨Ú>W؜-²<5éjjžÚPEÕÅË,­>iìÁK-ª‘Ægkjžm!,¡¿—$þ(uT³§¸1ÕóýEÅÇþÖ!*G/þØPn7n®{êéÖN·zÏ¡Èߋk¾ÏŨe9r¼X׎FýÌYGÝÏjêž3¬²…ƒ9"–¹e$Ø¢Û¨Ã\,ä» SYn§é87’x†*qÝ :.}Õ“)
+5EZ^$™iŽžâ¨›æ`W^‹½û?Ÿ'¯¦Ÿ9ó8Ÿ¦Œ™ø,f`öóñÙH.È¡àL¼È…ÏrFCI°±3@Gƒí/û2¦—Ó$½¡ñс8ÿàtþÁéù*«;v¿ïœU1Âó©³n¾ÌÙÖensº˜ýˆšd‰CSÞÃv)U¨4¸Ú› ½ååÁ±Ì$ŒŒ´„‹Ÿ7Ž…-²œ±Ëm5ßS¿Ä}ôù_Ë°ž“rÚsÖGQånoZ:Ì?eqT Aßä,bŒ ÏG„Øš5°d'}ü¯.ü¶FtŽÙôÃgÌ„ÿa)çfÍ8‚ NèwXý‚µò榯Àõ;lá¬ö½Nm˾ Vƒ‰öì¹é6µ&ôÀ'Èedæ‘Ì–cÑÞÃ0l5Fð95a»3r ¹è€ùÊ
+ºZ è¯ÃÃÑ(3¹–WšøzZ^I:’ÐxÌs:(zgê_Ðâ
+ñš¨dηPzÆòr 3¢
+j­V“®Ó^û+ò ‰ˆ Èc…â&."óX±‰ÿÛo=oöì sÒuû/îဍž~®cô?£|:Z›l²ú¯ÿÛ¨T ½ê‚¥LOiµM®£~íZ‚û>ì9lISwî»Qsj©‡dÞìCÌTĽ·u³dn$Gtžf³a0蕾ú¨#š§Ï*šî<aÔ4{è‹Öܳ‹&>,ó¨ (.ï(k8Ê,s”E— i.óM08¶ %ÊÆ&†/gb¯Q—Ñ8iÜQYwéùŒÑ+t}ƒÑXÔחƒW‚ú'ÍÅ bhFë קߴ]ë9¤n$«f|E—>4{CÀ]Ž¢µÚ¦­$¦úÛáàå nYX /ðr@·ÇÌ| äÝTåÖ3žßȹ3OÁºK_BÅr)ìUŸß\9ù÷¥üë½Â€z¥2:ÅÑÊLÓ\àC!ÎÁîspz'ì>'$‹Bœ“Ç=sgîð¼WŽ˜‰—BèÎL`™)NÜÎ%¯È“Z
+šÜÚ@ªpÅpiؚîòÙàglÐáUZ…ë¶aš¢RÝ«ªAK(1P`äZu~§;[BŸ «ÕM»š,»ŒÚÕü4œ>T–!¬i‡ÑÜ Á«0ň•JaÆü¥ï€…îÌ£5ÁêÿáUת¢±è÷45ÁLL£\œË·Ùu*ó^½) IWoEêU€[îVc{(Jð’,ƒêݳ֝‘#l+n?ÿœà'ï­òäýÒ#Lö}vûoKU™íù…mýd%e™¥ÉÜTªbxïüÒ÷Ñ ¿ ¾“Çð5j¥Vˆ €JëÔöÜôñ՟þÃ6^…Ôš¼W<éÒÂ':’@'4¶£É]Ôy—AKbR‘ëô®O‹µØ3Œó5±C0L·Ýf‰8†Tð‰…ƆÀΟU›o0¡½\›qM8×àº?„y}ê¬SC`H¦Ûf‹¤Ë›!©«KëÏð¤?
++ÆŠÝ4¬#ÁŸÐ8©œó £}ÝßùdÌôò,$'
+†g´¶˜VAð5YS˹=Až2;²·ˆU‚ 8AZö¹ÓVò/-ß/VžQ¡þ2{Ûo~AƒU È
+S°, ç¾»ëۄk»;c·ìÉU÷‚ÝßÆ\¯'wcÓÁÈhدý~·2[C³½:aÅøûÞ óLøþw~£ìµ&óbUºC*|—xz‚>î_û-gg7W½óñʬ¦fà^p"¶ÕiW KÓ4MÓ1N¨Ð"y 65A§ ¾
+øÞI:­Ðªä©ôE×e–™† E$ˆ—iܤsŸôÛŒ¨Šˆ}¡NêWÊ*”ŽÑùAöw[£Ö ¶Z|Cš-É
+Ç@u5|_«ãqu›´À
+Õf†iÿëØ©\úUáò’§i>ñæ}§Ây&ÔûXwrÀRBƒƒÖ¦•ÿGû·‘ìʵ=<)óèºÀ[!ûÿÞ_YÓJÏØ ˜¥!l–W—‡õB¿^€ñ·ðn*ŽFJE3ʵ¿ÊpõOƧ_5Ø~E•Üo 2jT
+£¸)²£Î°ToM]oúcz &žÚ5uYE(Tç"ɵ›ƒ\[­怲¶›r”ïJFf‰~ºÌH¡¥=222ö}ö¶=mĺ7™AßIÎÏ3_‡F8ÃÖú”2{˜æ8>Pjô¢/Œ’ÆMj 8êëá…Zw ÖB&5NhA`Uq²ÎË:索ÔÆz5ç"7‚#Ó¤u‡®|C
+±ËAjý @À ßÿugç[ ñÃ~à› —=’229tbdÏøhƒƒÀÓÍFœ‡†„!d% ¾X E½ZÂ&=é£oH*)ÓÃQ*zÖûÀ””¤T—tég.AŠV^xÂ\®ÔûÑ1í`R*XÚSYÓþÙÝû&`)ì§u¶ðxP_ƒ~ðïÐ^TõØ;ÎʺÞÄ ¾dg§/f‚^0Qgµ¦ûÒ݄Ë;é«||gfØP–Q`‚X“e‚ÀRŽÊº¾ñÿ²|lp–rV>åNÌÐàYƒ{Þºš.3T:èqÌ9Ê>\ºÌþ±e‰€±ôÝôYMý ÐßӁ+Aï#ØZ5s-¤WáêZ5¹†Ô®×â«r¿A A~¸Ÿö\³“ÞÊÇ[ù¿ú²×qļÅ×ê­û\¶í$ÐW¼öƒžè‡*Pâ lèt Àøœeü•Õ/åœÀ'æœÙ9zß% Oø§þƒ®ñt µ›p =3êÛJäþ½ òÙÝûÎ֐èÕå”/ü(ÕlæW©ðE ßÛµ¸í½ Î)A´L鶚Å+*m‘»Îìu“|ƒœ_ùu¸ÇxÞÝÜqRÍÇÍ(uÉ¢é¥ÜŸ…ƒ_U¶<4™¹»¦—¡Jj8zNšwIRŽ"#ó0±p‹Ž “HÁÖÖâ#¡ËŽTIèÔôÅþz›‘½<8?ÄÅW‘ÆízAF–KNÎséĂ«¼ÓçgeáÑo7•ᡳQ jÕMÛubssIšSà†Mdèó@(¨’ÐmÒSAïé eW=_`΂züƒB#—AÁàâ,jВ¡á@ô
+ + }ƒŽú4$zg ÛµR‚3…W¾©)±¼\Œ¨ãâlοá1¦÷bŒX‰ªW+£ßÇèÐ1f"@8à#Ç&emŠý+3Úö´-vdd–²~~n+yFg5Ó)TR¦¢QRîßßIˆ­©÷¶íÿp0ú}¬v½Ñy¤©uKÒé>áh×326¡T©[ºÜ{õPÌ㌯HŠ ÿ>êÈœ<Ã8m­îÓÁ‰8hÑ2p£Ãxéá}ŽË_O(W«mø-d– >×ÙàÄ4hÕ2p¢_‡']0§ÂçÜMí±Ý—"ïëDk"Ußû¶î“kßØaì(ì6’ªC±Ò"ËMÿl©I¿÷m¥
+”ò³4ÅtvŠµñ®°è¡>tõ^SªÔß:8TëZG„vÕ6öôÁ^H‘‘Bf;>sŒfõ˜¸Ú1ú‹²J2·²ŒòúË)è*í¡¾"µ ™ã·@0Æõ° ÇqÁ:}©tHé2‡ß.s¿²ŒL!*@©Rêõ€ï_!½
+.fÄö½Aÿ…°v5øдÓjp¶P9¹<`ñ_ €v0o~¶½“T$ïmê³õžª¯—nFÄꟘvöPýƒþ¦çIúV ½¹C2{ u(pË
+î›uO¤
+”\Ƶ.mÕQëgTp ÝÇ)mŸ?}Ô³/¨~åhß³qÇ÷{'û3þÁ© :žüƹ)ÊýFJ
+q&ŽcÙˆ}ê;àf$» ŒìQÕþ²Ý÷g‰2î×Ú'lî
+‰˜ý}?ÛP÷í:`Ó®%¸)*pÜÙwCÅφÎ+‚ ;nZ‰†&8Q¾Œ›¡+›ÊÎ.#³(¤Ý
+ɘÒ˄åvPHî’EðœPÚ"µllÅO‘‘‘‘‘Yª?*×/¸›^8óºÀJÊe!ª§ RÒÂ\R:Èõgü¶ME¦fóëoz7ØtaÔ¶•‚°ú/k ƒEk^H‹y¶ªÐΗ\Æúw«x`—“¥ÝwsWʟÎ{ǸC¿%hš…E[µ¿÷QËáäú‡RÈÀÍ&ý³ÌQXæb:M*Vd¹FEô—gÏíöžcÚ=‡®1ÌÐêõúWœ7ÿn€Õ÷¦Áô\+Kû$Óà!Ôe^¬MÀ2%"²q
+Õj•^¡g¦b%!å£ÝÛÁs
+!˜n›-’’>FÄ7)©ƒ ¾÷­|Ä:ƒûétê¼Ë %±
+áL|ô,3ÁͶOÓJʚçdì]_žJʱéJÊM;?P5ï’ús<ad%¦§ùÈ2.ýá܁XITyš‡w¾½Ó‘ÿÑÌÔ²zï&ì쏙e cZÉ9û0ÓN¶S®«_-l>ão?G)OƅÛOÈÖ;q[£=01`º—éwZ)®§»ß±gyQÒݘ¤¢ÉL½·å›D¶M¦ÐF“õ—'™š{àՋôM{¢ž¥ì¦‰J÷ldÃlåQU—1#í»ñô‹‡»ÖU“7@ð4írûL Ó»B˜dè¿á Göþ,¥Û…ƒáú–Õn+Uà-–±º%-‹å£G
+pÓÜ;à½ámMšãvj„¦^c]ä….)–µ<Â#§ËŒž –8³ùä'ú;v‚v[¹@ *uÂÝýÍlf‚ hYð¥ÅáÍÒ´•>ýl`S£ëµøâÕ/V/domn‹ynÿ[FÎ֛-í±ÄµéçIÃÌ×#‹„å+ˊÒzҐ3:ÕÐ5Y'“ôûîˆ×É#1ò-2àÒÆî3•DÌ(49I7ÿ#x5&y½ç“'÷Гzþ´á³\ŒáÛM-½ÅS¨µ@Ǟ”šZdyõ.³ô'r$U—§U,ÛzÌô=o×x7™é8;–tܖ“nãŒX""ÖÓV˜f‚á8Ž 1ÖO
+q7}ŠmZÃ$+…Ü8‡ã¸l½,ÛúPË;՛UjUorÁüènªOr7« Äy>E›ö7KžïÊgb~K¶yWÕÑSû<Aÿènª‹‰B2¡)à8–„Ð/Þî£F`&!âß Np°‹I:;õ¸éýKƒá
+ÒpD<ZÌRÏñQÔmœKAä_K×IYŽ…)0Ã۝Ï_”®“â«3øèýŸ¨_yîéíSmÂ點æÚæ‚ÛõWîéZ®Úç ú®»©.oS,%­m•üOǝ^XÈy/4ï©S¦Ýǝû{{.{¯– ÝQïÑ)MõT}¶×Ém u}ۃm=ª©ÚØĎØ+‘w}ؕ^_,3ËJ>Ñ}AyöÐ~Ž’uǯ®¶#òÕ>½¯çεÚÇ,ñ!÷ƒôTtUwŸ²î&÷Y˜à4¦…YñàÄ=O®àمBè=:¢áB؍áHÔ;ækz¹[öZ|§ÈCÒ@]/dqÓ/)<_{D›òpÓ#³&E™’ë,Cn¹™©´ÍÒ`Ç<Ž/!Ç1wÇI]½Þ8íôOl M#=†$þî±7±§èG¨@ bÄbÕc׊¥V‚@ D"¿›“Hù‰þŽ ÝV.¤JpwGÿGJÈ¥oÈ´‚,øÆgß©Ek ±`´¹-æýÖ¶=[o¶¸Ûæ¶?ˆTŠ(#B!˜C[Ðü¡Y¼Z,‘H2Nþµ¶yêÝ.Ýv9¾—o×:{ _l訽ާ߭Àq\¾C纞wLÒï»ãq¥Žã„|‹ ¸áؗªË‰c˜Xu¨%R>ã>O2Mv9Lò
+t´Ç»ÇM=þ¡Ñ†ü=ñï
+G^}Ŕq\:’‘ˆ9d6zŽH·q>È ¸] ÇqS\G;4¿Ù,LHœ‚'Ä©ÖÅݸ¢u…»éo„¸ÚM ¦Öço
+0¼§7ñH“>Ê2¬í‚Ø@Ú®8)j.ãXs,cN%vÌ9WùHø* ]×Q5V,Pß,èh亀øŽI3H©` y_¾Ýœ¸m¬óözB°RN%µÅjp ¯6ço„¿'ã^9©Oî>+ŒŽžž”zQh×¼rö –ü!«¥‘—ðÈkJV Jl÷ó(‚‡¸›Ý"⊃¥Ë<aýÒ ×eB ´¾ÍY>²@vMY ¸ÿŠ} ýRx³j‘°÷n‚©ÝùnÉRReƒò˜Í7àõÞô\ü¨ž¿zž}æîDÞ`%Rúo̓ýðηw:r9z1\W¿ZØ|Æß~ŽRžŒ'=n? [ïÄmöÀĀé^¦ø•âúwÚ¸û] Ìò¢¤»1i
+p’þ¸wÀ« ¨TDÞpA¯puV¢ùKº¤ýIï΍±WŸžÓÝy#r–HÂɹ*Ù©c+·*‘R-1D|ôŠíJR&§„$!áœÍ¼O›˜—¥`Ì'̹+-I¸)•åž¡/1NˆØ1 $§ÀI§­½º³^©ÿJ]匮ރ¥/¿bo¨}
+Ö¯n¹¡²þ¤È´:«þž0žæ[$+‹ºì™A|— uœx‹™¸…yr™Çù Xb7HÁ@äOæ‰è"øâúâ±—ˆV‹0af_°ü˜çj{egcM铫ÔGú^#@V…~äïz{ޒ™_¯)--ÕíÕ_Ïûùy¥¼ïÃFsÝæOõFò°«z­°ôé¬ÓYû¼RþEg£û͚Oû»ëq?­ÞíÕyk6–––o¶H—ïj¤œðµ¾Ýš­!é pÒç-øô„ÁÀÛV¡¤1–»5BÇ[äðߛ3ƶa¸oĊ;?÷WûšTUåx¶¡ÅJèò•îLNe6jwƒç¢·úZ¸á*EUâ+V“:7HìÖ¦ÚB,G24…á ‰ógÝΊ+H‘L €DHÃÇV:KL½ë¤^ú”X 2µý¦-fÍwÞ('p@ Æ¥úO¼±¶rjÑø>3k0A1&ß¡÷Ç´SXÊP§c&VÔ(6Wy.œÇu‘nã”Öã_L2¦×Õ¸cò:Àx%{ž^½¡®™•2+Š1bƒÂü9iÊ9±ÝVs›I¯V²C®–gBê]løv«åO’æ—ÛÀù¿êÐڃ®×3Ï£óáÁÿ©A²#>Ëlô=äëI¯iÚ!1|ꟑqDž {(by ÜªäùvQÎó¥ùçB
+»ò©T›™Y)‡Ãô͸óZé X:uñµô˜/ÌRXÆ…Iíc¸ÂzÙC§%É´m¬o³iTÖ®§.uGÞËOûÃiÄ6ê¾Dµ´Ë²
+wkN÷\
+JËW–Ðwí 0I7ÿ#Øsݬ¨Àñ
+üރñµ¥’2‚˜˜%*Ëõ–³åípî×Ð/XèóQ›)UláVI›ò•q,¨ÑAÉž£Užµ•¼+ „ˆ·*•©‹d‘ÐäÜ"jÿ'«ªx.Õ&è>֍¸Þ¤"i«fw^d‹Ç£ØçÅc2p¤!§'Rù hvgr^sf,Ÿbªâ1}ðù+!·Î͝àÁóµG´I‘-µ±¼Iò—â2DÓöK½Ø:’¹åUHp²ŒÄ×àøj<=€ÀâzÖÅý¶¢u*&ò\4ž6H_ˆ×)tGÌúùäiü+_r¹|¬2K¹ZœcNàFˆ»˜
+¸woYMG7Ì9R$ˆ<°Í_ ‡¿“Æ¡Ÿµ¢žcŸð+ÒhDP2iƒ¹gSÊõ}¯«*»é=!¯Äe˜)±89¯TDhÒwlnÒE.Âá°áÈl#›
+`^©ˆGæž_\Á÷_óßc¤ó5i6x3yÓCŒÅ/Ï_‰l+)¥å‡úÚn ˆ-ÚՔ©«×ønîL q&ïÿy3ÁPˆ¤ò%51}™>0Õ¶#ÓI‹]Äe¤j·†È”‡°0ûóJî½´¼Çú½D¨Ð¶Ðû²œ÷bIDÊJàüÆ«ˆ‰2‚¨ Èõ¤X”áŽ#+÷¿B±D,¡_¦ç—'ißi»æꦭ|›´ú!›çßß>ÆF ²cv—`HÀ9Æj¢åNf/ÏÙDµHØ{7¤Ý>Ýí§ÓڗH`è¿a"êã`}·$‘l¥¤Êó?‡ì•‘ÇûŠKîô&¸ûyíí,èð8íOÖì¹Ð‘»ê‘Ap*?»SA(’̦cˆ…d±ä­—í…1L»ž³%¯ÎÆLë?ò …xœø]Ƶs¦áʓtÇ?äsÉ~uÔ(óŠ
+Ϫ®˜E91E!1£cV²«1ÚëäÝ?”9¿õ÷+'ܑÎg+ÌÖbúî'õ6¿=ŠÁ£VÙ¹¿·í¼÷áÃ=Dºè.d‹Ë̲N÷EtéPû9Jö~üW³ñ¯Z@ö¾ž žM\º¤§¡~ð¶×w“û,Ì@p
+Ó¢oˆ
+"Ê·çɉñ)˜…4š.(9É4mkntôÉJ’NTwˆ ©¬Xµê÷b‹Æ37Ž„&ˆƒßG9}ô³YŸ(ÛJF^ Б×”ÜÛåMÊïh ¯µðKdf’±lõÒP½S«?¤×íUIÍö IDAT&‡í›ýYäT¯éõ‡ôúCzýkZ²ˆ²ŸÉ5­8û³\<˟M+vœeyu0l7„DÎ#ʲÌztA,0 #ÖªJ…~‡R¶^FV²õ²Œ¡ô`y§Ú¡RÛ¿öÑcŒÿ†]S;í°žâö¨ª¬_ú˜1š™ú9To€¢~ð6¿Ü,yт]ÏKšv|÷húžÏPÛ,y¡‹à)υù-Yï®ë5/MÓ¾¯mêX·‹ ˋ¥Öè»GÓ#~ëÁª*U{êµaŠ MDZì$Ðo{£˜IÀ„èÏ{ÙɈ¸_Ò53»z°Ô\-üÅÄÊ>k­»¥}ÁŒÔ®zƒy]¹ W¸ºà5£‘žäÕsRـb{–ü]ƯçPÃÌ×ãjŒÁ[­³RWÌG91ÆD²Ùœdšþ6Üsݬ qœ›{í¦×pžÂl-æØýiAòªUª.[$ŽabÕ¡–¸‘¬b‘˜e9pÔ,mu‡8ËÞiÆÓ9Ì5¾Ó4*ÒÊJ ó/ØfMÒòÒiÊ7VuíñŸ›ãýq{üC£ ù.—…6š"(éy»Æ»Élݙ¼àc’&Ÿ«T½j~øßðÃ߆t>õb_"¡É9i2"ˆÂˆ
+‰H§¾pÐ%
+Š͘ĕ¢"°YCò.h*å¢w]¶8ˆVKð™#¶(þØh² $KÛԟÒ.-MÓ\(4M E¸ýQS°†0Ú<í+Ê=㠌ìò2š\:"Ìc»àÐìVÒãF<ŽðË/"ÌÇMÐ{Ê4øj‹vu¼œ¾í²}=\û†^š}‰…óFq(u ¯> “OäÛ:7<©­go?"ú«¥•1“d:Óôm
+æ«V™Ù®«_-l>ão?G)OÆcCÚOÈÖ;ñ큉Ó½LËVŠëßiãîGc0ˋ’îƤg
+&`ê½5(ߔ;˜¥ÐF“%¹û½¬)/----—6@iiiÍ?KÙM'ãåÙȆQÐä|Â2¬í‚Ø@Ú®8)ª@­F@9ícoêšZPŒ3Éq¸¾#RL¬Ž}dn끸"é!QÂJ±b·>Q@ƒóê•øL ˆqB{Äk%}÷#ÁA‰%…5
+ý‚ÅwÞ¤¬”¤T½ßÐçmþ[“‡O€:‚ÆÓ|‹4ËÄÀþÚ=0!ì³¥NlPö¸[†¯5GjBÄÎJE¥"ò’o󗋷˜‰[Íùö|Y3ÓÔ ÷=‘²Lè»2£F¦×·Xi|×h|×h|K•m‹ÚVc´Î»FýëÚÓ3·_‰>úÙ<õ)¸1ßܜ—ôÿ³öû…xäXôaÃR3œvRcl8fhÊ~Ò Î•ÁULÚÃYó_gfȂ5ôXZßÙöê³¾Bòœ#$oX˜O˜s-õA …X^ xÔf¯áŠ™Ë8BvuÅlʉ‰
+$49·$ÞVkw¨|?Ü÷(/@`œåh†¾;À|îV®'…EdýŸ¨_yo ålßèo£ÎõÖÚ¼VÞ¤Ó¹¿·í¼÷áÃ=Dº¨sͪRØFH×÷££ß»d#6ÅËñ¹$óYÎõýèOî÷©=Šã‹Û÷ðპ×DÝúšH¬DÞõaWzCb™YVÂ龈.h?GÉޏ÷ÙvÄC¾jÙûz.x֞ )º¤§¡~ð¶×w“û,Ì@p
+Óbµˆ
+"Ç·çɉ+ÜSòVÒ(@ôPt¶Fc8]\Žùš^õõ»C\àH`ŪU¿[4žé Ålå@’>/8@ ò€b¼~7øÜFó^Ý¥ÿS/yÍgþ{4Ã0ôåýÜî¤r'DɓyµŸÍG©ß ³­^G !P:byÀ¿‚6çyža9Ô[-.Êê©È‘™_£‹BlXƒÅ:PÙú³J±4š³Öpä´Ûʇïs"I™j_Gÿ‡JÀ„xõ‹ÕÙ¶bÚURGƯîügŽWn.d[1øw1W´¹-ÒýVýÍB¼ºgëÍ·?w½GE:–JÕ¹õ‚Ø¡JðпüÔ%‡b5.*Ò!:]D«µÍSïÒmÅß®uöºK·eþÏò£ºlQbPjŽ=“tó?‚W3+Ö`¸ùzÏ'Oî¡'õ‘˜qÃg-¸÷›:[z-Š§°¤m# G3ž]˜eYsÔ{M,mu‡¸;{§CPOç0×õNÓ4ie%­ hOÊ#_6I˓ÌI®úãK­¹IÀ²O‹öø‡T¢ø$rG²%ϦQGk,Kv;N2¶¿ geºúO+#ǐ|®RñªéÎWJQÝo*Õl`igÖr•Us÷­¹•¯–7ž›ÙV2w=D2bR£\k¶_òY+‹uoé=÷ܸfc8–ˆIY¥áu¹õøÅ
+ÀÅmÂwLºù/ü%ªï¸6ˆS†^’—ºè¯ãÁ±Ãe¯'>=ðñØVƒ¯ò®ë oò4Â߀q¯üv_ Q°“•b+ülü÷ғRí·~’þŸgæ|t—xÈø7L/4Ÿ0kˆ,§zýôä¦ÌÎ3LýFN¨üëwÿÜÌ{v5†´fž£ÓcFO y –&KíçC̱¿F¢7Ē§0= ¡É¹&iy1ˆ$"e¥B󜌽ëSHÄDATäzR,ÊpØe%àþW|Z;ô _þ÷•HÀ9­ñMKKæà)Ãuõ«…Ígüíç(åÉx"âöS²õNlµÚÃј0ÝË$Þ±R\ÿNw?¢ ƒY^”t7&%w`¦Þ[ƒòM¹E6
+m$Eœšþj’©Ù¸^½Hß´'úèYÊn:‘¨tÏF6ÌVe*E’œ=G +f䣏ÕDê7ČHõǍ³Ýg¬òj¥b»R¶Sc¾d§Fæì¹·¥µ…œ‹AŲAÞÚ7ôóÐÐÏC?}k€Èû¡Ÿ‡zÖeþÿ¯UwJ/×Ú<2Të]±ÿ'êÞû"çõ ³ÉÙ[F鈯Ž¢ïù¬‡k\’Óy•¦.{²Ä\°DTªZßnõM 4”ˆÂñÜä{€M<Ï#2,ápx®\Ï ¼F¥+¥,‘?׌@
+ñ˜½Y”uabž‡Æ#ʻφk U%HV
+¹qÇqÙzYºÜMË;՛UjUorÁüènªwÏY?Š‰®ç%M» Äy#´©±YòBÁŸo#–2ìÌ¢{mí²gßVN G_Š:µÙ³;Ä]lGOc¸®vu³í¨ÇxMÁD‚R¿ö²³óé*éî`בz©Dè¿ín×·K^ìÐçJŸ0›FkW ½A.ÒýMÓ'é߁{¼±
+ŠJ&Â;Ûj§„æW•0Aَj$/tI1€låÀ½ÂÕµü=PnU¢8ˆ‚aǜݟf^Ū{LjçÿG^$ûé<®”æ?èBÑô9Ërp[Ë»0D|ôŠíJR&§„$!áœÍ¼OKTÌÁc¿ù„9w¥Ç
+>Ñ–amlÄÒvÅIQs<-,b9aǜ¹¡LζK³'±Ÿ±tUcÅõMf¸×qv­@ Y ®©Å8“|è|G¤˜8î×cn끸")]ž …•bÅn½<^óê•øL ˆqB{Äk%}ÒßÂ…q¯œÔ§ì#{ϖhœ:«H´!&í‘r=)õŽb–d|NÃ0 _‹K×Iy|ôàsØ`§É?„Ãaê¶KUâ‘,f6òô{ÃӁX…¤˜Lj½æeØp˜e¼—㏻‰õ³m›#vf¥<Ó7ãŠ7JÅÒ©‹£¥Ç|a–Â2î&M´á
+±1Aú¶±¾Í¦QY»žºÔy/?í§ù
+ß®÷ Ráp8<N»ÎÆ£Œ³•@÷%ª¥]–õÐ-6«¥±—ðÈk>J`ž,§” ]”GˆÈ˜›lƒ|ôˆt¨¯í¦LöX¿éƒ¦2žd¼_:­'ͦL¦fÛÅÄ¿4}`òç3Àä5À&~kÿÜþåkŽHüsÕîPù~¸ïQ^€À8ËÑ }w€ùÜ­\O
+֖Åð¢~彁–³}£¿:OÔ[k§=¿¬óŸ;U'œ£¿ö}Vÿ‰¾*ÿ=RŸaíÿôù\² £Jýá¬*…m„t}?:ú½K6bS¼lå/ω½NÞýC™óÛ¡Q¿rÂ]£4KIk[©2ݝŸGGÿí7¿*n­Sf­ †ƒÓeßÃÿ<èyMÔ©‹W¶É\ߍúûUEžªÑôõX‰¼ëî|B:<Nî›Ví• ª5úË.Ñp·æ´qÏ¥ Å÷jÇH6zϤ‡òÊC’>íÍß2b¦,Lülii©š÷ aÎü­yååÒ¦Ywê E$å•$–(·*—ˆ "å㼖ôÿ³Ÿ¿K‹7²²T}×Å=P’2‚¨ ˆ
+B*Sº]À¼¼rX®ÿUz%-C7íڝ
+ó[£ìÿHõì~¥þOTêÜþJ¹ç|}y]§ì~íS|‡›ÏHA®1Í7”QY5wß
+ó­ò¬­L, „ˆ•ŠJEä%ß­/Þb&n5çÛCÄ< ?Ñß±´ÛʁT©îîèÿ(C<Ð
+²àCë!
+R—Wk·f w‘°\O ~Že'|ÉåðMd-ÏÙ;áå6±RP €ácR^©PlUÎ òV¨\ºÂ RùÙӗ¼'J`p"ÿ½Ïô «e]Hór†"Ä^;´½•Û÷Îc$#ˆ¢ÜՊà†ó4‹@,'ÐH OЁʟÄcŌ³põß\ a£žšš¶€ËGS‘}À3î N~m¬KÓ4MÓ¡"1.‰ÞÅì×Íp¡yÅïŊZÓi›/yõŸíˆ‡|Õ²÷õ\ð¬=AïaϓÓ7¼«^yÓÑæ¾<ÌgOÐyõXû¹3‹Þ$j8v É­ IDAT ®áHdV¿qÔKŸ B¦¶ßŒÊŒDÄL¨+&)Ž Š1ù}lq¨ —x‹ó¸.bß ´þ#+§®™•2+Š1bƒÂü9…ÓÜf&Óëj\Œ Š1ùNÉ1´ÖkfùSbA1¦>⤮™å¸@ ãRÃÙ駖2Ô)Ř@€‰ujÚd¶~Fv06=˜*zéáJL€Ez˜ï®Å-dé@ °:Õ[@ ~JjtDgV² ©N׆îÆ7tu ׌ÍÆfö,{Ë;ºùb‘ òHÃ61lü¬1ñK1iúyHVÂû3LSP£}ɤ æžMý)纜 ï qx%,ä¹t#º“yu‘…ŒçXÞ`†ÓNj,ƒØK"bÒÎBjÞ0DÞ`„ÖwV•»ÞL¨>ëã|[t–߸çÚ£áÑȋ:òZ%äÖB²ø¤{ê³ùèóqôž2ÙG’F¶ôm—é¸ÕÏjàüQìMüVÐiwÌ`¥lN#¸¿KJ‹ïÎK*æœ$]‹A$)+šçdì]ŸB"&Ê¢‚ דbQ†¤p²pÿ+î‚ý≾›¤}S¤íš‡¢içªæ]ÒüEobOÝì˜ä%V"g¼Ü Òìå9›À„RpM?õ°ŒKØ,%U6(Ù|^ïMÏŏêù*g³\"€¡ÿÆ\ï|{§cNWà@‡Ç ߵ﹐¿4ølHŠ 8•ŸÝ© IfÓ1?³{‚@ –
+к±<âLœ€À™¸T²hµð¡ÿÈŅÜžUûóÙÄãÉï2^^#Žž 6jÀËÜÒw½s6¹HÑpLOÖÚÚæ©w»tÛåø\¾]ëìMŠÊ4_7+H‚Ø ´|e ÞjÍgé«¡k özŸ~·ÇqùëúôÀ“ôûîxF)ã8!ß"Ë°q’iúÛ°Ëa’Wàx…ÜtÙËýê°çº|>kÁŘt» Zz-Š
+gf„õÿ@I7H11.݂K·(XÚ×}ÆÎ<ǫb7¯2%gÆ0 [‹á€ð%·÷9l°Óä?]¨Êü QT]~ÐJLMå¿8 –»’ÚŸuŽI­×¼2Ãd)Ͻ
+I7Bכ’Ñÿ5Dnbó[ªž¬ªz²ªJºÝ»nXó˜»h– Ö&dë.Œ†#ÕŸë)ÄanyS6°¯ÞvÙË0Œïk»:.
+™E`‚“<@NýÄ9“E&2«¹™•vdâ©å³'9µ#;:eÃj÷¤ÀúBt [dd¯#udO`?–%.JBÐíE'q½]ºßèºæ£ïø]ý–zE§hw—>_w>•&êK[]qGÿ½K‡}oHq!ÙÝѪùÀAßeè€×ÔX/z¾'¶`éN.8Ü®÷”M^§T¼¨”íÕX.8è,1¨sÓÖÞ&™ë(ÔB•Ø£q¿ö‚ƒzÙ*„ ázÒÅé<CK^ïŠ}̶ÄÒzãǑŸG"·þz^2Ú_ òÀW[Uë)Q8® Žø<ÿ‘>pÆ(oœ…²Ó\*°7j”ýf€)¶^þr€jºõó؈×)ê•k£yßõ_€óÆÈ-·uøúo¢çn>«Òä´p‘—=0㲎X5pŒËvÆá äqÔÎ9?¢hÁ ”lÚ/ |agrvé¤ÿÑD„¼–ÓNÿ†eYæ.íýÂá¤g7)2O!¥„²R0pÊÙËÞ¥=Ÿ÷ Ö+–%„ì|ìÚ Ú]U†I•:Áþ®Á?ç\¬À´©cØ3øtìyÉ*Z#t¸­–CÖ3$rºÉbuw,=D±‘ØðÎuÏs\Sßpùoiª³÷Œx‚Ó ßËÀEBͅJRíÎ;®Xàœ¡ì7„b¯Ö|Âš(9b×͂Å4Åò)œ”k‡#z )‹™LC ;”o}ç:©ù3'=΅Ãaö®ßþ¾/š›)¤”0žˆîåXÆuÖY‹¬ì§9&µ¿)}Çæh œ }Ó©,d˜v,I¿VˆÕMìë~$W®ùk8€ëUÐ*¢jŒW=-g“¿ëí{Sf9\/‹5ÇôWf@ُ<Wi¨ªÐÜd!»~â|È(™ÕÎ|ÌJ;2ñÔrۓƒÜڑÒW­ÀŠž³ÆºR³Ùà á[ Å­ŸëJ}­ªÚª'·4·Ù$¯öøÿšý|*-H_’PŽ¸­ì禪Mâªg5Ãô¾„éNΟÄùq½âE¥D&gŠØ¯1ž±Ówf-Sk9n)\þu‘JXÜK)ës"÷ñÆcw‡ø®7gîðÈ˧¬Œç’¦Q‹*)ª:ú'¯Q[¯´…nG#§9i˜ç­¾³feœ’HՇŒW½£iõ蚛S¥Àz ×%ܯ½C“‚«v“”"©­Ê>wÛèåhHcÏpӕóÊ­”´Fs鏲#Ñs'vX¨ë†B-œE˜q
+µ¾:voÌy¼ÉÖ0ë@R¾”º†ô'\ccc®ãÚþ–Ì%t7ôj»ÏŸMŽF¹}\æº12æT•xj·µFò8å½ßW:oŒŒù•“îz¥…ã¢Ë<;’v6•Â~Wâúnlì;—ì®]ñR|ét÷¡Ž³Þ‡ï÷½*ìÖE§âåòžzÒ­"dY9¯û2ºÔ ó -ûcÜþK,CAfú{ogS¯ä+;œ†–´¹-T5›xà±²ÄõòeHÌ9—JN¤¯G›§øMÌGύûZ_ꕽfŽ÷@¼AS.Éx«Wòº4ði|aA
+K6ß*˜1]…9•™˜ŠÑ„Òô®Éô®ÉôæBÌS^ԁ@ ˆìänxxí¦—ð—^Íg¹c&á}/WÚ»S:êCš‘wŸf›ÿ³Ù‘ ÝF<¥f`V±ëò°ˆf !…Søµ*ždËe º¯Ö±¯{V+]³"?>ØÅ7kwUNðBQ¥ê•®Á”€ ȺÝuَZÊ!©âˆC,n«ôMmÖî]ˆêN¢Œó%q’¸TD©vÈmçìÔ•@D†~òÓúëIa¹€ 1é"Zíž&÷ˆn' ä‹Zç€[¼+óo6ƞ¡†+#úI IëŠG¬ÌPBÍE—>âjŸb[ÿ2zë¡YŠi¾èí~TìïÓ
+ùÖ¿Œž¿gQlÀHˀƒºe{Š1ü-x)–óJßÉÇ0Súˆx”ê¢U!!@õztÍxÀqÊx,ã-Š[_‘Ô³ÃA3ÇØÜ!þÖA*º‡õtò=¿'†­¬¼½ûÀöcydg«´*©˜Ñ%܇ËOž}µÏ?¢ƇLø;ry>•öù–Êd±ã)Öþ¡ÑØuZöjÏà‰¸úQUNCXYÇOØ
+ž<W0 ˱ØKXOɇ{ìÎa™F–kn—JB¸?RNv˜m`Æ)ðûᱩ±,(w*єĜáƝ½ŸfÖнm*P ~A
+¿ÍC¬.¨ƒŽ®IµÊœ+à'.õŽÜ2µušZêG'xáFIëmc7tÒßDqF·ÚZ#{B‘r¯v°ßÙc×mé2p ó[wYÇês´ÚnjUåD@ ËÍ#+´™ˆ@d„¨Îªgi5RB\hJA(*kšgdÜmŸBDP•UMIž’ W[VîŸB±¡_f§N(¸PÂîÜùñr)Œü;¾xñ֍[]q"»f”F8Ö¥#óŸH Î5nÜ Òò96ÕpR×´^`8åï<C+?Ž«"Îb¥ç:¢éí~"¢ƒ[w‹z[»‘ÀÌׇåO 3›Ì\+Q cš¦Øúmàwç™kŽ˜§ê„Û/QG3ý…G¸Qß;„Q6Öøµݧl¶Oâ¾9-X¨ˆµŠwÈËNåφ@¬z"aíåuJŋJÙ^å‚ƒ¾»`ÛÚÛ$s}õ# øíºËtzº¼ýêÈÏ##?üxÃ
+1¹|ôÖI͟ÍDç¾ë·¿¯ÃKŽc•±ØÝ˸ÎZ"ccÊ~:+†ô_˜£q€t’\>úE3#ýB!r\MùˆRÒSÿ>˜vñ«–ØcuôÑ2éÇqj#¥ªÑ:ÿ€'IRö”,]î&‚õíºí*µj Où4ÅþànmÊãdOÇò¦lû¾z[_Ãs󃻵1_ ¥”u·H©59»õ¤€ø°Ùø9ɍ»§¬»E­ûŒÎÏL”€µníê#Þîà$‰Ó(J©žçD­ûŒÔY Œ¹Å z¾‡Ê­ ÀіOœYto £S¶å-õð´`셨S»À%–qtÿµÝ›j¥ûƒ=G›¤"ÿ¦»Sß)Úݕ·ý:ŸJÖ ¼A>RóÖ!^4¸‡ôÅÝ܊XޔÕ6Ú¼}dh¨õ­¡¦+ÎX>è¬oÈm႐ҞŽ‡ÍÄ¥¦wã~Š£"oY¥„r¯F¹7)MÿŽ)µääíB)¸ðXLxÄ
+ Å­ŸëJ}­ªÚª'·4·Ù$¯öøÿšßM<ŸJµû©á3ÑWs9üh­¢6ñ/²KþîՎL­¸¬B®¥Ú/Ùêâsíé3Ãk¨ IDATÔ~- ˆdò?ÕqiÊ8þ`.…Öôüs©±øɔ®LYâÙa½çNÕ¡L €H[%ÆOlL–9õ®õÒÇ Ã(™ÚqͳÜwÖ$§H ÃRª?Æ0Ì9ž+˜¡ó]¤4r«Òö·`$‘w&^¢Ä†9†
+Š¾ã˜b͇Õ$c¥¸|¯Î‹+ž-=‘üëp ä /[”2
+/Å°RœÚª°|AçÈ ¡ÛýÊ­$†aÄãRSræ4KRÎ1²×]mO„Ôûl´£õÂhÛŎ”§ŸÅ3è:‘Ø=%€è2Dÿ§Fўøc“Ù™»Ìˆ¯/åˆlé`Þ#2~Š¢a!V!l@‹e!ÏÊÑÕhbÅQ‰—Û"
+3Ã5˜8¥3ƱœíŒÚ*ö-¬†#,œ¸á‚”¿d2‘1«2š—hF<Ãdsk憾¬®jôÝÈ$N£ó•Öž¡8ÖùÈÞÔU<{ZøD{'ÞâLmO§i2rãÞÎ?˜_£ƒÖô‘ZÒÏ+ýÚέÒD!H¹¥Ý}=À „ªƒmçÿÛ©>­¨ÒÅ#+
+ûq«ÿ¬Ì>Ô?âªIj?dëHfLg†ÔU5ÜÝÙ/­[Õ,`ë±°díÜ!’Á0,6I|¹mYۅŠùèQ@&Ä2{Þf½I\
+̸…c(Úç
+G¹S9+?iïŸzÉýz]v§Æ,|ôô—§š±JH|ÂKE”j‡ÜvÎNíQ Ddè'?}¡_±ž– ˜“¾Î¯½ÃÓäÑí$€|Qëp‹wE#Ò „pIî5Ý¿§'
+h+¤™û··þNU5E,n«ôMm.Ý­ÓM«-G 24°”AaA êÓýFhìgí°š¿ëP<! 1Œã¾YÂ^÷*D¤¤RBn ÉõdúLOˆïÛwÅ
+7«úpéˆç¼é„Qz8@lVèŽZô{ó· ¿ ñç"· Ÿš)-'ªÊ¨™›ôò[ʒfOBCIætí†ÌFʉÏû!”ú#ädÀØh Lð‚ù8ž;3Ô¬O$Ìfa6K²!=âj;Eh^2\)tŠ¥p½ˆL– j„%Ð;ʚ« À)s8lŽ±—‰[ó I¤°ö÷j›͚q'x æÙ­„~t~E baˆùèyêEÃ#ç.”†cD‘þÜ,%q¬—ïÑûgTsË8æ80›úaŠŒc¼|Ž66* ÃpBÑh¤gÊÉ(™£üŒØkHrO<ò¡MFP.È¡ó8C̼lfD2à86ÍÈaÏRùQu¢!t;~ʁž^ÁÆ#ꙙ?ôÿxÌ²•´¬îêÍqš šŒœáËQÓg-‰; ‰iäçYy®bÌ©Òd!ÈrYOo_L‚Ÿæcá+=!ž¬!cÙdá¹lé€"šùI֖O8éq.‡‚£ýj¯x4ÃQ„ć\á¶ÿf>µ£”KÁ)íè?ÚçVŽá£Í›ÊräAÍ&@̎RŠ„Ê…æwÛ§T%EUS’§$„0ƒŸ]VîŸâ2)¡_<Ñ­)Æ7-±_öÐ ã|_eØ'õçSƒ€:¡`àvBi?dŽoÏO eLÇË¥0òïXcçá­·º(<[z63p\±¾ëÒ¿aŽ–*›•ïØ}C^ï5Ïù?7åʜ­äYZ’ƒ.¾í<p.³\Áà}/WÚ»S¾œ¡?åìwdcÑôv?1ù$*àtîò1„ÑüŠ@ –”âébsÊÇ\A,‰>ú‘m¤SXb·"‡#ëMCÃ1"ÉWùÜÇi#9M››4îòfÈù´ãs˜MýK–qŒ•o«#M|ƒë¬‰Ú|H=Pbf®é³ÉDæ(?#ìM]Å.÷ý1D)çÇ˶XÇê„Ál:X²6=uJÍ ,“Šýl•8ùº2áéÏA
+ÔÎöú½-Ñõ&
+ØsÕRÁݵ”mj?ï¡vF#2«&#ëÁ*ê†Ãٚމ/­Db7Ü\*Í" ܸ¯ùÙZz¯ËwB D)F>/ üm*Ÿi°œW>ŽçH‡U-‰-‡Èc÷Ñ9uˆÙÐñqó=;ÿ;Ö‹¿gž`+4Å{Í+Ù¹0+ÞËBn¥ÎeчÅVñ kD«O•5Côè_iß>þO’dŽ°ö¾”Û? èS>M±?¸[›ŒCÁ`8ŽÆ#µ\lz† |m«ÕöþøË¯Mÿ¾bû‡¡hkÿwk£q8
+ü2š¡
+Í!„,Ä{Fü¦¶NÇe÷è/Ü(ixµÍÚ©“þ£¹pîc3|›œ+Û©Ý{DÚZrÞBžt]gã¦÷½!mžîóŸT¤°–AnzĬ(ZY’bð>¯–ýBåðÑGXM-"ÄJ!™›/ÉM?̯ŒûšÇñíðŒ†#!©”PՔìi±!õõ‰cX_‚¿˜w”=ÖsÓ'Þý†}yÿ¡šÈÔJ ہJð”U¼œ’¹m䡅J-0òQUâ)«x9½œ—+ÊÎg4˜ue+?Û¥ô¢´wÌ̐Vÿ8>zÂïÚOsÍa<né<\pgt¾x,³é95ð9Ø3:Œƒÿ
+ ޓÖÕ¢óY|ïË·¿7œ”µ¼&üÀ éÍå¬ý½ZÃ9 7îàˆÒ²Ž‘‡Æän€¦F.|×eßCf˜’ðUεÒÔ½Ü]—zׁÀÆë ‹F–%¬1GceUWÿV®Ë•ž­a½:Xz7=H¹é²ìÄ$¥§ºjú¥ÝôS3Ù}ô¾~;-kÐH¢Í'ö{]Å®@˜õ.¨ˆ ÇØ*¶y¹ñ¬+­ó¢Ý€+¿»¯#s¨¬=›Q8żü 5ä
+GpŒÇ$Ô Ú.I?pÖ:ŒåRpÆËq€´Ï&9uŚncð[Í8O…}/SMç1Õ*çlमi½ÀpÊßy†V~¬¥wþ) i¿/k¬&‡Ìw2Il&i2âÖݢޖ¤ušlÀ<p}Xž+s­4YrŠ­ßv~wž¹æHôÑs´Ã|ܞP90[z$‰@ ˆâ@¹3CÜlbñXŪ¬Ùd¡tæ/·mͪVo€&àiÝ×/yżð&"V 8©o[ï¶Ñ%Èw×æµ!}:«uÊbÁI|má«
+5ä
+*#uÖHN3æCÑs=…‡Êt eÝ-RjM…ê0–R=ωZ÷©³&s‹Aô|U
+Ï5ϤD†ð ŒÝfápxi,LL‘í” õk“’˜6}pm)Jy5åïx.•è;[ê›#Ž¦!E¼íâz´
+2˜ËàGkµ‰™Ãá0Ê·U{ÌTÕ1
+(>P·‘›¯­¢zU¡¹Ï+‚Ô
+BÎÖ±¶k\›i8"Š–y
+Afcu D¢Q.byIY™ H܁@H•@ +ˆ¼Ë¿½ª³!âyÏêÿ€âðÑ#Ö,% ¢™›MÐu»ë²•K?qìjŽ—¤óX ÌG2H @,Å°27,Z¢(¥ X³Ó6 ÷ÑGXe’ì8k?ׯٯ¢(j¹mA D~
+¿ô²£ó¡öq8¿ºí•ínj³Ú³’ÛÖc¸.ádQ—=;¬“ïs¤.î!vX¨ë¸‡Õ)WóbŽD&óÆ\F±¹½‹Rø r„ô×ÖÒیXq$Þf«©åƒX‰ÄžuäÎǎ³–m4M/¾I@¬`Š10#WÀßTA\TÔ™„ìYöpÑÌsØþ…–ãü4σ€å¹PˆM°¡„&ؔíEÿÝ­rÇO[=ÕÄGqï¹ÓDµD(“C ÁV‰ñs7³cÅõ±^ú8a%S;®ÙcÊwÖ$§H ÃRª?é$bæçrÛãûÌHmÀ±R\¾Gï0“ÊÑÆF%cN(4—/=ôe‹RFá¥VŠS[–/hàƝ‰_tì#Žãp`S…æ&ٺݯÜJbF<.5õÓ)ùçŒìuWÛ!õ¾ ƒä‹6ëoE†—:Àù_êÐÆ#®Ù×Îæ($þO¢=¦ØGBfgî2#¾¾ôœæ="ã§(`Õ²1Ï{ ±xĦ/ …„úŒ°
+3k/8ÿöÿìVwŽÝ»úYÓI}­¿`ºúçø»Äç’ûk•ÑV±M¥°ß•¸¾ûÎ%»kW¼d˝žŽ–6´Ó•º[?ýÓoùÑޘ«{Ïq\úç}çŽèrãù¢ïá¿î÷½&ìÖEÅËå=õzžYèò8ù´k?Ï0ñKÑ%í՜0¸´zryás’Séë©úJ^—>(¼d±4â©_}¯-ĹyÐ-„(J0 Ëx;.ª†#,‚ŒãœÕ—’9ŸuÞ³£^¶
+8eý«õôcÍ4g¢JÃ߂—îEÒI˕¾“`¦ô$dI/ÍW.ôÝ"6Ë)@¾C¼{6× tW¬
+ ªß·Á{fŠ¥ŒÇæ+…oPþYµåRÿ[Z–²oÜs¶©ª±[öö öñ\4W!Yèò-•ÂBr
+ó¼•9-“’H;ø
+b IDATÛØ«ùµ…@ Ö0dœô·`Ž ü˜éóøG|.Ù¯ýõʂ¦“û>Pèҟp¹Žkû[b¢™USԍrû¸ÌucdÌ?¨*ñÔnkÍ]£QÞû}¥óÆȘP9鎙C2ýŒdmqùOç/!ËëòHæî†^m÷ùó¯ÅÁr_®t]Ȕ³Ë¦IÈ,²r^÷eT±±ó -ûc¼dûQäwVýQÏO;ÆHBAfú{ogS¯ä+;œ†–´É8T5EÌÌ<:ðXY¢@|ÙcsÎ¥ÒtÉ)¶u—¡¥ÿª¬<éÞs‡øÀÑz¬¬¢â7µCã¹/éK"ˆå¢x3.q€
+ÓÛF‰€ýÁ¨njµ}•,<éš„¾·µ’$ù„\\úéôRš‡X­ÐPÿ‰¿i7ÅNòÌO‡øÐ$/¥æ{åҌƒ^€b·¤³êUYq§6Rª…~Rö”LR-‘=%Ë8•¬o×õ«ÔŽ¯}Ì8ëÿÆ¡i˜‘Ž™æ¨jm_ùØq†¹; …t0ªŒÞMï5¼dí¶’¥¥TÏs¢Ö}F߆¹ã36DÏ÷P9Òó2͆¦ç9n
+˜€·³Åìà
+ôg½Ü0Oë>gâAÁÉ|W½P«qByÕÖànë\²BÖ ¼Á‚Fæø W°¾a>†!ˆÅ&±|ôb•ë¡<’qwDÃÑsÎNyى sÛ8c— ‰ˆ†cz8ÓöO“Û¥{QNn å/jªÄ½–+…„¢¶*­µ¯·3Äz5ö 5\¹ªß¯ IR¾Gçº2ÓlÂEƒ¾[ž~“”"I’’ïeXŸ8ŶþeÔÕo–W“dµÜ|ÑËÿÚïÈ1sŠmýËhß‹BB’”Ü2à0¿FÂcø[°ïŠEQM’Õ
+ëÁð ø?1
+7wÅWj.ºôMê¨Nd—KwŪø:Bõû¶Ì«/³jDâÖW$CÇìÀ16wˆ·œQ(b=Ý£|ËïI†aB%ZY9tŸ„Ò*­ÏPµ­¶÷ÐÕ7‰Ïù}õùGÆñ÷Å÷͵Òþ _— #éy«Þû´Å¶79.Â#y¦Fõ;ËÇÞÑUûÔÏ6Çv
+U3k‘³ÀMúÚßj/ô<ó!=ììx¦ ±ø)D»Ÿ>SЀ
+˜ùèkâü"‰XÛõ‘Ìc× ¥áijŒRAþPP0p;¡ÀfV› º‘tùwx†‡·nÜêÊâ£\ ׌~=ǺôosëBf<#Éë]¡Ÿ:½³›õíÎÒ7€|—k>मi½ÀpÊßy†V~ŸÒù§€¤ýVüŠŒõÁäùN¦p눦·;ø‰ˆb nÝ-êm±%îgæëÃò§óÏa™k¥I:’üÄÏë«Äb±¸JÚ
+,”†#ÕŸëÉî0cyS6°¯ÞvÙË0Œïk»:.
+h±,øÌِå¬hÕÐá¶ZÙrç9Ýd±º;–ÆDFÐè¢ÅsmÁ&"ˆÙ‚~€k“ØôãìŽ%
+ÇÕ'žûŒèÏÕÒ#‚ˆBNäen
+)7‹˜IMòt0ÄLB(Äñ03‰~
+ `Š‡Ò\ÛáˤMŸÎ*“úMŠ¹…@ ŠôX.N–«‹@ ý×1Ÿ|óÖr«7F¸mkîp“n«BB2a_¿ä×¼ \qL±L1ñÈþx+ft¹r‚“ú¶õ&Íé HJ#¢/éXÛ>z€‘ ^ë³B·¥í€!ȋžª3}¦jèŽì՝u1Gš—N†¦’g”çÿړ·´¹a8Ïí< <Ƀ@öBÃù¶Xü4ÏOÌJô&ožBfp£rŠª~šËøß7Êv"× $…_CL˜ υ<L "«5Äm²ÿG¬XA EÀE‹r§E°D – ô\›ÄÝô†Í¹E+?>ØÅ7kwUNðBQ¥ê•®Á”€ ȺÝuَbÚ
+iÆ]·þ–¯››-‹[W¶3â‚vñ¦vÉ G_“æ-$ÛåBÄèp[¥‡lúkI$¥pºÉbuçYܺ‡ÃÆ£s¹€baYÆV̸ì¼Øáý}4
+„/^
+̨A kô\­<’Û;ώ³–m4M/™A@ æ}G 2‚~kÓŸôJ„ùzFðÓ0ÜüFœ¤„·½gdîf^KîúX/}œÀ0Œ’©×ì±Þ©ï¬IN‘†¤TÒIÄ0Ì9ž3Hòk>¬&×áŽË÷ê|lB"c¥‘Ä<a–éË¥ŒÂK1¬§¶*,_ÐÀ;{α8ŽÀMš›‘Ê t»_¹•Ä0Œx\jê§SòçFöº«í‰z߂F´^m»Ø‘âá¶x]'s)®D Œlú?5Šöă­2;s—ñõ¥‘-Ì{DÆO3ĸJ)9/Q½ýǘ>wùÄ
+%'¾UÃ3,A
+@?ÀÕDìò>’#Çrösvj«Äþ¹“¦X)o‹6–!Ûwi¡/«±R’JJô•â„:ö‘½©Ã0Œ¨N
+•‡¥°ŽPì×ûÄ3pã^c“’Ü€cF”ö¨-VKúEHoXÏ­Rxà•KôÑ2ï¸4;¥x)†­#Ô-æXíôiEb„Ä‘;]/‘z«@ D`;a³}l3¿o6½cÒÑ/·9±X$ö$Uû·‡é¯ই øØInèא›á$»•‚)•þ“ê—ßj;}uìޘóx“­aF‹ƒóoÿÏnÕqçؽ±«Ÿ5Ô×ú ë 8å½ßW:oŒŒù•“îz¥%’h—¹nŒŒùU%žÚm­¹ŠàhiC;]©»õóØØ?ý–ßíÊ\Ù9.ýó¾sGtÚ¶ñˆÇ|Ñ÷ð_÷û^vë¢Çâåòžz
+Ïlå¯qYѢܙëQƒ@ ô\›ÄEoÒ5{OÙ/*%29l¤,Æßi©ÇSÃ1͙Âe‹Mð‘zÙ*„*ÃuƱ3~5:ÏВ×ÏÇ>¼á<Qú¥ÓûÀ”&(—–â_mU-ìïp\±PBÿ¦»óF9- /*_8—Je§ØzùË¡ý]·Îêðɀ©Q#×Jè‹`þƈ~Ûç|7Ú6”G7²¥#áÅb‰<"E‚r§²‚ÿXŽ[ŒÇ€gîêøi4û5΋N˜¥B=X•„ÃábxR-T¥T¾·Áþ™ME‘d¹À õÓ ¹C!
+™C¬'Rƒíž&÷ˆn' ä‹Zç€[¼+–C „Hr¯éþ==QHeŠmýËèù{Å€´ 8¨ L$ñÖC³Ò|ÑÛý¨Ø1Þ§Í&¢‚‹}·ˆÍr
+ïïžÕEÐ]±*$¨~ßï˜)–2+¨­ˆoPþYµåRÿ[ZVp¥}þ•0îy”¦“òpt·¸ª;ö1ÖÍ|,´J«’Š(]ò«"›ýA¾¥Ró@XYÇOØR'Χ—œbab¸—vÝú÷æ¨T½ËÈ~Ÿ´
+ó¼ÕwÖ¬¬‘S©úñª·cô/­¶0«æTiDfÑ"#€ûµwhRpÕn’R$µUÙçn½lˆä
+…ZŽ@ ˆE åýÎó<@ˆ¹«3ý?{çÛĕ-þ3•Yy¬ì(Tž¨E™¨Y1nAØ´ÕÆ)Uq–j±[ôˆ©qÊWÄiW‹C«%N«nœ·êÆ´*8­–ÚT¯ÄAKq*QVmã>µ³*µ‹ƒ¶­½ä‰”± b¬M”-–üýcìñïŸùIr?²¢É{Ï=sgîü8÷žs{­­þ¿w°–ž á~>yÅ–è —J)¡²
+”…òÐH禈áy[ñ¬ dÕ
+®ÞeC‹~ç§êÏYN`G ÃÜãCú§H,=cYBò™t'š#×,tBýàñ>é#‡ô‰5ôÿvðR•}3áØW;ÞÛWèؒ±¹Ž/'¬·¥î”SÖÐõj])TY¥éaשŽ÷õ‰o>ÊCÂØá‰8–MÿÎϗ(ð"@,3"S料òÖ.kdšá§Ùp8øg€*oLµ¨‹[Å>p©™~çkMÁôåýôê½ôfÓÕÀdè»í}O£¦’Ùˆä „;®¤½Ìôœ¦©ýâ¿)Þiießýº~W¿>KM 6jÓ$§ýu^‰Æýùh(ðÓÙ÷ÌÁÓõ~WéŠURiÜ%.n5Ë×>¶3:C9š +€´ø5 SÈ4;tª}Fÿ È4äc$YOROPrYŽ¥<UëÀóϤ >rÓߺÏø£”ë‚—f˜¡?ê:v+K zƒK•0"~\°#æ×,ø:%„þ#›g¯~wµ—Ìçäh¥¶Uû{—Ìç»ì=û§–œ¹ø©±â
+́^ïü½gï'Á¹‰Áû_¨uî?šÑxcü~ÉÇzyË[ÝüT|ú”Báháň†A¢ÈN.K²ê1ÀzµïÜ¡Kݍ®)ǚGþ*Å;^¶x/{‹g€„åÃ0͙ԙ™S.ŠŠIÍïÝC
+Tüò`0U=Œ±¾yU± pŒ³j‹»ë®X‚q®ýÇ=‘y;Ÿ»äÂòW9è³eÙ"¢Àr‘UXø&“óó¿\›@vþœ¥•ô´B
+€:àªB|wM½ÉŽá¨mОTq×ü…œ¬­(†#ˆÓۅ7¥´’÷’y ì8?Ñ!Q„©¥ZÚq*ÐsšÖ¾ŸœÑóAêºš”5Ù3c¶¹f¤ÅRÄÏ)úڜ©ûÙ møʸzkñ+•Všfñ>Û´e/¼|–¹ìNµÑs´Ûv,u^<'̗^\jÐ ±LÐn×.µ
+°ÈZ22(XºÃö÷ìòj¹B¡Èi«*ì$W
+[Ç4Éùk#Á¨QǸê×mÏåœ×Vf6™ôêšHTªúU‹ؑ6™š¶D¥Ô3Í#¡lç&DˆØ˜g.(:àõmŠgΉf{Ó)U´ÓCôþŽz¼·ƒ}¶„ÔXŠ ×\½>jyÝÚ®s†gx™¢VwðøÅ÷Š7×\*5î!ÛOÓ ’s!üD£¦15s,¹6äqß°ÖuOÀ:…nŸÙ?l€¼é¼Xä\ ÄÊ 
+«6’åOY!EDFJvžrS —C6Â@כ¼ãOˆæÍ&8ɉO– '¹RØ!“_‹w&$üè)œ¿râ˳ͧ€¦–ꎎSâ4­Ìt‰ S ÿ
+îl78k}֐ùzyË[ÝísÜñœÂÒæ´|“|
+ƒsÂÀþ`Ï(˜V*olz€À Íão2LβÂp{F\xÃÜÿÌyú‚>ûÀ9vhmU¢.Ö§ÜØ¿ê<~¤E©¾÷ô˜»˜­½Ì%kÎFK®š3‡JÍñLºUòÂí츱F'ã˜9Í]1,Úóq1ï sºÂbÓ#“ñ`Ñý~'ó‹>[–…XB¡±ˆuÀU…xB%±Ä²y)½Qàš³µÛCxŠ`‚ގ݃ÔK#ó£)b!Á sgµÕIsæ
+CåF¼èF6zX:r¿“IàËÏ¿œ¸1¡ ²jžgµ˜ÂNr¥ þo_?o´½ÚÔ1Å×nÕY?··?Û^ÁQ¤b÷rڛ¶€¬á×-£¾¼QéV•Kläâ–J,³©Ü¹ñ@Ðv°m©U@ e€lô«û1»á°e^m¢TP\Î$]ÍD3}ÞÙô%ÁÙ_ku~ꙘâeŠZÝKfÇ{ù€iŸv·Õ{)·³<4ŠÞ\ýwLôîD,(íV`èËóù½êÜNÊÆGQï_JÐlzbјÛ´r
+²çÖê>Ð4fA֒ùFâó9ÉÍUcļRºKrqËÀrIJÏÇE¾3™vSŒ6›@—41wä@x¸T0™·°S&šÌ‹@¤‚:àªBüpxHLJnY>¸åÄ}—‹Åb,C»ß·È…/ÿõš|6zSîX~ÑÀI£`Î+û¥³cÀlôK
+6…@ r°ÈZ’z‚*`£¸ælÕµû‚ 0AoûîAê%Û¢éˆ(œ0wV{œtæÒµ.nÈF( zm@ DY}pà yBÃ;䒼/$Ùù+¨X% ¸R‘ Á„¼^9¿•õhú6X­pÛña ö˜M)suïØÌ¿·–.&5?ý™ÓdÀúßeHÀ0¬ù¿šKϟ©Û
+ÁÞOKôQâr½ø/û½ Ã0y}ZÐ^,ƒõrÍs`:UaŸ¥EKlÀ1 “¤ñˆS¬%[Ï죫¬R˜ö©)s\æÃv%¾ÃÖËõm6±vz@“*CN¹ §›)¥/µ
+öOÝô­ù´ÔwvuRëu5³
+j$_pÈ Üq%íÀ{NÓÔá^ñßá×<ÒÇ"7{2¬ÕŽï~
+] ¿«_Ÿ¥&µöø¾ic]£W¢q>
+ütö=sð´E½ßUºb•T
+àÚoÐÚî³Mê‚dËÕë“!ߐl¬OmŒ;¿0e¿îõ
+ÔW$a¹&ô}2 ¯§d*u 0
+˜/l»–™©XR2jÜ4çü°OÛ Ö>£14¨ÜÇí•Yêßnù°
+}ì
+ûÌ%%dUºò{[²‹0_Ùêv÷´8¯ºiŠÊ_ r¾ï!ˆUÅbŽK¡10ÄJå^lRø±À¿EH¡¶£EÔWâJî 7Í»tþ‚ž´ 8Íñ Ë\c¿ðhŸ ¤ {n*“úþ0Ö9pqòÎäбg³%u¯ö}¦ßùGT·›R¾‹RnAý)Îým äQ…µ¶|ÙÜûÕ}?Ô}š Œjg<‚d|úø{dz3ËUvÕ:ÞôeܖÑsšV½<:×/õ²To›ùð€;eà!2fÐ?øzZú¨—ìX8
+mfÚ8ÈzRtdÞûðÚÔùhkޛš³’J†O•‡ãNøƒåˆQØæîú۟ïS½ÿHöDøà‘&lmUÕÏ1ò)ƒ÷W8¨ÃÊàGI‡Xm,‰Õ¯¬J¹iÎùAŸ¶A¥~Œ‚)†”J
+Üõ¦…–m©_|g¸eÄêó±+ä3—"!»:²ž$³^u}Ûÿ\u½ª..ÿÁg1ï hìÈLj¹ã½ì]jˆÕ ꀫ“¤™>õUF© uO©½Ÿ¸è1;f®ù‚§]j™\¶NÊDÈZ½ª«ÛÛâ1íTõNãÐpڊXöÏíŠ$7k_;ÂWº˜’¿*· ÓÌù{s²þ}¶ý/ýŸÛ5Ajû°Ûö
+€“–7,¹
+àŽ—¨±7\À1NO„wìK ±Þ£|Ûo †a"£j}7(kWÖÕ$¨ÛÒØ÷7èíI6 _ðXú¡ÉBþä¾J+ ó;jeMáú£©¦f»³wô„à>C=Ù {Ù>ûŸØ읐©Þ¯ºµP:ÈjwðS(<ý²}±#Ëߘo1—‚ø°’IÕÕLáŸãðý%p”„wþÁR–“”Ž&—ËZ<QŽck„ÄRÚÐìZ‰¯Á°58¹Ycÿ‚ÕpéŸ"1 “?ª´ÒÔ.䊗G1äc'Êç3—&¡â6z×OÎ6uj:òÉKe‘ï © ×ĪE¸ác¦9“:tÍ)ñR;…”û§¼{Ȍ@@ ¥óPî‰Ð<F£èO‡'¾òҟkõEl ˆj²V¯òFxݦ¤ X¶)ÍLoØÿ|Å #øgJý8/·`2ÿ#øù¹Ÿ’äZó!ca±ª·;ù‰£¾iwÊ6W¯§û?´@ז¸e||‚§:ÄRçï̊ Åþ}¯ÿ°¼UÓ
+ oIÀÎÔÍР6}·•ÈªD
+*B,ÁÑnÛ±ÔyñœP0_zœh$Š¢š#ÄJ¥¸ÕWZÿ;mÞ±yYèY˜•¿’JS k•ê›]—|¾›tx†÷Ý»‚´\¥–Êd8É"§ËÚ}¶ý/#ƒ6u=AÔ«mç|üíAw)+ÄâŠQÿUï UIAªŸR¥Ž
+ëÎ94ãrÝáN!½lµ (†|ìäó™Ë–¡§<eVG—Éeÿ6Ôý$¯6³UW°OÞüßæR±Ê(Û8ž¸e±ã&µVo»,˜;Žœ²¼£òD¥^¾Ù÷…¡LˆåŽj;U<XP\$Íô¯28Ž“ºy—Võ„Šª§TO¨rN¥Ç[;uz÷7~æ.¸ä64{R÷vè,¾ Mÿàëx¾CñËã¥dÄ¥$˜Ïø¸ûÀ½í»‡Ró[Ró?ç r©
+8éxNѾÛâ 2 8º¿}𒠀£íÇò†¿ïîQwë=3RǯâFmî–Ýá»»’Ý'LÍÕR×y¢G¥LW4ž’_éR\öÓ7#ƒö&Mâ¹^3Q¤iæRisµÔŽÏ aþÖ>Æ+l»ߘOü.#Žv·ÞqÓ·:è³îoR<s\‰çMàÃ>iusaÍ‹úbG –nšã
+È2ÍDÁwaHÞ )ÅIN|Üd8É@tYµsìˆå—œ}fý'FƟ¡œÿû UÊ0G+µ­öoCz
+d/QmÑ_§¬@1œ0µTwtœ
+§ií`¦]àX<ð:ǸÖÖ´ÛnpÖú,ëå-ou· XÌqÇs
+K›ÓòMòÁ*øØ9Jö±+¿Ò>vÒÃg™?æº,óøÌ¥I(†ê1ÀzµïÜ¡šÝ®}÷L¢†‹î“‡aXçï:³F‘y¹3TvC@ ©Ì㸔ñBŒãþ|b± ¹—Aä£
+«‰Åbâ<Bñ|¡”òÀ¥@çï:Û¶ùŸþS…ÕˆÛËíÀQ
+5RvøÝVËgww¤ðѝ¿3k±Ÿosxj{F¹éë{ÃØ÷åĽÿÄäkÒÔßòª=íÇ~¾íПGí/i"7½»MÃ7'„ÃÉ«GÛ?Ê7x8¡yüM¢‘ÉYV¿çnÙ×nì:{g6u(Ý°÷?sž¾ Ïn4ŽZ[•xÏa}ʍð«ÎãGZ”
+aƒ7Öèd“¬/CBN=3Ïfb—k?ÙqI999"DÅÉ'áÌô‹ð|\Ì;CÑBQä@ K"b%Qø’–CJØÏ\žóû‹:W¹Ta5³“÷Šd’ÙÏG‹8å\ž'¢£ÑuXrŠê°ä
+̃sP@
+wËéQtº‘~ù±„³Ä2ežœä
+‡-óꖌ(HÑ%y‹Y2¸h¸¤Øéœ[ȗ%W ¨K®À<è0pÀA\”Ã%¸`’+}{ü&#[‡óQž)˳8€ÀÓ·˜Ò¯.ÍøWô” ?qóU©—ƒ’ͺ+S½2;ï2íÈ)$,m­9Ä
+íö¸ÉØ{Ù»Ð)ªíÔÜFßó8É@1g¸™!YR‘A)>v…}ææ$>yóøž]…Õ‹éI³)è[±Ú(ú|Ä72ò„†wÐ%N0̪ -![.†Ý»Sò˜Äââý1â½É랐Efxžgùø²—< ÍØ^Pëê)DŔՑñ㽈û{—u}2hØ£#ɹNÒA b¢Ú_·SüJ_„¢ŠúØõ™›£—ރ$ž4¨±È”kgF*#äùíðêßËÙ`1),žŠ”^)¢3ÅZRRÄtÂGù¤%Tm¬9ëÿI'+86SPB%
+„t²4™‘ðpºc2*UL}ŠÂBŸ…â:ÌA)H¤|”—J¤Bê·¿g(ðh<Ô8 IDATì Ïñ8ϳ =¥9þ.4E{ŠHѦ€N™€xâª6֜ýGH'“¦^½IJ“6õjêêú³zJ¾ëŠxj¶´ßûWâÍ'z|ÄS£î¸—Úq¤Òxº²ýÞdÞ'ž/¯õŠPbë•(­ü“[„e¢^9wùvä’Ý({NÇr®O\äfµë³!Ó>#IÎçò†¿3kØ0?S¨
+,ò#V4¿5ί´² /èëöûïÍ2ò”øÂþ#ÊÆÓ$Çƃð²ß›ªž=ÖËÞ°ŠyÄùSqÖÉ~ÕÒÆ©LÄàîúz^·º¿ ÇÃXZ²7»Í+«¦}ê§Ýþ 35wõöí¢pz@Sg÷Ê6eƒF0SJãwME±V<‹é•ƒ@ @<¸ÔÔÔ4ü9ä;wj**ÄÛ¦núËÄ|ªµŠá‹‡3.jA.Z¾„C¿=D¬Ãy Ôl¬ëÿG>sya rÙ
+ÔÔ¥ÕÅKŠµCºU‹r|F| I!M
+‘›=¾é´²Žï~
+] ¿«_Ÿ¥&µöø¾ic]£W¢q>
+ütö=sð´E½ßUºb•T
+á§ÞÏ/ÊN^é(UCXÝp,ç:å¢Hr蔋©ÔRaØÐÝù^”i©¡/è±5{?-ÑD‰Ëõâ¿ì÷& ÃäõiãÊXëåš=æ@ÊX5w×giÑp Ãäi<âkÉnIîîP†5§²JaÚ§¦Ìq™7F ەø [/×·ÙÄÚ͔2cL= ™Õa˜¼Þ•ó˜¯løÌtÒW\>@,0È8þ ÃG9ñçùȪyZ]³±N­3º¯¸k6ÖññeYg·I­TÖÔ)õmV$þHªÙX7ü£Ç¨ÓÔl¬S>­µ]¤Jb]ÁÏìMuÍƺ:µÖú‰?)dŠ­û…ڟÞf¼ÆðQŽç™¾75°ˆ5æ;„àNƒNSWWWS§T?op~EóQŽò$A£±±ĺگſo™ñaÃó…Ž"g½žÍ¥5º.3bcf+#ÖNeoR e¥S&ªæl·¢
+¿Ð9³§@Ö՛Ö7¥¾ÖÝ=…NDüâ4$/Îß
+z{’'‹/ØÂýÐd
+¡@r_¥•†ùµ21§÷Í&ßV»óÅô3rŸ¡žlнlŸýOlöNÈTï×?Ý*î”Õîà§Ð|=(ÄÀ‡}”Lª®&`"ÿ‡ï/)€£$¼ó–²œä ” 79]Öò8™å¤€+^N§4ß!¥\•\‡ÜV/WÿÑþ3V5I`&'”擾Táٕ®L7µuªã}ýDb¸&f…@~w´lG·ÂÄmô®ŸœmêÔtäî†@ –Â~¥÷b“Fø-\
+F€ÖϑxfE܌OÉ r­ùP5²î\)àŽ}µÆ×<0f´wiO¸Ä*_›fŸãœ˜ Zö[‚S¼T"%²&£•…êíNþT»oÚ&=î”m:®^O÷h€®-uIG¦Sð~Ü<qþÎlòاY×[5­†»C oIÀæ,éZÔ²ÿqí"@V­ 6$÷r’䯰R€ dâä—þ#f$ÐÌ0 ‰Ã0R!Ç ßX\l ­.oÏÚ:ï4h…C–ÅG;V%†uþ®s©µ@ Ëݞæ¡ãG•|„”7Ãò<ŒOE< §Ù§Ëï$Çô_Ôm%˜kގæŽì<ùpïW÷…u#߅H)ÓצoÒÚÙq‹{¿ÚƑïú `œo·´s·Ü…åhßgÜÞ¥m-†&-ɌY§4Åõ^6É¥¼ï“Ž½ûµŽVõtFj:hÎLâÓޞ›‘‹‡ÕÀ¶ý¿£ÝçFGž#™+®m»ÍcJ¼°›ÚIӗ´w ‚›Z߈¸×uÄK½|±Ó]î»câ¹™
+3ÑxòS´óµânjâöއ×hJ*ÜÔãNøƒåH\w×ßþ|Ÿê•äAQ‡•ÁýÃð{eF½©rêyï?1Ñӎþêh«©…ñÅL9ùä#Q1²jŒM€ñÉø¿ÜÄX|ï:
+ëàR7nû’²‰Ž“3½s¿àNÚ¼ \&ê•èfî9‹YŽäœB=ÿ<”{¢Á)dڍáIwͯQÈÉZ’¬'©'(¹Lž]µ<ÿL¦EnzS÷ŠñO¸»nPJKmú¢ù©±ùÕ¹‚çâR%Œ$æñqìˆùµ9µuÃQKøï43t2,ë|Bÿ‰%˜½úÝÕ^ŽVj[µ¿wùÇ|¾ËÞ³ÊÚ5û ò¦–jiÇ©@ÏiZû~2®\ÏAªëj²îÉ~˜³ÝÈ5„µ^ÞòV7?%øøãŽç}mÎÔýlÐ6|e\½U–£l:•V
+
+bµ‘ú|'k•ê›]—|¾›tx†÷Ý»‚´\¥–Êd8É"§ËZ>'³‚äð¨Ë㔆¦æjèø?Zd›zµr)€L*•m Ô/ZïݹÕ³ÊÜÔî³®?šjj¶±;{GO$'<äsG˖¡§<eºF—Éeÿ6Ôý$¯6³U—­»Z»@ –9©7jûá†á­×ì¼âi5aj½¿”ك ¦]Ý{õ-}&àÛÿ_«ûR€b†f aføJjŒ²‘(ðQ¢ÀÜôۏ؀‚T¢ëg~>
+ÌM_W›'G]•bû­Êc2º¾ñ3aÆy¨ýÕÄt·<ÊXێúo2ÌM¿õ€Uöd7!É#}5áü†5œ¢‡àž é?öÏ°÷f$8Á…#,ÏG
+p_
+Q€û|áí}ë@=¥2lñ Þg=`Uü²—äí8y;âa¾:ò"¨*vçÜAoÇqòR× 1ïÒªžPQõ”ê UΩôàxkÇ NïþÆÏÜe—܆æ´þÓ¡³ø‚4ýƒ¯ãùÅ/“%dÄ¥$˜Ïø¸ûÀ½í»‡Ró[Ró?ç r©
+òì׎l ŃÞHˆóo7;;÷>®ÞÖþî¥C:/FÜ¢j´<©èÑlk¿ÆðQÎ80¤•Œå«1ó$äÙ·š¯êkêêô¯õ/÷7(¤Ûž6ñRª¿«ÙÓÛZWWg8âj>‘t€nêú‘MU ÀQdWJ:þŠÚõf붧Ûßnù¸3^02B©³û ½¹iÛó­A…ndД}*g±Ðæ^<û¯‚5|D#<õˆ,x;œˆøo2ÁÛ\˜axŽŽN
+QŽ‡h±í¦hO)ûºÍ×\ ;ۓ»§¤^½}³ßc/t"Ò/Nò ;~q®SŸÍê)B‘Ô^ ¹zJáFs¿,íhnÚö|{P¡s4óQŽüíÙã•ÎÎÖmO7¶÷&;NZú»æ‹„+¨,lËâH[©ê­ŒŽœ
+‹ÅX` 
+«Éèã8.Ž°3,QMÈ«å9môCÇÌ=oGjŸÔÙNèZ5–XŒãî­}xï¨ó±{`bT¿n;{Î)X1 K‹…’Qoþ‚#ï˜:ŽNDøÚ'uö“Í{ŸnÅbBþŸþÜ©ïtND@õ붡sN2½¢dm1™\.E¢RÕ¯Zú]ê‰JÑS¨Eh¥ÔôÀûêÇ;Çû'gM¢E;¥
+ê™fǙ~í£8x™LÇ'¦øÚ­;¬Çî¶mcQÇ å<¨Œs0íÇ~¾MñÌYær|6½·…Ô_ÒrLÚäµÀ;êÇ{ÙYŽ^›Ýæ\[û¸(Ÿc|–×­Ã_…gx™¢V÷’ÙñžE˜4—}¾DÝæR©ï²]r6p"-šmö3ß8oØ/]›€u
+£¤¿±oÌ ÷ցz
+wËéQtº‘@ JÅ#
+DSÔINý{ïy‰¹§­©Up’¶ŽiJ]ÇÅìñÑ&“^]#¸¬]üÖ*&6m9*8™øû‹Ê9FRð¨»xΰ^}ñ½6Óþmq§´‘׶Õl4p̘ßVüÍX·7{'GÿÔfhkìó²ZU÷Ÿ¯
+«”ƒ9w]ýwL sW 'y‘êšöiw[½—ò„«E̙…À…zÊÒօX%,f$½älú ïø2ÉsG(xÓ/Ôy&/ZZl‹ó´@}xiáh·òC_®d!_çvR60>ŠÌô9@³ˆUÎB8ÉÍ·Ž¹©Ì£ŽþL¯<$åî®vßÞÒÝÔò¹£ÍÝÑ­°ü%=ˆÕ€d¦pÉûƒ@<h,è[ê)Ä¢±ÐÁ*ÄîüÐ<õjÜrbˆ¾ËÅb1–¡Ýï'FíÖk
+˜Úå”;–5¡]´ÝBj ýƒ“Fÿ@©‹f°cÀlô‘“¼Ï÷5‰_®9[uí¾  ¬m>H½d›ç‹û,s+`9äU½Ý»Ôª,=8aî¬ö8é"ë5 îh9mè%J¨Xþ’ƒ>hb™ƒnԈÂ^̨§ +±;—ôX`äõÊÊ
+*ëÑ<8˜ÔÇF{ùVã³u '¹ÞÑ÷´âÞyñB+ìQ·ã¹¥k˅]5»¨_}¥§É
+Ñô<¯ÀSV?©œ…|rÏ'ËVÏrnmŸSt“B @ ór_ID¦"Ì-3å­]ÖÈ4ÃO³áp8ðÏ;Å.¡V]ÔºÅðÃ~¶(–“y%ü]¦ 9æzª».†®‡B×C?}ça;t=Ô¿)>ºïøî'11t=
+øˆµ—54E؈Öc©°³Ï´ZéîÙq´Ek¾Cg.Y$'H9wWd}æ먢–$sYEF~£õ):'/ÛâûêIõÔË;ö. —ÍØE֓ŽÏ;êz,¬·ã
+Rmô €”"å{ –Ó.úƼE¿±³+—QQˆE;eÝ=;Z´þìiær‚¬'Éz’¬ß¤„‘µ¦¨%ÅD²ž$Éø¨’p“
+®Þe$žö%¾‰©t>Ñïž7ƒlû§çº3¬vïèÈ M%â$R™°øÈ¢Øe÷ÈU.æò÷g”È—¶]
+‰K¥X´€¥ãä<¨|:çKGý%[Xáþ²š»sî 7}Ÿ Èë)™J„ÿÏÞùÇ6q¤ÿÙ*©¼T^D7¢U6jNØT›rjœR§œ» /1Ô˜rjœöÕaéÄ¡ºÆ驍ӪÄé©Ô¦Rƒ®àTN´v«öbNGã ZT®ö©TÙ¨ ¬ˆµŽ(k]"ùýÎí8»ëùæ#+ŠgggžYï33ûì<Ï@`d2Ø$·|ädnò?Øój¸Hÿžû1~‚µ½¦#W㎫vƒlF"c¥‰D±253p@A(ӛ\Ûª Õ;Añ
+ªH¬Ž¶4hÃpBÝ`¡3šïò¨)Bñf0»ªº‘€¯o‘“·ËË,õ“åžÊˆŠ:©™…¡N
+@, ‰ðªíõr—Þþ¹›ÐÅÉéYµ`®WK–Eñ±¥^pH!b¾<í7m?IËv¤¾öòI¯‰þҞeÅól½¬­ªõ—¨Ý†C?~ß>iQâ¬ZL¥ÓÝi™2²ß÷ Ÿþ3ÚDzðݺö/ÀseøªÏ1ôÞ^ãÅdۑ;-´ Åʂ\K*6(¸“`9ïuRՔbƒ‚\Ëãë:®{á/ƒ-'úGozŽ6:ë§Ö?r¡-èÔõŒÞíÿ¤ñ¸©6Äp´¢¾•®4^ýytôאýe¢µ¡€Mì ø®foÇ é˜wttÔ{ÔÐ۔k¹e5rç~½çٚ\f9ෝ Žÿ÷^Ï«ÒNc^Ò
+
+)*Œæ¦Çz•·zë¦Æh|•ªëý®|*íð{bߵζÐsﺲiï櫝÷ý‘I0­OM/9†a†‰–¤L’ã\ˆÞ0SÐ×íÝò—‰C}Ÿ†å ™…ü "üq_î|óÏbiŠîSÎý¯ÐpЫŒôÖjl3ëšÉÒWœ™’Y¤-H_f²tôeɒ~­†aXÊx_¿SÛý¹‡Ý €j*vŸ‹ÅØÿ ±_øôO«%Á@R„Žë^ø ÓÓׯ}’d®ùÍõæÌ£š·?DNÒ¶F}†bóòp7¨º#Zï•aJÂt7éê4vvÈânP¹Àà½ÒCã<¢¯ÝÜÌÝt •Àq†aç~½§/ǹõ-Ñ
+:¾ÏÅ–¹6È~áÓ<!v’ãsƒ-wƒÊuGé½2<Жøk77Qˆˆi¡å»TÝ×+=W†GCš1_Æ.î?ÛYßmè<}úU¹H¶™efù؊™._(¯Ó±°k¡´+WŌ_&_!´Ÿ¤•o§/—ë°_þ²”o›b‘™oú=[ÙÁÈ$4=š½ Šª¦ˆ©©`–ÃlÙºi«“Š©t†;­/ ®ÃÊÖ¬y£¶êý79àb!Ho´µJcé r§E hŠ•e õ˜ãCGÖJ¬L”«À÷ŸôÃoôò¿ &8)w÷Ó ãyGkÞ­H†òÐìÓ¼é
+—ü§?l,TªíRIßµŒêþk…o~5Æî*I1BŠ
+“µ¹;nPHŠ iØá÷Àí{OeoÒV xÏ •Î†Î,CÒà_EW±šhüs[ìnrž +ˆð픓(‘åζP,¼¦dÝ*ª<¢_.}řÙ(!™ n‹0H_i¦Ÿ6•)©Lª©QëŸRrׂjAURT5%BNHy\ˆ5Šêßq‰¼©˜æ¬×tȂ¯RÀðÿRÓñ«W®vät§™B~°#úŸö@Øæ‹ÉzžKçš)^q •ãI§{@!Úg U]°H¼}«€œ…ÍNrežåϔ ê¤fZ-ˆ@ RÌ­“\^ÌÂ.K×`ý…~Ó5I’ªFï…ú"ËçõÒõK;½ eã-3._8¿cœ kîxI>xÄãôEcŽTà8Öß9kú#É0L´Ä \ï¥ÇV§1ˆ‰:Afû¢…2^[é4Oµ FþTöeûøÿâ㷇ÕAÝo÷¥
+2wØÐE·¾~Êd6Û«­u~dï0ÌÍ)¯¸I6: ±ÇM´7Y€-d+xûëʾÝuÎó†a‚ߺtõ¹,t5â
+†¹´Ô›eÏtQ}VRN¡ª ‰·o’S´ÏÍîÚrNeDDEÔ –i'…@ –>ÓÆ÷9u’ˇ¹ò¬r#-´|^/=qÿ° §7þleæ{Rå fvŒBùvKl¤3pÂ]N醮ÔbóàGhݜ´ŒAøÓô6B‚NcD´\‘ìñP_£2~•Œ•”å‹&[›þ±Š¬4ËS­” ìM¼ðrÊêòÇ"}þûÉõáTœXVeDòõTCklb‰ÃßQ—À—¾$V2R&]+Åÿ©ÞôŸk¯élª«X·Fw¤×ÔgàÔÀ‡Mö¦Ú5ë*tm¾¶¿]Uà«Uýï7Ù¶”=Œ©­òCÞíë%éóUõV çu¥ýµºŠŠ
+vý:nyñ
+k(àî¸ËÖíãi&Gógã-ó˜=}®°ÓÊÊ6ÁxÿÉèv¨€¾äªzÖüÓ8§ù åxøÏWɎ-’ÞaÏÎäuÓ8ýê@èhr´âWYEsÇÏãÖjža.ó:¸wha¾M/Þgö5ŠvÇ踉ä=7ýû])YŠY7‘8p´»ûlÌzd*V!ÂÊ6þ4Wà !pÊ?êR:®®ýÈÀ†SÛç:˳Å'ø÷]Ëa ˆ•Í¬â^|t±¥@ ¯i&€¡™CÊHª’2M{]´²^/OöðìuãšgÃq60o®@„žgW$ã\³9ˆ4P†r\óã=#)8E›¿YÒijú²d™ïLJ”:§Íôk°
+þŽ8µPZØF/¤áK­§Ïê$‰à30wÃÏRk¦ËEÎeÄ蘿xá™¸s@ߢƒÿÆîÇH’T>¡z|W³å½èé¾͓ûo_s£e0)ÌL_Ž;·“ör£§ÓDJؾ÷öYΒÜ/Übl9ð·ûKêè/~óncß/#"Sðõ–÷¢ŽÞžú§)æß¾æËP4ù▿|aœÛIÛd½ç+%a¯Õ9#&6 ÅÙâðÿÔôŒ"úK ûˆ¡ûˑ{ÿ‹¥Ó›y?(”§ÌëV ÃÃ÷L!"dÖeäÏÆÑø#
+û…Æ§Èð·ÎZCwÒLÏÑö<B[²‡Ž©7¾ÁÀdttœM8s7íeµ¦ß[€¾>sŽ>¯ã±˜³ž²5S³6 x¬žoé:ܨIBßûÚM­Ì“ÌE+ï͐ši̦R‰G}£n%ÀúñuuÚ·OÛ_ÖÀí:¢wE[˜K–ĽQ{Šºè!£ƒ:Uò¨s{òžg‡ Z)Ç8…n4>"+d¦_Öð`Ø1–X%¶|0xDU{–ê÷9Ôr’ ûÍZ]x§7t\#xbšÝÀ*'Hߨ©¨8½ÜMg…–a¯‹í¨·Ðfz@š‚˜Gæ[_–& °
+6¥Î%†å˜ÁäX
+®9÷µùȔ†ï$ö¨¼L°L„±ð+ß¾ºØ¢ V8ijYkuÒ\ѝ”OÖâ^†/ÄÒðìç+dëeêuN'9՛þs%¦ö¦º} '¹>ë ºà]dM¾m4ÖmîLxVyƒ=pM5ÿ©îøb•Oií½Ö¾ßŠmýªz+Ð3Ø^«3ߍU>©µ^°7?Û,V~.ytªŠ„—^ÿ¿¬°úßo26l1'ýüÛ¯m©xLÏ1ÓâZ&Üly³ñ”9åcë¿rϳ•ÈSHþl85ða“¾©Ö‰I+•I§ã)ÿY!3½âüi‹ì™Ó©À ƒo8%²&Ãô7+¯Ë7v˜9ÐÍ,!Ó³õ՟,²6k‘±˜TV©}¥«ÿýÜ7Ãl*5졚OҐ0ÓšaŸÃpÄZÕ6«dÚMÁ¾díª·úÛFtµeQ‰¬±õ\ÊFIwZÁû!1ÏÎف@,†Õÿ_ÑqA)í“Ðý¦9¹ٓZ9ãÔï|q‹à¥þÿêõ{
+…C  .ãˆåÈìLDÁ°7BDµ¢ˆC7XEµØtb^gHS‹Âüé˒eRêœ6Ó úË Q–f'…ÌÄÎl&îźÁrôuÕæRáÚˆâ˜WwZ4>"ÈL¿¬AÆGĊ™éˆ•Á|¯‚M©óCH«ˆYRœ–é‹D±,˜Íø®::б ÏVa¦Ð%{:>LÛèÙ°㧬jó ÊZ
+µÑ ˆï/B9ˆE§Íç°ï/ÒíúD£Ýákɀ¦¾±ÄA5bÅ0¯73ÒbŐRç’Å•@ ÄÒ·óXŽñ#äîx¼ø€$óWàœ †X,pÊ<*îÜí'‚Šy‹&‡@ – ¹7`C,7Ø;¬ëT¯~–¢¨Å–Xº MA –5¥þÃ0læaökÿÀIÓôŠ„@ æôj@ Ë䩆@ ˆ˹N¹¨Mr×YM/D8# Ã<w¸¨h^¡Ïë°R’˜–<¬À‰ôvîì÷F ÈêiÁâ²ÝWê=¦P†o"w'`iԐå8†aI;SµÌ¼tÜO–¹©¸Já~@%7Mo"§À³ Yœý5c8AÞñäL7Ɂäs¹Àš2ó—]ÈÓ³XÁw;wëߦÀK1l5¡k²¥j§O¨3Ë änñôv·/$sx£æä!‘ÊæUÃç}؛ȝeqÈ,çE(î*­àî)U6ŒBœ…œL ˤ±ÄÉ꨹û\÷§NÕvz‡F¹KoÿÜMßDäõ‚C
+WïÐȕ*XOÙ?w[^6PÎÙ6³-­-òUó蒌=Œ»=®/_r^ϙ‚ÍÓE ^pH¡Ê|™qoKÿ^í'iùÁÓ©¯=…U½:}®ãÊOZiR$önÈy`_­†b¿·$»'ØÓæ¾`§¤’Ð÷¾ö?YT´„>oÌS°b*MvOiÏwæF°ï#3ß`Lx¯ ËƂ{5{ÛF]ÛI‘tÛgZEƒ‹ù*_Ébe€Ü`ñ ÇѲ+ƒL» ‘Sè-']ö— T5šÌ䢔r<-3ꃡ©e¹ŒË}ùº<™£Í?DLÁ _]a9
+H»²É*)jʜBUSŽ -'ªÚ,àÙ¯gžq0Ÿ%ˤä
+V±Ø×»2;êúÚàõ°ïßçb Ë\d¿ðižK¦lU™„Žë^øË`ˉþÑÛ£ž£Îú¤‹6p¡-èÔõŒÞíÿ¤ñ¸©6Äp´¢¾•®4^ýytôאýe¢µA“—ˆ¼¥¸T®;Jï•áÑЀ¶Ä_»¹9uFg}·¡óôéWåõÇ´‘š“ï๐åZÔú¡Fü\!Re¾JÕõ~×Ì<„Ò®\3~™´0´Ÿ¤•o[RG]‡ýò— |Û‹œpg˜h¢w#Ìôõ@{c·ü%;™„¦»µSÕ1eIÜ»®,sAÙº½™9‹© ïÓ°â Dáb!P¥÷WÉalH$=ü "üqÌó:ëX"š¢û”sÿ+4ô*#½µÛ̺RßÕìí4󎎎zz›D+€Îý}mŸÆÇïõ¼"í4&+} îv¼\o9lH^§;Áæßu+_MNï}ÑXøpV¶fÍ#µUï¿É‰§Ã<ßíˆÙRç‡xϙ†€æ¦Çz•·zë2žHsÂ{¢S«vݔ{ýÑ«¼éRÿΙʟ¥8Ž€s¿Þól%@xÀ+l î8xäèŲ›*9÷ä@HÔª{b Ʊ¤˜C'¹%ä ·B]Çž­ý.«‚"©Mš_ËÈys"Wx0JíªQרÕ&B<ýApC ^òô+O±âS–/
+¥ÝªòŸrуön„¹Ÿt©¤„t•„‰23w¤kmó7ú¼Æ*²œTí0xú´©C©D"-'U»¬÷nßSà¸l xÕßkUP$IRª­Jˆä)OilóßG¼½6U5IV«lg±[½©Çޚ3^S£NEáÄV‡"–k,ÐgÍ°þ€‘ÄÅÏ"U&NYŽXør᎗äƒG\À1N_4æxq*
+ëï‰5ý‘d&ZbP®‚Î÷Ònë͊ªŠ)ª6×víé‹Ý °'4<šÁp(c™]±•öFbÛ+¥â$ÐUJ—VnÝ]öËQS>»ZNQ›4ŽoÑÚiáÛÖÒ5X¡ß´GM’¤j§Ñ{¡^¬RОq¨å$Žڃ-éJÀ»}‚u½c¬¨ØÂîè8¦˜`äOÕh_¶ÿ/>~{ØXÔývŸX:¬”»}e“6ÓgNeæPÃÀ~!­´‘Ë­Lޛ»òœ8Á˜ÿé¹`WW“dµÚ~¡'ò9Uà´Q*…ЀWø@(ÔqðÈYÐxŸ3³ˆ¨`÷$Àƒ9‹°2æåbN˜C7؜Ao„¼SEœáœçíªG ¬×öÐçíªê¤ãšåDÒÌý`¹Ž!ÏV@ R”€úq¹áq9ýyßÈW~úó>µŒ”?.'ËIr- ¥ÙÙýјvCúùQºaêaW ûO‡OX$©Ú®ï½M¤’cakƒFU£VoÓX>Ê.N¾Ò¸±@ `cjéÚÃ04–<C[™Zïˆ;^¬ôò€½mPs̒ó\!2ÊCùvKl¤3pÂ]N醮Ô:¶àGhݜ|ƒð§æÔYçn§Þ÷Äÿ{¯ç ±O½€¨‘–€+’=ÔרŒ_%g•Òµ22ÙÚô/Rd¥áP‚[+&Á%
+§¦C±0¬RŠ¤')¡ò=³tY<MIm ‰— |R¸Õ?™Qéâ•Ô¬Íë&O±"ïvî¦Wó›
+^
+x9euùc‘>ÿ}áô+ãn_pò|÷?'<Ä_Ù\i8d*-i€àX¾1mgžÈ§¥—ë3 䥄¼‚Bᎃ¯÷927f¯Èî‰ÿò=ȃ1@9¾Ï­“\Nx½SEœáì'bÞGòµøþºWýnØá ŽßëyUÚmªKdx \ǐgë|³ól±y Ö²,ÓÆNë¨KA*“jjÔú§”ܵ ZFP•UMɟRžm•«À÷Ÿô£zôò¿ &8)w÷Ó ãyGkÞ­H†òÐìÓ¼é
+—ü§?lÌWD¾ÒðU
+í›ê=¢ÃK1Ý%F(Àšm;¤OĈà R½ÇèÍ\‡4ÁØé)’À0 /'uMÖÔ2¯œäò)Ã0œÈÞÒ̹‰È·ðå²õ2õ“j¥R©|BI¬%xí zÓ®½¦³©®bÝݑ^SŸ@€S6ٛj׬«ÐµùÚþvU¬Võ¿ßdoØRö0¦n´Êy·¯—T<¦ÏC¾ÒL¾€¾$P·¹¢¢j‹3,÷Ï ÐögùÈ?"ÖîšT
+ÿ¹«U_v6ùþTWö0¦ÞßÝØk* ¶¾Ñ*tTñŠb#²§Ó&ÔÁ7œY“¡|Ú³|Çëò‘¯Í¼w.ÉØ1ŽP_ýy`{i°Y[[õ›ûZœòWºBßʖb6•öPC'spUoõ·mcj+ÊÖ¨ Të9çvR<è“CÔƒ@yˍÅДþƒ¸áYE•ªnh}cÀg‘NõV çu¥ýµºŠŠ
+ý‘>Ӆ)[–€B ñ@ÝíÌù0ÄFjÕµ™B3ìs°g­UUTýV?Tn
+ú-bé°Âîöd!ßýcñxœ gæ8.‰²c,¹–Ñpð5µÔ¾­|Jk;¦Ý§¶ÄãwÇS¶nï€ó€¡íÄÈ(ßtúŒ3¡o†»=®/çW>‘ ™›{¿Œ‚´f—Ñý7;ÅW ©†:~y¤þÊ=ÏV8Úb4ºÎ_ŒNJäÏÔ;>ëÑ$üمÒ7é;NŒDbÒJ¥éíÓ¶ý
+<ßTRœª¤äÕrùr^3½z5FùFÝے%0ƒÆ
+ÛÖ(Ú£ã&’÷Ü´œEWJ–bÖ_Ǔ¯½'Xõº
+ÉÁÓþw¦™ 8ÚÝ}6f=2åƅ°²?Ç©zb6Â1βÇlñ þX,‡-h|D V*)ý½ø¨P†ÌÁ/ÅZ£¶­dþãNŽÖýF¬¬·1)7±[A×–ã_ÇÎý:¬'qpí$-wµ§µ¨* v$è|³¹7b`ÃvÈc0ͧ| Ã$öÑñôª)ŽÆQÄ&c™«ÐuXÊðš& íÿ'l—öºhe½^žìáÙëÆ5φãl`ND,ã\³9`0·Êq͏÷Œ¹VÍüÍ:¦¬T–ïݾ‚™ïLJ”:ç0ÓÌJà žëLQô‰ Ìr‘sù‚º§¢Afzâ‡gX瀾EÿŒÝ‘$)²Ä&ø®fË{ÑÓ}=š')öß¾æFË`$2+3=€½†ì„úþϬ$0¶&]´0—,YùÍômÿÈ#÷BÇÔß``2::Î&VÍp7íeµž¾=ž¹€E_ŽŸ9GŸ×ñXÌYOٚ©ºØ€â±Zx¾¥ëp£B& }ïk7µ2Ov0­¼ÍOÉ9›JM$õº•0õÚà€ÚÀ§®QëÇ×Õiß>mYc´ëˆÞma.YÓ€2Th¥3-f™éˆ•JÂFÇëây-ÔYfúTÿ\蓝w?µ/lýޖ9"šª‰>™#±FŠ(Ål¿fÚÐCXÙƁÿÆÕ«ó2Óç,ðÿ'»ø¨'t,¹ðˆùV¯8¬‰þÛ¼bÍôy<¢ª=Kõûj9Ʉýf­.¼Ó:žív€XŽXåé5åŸ!¸›Î
+vXüý²¡ºÍ›ë†HCà›¶¥Ež­È³@ r²Ñ§þæŒ~C¬Æ`ïckt—¦yŽñÕ
+ïNZS4>Òr¦-ëqÂîðN͕«$îû¸Ô¢7\ÇÕ«!Or–ª·Lô©ôå;âW¿»’£zæƒêè@Ç.0<[…a˜Bc”ìéø°HË#6`ïç>1ç´ùöýs¼òàD£Ýák›Û2—s¨)Y řÐݾ¤XȘÒéUYË
+
+„³ÚçüÜ7rwz,”ûÍn«ÿ"r6lX£èå=tu´ßÒh:qþé¿qÕÌI•hsG»ûúRœ8·QÒސA4ÆÑ
+­D d‡uä»ô@®c ò6C V$™6ú¼kê³ÖŸÎ\Mï?ª×½Çxì ˆzߏ=Rwïq"9˜r M$I˜KNý~ë`jž×jwh´»êU‘UélÊOÒ]UføyÜDâ0ÁeUÁÿrUeÓ
+§l‰¥]ã£=É Œû37Õ*ëû‹ÀèGß_êò}!›³ü)”o'ãÞøøÕïê³ËA 1;Ò`þ²Î#±"I˜Î³¾æ—R–r’‹FFzÿÚºæátžTt¸”ÃYêPÊ󬐺P
+/(ŠÇv1·äõ͆‰\gü”²ç»˜oÓ¶¥îØà›Š-ï…gž®ýñžwÁóªF"sSo¡8Úö†¥÷¼?|+*‘Ê”Ïiێ:tÕxJ¡s³­’Ö<ßØó™S‘Š|? ú­;ÎôäxYˆ›©°Ùé&¹Âp%”ÿ~ËKœùÛ1nÑ5%³Û\ŠäÒ2ù‹ëè󺪆à½q†È¨7xXQ{’âXoâ+û½qÍoOHïHôØ©ê¦4C¡¸;ö?YÝßF’‚ZÌuf»Š«4?-æì¯íí<å‹Idõ¯;ÜoéÅӗ¯vÏ÷֏)u.I%a–uwr,ç:å¢6©\g=s®áó>ì%Ècð[ÌFÎ¥ÝÆÔ]ô/Žf'ŏÇ-‡çrß]±¼hz¥i±E@ –(ÈF@¬
+zMoÚ%…¹ìûÈŽe7Š7Ýö™VÑàb¾2æsY)V¤¦Ì†"´l–P/8¤Pe¾Ì¸·¥/{ûIZ~ðtêkß!Ÿäñšè/íûÖLk˜BÝÖVÕž6÷;%•„¾÷µÿÉ¢¢%ôù|u¤˜JóÓâà»uí_Þ+ò±à^Í^ã¶Q×vR$}™jwbìÕ‰ìYË
+„iÿyÏÜj¸åˆ¥ém»bžõe^̚ÙȹÄÛ8çfzhêNÍNÒï Y†¾Ë;;¡ÈRÀ0læ #ùæ)5;I,T¹t}`9þu,5;97ëP¢_ë+iK÷k;Éð»!»29CJôk揳ž(xÓÙï-Š·ä³é¿æûu@ 搡Kaå6ùbK@ ˆâVÓó:‘¯`®óˋLÓDÒò¸]#Wª`0L‡Ïºí/¨êyôøŸï§ì|ÊÏznkßÞÙE_½M'b Î\0Ë»4X¤"ï~j_Ø0ú½-󘩚è“9˜KñsyðÞ´•UuÆ'8֏WÙ86¹g2;dTìöÄ"·¢ÓxÒ@Mà¶aN³üdçÕÇ}Ñ5e‰¯¦Ï©es¾šÜÛHó˜•2%«`\eÍ_Þ×8GãT™‚£~u…äýŸBÕe*”geŽY˜¯L©£lضFÑÞ/®!òXM_T¥yj±†À©oF][ U՞4²a“H:,Oí^€`)u~ˆ÷pæ[8@"§ˆ=zËI}cÎâ[ُ덱"ikß~¢QóK!ARÕUMQ•2Hþ_M‘S®²J*•HUS)ïïÿÓd-×܆]jE5¥Ú®w~A¨Œ™úRe ›uHU£s\h‰^kOcýæËò”ž2ª4:Ûùì%ÿBéÄV;uÙìg‹¼P@ Ä
+&±Ú,Ÿðë)ý¼Ë„˜kºO ªåR¥* ™ 6É-9™›üo ¼˜†QJû’+u‡?³ª(Ã0‚T˜Ž‰ôy»FIá¥VŠS›Ôö/ò²xpw<†Ñgm
+q­¨o¥+Wý5d™hmÐä/›æ¦Çz•·zë4ÉçS§Víº)÷þ8:ú£WyÓ¥þ]Ú
+h±•æ¯ÅB?¸PúŠÑî¹%¥Î%¼‡î<å¢vj%22úŸýy¯z-™Ðpb-‘µgik›¿Ñ7lÜF¹ÃàéóU<ۛ:j¿`W—ã”ãGYÅ>fÂBæÜòt‚mþûÈéۉI{Ÿ›úœI$^·)p mgW¸ïôò…“Æúµfó?ï.2ô‘Eº¡CCwG@<(¦"¾ró?#çR­¸Ðs|Ý^f”h~ͯi댨F³h£ø¹‰®Üaèlés¨Å@{°:ÒïيoBþb‹ä,pv²q¿Æô{Z™Ï ÐÖJӖwI‰€ovRՙúšÒþs YQ5­ˆÙ¹Pº_kšƒÙ‰@xë*@Ì +ZqÊH±SE1µÊ« IDATi@ ˆ\܋®Á*0 ›•P/ºÜ)õãò(ø?ïÃ7ÈÙ˵Œ”WÊÉr’\K Â?ëِ~“nÐôàŠaÿië1‹âµ0±Am<l7í"pr,li°„ïÆ$%rÆzUqR1qÒ°/8Æi 8-½\Á1.òB[ɳä±P¼-Ÿúßن/ä» LºVFÎ|0'j¤%Ð=ÂÚª À)[<nƒ©PÚ9΀iQ­ï³®¿ÔîSïÓßñ@8¿©)oJ¨‚^™ QS2nxÀ¾PŒ£p1UªY›­ܘ˜âÈ2î%ªH*R~n,ØX6í}çÐÊÅ*S¾Ýû´9pß&érJ7t¥^»?²@ëæªÖTÖOÍðA2¬ B5ÒpE8K–Ø5*é[^×Nfè)—a°*²Òü´—( |já|, «”"éIv‹’z3íM{ ¨——ÓŸ÷|å§?ïSËHùãb®ÍÖð4ÓG/Žåz¹6¥ éۅИR’äá
+Ë·©må#nhí
+kŽ¥·åœ)^qñ•Ãß×$¾òÒ³i£ø¹ùtmE7!±gù#¦Pð¶lˆê—Û£*…t­ŒÌ€H4jjv’l eK,`íÉ}.œ»=ž^÷òß{=‰}ê}‰C‹;;Y²¹ Đ٦:ée²« €$€\ƒU$>‰¯ó‘’xρ@ ˈ™kꑍ~…P
+R™TS£Ö?¥ä®Õ2‚ª¤¨jJþ„œòlå§\¾ÿDS_£¿$÷?„ &8)w÷Ó ãyGkÞ­H†òÐìÓ¼é
+&5øá„î€ t»;+w9ˆŒVð®ET47ƒôlÚXÔ¹sӄü«.¶›› š ‚—•dh^ImA ˆù&ÓR/d£¿M|X`Ÿœ"ßFñ^„å²õ2õ“j¥R©|B93 o
+՛þsí5MuëÖèŽôšú¬œø°ÉÞT»f]…®Í×ö·«
+ߊV>¥µÓîS[âqŽ»ã)[·wÀyÀÐvbd ”¿o:}Æ©À0 ›‰§nÚb4ºÎ_ŒNJ”Ï7öôºTÄ´Dù3õŽÏz4¢ñãL5ÔñË#õW’;¬†>Qoüƒ]¿Ž'‚:‰ˆWPE¢å„LÍ½_FAZ³Ëèþ›âkþ49gÓFs3«Ëü?!y<Ÿ}rVÎ/3%LV…„O`ÝJtþÍ<‹·ޗاo';¬û!kK»û¼oänLº^^ÿJ‹£Ý¨x£¹¸ø¹<·1ÂÊ6&jP4—œSež(ÔLÞôà!žɞÐqõLr‚aXËë-M¯4‘›x<`bÃ;¥Y¾°ÀÀ‚7*Q)@,; 1 C±n–5k°
+þ·Ô©uîÂv‰`¯‹VÖëåÉ' öºqͳá8˜[ …žé 8ƹfs á£_†r\óã=c®ÅÂKŸy}*_úš‚X¾Ì^‹…X¦Úm9l™WóZJ±x<žãño¾ÔF/ú¬Nq@’ˆÜs7¸.µfÁ
+hÂdqg'ÈL@ X²¦4ô·n÷ M½ÒbXKÛºú¬o²/÷ø‡(L³c1HHJ®y^GMu«¶wlõ­VEÎNZ´ãíþtH"ÕXe¿šEfzÈHԃ-wf3䏨jÏRý>‡ZN2a¿Y« ïô†ŽkæP<@Ïy`•¤oÔTTx[BË°× Øˆn)3Ö½¥¯)ˆeÍl´Xˆå«Ýóm¦O©³`Л4¥S®9÷i›a˜°¿yw¯ü¥%vÑ'XæfÈrÀ¯|»c±EA<(ऩe­Ï) Gî¦Ó'kYvïbÑÉò‚rÒêW[ ¢®iüL°îœ¶ï2˜šŒ/je#îì¡ûs_Hø«0HÉXÔÏL‰ËҔ ÙÞ±ÙÞ±¹®³™ÉÎwó}ŽÙÑg‰¢òo@ KÕсŽ]`x¶
+…2^(ÄópÂIå°ÅòÇ|ß
+ÕÿÑTygÈ@ @  @Iê¿|žÄrð–×[[
+ƒa˜ç't”»ãYôx#EË@Ÿ×a¥d–G]ð°'t©¯ì÷F Èêi;Ìgo”·šPï1…2w¼°4jÈrÃ0‚¤ ‡©Zf^ϙòW)ܨä¦d™7¼úm
+¼ÃVº&[ªvú„:³ BîO7Ɂ9Úp^—Ã.º¦,E(qÕ^â2wâ
+VùTÙ
+ØOxB7–e™›tà ·‡–T]ŽBîèl&#ÄÍj•\CÿÈvd\H{=z7€@ –/¨[a$ìê¹RÅHä±Go9é¢o ÿb)¥OË|‡úR ãòEc¯Ë§¾Óæ"¦>rXN…2O•URTuò£ªÑ9.´D¯µ'yöë™gÁÏlš%Wèö[úm#oöçµÃ}‘•ë7_–Û•p·ºÇ$ý.«‚"©Mš_ËÈys"Wx0JíªQרÕ&B<Øj§.›ó•|i€4åAÀ~Ô®(ŒºBUØ!£J£³g•méj¼pZ³‰RÔèϽ­ì;Ð'žžSårjñoe  áEÞ^ˆù©î¬U@ ËB®×¬÷ç±L¥„ñu“ª.žw9?rºÏúØUrËk¢D줂
+Éޘƒ¸7ÁÚ$@ ˎLE÷©Dµ\ªT…ƒ “Á&¹å#'#°ŽÐûIñ(a¥Ô¹/¹R¥?³ª(Ã0‚T˜Ž''ôy»FIá¥VŠS›Ôö/
+°x?±På8VŠ«v¦»…
+ä­&XÛk:’À±R\µËds,
+ô¼kL4Ü¤qþ3’yÅÜCÝV
+µ.ºŸaß³£]Ÿçæ®ìWõٓ{A–¾u43+µÁm(ãíK†öz>Ž^[ÈÍw8 {Ɔ×üÌñÁ”¸MìÚ 3/z1ØÓÒ¯{ÚÀŽÏÄ¡õŽôoEt5­ž›7mۜ:míæmM©kS(ÀèGýÁä°Br«ÕyØ&<殆Úï7<—ü!ïñ‘ÃõÄæòòÿ 臬Ë\îtÐÔG>X¸ö­bKÉÒrÊú^õZL¾Ëº±¦§3\ö™÷Šë»óc?Lÿèïð¿Ódz#âñ‡ææ®<§êwÔç.h°ÙرräûÉéð9ó¬¿~~ö灀ëóÐÜ¿®<7_œ;(§淙@x24føm¨>eš‡Ü²îµäK#ã0ÞRM^
+û)ýlÈTA -\]¡†M‹Öïì
+´ø'í»( ³Œúµ ‰Kݧܦ­$íùÚ³Y»¹é¤6Y6¦ý¿g†¯é”ûÔÀ±mMÌM‡aÍçcŽ‡Ôé¹ÜdÛþ:u~Î¥'€r}ì»];xuÀ¦â³§o•ñ“V*Ï­$Ì·aê1@_ǨÇt –ƒл€.~×r-·’9›ný‹>ØëšîùÅM÷è)†a@a3”uö½±½m¶é«e£Ð ‡5]RúOZT }?|Ì_¥Ÿïx(¶Ð¡¾UvÓÍúzK¥«*ëøk^€îl B­3ÜՑþÒ§DØ_î–ùu¥$™»Á’Ìñ ë;£tț ÇÎòùVB!„V΢€ˆLwéb 3øÙ(¹CÇ~4i(]¥ŽÚJQd|büÀŽ…_‚ª€!R?8ÑýžSÿ|D½Ãd?ìvìVÔlÄÙìŒ\ã•
+-ÎÇ
+¡YN˜ÚA“òÓ²ßæBûZxç¨ÍŽùoÅÙK®”S…ÊS6€}båsÖ0û^K¾4‹a“—B*õ¹1?ú–@™!GzR‰š|ÑÄæœ}Ò¡…ÛîÒE?ú*ýlÔ¤¡twåjá–ô·Ñ‚ÅïWÍʝ¨)sC©÷±ðÔR™åm*~ø%Ý®€‰YÉt9ro[x.`×äW»¸4¼ÖÁOõo@D¢é
+‘ŽA-íTí©áᣲ¢ƒ{-ùÒÈq+5ù܇ CÍíá«{)ÐöÒx˱ÆÜ鐯ɯäW‹Û¤
++M €âÞ¯RÒzg„‹¸¥>ü
+üP”•§lÅïšü¢s¬‰M–¡é"„B!„ZŠ,1
+V]ò{Ñ^þH$Á%7@ëÇxËï
+¼kkÇÚÿ´^+pA!TBg#†]:©¥+Ù÷<úBhÝQųڵ@K²”žéЋÆÚ/èÓ~IG1‘@»¥!òÄXø˜¹´5DkG·NMù§…LAœwÙ«µ0ìE×Ò³Z0½ ØRJ¥ôaz|irZ­&¿Ü£`Åæ|[þ7Ó¦ù¿.x÷Yڂ˜H í©!ÝÓ%8£!T’rtTø½Q¹7+–‰»ìõk:ÖEŒ!„Ðrãæ¥bޕëû÷õÄ´ðÇ#ü-_
+ÆèB­¢¥¼ŒGÎõîÛ#UAèÍvåžÞsïÞb#6BBèFÑ\‹…®k]~ûYoþõ
+$GÓ˹_ØçýÌ?umñ¬&7‚槺g²O&ÎFlåú¡¬‹ÎOŸv¶¸¤6\>¹ªô¯„qK)ÊÈyLP©pÑAý³Lôl f4ywѪ¡°-çÌHkŽ¦G¡å#ÆèK8µŽE¡¥Ãs鰴к尗Âêj} 3 _bõÕ%û½|ƒp±¥ [Óª4ùåM/6ç…0ýFšÈS0S®'¦û÷c˜!„JNøʔH$ÄómI²ÅÐB-ÎM¿`ðm$¦Gh½[Q° az˜ÿyÙw¸™
+C­Š®·;˜‹,†éB¨„Ľ𴄑úÜsÓ#„’ÃôÀJÞ5¡eµ¬Ñ=l)­ŒӋÍY!&µîo]¦ÂB«cô!TZi1z˜SQ!„BhY±WYߧCÖ=šÆ¨ $ [
+*ºi¯¢¢3žXJubI$Îå¼óe·­¯…B!´ò¤bô!]¼ÍOqÌ»ÌKÙ!„ÚÒ>m¹\ÿG^cÙô˜Ù°Ûêþl0zyíöÄttvèÊ
+nCoÿ[28ØóqÔðÚÂV¾ÃÝ30¼æàgŽ^]Æ®Í0ó¢ƒ=-ýº§=ìøLZïH5LWÓâDÕMÛ6)6okJ]³˜BF?ŠèêrŽ€QœºL³9ÒºƒúÈ£¹s^k–5à¶FZJÃGÜà·áÉИaf¨ÖìÊ,+Mß³£]Ÿçæ®ìWõٓùx-&ßeÝØÓÓ?Œ.ûL/Ì?î>Ώý0ý£¿ÃÿN“鍈Çš›»>ðœªßQŸ» ÁfcÿÅʑï'§Ãç̳þúùéSœ®ÏCsÿº>ðÜ|r
+™*(ÃÁ ¿K›mÛ &U§&w%û¿™³6í#C‰D¸0¹ùžÞS绍${•UoUp¡‰ˆz‡‘&¢gº«Ì}âÜ3c¤ÍáúTØÐ{w¹úóɑÇæ«qƦ5åý.|^_ÿM#uqŒw³¶ýü¿ɸ Êëþ0i«P@ÃÝZþ¹ó᷍5
+¬Ð ‡'­Õ¤°Õõ'ԛÒW1ž´¨b¸|Ì_¥oKÖ³¸Bô$Ñ:9ç¤rÝD—cÇ6—?9—HÉ¥ƒ›·íK$RéÉ­÷æ*o‚“uÅÃADÇ¡Žeš+cÕ[Šð²Š-Ex½&ç´ôŒ2At„¯»ujH}WÜdˆÛµ)ùŒlÞÖ4ýïµ ‚ðLÏ9(RØöè¯sÎ;HÈxGeq“%o/?!¶b6àýŒq°e¯@ÎSAî
+¤fp³vŸPù!wžf5™õRDY€'–RœX–µ! ÄæŒ“Þ I2;~óV !„ZaB¸GÎg"ÆèBhÕáo‡F¦»t¶»tÑÏF§¾
+D?5i(Ý]:j+EUP'
+ÄxË•øTµÒ|Dê''"ǝzŠ2ÖY‡¾‹ ©Ôl¤»Ùl¬1™v™M¤gW¬31¾ñþ”jì´äXYdx­ƒŸê ހÈQ¯jÇQqìgè}'tÞW¥ÕjµZíÄ,D>j·¾2'þpNüëúÀAõ>Ó>uJ¾™ô 8¬5FûWÉÑxª
+ò)y‚Úì8`“ª@î”S…ÊS¶ÔÊKɝgîH¡eá‰eé'–•üjq~A!„ЭÀ¼«È+ÙåDê1FB•Ä¢Å&PiTæ“õAw!dÒ¨éJš®¦u;ujU–Q†2ðÿŸÆ~IÞon2¡¸Îw2e˜‘×-íOé“Sy˜÷™_ñ…ƃÁ³ï¶WaþÚxZJJ9z!¥ÿôËɇ¤ì-ÊöÂ=GÍoÛÄôžw"ºÎóbðjnzfÇ]—²Å涨[^î⯠8žG5ý­ÞÔålÄ5ú݄1%(¥ØBA£€™xÞ]¥ëTJï/ÉÉ£_TÛí¹ÒñPhòÖ|MYրÛi)â¤%ÜÕA0–|wV²L# ùŒ€¾ð|å©ÔÀ;Ÿ';æxÁ)¹ö’OiA¯\RåsŸ@
+- O,ëâÄ"6gMŠ´’<ؙ„BhuåŽÔcŒ!„Z&$IÒÛiKÉñ„Ù°Ó «Öv²ÏËuC–†ÁoBÌU6|fÐÚ8ފóM–ZïW!ö*Ã\žŸÜ ÎÆâÀów˜H°§µ؛2ª¤¤ÀñI» L$ÐöÔHÚ
+îC†Ñ§ê½'ƒ ľñ54¦DÙ¸¨ûˆäÔÕ]=†‰®ÿ¬Òó‡ä|Üe·?Æwu.ÌÚGRöÆ
+¥ïÅ@ö,R&"·}>¢þ®S¿Ç9v6½rכz4ö:¨<q½¥ÚX¡ Îð¹ó÷!ÃPs{ø*Ç^
+Pó—Éà³´˜¬'7‡9Y±~7­6ÿÀ·@`]ÿ×)Èè$ÈQ„BHŽân!›&펲£G¡5o!»,º1f*qp«ô0ÛА/jh´ê’³|°íåDl°ÔuD’8Æ[~_P˜Ž£´l[Ió×íùFì®)+w ÙTØRVPþ›Ù®Ï²ÖšÕ=±à-dÑ:Ù›”øwBŒÑ3—BÞê#ù/I6â4>f;ã½²šv˜OFç® ç- !„Z©cê1FB­œMó9\ðî³´# €0͐îi×ÊÔ HÊÑQá÷FóÜÖ²PÜe¯_Ó±¾bô«[
+ñ]ŠBh‰òÆnV~ &öC#„Piá©~è;Ü¿ÚU@¨dºÞî`.²¦Gh][±0½b™
+@vá „B!„ÖŒ‰o­û[W»
+•Ì2ÅèB+† ˆŽC+S–¿Ç „BèV80ìÒI-]•éŒ±G!„Vžê׌i"$A™ç4ö*ëûtȺÇBÓôªÔ
+Ô’ Iãn{ˆ bpbÄD«õ¯„‚ôjƒW\ÝU­6¾.~Š~áÒSóq$I@ӝåÖ°9*)µ§ÉʨIb“P™<ƒJ ‚ðžtïP›È†Ã#ѓncuò@9'ÃÖ#o؅²¨{ÍÞÿž¥êÒãXÞkŒ]pŠÓQDŽö+·hP'ãiÑ¿·óJƒû^ʳ·r¢·?W¥J•PTûߦº?\tƒnµ®{òçICYîý†%
+᜚'ºJ4ø˜ËÌdh`Ñú\ôLŒwìH†ò齖Øo¾\éàzBãü`QoÁƀaz$©Ðà8Ã0¹OkÆWÔæ¼wbٙk±‚ÊE!„–I58;´,Óú!„J¥è¡ëÙc¥[!„–Oã–ÐňÿR4¹Áñ Ë\g¿ô›wê”
+Oþy¼ãøéé+Ó#GZ¼Îä.üÀöYŽŒL_™>ýaË1Gm˜à¢úÆÎh¥ýüÏÓÓ¿†ÝϨ;›.Qmøˆü6<3Ì ÕšóÌî8Ølì¿X9òýätøœyÖ_??5J_c¿­ïĉçt†žŽ…ðô@Ï/1÷A£°Žùmf ž ~6ä8†½>òZª’’{
+0Ølô]5Œ}?9>gQjïkË{œÝÇù±¦ôwøßi2½ñøCssמSõ;ê ô†¹©wÜñÞØôôôØÛP«3uÛÌúYf<úÖÑ̂Ô·¡Œ·ÿ-ÙÓÐóqÔðÚBn¾ÃÝ30¼æàgŽ¦Lû»6Ã̋^ ö´ôëžö°ã3qh½#}à,]M«ç»«›¶mNd~ó¶¦Ô5‹)`ô£ˆþ râø0·Ì?/ÓÁìDŽtî >òÁ(¬ˆ•¼*NAÄõÄôŠ•‡60­V[ó—Iñ¢ÑLldDj‘(Ðj¬ÿëT)«…B@àlÀ°Kòkâª\¹•H$XØøӆ"„Ё§z„ІA„xNÓkhËCFï§>ú ‹RCÅ~
+ÜU÷©…‚6k÷17TêN‘Ù+)¹§7Ù¶¿NŸséI \Ÿûn×^°mÍ5„óÃJMR¹ú:F=¦;H°ì€Þ&po<5éxŒŠ²
+hÍCâ¶ÙëOÒΝي"=Oëê_ôÁ^Çxý1þüÞùPè›âþ‘b6CYgߛÛÛÉΌ6}Õ¢lšáðÂÈ!þ&‹ß ©“ÕB§óWéç».Š-th†o­TI™‚Èzè¥ÒU•uü5/@w¶…ëØœq4=*Rjo’0¿M"‘È£—É|2*d%UB!„B!„JR€é.í.]ô³Ñ©¯ÑÏFMJw—ŽÚJQdDf1Þ²c!xªÚ1É%õ“‘ãN=Eë¬Cß SÔl¤»Ùl¬1™v™M¤fek“[mæ%çXàfƒ|Êú 6;؄‡–Ê…èp×A]ðÅAè<1¿gÏRe€Œf¯¤Ôž
+Ç~ $ÝdBqïd Ê0#¯[ڟÒ''½1ï3¿â ƒg'ÞmIÍJœü„»:Æ2ÉÑèBÔul~®dŽs¼e ¹î`o짞`Äåç5RR镋 ’¨¤Ôž’ez˜ü·]ž;ÿýù^É d©S)G/¤”õOêÒ<õÏ@Rö–
+ìÍäB§ÅŒD£ƒí·kõPÒsªI{Õ´=å F&îkn:“%@Lªh á©¾ÊÝuJní©=|TŒ¨ÏÌò9*)¹§›hÏ£³­;t‰a.‡½jk-=K
+Ò¸FŸª÷ž 2 úÆ×и(LŸ½þ\Ô}Ä-•aWa¢«Á?«ôü!Ù]Á]vûc|WçÂ4ž$eo¬Pú^ dÏ"åζÏGÔßuê÷8ÇΆ¢—ÂcCîzSæÑ^•g¿—Rhc…28ÃçÎ܇ CÍíá«{)ÐöÒx˱ÆÜéÀÏ•ù­?bsÆÑô¨xµAiO—#åÜ·ç–kB¡bǃâO„B’ûˆ;šgf„ZHÐlטî7 ÃNCæ”ô"ã+ážš¾Özí¶ò†‡£ÝJ’>÷n«»µ¶|›¶¡Ëßõ—óz`‹ñô[­îæ6ßN˜Zºu/ŒÕmWjï´
+F­öîü
+Ë<ÌRŒ¯ÜÏ×kµZ닣ŽS‹âïYëÏ͆:_ê”ÊP¿ßü”æá…Ώñ—¼JMkÚú½‡tSoÏúIE*SîË¥6ÿù\ݦP›¥¶êî{öuxuû†¿Î?·ûR
+@ÉÌ$#… ˆë‰é‚÷!„§)y IDAT„rB›ã¼šzªç®ŽlÞ֔653‘ ˆá+sV‰›
+úJîêˆð4ëéZ¦µ°§K©ÿzÇ1Þòû‚Â<?¥eÛJš¸nÏw)@IÑq¨£u+uo–)¤JBlηá%x!„ºÎJ\˜ ræ$õi{ÇޜXf¬_L¡!„J'ïY—ÜjM[gr´N­žj9cý"
+éžv•¾ŠE¸É2—ÃÎÃk½¥ÉpÍî魁¤~o©¯Jã.{ýšŽ•‰Ñ¯ ±9ã¤7!„BYp78.çœ6¾3Ên4Åqìlþ™B­$†a؜Ñã+j³üÁs,;s-–5„ZUÆ#çzwƒí‘*‚ ôf»rOï¹wsÝÃI>6b#$„näߜ›ñiï¼'rëØsz1‘TRuÖWŸ‚öt‰•—²”úo]~ûYoþõ
+±ÇùåB¨„rÏo–zªf!€š¿LŸ¥KRz`]ÿ×)ÈA§z„PɕZáxÂäb
+¦`J SX`ú÷/ë¤7â¤|87=’„az„BIsÓ¯œ°!„J Oõ¡[DßáþÕ®B·Š®·;˜‹ì
+B!´Îr¯ Ü!*í鲦œûöÜRö!„P¡ðTB¡5Eüþ€·E’rOìˆB­/¹o!‹BhÀÛk!„Bh}ïsÛj×­]x¥B!„BhYù;Ä"„B•Ämø=!„B·ó.ójW!„B!„Z çq4=B!„B!„B!´j0L$á•!„6¼á
+ŽFA!ùÊ íÜôõüë)ò¯ÂÇùÜ+(Êü¹Ä󯒷2ykR²Êàa)ª&r+JPç•
+%Ä¡ÐǛŸ´<F©ÊT±ÙU­ãâ<(”R©û-å¦GkG9¡…Õî»ÂLÁìÓE!„rü†éQå„ß!$ŸøáŠÐ£ni|æã›åAC+ÀÇ!óß±VÊy؉‘´FÈí:ÈèÈéÈê«Èé>`=åÀzʐ½ž…÷ãbŸ.B!´Db$A‘H$pÄtRc1kdTBÑc0B%1z´!….±J>̵ØÌ,°×¢ ˜¸,z ÔjW¡EHªôA@²ä9.¬giÝRõ$‹}¬Ú
+J…26ËÇf!ÆðÊd_ìÍM>F!„P*1’ »_Iˌˬ£”Ôx=B¡¥âd¬#㳗‹çɈTÈø%^ŠÙ]òÖ¤d•ÁÃRTMäVHPçH)ÄÖå?žø…Q•‘|œçAÉòlŒ€`ÈŏZC°ë¡•$¿O7‘H8;W»¾!„Кƒaz$ ¯´@¡‚É˜Ê çwÊ)HŽ|•‘y-Ieð°Uç $ÌתÇHŒVR¡äã<Éϲ PBœ@|Ñc‚ :u¾“-ù­Pö¯"9cY}u‚e˜üë) Ö3Mý¸Ø§‹B•‚ œó¤fxNŽX<¾7B¨ A\¿"{d„ÖƒÀ?c_xËNUl–çy–ONzÌðʌÇ­1ò{ËdL 1–ªãpQžrWÄzÊËSP=—¿OW~B¡[AɹéW»&h*'´€w‘E¡BÍÆò¯#ãæryo'ëurî#—/ŸÌšh«ªB?ZT ¡€ÒTF)ã°ðk÷°,WeJñn!ˆ®PÎß受ÿxèŒN<;Ës<Éóì|µ•YþEh-Á®S„VLA}ºxéB!”†éKcìņ¦wüæÀôðŽàæmM…µç¢®—œC'‘ßbJ•Æð¨¥ëˆ§¡:þ bøʜuk¾ù2YXS¡Ôý¾ÑóɀùÉ<…}"‘ #õ!$/ësUN˜8o%ÈDVe229ðÇt™š^šÊȊžçY¾Š‡eÙ*Sš=â…À
+wëC•îcc†ÿ[È÷¶óI}Õð¯“VJö5‹22ñ|ŸùÈÅ¢Ç_µ5ü®c!ÛÌ6bŒ0RB…H$Ìåèj×bÙu¿ŒqØ[Bô4|ny”fgyæñ±YöË#õOχ]0ò‚Öy]§Éuå®(;OY}uæ¹nêY@Zôñ\±zÊîÇ]JŸ®Ü*"„B·1Â|ÛêÖcÃàã`¨T±áØ™ƒšŽÉ³ƒ¶Ý&}5m¬³z¿Œ¨äۛGK›‰¦’¦«iºšÖ?dvžæg†‚7²d•£…t„B¹ñqNüóÐmúQ{g•ÑbünP{g•qÖÛe7êõÚ*}Ckw(–œV{gÕè?ýmO™´wVégv §æ–öѯ|V‹¹ªªJ[¥7>nõ~ÃäÎG{gÕà?ý6Ëâô˜_{gÕBýSž¦çÿUTÌgô+fØ`Ò׿©ýÊ<2R{TÐá]¾LääS’LVr„¬
+Jl›!„PV¦/õšî,o8»èº„à1;¹E?r)×oì¶Ï¦:>ïJ6ïœ{Ï$¿…gBŸq'¢Ì½#õ!$“RA
+¾«ºAÿéóáE ÉÒ)nî>ìo}{lúçóî½êcmbn™ÀGëÿ«/ºÝ:öí¹ƒ§]{U}ÿe͝xûï-J—Ü“Ìü61¥B)<8þ¼¯ñeçrìWꑑܣBï²f"'Ÿ’d²’{4ÿÂÉýwð,º
+U,Æ3¼’eù¸€R ÀÃÓÃó1aÚ…€_4ÉBk€œ®Sžgú_ÊÛuÚÐÿe43ÏÔ?íU¾¯¼õ¿Ók«ô¶?D¾ò6<bÔÞYUe4»¾˜¿ÐJº›6³•½æ_¨äüÓâö}é݁˜ç-’'öé"„B«H‘9ç ’#5–ÍÞà‚þõºu+)Nz8bmx“ ŸÏ1<ÜÌÄÁ±]\c˜€BMidWE^&±k3L\ 0Ëøº¬Ê
+øßok{ÉÖ½7Bw¦DYÞÃ~÷±±A¡¬Ž¶î=Aaö’…â
+-ýËÕãT`Yb7*æ—`§ØŠÐ*ñ~ÃZ?ŠŽ^ä„>ÝñŸf¿Ä"SÜLŒåùÄn*!p“ÏýXþ1„B薂“Þ,#zï`ïÛTƒÅŎwK®Dꃓç»;zº[맮ñªíºÆýÓßÛõÿ!7n¾ôL®'¦Ë mîë£G¡ÜÄQl‘“#ÊǺ‚t Oٟº¡Ì0?R’ì>6˜ùÁ Ρ ê
+KêÓ¬Lt…æóÛ÷á´|”
+&ƒ%ªBË.‘H8cÜ­!ØuŠÐ„}º!„PVŠD"!Ìy‚
+"g&wAI‚,Ë©!"5þž©Ç=BɄ·DC¡µ
+»NB!„ÐZ$Fp4=J—©Ç=B-…÷=/āeyžgc¬÷˜wµk„B·
+YHùP^@êSr‰º^°êïPAª)ÓûØ%.µRÛ¦§oQ›ö8Â7Rêw#hÔ9ï§'³¾¦éé>x#ۊ­î#nÇ œã0kßo·?gwv:­{¬+pÆ@!„B(ñ'öm«[õëzbZøcþÖiŠn-µx¥0B-EìZŒ¹ìàã|wgwìÃß`gffÂ?…Ùk첖ÛÑÙ¡+#—µùòV&÷
+B!´,::;œ]Ζ= ßá>ÖÝËÚ÷ÛclL˜gù¸¸ó¯´RòVfMÕ¶8]=u}-fǕ¨qËâjŠVpW5@W§÷‹k*izk–.Š±ÿ25Óg]ÉeÕ´±Î
+¥‡®žºã-æPæ0s5EWÓt5MW&{(…?jþ¾,šJZL¤«iš¦„t¡‡ròì m·I_Më¬Þ/£*ùöæQ1o©mÓk<§:bz’ËØ@ûw:wj¥¹Áu2’Vq©tõCnú»öÀò^‡B¡[—IÀIoB¡eAUPúzŽç ΃Ð÷f]Mëwè©
+cßON‡ÏYÚûÚò·…"È2ãÑ·ŽæÝz#üÿtÚ¾ÈӃ’¦iÛæÔIÔÕ^€™88¶‹‘<Ža†ab
+5¥QæÙb×f˜yыÁž–~ÝÓaÑèGýA]A•L£;¨|0š=„Ö€eê:•ÓC)¥ènTY…f똉^Ò–ØC™™öP–ŽD!„²ÂIoB¡å± èJ:6ƒ88»fÜo¹ÕjF›²¬ÛÙhñOÚwQ@=fõk 5çBçÕ;Œ4 `|ȼ_NáΣ㍧&Q@Qö±S­y(×åÎÇùa¥&©Ç\}£Ó$Xv@oSf –Ï=&Zj%€J©Tm¥¨ÝÝׯ8ÔÙœÖ|>æH†ìe–›lÛ_§ÎϹô$P®Ïƒ}·k¯4æ:
+Mv³«%WŸbA=”>m½í ëà^ɛ]ejÚ¶9õ©ê.{ɑ­‡2 PSš|Û€ÐCOžùkQï ‹{(‡–ÜCÙ<
+üÔÒ²@h•”¤ë
+ì¡ÌTp7ªœB%:&m[IÈ×Kš{(3äî¡D!„Z
+È2sËâ®S¥B²[.ã-é]§
+ê¡Ìt&Æ7¦w旻P±c2év-LÌ&—æê%]ý±Ž1ëã.ù›¨*4T
+µÐ­8ßC)¬CÒ®ä‰{z ÿ¶0üÿ³÷þ1m\YÃÿ™
+Ÿ"³ I¢xø ¯½ÑüýÚ_W½Xëöñ<ïÿÊe¨Ëg^ÏÒÑ¢åǬ´__ãüÂ/LñüõÙÂ3™VwÌ9,ñ&¥Œã9…Îdó_ãùëçáš}; @Ê°œñ‰w€z›^̪•Èُ/"í2IéFœuž–öüUczNpܵ[Ì4op³¿8+Ÿ1õÿÕ¸ÆùG½¯êŒ_)
+X†l2€Mš‘wíõoxÐ6ØØ#îÝ[dʇy•Ñü¯÷uµýÕZ¥Ri<6dù,Ÿ¹9KG‹–S$séOöƚ²‡”†6O۟ÇT$Àá§+š+ˌßj›ÒÄâñK|µ»”ÊÊǝAÖí?kûyW£ç÷µ$´/÷4 dMb Îø[ßh]Ôy¨^l{¢ÐÔ
+ÍO=ZùHeò64%*_hÌÌJ¶ÆÚG©¬­oæ¦É+ÞäOŒËÐ IDAT|<YÛ¦AÊæ“ð˜ö1㧷Îm
+œÔ¦+€^,A$Aâ®ÍôHVÐL ²(2›éà3µ‘Êf ÿ1Mͧ̈ǡei>èmÖ‚{݁“º»¤*rßbc)Ú3i)8F2âu§RÏ W³&¡&¢åõ´¼ «t"1VÀC‰,4Ó#‚ H‚y3= )É4ºpA
+§ŒPÖý¾Ü§ .‹™¾ŒPÆvæßýœ ¡½{%€÷Ãët" )4Ó#‚ H‚2B{BYâš÷‚ ‚Ì38œ}=RY×T•ªˆ†k‚ªj%L*)é&Ò³R,{ ®Ç³.!"s&™R ¨<¿dÍñKÒAÓ³•Ӓ\Q¡©ãÒ»Ù腠©L5ñÐØ¿¢šMËß)„6Cõ²ÓrÑZDÛ¾»ÃXv•îgb>Ý{­‚ ‚¬:¸×
+ ‚ ‚ +Gq6zÈk£Ï\AÖ¤õÄ 7%F£Qçúß³RÙCØþhr›Ú‹nˆɘü}úâÚîîó›¶bºAAî:%˜›ÉAø8‚ «™Ä«a«$'Ú(déܓÿ#¼FuÏÝóP"‚ ‚,…Ä&½AAÖ<«9'†0% œvé†)N‚ RéSºó„fA˜$I"‚ó¤óž(† ÷9ÑhÔz´˜D‚ ²¾Á¤7‚ r·ÑuÊÅ2Ìà)Ïq÷ZE@Äà”˜T ªÈŽ
+‘s›öhH’ 6QÚzKàV1½pâ”î,(ôU‘”!ñQøÆLUµ`í>"…M”vßÄ)ŸµAGo& ‚ hÆtԙè%íÔ@œLqÃ×)ÜòiXK\f–ñ±°*_Ž±J’ÚAPU®Œ§ÀÑI–擾üòï2˞á=öÕ¡=“üï“úkÌ+&¹¾w“¹\J"kûq»åˆh9*˜™Í¯˜­­Vã>#ÜÉßAAAV€ð)Éfo@d•³’ÓT!}¥\RÅ[¢óƒ]µF÷+­±ZÝßm_C–ú–Övc</Íï<R”T0hös;ÍcÉзFk+¢æy‡Â͗$i?ͱ¯u$>ñȶUG~nO±>;®üú)Ûƾ<ËN Ôèìñc·ü5•5Þmÿg—BϾk ž¶jê]…+VL§®z£n nÙÏ6>gôÆìš$KHé.ôSÈïmHoÂÑYùb{ƒsÌuX›Wþš ýÖ4úï¨ïåøË(9H¯¯ænß8Ÿ·Sdý!I@„¿n¶uØ?Øüß6 ›àVÒRŸî&„LžÂEK[Â)$«D½Çž|4¡›ÿMUºï ÃU2¹ 2)ÌÈu1ª¶RA­Ýgv_“ÈÖvQÎÑDgYÜx©åëÛiŠ ‚ È"q+ˆIo")#”±»— º¸ÜЂ «ñ–è|¿GW­Ölcašgd2£‚t½a5½egØ5ýÆ~<n©Æ͚= Í¢‚ûBDºù®…*ºí¤­K٠Й.'¥ŒãiEó‘!Ÿ Bç]žˆôùël¼‚È5¶øý^­ÒúqÀwxÞ`˜ÍqGSÅ8>ké«l°ÀàËFþWþL\&ê´OJeª&¯`Ö’a¸¨NAð6_fE5•{|¨'íÌe2³&ÉÒºËHÌFßø¿cÎFM¬$—üµËÜҝ™ÙYl}dAD²‡52᯷H³’­ÕæûÆ ’GÿÈ7Ê)z…þa’= Ë(x8ã¶1çtQ áÿ×j6ºö¥^§4­#¡CˆÏ£O5‡~
+eŠô&óNÓW5yåßçÑòz˽ÖAAV˜ô)žh4šüðcJARXzr ;Cùo,SNŒ¾zX¹LSNÃDþ1ß\P€È–HÎ?Zùë™Wªt¿g‰2jCÿEWBnØ®S3d)A”’ÌN­ý¯ùBòèM$A’šÌ~!©"‰ÒXaj8g
+f¤ˆ­ƒox©!"D¤Ù•sä؏ÛUËf¥_fi1ÚÚw÷5èüéaàÍT1LÃT( ¾_ÅÐs^4E“(dª†¡cåîßé|Š–ÐÅ~Ó ZU£Ùmtþ•;\!5×%dgk›rHSmp|Öù®=~Lð6_fís®MaܬÑ:‡ƒ)Šg+§ž´3—›½B¦QX(9ƒ†[SÇ=á4ÙèóÈGAÉÄhúD²/€#²ÊY®äBЪÙcº‘œ¿7j_,:'Fò%U¿¯.øÝ8÷Õ|ãƒ~aFý%âáEö9,)N0Aà¤áù?Ž¶ôLޘ<Þଛ[ZMäTu­\…yì§ÉÉì¿¥Zëu¹Õè¯×ô\­¼š \ÒÍxjuöX¡kJí¾š \җxkv5å=œ#¾î¡7ö—m 6”)›Oñg}óyº^j;ã»}ûfï!y—9®-¹QÓýnwº JmWo”ÌŸÇ­ùí§9õ[óËʹŽzÙß:@ý–E
+÷õ'åˆL‡ù9¸«¾ö†ö%€0ž…Æ4
+SÅPsæ¤ýmHN_°á¡ýÉ5‹é`èTPõÚÜK9LJ}MüpÞ>•`¡„ z&'ñç¾èª|±K…éUŠœlò×
+·y†ÞLkö˜‡ôñ¤â’Ì;`S14M3š'Õ MäêøŽÐô—‰ÞÏìZ–¦}¨¿ó:VèèÔTÑt•¦óœOúe ?-?ò¢°¾Ø®x¾m,
+ÆÚ~#;¨kOҟshYš$)ýk-óڒŒõ˜5“$Òñ;zÌ"ïôD$ǁ¹d ‚·kBjüošçùH‰I½ºÞ™ÿB›T•Ê9*wÕôü:Úõ‰£RÎLͽÐd¡@’ù¦ØNÂÒî
+ïÛ}g¿ùêj9ÑÄ,K`ÓòûÂCŸô³r™oZ¢ŸÔ²ÛXz3M—ÓPšZÝ‘z·Ï›håÛõ@Ò3Ak½58-ÉJdtZx
+L å÷g³ÑÒׂ)«ä
+å²æSöӜî=S¢¼ýý Û:6¯ôd/̌v^ËôÀ&ªámÒt,h‘t<§èit&‚C—Ç5å7èÛ)(J <oÊ9>³a(É°üàB yPo“lÒøξÐVãJÖ0‹üµÂ=¹ôãýÆýB)H’$ÍJíÐüûæŒ)Èbx#’>Õu:"É£Æ,~꒦#ù}ŽÊ¤*ä=쳪hZ³Û8p9’­bÌSûh"òûA%ŒÏ,ZCÕawËöˆñ׋X\^® “ b.FªZ^=ñí$Ó9?µæm çoÜNLÈÑÝì}:¨=;”îÚ\4‹rš&‘|(æ4íürDþsîm!òAA’I<Œ`Ò¤H–+%t¶úEç†FY%$Éla´{ôºÃõ5[Ūw¨3†Ò€ã»ô†þ¯üü”¸Ðo¬óÄÌ
+}—$üOŽÊwxÿ,ëör<?øõÍ/ªY~ðËè”íð·íû?.(w\vÈÞç+œõ])úŽ¾ŸsuîlärŽ:MïøL‡ ‚ A3=²|•ºˆú‚ k[ÚÇ´jµZ½CM•Smô yÓ{¾½º«±VùP™á؀eÈ¿Þ¤y·Ñ^ÿø† mƒ=âÞ½E¦|8W}‹ÇgÚ4h”ÊG÷”èG¾¶Å
+MLKém'ꚞmÊÝÐÒbìè›Kò
+ô™rÈGb ™,ñb ‚ ë†Äšé‘¬ä6Óç}Š¾fzÀ§hA’(ÂLo?n7¾f͛`™Íôà?¦©ù”ñ8´,ͽÍzCp¯;pRW´@då±±홴äüy‰×J=/\͜ñ¹ ¹É-¸fúÉÉI™œÎºf&Å…à`¡ªT¥ZEñcý‘yN¾ÜLJyZA3L6=ºNW?Kwm®o§é*g鋼”ÊØNb¶Oø„î^ `T‚ ²Xw­˜ôA¹XµÉ14Ç/u¼¦g+ ‚Pé̲}—þ”ÕF/MDü·
+ŸæJ´=€·QS©jZ²RȚ¥˜
+í¦JŠyf.dJ\Ú%•´žä¦Äh4*ð\ÿ{V*»ýˆbû£YȳŽër A’!“¿OŸ»Îî>¿ikÖ_`!–"MüûŽFçר_:ºa.ݘ‚÷Ã÷¥@QYW
+‰±(×i2E{@ÑuZKqm®o§)‚ ‚ kˆÄÃFÓ#ErOhñ)AÜð</äŒ~Ó¼IåO`-áéÈò)…ÜGPUªÜTUy~y%,Q>‚Ü?¬˜ë4™¢= è:-‚¥¸6ÑizY™gº{s†n‚ ÈR@3=²r؏ۗöò(‚ H–%9æÄ@â@ó‚ +LÑ®Mtš"‚ ²Ú(‰â²H
+Y/qQ´¾Ñʲ0$ƕ ²<‘0 ¦ç·)Ý0—.¨)1£”àúxÀ¸OÏ0˖µAÖ7±@Ëè
+šýÜNóX`2tÅ­»ã©Ñڊèe;_³On'k²„”îB?…üކô&ü•/¶78Ç\‡µyå#÷
+s1™Ù:EYÉä‹Í‰ÑóqUÅÊ՚ @`
+|gƒY)bëà^jˆi¶à´KÆ~Ü®*j‘¦DÃÌQ½‚ûBDr¿kQ14ÃjÛNÚ"?äœý²±^¯ÙÇ'—“5YBZwLÃlMý.c6úÆÿs½ªÉ/ÿ>fežéîIºTÌъ ‚,…’{­‚ güâüS·î]lÇ{ы%«¿Dý̜ cŽº½úžO…í*¨b¤[¢4# ÿþê1>­•%ÙvNžÿ#ß;4¢Œæ¿ó6×ÅôAäTu­Šÿê2S2É÷qóþzUÌc©ïzy¨÷œï|…ÌóŽa¿Y×ÙÀ€S¯uIuîïûà:_6hÍðãïòÛû$ß÷“·]þz¿öbã Ç¯Þ"ó¼cØo©µ7ò@nÔt¿ÛÞ¥¶«7ž4Îy0Ð~šS÷¸G]G½ìoG@ý–E:ÝÚ?å0mŽ5"Óa~6>Ò4ç<ÒþäFóИfû`ªæÝ$ûڐã܋é`èTP5ú%Úªu"%ò³¡ 7­Gã‡Ä)Ó¯{ԯ̟,ûš*X?oªrè¶î‰F£Ö£Ö¥HHLƒ«í|õ”¨Ÿa) XW´Vˆh8ÐpòÄÉî¢íÁ|È,+‘É)y¶ç!÷{–Ö÷‚¿D*Ówž¨;ølSÌG„c¨Ûu¤k<,é_;ëx†3ëÿ9,W°æ®óöÆ\“AçoÜ6n&ß6·8ü%¢Ø±»åŒyuO4¤Ô.þúüz˜q(z#4½?ØûšQ&ñ}=ò퍉†gýç^µz¾oa-ïº;˜[Q3ݤ¨?QÑX9ѐٝ¯¾µ=p8{œxŠó5”î|5Éé|]L§1çë\d}öñ9'«?mö^ ¡â6z׏ΗˆÊ&AA$"â>’‘2By3:™ãèÊ ‘C%YëŒ_ ¦[{‘5ôüÿîu^ô2{õ2ùG€ûd@[N«ŸP«ÕjÕ6U"Aj EÊ? õ?—À_4)ŸˆF£¢<Hm×Ä,&Ü[¥®+÷ôKDKঝ¥ Ùs‡'TƬ<‰òÉGéR Â1yÛB“±¶Ýÿ¼mÝJBv#N
+šé $õfõpœ¹Ñì8é¸pÁ`}#|öÌYÍc¦‚´ 'pÒðè|ïPoÜuÚÐ<:I˜é+žïði¾ízô×]Š':ã®Ín.*æújbÖvæ”áñŽ°c ·îi†ÿÎÓTß<>#åØ8dšŸ…«ö²]­ñ%òÏoLÆlëA°;zÏÙÕ1Çm7Ÿ¦DÎþÁ õXº_MÔlÚ ï Ŝ¯Šz¾Æ¸£ÔƐC{G'µâuû†‡[ÏÞ¸óƒ¦ÌÌÒ4ç<bôluÎcÓòíh4Û[Ù«gWL§ 9:rWÓ¹ÇøQCe}µx=5MPŠ„t=—*‚ ºÿÜÖnî‘@~é¯]8ÿe“?CDËë-wûb‘|W–ñ–¦Àûœõ3JÀùAY,‰k&½AŠgÅRB'J
+ k—D¼$²(í6Ö´å>šøÂË}2¤UÐì6–ÞLÓåtºIÈ‘ôÛ剏òíú¹]’ž Úêušj­öõÔx!W—§ì‹3~H˜xÈÍFðÏijÕ(’‚I™ ±þ¹P¿Õ"MtùnA°Û)ßÞ·Ñø?°@ë®J¥R©T*Çg xª9ÑêüÛÑÿºÙûuP{€ª–—€+œºÄ¢±Zcþ"þÜ+/WÐI(ÊçÇ­ÈN‚0‰A¸#øF}@n¦VÓvÆù¡+>Œ×ݺG”¶¯¤Þ+“Þ$=@ ÒÄâÆA»Iªõ­˜
+ rÏ(¹B®«ÖŸP‹ßùµ
+Š©`˜*†ÝÁRò ±cêàùG$ñ1òs<ÙˆœJwP÷¦Ë?êó]ôžýS†ë
+å²æSöӜî=S¢¼ýý Û:–°Šßžì…™ÑÎk©öw€MTÃÚ¤éX6dÒñœ¢§Ñ™|\v]×<&ÏÐv!Åv
+ŠÏÎ’‚5ښ@¢‘$€LpG¨Ýµ~{–¿ØoTÓ©gÃP¢È«áúÍ+C"²hJA’$iVêh‡æß7gLA#»ë`i®M¸‘ê’&4ù}ŽÊqË×7!œëÔ° Ãj:ύD¾ëI¬¶šî¸ÍÍ:t¾æŸlNÖ2é™|¨ík¿¥šîürDþsîmÿ‚fèÄ];؏۹L· ‚ ²2<€TH6pAE‘rI%I’ÙÂ諵–½:õ5[Ūw¨3†Ò€ã»ô†þ¯üü”¸Ðo¬óÄÌ
+ò-‰(øÌÜ_Î×\ã“Íɺ@BÁÐ/8{(šµûut⦳2‘‚ycÎÈÍƔ:¡¡ÝTI֟ezý":EA ™AAî"$IÒ[hÕvU=ø\ðBgຍF¹oÜú~«c‡tÇ\ܔF¹q¯yÊ{]ùÁ=F£ÑäôóOŒ¤Ê9ìÄhT|çì ™¡~¶¶yM7i¢Ñ(qÞH­àD>5¯êMTäȅ½$tK–OÒZç9/KŒF£Ïõ¿gM¤No›Ðm)ªÛ-Ü'=I
+è/Äh4zKp÷Ùb½kN¢i$šô|µ´«³Ñýš'V\ÈdI”ÀçŸ}Nm¤´B^.'e™MrY]§Ëæ|½¯«í¯Ö*•Jã±!ËgYÍå…c÷]ª+ñÖÔÔzKô—|ydÞoÎ×ã“Íɚ"¡pÌý¾êYoÍïúsËGVžç…œ±òš7)]á‹Ú
+nxh?Tÿ9ä{yyV;óîcjÿ2i.jœŸAÅ’¸fa4=‚ Èj$ïg4Ç/u¼¦g+ ‚Pé̲}—þ”õ÷ MDü·²5BòÐæqØ_v毗‰¾»ÃÓ¶¼ú ²D2¿ÞQ
+LÃî`sØè¾sÔ7ù‚<ðAoӋìKè‡[K´¥¥ÜãÌ·¨xÝéQ´d´¡(¡hù÷3+óêUrjØ‹wÑht¹lô æRÞ«\JAY+M‹gI\·×3,Á,I¾Ÿ[ÐdՂ’k¥DÓ#«áZ€ªRÑ0pMPUá¼½B’¾zU ÐÆ}Å¬ä ÈÝcpxVäÕ«ÌïÓÜe‚¸\áNAµN’@ÀÊ\HÊåíɛU;šSi6ÿz>²’2HÎ.>°úTZ6}`õ©Tˆ>°Ü*Í”€4+ÉJdEìoxÕÛ°‡–o”Gf"t+ÎJP"ƒY K y¿G_†Žû4Ó¯uîÉ!‚¬¾ŒPÆvV›‹}]õޓ£™¾@ÐuŠäu¾æu²í¾-Pþ} šéA$AâšU˜z™ ée» ¯Â÷W›J«MX*‘ÅîË7ƒ¬D™‘"3á%Y܂Ò,$ïG£QëQë"•BÖދ^´¼ ‚d#Åà’nYÓ%˜*aÙ!]§÷9y-ìymèK±Ñ"ÿþ$æÓ]™Ž`e®—¾¾´ìg ‚Ü?¬œ™ûÿ5@&Í? π0ÍA À\ý‚} ûBu‡0%¸>0îÓ3̲¥CEÕ :›W†Úgk1ZA$7‰y2ñ®ê
+:z3IE3¦£ÎD/A N-XPœL‰b.®S¸åÓ°–¸LÎmÜ­"I‚ )Í^³o®GñšÛøŒŠ,%ˆM”¡±3¡•…Uùpíß|¬û€O0–ü'‘Y,”à<nç8î^+‚ ‚ ‚ I¬h·³bA›”#g!ïVˆœåÒgª´lú¬B•îÉi6^¿ˆ}o0ÂÈAV"“f€”fIiF”$HÙÇÞïstÏèÛ¤ŒPR@S@—ÊØû¸ÖKևJ¼%öœrjvë´{têŒöOú¹ëh©Ÿ‡yÞ!‡póåcÒ~šc_ëH|:â‘m«ŽüܞbÅv\ù1ôS(¶}y–¨ÑÙãÇnùk*k¼%ÚþÏ.…?ž}×<mÕÔ»
+”2Ž§ÍG†`|ΖÁ»<éó×çVh¹æoÿ߫UZ?øÏ'VT0ÌæøòLãø¬¥¯²À
+ƒ/ù_9ø3q™ «Ò>)•©š¼‚YWHŠà¢:ÁÛ|™ÕÀ-ßдtóOªè§­ý¡f»øKÏèŒlÒe£K€îõ´lx¤Àԓvæ2Y¨†«˜K7 îc†ýï{tÞÉóÛ}Ú¿8£Èu¾aö‰Èä
+õsú¶ãCՂk„oÌeOõÉ·u×lK—I„L¾[¼É-œ;©æ"çoÜ6n.h­œd}4%¢ŒPb¦…Âo‰ÎztÏh5ÛYFýÝvS«•^ƒéÈZZ[؍ñß Í?ôAspá ™Í~é}ì£:Râ\ošj´6ájgA« æy‡*›/óýÏÌg€l?ͱ¯M|Lò¡Ú´›æÛ:®ü¨—ÇD˜8¬Ñ1Â7V€¸ãöµõfgä²À7žöß[5œŒ6¨X1Æ·Ø~¶¯£óŒ^Uïâ¿È¬I²„”îdŠô&ü•/¶78Ç\¯jòÊGAdòÀŠšBf"m’”w“f"y·Bä,—>+­Ò¬”w[6}–o”Vtˆ–]¥™H¬þb÷¾áYHŒ$J¤³ÓÏJ2˜MÛGîoցmú>'ùìù¸ªbåjM 0
+
+Û5U4A­²ö’µJ×V¢.òݼ¨`wlËa·Dpk–djûNÚq b¼£'ÇYC‰ @ëªùó ÛGÉ)Öú)¤Þ˜K@‚¢:…À‡VÅÞ9cî&m4¥JDúÀ%ßÖ°QÝÝÓK—ÆkI±UIæèÜ«°~8o‘AÒIù íßÓâ›t?³ø5]DÎðˆÊ9.k;éþñ§Ð¥!‡zÖû¼ªr_T›í¥ŠâeF.8“?Šœõ .ý¹/É6úS¿(Ä[¢óý]µZ³…iž‘ÉŒ
+„ünõ/µI‰YºêzL]gϾÂ@½Æ5¥v_ M.éK¼5»šæ«½<ÔvÆwûöÍÞCò.s¼;§^ëºÎº¿ŸœüÞ­¾îÒþڙ¨oï“ÜßOþèiñ¼¿_ûvÐáñß¾}³÷y¥6VÜ¨é~·;]OJmWo”ÌŸÇÍdí§9õ[ó ºŽzÙß:@ý–E
+3{a3‘Ãé›Û˛×|9n³ÝA»@BÄmô®šäòU뾁)ヱ-‘Jñn—‹w#‚ HvX©uÉ) ùëk/\AŠ†›ǁ†§iF
+LƒÇ-4ðÎcƞoµâõþB‚HΕ”>Ù
+^»ð‡œMþ='–!m<òP@¯ÅûUAdµ‘¸k}`%#¥Y1±y>´iŸÒ(®ÔèMý—û•WÆI¼³Í¬Q©”•*C£Í‰T(®úÁÓô¢Vùp¥ê)Cçp YZÊ&L{”Wr_Øk5*e¥Ê𲍛{«˜ûÂeÔë*++••*ͯÎ/¸âôÉ}vٶŎÒj³
+U*Dβ«ÛYÔ_맜n;%„g"I’$Aš•Á œŸ×àÀyLzƒ¤¤†%„FºÈRÂp‘Ϫ– ‘ë<bŒE’­Ýgv_Ký?ʸZÑ2¬†VJªv›¼× —V' .©% Ýƚ¶±Ü'C_x¹O†´
+šÝÆқiºœ†4#²7"é·Ï‡Ë·ëçvIz&h«×iªµÚgtÖSã©-3‘0ߐ´ ü3ñÕWÄm
+âŒOx4Vþ ÆgâÍ«ËSãýÅÿ±›ÉbI+Ý0‹\hCýV‹4Ñå»Án§|{·f.ó¯ÿ+´îªT*•J¥r|‚§š­Î߸M𯛽¯Qµ¨jy ¸©?$cµÆüEüAZ^® “P”Ï{‘%`ƒpGðú€ÜL1¬¦íŒ-òCW|¯»u(m_I½W&½I6z€¤‰ÅÝ}Æ+ä-ÎÿófrÒïqcm[ÐÈe£‡[Þð,X¶$ùGxžçùH E+æ»9^ª(Z¦|K‹zv.ïÍÞúƒäøÏ~֌÷äymô€1õ…ÁT¨4/Ô¹.ø|?sáÉ÷KØä(µF&—óî¤Öomó6xÜæ=z3­ÙcÒ'µ~ÔBS¤jO'´ 9´U4IRú×Z@
+çRâŽÐô—‰ÞÏìZ–¦}¨¿ó:VèèÔTÑt•¦óœOúe ÏO.ÖÛÏ·B¡ÀXÛoduí‰Cús-›Ðv"¯(ûgv-Ë0;uŽ/áË­üÈ­põ9·¥Á aÈ\ÕH&“HÇKìè1ˆ¼Ó‘æV¼]RãÓ<ÏGJLêÐõÎ|ªŸ&U|ÒV*••»jzþíóߗ”öå&ÓM&
+$½šPl§aiwÒ»>9¾yÅni:ƒ0EBºžÉ®èV³Ëþu¨í Éðlê¨f“,ދÞü•A$‰»ýMz#+!cÿIsÓ㖞³?úÇúÿP7ðjOâ¨çˆÑ5Åö{FƼç«K¼ûõ­‰æö£žÆ÷ܓ?ÙÈN¶4%¤¥od €éÃH÷¹‘Kž^&ì14¸$®öw]Ü£ûëK?úF:È»,¦¢õÉvv9¶EÒ*‘³
+O5e<¯5I)Èr]µÖø„ZüίUPLÃT1ì–’gˆSoÏ?"‰‘ŸçüDN¥;¨{Óåõù.zÏþ©¡ÎqªT²Ô)‘ܨ€Ð¿VçÛcWÆ:˜¬3g¬þà¼ØAPm,ô:’’67”ËšOÚOsº÷L‰òö÷ƒlëؼ~“½03ڙæ:ØD5ü¡MšŽe!Ï)zÉDž`çÐåqÍcù¤Û)(J <;wH
+Öhkæ³CHB|­¿;Bí®ýðÛ³üÅ~£:íŸt6 %–D
+dð µo µøܺ´”G ˜]ðI五IÄKsÚ抔 ö±¼7üe+lËñ§} ´Ôg$ÅuÊ>¦e÷‡‚œ÷7Äñô“Ú¢\§Åú&cþÑùƒ)å°)·Ó´nùú&¤‘s–aXM繑Èw=‰«vº67éNßÜ
+è ÎÆ:tÜæü:²9hHȤgò¡¶¯ý–jºóËùÏ=º·ý š­Vð:Èmˆ ‚ wƒ•3Ó'Û\lÝ£ugʞQQåûŒñlß\šÝYÁú·ðà +[AÓ*ÛÉAéÏÐtüÖJw²C»¥{Å ³9cUb½œiÓl£™íZû@[äÛ.~@¦pù¹û¤…ÝBS
+šÝÉÆ䧂d„ ‹ÚwÈØ
+e†)DÎ*Ti5'½fÀô1§‚$)<#qӂ0Ҍ³Ò‚ä6Ùö‘û‰Ü&˜" .Ô&ö?\f¸¸ K¦ï¤™Ü¤Ìø`9GÓ'-çÚRžžíÞKîÚÄÇE,¤V°Ì… ü\º
+edV¦þφ‘¯m‰ÂÚ]]‘Yû«:·?õ=ŒÅb÷]_nªÝÕyõo.ù²ÚÄósúǸú7#ç¬Ég‘WálÕbŽÛ,ééAuÈ¿\ñ«³y·v4‹á¿2Ýqký½­Iï ÏHrE…þP÷È»ù¿Ê¥tjÚÇ4æ@Ÿ†r|Üéqf_†ÑK‘P8æ~_ÿC•5¿ëô™rÈ¿çĖ½×Z ‚ Ȫcåîé) ùëñ@³à‡¦Ú"ŽÿíÞÍÒáŸGm‡m£Ó‘ɆÀU¯qÉ\oš2ièƒæ®¿*Bß»@ùpeï÷?Æ䥈§rWs¬~Fbä5œ}ÏBßs¤É#³†Ì ”<ßqnÄüÃOø]o7ŸüáC¡ð©Eëƒ É8¿¼Ýv?‘‰ GøˆDD æ‚èï”ܑ 4×~tØh=jm<ÔHï\ô}9²†XT*ƒÜÆ
+sh¦O¬Ï^þcššO™CËÒ|ÐÛ¬7÷º'¥ûê1ëëÊcc)Ú3i)*U…xÝ©ÔóÂՂg^Åܽ«XÊÿWÊt—8ÔYM÷€EÍùþÄ­€­¥½Ø31-É·°u‡ZífÕœõ60† :‘_p³x[óh‡p[är}»Ùe.ЖëÜPÙ¾»?äm`’Ëcû§ú¼— ´Ñg#뜜È–ÓuÊ©ëŒsWO᪹ìÙ`Tðem°îÀ«Iш¼³l—/–&(7¦Í¤îû›æ´ÐþÂ%'ÿž3Ó¯ƒG
+èµx¿Š ‚¬6w­%+±˜È¼Òë€.{Ëþ氤رÛö‘e´®+vÔÔ7ȳ}22+cŸÐý²;¯´tbIo΀¦ºÚ𠨟«sŸ4ÈTçÿÐÐüª¡=")vT·ü¡¿úÃãO™Wî®>
+ã_UžÞÓUHÖ<¸äœ6XȐ ‚}je0s†þX'ßd}¾rø¯RW˜^êì[ÒFÏ&¬kµ½¢‡®\ª}¡¶d5%ÓöjøìWJ‰·=Ýèñ† ï÷ðˆ“õû’Z«á`
+g8Z£u¿t¿?£,eOÏ¿¨¢4™3´¥\““Ó
+]¦„ü䑏˜+"W"ºšÂõÈ‹0ÏÇÌL?#šþBÞj2mš
+™ü—kK}b$œ«¾
+öfœ¨Ê÷C“"~“ÕV­ÛþüEÓ?
+}66z9ò³Ç¸ÈrÓ#böO: 7şÍÆzÄ£ü†–,ÊÏp™†E/ ybêeš`Vp¨àr|ìý‰±wYÿG½–½&Š¢E+bÁ˜×hú?“”9\
+w4¶dÅgˆe
+;ºÝÏÇúÖR·Ôce›W<ԋ^Œ:¾œñ¯é8Cku
+ªºõÖtNB÷‡&K1.<©ÛKÖÇSÒÿE¿Ìë€֒áXÎÿ_CQÁü ²Ô/° ×&†aäNOæQÁÍ;ª“˜¿a!×͉až‘U†£Ý¯Z´†áiØk Ýä2j›]ž×{*t¦ÅE=ÜÙ弧’s$ªü¹W˜ÏÜxf;-,QˆÈ´Ç2@ æ€éôÑ ¶…lVfÏ1óðÌ-?Á€ó°3x.(#<â›ç ‹• ­-ˆý+ÒF¿RWôcË3WRæO,e£7Ô5:=À $èÄ'ÏKVªjéf¿Á¤÷õ%s³âåK`és±ƒSAèŒUyËßî?48Gã?­´ÇF"†råÛßEN›f²®w˽ª²krœ€à^ÊÁ;™Ï¦M3l½VÛqéþ¤‘k›u%KêØ^éæØÀƒ(öӚû?N¦öÚáîúWmpLNríZUÙ=ò#G¦Êi÷ª'}“ãé»´ÀÝCœqCÐÊØp‰ƒÒ,È$kÚÃ=à|ïtwô›5ôWÑàgk›“DéȖ™·¾ÔL©¹oÈ¿7ý¿›¾² }.Þò3ÇÐ÷C©
+}?¤[O€@IBüÏNõ®©¢×&'§lô,Ó÷ž_µ©`µîxw9ÁOð P
+ÂÜ»ÔÎ?Ç¡TÐýa@ñ›%¶ÑWëô›4p¡”J‹÷¿î¤(¦~ùÑÞQ{ºÑ(²n ©*Šª¢¨
+\‚Œþo›í‚ÈㄾíRjýûwW½ ,‡ïٜžºe®‘ú~h(~)ݒ£ÍOj}ƒÊöS¡ï¾êïóê&"/j+ƒÌ´yE²m1Kó½Z—ೕ-Ï¿ô>Kr–†±Hcn“éà‘ƒ†‚òW*¹¿÷É'£Ò±HRÿ )rë/Ðïœ/Ø)B”nxùm¯ßeŠ}“ߤ£‰ϰ̍ö¯aãSe†UT ~Êüâ­§/Ü kôÕ§£ð€£µõmt…íú÷##ÿŽ{~M´5 jâ9͇¾ù.Ü~gŸá̈́7{øð~ÏoUÝöºTŸÉà¿¥ }=2òuHwËoø¥8Ž€óÿ¾|V2º-ö¦q_ç€ýdhdd$tÌÚÛìôþ»ºÐÕ¡‘x¿I©ÙÖRPOã ¦'Š…t·{ëRÇÔùrñí¿é2 ŽÜ¹ô~ã){Mœ“(”Ö_­?þöñ\5G·š·ý-=¼vœ¡uœ>/ÿáˆæ×^ÐýÑΏždx“÷F™)èo¢Ýš—¼ìÀè4ç˜H¨*Š˜²íÛ°*ÓÁ¼jþ̚¥t
+Ð÷AB{(;¬ÏC«Ö–7½•ðF<€¯·8[S‡¸»±–_vë~;=jiîbÅqú½nJ©_GÂpþ5×.«Ó(xßÎb]§²\¡R¤œˆkp O93
+ö™Òpuìz¤×¥¥H’¤ôÏê€.Ø»óýV’Àµ;ÝÐÚç5T‘8N˜µ?
+0Î8þo´ç¢ÇPE’UÏŞÑ:y«ÙœÇê/^²ï5$©ße ]¬Og[>õºõU$Y¥wŸ‹ò·{…ÒÜ{.z ŠÚjô~îý²Ïw¾J•R©ZOêw»îß¹ŸÍE
+óh‚SÎ#N1EpïKš#~à_8É{÷OåÁ`#]Ã|ó‘ Ã$VÝjèzkú¾×¢­,Ÿ¢r[M÷?¡³Ã$åó^ҞøÐHCñ ëL©öŽòµª¬ŽìW‡†â×Û_P:LQùã¬ÿO¶òòíìÎÎþ“ÓVUE-ï‘óa#V*™Êio}âÆ ý>¸á1vŒ¸ 3œæcq®Sá
+•"Рïþ¦"xuh$Þo §Ü“%ø8 *Gfׁ¾ö£ÞïyYÕe+ÝÈ(âgÍßo}·µëìÙßjòT“r¦æÒ òÿl³~RÜbˆ,ÿ(QåxûFáñKùA“
+‚T+ ´€â½§E!å=͕œ¥aæÖèôg]•{ºxP[wk³ä,ŠwVŽ3@ ˆG…3ÓgÛи¿ñÔ©$œë-Öö²M©Pª(ě‹Æ³ä 君ʂ"¹f_ŒÖæKà à‘¬(xd‰ç1'õóÄýɑԋ&õZ%šË?Y° ›4ÖMúã¾áÏ"ôÇ}5©Ù¤!דä:2w#–H’7mž6°ª6 Ö^œK¸Œújƒa‡ÑùÁ œÎÕƒ)•c€âÆb ä7Ç×[ 6&kçØËI¾þé =Ÿ2MɌò[Ácå08V@Ú´¤uJ‰óŵC‘³‰ÓN-Iêk-½_&¥
+KÓD÷ÇV~¸+úÇ}ªÍÇõkÒå±÷œÐ¶-mƒÄ¡Õù;'þs¿çÑdh ªU
+ðf_RKµÞöY:nWµNMf ^7}UKì Á%üëÇÙè@ðõ¥Ñ·èJ~ە:ÂÝ
+D£W"gßIêU,øj-[wpwƒ •—®V¥ì»‘¡ç·áL™C?
+öã‡×¯^ï¤
+¸oŠYÐ֍¿oç牢Üû‚º»Ù—yœM¸û¾Ô?]Ø^Sj§ VÀ¨`oâ5†šéðž¥`œ­Û¶~}–¹°èr&]£ PԁX~(@ó´A³×җ #7é>š!Ÿ5”ä:(ä
+³  ¨
+*9–„ p¶zÞöëµZ;K†t<ːm äNk°/\þ|¯pÔsÑcXPÞϽ«Ê›˜q')&$çñú‹Cö$¤-t1Rnì-ÐF´#\Ý»NlÖ§ÿõÏê€çSxœmùtøúC·Ò}.ÚõXyànu=^lðȖFû¯hœÐ2©¦'åJ…
+@,x¤²Kø(|KÄÛ@‹¶r†…ú||:x¤y‚G|ف󹒳4Ì
+r\§Ö©›á´ëtàJ-„X.µC5džœo\öuÛ`èÇÉ©›0»–Ðò,èhÊ[YšLþހœj»\êú~V\!«ßYª—Ig$ØP·ï£ÎÚfjÔóbEKCWû 'S‰wònß-Å¢ñ÷í-ï¤Íô3¼§¥!á=-J²n“
+`>zî`ùžÿþû¶ª©s] ïìää¤ó°¬'ßåÈZ¬2î?ŠyT²tJí†@ –* —ôF$£Kð<ÏOðàøo‡h^ÈùãYĖÌ@jÍ~~ä¯Í—R
+ÕnT–?a™¥^ÎÈ¥Fõ`ݶòòmuƒ¤5úyúiùàsŽÊµ–k’wèÿíyMçy¥®¼¼Ür¤Ï~qÚýiG-ŠhݶòòÊí¾„&ËÞP:—ÐË`5h+õuƒ/EœùΧúßmö4׬ÝPnn·ÿåºñBiM¸±XÛëmRÊh_ö?¬~Î+8û^÷)ÕÍ֙N‹Î×4ÃwˆN5peÆJ/ÂpýûþÚ²X‹©¦òÉ-M­>ÍËÇãŸv ϦSë^jðÌôb;ïՐææéí•å•ó¨®5ö 0À×j2_BúÌ µ×
+å(Øoj;uç”ÀoeͼE:âh­±ÉóÅP šJ•¯ú8œGa<R+1xdqÁ0láç%‹{“A џŽãøFœ¤lôëõÃnwüH:M
+:‘2¡Ï R{E.cɒmh`CeÍïñÓÖ<òr@ a1'–„ÅKz±«±ò'Ê;ÿØ yu‘L¢Kæ !¹f?/ò×æK*\êJü\RÁ#[~WLðHrÆ¥QWQ8€¥7ÔýÄöÊŒçˆ]·™äïÑá3îîkj€DÁ¶"H-½/‰üÁ#ÅJ&wûzö‡†}õ#¡T²ˆ%<2¹ôV€zŽy,‡œ³[{KäJD·cV;: –(rÔÜð5µ‡É°× !™Dı§WóRŒ1D8io]çòќ½¤»6wËV·f1p#KŠyrÊr…J!êD,ÒÇ)Ï+.Sª¾ù¨ß|ԟQ͖Ý2Q?«œ~óT“º†R§œÂ}ÍZb,*§ÀgÖý~ÐýþŒ2š›,ض(ïiõ¤Ê¥¼§Y’‹Ð°ŒŒ°ÓîàEñήì<Ÿ(X{é399‰ü+bi²pIoć+üíâ߈ՄšT«Ö©p‰@xÉT ºd¾yÖìçAþÚü<
+—¶_í+Áögä&wülK哕™¯¾ÔÆ}¸6:tݦá]Íu[ž¬¬kpÐjëÈÕH…RFÛò,½/©¥÷%K¶¢Õ‘šßòËGdÒöz›œDRb–èõwîëó•†i6åÞÎþwR•Ù„“ ö`”™+ùyä$&ˆÚjç@WÄLÚÃ^ρ‚+"Ä9Ýèñ†ÛgÓ;²M, È¡;[ʦ^y¸ák2µD @*L¯æ¥"²M")pÒÞº.ì“N“Ÿ”÷Ô&æ=¥ä‚ò@,<؂9 EJǁ¦™Q†T“T%5]Žõúi]½E“^ÓÇ~c[û|b’rwƒ«6ì[€gÂb;’RxÞ\ŠpŒoí¶h*APiX×ãƯïçNg/9¿üÅÅyØÙür3¹µôµ±yÈüÊüVÓŒô £luDÅ¢h™ ^I ã˲F|¤C öfœ¨Ò–Ð0~“ÕVÍvô™×Q ‘bðJ¸#íÆòÔ£’Ì’Ô`º+ŸÅcçyµÉ÷qxø¯RW˜^²{ßvÊÙ»›MX×j{E]ÿϤ~¬¾çDÈ,ɧÃÈ%g£;rí‘ Žh0ô•RÖËúvPªÞ¸õqñ§•ÙH–#þHEÓ¯€ÁBtêž5 1ï{'lŒŒœß-ÚvÁÑîם½"‰ÛI¥J­{ÁÔ~ÌkžÊàŠa˜RU˱3~‰¾­„ãÛäù;-b™“y;á
+A†GJ^z_nbØoÄ—f#YŽüÅb¾ç¬¹fú‘‘¥Š$¤/$¡±° Y;‰°,=ÚW©mAfúÒ €D×jYƒÌô2Ó#–螌X"̟÷´dÉ2åÏ+c°5Óg9ñ2¬5:â~–,ÚvÁÑæ'µ±ŠútrÚÛ1ÿ ç©¿óçÿ=d!qH™¶<#§“Ár4þS-?Á/93ý|ž‹p…ÀyÄÙüG‡üfz´wXj³Ö…Kzƒa˜ø2 ˆ|6zN€+ÉÜ%ó%/՟õùEå.XÁÌßÒûÙH–#ÿÑ¡¼¼ÜüI¾ BEØè"ÍúJmá=DZ"‘œì!Ä#Lɖô‚6ôÙØèåÈGÌ~trÕfú1ªnº°î6h«(}­Å÷Wú`ïhèê4ÿ?µï­Aá#óO§r³ü}.Žy=—Ì+ì9æÑ.%÷@ËO–Éî<¤ïr“““,CNL­9]cÈ]nIh“ä_"š¯!i,r]§„8e6•Ö¶öt,ÏÌÙH–#¥’ù{OíR599=@͕|ã:%SªSbe#úmgﲞ>šžÕ^@ ˆ%…qK
+~ùú—Ò)€¿Áb읶ì37c¾Wë|Fûq¶Nÿb‚j¼þýÈP4¨èÖ[Ó ÁÌú}ôVÛõøÈÐՐq<\cH‚¹?4YŠÑ|e€ž{¹d-³Öª.@I.Ëù?ðk(*øŸYY–úiGæx¡ªK†Lç+†aäÎ .Glì¨V4+©ùr±†á¡<í~Õ¢}œÀ0 'HÃ^[(#~9OÛ9ñïJ•ðãfHÎU¨òç^=`>sãe˜íT´°|Ä‘ò
+L}ͪυìf=…篶(ç’%€J©T­'õ»]÷ïÜG)qÄç'‹õ@å9汿ÊÙ³¶—m¶ßڜmNË^Ë2šV"˔Ô?ë㼖ôÑ?_'ƒ@,12‡Ô”Þ°Ó¨Ñ饆"öZœgüôÍ%m’›Ó³Œò>§¿:Q”cüá$ßùÚÔFjíøjÔÞÔ­çGñ̦ê
+Eý®¾ê‡nËûùgxϋ¾†®,ËÅÀ;ÙÓüq§nⲇ¦_%ÿªˆÇ.!þ»­ÇWk`èGamÒÃëW¯çƴˬ¶ç"É8›Ðø/Dh† þÉäØ£M%½™ï‡n(™…3ÓgÝ
+â›5ì—QƒšÐTh¨*J÷´ŽXŸýÇ1¬çÎCëԍŽ»Xµ¡)%¹pó'îñJ…’|ïû8œÀÊVRï3ïÃR2…úyn¼ã_UÞÒÿŸIåںϚÙDú/ö'ýö7gT]]=ù
+¹÷ó¬ÿÇGîn€#ÊVµ=tÎ ¨·TëUùw‘"CRÆ•Ú©ø#2øÞ
+…'e Ã@¡ö~ck}c6ö›™yS%ä/–é`!e£H}m–þ¸ÿÎOrA1RbI!ÌZ.éMÖ0@®#µ›µÏÁ8A×[]T¥Ý¬%׉Øè%S€ñÓ‰ÅBºÛ½uFYáí±7û:ì'C###¡cÖÞfÑ8Á ¸øößt™ŽGîŒ\z¿ñ”½&ž±f”ã88ÿïûÁg H’ÜՅ®ÄûMŠHͶt _Q$ü?Û¬Ÿ7¯ÊJ@Tù@,„a&© Hµ²@[˜u¢€üH%ȕœ¥!›±ýYWåž.É@’G,áX*”J­2V,Ïè¸1ƒš *(ªŠÒ<¥!T"¥ºÕþ×ôÆVÉ"éw­56úcÑè•ÈÙwER~ÍÉÄI[ã:¥ãƒxÇÚxb:î©ã„¦íútÊґpßK¶°†hü};/u£Æ½/¨»›}™Çل»ïËAýӅ£ÝKíÔ
+($}œ­Û¶~}–¹˜¶ÑˆáNMŒ‚BdA÷
+ææGÈbÊ.•¶[Šbëg£ÍÓÍ^K_‚ŽÜ¤ûh†|Ö Ù¤!דä:rñD’¼ióôGµÙ”yT­˜~O‰ÜÄIí»8í$ŒöƒÖ¢7c”½#bђ`!w•”@{0Ôº9iù¥»pÕ)TëÔd);»Ì]+ÅÛÀù;…1eò?÷{M†¦Ô¡”f…‚~8·8Wr–†™‡Ú¿ˆÙ«I÷ç—T?tߌɑ(™‚6ú‚G(ÈOm,)ª‚JŽ%aœí£ž·=Ä:B­VçΒ!
+ dÛ©'דúÖ`ߌ‰²ç¢Ç ¡¨­FïçÞÑ/Û»¹:Ô_¼dßk IR¿ËºX_°‰@¥TªÖ“úÝ®ûwîKÆ쏳-Ÿ‡zÝú*’¬Ò»ÏEùÛ½éô¸’y²Á×ûß5õ0µjO|h$ƒ¡h3ÀLÓGw•gP -´h+…ú•Ûjºÿ Ӊje&
+Ù_u½£ÄŽˆ"ݽÍ#À‚î*)Ig$_uìû¨T—Ì”F2w­”E þÝüHøq‹’¬Û¤X£ž;x¹½ÆŸé™~ôüÄóŠ}Š¢¬+lŠI ²—r‘䞘 j_¨m²»›×s™½pX
+ÃÇÂEӋP<Ïó|g8þÛ!š2Eþx–Ü ‚=_Nòõ¡yª§Ly*Ì{ÜJ.(äÑ $ÁÐæ{Ä
+¼îSª›³²t¾¦þ»Ctxƕk§ÃõïûkËb-¦šÊ'·4µú4/^8·ûl:µî¥ÏX¾Æ\H?\c¨É|¥y¢ýõŠHݶÊJ}]DaêÏØB–>3H흣äªÄòdQ⁄NE]§†&ãA{é®ÓـSÞÔ-{œÑÃÐñ®†–Þ˪¢7c”±#âèPÊ60O»Jæu÷æ‚ÆK¾úpk‡Ìú£Ã4}sÆ+u痳k¥T[ŠôïæGʏ[šdr·¯g¿ÚaØ'xܗ¸ŸxyEË·Ñ§ÿ@Gh“doSW<ù„“ÆÈå9p=Êín^Ï¥$á衁@,Yfid-,cc=6É@Ûë¼÷]/H¤âY„Çï¬x–À]Κκ›ú(¨L­JÙw#iÝ9%ðÛB3喝 ¯ø+Ÿ×Ö>äDê…@*=ãçbךRIêö}ÔYBÛLz^¬hièjôd*1›@’–wÒfú%HR¾§Æ¿ÿ¾­jê\Q XlpÇ7â$ e£€X¯v»ãGÒ)_Øol Ò¥Þøé#Ó ƒl·
+x£3GÛÌ÷øz‹ðQJf®y+³•kôYG½"6íÑØäÑl}¦ÔÒÎP’4øÎE|ٕÄÛ
+'gl«˜uÖú“ñɓb:À­ïBTTáîéÖ¯uÍV&†µ¾ÖºØZ Ò¤\§
+;ƒëÈ®S…½£¹®év²â“»Ï5`µ(6?©}Íúòä„R÷‹ÆK_¸ ØÍ íˆxð¹
+GåÚÈÕûÁg‰¢·yœŸ]%Sî^™«ŠSh_ ¶@t}%•‰ãg[²JÒ9ñeìZ)Ù6‡,ÿnËt¥çU§Ï R{E.cɒmh`CeÍïñÓÖ<ò%prd-V.jÍ@ bnQ`S›,-
+·4ΰª;LNêC'9Á¸L}Âóšnûž:_oOýsóm¸¥¡™~‚ßgªñ\ìo|†Ì·²I‚]vRÉö½Õäü„äî†8Úó^Pþ 5H²åwÅ’$gœ¼ºŠÂ,½¡î'¶Wî`<GìºÍ$Ÿqw_S$
+}66z9òÉÉIçá9ؓyQÈÍSlô˜+ÎLÍjotÜy2è<™S¼Æ»0“Ð&'KI–RrÃGœ²ÆN—h
+aØk?ÈÐïAT¯Éz`ä´¸è•É.·k´Ñb‹ÄʈLY瑍@ sÈÂ%½Éš@{ŽyœG€gnÙø ,{-ÁsÁ<É"@ D p¸î|†FN)ÏÇ篭ÔãäbëµhŒþo›í‚Å¿7Ûk¢o»4ô2\2¼ågŽ¡ï‡RåʊôBUïÕïLªŒ¼E
+û"yÌ‘y¦†©qœùÇôF=Â)ǎj·¿%’ÔôõýÐVB$ÒA©™ä¦¦Èí~ÝÙ{!’¸TªÔºLíǼæ*\P@ªmö¡Õªê_4ö|èÓ
+U›z؛6Èùž0Ÿ¹+÷t4¾Ûï?h( Ö8;Ñ}
+@ Ä
+¹ñDê
+¥ˆËŽ—q GŸ¹Å Åz²ZH•ÃT¼Lny–䂤môþï}~ù@ ˆ%ˆVM™žÕG>òÓQöÞ(s#š8ã׫Õj%“d`<»~[{¤1²íԓëIýNk°Ï”yÔù~+IàڝnhíóªH'L‡ZÏûL1Î8þo´ç¢ÇPE’UÏŞÑ:˜©®«Ï…ìf=…;Ô_¼dßk IR¿ËºXŸ)C¨ãl˧á^·¾Š$«ôîsQþvo µC,N9ÈzîÅ×ûß5õ0µÃjO|h$ƒ¡h3@öb|Žî*Ï @[hÑV
+õ+·Õtÿ:;җ½w”¯­P¡bªŠZþž6ˆ\Œ;Œ‹­b9ÃÉx~q2(,g¡”‘#dN”™›Ë"G™ù?âÒ5Kx?ø£Zó<J–ç’I>yM&!yÍz¿Ø¿À¥…`×]´¤7ä:R»YËñL€ó8_ï:ûáYíf-¹NdÍiþxã &‰“´»ÑRg¤˜³ÒüQ*¢ôÝ£¦ÐÕ!JÉt7›ëŒvЙ/"æ@_Ϲèù
+ïÿ8ILm@ÖÕdëæAmݝ-gþâqæН¸(þy´@ ˆ%Œµ¼
+0lÒ$&ðq¾YÃ~5¨IM…†\O’ëÈܽ£"I¾gó´]XµÙÐ+|Tg<BQ2Û¦àÆb d¿Ä×[ 6ƙ LiA—“üÙ§3º~jF×B5n,ÊlY5#Xgp ¬ëåê“B{0Ôúaù¥{è¢Üé·jšÌ]JT«Ð=̺«À)÷ä¤8Æ¿ª¼¥@[˜‘ô룦ÉÐd¹€Ô,[ðó˜3æ0Ï'±Œ™(d
+²Ò‘ËÊa"§¯ÂB
+ '>dRM?(*±x™Ê.á£ð¿o -ÚÊ"êóñéx™æ9ˆ—ñdÎçJÎҐÈøæ´ÙüÞ/†˜ÃZóóNö›«¤ä#@ –"e R«ŒÕ øϨAMPUEižÒ*‘<†ºÕþWÒ:e5Nþ™½
+Ñøûö–wšRŸÔ
+ìá(m³ÕmëJN(5?¯MíØčÅÚ^o“o¦í+Áöˆ®¯d،?ےUröÎCëzpmt身µÃÕ\7|WmÔÔ¿Ü:rÕ¦ý)V¸m¸rÚúiÝKµœ¡A'²îA&ô™Aj¯ÈŽVˆEmˆ@/Ë'Ç2+GJ!9 ¥LaMx…Œ‹#fkæ'8~ʟ¨ìùZ†¡_ž2¢g”ÙÅÁÿ:H* ‰Zvÿ#ð (î=3‘oYÛ äù %?Áò‹eÙR–}„ g¦Ï5@ìj¬ü‰òÎ?væ×%<‹Ãä¤>t’Œû€CýÜq9¶n¹Q*8å}AݲÇ|ßE)Yß+-½£vŸ¼ˆ˜,FÇxXç‹í_I€ýèç%Cò‡ˆcOpúŠ—ÉA*^¦4Éän_Ïþ°ð¯~$”ÊŠ³\ãq¦¾œì M¿',ë^R}@ ˆ¥ ŽãøFœ¤lôëõÃnwüˆ/õ‘ýƪtÎÈÌ'šÌ÷øzKá%†¸Öw!êË)Îjh{3`{3ããäÿgïüc›¸²Å¦J*‚'O*(c56?„M©³TÅYªÅnÑC¤Æ,OÄÙV_l¨Šª§ÕnPÁiµÔ½ƒp(6+ŠÝUûbžÊâT¥8¨?ì
+ªL´T«DŒU"f´Dò÷;ŽÛ±CÂýȊâ;sÏ=smÏÜ{î¹çèsž8eëó§Ef,¨I>ÍãX¯³Öä¹ÆE2ë'në'ieôÄ^Ìus­©È’…òN½ºŽºŠª—¯¼çmú®ô¨Ÿñh‰Åb̝B9 –wÑ¢#=
+wÇó¥7¾°Bòœ$õå¹Ë@Ü_F/å-­+ž“46i‘n䝠„ºYdøË žªè‰EŸ¤¶ê²Ë˖¬wÆýëßt–ÿ¸@ȝÌf(XªKÑTÏG ˜»TO¼
+Š—I<?øÚ¶(ÅË$²T֋¡TiÙ/ñ2‰ósGã 2±D¦ëòÑ_:4/)ÄË$…Êú)P†gzޙhk§90Ê&ëº~ðéÔñ¶4=ŸÑÀG}âe“é“oó)ÀŽúâ•q~âZ~òi”²ÆC¡‰žá \Kø3‡V­”H$b‰LñŠÖñeZoÉs2h{a­î&Sô¢’¦÷gâ€þܙÖÖç4?Îe4!^&ñE9×…bç¤û¯S­Pîö@Ú'˜¢@ökJ_˜²…”"'~ÎTÿš?¥UË  2ò<ϳü¸ò°=ÅÔ¹ýBJÐDIã<3¤¢çðwxô0ÍDRDRuT¾ár°ÏI˛´ÒÄ>Gö{}ÍKáˆGÜF¡±çã¨Yˆ‡0*Ýb\õݽì±xå’ ËŸÌûÌ­»ZÉUåïêCÄÝÄ`"6}Æ/eª?ŸìósJ˜µ\@ )äž}”
+öÌD±]³À†u5²Ü)¯nüS,*W'ŽvÉv2ôÕrÜî(a_H·™éç
+ñ8ŸÓ2å™] ÑÜQIozúŒ~ý¡È‘ÿ9¢–’‘°ßlèŒFGþ=ž7”VhrÐ ul;ùƒb(`ñ2IÝrµíX—r ø>nk;Ό 
+4'^&©û½É}´•t¬×®l9{̤¥ÕR[|Ô'YmŒ+ o³)p¾x™DºDÞò®A)o.Á‹„¬áiÉsÂ?˜\ï5‰ª`à3KÛ¡p\ÿdÅT .*£ÑýYB[Éÿ~é^±Å?t+ ¨J(Ùõ͏:žOy†ó
+ëû)ªZ.
+òt”g"L”ð<U[ç¶%üè«É`œ×M—ùkµ>5cMæ%WUGIWJ Øè?˓ţó—©PrQù@ ˆyn>ê¦ïr±XŒehׇ%Ù耐ºby@6úJÀ)]𤺼ºO‘@Ì)RÃZXŽ 4>«Û #j éíٓ»4ÆYó?#î£fiIÖÉ,ÇÜü/>Ïhš¡:Ö¥|–¡ú³Æ#E[Ôn%âÔ3˜Nv(êÒëNk[SE~¬WÿšJº¤„µ@äýâ²÷˜Aº„$D¤t•´>/*£Ñ×8•¶ˆ•uUË,ПY@ԢᅘÐNy(ă@Z'
+G¢á_:ÂFÆü8?6Y°ýìäÿå³Üe®R‹Åfy¸¢Èʉâðµ.~‡î%Ʉ?K×µT€ ȍ/oÌ8¹läü2wèðÙe;†²üeN¶Øì¾Ð£\Š|@ 1íõ²ò*Êꑛâ‘à¿ê—o?ÈE2Dɕ(¤nò-Ô5xøqŽ‹ð럓¤Ö
+òϒ§¬M„æÆÓ¤åƒLII
+2²9ÛãÕB…øqNPUBRÖ<j$•Ì)DU—¦?Îóãy›D;[;™1¢BšäîÀ‰‹R.I;?ٟ)à±pgk'A"¤\`–’¸íµº¶¿úm­óÈ`Ã_lcƒȼ®bÝ[JL›J>£T!ñOªè_ŽÇughõóËó‘1`FYv ø1Æ Ü&ÿ_D
+I×ö™K![¸ù¨Û|4«x‘ÒşQFH]±X9QMÊ®ˆ˜vpJ<Y¦)|ãÉ ,¿¿L%’K‘_!ñ Ó%jæãAa63A´@
+ƒc"s”6€‹ª|! ƒîùÄ[nx ~T ”À¡¡ ;þ¦²\Îñª4iåAäl«Ž$T–ύ3.*“t%“çç¤Ps㌦¥³ãü5Ýó$ăç\È#$O¦\Tâm56·wœ¿Ö›ÒVR±l%íú¨²›ÅOŽ
+^i®–Õ'‹a¹Ð|ÏBúµ`Fn²åTÞÕBa‹tZ[œ–Äɍ¶Ò…Öà~@!͘–r2<­÷ RYà~±>A<¨6¨ŠŸ„@äçâ/êϽö=r›iÛ
+Óé𿢆÷äɒŒO0©@yŸQÑWQ!¥È‰À8Ùƒìö8ŽòÒ%Âð/Ñðp4ø3þ…‹0 ÏñÀñÀ €ãa€ãa¼Øÿˆ’C5 f&HE2kmÛa›y?ðÌ}üçaÞgvŸwJ$‹@<LWªkÈäÿÜ]÷‚g¶]«¤/ªè—ýª’[Î)v–s] @@Ö샻Ïõw(7©¤rE Lû/ºÍÒQKɦ—Çc¥€a؅_h—´ÿ½”vñj̱®+§7Š+Ã2ô(\Ô·âãЭ¡x± Ž"«ÓªÇ稭ž!çV*SyŽV<#á_¿úD?:¦ZñVøÚ=F¹¨d!5çf2|0d“'FÃÌí çc£ñãÔÞc¯›eïI™ÏÓ¬Bˆ)ó9-SžÙ…Í}åAÉÜIìë
+Óeþš$G­3›>chÈó<ÏÜ1Xº,M¯ñ<e£=LSuÔ#µÔçG–2x-:õî×lûȧòx7ÌÈpÿ!$;jJ#õRÈéŠ~„ùr2z`²»‚dk…³««¿»ç]EäpÛHcÜD\xŽ¶¾cî»èÿEò—Õ‡íšz<©@¾º™‡
+~ßÒ{Ú!Kæø½P¼à
+R™î›2_ºàÉÙ
+&Žÿ“\iN."Ώ˜©=b~Ósæ$Q/Êa "¬’š?vØÛMd.Ÿzöú¿DëÖ¨­G›v¼Ô¿Gaf÷qîíŒðê=gíhíþžÁŸ#B‘Tß}ÁÖZ$Rð³¶Ã1ùï[ϞŸp4áhó띟]‰‚°á5½ëï6
+/X^ ÷A}çqOø—¨håFÓ{ÚÉY«a‡ãSd ähé=mW8±€mËjÔ_ y7ôE›þ¯Ž†yÔ-—ºÌ¯Q^MÉ·8ž¨ÛôՈ{QùŽù¯é¢X³ÅÆ\É4Q‘›ö?xŒ¯têÂ6÷›šè’ÝÞ7r÷v!7‹6OFË!äNæNâJ3δn™‡‚*Êw…˜ø¯ú夳­âqÅ}19ûæl{w8Îù†Gy¡¨NýºÁþ™˜¢÷*ÖÕÈúrºñ[,sÍòÑ0]:̅kAÌ(ƒi*ɱÓÌyÓg`j7™;Ì-[A¶Ü
+|ÔÒÅêwé£l´x|¨Ê°¶?©¬ŠÖ ¥ e_T‰”é ª£¨\>þÞ7U‘iäª5q¬žRlÔB=alöh¯ê
+²Ÿù´/*U9Ò¹…Ži^}Ÿéõô«×ÌM¿±É˜zÔv’|7Â~Û½â•mÊ«­n_P¾Dà;¤Ùfh´µñҜàÜ_…ÈqÚºS»^E²×-àP+|“÷;´u§Fù
+žð3ÆmÍ*3—7ã.Ç¥ÔÀ*Ž|p¤¨†…éò»âFݧZ×öÌɅá¼×öÌZíQç\äìP¡P!ùðœËúJ2¹J÷ÈÂÍ@fúr‰Åbæ}ÈSH‚›ºÍG+AH]±˜kšô™eæµ ³ÅS3ÖRæL»
+Z¶·;倳bõ»ô‚*æ[8ð~h-%0 £ä×Ug\Z<ý©UFâX5®ØlK™Ì/ä>¨ $W©ÿ)EÿxE Ã\ƒnÍ:
+I¿íõôÌKÛÍÐ9فE¯]¾Çkz6ªÙ2m‹mç†Mç;2,Ü6ÿ5ïQe9⪉’Ðq³h³%y„;™;ÌP°7£F¾r˜ðŽÉ.ϐ\”„ÞùcÒF_X>@ â!Qêu
+½ò_úU%™’ƒUÛº G½###Þú¾Ö©&»wz:N<¸×»KØ­W{Ÿ€ ÿ¾LïP+w¤ÞïFF¾óÊï8•¯LÆIïnêÑuŸ=û焧†í$ïýnäGŸÉ÷Ñ6åÁ°Ý|ðà^=†Fˆû³Ðuú·FFþ²ý‰hoVÇ%šs¯KóÊ.Ôn–Î0‡—.¿›ÿW»îÓ¼®49ÙöÌ,¢ÞpßÒäÀšc†a˜hAŠEê@t4ÂL@èl鑾žÈxî9–í©hã¡t,|ܓ]ž-9CC6eÖDÞ-ÙÒ̓H÷Z¦—M>ùQó~p3ï/@ÌU |Vª{VJŸó î§Ïy”"Rú¬”\L’µdvf,”W/Ÿ´Ø
+—§™éE)~ET_üB$Óá‹uâ9n,˜^®€àXÞò¢M\‰òMkR”_™Pž ð+’اÅ08–Q'Ç–f•¢A©Ü 2ŸœÚåM²Ý^Óò¨ökö!j» :ޖW"$'a¨·šWQS[½@ÌSTT³­bþà8êp|è°þÕj9`1ì.¾q
+@Ì'’ÆùY zÕ@ÕQѱ(Œƒ¹#bûÀFÔ"‘(gþØö‹oH¿r“Îíñ‰_šŒTe»dS.Æ(ûöâÌC3Y,Œ—ùÈ@Ó¥!Ã&HRï½ä«r‡¾Ê‰ú¼])%@½Ç]™Á
+×®wÚ¿böÉ4/™ÙïӖŽòɏ3½;@ã¿ó™Œ"}í«kÓ¥<@ D%¤„jŠ„ª%àþW@)"¨:Šª§¤+¥„0G,BùBðýÕM˜È£?û§K+×]..–»ëÅB¸ïrÚD¹dùˋ6±Q(ð܌ê6M(ÿCbú€/”ÀÐbTbÔʯ‡¥Ñî9Z¦ÚaûjÈÕ@ŕ\p.Ç샘ú¥O.¿ÛõLã¶3]3&DT‘ñ⧌G *GV*D‰LcœOb~`;l3ïž¹£‚ÖnպϻsÚÇÄ<fæ‚Þäpˆ«žçùq¾«ŒosƅŒS؟eÒDŽÔAe>&%ÒP[Èm¦°ç‹º.­n1gœ)ø³n·°Î¥0U‡֊Ȉ¸nDƒ°
+z†Ù„ž”5‹Åb±#½ÅëÀ…_Ēüv¯w±C¹#~h
+^i®2%Æ4Kƒ£­{µñpp8A*·ê½·'Ÿ§†áD¦Ë˜c1u­2á“T㲍:ÿd"ÄTÀqœZB©”†Í*ùJ¹´^*_)ÏéJöw7ö©5®/ƒÌ]6tÅ¥mÊï(3EÌjs LÓߌ¯E/ÛÉj€jêȋ¢¶-æàm†¹47E¿;B(/†ím¹gK£ãb€a˜à—NMRùjÊþ²H¥³o3̝c÷úõêÎL«ÿ8žç¸‡À„­`. Àp:À=&ìoÛâN­›HøÄÑӕ4 'TýŽ&Ÿ©sƄ4Õ
+‘’Ò¤ñ‘€ ¶©øy‘‡Œ:ÏóQæŽÞÒe ý` ~kd£,=LgÇd›;䜔3™Šü|'`FnJ{ú$5 a¹Ð|Ÿˆ  ž¡ô)LzÝÌòE„r«!”„í~@!ÍØ3ÁÉðœ]—YnÊJç6—™®¯Ê<ã©ÙÝNÎFYh‡·ÿÍùâþ,É·þ,ɈŠqŸ™ T“I?LÛÈ&UܓZ•êù’Ž–©v¨8ƒÀUÿÙ¿µÌP»yèò»áÛÎmg•‰Á{_­s4wgÜq>ê)GØ"¢åÝ~4Ff
+^Ȭ¼HÑÿA«­y킧1e‹Eº×»q‰@¼L ‹—»[}o5.xSîìié›ÜºûÅ:£$‘1‹ ¶¿Ó^A÷¤!{ÃÝñ|EÛd§$D·•<UR„OúÔ µUW™^ˆù€ÿê´í³A<áDG£Ì?Î[Ú-Ñû ŸD"¡ŸBì(;ÛªåÅÔn’N«¹©B"ÿÛ®¿˜ã®hïOÌ2¾±@üÿ¡[C½Ë{é’ӐÄ+ԟ¨9•)LfÝôC7¾8+î[Ÿ£ÛÙ¬UõMºÀ2·ƒŽ½á¬©UÎrëiµ¶åG™o$ó³ô‚ßÅËÄ]é*¬‹ýݍkÕµ§Wµ†b𵵤YՍj3uÚLŽ3֝FыG¨n¶·åk·4:úz›^¤˜|mÍÓi¦Oz¾P§-$0ÖÖR=_râÏý9г?áϏ¯ã!ÅǼœv9Úö±»ôDOq‡”o–êÕ¦éhÚç!ª§pmŸ·gÙZÉÆ¶ß _Nò£´ï”µçº \´nRöaĽ` dùO‹|Þ1åI&_sôn÷•ÛšF¼ñO­°÷Må;@k0qüŸ™ŒuƒJP *™Ý’$ü8ÈË
+‹©ÓÒÚ8<Ê —H›v™F¾ÑËþ +^7 \0™ÙU·•j;Eƒ¼üÛ}jÚڛ]^¶d½+àzF²þMW褮€üéâ^l$þ *A%¨dޗ$Wæ€X„À¶e5ê/†.,OCà˜¾ñ³ÁÚú¼ mç†M·:2Ûü×ô£“eŠ÷ 'U8špóí÷+Ú}[Š›éKž|…[£"¥xÏÜtìèð‘>»RJ2a¿qKŸôuï#W 1«à¤ÁTkqМ¡ ÛwÇá™\x!D¦q¬
+´vÏàÏ¡Hªï¾`k•qwÝ žÙ–l=õ-}Ѧÿ«cà‡auË冃.ók…BÚbvá×Ú¾û ¾ó¸'üKT´r£é=má / †agƒMmÑ×ûCùªäC¾Çkº(Öl±1W¦gpêS˜‚T ÞT¡ãfÑæÉEBîdî$.3µF¾r°n™‡‚dð8ƒ–ls‚AÊÌÿ‘Rƒ‰sü®=L3†‘T•oÐìsÒò&­tb­é{}ÍKá(ñçŠxràGÍê@<üQyèãªïîé³FޕK.,?Nܛ¾uW+¹
+-Œ"ˆâß&9\N>ý‡µšCŒ÷»~ÕÒüÊû~ì¿ïý'6‘
+›c˜ÉµØxäÉÝ­‡‡ ±@ü“,H´X¡ðɤÜcŒ³CÛ}EÆÝMXĒË1%2îS„³íÝá8ç兢:õëûf¢û>ÖÕÈúrºñ[,Óůf¬¡'
+yÒ¾ừ9˙¤¹»cÇô,H’´™ÏrШªŽÖ
+¹ìŠˆ9E‡Ïnۙ#¶g)œl±Ù}Br)òbziû\Ôõ{‘£¹»ÈyDƒ°
+z†)ªpÊ‹Åb±Øƒ‘Ì]ò¿è3ðï÷+ÙÓ:%á~}›€¾îÕ @ f¢¾H Y=rú›‹È7Hå¤,0ñWüí#-™í+F<Þd;bC5ð<Ϗó]`|Ë(¨Ê›·ÜåÕË'¼ÂåêÔ£¢_\j
+½”·´6®xNÒØl¤Eº‘oüÙOåúÈÿ…åÑMAƒ’…#Ä#…c9ç'µJêüÔMÓ3½Ÿ˜»ëž®ý݆¹ïrÓ"j®< ˃Tó= éŽa¹É–Z7Ùî
+ŋuYváqcz«gȹ5±1b²‡9ZñŒ„ýrèMüPè˜jÅ[ák÷墒…Ôœ›ÉðÁMž´3·ƒžÆR?böºYöž”ù\ÿ{ìñļÏüH§<Ƈ™EꛛÌÖh¹ð6·V¦™CŠHªŽÊg ö9iy“Všøù°ßëk^
+ÇØ@¥#f
+˜[TäbÃ0‚¤tûÉV²û$»CÊk4ÕÇ$_ÿñ1I‘íÌBÔ;s^ó¹¯ÆôÇÅåÏ1Ðr"@ Ä´:šåîs='6z@ ¥ˆ­Zó)'}»"w6ÄôCT=EÕSTÿ×',ãttn<Ù¢
+fõqÊëÙ>ñªëÀ…4¦+jG¿rÑT„քõ¿–&môì ^¡ÒX/fs#ÖÙ¨¯~©Ì@ÚÀY™U¡©¢Rªª£¤+¥lô7;Ôm0LØ߶¥Oúú2¦"fœ4˜j}ºÌ]q܇Odš6zDNf.6}ÆC+:eî˜øqÞÒn \×ÏG"ÑÐO!áB!A>…S»Iº°œosj¾¯D˜O;A£ØÆï²Ýø¤ çiçÝz¥…ý~Ê÷JêU»$Ư׆ÉÅÕÎS´tÏÙä[Ï^Ÿàنèϝû–Ô±¦ý›Õ„†ìhȱ{ÇzÅ^7Ü®—¬‡­®K6J(]÷u¾eVÐúb©žå4
+ʋâjVôDÔÞo†(ÓÓªiTÙØAsi¥\Q%WݽÓÓ{>p¡Nà;¤Ù¦WY[hÀ*Ž|p¤”Ë)@—ßí7ê>Õº¶gæ6œ÷ڞY«=*𜋜*4, $žaYŸ´øyÒ=²p³™~ö˜;–YĬ=ZŽý'–ôUÏé‚Y€ìóUéYKt¥Œ`ÝKȞŠ˜¿°·CD}9†ÐmVVÌ[óämjւÞ@´lo9v,Êg9ÄêwéU!!ÌçßïýÐ [J`FÉ5®«ÎøF¹xlúS«ŒÄ±j\±Ù*¶k$Å}PH®R9þ/RTßdEBîdî0CÁÞ´ÄJ¾Ú>r³p,s²«G¸¼5YÑ5èÖ¬£0 #–Ê,}‰­µù"í¨6Eoš“Û_ÂGzKvkˆ„mšþ§‘Èm«HûöºÁ®žBW âI38ãåaË'­iúJ-C·†ä ‹^wٍÆ}L&òäï˜ð1É–&¡6zçI}aùsØŠ@ ñ$j—‘‰(õ:…ÿŒ“°£æf |Ê©…&ÊdGÝlïð·ø¼úM
+r1©Ø¤s{Ô©G͟˜H—m²€ÉcW֓8N¨÷˜€/>§°ûlJ)E­RÙ¿°G¿í¤9€‡Œñÿ"½—lÊz’¬WÚ.õFþedæ//ÊC¶íý—lJ)IR
+ŽzGFF¼‡u}­•ðþÀÏ;Ûj` jÄÆÌÙÀ¤&Ý;=§ÜëÝ%ìÖ«òør›|!¯¿œ°æwž¢å™TϹÏ/ý“ä1𑓮”€ìÑÑ3ý} ³¥Gúº€ˆŒCkÖؔª§ˆ‰çÓ¶g¤Æ|ÏX
+…ntüA°Cՙ<4EÿÜþºt`¿8Æá‹òöäîKÖß=Ì·þ?’a˜h•N¾ºMÚdñ’Õë{þ]“Åì–ÞÐÐH
+C¡”O¹fø˜èŸ|>&Ù^*z)ߖv½ÓöÕPÇó¼æ¥Ì^E>,b_¶Ìx;oJ®}umj݁@ 9©¡H¨jPjŸ—s7ƒJAÕQT=%])%„9¼Òä Á÷S4ù6úsÙñc3Iú»pw] Xˆã eàž,w€,yÑ&p ¼ìDEÖkØk.[Zyð£HrNºünø¶sۙŠ ©S"ª‚ÈxirÇ#P•#Ÿb¶˜EË,bVxŒò ³wYÇaM£ÜæÄGr.<{Ao xžçÇù®N0¾eÌ2Na–I¯R¥ù˜\‰òMkR®T8¹$îNóýç­
+¡’C“¥B_Ô`Õ$›îºÜ'à Mò-{]aQŸ¶§
+Ë`¡Üš¦w7`nQ‘‹q Ã’Òís$[ɺ´¯Ëkî҉d–yúÇ •
+ã–"!³9 #ê9/ù܊Wcúcâò0sfúœ-6Ê@û;¼ýovÈïP؟%Ã'E&(î²Q(ðÜLøCå#ï†ø²÷v⤾¥V`<ê<E«>Ô%Ë;?
+KÛo$­âFzalÀz;ײÄ"¢åÝ~4é·¿,êiMKü͆­ž¯kŠGT,·Ñ “‚ý“ÇÇd
+^*òg…‹ó»¯t¬w¦jˆ|X@ 8ˆ–ˆ”k”r¹\¾RNÔ9mô 8à¿ÐÙÐÝÚ(~¦F³¿Ïà±T0´O£®{I&Q4.i ø“d³¿¿E4ظZ,^Ý8Hê_˜ —Åà 薆5
+rÅrDˆ0ôÀ×´î/6Jú¤ì+eõ²->>òKŠiŽõb5¯ÞûO,nØáç±1+?#×Ò8fa'œÐçqÛå{4ÀÑøI Á¿R,øàÇÀîD¾Ã&¯;Ö’îØCÜ[)#of>7L^EØZ#ëì¿S…ìlïËiX?.±r¬¿hÿ( Ü:Ä©²ï²©J³³Åmô­ÿsÃѪHÍ+¿dfàYð‘|lÍjШ‚Ë—. )Ö
+ñ<Žð…ýY¼»@§Lø¤ôûKò
+Q¼è}[n{£Q,k÷{ —¦a»¥-p­©Ê߸Z"Q4ú«Ô×Edö‘í²?,zÑNNÌÞqD­ºôO×ÛÒásÞ¥pAJòUByãÖµÕÁ6õzÉs+v˜Ò]GB__‡¬¤Ñ “ý“ÏǤt/• ô®@øý›®Âòç h9@ bZÈks©žxà¦c‡º-fâ!\ú¤¯—š\ñ$€“S­ÏA±qw>‘ Ùè3˜à0³2«BS¹yƒí°­Ø{:9ùqT(PԒ0†ŸáúpÒ*Þñ¾™¹“{áÇû¡A¶”À0Œ’k\WÉï†aŽ‹6ÅR«Æ5ûÜôE›¢žÄ0Œ eæ“!Ȋ»’ú–¾hSÉ)¼êqj•ÒöY1SÌCÖú††\„c8®xMdS
+võÒ¸JßtÅ/[>iMÓWjº5$_Xø¢¡‚F!tÜ,Ú<aÊËß?`Ý,2e K“P ½óÇT}ùˆ
+ëjd}9Ýø-–Ì8U93Ö"í’íd諅¼Ä(a_H·ô1˜†Ì0zqÔ¶Ã6í3•ç³šjĬPƗ¡€qÎóËø2¤>¡èpÈ}¤[»œ¢ª€cyG£®ÛŒr»¶ik AfþLBÇ4+Þaz=½ê5$sÓol1Œ&<Ð1 «{µ+pÚÄ~Û½â•nÑó­î>«|‰ÀwH³í㘠U'ßr4¾@"úc—÷C=!àgŒÛÞ¾B–z×VÊQ{OZ(ÓÓªqFMì Ùµ•²€Î}Ø@ãدíùVÉÝ)dÏ)µ‚ýÞV³z½µJxùב¸mÃ0éʖÞó6y]üꘄ¶y£VpŠE „'‡üÛ)Ð8Û
+ ÁýŠõŸRý>»RJ2a¿Q­ oö†Ž©™~Žc‘¤oĐo°Ü‡XÍ°ßçvP*EBa
+»Km€eéˆgÒüš,.ÝLÿ˜_ÿ—žÁs.©På‰uJé³Rªž’¯‘‹3¿”8†õ¦Ø¾¹»®ÏìHšé“VïœYó›é¹ê2v†GyA•€\Š{Îù
+ÿÉ¸7Óâ6Ì_I’£Öªk’ŸL*÷1)*¡0ȇ@ *!ÃF>õ(,@ ˆÇ†a
+¹(ˆ›þÏù
+TÄ2ð²\<Ä
+ÇzÍï_qô`è?1*á`ί‡¥„FHÍIY¨¨4pRßRk4ž‘§hUßdòÂΏÂÒö¡Ã tܚo½ÍYê³4_D´¼ÛÑöю¸<ûË"s«Ãüåd€6lõ|=h_#,ªL¹‚¨
+"ãÉcûg<U¢ìÒ%Aþ¬`‘"p~·xËzçö{ú¤†yä—N|ɶ 󒧐õñH)ja/jC¯ÄF_Š|@ä#ÛF'^’ŒV@  ì]Öö¡ƒ¦+Ú£@ ;Äb±æÓB?ü©Zf%²¶Š•BÌ©!DðÅÚX,‹Å
+ò•ri½T¾RN֒9CCÛßÝاָ¾ 2wÙЗ¶©==³!†Óîa<AúÄ×~œŽÏsÜC`ÎV ° ¢ì/‹Ú¶˜a†¡CÝÍm}W„PMÙ_©t–àm†¹rì^¿^ÝYQjŽE
+ÓJac³%x›¦ÃAK³F¸ÒT$ù
+ãþõoº
+ËGT‹Åf&€ZÎèì]¶ï”S½]KQÓöÈD _P
+Y1G(l£O‚âÔ#ˆ9KF
+Yî>×sܡܤ’ʁ0í¿è6ÿIG-§ifÒĉÚ?’Ì1gö\ þ5±ÅÞÙ@G)þçd[ˆ§üæGµ0a;`GCŽÝ;<Uìu3Àý B¼¶vØþ_%„®û:ßêd_¶Óõ+¾mvàÚrpn&ÃC69ÌgzqóÀÙ/.(k£Æ—¹woø÷¥n½å´d'Â'e¯›eïI™Ïõ•w*b™É²3J!;7™›_†¼IΓ˫ylôìsÒò&­4ñóa¿××¼Ž±rE<npŒ£fu€»ë*z¦n1®úîž>˵¿t åɟ(6}’ä=á©Y\òåXÎyÂ)¥(÷ '3ïvžf;&Ûý¤ŒŠ†‘›Ò“/O¨< ËtTÁ0 Ã4ß³íÂaž2Þåhë^­l)aNÊ­zïm.U|u§êoL†çì·Ìò"®1)’³$êÙ½ÌçV¼Ó —@ ó—mô€|êÄcwŸë9‘°Ñ3)El՚O9éÛóm’ š²¿(òíõ$ 8Æé‹ò]oOxäq´ñۈÁã–/ó™PjUQEÕ'^Šý’)z³3~ȽSËüÎ<mU5((©L³ÓÜèþG›Ÿ-M«²ÖoüZ·Ñ€õ>õi¯nƒŒ’*{ûT‡zRåø÷¯÷/iH-!ÖÙ¨¯¥jˆ@ æ#q#@ÆÛGZrí«keêZ=ñ*ÀMÇu[ ÌÄ×ôI_·¬€˜?à¤ÁTësÐEŒ‡Ü‡OdÊiC/QBÙò呼“ÌZÐî>çø¸GÕ PýN©m»ŽØ查~J˜ÚM҅Óðüo»þbŽžT´÷ݺ5ôã7vˆÿ?tk¨wybÈkÿæÇdáЭ¡¡P¢&Gkž“9Ǽ?Þºæ±ËÇý¯Ê$nfòW·nú¡_œ•÷­WM.$8›µª¾É'
+s;èØÛÎ
+‚¤î®¨úÌ~ÕQÔâëÞ7U‘iäª5q¬žRlÔB=alöh¯ê
+˜ó4mV÷œs³ËePOñ÷9~Œgd?ói_T
+Cðª
+ ҰD
+¾hñ|;.ßD›ßpw7R.¶c,!
+5ßöUîïlrü`?´HT&ù«
+
+ÕjÓç1¯/y¹‚L@Q?‡v
+Z8 xîÿ±PpXOšûÜâô÷6œCÿç|·žã¸Éé0pÇKšQ Ž/íÜ!VdD "-wÎLŸøªOU¨Ôûê}¾ŸØÉÑ÷ˤ#ÈŒZ&—saæ’Û¶µ{=nÓSjr©~ÊèZ4P¶~jÕÐõ¨Öö…mòë6.¥yœ9¾ùãýŸZ54IRj됳û2ZèìVW‘d•ºûcŸøË 3K6W\1ìõv¨(’$)õLtØgé©ÿô‚¹NC’¤z¯Éýi}b#Ëû­$«žê€Ö!›¦ŠÄqBw¤ÄÉÔtÛ4´Ta|¡_ÊrܒZ9‚´Ãoéi—”µ?šH äk˜_TG`{” äh ͪJ©~åö}ÿ†®ÎØ¿opR¬©Ã2WԈÓiÂǧJNÒ0Ñ ¨Íä°~j\ÔïN>½™ä#ă@vK=²Ñ#ˆ{‰b+äÚjáqF¸â×(ª‚¢ª(zMÈÓøp1¥àù1,m†ò®žjx©
+\ oQßpÕJä¬ÂISc¹¬åt ó «=áÞùfn•¬â³ý03Ò}=ÝëÏz¢ñ•vq:궂Ûö(úšE³åƒÝC_©Ë=¤/´SPÁ¤ôJ²^M—'mÎóÑ
+Ѽô8AjêLî„Yê,m“Ëך:s Ñ÷¶OM› ÂӚy“ËÍ´*›ko‚äT‰*GêÙîón¼3½ëË-±éûú³hjtÌ3Fÿ ÕjKáþ,θï‰T²Ìyd*p/,€x·ù¨%êÀú5>´½<ÚEek
+]IPòûÕÍçA—×ßvø0¸<1xÿÓö†ž¤©‘7û
+–Å5¦02¸Æ,I2³E°^íûøðÅöŽD§ž;îzƒ¦ÄZ#ÕRlô";Ò¨ú”d!7ŠM
+Äqœ6ráHG^¶ËMÆÅI›º^¢ÇÿՒÖ× —%D’$4£×†kŠýͺ•?r°ÕN?ßø¢#§’ËéÔXG‰[¬4'†[éq½ºR©®õFÿW¹{gόQuƜÕw çHB¸-ØßéÓV«µ¿×ªg¯Yêï“ÿÛf:Ÿæä«Û.„®…B×B?\¶@ô{èZ¨k̆i»üƒTº
+.ÄZ
+â’7rÎd¬«ìç}ö¬õ3µÍÑïzuÒ^í ›jW½ê¼šÜ‹¤Û¢®IýcoªªiÛJº-§S¦ÓÌnÒ>ËûnËûé4XÜ©DßGlëwLÆqljŽ«£ß…Û‚ýÍ>m5£ÞBÃ4GÉdîxÙb|ÝJÑÔÝÕ󤽳¦§Qk¾ÉJ ]b$ES
+ ª’ÿ5Š
+.m÷)s4‚
+Å蝗Ò
+ Ãìç­êÍVŒë¹ØóVu‰aAª,Há%q“=oÕ2^ŒaÅ8õ¨ÆúÏ\•9¾ûE=¹Çp\½Ïäç
+ðŠ§»|´òßö<òÇÅãM®Ánf“Ìó7ý^6"pI6´ø¦Àâ%•Šÿ¯Ë}ÊDÈD߇-^ D„l–zgÕ2©stP2®¯Iï·òcgÕF×I3 œý¸¡ï[p#›Y&§ÂюÒÊÄ0ŒÞÖØÿ±•©ˆÖç"›ñ!c€
+8ð^¬,n¦؎’Ê©Žô_Kß6m&"Ź@ÈP…€
+ǚB³–Å~¥K2Ó œµ¤Òž:“$9UÃèCLÃ"…í+?wLeŸ1ñW'àÍ _= $¤{Âoî‰ü-ê“Ã]ûÀ¸»Ã0•Ö$«ë~K ¸Œ¬ÙS“T™Ó$JÆ0 Ãüyg^!ˆœ´{lÖCiƒ[æf Ñj󴯆ä|ä#@ I}­ˆü‘lô™Òš¥Â-꧌âýÏÍ>—ö<;{39"å=ñ
+ƒXA
+]g
+þ¸¯My¹‚L jg¢Z^}ãѐ@€SݑH$‰ÌNôçn çnÎF$þs«ÿqPs0º+(µÌ|£Eˆã©Å©’“4LÜÕþ•ß\MvqAþSŸö„?ùˆT¤‘íoîp¯‰CjÉðGI‰åm;%D"‘ðäøà›meë0€õïEoR+‚Ž¯©‘.æèæŽßæÛ;A;“R6Irvü¶à£@%É%8ed/Y
+“Óòïñƒ•¬†äèfË¿Ç¥å±wìü hb-“xûB ˆÜ,ø1“Z«ï>̧A[Ý'ϼÌ+Öûþi(¸stËB Ö&跉@,¢ä
+q™
+Ü aâÞm>jÁKUúU²ŸÍŽ^íZF„X¦Ìø..¯ ¾í<ða^C—ÌàýOWØz’‚ô¼ÙWˆ°õDã+íâôPtKQ“óËÓn~Š©ÅK’Ìl‘¬Wû>>|±}§ãz±fÈË×s¬ «xÀh?ÕÊ]åѪ±A±éDC\¦_[w¼Jg
+ûêk->?…§iˆaXÎÛQڐ›üïøpÐP§£(*m+±Ú`(Îç½
+x¸J¤yB ÀþÂú¿÷‹·E’$™m QN¤Íàè?¡Ýñ·ðÙ¡~ícÿ½§¹Ñ229)…OIß‰ÏßÛ~ì·;ÿ}Øú¬&ü“·e¿iè§q©Üæý¡é÷ªðO¾¾ãƾÏÆ"ª§Á^CvÏ×»Þï d¼ýÅZû¤™¿Úa¯!­L®3)ã‡þvÐò )L¹³œ‡Ü
+d’¹´„%Ħ—V Þ7<ò§!Xv/SÐÛåtòEóŠ*
+³”Å.ٖ‘rb ënûÔ¿súƒvX÷Á¦6Ï×Aä̞zÛ6M¬GÁú⁞=¢LQÿ’Íù—Ø*3­2^hPê`Ä=‹÷’Ŧ¿Cà Ø¤Ðiøž,'3Ùè@ýª÷\‘¹³©öà/áŠÇuÝC#š¼3l¯WÖÓÔòçÚwÿK¬x\gìú]s´üÂM¦†-ÓbÅc5'Ý5Wv(2œ+“$³ÇǚLzµ2</cþÐxá«©°v{Ox^Fÿ¾ÞíïÏÔ<–&3Ó3þ¶—ÛRÍôYP½èj?Mô|Î] åw$•Äâòã*_h´£µ³£©v|Z”o¢ëŸo¸lR%DûÈØ6\ÿ=ë¨æ3,0…›Ø3cT]šóY°d“ÓçÜX¹óOÎÀ€1‹|D*ÒpåÎ¥EÜs ™s@$‚ž " ©)d ö¦O"½ ØSÈ
+·…¾÷욧´4£öYïy—å9#µùî[êWÉLo9nizݪÊlxO´k笼4æX¢¤R睐2€žÀ¹#Ãþ¿ª£›Žj²ešþOD²b'yòÓûáƒCEíü7€Û~µrÔµ[ÿ»ž’Ëßx:ÿÜÉï±±çMŸ™¾N{Éà‰€•!À°gŸ±žm«'æ9G»¡oÌÀ_·€ÿ„fç;„û ›bÆ@{ Ú3á¨!€ÿÆ¢ú Í}nZ¡3{ÿ€ÒÞ+ ²«DÚõ^s _2»±û,So c?þª©lw0ÂûVZGÄZGàìeÛ}”3wÕ 7àÚïn™ÈäÇÿò%g—yÓ'O!{wõ@ @ ˆUE¸-ôŽÙè9MuË{½Ûª­֓K0»/©rnŠ)ۓ
+ÏÑ!©@àž°Øõ҂±O`[¾4¹˜R°|Hlª¨ ¨ªØG]­·}Ú¾ÒÝå:dà~oóЭ­VS´JÈrÁ×>þf/ŸŸVu
+»Gњֆ¾LÉ9åGYq…ûƒß ü-ˆL k@ ‘'wrè¸Ô¾ú> ªh9£F@¡€GiË;vîFz¯|÷)³j3aÅ蝗R†ÙÏ[՛ ¬×s±ç­ê*Ã0‚TYiEI°ç­Z†Â‹1¬§ÕXÿŸ$ð¿o¡6àX1®Þk܎¦sÌ¥¡Õ«~€9¾ûE=IàX1®Þgòó8ªIro<(!¨†XÐ^ה©SÇàÀCe†oøÄÊ °–-cNh,ÒzTý†aÄfUÇ`Lsaʕö¡{»>|%Þ<ØÛ'ÛtXOÄÞÕÙµˆ2Æú(i{¦b¬+k³"€<ÚUËgãï/
+£JСk!¦4›‰‚:…À{Åޅ9ë5‘H,R³ÀsCï8ä[šöbX4o9RÏè¿8$aÝ{–÷r\ĚE»K{·U@$£>9ܵŒ»+1 SiM²º®á·VåßčXü·s7_A!ˆL´{lÖCé#¿çd Ñj󴯆ä|ä#’FSț@ D^ é[±²XOZ—窕Ä[Vý^ÿjÐsõo "ÇsWFøz´ÛhY‘,µmà]ýÓ¯´\˜¸9á:Ùh¯_ÊÖ: º¿›øÁÓêyó€æDÐæñÏÎÞêAÞg®Í¦ÀªêÛØ
+ÄZ¤ S¢k@ 蹀@ ²i7ÏØôyf.MÛ0çíhQä_\ÿöÚ/y©½:™‚ ÿ`?Ԕ“Ìã Ã0ª-ª¤z—’B«s—ŒÊ݃Qi†Ù&fÍ$ýÞûó¬e3žé“ŽÃ?$¶ª)€½ØQ©í‰D"цÒy¦œ%†f#†5]¾åˆZÒçx|]Ùèl$fŽÃÖ)Ïޜ5n^RýÕ-ÇûVÕN 7ì çÒvštòcßåal2AWÉÆ¿FÈbÀ0¬5pËJù)€ïEUí—õÛ-pöeËè,2¼+«íý.d,—€þa¥øÂhà”Ò‹ç!Cmuë×H&k†aýNŸtÞJUsLÏÂ:PáXShÖ²x;0ÅON³Ž£zû¤™¿Ú!ð§g#‘X2Ù)gÉƃñßg-©´G„û6¼R xÄ÷
+[Tˆ§Õ’_aŠ@³…sœó£!|+ÍíÓ(Hº‚&7d9™Øû·Ê¥MùVÀ ´©(Š×¤Òøâg'g‚–KpZ”ÉÈÅ.fÒ\¾Áp0
+Ž€®"ց0ã)YdS›ãÜöL…ñ¨FŒÖöíÛXD¶N“fü‹51€Fˆ«©._¡óz«xºÙw»[Ök—o핼&ýïX m{e›Tõt œŠ%?\4ms›w¼¶ó æ aÊDµ¼“‚%é¼U«åq;ö’ /W‰)d‹âÿÁ;Š@Iÿî9Þ÷mPS­Á7Ô¢ýƒŽ¥ —© x{Á¡^ B)W±ˆq|I§X Dß÷#‘†aÈQ@ Vi„Œ‚Þ
+ÿä-@dV¥=¨}Õáñù.yϾ՘¸SŠÁ"L9@]šlOÇKUúUώ^í¢p¨î±L~ÛÂr®w'åýOSùwš¶ W\¨R4Éœ45–ËZN:Ï°ÚSF©¼óÍ Ý6?Œ‰~˜龞îBYO4¾Ò.NG#Æà¶=Š¾¦Eqrù`÷Ð×cêÇäiÚ.¦ÐNAQ“ó »ÄàNÍ΀ÔHäA¦À©¹ÌþS,Q,ûO¯|“).p~Š95| @ɵd£—þJ^zˆÕƒŸâí'­,‹ß .ÈL@ @ V¥R©ÿ$›¹º²ìâmRWªš—¯ ŽãÔ&JW­1ïÕ2ÛºŠf¶1i]éÀöJÍ NïüÒÏMñ‹NC½gù
+À<žQ„9à‚¾Î¦ˆÅ”°è,¾ Ë^õµü±E±ÇF¦jULÙö(´ÆÿuŽ»°Þ¹S×µ ã›ÍrQ{¨¥âgrìNΈI]ô>©hÞoñ_ç¸ë~K}‹â÷½TöÇk=iÍ´³½“k×{fd¶?Ä 7¬ž°ØޏöŽ“¦úr™ãx†‰„ÌƏ]Ä×mª:‹û’Ÿ½pZk5Š=]f2WФetZ_.óM.œ¥õš¦M²fk€åØ«¾–ú¾ŠºØ±[_bZSÝÛüòHã»õ’qÒ'+¯âÞ!ÑFYêWœÔÉ*§4E¹N;¸ÛRÏj>—«j>B0 #ŸZô¨’òŸû_U¥Mo«¿˯ž ®JÂv5D³Íã©©3¹f³´M._OhêâÙãnûÔ´yñ *<m¢ˆär3­òeÉ͛ 9UA¢Ê‘zö€û¼/ÆLïúrË_
+¢ßC×Bý[c+íl—
+C×B¡À…XKÕ?¬²ÉÚßuÿp-4<dcæ½O«*]\\áŒmïýâ,=>¸SŸHp4´ƒñdòÜu¿ýhmpñÄz¦òît†GrÕ ’“4ô{Ó,¹ã>ï®ÜßÙhuÖ䔏(id‹RÈ"2’=d¦]«
+J¥€@ w ™@dáN&Ä[r
+ïôÑr™ºœ„ñ ü8ß\T€@‰ö×,܍ôNŠîSæh¬ŠÑ;/9â~¸f?oUo&°b\ÌŞ·ª«H ÃRe@B°—(‰›ìy«–¡ðb +Æ©G5ÖærçŸã»_ԓëq ÇÕûL~>¡À±âhaŽ›§ÿƒ5ÓÐü®O:
+Š"‚ÈDök#õù5¾®9ÓªœL¤ÖמggožKª†~Ɓ@ k–$ )Ú銗 5¼ZÇê“Ã]ûÀ¸»Ã0•Ö$«ë~K›OC>hLŽÃ0 ó¯P,WĦÝc³²ç®—ŽF«ÍÓ¾²ú «A>6ú(ÈR¿âèêêƒWÆØ/‡à¯ôó3ÂÈ/a'Ð{´²¢4ñÖïêŸ~m¤uàÂÄÍ ×ÉF{ý¢èdÖÑýÝÄžVϛ4'‚6vöVÿ ò>sm6%VUßÆV˜F¯MLü°>G´5äxê9Ô}W+\—Ca팧Vk:¦÷åÐD`XWäݹ=kj!°ã¿zt']7'.¼ßø®9!G7€ pîç[®'ˆ,’ñRuï½ÙUÒåu‰ÿn3fM™“ʁ%‹£·Ûn{'çÁ¼I²Ò Çq."H…,G[OOr °W}}ô³¶è®¡ÓAՑ„€oK‡>¢
+¾7”Zž*9IC>!ûyOåþÆ}ª$9™ä#–ƒtûÅ"‘Š"‚H d–k#qqÒú ,«oҒ©~ê²£|8#@ w+B#âþƒ¿ ª’íù¸Î«ªÐZþ4 @kŠümô(úÍ2Y–Mï¿\Þ÷í:Š$KeÉð ˑOh˜Ç†aT[TIË¿ô.ÿ4äÜ{Æq—ŒÊ݃Qi†Ù&f£‰µ1 ëýyÖ²‡ÓJ’%aSð‰­j
+`/vTj{²]s<¾®ì¬2…÷Ú?âÌ/èðue£³UÔ|=Çaë”goÎ3E­xÉ#]ŸŽš÷©q~Š'6q%•eŽ_šä” 7Ñïwõ´†o²Œ˜oЛþ@H'[ÞeErb¼+«½õk„(؎’Ê©Žô¿Hß6­ûi‘â\ d¨Â@…cM¡YËâeXiÕËT.p֒J{DHžH’œª!I’Ò.(RؾòsÇTöuqÞ ò—
+ç(Q6çh ‹‚Âßæ¯í<¨9h˜r@Pj™–Ú"
+ÄñÔâTÉY4lÿÊo®&ዠ΍;´'½¯&Ä½É ©D"˱™ê@Š{2"Ù¯». -þ@ ˆ»ˆôPnŨ• T²K±$ò·Ô#ýÊS r…\S£ƒyðwÕª‚¢ª(zMÈӘ­™Rðü–ÉÃ?y îYœ‰}X•ö õ«³šaÊYò‘'KC\¦7/è Þmyí¢½Ï ¡_#TljAð¤©Ìÿ9Î?O;Î{€½ä¨Ü­ª™Téªã¥ª¥IÎL—×åÜX{àîÚ&jÔÿtEsCOû˜5Q‰‘7û
+ IêËe¾É¼Ó<¦CœôÉÊëSË “Lî³÷?£hѐ®‡Lò+2Ó#@ ˆû:¨GiÇ'.–½Ë 4…)×ê+1 sMe´$_rW^
+8†aIÙ¥^R!õôÖ)Üö©isLæu·a—
+E¾ÚíJeå{vûÏeS§†ßj²6í,Û¨Ô·{Úÿ>šäJøɊ–Ê2Ã7|ÉŒ¿íå¶|T/ºÚ—ç®-¿{¤òáÊÄÏPôqƒ«|¡Q-v4Õ>òpemC «0N\öVÈòh›z&dñ <Æ:jì̲œ Ø3cT1µ¼`É&§¯zÞ»óO O· ò—
+š²M J!‹ÈHÁ)d³f!µ>J!‹@ (ŒE ú„ÛBß{vÍSZšQû‚¬÷¼Ëòœ‘Ú|×ÒÌ.u¨¼$,Ç-M¯[ӆˆ‚%äÖËYyi̱DI¥Î;!¥7=sG†ýE¶uT“-ӔøÓÈð"šõq•l—ÐÉczðÓûáƒCEíü7€Û~µrÔµ[ÿ»ž’Ëßx:ÿÜÉï±±çMI‡%õôÒ)€c/<°2Ìñš²²p]×¹×MøL°£Áà{´ŸýؾC”aªÃõ—˜‘EVJ«%²”óßXT¡¹ÏM+r¾ïE°;ž60én°ªÜo¬i3Ê"ýʒñš”æ83ØèÀ?è`™zûùðWMe»ƒÞ·Ò:"îg/ÛK0nÀµßÝ2‘ÉÏõåKÎ.©ÜùgÁZFJ!‹¼éwëIkæE>@ Ċ‘l£?³Ñs2š"ê –3öúýýÆzr f÷%UÎM1e{Rá9:$œÃ»^Zpؖo'ÍC.¦,›**(ª*öQWëmŸ¶†¯Ä⸸ßÛütk«Õ­Ò²\ðµÿ£ÙËç§UAïmùš¶2¿ôÌÈ.8:TI=ªí÷´ŽŸo‰Ö
+Ž„©}՚jMô£^07d*'ž°R_·ä«ùýÈ]Ir†ÈŸTŸzd£¿s/|²pÅ~P×ì rÑÀ5ƒô³ÝY î%pÒÜZî±j;nØ=ŠÖ´6ôeJÎ)±" 3=âÎÑör›Ùé@ w”¾ˆ*ZΨƒA€P(àQÚòŽ»‘~ñ¨û”Yµ™À0ŒbôÎKÉb…a˜ý¼U½™ÀŠqý1{Þª®"1 #H•e V”„ë„)*“|Tkÿ¿ÉøŽ9¾ûE=IàX1®Þgòó±³ÿƒ5n~×·¨òzã•cZ9Ç\ŠP½ê‡… 0ÑÀ/ì'Ý*NJqõ^s ºRÇàÀC±Hñˆ1kiÐ8†á„¦Á"½ÈG…럠0 #6«:cs™âöèÞ®_‰7ööÉ6Ž¦ö_-¢Œ±>Jڞ©ëʚm¯HK ´|6Þñ~SâN‚î] 1¥ÙO9,£S¼gQì]ˆQÊôöõ“ ¶3q^”B {Ã"YM‚Àó‹CÙd*€î½
+Ë{9®Ä
+€™œ‡¦ÍÉïTE,ØÍl,I´þ”l<X³N†NUGbçß`°‹…â¦üÍìc^pD7=a1x¬+)+û-F=aðÞ²—}D|/¾àXƒ$Zꑍ~[Þv±SB$á9ÖyÊBd÷¾/‚vF2 ^Ÿ»ù
+
+yÐÀ)£@WXۚ¿1åq¹"’ó‘(˜¸; {."e˜2˵!N‚…à29IdþÁ´º2îN‚çÙÉ¡JUs’i¥R@ @ädQä_\ÿöÚ/y©½:™‚ ÿ`?Ԕ“Ìã Ã0ª-ª¤z—’¢«s—ŒÊ݃Qi†Ù&fÍ$ýÞûó¬e3yĚ×8ñqÈõԂ̋F¥v0‰À¯+Ä"ÏÌqØ:åٛ³ÆR/y¤ëÓQó>5ÀOñÄ"Zù¬‡÷Ú?â̇†5]¾åX0»GcµëÀS²ñ€´]àœ%ʃ¿FÈâEÁÜcßåal2^9:¼_¨Ü¸e¥‰|3ŠïEUí—õÛ-pöeËèÌ1¼+«íý.d,—€þa¥øÂhà”Òz)ÎB†*<ÚêÖ¯‘L¦( Ãú!<>ã"†=ñ÷ˆÂ:PáXSh֒¸´ŽwüÍbé`žïu¿oÁ`ŽÓì6h^èîzN a¶ïÏڞ‹jse,³–TÚ#Âýs)'w>qê«+Tÿ=ä;DIÅ*¼$ äåf¥íw¼z=xë¨ÚŒCŠ3ÙýôƚÝ&€(˜Äkx`±³ ØôQ¤Q+
+îe?Ò(Hz Mn Ér25
+°7,ê¶Ê¥MùÖE®gŠ¢øw*/~z.†ÅúÇdn‹Éf|"À#’/ø:%ŒÍઐ÷lpÀ¢"Iuaðë°T9ž+•ÐšÇ\¼uéU‘*ã¤2… fü‹*o0$V®.Ïû8€y½Uïñ݆`¯]¾µWr™ô¿c€¶í•J¥R©TŽÍ@ðt‹ÔêÜÍÙ¸›ånõ!jÕò"pL&kn¨V›>ÙCåå
+ZξJÜg× QèW–ß Û."Ù¯Ä_T4^M$IðGX.ÚólTf¦N@ ˆ¼(¹B®­Ög„+~‚ *(ªŠ¢·Ñ„<S
+ô44^Ìa§nÑY|A–½êkùc‹âÉ^jÁð>9³Øy¸˜ê}RѼßâ¿Îq×ý–úÅï{©ìñŽÖzҚig{'3Ö®÷ÌÈlˆµ…VOXlo‹GÏÇIS}¹Ìq<ƒ0!m€ñcñu›ªÎâ¾äg¯܃ÖZM§bO—™Ì1‘°œNëËe¾ÉØYâþÝ<"*º÷’¾Ÿô\Nö´7N8Ùôu4Ô*~ß«Â3–G'}²òúìšßǬ)OA‚qp7¸¿?ÏúÞg¿ é‚}lúu)D¼àøÐA=J;>q±ìý7)ž¥<ìy=VLòs‹
+ýÇT8¡—6ùoL†UÝIb±žÐԙ 9i…)Ÿ¥QKnÀ1 #HÊxÌ.õ’ªRjFôÂ:…Û>5mŽÉ¼î6ìRáŶžÐ7uK½³šDíÌ^n¦U>”k÷A™é@ ÄŠM
+G?>Öe/ïþ@gXŠæ÷èn™”B‘‘ìébÊ0eô‹ôӒ¦W¯dø«az׊ÅÕA @ܯdLÐ'yíev÷:X¦Þ@ÇâáðWMe»ƒÞ·¢
+®:y¦{EdBàìeÛ}Ñ`A+‹q®ýî–)×R€û˜;œ605…l²‘´ÐKچ÷S
+YÈûépÖ‹®ÉÛBßi»¦FK3j€ ²ÁOœÖgTÕ=oýHÌXžç.²e¦ƒ[pBç%ÊæÏnÍê @`ñßVšý^RöƾêLb…Ý%•=‘9\uT‹há>7K{ù`w™ªó­ˆ–H×6é‡\P§À{ñÊn÷€Àv”TöMü*D'ª¶»äa{dŽGáxiX’)‘©4Þ´÷cšU”BVBJ![”³*‘ɂ/=¶ï@ @ ‘†¥7ºeäåŠý`»‡ôØ44ɽ-ûégÝ+­ b­ƒ“æÖò;+˜39N„pÃîQ´:`=†a­/µÞm-Ö"QO¸;éw/–À}gèûp€¨¢åŒ:À@¡€GiË;v[[+¹9͔³û”¹íÍÁà/áŠÇtÝo×ÜÝ=Q†Ù†zG{Æ&Eݑ³¶]¬áxßØO“rmê9gmR%Ù£7ÙóVÓ_í#ߏ‹ «ØʘO8-û2Nd‘ƒaØYÿ9{}søÙ êLM$toׇÕéFìí“m:³Ñ°ÿjeŒõQÒ÷LEmWÎìW^$ˆFZ>ï5%î$èŽÐ5£¼4cëD
+êïY{<ëK™Þ¾~i1™8/JÕ¼a‘¬&Aàùy‚X—”©º÷*,ïü¯¦±à#î?PЁ@ ˆ£>9ܵŒ»+1 SiM²º®á·´ù4äƒÆäص øïxlY\FÖ쩹ӽÞ_´{lÖCöÜõ–Â@£Õæi_Y™ˆì$E^Ë}%1¥¼Ç¨$mÉ=MâuR¿Wç¿ô\g}ÁۂÈñܕþŸí6ZV”&ÞZà]ýÓ¯´\˜¸9á:Ùh¯_ Ì: º¿›øÁÓêyó€æDÐæñÏÎÞêAÞg®Í¦ÀªêÛØ
+jÊIy©Œ s©iTÚÚ½ži äSFאG¹{PÚky¿•$pò©n€žÖ!›f3º#­Ðu²€+†ý£ÄVuôšW?Á€XxîôêÝæ'RF¿8e9ž6å n{–®=î€gºÎî ‹£Ï,xñóޞq±÷¿IŽã ÈȔ¶õü-h<óÐoVU.S¤8ÐI[âà™ÏõB:y|
+D {*UÍËìtpRlªXœÔ}ŽwüÍbé`žï~[ 0ÇяWkžëýB a¶ïÏZýï
+œ+c9È+jÄi;@ît,ˆ{—ø»$2Å"2âÐ!ˆåS†)g'n宗G 6q^Ì^!­¿I2ó–&y)“S“<”¹Ç48/ʊd0Ký^ò¢·ñ)R^*τÉ*Zˆ®c¼¿[÷ÈL@ÜE2ƦG w›;ü|”bþBÞ±ésÔÎÒ°à,讕'÷™"ñš„9à~á<—¼ÎoÇð­4ÿµO£ è
+šª¢˜ÇbCòÏÇ°þ›³RflaÊY²ñ`d!àŒtÝ&~—.Ô,Áj¸KNËIGpZ”ÉÈÍøÐGž,k²½IüíäóSŠÆ£þODöšªöó&>³æûÿªÞñÚØ¢ª¥Õ‘Û¾4boóŽ×v¶|H S.(.iÍZOˆªÕò¿¸{Éì±é í4y¯píß} ¸©Þö¶ÕÀdøi ,VRyá?íúlå÷k¦™h4ô®Eºÿ?@±é‘GgÚ¸ï"»!ˆµN®Ìswíø3!MR¹5Á ý.ß²"YxF Ï@˜e1 >ˆóø@ ÄZ §y ß`Hªªa‹
+Ý ?HD>,ºÞŠA®k«5"€ëß>‚ *(ªŠ¢·Ñ„<ÍkS
+žҙ>üS᫦Äé‘Ø7UiZ¿
+âA  S@@–aÊè'º¹%©3£Äýÿ: 灛³Ó¢ÿ{Ö÷=ëÿ>èûžMúŽ£Ä„Ÿâ­§ì,ËÞmEÄ݄ã8^ÈVAý*¡ÍégÂó“Óá•S*÷q=^Œé/q”kɃ
+í>jPm&0 à RSgr_0†a8‘yÜþ(a˜k*ëyY!á©¥#ÿ Ã0¢ª;·>÷>8ŽS›(]µÆ¼WËlcè*šÙƐådڜç¶Wjuzç—~nŠ\tê—`OÇe˜?ð sÀ½ÍûcaU`žσ(
+óÁA¸Î^2)ùëa÷޶ъþ\"zâÙNGÞ
+;u‰“<w%4ú~gçûãé–ùsvíï5ÜWI)dôˆ—åxdù™üꖫLíÛôE,ÓçúÓ[¶zjTåâÎX$Ë{ÿKuz½7üžAÚÊ}cÖî7ÆþÙYô‡¼(Ƌÿ*–ü:[h:`P+޾ܫMï–û @‘÷;™Àž?ýihÄÃêšÍšÄχ¿h­~*烋í#Rç®Þ®-~yËZÒxᆵØT€{Ô¦O'yN¨ˆ£t"‡£ÇãATêûàBˆ ȝԟI^\‚¸ñS )dä^ ðÏXà{Ñô¨26#Š"/&F†‰âü8¦Ôzõä®A¸) ~”ˆÑs
+OˆÕڎo-®[Ûù¨-
+ÔöÃéAU-ÃÌG™zÆõyבº^;èüV#ÌÇèù «þ9?@öaê 'ó-Yª'2µ†€]U›¾ž<±1U<lmüíøñÐys®Rö<ŸLu]îÉÚì ŒY¯§Êô¿·1:ང”‡ÿ@Àð–Ëÿ\gQǖÔxöϝ¢Bç|Œî®m섽žÒëÞÛäÎ§øÎÝÖã§ý.ƒ†æ"ÎçF4Ïû–Ü1¤$mëªq¸YÁÆ,f<]¸êö«º†ï»=’E2V³rEo–Tè-E%©Ýf \Mm-0S²ì|Å"Y¦hƼ·Ÿ-qŽäm¸”K2FŸü‹ê7‚,œ™XñE‹.âL¬ð¢3ÅìÜ1OŠ.E=™‹.E=)əÅøÝcžÌĤ=–¼>rŽÓ¨@àgDA$E)N?'(`.gAe%ýåôàÇG¨zR§DÆ@¥‚Ç4ö÷ÝÜUùK¾wlÒ­5£k>ãI>/á>éÔ¯§ˆJ²i¿—=éÔ×ÓAP´Ö~$\Ø%‚ †'¼†Ò¾ö¤Ó¨cÈJ‚¨$™Ç Î/æ%8fùþ—›è5$A’úÖŸ¿P`í-FŠ$’2´ØY GÑ%ýc–²6‹ ÑÈz2ìAyhz{JBÄ­£˜_F[’MŠ$*%›)ët‡ó<¸ _N9>lO/¢4ŽÉ˓ºÕ…Ž#åó|@е»v¢o°Ð®
+€DÂðvÕö”„¥ópW¹ÉÐPn¥þí*ûE¾+
+PxA¬®SÆøBvî”'ŗ
+¨®«òz2']ŠzR’3‹ñºÇ<©iÏD£¥­s3ø'¯_§Eç✠~² >ÛŸµeü)Žƒ‘z¹‹hÞn
+ñ‘þjmï©q#¾V¦íJ–eÁ¡S×g?mZ"—ˆLe·Ü}éç´B¾-r_’~Lœú~Ž'gVÊ
+»áy‚bµ=᪒)J‘\U}þV<!R?Ë«ÔǺeYKföXøQÝxãç8•G,‚ ˆ¡ð¤I™z#ÆüuڎDñ¢ºñЅIKš6¨Å—·ßуl¦Ê
+¿nv¾ãŒg…ÆÚëêÚÁÔmÐJÞnûô”çQe†¿2õ¼Óc¨¡òÕcþºMÓ?LJ}+ÄN?¢ï”z2EE‘×éÿ |ÜgF$;âœPú_ûgQãFJˆÎÄb"ˆ"/Î)`6»O¤"õ»O¤‰ÞȌÏEäNBD궶 kb7üÉ(¹QÃ4¨hM­†^KÓ5t®p &mT&?*7šF’UiPL™¿uSm²IÏDì-öÈuQQ¡ ç‡Ç
+ʝ¬HýsCïÛ {S]jäGðN" ˜I¼É{ÞØÒfh3_ó@D¦Ä‡é
+Ä©Òv]ÑõZ×âڜ8“mmܚøÎŒ³V“A%†<n6Øî}Y›o7rèÙڎ–ž gúObüÝì¸0¹Þ®›ëv²ìÀ?bcÿYb–ŽÅ1®Q@`JLÓǾ÷Ãj´ÞûnDÓ}>|P/}”Þô_õ‰ÿ}‘h±½øNr¿ƒ1ú\VP˜>Kè ˆ?Ü0¯%…k‰ÂÀAsÓ9_ø|¡Id2Zl1€
+ŠV¥öŠ]rs
+€ÎÓcVԘŒT¡ù˜7'2-' km0׸ Æ5KàRZšÇÂ1z ŒÔ#Èý
+z˜ã#ãþÞWlë=ÂU§?&ïN)J‘´µ¹¦Ós à8YHcàÞC“‚ÈòæߐX\¡·m]¢hÃf«=:‘Ü$΂<…Ÿç ÜÞ¶KPZŒ^uêäÞeOø–“a C¹'Bù¢“m¥Owo>vܲUKÕPš­æãGæüÍñö?G½ïÙ5µ4]«uöŠ?úG¯'ÆD÷¦@A_²Â\´D5“§9ˆP>Üe˜Ï#ç8Ö£˜f6œ#=± psEaŽ·ÿ9ê<Ö£˜¦×iG\]Ï+aŽëý6æ<Ò£¯¥éZ½ãHÂx)G±=€,
+Nž·jDG{ã#ê[:Y•eúl wjŠ®×ýkD÷¦¥ øá­à—&ÿ»›µuè·Øß÷7ÿéTàu=ŒÿÖ­Pµ[2…wú^ÓLý¹³¤ù’‚ ÷ É'Ç”B¶0_©ú~­r· ُjPVÀà/}"™~)™Æ­é¡ô½Nüt+™gƒ=çk’Bÿóó1³LšôÖ¯¸,ËI„ÝP¡j(ðªõv\€rbô©G¤,Ä9AZNÇĆÚÔG¨m¶ò±q`ˆ:õCuê‡êÔu[ 4ÿäk¨™Ÿž?—a-wÉj·ë%fâ~èÿˆ5¼™z<6®N¥ &b|ar‘öOÚ:Ëó&>6‘4
+ âu?è”%9„Rê 8FI¿>p¼ìïµ@`$1Íê¼Fæ5U¥÷@>#B,(zS¾‘ÂB7ü ÙöQØü FˆÍw=Æ͐1Q2Åmò­#r÷A’$¹Ž¤¥<ybôñÀŽþð·ô‘¿heB49ý†9}=+Ž&KÖÆö@*e½:&çH {и|¡Ö}2èÎi¨éuOÓë)Ëñ¸UÖY›ÅŸ
+ú_6š¿)Im°ð|̄åmÖᯂá+lð¯u=8¥óýO ¶ÛqIBŠ¹—òeÀ=‚Ü»ÜÉ~²­ô‡U羆Ñ=m£gÂüu>ò­¿ãåùåtߓJó^gdŠã£¬§gWSëà‚G-r3óáQ¥±]¥hkw×þg?•öVÚÑ>úžã¾9ö8”÷Ðå;PA÷=©ì”ìüîß맠‚î{\ioMqÜT¨¿Ýž0^Š·e: ¨P€ã³8Ü÷Áîö%PcXÁ¸¿áͱ£…†G6&Žÿ+ø>™¢1^c00«€9€Y±ð:Þb!È]JåüR€ïÜm¦Ž`„tcF4Ï”˜@V$mëªñ»eâüWÝ~U—µ˜ü‚”±yݼ«#‚ ¹$ŸQô&ƒÅz“¡ð|LRœ<oÓÄ–[í1íüd x:—ÛqižR"õ£G•†ó ³Øãgq’2#ÌKC®}:g×®Gô›-ðZ>´%·ZùLæßlyÄÐ4r…9þµLúÖRDoÚWõ6wü3ñºÕúš&6%ZŸ1¿~h't47nþMÛDÉ{¬Uªk9â5VŒv ýˆ,Ǽ­ªH›iËæ§vÃЧíâœ`9v¼¹&²Ë¸e³±m¢¦Ù7b-l¤Uòö;.ׁ!Á$~«õÇ»›ý}muuuM¯xLï¥zòn–š¹{Œäº MñæØHLÔ¬SF~ŒE¦b¡ï¹ÈB”ãDAAA‚s‚sÅÖYVnçU™þàXß°<UG„ÖhUììû“±xµû%¼uÅ Çïrî‘ÁŸâH«Óåï¹3þÜ+àkì|”Þ3”f8žýšÛucIß>øýAä>fE]) ‹ï´"IÏ,_@§côr¯SM¨“¿nᚷêÁ]Y?öÜB‚ Nüt«¨H¥lEétAÍ]M(·FNzÙÇL¦‡Öø9iŽL‡ó¤¶[ ¸/¬[zÈÉ ‰˜»ó×mêœþaréZDîQ"?
+ƒßÄø9 ¢ *ؘD> ŠP!ýMÊڔö÷/]¯uµ¿ØN?V à ‚ KEúUA–þJ˜ª/ ˜
+á+¼¶¯×GYð¬U
+ɧ Aû†äù¿"§Gi‘N>zŒÑ#È}@Ñûþ\AÕÉÑmì‚ä“‚ šÿ+•¾N§ë³4ÿšé|Ş]y1¡LOCzÍÿÕ¼Ä-"÷*
+H¼ÏWPY`uÙ½ñ¸}?~ÙAîg
+sÀÏð¢(ò1Þ}ؽÜ!‚ ÷!Yɖ„›‚ûýAãVƒ~£†QÀð!§¥ÛNã˜z€®î.Íê²óЫRIæf¡t¢鶞4{vfÿ³ôݧ&_@ˆùùeçäåDŠxEmbŒ¶ëì%“2ͱ
+´m?±Ù‰a(š¡„k*`ê³ÿ•ªZ†Y+óþÀ÷AU×ô™þĶzF¿Í õTg˨ùŒ¥pݬML=ãú¼ëH]/€€t~«t‰÷ü„Uÿœ ;HŸ¯œzÂÉ|Kx«1W &Óra%¤}ûÿ;ïn×· ‚ ÈróÀʑ#¸Ÿ–8iÁ’ñiÍօ?™Tj
+h
+èjB--ÒÇ¥(‘´ò¹M¤iÑY—¢$ù
+ÈÔýE Æ]µ:úá:Bÿèäc<;Ŧϝ/‰r÷Os5wb~rúüR´¸<ÜAo ”&ÈÃʹÅB»Ÿ#ïj”
+Søל;­AS!ºß°sWåÓtùÞ±I§F×4|Ɠ¼Lá>éÔ¯§ˆJ²i¿—=éÔ×ÓAP´Ö~$,k*Å,ßÿr½†$HR¿ÃâÓ
+)’¨”
+Z÷„¢ç°ïÒåɱQ—n.ð¬¶ÎË¥0oÝÌMç¿>®™ÙbLz<-fãHò#w%ä~¥QVš ·¼ÿ˜ÉÜâY@!rgH¿4ílŽ|7Á~3
+ìí9¼uëÆЋÊkÂgrµþÐۇ
+ô3ï¨_ýÔHr«ýÃ.š"égúºF]†õ$˜öuAß®BNÌòÿ;uü'§a- @;G‡™O8©ðü­~- tÿ§ÁUêákC–|b&¤j,tžÚ¨gHý:ýɍÎÏ%ãŒëkW•º›µ+ó”Ó¹Zs²îl.Ç×ù×艤…χ?¸‹›µIm™>u4TvG‘Œý€=¯Áôã^kû“é‘=FÛ²ºR*ÀPxÒ¤LEÞJ€¹Œ}v@]7ü˜Œ Ë×€m]†‰
+”µÛÄën€ìó¹–³<¤Òþ§ÝVëo“Ü~mÓSvþbƝO>û‚ ‚,;”2ÍAd¹“ã pÌ‚Ü£dÿx+ uwëáÃ1Çyë‹VE…BI)ó½5–ÕȚk/¯!‡äÄ|ï[VÉ2ý˜Ñý×há£Ho1¸WKéRCêúë)ýB…TÊT3?œrdäû'ÇÙºYúéQš ×Xaé¼ÅB»ˆ
+Õú»ñzâZ ª€è\á
+ÿ3ܓ”2´dUX(i ¼“¡Œxýìdÿw
+J È=I’Ì:ž1)h•xS¤iZ÷¨.WîFÂõ»m›MM¦Ñ!ã/þŸþŽÖüJ/exÀ¸žVu<g÷~è`¼û厑¨Í]ɸžV-Vð£l³F ×|yÌñ±9EA˜…Ø÷ÁÁàgA:všìÌ1;=ÇõïéT=yˆ!A˜‘//Õ½<ÍIú*ÑÒ/g•Ì¡'UÏٙc¸þöNÕ¯1rݛB`ï{K¼¸IO¹›ù¿½%îbÙXÆѪêÀ<â|hsÝVÎyÀ¦ÛH‹×YÿÑþÁs*€HѺ2¤¥7h®Q£¢^øË 1TÔ4ç–/Ì2½Ã=´ÛßiØÕ<í“þkùì#‚ ²ì<€‘PdÁ䎃ˆÿOÆèó%â˅ØõÏXNÇD÷«fïñ${ë§EÛBäž@æÇ[ ¢(Šsb_/t¾Ú)›»O¢°æ€DžIúE8›‘fùQËèÙ§ €îCã{Ödy®ª@¹jy$.#P؁ۗ ÈÇ
+ùbôñÀŽþð„‚Ñ
+ÔîpQiQžN“=aًÁÎßÌ«
+Ì«„®pÜÕ°{ï–-¦ÞB1rÙٗ]á¸+!{s 2IoËt€T0`;f‹:žó¦¶ ¬ó`‰a%iW9ÒW2é‚`ñi~t×mµ  _aCãþ—æoT¥Ô•!Gš ô#Ê¥䞤r~)Àwî6SG0ÂH'ÃÍóeLBV,$mëªñ»úH#\uûU]V9e›Û´\Ô>‚ ‚ ËΨ%‚,˜EœÎo9¶0”{"”oˆ'J È=Šü·¾üüKj5¥¢UÊ%)—Ë
+j¤Ïµ—Õ(Œþ÷Á¡×tΗÕjµùÀ¨íóâÑç¬Ùý¶7u±ïEÛ`FÚUYUòÔ òN¹2YýS–œÂ—íþW«V†=ƒ­#©ÎDi‚\
+Kà-‚Ü»èŽõíËSuAhVÅξ±?ɳ-ÁG,DB7Km}FH½íém¥—#KGßåÜ#3§¡Ž´:]þž¥°\Š}AA–…ä“#%æEV дA(HI=H)d³âq²…¥ [UJÅbâL¤PŽSdQI?Q¤˜vŠå¢­¢™Z&ߐÆЈ‡Õ5›5”ô‘¿h­~*çƒKæl°Ÿ5i÷*$‘¸Ó²Œœ»zSPR(Z–µ¤ñ|à ‚èz­«ýÅvú1jÁM ²`ª 5ž–‘e¿¦êµ ¨¾Âkë ]2l¹Dûw¼>"‚ H:É»V½A
+#Y*©e4j
+Éý•SýçÐXpLZN}j*\ÞÌd.ÇsAYá$ŸQôYL8ŽS(i*ÿ­¾þuŠ³ÂóÑë±Eõ A2œ  6ýò‚š‚ ÈRCD*‹ÒMað#·á£F§ç†³ý¨Çù¼…©¿‡¯D΃Îâ;-±…G%ãzRÕùÊ(LÌBç<þ˜øåkó÷–Ûù¨-
+ÔöÃÁ½©9[ªZ†Y›xRbê×ç]GêzìàÝcæ~åâŽ%l2­á ±ZÛà­ÆRæn-¨Qàßjƒã3Šiƒ®zÈßUµ¡À ‘ñóZƒ¡!{òY¾rê 'ó-YÀsI›¾„£BA•ŠÞ …(w$ Z­núŒ-°).Qh××i;ÊjAîՄšZZª µ´`Iá’jBÛ“‹£9° ‰ê·UqY¸SÞâ~œÂ ÷7ƒ¡ê5J>•
+ñy›#Iv=Tm>ÇgXX{‹‘" ‚¤ -vVH51<ámz‚!‚Z¯uŒºÕÏ×hҎ¡´¯‡òuoÖU ýcIÝ.uE•R'!«BÇz&aÐv8˜ë@:¦÷šcߥº(rhP±noÓüH%öϝ¢Bç|Œví®è,ÔY
+·Ñ(„?°«¶;å«u‡‡èÊÄ'qN„
+Dn
+"Çsߍó_øjó±Èt‡›ž}c¼ëȩ韦½[ÝÍé.GD߅éKþ.ÿ»» oE\þЭ[7†^RÚ 9!°Úæn¶Özþòôôaç Tw‹1¹Ñø7O†|ºGÓNhùʳnÑ^¬õžœgüFg¾æA€?Üð>‘1ÔÙm2x®j|¦§/øtW=†ß¸“›öŒö ÞºucèEå€Õ(xŒ̓–ãÇ_ÒîÞ|íöá½çšÎwvr:<fªlٔ÷“{ý „7ÿŸÓAïôOÓ§>l=lÛ"½!Wë½}(×JçÔ­­_&Þ@ôeuo¦Á³? yÁº7mbôÈpÚu<v=ÊÍÃ^ ö¶jžwðãÑ9h_Ÿ=%™©g¨ù¸ù®«Òß"W=¸+}υ4
+0úQD»/1 €\k¶ï·HëµPÇou/%®zþ˜ÙßHTUWÿÁ<a\
+—€fŸ6òÁhn×!‚ ’KòɑˆÇã<Üó²ŒÈQM¨oħ l½c1‚
+@vs´µµFÑùQ¸÷(k|ǒ,ï}7¢é>ŸrbzfÆû¯È™[Cµþ®G¼.]VH×ÓªÁvwúv>Ò?úí„þJ™º™,´QPU@t.Ù |ã¦]ðÂqîÌ°Y—š‰"°ÃýÓ5ß©b¾òsQ¨PõAAH{rÄÑôȹŸ–8iYºÍÖە¼G$3‹ð°í;ÐDVMg¸|c“ !°ý¯˜¥Aâ$EvZ}óR¡×µ„MCÄ $ä\X‹•³’Ôn³¤‡&‹´(°ÎW,’eŠfÌ{ûÙüi6µ*Æô„>ð±‡ò×£ÜwÁÈQ^I)W+¸—›.µ»'Ðê÷YŸÑÓkiý3ï¨Üh»Y¾ã§†>w44Í蝣Ãý/Ñ2»å@ÒÖæèü á÷íʍ}I1ççNƒ†a3º¾vE¿íæf­øFúõõ4]¯ïÿ4(þ82\@5^Ö«Y®ó¯Ñ¡Ï†zš®78?Šþ½“›?jÓ§.ƒ†&IÊ´¯KfZAŠÔÍ>rÆ~@V˜t=¯?àsûc¢k÷ü‰— L‰íÿMs«°èVÃÀ#ÉjÚÄð=µZ]·iËàß¡¯7õŸ ~?‡Â“ÓiL†‡RÛÚèHTÜV›Ԙå=°ªÕ›ùgúÆÞ3ÌršÇL/8oý¿õÓ¤µ>Ôô˶Bå ¬Ý&^/OžAe$ëêL’$³Ž15lۍºGušzîQìPzpýnۈ©iø›wŸ67ûÁ¡9>6¢(³ÀE‚½íH^R;Mö`„e/;Ó©zòP2¼œ¯<’q=­êxÎŒphé9­,Ü\tFÌ°PÉzRÕñœ=t…㮄ì͝ª_bò°,ø“äë^RÁ€íXP˜.èxÎ[FӕŒëi•Ñâ]ḫa÷Þ-[L½Eƒô‰~˜w™¶¸¿
+ñ×8îjšN‹À:æ}÷ßÓ«›èiòÏ(\¿NÜxWþ˜ØÓ­IîCÒÖæ…ç@ž;Ï´1
+*jšóùŒ¯±AD Ó#…À[(I’õsØõ®¿+8íÛZRD8mÚ uO(zû.]žuéæÏj뼜úîSRVÌKg]L’9´‘XhB΂-J$r^
+úLŠ@Ó/çGjnQ봃=ú.]¾ä;Ò¯Œ¸µŒÉ1hÙçEÕH¸ ?Ó¿$zöi‚† ûPÄøž5Yž«0Px*}‰^ݎ¤ÀmÍå/œÂSøä>‡Õ:•áN§{TGÕP²1zп8ÑÛ0ÐÞ¨~°ºéÀˆmÔpÛgÚ5úSo·;[6W­" ­Í+¾mëê‡ÌÒFߋ`1hëôëZOR/Só•gaó-ë#MzµzÃf…éÔßšÛûdmgݼ¢Ú<öÀ©VÕDã&µzSãm ~]RZײŽ1IÞî]£ÿr ÝÿjcÕ*°g°uÄ!ÓD~lþ ¹"ظI­®ÛìŽh|¡…÷OõɌý©ÝÙ¾¥úAuS¿çÎKáfa&ÔýÛî|Õµ/º@œR=éJJ«ÿÖ­Pµ[23Êô½¦™ús§ì‹}R‘Š­e8yl[e¨ô¥nÃ#m]n͋‡Â_ïÛiÔ²“™8šx-ÁŒ€8µÅ°%} Œ“~ÿ™£î!uÝ/Íkm!é{˜¯Ø£ÌÎRïÇA‘À²H!
+ÓÖŒ:•bnܪ6ÉIûÆUuÉL§ﳿqÚý^Þ±oé+ð¾ªê]cáž-zύ³Te¢Û¥Œs \®z°mòVœ©`‰Uu“?Çç‡
+Æ=ĝì^¤ç®Þ”ô”ËZÒxá†5ÏT‚ º^ëÂë#‚ ‚H`
+YAV.Æ­EÄ»‹B­Iäöl:“° ¶’k´^Y1Ðy:>™êú´'ë©Åó½g(Öìr–ß" â\Ñ…ŽÏr-“=ŸvMÌ«Û¾ˆš‰‰ê²3ý ’œéORM{UÐôÜ@í•æ€ŒÂ@¹Sée½Z¤@ÂÛ2(¤€Sø—f
+?‚ wyܕóK¾s·™:‚@:‹Žhžï_|W,ؽw$mëªñ»ÙbJüe"\uûU]ùbôP෉ ‚ + Ó#…À¡ô’$ý‰‚¿™Èí™.z8hnì‰øÂçÍõùC7Ñ9°­Kî H90c­*6›¾„„œ n1•óJ¨ÿÿ5&#U¬Å›™–µ6˜‹J:!òa‹¡9>a_f¦~²fúÛÞÔžmƒondʝJ/ëU¹’Y‡Y†ùup
+?NáG¤úƒc};ÀòTAZ£U±³oìO%½ãç#Ù3A„òän!ô¶§·•^¾ì,à³Xp÷"‹NßåÜã.¾_9iuºü=‹kAAV̇b« u²4XIÊ
+c –`ɽX8¥4
+èˆ}%g!Id‰Þœè5íêó÷„oôk
+v5 ªoü—ë먪HṅɝêžY·TJh1KA¾öq“kôDÓz²H‹ù¶ÎòĪêÂ:<w‹æûY“v¯B¸–l~+ ¬–k
+†¯ðÚú">…CA$I©ÆŒ0ý­éeب(¾KqN,}gEE9 šæÊØ÷®ðùžsî
+Ÿï9‡¡¨Ïs ΉŠ
+ÅÖ«^´>C+W+c31º^#̉P¡€9 + }ݹÂ›à\¦M_8L¯|¼½KéŒZø‹yåD@ *«láý™O/’îv‘0=TeUÏä-{æðvsƒ^ù{Ÿg{¾`Dñs•¾KkQ)o™í¯Úà¾5˕ËÌOè€~ËgÌ)¿Ë ¡¹H ÓÔÙî ^¤w³<å:õ›¹7Ï÷&žN1LàÐP´ÚÆÜþw0…pÕ­6qüÅ2d0L ËK^mzA–¼>"‚ H:ɻ֌%I/Õer1”ï÷œÏ÷œÃpú¼è“ ]W®E…"6#Æf ƉŠDÄ9H_G‚
+<íO=”ò<¸Ùüa»÷å#’È¡gk;Zz&œéÿÙñwKpt=­²·»í™ 9G¿pý¢€ûÒµ(oy e°vçq©¤p§Ep¬Ol³<U7u]TªjMÏ÷½]<FÏG,ÕÚÙMçÿׯI¬ Qú¡nͯ÷Ž½”ú•¥0PbCȝ§ÇïÒîqÛÎÑ*‹#­N—?¼ˆAAA$IE<—Äp° ‚Ü+„®ð
+q¸ë±è ð×Y¨˜DŸ±ŽÓ½åh|ªqÑó.P••úÀ±ÖºÖÆànΐÿ¥§yÄ7øÐ溭œó€M·‘¯³þ£ýƒçT‘¢­X>õ<´E»3zh«V¥Ÿó÷ڊ'ä\º–·ñÎVÝÃtl*äy«sdJwþoMI ·/åd/Q2òn÷Ȼ݋(Û³÷YcœÜ%¢UX²à’ªº6 ˆÅü¶ØΰåÖºŸØ_Êû0Aîü5Þóñˆy§‰a˜åöAAAҞ%“az
+h(+Ç{9R!Â\¦ÉŠr†,/™¼ÉRù|Ï9 w…Ï÷œÃPÔç9€
+沂,wÝó—pÿWQ}­‚‹{‰$€ óW<ڈSJ³Hæá(7RŸ5w>Kô&¹©¿?^0IæÍ°£«wø¤꺨\§i~±ËÕkÕþÁ
+…Eo.hÕ1úÕxtF`ns½m/®V_°Åü¢7%´x3ÜÿÛ^ÏIÿTTTÔԚv[ûÞvhç’K“š‹9‡ ÷-=ïtqy<#Ȳ«M/ð‚û¨›yL?1²î¶0̝Íà;дë]¿10íÛJ¾øæÛZ¸Ö]Bq'gÓ2ÓÌÊRSödS]KèÆ-.ý.(´_»å(#ð>é#ÎZýË#ʇûø+©³¬”<°ZÙðëÖ¡cîä݋p-Øûªcø›ñhb2ŸÝõ¶Mj%÷ÐroØÖ(Ü ê9Š¸@¸âkkïöJÓî®ãÿÏ!µÎ1ÔYǓ6”óKr›Fk96ܕÓûP–AA’$ïZ3Ãô7ˊÓ#²<X>šàb"]£ŒDE.&F¯ó2ãè¥õÏva˜>)FÇ¥‡¥²"õ˜‰na„/¢N²¢ÁÓ/‚,Yná¦0øÛðŒQ£Ó#là¤×þ‚…YG/îd%Ñœî‚û{û›NmžPv¾HwáZw EÃôé;,üÅÃ,KUՙÓÃ[SÿÄ&Šäö…þ —>zèÎëŒøýøؿㆴ1®³—LÊD‹üõ°{oÛhEÎp3¤Wo†=Îÿnf”Šð9﫽üÓ.ö¤UÖÛÜ0ýBðl§#o…:
+’>€!‚ ˎpSü(£ç†³ý¨Çù¼…©¿sê7âèjédœ 眗gaµîO*דªÎWFaÂ&œÇ¿|-­íüGÔ
+ jûÇádºxPÕ2Ì|¨©g\Ÿw©ë°€w™û•‹;–°Éh´†'ÄjmG€·K¹£YP£À:¿Õ:
+œE„Xˆ<„n.zkËÓ"‚ ‚Üå¤ËŒ ~|„ª×(uú@`T*xLcßÍ]åd«ûÞ±i×SA0º¦á3ž¤5‚ Ü'úõQI6í÷²'úzš ŠÖڏš@F­!`×CÕMg8Ɏ÷š0Ë÷¿ÜD¯! ’ÔﰆøÄþ±ïFŒÑAP뵎6ÙzF-Š$*¥ZBr‡á ¯¡´¯‡
+8:æÐ3 ·m‡ƒR¡÷­Ô!»¿rK‡,\ó¦÷dÆÇ<>¤Û$ý`>ǧ¯0˜åCÓ{ͱïìì|³‘CƒŠu{›¨D(œýs§¨Ð9£]»k'ú
+f
+ÏgÞÝå+€þí*ûwݼFÙÿ&‚ ‚ ²Üb9"ÝâBÛ)jw©,/–Ïê‡ê†.¤&-BY>—åðÜÊíä£÷˜ÃPÔç
+ø>éÖ)üï6í²û[Ù¬Z°øÎÑÀ¹˜·lê®&îšmÇ4!¼ùÿ ô|:æ{šá¾õl~n‹íÅ8|Ô´«uøšŸd¸ïü-y«—àC!­„Œ>Ég\­?ôö¡\(S·ú°õK6°›€Þ£¬nЗÜêÙмp
+toÚÄ£ÝÃ×\–ùž]rs‰ÿ»xu¿2¨yÞÀGç }}¶Oú”‹]V蓅4
+0úQD;’ø‘kÍöý kµPÇou/%ÊéýÄ_' öñfÏÿgïícÛ(³Åÿ3+·òTíOž*E ªŒÕ¢Ú„Ý‚ˆ»EÔYÐÅYªm\"gùŠ8tuë”ÄAœ‹öÆÑ: …¸èn“¢ÛM‚Têôª¬ÍŠnÝ+zã ²qÑʎh•±Ú¨3ÚF™µäßãL{ü’—¾Ÿ,güÌóœç<ÏLì™3Ï9gxÀúY¢ ûŒñ†ax+¡=‚ ‚ ·!óbÓ³“e  d¦G›@r
+ðÙ|Ký Çäõ™£vŒüXÌF/Saœú¼²H% ™A¹UÌûá ðaÿ™0ó¬M­¥ùcÉO‡,U´i«Éd27ó²˜ÖQ¤æDBzΞqèž’¤Ñ;9㢳qÕü<ã~€„â¹ßsQˆÉ®ɕkäpç\Øÿ)ëÚë ¢-vÕg ò$綛ÉdƒÔ_g‰•ºË3Žu$AÍg¯ö?VòÂOˆ‘«6ws=g&¸+µŽª£HõÑDàéÙ!Ÿvè¬C™L&o\s¯s%t(«¤BlúâK %²ÇX{²^HzÖ¿J×:ö¯ŒY
+υ‰µµ¾K8ªÔP÷ N|y,ö¾—r«´Çb ûFRjuõ— U$«-A}±„M3÷hGäCzcKv~×)€‘$š3n:g¤×¹þwÝî®æ—ÿâ&à:kyÒnyÙÛõ{+ðɞ?Z»O›6P´\:^¬o•ÞŸn¯Û|‚ 0{‚ ‚Èȱéç½ӂü
+ÇCòÓá‰/ÂÉO‡-ZÚ°Á@¯£é*
+  Ç^80¿R¥^X<Ÿ»‘JlôZê¥ÛƼXR¢dä«@A[Î
+‹•gI§@¥-«9‚ ‚ ·*b6"A“?'¤RρÑú##Ž­PÛí‡G7פ9÷ßS§~r3j =õۆ§„ú*¬»,(°¾ì„ÊG3ôé0kHÚ7Ô¡7·³i'­Ö¿ü›fƒ‘V6@úô¢õQ ͹ÿžêý.Û¯çp/}œ…4Ûù5ß7Wè=üH+›vJ:”Ô²N‚(’L ŽO’Ž'Cµ6žâã)Ž~Z²Â‹j5ÀóÝÎ-¿W©ÜF/Q6N½\.
+ÒÊKAä–C’$s?c«íµxM¤iÚô‰ª¢
+¿ÛäþŒ®˶˒wÛ¶ùNŒ4n‹zڻϴmg­¨¯þ †=jiÈZI5®#ß þB¸ug RJVHM‹0ëCÝ.Q_Hú>
+¸_W~€ÑÑiÚüFÝxZ=ù›¬Q[¸è ñâ@û\t~’vÖWµö¿ö¯S‘“ŸÀq4н~›qWêÀkF­:öM¨ÓÕ©}ªËE—y`°”Në«Ô‘”(uÁþ_˨¨y–ŽŒFä
+¿ZۜÔ¾ëUÃæ®V,æ¤:'Ý.eûiÄýGO‹ÍŸš5ÚjÛKN½Wþè/¥SÇ.¦å“$˜(`ÇAœØfٖ[9“ÉeM„z¯{ô°Zk{Þv@ÑrH~2ÎìZȹqS ¢íÕ¶[­‚ ‚Üv̙¥Ö:y5}QÏëݚõåþéÞ\?<ùsÒ¬N¿m,‘ ³æ}!~.É<dTÏϪ*ò!ý#­²´B¤
+óŸEîpü'9û¡äð÷BÍCL’GL…/ðñ !Ås¢ÈCàºÒ×Å2Û÷<rP¯uÐF ‚ ÷+f_%øÖßdk‰ÄY`ãᖝC†¼7G;䄤]mU!rn»• \ô‡´m·›AA<d›¼rÐæå¾^èöµínM‰Ú‡vxþâ­ï–ö:’¯»íÏäÓjÃVëÀ—*éO1èMß.h©¯MMƒá×õƒbZ3ðf½{O]'/jªi{s°æ\ݖǝ‰è`x¼²>‡ÛFwvJ¢òôé u•Ž!ã
+Y##÷£gs}|2(*f”Š“ǍÖAn◄ž“<—J-
+}Òo{ÞÎ0Ì-Ñ
+AÉLw(‚ "!_µþJ¾xE=‚ ÷’umô‚ r¯!pBÿ¡~Ãõ³Éä­Vç"\ HŽƒBDàŠpãôY×ox¹ã%‚~ڗ»Wž½è[FB‰ºï9©a>dNdy!é}Ån|€"‚¤hË.g𼐫@±¶ùåk(Ë.WìZŽ~×"fƒkþ€#©x¸óË]cäšRÅɅ
+Rû gØ/¼ä
+Ae]J‘Sg#‚ r·’·I¸&ø?ê±n·˜75 ð9ÚÝ4®©€¶ö6ÃjòVk‘…XI»<c_wóôIý£ÝyÜÞ¿+ÿd0·ŸJ¼$€À‡6?ޚø)!•««³kÀ{Ïþ`Óäè©Rg7„d݃Æhu½ï`д‰/EûßwÿÖ¨?ösÂN“eÚÎßÅMÅü{›¶Yî›lËþ»u(&WfÏG‡?j‹ùƒR,÷±úÙ/œŠó'9_Cµ¶° û…W¿³³Ñ?Ö¿Ç\V¾L&“Á°œ‚ RHQ3½o¿Ïý:ˆìE§˜À¾Ë8€F¨GänEŽ“—”õ†–.„GAd×ÿ=Ö“yƒ¦XF­¶kÉþ7܎?ùZêÁ·ßW¾ÒÝKGçŽîF«ër2?E3€pE ÌÆüSE[Í0J‚°F´m“g¼Ù}ó;l¤Z†íg¥Ûæíb62½'Úë;Ü\¸õkƒ`Ê>'àƝæ!€|#}±rê1ó5æœÖÂ`3ó%—ÖPB²Ñ7ÿט¿Ù\^>‚ ‚ åø•lüÊó‹E€g/:=]žØ9OôŸ­Ï%'’7Á ±rÝ3êã¹xnâT c&r{’Édr—ªef¹ %‚ ‚ rø£ƒFm®¢a"?ŽÃ7§µ T¢ÿm7{QÙÁ.ø¾Kº0fLuƒgúsošüÇ}æ(bY÷Z yÜgÞHAÑF÷ᘢ¨9®sÞ=uô’ IósÎ(—SH‘Ä
+ý‹˜"Díڊ„Ï„oµ
+‚ ‚ÜXrí³¶]õñoǓ'‡á›°rÓÂè%>Ä
+¹œ5jÉ/ºõ;»EÐ:ž3æÉ)&?—›´¨AAî4˜ !g••`/²îwã.0nòFFíž.Îù’“©f¬;¬ôô-Ó·„+U÷í¾ ÖI‚¸yasû"¢£sG÷äجcfá'¡„ÂÁ™¦¸còoî>×FjXÛ˞q”n[¸K¸è]¥ïÎ\¸0©÷
+ºCAA;ùªõWòÏvþïº
+¥)Í^Ñ-Tr3L~æ5Ò$±‚4?ëŠÉ‹³]>…¤»ÁJ‘AR–w²ÜRuÙ=³˜gQÒ»¢ïg%þ˜ÅږðÓDÇÌBaè8‰ ‚ ‚, µvهãÉðùäp’¥³6èu4]E&ß
+ó¢m“Fþ¨ÙdËݫ͹!bÖâ+#LGD€¹¥-”Õµ×!n–W-¯ÔÀøt 1$=÷4XÍ5Ëv«ûиTzšëÍQø¡Å+\SUéG$mÚªÕ¹u”¨<Bù ™œy]/ãÞ`Û&ÞþŒ·|ÕY4UZ:ÉÎTF=Yt’ñJ‘g&ûÊ·€c—gäx™]íÛG5Yš¤]q˜¢Ùå*Cŀ8QX\(9OÃÜ]_E]5´÷ËSš =Öw¢•ÈGA¤²M¾hкŠ6n2
+ºv+
+ù$‘Ÿ¸` –`É¢Kn\3¹ë!I’¹Ÿ§mjZ+^iš6=d¢ª(Å»›Þ7wl±Õنû¬2ܹPKãrX½I¦÷)mËNwà/FÍù÷´ ¥\þLïSZ«ÃèvÑjnøÝ&÷g´p%XTHšãÓ Š‚pø ‘ž×=À]ß«¦-;kýC}õO0ì¹PKÃÍ0Ó+(¯N±ˆ(&5-Â:²h[5®#ß þB¸ug ¨†BÒ÷Q ÂÛ+ )ë)ýæ?tVX?5‘Lòóh72$€}(س~‹~;ë{ÝeÚD‹SÉÐ'ޞo´ñ²mÈIŸP_¥Ž¤D]üAN9ÄTD]U_X¾8Éôsþ¾çC­–Ýõ“AéØ“ ‚ HYT²Í«Ðâ+@E1-vuBë[G¾)&%̋}ùn¡s†rÙ’¤MÑiÁ
+…’ pÁy•×Ù :-ÔQe®Nóâ@¾g)3½’{f™ÞKû~Êþ˜¹…ãÓàXeÛ.ãÞ`Û!ÊþŒ7q¢Òåêš*-]érÖ1Ó»‘‚¬c¦¶•®¥L[˜›þ×ÿö¶&K“ýJn¤c&r;2{£Ë;Í;C•éZ¹#˜™¼
+Ëå~T(Qpe¶äòl‚ŽÍæ$¸:9Y¢DÊXBN¶$]\ŸÜ’²rf._Ób%ªUêJFZ~ƤUEŠi±ôŒIŠU4ÒJflòª¤XّŠi±’cZь]á¤çÍå5TUtLËΘT"lsgÔå«bZT«ÔÒÑÓâÌ嫐P͞™Åë¬Úv|ѬÖðÓ|[誐A¥v}Α*ÒâÞÐUH¹ÄSA€íýZ‹ÊÂMst]ÌFæ·ÂÇT®ÎæÚ¦K|õV›wØ3j©ÔÔ[W(’t:ëÌ:>­6ý¦ñÔW¹°ö‘n>­6üº>¨rŽ5æSï5;¶´N‰Õîðìîøv‹n½]`#}¢û§¶uJ¬~Ôæ9áky²|¶Õ4"Å:ù,:ÀÞ'ª[õkÃg¯£Šµý[wsëkþ?±z«Í7ä~\y°Ât´ýöÊÍô`Üè8Duÿ“/_ õñÍy%Ù¼¤1’ó´uzšk'¦DÍý†ú—Ú&Ï:ÿQ¾m¤zî^ϱ‹iù$ ¦Å?¬M~2ÎìR8Ç-Ù9¼O¿íƒ±ÎòA)†l“/šBV‚¦éà‰à–Ç·ôþ¹×ô°É´ÕD®Q¸t°¬!˜Ðä\’¥Q§Îr8“ÉHYkä áÊàªûš3’Ä*ýß®ÎHFp ºß>íïq+õ²ÁWj›ø%Ã_M/%üñ?¸¶XÆ$e„…õž›bH1Õ\O+õ9ª
+Ñoâ†ÇÌ$(·ÍKæÃÅÝk=¥]ÿÓ€À…õ÷՚ßë
+µu.%…l`Ó2aŸ÷åî ¿n¬=ÏlIÝf{\u_“Ԑ^Ax~žq-)͑ÕzoæúR³†Þ³Ü¸¥—¹_ÊÇnùœ+I†¼,«é1…ìM@ñ7AE¨æ@ýVFL?-‚–Q«@LCá{°™ÆÕôR9E‰®Ïn¿Ëˆõ'MõvCöûÞ¹öÉx†‹,·Ž²0Ö¿ö‘ˆpepÑëHëwW«æ—.¹´ü\0…,‚ ‚ä2—B¶t½èÙè–Ç·tý©  T€œÞ7w ÙêOFÙ+\ìô ½~ž—e«Í‰'“ßGZŸiÕ>q€!ç$#q–MƺZ†Nk`sà mËNwô<˞ºë[µ¿>PÂF/ã{Õ4¼³Ö<²lôd]}9Ïåë=5-ÌùrFϳìŘï¶m¶Î&䬟¦pØx¸%×OSHúö/ 1¬ä˜j[ˆcæùy/)Ž }(h¸ä×ow ~‰OFGÃÞ=VûIm%m(p̬|D… ãämË-1¢å÷N‚THô< ÓÀNñÉ)1z.9—Œž‹GÎ%ó¶oZº¹ËY1û*Á·þ&[K$ÎH—ëC†YAn$íj«
+u)ÍýÒ¸iAo@úÊZ
+ÐKr»!;I݄<–0-­ÐpmI ²äÁqhœåEºJO‰,/¦¦8P©%;>¤Åy۟íÆ(R9˜ÌK°äö,¹š™ì~­ÎADB6¯•3ÓÀuà¦9juÑ K}ݼí3æT¨×b Ùx¸ÕV6;hE3=E‡&]ÌbììÂE¿ÎÆrߣ—ñ"¹¡fú;76ýÝm¦¿ TrÖº«³™9)FøßúYÒö†Ÿã)ŽåŸ ô*5¤!sԎ±é¤rº_ë¹Õ* ¢LÇûmì÷þœ!‚ äØäU²µ… ˆúß-:8c{zÞjÍ^ ?j3°~û.?Ôÿ®Þ¾Ë¾t‘;˜MÖøkMáŶ¶n<…Gàx |¥›‹o¿Ï¾Ï½¨G6ÈÈtEÁ¸r³Y”@LW”åB]™4¨LڍÓMäCºGZ®þ< k×ë¾KØ4êP—£å“ÓÖ¡±­ÔZ½~ úƒMSü¿E­¤[z.®ËZn –°V0‚;eÒJqËuK‹ R‹iQ­R/h{èÖ €›‘Env8j…wABóKÍ·ZA”A=‚ ‚È!-»œ¥õ64ê!wÜùµÑ¸ˆ†±óœq#^À-žL&ã~mññ%—ö7ڙ—\ y‹íôá3aÓvCùzw7ÓoIvÃ*XYp€
+ásœó)&ɋbZ-¦9ñÓÝ
+== $Ë>‚ €÷&ãgâwße‚ ‚ ÷¿ºÕ
+‚ Rëvë­VAAdÈ6ù2«é¹+œ¿/™,sëŽ ÈíÉM^z©Óéê>+õuÁÅY+ÜlÖ[–¬”wåý[á±Îü’‰¼ÈHÛìù¨ÿ•Úx†>.î6?í8͋þ?Ú-ϬǓ3—ó—÷Vx^©U¤ôb?mmùhÜÕ3ðCtlðÍú¡==òÞÐ+öþ+†ÁЩ±ð±Ux·­]nî{-Ôü~pò§1ßóêž?:di…¯ÄO1è;;6ø(m|ÕÉÿ؝LÀt¤gBìz9ëÍãø˜?pôÔH¨I…ì/É
+ r³
+  Çf×ÑKðUêJ#ö ‚ ‚ ‚ w ¥Ìô'ôê70LàP?{[ê¯ßjˆ´NVÚ&"pE€àëuä
+¢î ›[¸0ræa‘Š“+ úi_î^yDÑ·Œ„ußsRÃ|ȜX:BÒûŠÝøEIі]Îày!WbmóË×P–]®Øµý®EÌ×ü[•œ_î2#ה*H.TÚØ_8{À~á%W΃‘òòo0¹¶Z)^M&3g^:ÖãIIf±N‘2¬ÈþåƝfk÷x¼’F”Á|ÇJ«Ãb}äóÅgoÎ=Rž£õGۍTeØn8<û˜$͹ÿž
+|è6TÓtµÑs0 ^
+OeÏvëÁ.Ë
+¨µÁ/ÿ<è2ÜOSZÚð°¡ÔüÑGbq“Œ,…dJ°¼Am¨ÖÆS|ü›Lq©iµ˜åà6ÏÌmϖ£ã#‚ ‚ ‚ È݊Š ˆ«™IÈÉ*+!\üõX·[̛ ŒøínšY6Üí±’8vyƾîç´\mím†Õ$ìþ Ô™ô>Fç.ˆÜyXœ„ÊIý£ÝyÜÞ¿+ÿt2·ŸJ¼$€À‡6?ޚø)!•««³+C{ÏfS#fQÍÆ]’u£Õõ¾ƒAÓ&Z¼íßý[£þØÏ ;M–i;7óïmÚfe¸o²™WûìÖ¡˜\™=þ¨µpU²b¹÷ˆÍØÐÏ~áTœ‡<Éùªµ…MØ/¼úþ±þ=æ²òD‚2õ³A¸XuŸRvÊÂïø.©¯M
+J
+E’ÕÔB­¡j)ýœÊƒ
+OgŸ
+qøq¾9­Á ýo»Ù‹Ê¦™àû.)Þcª<Ó/]‹HÁL’Ÿy4I¬ ÍϺbòµëœwO½†$HÒüœ3Ê€t7X)’ HÊÒàN–]ͦ(D*¤Hb…TXJ
+I’°{ýZû7\d¯‘2ùå]ލ”ù?£å‡PYG@„ÿ¸ÏüE¬ ë^ $ûÌi‚ (Úè><»¤ºÈ ÞqJÓK?lõÿo*WfàŠ@­ÉŽ"?èÒü$û¬&†\A+Hæa‹ïódÞ<̓PD‚ Çu1AP=C٘H¹yJ`ÚlÛÀ×í\¶‡-ŸN´íÈ3«øÂ#Á-‹§RdŸyÄ>vkŸõÈ{(S?{‘MDûòZ+ï³Z÷DZÂò<ÉeÉÚèûmô¥åßò’‹Ê{n\ÉÈW#7j0Ȳ’{³êÛW3übÓð™7ÅÅ¿µì gw¨è®'4ö½¾øË¥’ý»ë{½`˜ž5bj¬ÍZuS³¿úß¼TÎÃhOswôË^ˆz^ôh¶vЪeV`nP[5îæîèËND½Ín©/ᅴBNGÿÉ(›b£g-{"•J{BÓ*i~)æÝë¥ ÍñiÓ"¤½õ½æn6ŽÍÜ<”Ô¹™øOröCÉá‡˜$/Žþ˜
+Ö¼yȕPâˆt¿8Üq$23sµï%M·3d™\m>ðށ²ó]á€ø펒éF Ù}ߪùÑÛýש4¸æVà
+ÖhÕ[w@³4ç¸\iŠúävQù0+yݛÒfç3ÿ=:ÁÙ?NÆyÑp¿&~‰OðÑ lü’bYQAAPƒ B@!]nA)‡u{©ì/·$ÉfAA¤sxrì
+r,¼„ÿÿÅochzµ:–⇒,ý˜Å´Õd2™ŒŒrfB‰:ŠÔœH ÎڈÙ3ݓC™LF
+…,G<ØÁUº¦É_24päʵrDx.ìÿ”u½l%Vêæ*_ ¬ºo÷ä/z~_s\Wb#W®›É%›íu–X©¸<ã(K„ æb²ÛבâáDð9:öŽyÛ_빸§ôÚQï䌋&¥í?ϸ˜i&“‘„΀ã>’:š<=;½§:ëteåsG‘Ýֈ
+zMWÑP`7óbߦ¹ÌxšM6€!ù£œ•¤MÑiÁ
+Žu%çc–Ž}†Ú×á9wû¸õè\ZÎbCXhGڜùf
+Ù«-5•·V/X`Ӎ ‚,ÒB¨ùïDäEÙ_S0’«bBåËæÕïbjÿgp=‚ ‚ G%/Š”³Ê¬VcÙaƒ4DŽ¨ SÍ0ÃCJ£°€Ë´B?òòBrþB8wïàÁ‘]Ž=F5I‚‚\Öà+pA÷Û§ý=.\äµÛ`\]ԀDª‹
+Iü’a²Ï„è7qCÅV(þ.þíݑ¸µWŸš[j¡0•q))hµ”f`‡F=ü-ïxzvzυJ™“¦8?﹌Ö&ßW‰ÁFΪO‹J+¦ÏRƘGW80x_íî¿v-M Ù÷ÛꖆîŽq_®r£ô,Fتñ͎–š¤OZ¤–g •¶°xA’M4k̑£{u;·õ?Õ¹qv¬EäßPdK·¼2è*AdÚßhg^r1䍱ÓŽËëåß+MþOCS¢F[m{ÁÕûž›*æ)U.îXkT~B9ö¯ŒœZ¸è[µ¾Ýð›½#!ÿ\×"֝žðé°bóÅu„ ‚ ÈmHøL¸ÄUß¼{^Èü’‘W¡±ç£ÃµÆ+ÎØ]Xßz<93kýÏí´¬"‚ ‚ ÷,òõ‰r
+Y I’¹Ÿ±<m³îu™26L™—Ò@ï›;†luƒ'£ì.vzÐ^?ÏòÛjsGâÉä÷‘ÖgZµO`H’é}JÛ²Ó‰³l2ÖÝÐ2tZ+˜Oh[vº£çYö|Ô]ߪýõ¦„§ˆÞ§´V‡'zže/Æü{·m³u–5A¥fî‘TÝ^-Ôíì®~®7ׄ¤0„EuT†"3à{Õ4¼³Ö<²lôd]}Efzåù‘Š‚pØx¤³Ùr ôT^âÁ…’¾ý H KRÖSþúP[g…õSÉäùy/)6°}(h¸ä×ow ~‰OFGÃÞ=VûIm%mÈIÀP_¥Ž¤*¾TWBLEÔUõ…å‹“L?çï{^ÛjÙ-µbò%p!ϽCÙcM®³çÕI ï T‹ùÞZøyEº? $¯™L†c“ƒï/ØF”a0S„\Ó9ù€;“ÉÄNúçu±ÆR¡¾òŽA¹˜½`àƝfk÷x¼Âv ­ ‚ Rš¢fz´÷k-ZL&“é!UE)ÚèÀüVøXgMws­î¾µu¯¹†=³ÝÁ—Àa1ê͵ã÷7ž
+Áè±ÒBö>Qݪ_kÿ&›pÏõ'AtõÌK=Tl ê¨gÀü‘¾WM¾=µ:Îþú°ëD¥vp…ùYc>õ^³¯a˪•„¥Ñcx%¸ã~µn½½pJèSa:ÚþFû‚†lÜèت)_Z߬PŸû¾"ÆHbÌi=͵›Ô×6´&µŽÉ³ájum Õs p»˜ñO–ç6ä'ãÌ.Gaù¢%;#5éð¶? –– ,Ër%Sfšß¢¬e\s\jŠ_DïøˆA–…d*‚ È2A™úًl"Úwƒê#‚ ‚”¦H
+Ù\fí³Ñ@t¨?iª·²öî{çÚ'ã.²èŒ…·äguƽj)À ,!é"rw °þµD¤`G‹ñŽ´~wÕIç¯Y^ºäÒòeܯ¹1ßà½@îwx‘X«‹¡XˆÕ²™Ð
+Ü4'Š"Çsþƒþ¥(† ÷ ˜A¤,•§U¼Ñ[èÝ_a}E ˜BAAb”K!›K%¡ ¾õ7u„èP¯Å@³ñpëÎ!à Á%)xK¸Î±)Ö½7lúÓØ­V¹] iW[•ÇŸ\‹J< \ô‡´mƒJ6ô%J.+_B²é,Z>r‘kµ0¾Í¢±O
+Ãö3ŽÒmóv1™Þm‡õn.ÜúµA0ͦêwšw†òOòbåÔc>æk2Ì9ËçvFAn¾ý>û>÷¢T"‚ ‚TÄò½AAn-W3“Ò‹VzݸÃöòii󗪩 ñùƃyÏ»œó%§Z¥ÖPšb‹ƒï»¤€$Œ©nðL¿ô¨€$Iؽ~­ý›lTÿqŸùŠXAÖ½H÷™7ÒAP´Ñ]ÎOE«xÇ)uD?lõÿoªt«\"{”i.h•w#eþϨ%ù™×H“Ä
+א)i<rA¬ ™‡-¾Ï“Š"+¡ˆ>A Žêc‚ 0z†’Yõ+‰2`ÚlÛÀ×í\¶‡-ŸN´íȳ·øÂ#Á-‹§RdŸyÄ>vkŸõÈ{(S?{‘MDûòZ+ï³Z÷ÇEÏÞJ¦ AY^ÚßhN/gl7AAET™LFÊ;¯èýÇ]á†>é·=og˜òFAÛœñ3qëvkøL6’•u»UÚÀ’e,Qô4§«hã&£
+;)µùkëî«[H E}¤]Ý/÷«V‡Þ­Ûí´z“@®6xï@ÙÃ]á@¿®Öñ™}ðù\ì¾oUîG͆^î¼ ®…SipÝ/k.°, ¢hm¹¶ÀO¥Øt6Ž8•ô¿Òcx¡Wú8|(n*i¡ ûŒñ†axkIŽV‚ ÷2ÖíVéöV‘²oÈuö¼:‰áIUñ –õ;-¡‚ ‚ ÷8sÁ ä‹
+}Üy'̟=`¿ðêwv6þy¤¯¥Œüe… ˆ¶Wۚ_j¦Æ
+Ðx›ts(üMë`~Ü<px`˓[|Ý>Ãƚ­5ä…ûÞ:ŠÔœH nÏJ`Ï8tOI¿[yßK½“3.:»}àç÷$ä|;•PO’ãp-u4xz¶£Óu¨’†’öu¤x8|ŽŽ½cÞö×z.–+ìà*]Óä/8råÚ±™ŒQîu–X©¸<ã(ã¾ü讳ÄJÝ\_W«îÛ=ùKÆqYlP²òyÓxìòŒ]#’+×ÈßZ\Øÿ)ëÚ[S›Ì’§ò´GoíV<Ç.ÏØ5¼¢>ô
+VsÅ²Ýê>4^R‚²>Òǚª…žù÷Û6ñög¼å«Î¢©ÒÒ9Hvv j4*è™à²z2ÞL&“Édf&ûÊ·€c—g22ÿºÚ·j²4I»â"0KLú£b@œ(¶óæ§=D¹ëÑétuŸ•ºÏ]€ ÜlÖ[–¬‚ ‚ ÷"*9ï|nÖ{ášàÿ ÇZc2o0À˨Õv-Ùÿ†Ûñ'c¸K×Ô#åÀ$~…’Kk(!Ùè›ÿkÌßl./Aîj8ž€ö7ÄÞ?÷Bºh5ÓjýÈË+Íù á¤Ïzø[ÞñôlGçB jnØ×Å¿½;C¢öêSs«ó¯ŽìŠòA0ªIRe€Ä/&ë%D¿‰––Ž\m€ÀA^½ÆÕäâEªä„:Š ºß>íÏe´6ù¾J Ö0ÒpV}ZTZ1}–2Æ<ºÂÁûjwÿµkibȾßV·4twŒûr•ý g1ÂÖPov´|5ÓkU*~bWD:*mùj‚ÜÛ¬%t²÷TrÈß&% ݽ#|&¬O–#ˬ$^ÍB±OJ”ï¸AA
+Ø+˜Oh[vº£çYö|Ô]ߪýõfÅ"$Óû”¶e§;gÙd¬»¡eè´ÒŸQ„ëÀÆ#Íà®çÏCi}J!$}ûð›BRÖSþúP[g…õSÉäùy/égÒ>4\òë·;?ÄÎ'££aï«ý¤¶’¶
+‘Ä…f½ènª{ü±êº†VVë;®R±ï,¤zú‚c3rhNÙC#Ì&‡ÒÚb¾SG¡ÙB'ÿ‹B!tQ(!+@ø¯ð§>+CӕêØx²ŸåèufãSF£ÑhXiȪbªTî/1½ìRuoZ”ªÏåv;gkeúîF=ÀܽU<d¥‚{Ó½½­Øœûf•ªÃ"~ù—+ñˊ<»‡4MË«@¥íù&Êí2ø&šùïgŒ”å/8¿\»\XoP6r6žç>h4r”€ÛÀŽ²Ü8Gki¦ŠQ*ˆí÷³Æz»~*oÕ÷ÍKž§øÈëlùØ6õ”àŠ{kE¿bç[òDDJvTÇ2Òòݍf:÷µ–EIrÿ‘}`(•c•FçS©”ôI!gžyÿn&êúfHÿfŽE!„Pn…JȪ@ÿ¤Y¿É>g×Ù–£×™õ+õô2š^JÏXÉ_îO©˜^V©ºüÕçfSRN™>ٝ«XÆ!ç/¸—¿s/Ö§ä/â7;rV3Wu|uÖҞ¯5?w[>ˆÞáÔË,–ç
+Ü\‚î¬
+`ªýj}ž1z€‹¾­Ö–Hœ.nÙد­„÷œ»ä6Ï]‰¹v„ïÏ1U:úõ igÛҐ¯pξ܄+¾¶MiŒ!„Pò½üoÎ9õ7Rc҃Nz܅%8FB¡b(ŒeV€F«1o°Â$DN¨Z3SÅ05Œ~µžÒä˜À•¿Ü_Žbz«T]·J©>—»Þ]·æP¦ïÎÕÌÓÛò
+îIÅúÊ>Rñúp‘[Îö ñ+)²q¥`±)r|‡nãzÿ–Í5SNJEѯAõ¿+;Å6c}ºßkM¿<iÕs>û¦iÐîg­ôםö¯§Ôÿ®Þ¾É~ï:„îµU–ø®­eÁ°¬¥ßŸÀ©@*•rí*J!ô
+î¶mþ(d \)ù¦.õ¼ãê?Žÿ’Tk´Æ¬{{l53>Sðß6/yú fåþòt‰¦sATjý³õ=‡{-+
+f³A–õÁmóG¡¶È˜g-\+1ÀÚ3D«ê½‚ÆU´øKÔ¿ßõŠ¡úä?öŒË݁!õÊÚäϝ‘›nóâé½{Î_²jH’ìÁ?:lO·\Þ¬_Å4—<ãã„é‹muý8£4·üéU6{Œ^‚#õ!„º/ȗv
+Io$$h—kÍOšFcž1zÈ[ée—ª+½ú\Î ¥–é»kõçå3{[Z›¾èj
+ý¡nÑÄy[wcÿô\,â7›R¿²#7÷Ej'Ãëߗ?þ¼ÃÙY0 BèN+oŒpŒ!TqŒUÅ^™g
+'ógà,¦9ðn©’òÞpç\°rOβTŏÑKðò!„B ßü Ӑ®ì5!•Jñ۷ߕ®¿ºØ>žK\JߗR`Z\x÷’‚+\©T*öµ/³xlI‡0/½Eó‚dуÖòöÝp0êPþT3—ÈÅÄGónö¹ò>ªÿQÁ¬¯ˆ„›B÷g>Ó‹ùE‹ñU»÷X{¥œ‘zâáùJž¯8÷D[{›¾’„©šÒôIyaI2ÏCy”0¯ôh`¼õ܌Ÿrç!VÿÖôýj5 gìÛsþR⧄ô¸ðÕQýhÿzËTbâ›ÑõÕëÃ*sßé¡DìÒÑ?9ã‡\¦ñ+§QƒÝÒï¸Íי^‰3~KDšán“#%û§ýmïPdHz ·æ_î9lµ—ÒsÀw!„PqZ¾ÔîùÖ×ÐU`;ªV£‚îÑt.’ñH[nõʛD?q@ûéáø‘ ˆÖ*¯=yõ–üa‡ý6hË}[DsãûNöˆ»Ãæì9ƒIlŠŸ‚yoB!´ð©ˆ©ì~ÄTUY„~î\¿²#ÿ>rOÒµC)Ÿ²”&[¥R)‚ –:üÀvHcôæ-z£‰Pë
+ì®C~ïk¦†¹×½»ÿx÷¦‡3kÊ çv~T0=Ïh[wÀÈÔ$tÎJŠ_¼=Uî[ªI†Í:בXdÇôûª¶Ša¦’35LÏ鶃՝.l³sÏöp‡Ó1½Á¼N\bh óÍù2-ÈÊjøpë9½`¤@ø¥{xB=æwÓ@÷†Ú=Ö
+ME\cyNCfœÈeœNcå©¡Lÿ•~¦ì &‰
+ÏϜ§¯´</k]É÷»ŠBe *›Â‡œu>ߖöþ þ_õsŽ¾Ï#±Ëlt8ìÙn±­•Ö
+õílUó…ŸÆÆþó¾Nµ7XržÏ<ý‘tmè8¹uëFïš®æô7Fd¥iߟöÍ>pÊè5VŠÍ_¤/!:±Æ÷§¢¨š„Ç~élìÖ¿ÖÀOBÓ¬¤
+YïÌ6ŠÔœNôM>sgºçû¥S‘õØ3vËI§Ÿïûç-×
+RéÔeɌc_FŠÁWéئõGêù¸[Š o p}‹t[Çþ¢'^ráV*=¹ï6G<¬;zõ–CùÌîämŽxX7ÝÖµÀ¢G6ý;åx„¤Ž'/N„3%û$d“WoÙ5"ùð’£òϑûŽqÎõё8µÊ$Uácϸ«-]9ÏçÉ«·ìšdÎþÐ@D[ì†WOy’ ²ÝP÷u½ÀzηH×zá_S•Zø0±¤nßw ÇR5ØӉo^ˆí7Aο2*íÉXÂ^CJ{ÝøwŠRøSNDo,aÕL÷ˆÉPµ¡%ÝÏò0DS▋Îø)ßæýº\{ßØüÔEÀmÎü¼Ýü¦gÏëH²Ý°t1 \@q9œwQµ/%;‚ ˆ¶·ÛîÜ[:Bè~q¯.ÀˆÙׁ9/üpŒ!„B÷ùÒN¥´Ef*aXÎxõ¹^w0+îï+Bâá1Ô>Æÿ¯½ù”Ý¿);i£©}0ñ†B2ôøÓ­‰ŸÒruUúƒ}ÏùKVMÆy'´
+¬í1C´ªÞ{ h\E‹¿Dýû]¯ªOþ3aŸ¡PÜwæ*þzÌ·cëz Ûþ"Áß`·ôOßÝÏ]Ž|ÒŸ58çrÏa«¡ÁÏ}Ù\ÌiA2iLç^÷ân+iŒÊÊS/ç±~•8¹jzyä@sÝ;ÃG£ìÊ9[[Ž¶ýԑµÚj¾^Ô[“éÎƒ7|œ¾ß<´;lþ '´±5ÿ^eµK€8 éL#‰Ù™FšJZN̎<ó•
+"{^Ðv7eޒ|Ü3pnĔñ•†’r­
+A9>AÜoÍeʼüËsi·‹*!„Bè÷<’’9¤2_åþ
+Wá›YãN©l¥òzÅÔÊ+µ $/ö[ÖÐY¥órÆɪ§—ùR*Ágf(Ã{Ñ<Ý(²(¥ñ­`Ûʤm£·à–Ej96Úv<Ç|ÛàT†Ò(•à Œ~î
+Jfoo9ÅÞºz²`£³?R?_7Dþh«{g -´äª “3^ l—.C‘my·Tù>îœ V7J\\»-†êô¢ÇÖúYÃÉèôÉoCn“Eý€I’d–3ÖZ³óe‹qµQ_£7®6æœJ=ïnè·Úú¾Žr×øؙ>{ýŒêñ‰¢¥ò’㐔m‡l»ª^íÉ̦ÒjuEâ,û}¤õ¥Ví3û ‚éyAkq¸£—9îJÌ·cýzkç\ïϪ`ö=£mÙèŠ^æ¸ËQW}«öÙ}Lxß6l¬óŠpýÚo«/j˜H¦çmËFW$Îql¬«¡¥ÿŒ&ùä$ˆ¢ Ü.élr€\8û|*ô'õîUü3ÔÑi鰅&Ôò÷I%×$̸gËq<@k7lrÏFÙ˱`¿·ÎÜ©}a“.ðs˜K£õKՑñôYâþÞ2,j=/ӑáˆüRCwu´Ø?èc¯pl<ân¨Ó>»Ï@*.—ˆãõÒúü=G¡ÙŠŸ‹@éûR
+Lw ™ä]h.ϱg^þáv„BÝ/ä˛ܳéç«ÜŸD©
+ÿ:
+S­ÙüœÅõÙÈì}¥<.O
+X#JM¥Í.W^k•z.»ÏfØl[•´¿ä)~ÍR-Ag/r¾mî}`æTÜÔ¿nô¾Em5o•Ve•à+–Ú[xþ¤$¥9õó~C4U°Ø>Ü8ଋäêmïêñU?çèû<»ÌF‡Þíû×%ä§î&TuŠߛS»ù3¤#ohîû2»ÌF¾4oPþ\1õÈã¢o«µ%瀋‡[6öë_+áý­4·yîJ̵#l|ϝjÝçHÚÙ¶4ä+˜‰¯DÂ_HÛVü=Be’>=d½|– }3”ç´„Ï[ÏfáUB!„ÐNæʝôf~Ëýå¨Â—«Æ]©eëËëQ+o¾ÊG¼><—Ý‹±'€tn>2DŽ!dï+U¾†®¬¡ˆáºË –§_yJ,µ‡ ”Ô¥¿b³Gêç}Œ^ÆléÛóجyǔIC$q¡Y/º›ê¬º®¡•Õ:Æ·«Šª ›fìlÿ[Üø~)é2æÒnþL#¤!’¸àÔ'ӑ]I½³„ŽÍbÚ;´çUp<_M„ÁÒ¬Þ´gèϖ»ÍTd;aܯ{ô!U IDATñø“MÁ7§ï Õô†6ÌoCè¾Öêñn˗ˆ¯ ½=¡Žù‰z@ÜHI8éñà,Ñ?ǔ}Þf_/¢J!„B 8½yªÜh«Å›"MÓyR ÷¼»a­Õfèµ<Éð?„ZgTºkµº˜Ã.z’ól›ªÂéwO݌š÷moéwú¦ÊÖ1‡Ý4pž¦eë¼o×n¬óõ÷Ö?Ãp?„Z¦ͨ•—ü9Ò½;]+OJä2>!Â2R.èrÒj~àí®´p-XòùSŠ£fÀy8â}͜ü9ܺ1PÚî °ÞO®Ý2ËHÊ2è«ü÷En?>ʲÉßhkÀÞì~tmõsœw·Ó¸Š¯³¡Cžîoµñ‚ûæ0«_Á*y`©=T¶©±%„Ž ˆT*Uö}Ö,~ù%¹Ìž¹Ê=ÌΓ½Øàù4àùtÆ2V˜?+lv£Œ;•rÏ^>—vó!i³ïxXqœr±Á} à>0½@þP*‡-u‰ëãô’þÚû?j/;NyKÂgÂEîµÄЯ´\.ïîô—ܹ%‹ª·AÌçï¡ó,[ê^7Rc]»Êúâ!„PN™E•6†Š¤/u{„B¡‚rÓO!9žä'xz)§Üö:;?éÿ’¬zÊêùغÕìJ¥)½ïo‡£ãàèÛtô¸/¢A`]ÍÍþSg’“jão{ûý&
+@ˆ9[úÿ:œMí«Í}ÿϛf¹ÿ=‡ç³ÑëbՓV÷Çõ-Ï·H‡ÞÛܼ¯ôºXõä÷ޞ¾¦µÓV 8k™çFëÏ߬£2; ¶¾çp¯eE¾ÆˆŒ¬Í3Ò+Ä ~Ðܺ¯4)V=eõ¨ßütKîìÏ
+»+eF&r妗׺×Q]ÿH“ÞzöNçÄ¿s·uö
+^5Ëõõo´õt6þƒÆòòì;»? ĈEK­GvZTGc›2w,)7}t§aëdoì€yvâ'2^ø¹é³z+=)o÷{•Ïô>åÚU췌¡âuìoã¾ç17=Bå”?7ýýuáŠB¡„|‰R`˜`Nåþ°
+’ͽ_©¥öd¡•õîõÚßr)}w§?í,!teï[ü0=wÈ3¬³\øWJža=ïîU»9žÝÕöz`à=B))¾„ì]¦,!‹B¡¼ä±µ"jzæ/ô'¹èÛÚ¢C=f=ÍÅíûõ¯•ž@ýª‘´³m©ÛÇ
+β’ïK¥öúpŒþþ×þN;ó†“!ï͏rð›Á²÷•ræ³%¥ïK¥ÊÿFªl÷ªÝœ k¦S½ã<2„B!„B¡<’Gæ2ç]©Ü_IUørº›¥ù° à6—|Xjoa*ø¾1;Ázb`¥R£Ï™½ÔFB!„Ð(|6|¯»€B!Ty˜ë¡y
+ó‹ã«vï±>öʂ©¿ßµµ·é+çZÕÔ>˜ø)‘ø)qé|HÏ?%zW帢ÿ¿öæS9îpøÃF±9ƒò’ØÛÀuMà´«ø {âo°[ú=òöÜå¨og]\œÄsØjoðqÜh¡ÀDç!„Bh!(õ¾É_wQ%„BÝä1yUÎÕÒ½ùE‹ÞhâÔz†»ëßûšƒ©aîb?å¼{½…7*ˆ¢
+]çUÖ´xæ
+’ ìнôJ_ç-Ç
+„˜­íŒÕwɼ¸” ù{‡[ÏéczȞi6m ̤ Öy™sd˜o.aÞ
+R&妿sñåT›rл°d.ŒÏéç!„BÝw‚?“¯¦T–Sì수›!„BEʝô¦ûÈAªF¯1šâq€aÐjaÞõ‰S˜SÜï4¬ ‚`Œ¶¾³~i¬”…=á1Ð$QAš^vÆä›
+Š$’27¸Ø"òÁD?u1˦‚ËÉR”â”_ø Y::zÅ÷·ñéÒQP$Q!Åtf˜¾‘€™¡ ïE嗶u AÔ
+ƒ»Ÿ•7K'“).ÎÜóíß
+¶­LÚ6æøz€~Ñ×ó[mëKø½-¹|Gp»¡Ô yÄþâÒ¾ì–_RF?w…KD{goéyYëúK¬¤àè.9—ÐÒã¾Xr¯OB!„B!„B9¨ä¯÷3'Ô¿lí>àW †o
+fB!„B¿fÐy†é—:é‰üéC¾SùÎ-úfHÿ¦E!„"yL>wnzPy¥>Éq}ÇÈUzþ\Ĭ¥õUzzM/¥aÖ¸y8)ö®ÒÈ/5«¬ýòKyø›¤[£‚"bÆr ,Î ðÁ/³@tB°QùŠ¬flïØ-DsƱ(,ÏÎ$Å£OfÝêôÑ àñE3²ÐŒL€c€µjÆmµKs܅ ))μ0ì¶}FÙ_ò$NgÏ/f¶ôôw¼mœKœâ"0
+¿nÙT ˆ£ÅmŠB!„B…ÝwE•B!ô@yHþÂƌæ
+Þ!„Bh!‘Çäs—’$™åŒµÖì|Ùb\mÔ×荫9§Ò@Ï»ú­¶¾¯£Ü5>v¦Ï^Ê\ÛjuEâ,û}¤õ¥Ví3û€dz^жltEâÇƺZúÏh ‚Ù÷Œ¶e£+z™ã.G]õ­Úg÷1
+od®Ìà/ôР§¬øà}Û8°±Îw*Âq\ôk¿M>º
+Õ¦º‘千a—´ÐŠ8VÄm&î±µ!•uð7¸ÂƒÚ‘º'tº'êFhGä+WÁ|‹t<Ÿ ¥ëÁ*Å)#>˜þé}ÛèÝ^§Óé컜§§ʝ¡ˆ]©{B§«^ë‹ëƒÑ“Åœ­È8ÂD´ýöòš˜Í°=Ðñ”¦ðvóı‰9TTºyöгÉ1·~!„B!„B!„ÐýA¡„l¦ÛSO”'žGûý¬±Þ®OçÃá¿o^ò|<ÅGrE&ó-y""å&ÊϱŒ´|w£™¾³iA´½Ý†%dB!„B!„Zhä1ù¼³é%S<.ú¶Z["q¸x¸ec¿þ5ϼtýj´³miÈÇ
+7Ÿ\»\xeŒB!´„ÐÝ»QìÖÅMg'Å"ã©UêÂÀdqኞmUdç¹{€'PÁ=:9º7  qRT«Ôe<_´=Üø"­©Ô$'’t^˜A¥†I UùÜû2…FB¡üä1ùù™MP‘òÑŽÑÏ/)7ý½îB!„Ђ@Òó|©¹ð5.ð.ðîÁ‚ïá»G–û\³ Ô*urBLN@’Õé|'!ó9B!„Š‡Ãô!„B¡_?¬ÙƒÐ¼ˆ^æÔâ$pדãÀ_gA05‰~Æs¼e!„*šŠ ˆ©1 bö•+÷é·o²2 s/º‡B!„BóD(zËâ¦3 “ÅF$UÅÍ{žïœ-Eöpž»xÜ£˜£{“*&RE–ú|ägNSIŠ“¢j^ä“"$@f>Ç[{B¡‚ä1ù|ü^ðñ3kLþæ-†ù•~~ â.5E„Z³AàÙ }k¨Ö’'¯Þ²/#af½4µ>%IJW©5Æg­û{ìSiþ‚È "?—׋Ù,ýÔ v#úžaí‡ñÙý·~w#¸†Rê¡Àtn6w_
+îœÊl#°¦GªÅ׿8ªiÏ0÷ÉBó!•J¹vå«Ù‹B!ô)zP¸ÈáÔRŽßtQъݰØÎo÷OàœÍï ÌÙ½I åU¥<ǓŒÔ*µ8)â*5L
+ ˜œù!„BES¦n
+ݟùÌ/ZôF,g¼Çú\¯;˜¿Â‘zâáìí;+yÆÇ Nzª9uý˜]ö§çü%«&£?äUüu6tijÙT}41æXQzçóvÃÔ>˜xC!züéÖÄO i¹ºŠÊÓC’¶ýÙúøÖ_³-#Àßh‰kêÇþl£&Lù"„B!tGqãjÑ%dB¹„H†­«5É Qy1ý!RÔ³ž#„B¨XªT*Å3s5fŽÑsj=CÝuÈï}ÍÁÔ`ö›9iúÖ÷áˆóc³ô’û»K½Ê+þК¹¶Ša¾6W15Œ©Ö¢™–>ÇHÉÓ¥ tƒ¢
+ÌѽITjqRT«Ô%=ïÿ–ÓkAà'DA$E‘Ÿ:.õìñÖ^„B¨ yLþ¡œ«»¤jô£)­Öè]Ÿø¸+\Î]‚û†AŒÑÖwÖ/åE®‚`Ox 4IT¦—1ùf»Û¼g»^L$izµ9*Ý'°® EI™\lÁK BDßHÀ¶Ž!‚Zap÷³@’$l~t‰ý[~: ER@!ϾÒÑÉ}É|™µ*“éNöˆ[~Ú6P_è8YÿäN^ì,ãËùíF&ÏWƒšÑ–¶únk÷P93ýÑüQú=D!„z‰ª¢ óù(2àìžÈÝÞñ_;èJ²¤î‰ ꪫC‚Ô‡ÿµƒ©$ç·{ŠI±˜Ç]8sùùÿ#žÿx§»§i÷’žsþ7-׊"ˆ“jqRm†›áÄÖÿ‚ô5CÑßI „BHi˜¾þekôûxè2ˆßDŽç.óŸ‡,«õ9§ ÄØ^ùïᶃƒcWÇ{}õ3¾0·ìçzñD4hü¥¿Îâ•ö5˜º¿¯
+˜µ´~¥ž^FÓKi¨ÈÞ<œ­«4òKͪÃôruV’v@tB&"bÆr ,Îa":cãevic¥c(#HíÒ|ßçK—§‰?¬€‘ (fߒßO'œ ï›?°ÏÞ@³TKg ”ËÛ
+×úÔµeÕa-؍<òôÿÞW÷áð¾ó1«jØüŸ}åô ͟û}ÖB!„Ð<R«HéÁkmùdÄÙ}ôRôBß»õýۻ嵡ö>^ß¼>Y«
+o¶¶Ë»{w…šöÇ~ºàÝ¢îþƒ#3`öcrÜæìf—;‚ß ]Š z¶hº~?}½íøKrßñÁ¡P/3²5ú3—÷
+ Âk'¦æÑK÷ßcÒ„B¨D
+JêFJ=ô;ÌÃ*Ë؟m@Õ4¶ûêê͍WYÓâÒâ#„B!4ïäìg’⾪é—PU 0 N
+BrXXÿXuæ^QêÀ<ëþÚ<ÉIÔɑΦN6 jÐÚ;Z5é iõR;@{|B0O-OÔXÚG’<¥QC:éÔœÈ'‡ÅŒPin~@3ïÚÞÅ&E5­Íêdz÷©#`©œê|åˆO´†ÌyŒEoöá7ü^,~ºúü\8Ç+N
+®ð ÛØR÷„. šÚW›#ÿ¯À_ôy ²ã™ªÖê%áó7ë()`Ý]ÉIµþÙú`´7ߞ‹M_t5µþ¡îÀŠUOY½ýÓ%g…‰hû;íy†éÍã՝ú²o#•´>ýx֒£Wo9–‘3V©ÔÆg­'Ï'ì+r\À™?ˆ|¡uu}ÔÚÕ<.ªÔU«ŒŽ?z¶gtÍߍ<röÐrÎÕrb´ç»(5õ{bÙ;TdIÅÍë)µ 4/‚h{»í^÷!„BhA+•0<
+Ž§Ò/…Ñai­Zc€ ‰þœ$Ä`™åŠ¦Šc©“œ­±³ãøPïS4ˆÉPõÓ·Þ\ꗒ ^€¾’„‰ˍJ­’Z™NzCU œ,ÒH}2ìþ(âél®khï8>ԓ«9y÷&Òcýb2œîC)'p¾<hN÷ŠItÃO[?‹ÙŸd€äpדÜ™©ž¨Ô0  Räòs„B-ï0=I’är’”Æè Úï‡W=±Ý>é%ÿ}3h¦ó«˜wøؾY¡o؛½Ðà;™µižþ•$óvr™]~éf§7ÎPy_Û{~Û{þŒÍšgo“3ɸS)wÎøy’‰çÏ3žµÖ¶ÓkÛ9ûPŠíFzƒ\¢ØW}©T։'܌ùJg!„B¡;*•JqWÒ5Q½oÕÖmÛjùÿömÐÓã?»wL%íTÑ{žÑØwxýï9´jqà“֮ϵ‰ïüŠA•LòÉI'E˜n4êÿÀü$HCªî¦®ªýN¸înÍS´*"döòTôžg4­M]G÷:i5ïßí¸îð(4G©¸ 4äŒOi\M]ÚýN8ß.—b[èAåûš&-«´µ«6)²ãIn’IA1=Yþ¶àvÏB!TA7Rc@DîñÓBc.ú¶v„èPYOsñpëÆ~ýkŠ¹bB!„Bèî“3„0oöö@—·ms븨]½Áý©s¸¾KZë8`w»ì/HNªõOYŽ~µ¯˜€ÙTÌÑwë]ÛmIQ»ºÖÙÞ[ûÃæµO7ÇÂv8ºZêëÆ'ÀøB}ð@³¼“¼\ÿl}à@£<3é8 ŽÃn—{«u}rR­ÖztÀ j8ùncëTsmïöÕþ`[ûts"êo|JÛi^;|z¨gµ&#ÂQvWçfËzÔÆßÔö7–z ºï’Àܝ€ çx•ÝDGù®/“ôRµ~¹&¬LæÔ IDATþK’K—äǓ
+?Œ „ByÈcòó5LZ p˜!„B–ºúßÕßë^ ôøߦG!„ò“ÇäU©TŠ
+å=G!„B¡ûZà”<_^ánàR”sã¯ÒÝÆs¾ ¡…ɵËu¯»€B-hò˜üC÷¶¡;Š ˆ{Ý„B¡ˆt}`¯ ©TŠçؾý%Ñ¥ïK)PLι؜{,^i9B!„z0¦ç¯ñÞý>–eïNoB!„BèNÀ»‡B!„Ђõ<Ùvö¬[üGü̽ÿD€e¹»Þ7”M¸Èüy® Üm#+ÛY.sainO?-3‚ö”¨ ùÛ3FwHÊ&¿ä¿m&‚ªñdnCdYL™79c7§7®E\zIE3Ž]>¹•Ù‡yÞæÒ(܌˜ôÎtÌËAûs²‚ S¶&Ü:{МƒÒ÷å_îÔ"™M „B¡»Å÷±Ï·ßçùû=·s‡ó^w¡_¼µ!„*Hþs©RÚB¸)tæ3¿hÑM°œñës½î`VÐw«‡¨€¶ö6}% ›?
+µEÆ<ëè̅%!&N^½e_F–A óJª[Ïq}ÏMÿætbõo•_ì ©WÖ&îŒÜt›3îî9ɪI÷„¿óíغÞÂðߺnF×W¯‡M}§½ŒFû6Ôù—‰U³§š‹ìX9øì–þÀm¾ÎôJrӞ ‡›É‰¸»ÁnrèÙãvàþÆiÛø£^ÚE]™~¢´ÜsØjhðs_ÛóR¥R)L‰B!4›w¯×µDîJ³8)€}“=p<¥g¿A!„BhŽr'½É£çÔz†Údwò³—1ûÍBáÝë5â$«4Y çv~T0=ÏhC;äç%Å=oë§^³­ÿwŒ•à:ËÜU[Å05釩ÖÖsº-y±SZØfçží‰öXjMŒÞ`ÛæŒtŒþoK˜/®We5
+µžj•¶Š'™Wk͵féaZCå_N­ó2çZ‹í9B!„*WÖÄ^Q’Ü•f÷wìwô­|’gGY¸­àŽwoö]­³ï
+½ Xhwèf$‚~ћ¹V>KÑ÷ Ù7ÈA¶ïy˜}ï,A¤!#
+S
+¬«ÁB‘ARæ[èҎ ˆ¾‘€™¡ ïE§cR$Q!ÅLï=ì614AmpˆÀ¬ëݬd2¾S^Ó
+Š¨ m»ì)¯©&½¯ëàԐ®BCyúY8¦±>h–N,½ÆâûÛxfÌÀ5ZLÀæG—d'½ÉuzÙS^‹‘!+¢‚d֘½Ÿ³@’éöoùú#sÛ:† j…ÁÝÏÎ>‡™¬×'/Nïß×­^¾ÃF¥¿
+o¥o —Ù]»ÒsáZ´å¥nã›é«çPRŒïª#-Yò³Î¾"ä_ú· ñ¿Lßp0¿0$B!„PNmím®Wì¢&Ĥ{×øZc’OJ pî¾y¾«uܺ³ttn8Øh‰ÎžfNÑé[c«´ ß&+O¯É¼w–©a&ý*ø{KDۖ8ÛçxÕl¨aLì¾ÏÙUbkÃôUºÒ¾Pô-¹À4›,6Ï©xVǕ–ã­·!„Ѓ#÷0½AËXיÂGüìp„¿>Î]ŒÄùMJS©æ’Üìû@Û;¡`ó‹&zmzÑ°f®õžöšõ ³ÆÒóUÏø¹vî6Àm¾åG{O{ÍzšfLށ>ϛ4ÜæZÿ6Þ{Úk®¡é³÷tïøß[¹B÷œÖ:m&†”bû=¦š®1yŽGÄ_ú¥X5€F­Ö,£M¯ºo\½Qð’ÑõiM‘†=Ð6Ðc®¡I’²¾Õâ8äih1s»kßpýéAç&3MÓ¦—›ƒ§ë t]’óô’Ú¡è…p¿ÛÀÐ4͘ÖAUŽïga=ÞcÖËýŸ
+B2®Ý9s “=¯é‡wû@à|¡¤Ø³…I¯áÃ]£bÓÑÇ%Uc%t}8}aÚb¨ÖM©~b}÷ßaOçô÷£7–ːˆõN¯+·ÑþqqÃTr¡©³Äûÿ§Y§[Ë¿¸gèc‹tÞôOÕZ_÷ÞúwêÖÕDsMÔöôÖ|Ë@SµA¼~ϑA!„º/dOìUAã–Æ’îùæ7šÕ*µ†Ò(UïÊy÷0üÿìÝLWº?þg"ˆ<(YyD+©2(T7‰:N»*f[%涺1mô Î"§½
+¼ë ¢¦‰ÌøÐ…N4$Ï:{s2–ô¯[Ý/qLˆˆ¸2m¹Çæþ`Xˌu_$*2i‹t|
+]ÑÌ=\â D¡( )¢z£ßü ¾å«h÷åQߎĝÊçý~g­™Í'¶Xhqû¢c}¾Û™÷Çå Ùþe÷_ĶԨJwÈñýãQ¡T0l5ðEüüÆŸÎðÄj\Ú§Š³Ëù4í\K
+`ýržÐ¯Íç‰þ­ÉöÉâÖN›óÐ-Wê""ºí»CöÉ,½¸6’Çñ:MŽs‰hÁä.Í}}ôö~ã½9%¿.ÓϦ§|Òê´æ2“õI½0é8a³ ”
+ÎÜÇÑnšh¿žî3빚ך£?Æ=e»vé:kgD
+ÊA¤—OÂf!2¡;ähs¾åäŠ8N7Neyz8ë«iž*ÎeÑOÓ.)€öËzBwÞu›/½mé}Þ¼¨Vç>të¯%"º3«*Õ§Èq.-ö‘ÜE£·«D†4=˲ÂFÁRf²ï1KÛ$±T”¶Ii§ÒQ×k»{-•=_”ñpðBµjV6¹Áâð‡dùª¿á©ÝcKÄ
+hH»
+…•¯ôÚûZˆf~ëê?H6“¡ÄX1´±æ¼/19ÂîõÛ6…*zýƒ;½y–óm!"‡ï|n¨b‡^¿£bˆ·ù¿\ÐLŠ$»×oÍóWìÐëKvºBbà,+\z»ÖY[^¸A_ÙìmþŸAK´ÞøùÑZï*
+ûñÝ +€ª¸
+Ã0‡kÖòÛӔ«X=
+×n¾ýN•çƒAv½X᳇ý–´ÃqùÄ0L×ð-»À¥vå,ãRÕù[xRÚk+û¨Q¹8k,"šõ7£*;ßõ̯{“Ú>u›ˆ‚Xú¿}4;#œöïP†aº.gÑÎú|u¥KDjÐôÀNyk•ó»´•þ({Oµw~C‘+âd9wN<D¤†=…‰Ñí<ñŽöH³~ÏôgrÚýá!›Þ¢Uý:9Ž8ðÇ@ɜ|Æ¢73ò§_Y\q°ÔûC
+²Î6zÙ·Y³€sçÉôHîÒàÑ[€U‚!¢[±QÊ0»dÁTçË\g¼#?FµºÍ–gí]o9¸|¢Û~óÞ߅ …¿ ²zÓüW̸~Éßc¿–8án¨ráyE¾¸¸ZLÙ¹´½AÛ¦û•¦Çlz€¸ôOO‘<"+c
+òIØ,h‹´ÜºŒ q]qhöòÞ.“È+!_ÃÞ^ñÙþŸ/HøÕby{cQ‹KVíÂRòìñGo{~9zX”™ÙôÈå¬HÍÇ•«aL`€U®ÑWýŸªåŽ`µðœó`6=@NÉÙô3KÈ*Wù΀_%üZ pwE>–.|=ȕ–pbðzØPúëþMKÈd—,Ì8Sô_œ÷ÖÒrôDôkÏÑÀ­Yîî;L¥€_¬5ÉÕ&V•ðxØyÜ%Ëòr°!ېSòë³é`5Rêû#·°]tâ‘ee¹Ãù™Èç*™|><5kgàˆå*“oÃßÔ1 Õ¶§¶aæXϙöك·g¨ã~G™/f†áxÁvĕ…aϸšÚ›:Ã]Ú tÛoí³/Q5°s²êóÅJŽeXŽ·ý·'ç~»hðß&€ŸÒô°òÍI
+­çoÅÌ\ºsÇ=öÏ,°¤A)ìcKÚÕ°/1âPa¯—(:öÏHêRfŽ¾u?ÊQð˜±üT]8dϲŸˆLÛ>¬š±€ë]sqÔ¬å·ãV¤ÇßÀlzX]:?:ɕŠZÉ"
+[KÙøY·~Šq.a˜îà°E;ó/hÄ[b¨OĹ´A‰ ,S;<éàgý{`ÎPÃý…OOÆblâhOÁ†±X,ÓþÄYŠ³ ÄSe‚»À0LãáF½È"Y˜³é`•É#ÓѶE”Ïô|á“Ïô™t¼¸Eä‹y¾ˆ§y¹f_$jÙªM¾ÕnµLo²üD¨¥Úl,3™7;N ¥ž•¬¨Îò6"
+^»´;?Po)/yð¡.ñ`Gð˖œAÞÍ ¶}ÂЩÜåãÿy¾ùq¥\_Ph´ Mg]»ùìû‰H>5$ì³eèàÞcb±X˜”åà>šµ„lªéÉï™rôDèuËR•ULÔà _­+|" û3µ_à:®p—TÅU¸Ã¯)toيYó··êr=
+@6Æc—Úž!Û% ÃÌuš}m—Þ6giÏjøÝ»vÏÙ٘ ·ïgô+Z³·Ëù¼+w»Å8Yãìò6ßÛ>²cˆèVlt¹Ãꃝò IDAT¸
+˜µÌٛ“Öbv!—"rÁ¥¨v~º[Uv|Ó¤ëòwmʸyšù‡Â?ÊޏÚ÷KNÚ6->Ȭa›ÎŒ‘ñ>ôۆákÃñýšÍ\–YÞzémËC(ïv´²˜%"w9¤­}»’›0fïV9¤é`åc&Y÷&5G¯iD#«ã”Ûù¬M(–7ÎûÍyÌyŸ/Píÿѹþ8dÇ«üÍ¡ÙêŒþ½!µn³ §Ï¼' ¥‚±Ì,F…ú½.ېã‡ÁñGD¤Žëâce
+Qt`ñÞFÙ"\oôõÖ^hÞ/oiîÙ¸èÈ`UBÑXùR'öt‚åQ£ë#·°Ç¢Ññ‘ïƒò™^S¯]§Q"
+,ñíû®Õ÷ŒwÛ֑†H«Ñh‹yþ™–[7í›h|úf|PÞÙ×#œI<Pöq¿ýÑ45Ðá”Ò𗱳ɞ?í~oÃ~eÊolù¸Ë$rDdy©‘Úö'NaÇ+ Ñ8¿¹þCöwLÊ×ÚÒ&̛nÞ¶hgþ_¢ÉÓfêênä #‹ìÊ߄(Oý§_™¢L:@ª5X{V—<2mm[DùLßÈ>ùLŸINj[D¾˜ç‹xš—WõE¢–­3yXíVËô&ËO„ZªÍÆ2“éq³ãÄPêYÖéÚå,o#¢ÀDÆÒ,"Ѫ‡Súߖè_ðG‰JÎÛ^«'¢¡ "Ö0ì;:é0ð¼q·µ÷ëH²qrPâÌöC¶ø¦esšG¡:˜Õ¸ØšÚ¸¬(}çYHo$
+9%¿.QôV™|Òê´æ2“õI½0é8a³ ”
+A•Xˆú§‹×«á~ûË9V]`„ñ0<3=DdX·ô’ëì&‡tç‚S–þ7Òñïwµ˜ª÷ÕvíÃmóC5䉦î‰üà¥uÒ}
+cƔb}Â!þ?Ÿ;$¡û¯]#g8¾H¿Ú@*½€•a˜Ôº7,Ë
+ûÉ9Ê_~„°28Ž8jÖòۗ´zÀ*Àß@mzXù2¦¤ó§_Y\q°ÔûC
+_Ž¿¿<-Žô–›‰c·å%å¾<Sϧ—†ƒß~Ë:å0V»ØR%rW[ͽíDDSá
+ãÓ!¡fðÚè°ß£è4Ú<ñ6Ê_Ý¿w_ò_Š¿Îlɾ¿ýC‹u1‘¯È6ä”üºdˆèVltYƒ¸¿8â“Ûñ½i·Y”Œ
+ûˆH•[
+J:GRùüxíºbS
+¹K9÷áKÉ>“2í'"Ƕ«fn‘wvåb¦ñpcíÁZ~;n
+ŠÞÀʗ:±·ó£“\©¨•Œ!¢Ñét´]t¼ëR2Ì©ï?n7l↤ʞ‹îdoò9§YØ|†Ég…í&çg2M×f‘?i7ð,“Ï÷؃9ËÌL…Û_¬ä׳ ËŸ© „»#WzÍÛy†a¸M†–^yVcŽeòãÕä5ºÎ9›8&Ÿ­<â‘Ï9¥<Ã0opœ &ÛÄ+É0 Ó3ä©|T˜ÓùüÂ2q–wª"Wòô…„::5%rôDòŸ¢ɹïúý桶ÎlWš§!ÒƇjø|¤åƒÚԃœØ2|mXZ—ëv-}P
+¬|³rÐydÚ"Ú¶ˆò™¾‘/|ò™>“Ž·ˆ|1Ïñ4/kì‹D-[µÉ·Ú­–éM–ŸµT›e&Óãflj¡Ô³’µÑYÞFD‰Œ…oÔ 4¥=qfû¡Äï²¢¹³ûãJÎ2_«'¢¡‰ÄQ]ÞLK!̓³Ìï<;éÆèÈQÿm
+÷Û_vdl¼Î@DÃ?%“Гƒ—ۄŸc™Y–¯«)Ò4œ¶ž’ÍÇmÉý­
+‰Mƒ3vÓÄ@ûõtÿ–XÏÕ¼Öý1^†íÚ¥ë¬u¥‡Úû¾2>¬MsîlK”ty4vgúÐT¸bÇ~zî´r±Ç*¥,2,÷´s§t¡ÆOÌ´?áÎåérF¾z ېSòë³é`ÕaYVØ(XÊLö=fi›$–ŠÒ6)íTz"êzmw¯¥²ç«€2^è±Vyî„#w(UÕ)RBþÖÚ"
+O%6Xþ,_õ7<Õ {¬#["ºvéê÷:ü!E‘ƒG«ë{/dÎSç ]»tf[Kຢܺ•—[Zïe’^•Ç2VÒon•†š+½š®K$µÕNo$ÚÜ$&Û°|]U‘ÆýŠ/})Õÿm{¸¯› ûýòõ`¯³ÂÔªÛÕfçs\ÐÝ ZU¤ñEãÛÊßꢺö=¼ÀŸ|«å6×[ßì‘o(rÈßR]¡û]‡Í¸?.:æ×Ue -¤é`åK3±—%ÝFéa“$IÒ6‰+âÒæè‰ÈøºïlkÙÑÚ
+ý†ÂÊWzí}-D"¢õÆóoÕ:«w¬eL5-âËý»7jôXãgõ$›ÉPb¬ÚXsޗqv|œÝë·m
+Uõúwzó,çÿڒ½±5Ï_±C¯/Ùé
+‰ý³ º £Nš^mÊtÔp°‹¢#ºÇº’uö^uitµ¶âY‰õ¶ÃâȟÒVùa53¹uâLƒ×.íÎÔ[ÊK|è@£K<Øü2Ûµßý ¶}ÂЩDùxå\ˆ¢#å¦òÔgöv…?i)y@_ò[ëP±=ÿ3í'""ùԐ°ÏF‹‡%d`囵„lªéÉï™rôDèuËR•ULÔà _­+|" û3µ_àŠ¬°,TÅU¸Ã¯DtoيYó··êr=
+iÝ­¼žÃ0ü“ÎÔs“wµ§F`ÖåY1¨Vžåw;ÞIöHˆˆnû¢}vøªõ±ÚEƒË@:HÓÀÊ7gb¯z[í<á2î6›ž4KÏXgzä˙©_y˜µ)éïµKü灱éüðµáákÃß]î"¢øöðµáî­i
+±ÿÛÑÑoû¥nÓS®ìûsXRÀÙ/¤§Úè—ú//Yò|å;ê‰HUU":û[žG¹ÔíL퉈]gìx«cAW‘Y›Ïý[“í“4OEØ?î׎tZßiÙf¬Ë—íãÈÒI&}'B†—Ä…´_2„Þï[xÏ°J0±X,L(Â+Y!£Ÿ)O¯’ço>×EŸ°Ç¢Ññ‘ïƒò™^S/="I’dØb Ù5U*9VûépÏã|ü­rѦ¢7‹©¡·Õ(°DDò…–óÑX,¦Ž{
+6ì?{sÒZÌ‘ªôèŒþK[ª…ˆæ¶ï)Øp`x2&ä)ÌZ}Ê~OÁ†ý£?ÅxÊ°?Ÿ†IîO;Ô¢ÖF2^Hb m”][883ÄœR˜µúÓ7'mÅlj$3ÛSáLí³|ñç,0vˆà{•5/ݔ¥èÜSäOl%Õ½Òk—oš–ÜIÚH ,S;<éàg]Eږªâ,(qÅÔÕR^ÉqÄQ{°–ßžf- "Ž¿ab6=¬2ydÚ"Ú¶ˆò™¾‘/|ò™>“Ž·ˆ|1Ïñ4/™î‹D-[µÉ·Ú­–éM–ŸµT›e&Óãflj¡Ô³’¹r–·Q`"Gaš™öÅ6"
+FUu"0{¿5ÞO¦ý ¸ò¥œåBÔ ”è¡&a­žˆ†&2¿ØöK`8Ô߸5b}ª}þ!á÷=DÔ|Xº›NÒ
+EIÈ[XÓ<¢# ìV¤é`å›5©9Ÿ´:­¹Ìd}DR¯L:NØ,¥‚¸Mä´i¦ýJëÈû}$ù6òƒ/±¥ÊóóëîÀ€ßÑwúíšÔ³zƓU×{ˆÈ É1a|N{ã:–]g "ÏÌ~2ïÏ}–p– ‰G2üSlÚäàåÁ6!c$‹m¿4m>ýoëþæ®àzÿ:ÑåÑ؝…õ{gŒòtw¬Hk°ö:¬6,Ë
+…•¯ôÚûZˆ4DDëçߪuVï,X˘jZėûwoÔè°ÆÏê?H6“¡ÄX1´±æ¼Ï‘¾ëç_bmO$Úû½öøN‡ï|n¨b‡^¿£bˆ·ù¿tdߟÒÎ~!v¯ßšç¯Ø¡×—ìt…ÄþÀÙøþCmn()´~ž³©½:hzµiAW±†=͏hs·»GØö C§Tn^>5$ì³Ý]\°1Dt+6ºÜaÜG³–M5=—<SŽžˆ½nYª²Š‰z8á«u…O„ba¦öi×ý%Ëð¯îB–‹ª¸
+wøãE²³³æooÕñ÷¸ÎÏ/Ã0‡±„,@ÉßQ×àW.X½ò§_Y\q°ÔûC
+)!_ýÞ^ñم..
+‡Ç]²,ÿüñ$­ÁÚë°
+©aÕý‘[Ø.º?ñÈò
+ÿ;f|&½ã£ ÿÐ̯ºÍ‚PœøoP*t}Úx²¤•ÈADžç­Êﺔ}
+¢Áôh´ÐPï י²ì’¥°¯ákQ•8"RÿÙ90¡u·ðùDÄw{ l ²Qh ".3•Í]«6Ó~îQ§ð5»ÐÈ`ù¬ÁÚë°ªt~t’+µ’1D" "Ž¶‹Žw]J†9õýÇí†MÃ0‚TÙsѝü3J>ç4K›Ï0ù¬°ÝäüL¦é*(ò'ížeòYã{0לõEõ³ þ§Âí/VòËä³Ægêa•ˆX–%¢ýZ¿ §ngjŸ]à‡P<Àô´ñ´’*Y4&ða‹Qà†áxƒý=–°)s™Ë;U‘+y:ØPG§fã¡J.‘
+‘6>TÃç#-Ô¦äĖákÃÒºœ·dɃRð}‡nOKbÿ:©£³›ÏO¼‹Þ‰Rž&¾í‹Dù2žÔpxö<ýLû‰¨}Îñ~pA¡ßkÈ6ä”üºDÑX]ªöXWCÞ벟(t[*aåÊ@ø3¯y›¨™Î‡¦
+4ž<?zsÔs¬ÆUåHPeCU“¼¹nðÚèè?‚Î縦jsò,óq¥ÛôKÿì­0gB¾¤~²÷ßSmtKý—‡Gƒ—,y¾òõD¤ª*ýÇ-Ï£\êv¦öÙUžP{þôKc½åæöœ2û’ƒ;ÿã¨å˜gôæèùjÞ³—ÇÿӐ) v±ã­ŽùÝp’SZ­û<ñπÖS²ô†#yÔ}Ä'>×EDÒöèØɞ”
+5û~"_2„ÞïKÿ)À/CD·b£ËÀ}TÈègêÞ¨äù›ÏuÑ'ì±ht|äû |¦×TÄKH’$¶(Ö¹•«ýt¸çq>þV¹hÓ?ыňÔÀPˆÛjX""ùBK‰ùh,SÇ=öŸ½9i-f‰HUz
+ŠY"šÙž
+gjŸ>Ü9÷l80<Øô’:VbcÌ<Ôöé ý#KsÅÜbÈó¿h¨øªJ•ÛUÅU oüW̸žˆˆÂ>¦°¢ãÛa[‘†ˆ*ÔG_ 7RÚYÞyº³Áak)?ëÖO1.ÇÅ0LwpØ¢ùwN4â-1Ô'~º–6(‘ej‡'|ʕN…Ýt8ÚNJ;ú?p°D4¥˜ž°š^ho{ÎL¹ó棌ªâɸ?þa)΂WLûXÃπa˜Æ͵kùí¨¹^òwÔ5X{V—<2mm[DùLßÈ>ùLŸINj[D¾˜ç‹xš—ŸõE¢–­Úä[íVËô&ËO„ZªÍÆ2“éq³ãÄPêYÖéä2Ëۈ(0‘¥ŒÌRúÉÒ¿:á=”œó½VODC‡_lû¹ۈ(U³_Èì+6 ûN‡N: <oÜmíý:²ä0¤7£#Gý·)ÔáÒníHäè‰ï:ˆ¨iG‰^¯×ëõC:ѐ<ëìÍÉXÒ¿nu¿Ä0 "âÊ´yä›ûaYˌu_$
+"i‹t|
+]ÑÌÏÆ%
+À¸ŽÍ~!³L);¢ûœOVÏ[ö‚êÃ`ùºš"MÉ`ë)Ù|ܖÜßú§Ø48Ó×h7M ´_O÷ϒõ\ÍkÍÑã•aØ®]ºÎZWêñp¨½ïë!ãÃÚ4çζÔAI—Gcw’7'\±c?=wZ¹Øc•øäªÜÓ~̝҅?1Óþ„;c”§Ë9,/¤é`å›3±—eYa£`)3Ù÷˜¥m’X*JÛ¤´S鉨ëµÝ½–Êž¯Êx8x¡ÇZåM¸ŽÜ¡hTU§H ù[k[ˆ(<•8Ø`qøC²|ÕßðTƒî±ŽlÙæ%õ“­ÿ|¡k—Îlk \W”AסòrKkòøØD”ælgmŸ‰#5€]]|~Ž ™}ÉÑý–rׁð¸¢Ü˜®Ç’% UvËXß¿¹Uj®ôNhºþ-‘ÔVo8½‘hs“˜lÃòuUE÷+¾ô]¤¬I`ûØÃ}ÝdØç运¯û{¦VÝ®6;Ÿã–ÜÍ UEÿXâsQþV?Õµïáýþ䋈X-´¹Þúf|C‘Cþ–ê
+úÊfoóÿ ÆÓʙÂP'M¯6eŠÄp°‹¢#ºÇº’Õÿ^uitµsŠÚ·Gþܐ¶ö«™É­g¼viw~ ÞR^òàC]âÁŽà—-9oÈÝ jÛ' Jü»B9¢èH¹©<õEDę‡½]áOZJЗüÖ:TlÄ?÷Lû‰ˆH>5$ì³Ñr@¶ §ä×%–€•#>ýä\ïŒë»R ×-KUV1Q'|µ®ð‰P,ìÏÔ>¾ÂêÝæÎÔϽê~9TÅU¸Ã/toيYó··êr=
+p?` Y€œf–]îH{ó§_Y\q°ÔûC
+¦`da<v©í²=QÂ0ŒÁ\§Ù×véms–ö¬†ß½k÷œáÉ p{ýdÙo-!`¸ÍÞ.çó®Üíãd³ËÛ|oû\8drJ~]2±X,LÊòFp_%(øÅ
+_Ž¿¿<-Žô–›‰c·å%å¾<Sϧ—†ƒß~Ë:å0V»ØR%rW[ͽíDDSá
+T¹áÇ쁀Ϥw|ôšYýU·YŠÙø¶P*t}Úx²¤•ÈADžç­Êﺔ}
+Ž“Á,—–ºòQan“¡¥WžsÉDø°Å($:´¿çŸ@*Ë;U‘+yúN„::5Ur‰T¸ü熨Frnç»~¿y¨­3ÛÍÊÓiãC5|>ÒòAmêANl¾6,­Ë~¿é.¥àûݞ–ÄþuRGg7ŸŸx½¥<M|Û‰òe<©áðìyú™öQûãýàܽ°xk°ö:üÿíÝH›wÀñÏSlÉ#ݑˆ–$t£‘v4Y¯,n;Öx+m<MoƒšR˜iwTíý1ݍUÝØTŽuǪvŒ3;XkˍêàNìfvÜh×5ŽƱrÉXSÖÃH;Œ¬âf!÷GҘZ§ý‘»ú~‘?ž|ò}¾ÏçùF>ù>ß/°¢Tîr/„}#‘ð5-E¿ŽýÕçÜbÕÝ(Yf
+ÃVZV1º¾êŒ?çî©Ëê'wÿu¾€» P±Õl.}̶û“ñžÜP_ZäþglÞq¶öËHønjÛÇíÕ¾—*
+Ñ 1ÊôdC™À
+½Ëw
+ezòæ¿ø½sü'XŽIEND®B`‚
\ No newline at end of file
/branches/v1.0-menes/papyrus/documentation/modele/sql/papyrus_general_donnees_test.sql
New file
0,0 → 1,220
# phpMyAdmin MySQL-Dump
# version 2.5.0
# http://www.phpmyadmin.net/ (download page)
#
# Serveur: localhost
# Généré le : Lundi 10 Mai 2004 à 14:35
# Version du serveur: 4.0.15
# Version de PHP: 4.3.3
# Base de données: `tela_prod_genesia`
 
#
# Contenu de la table `gen_annuaire`
#
 
INSERT INTO `gen_annuaire` VALUES (1, 'fr-FR', 'GRANIER', 'Alexandre', '670b14728ad9902aecba32e22fa4f6bd', 'alexandre@tela-botanica.org');
INSERT INTO `gen_annuaire` VALUES (2, 'fr-FR', 'MILCENT', 'Jean-Pascal', 'bb3a0c91229a891187492444c5760e2b', 'jpm@tela-botanica.org');
INSERT INTO `gen_annuaire` VALUES (3, 'fr-FR', 'LE BOURG', 'Tamara', 'e10adc3949ba59abbe56e057f20f883e', 'tamara@tela-botanica.org');
INSERT INTO `gen_annuaire` VALUES (4, 'fr-FR', 'MATHIEU', 'Daniel', '4aad7a31ef189458ce3f8d87ec973bfb', 'dmath@tela-botanica.org');
 
#
# Contenu de la table `gen_application`
#
 
INSERT INTO `gen_application` VALUES (0, 'Inconnue', 'Pour les menu ne contenant auncune application.', 'inconnu', 0);
INSERT INTO `gen_application` VALUES (1, 'Administrateur des sites', 'Permet de rajouter des sites sur les serveurs.\r\nProchainement permetra de gérer le cache, les squelettes et leurs fichiers CSS et JS.\r\nPermetra aussi de visualiser les statistiques de chaque site.', 'applications/admin_site/admin_site.php', 0);
INSERT INTO `gen_application` VALUES (2, 'Administrateur des menus', 'Permet de modifier la hiérarchie et les informations concernant les menus d\'un site.\r\n', 'applications/admin_menu/admin_menu.php', 0);
INSERT INTO `gen_application` VALUES (3, 'Afficheur', 'L\'application standart qui permet d\'afficher du contenu XHTML dans les pages.', 'applications/afficheur/afficheur.php', 0);
INSERT INTO `gen_application` VALUES (4, 'Plan du site', 'Application affichant le plan d\'un site Génésia.', 'applications/plan/plan.php', 0);
INSERT INTO `gen_application` VALUES (5, 'Inscription à Tela Botanica', 'Application gérant l\'inscription dans l\'annuaire Tela Botanica.', '../client/applications_client/inscription/inscription.php', 0);
INSERT INTO `gen_application` VALUES (6, 'Annuaire de Tela Botanica (front office)', 'Application affichant l\'annuaire de Tela Botanica.', '../client/applications_client/annuaire/annuaire.php', 0);
INSERT INTO `gen_application` VALUES (8, 'Cartographie des adhérents de Tela Botanica', 'La cartographie des inscrits à Tela Botanica.', '../client/applications_client/carto_adherents/carto_ad.php', 0);
INSERT INTO `gen_application` VALUES (9, 'Menu classique mono ou multi niveaux', 'Génère une liste de listes correspondant à la hiérarchie des menus.\r\nLa liste dépend des paramètres passés dans la balise.\r\nBalise de type MENU_n_m : affiche tous les menus de niveaux n à m.\r\nExemple :\r\nMENU_1_1 : affiche tous les menus de niveaux 1.\r\nMENU_1_3 : affiche tous les menus de niveaux 1 à 3.', 'applettes/menu/menu.php', 1);
INSERT INTO `gen_application` VALUES (10, 'Menu commun', 'Génère une liste de menus communs à l\'ensemble du site.', 'applettes/menu_commun/menu_commun.php', 1);
INSERT INTO `gen_application` VALUES (11, 'Sélecteur de sites', 'Génère un formulaire permettant de passer de site en site pour une langue donnée.', 'applettes/selecteur_sites/selecteur_sites.php', 1);
INSERT INTO `gen_application` VALUES (12, 'Identification', 'Génère un formulaire permettant de s\'identifier ou fournissant les informations sur la personne identifiée.', 'applettes/identification/identification.php', 1);
INSERT INTO `gen_application` VALUES (13, 'Vous-êtes-ici', 'Affiche la suite des menus visité, sous forme de lien, pour arriver au menu courant visioné par l\'utilisateur.', 'applettes/vous_etes_ici/vous_etes_ici.php', 1);
 
#
# Contenu de la table `gen_i18n`
#
 
INSERT INTO `gen_i18n` VALUES ('fr', 'fr', '', 'iso-8859-15', 'Français');
INSERT INTO `gen_i18n` VALUES ('en', 'en', '', 'iso-8859-15', 'English');
 
#
# Contenu de la table `gen_i18n_langue`
#
 
INSERT INTO `gen_i18n_langue` VALUES ('fr', 'français', 'ltr');
INSERT INTO `gen_i18n_langue` VALUES ('en', 'anglais', 'ltr');
 
#
# Contenu de la table `gen_i18n_pays`
#
 
INSERT INTO `gen_i18n_pays` VALUES ('FR', 'France', 'FR.png');
INSERT INTO `gen_i18n_pays` VALUES ('UK', 'Royaume-Uni', 'UK.png');
 
#
# Contenu de la table `gen_menu`
#
 
INSERT INTO `gen_menu` VALUES (1, 'fr', 1, 0, '', '', 1, 'config', 'Configuration', 'C', 'index,follow', '', '', '', '', 'Configuration des sites de Génésia.', '', '', '', '', '', '2004-04-22 21:35:44', '2004-04-22 21:35:44', '2004-04-22 21:35:44', '2004-04-22 21:35:44', '2004-04-22 21:35:44', '2004-04-22 21:35:44', '2004-04-22 21:35:44', '', '', '', '', NULL, '', NULL, '', 2);
INSERT INTO `gen_menu` VALUES (2, 'fr', 1, 1, '', '', 2, 'sites', 'Sites', 'S', 'index,follow', 'Administration des sites de Génésia.', '', 'Administration, sites.', 'Interface d\'administration des sites de Génésia.', 'Administration des sites de Génésia.', '', '', 'Tela Botanica', '', 'Tela Botanica', '2004-04-22 21:38:30', '2004-04-22 21:38:30', '2004-04-22 21:38:30', '2004-04-22 21:38:30', '2004-04-22 21:38:30', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '', '', '', NULL, '', NULL, '', 2);
INSERT INTO `gen_menu` VALUES (4, 'en', 2, 0, NULL, NULL, 1, 'config', 'Configuration en en', 'C', 'index,follow', 'Génésia\'s sites configuration.', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '2004-04-22 21:35:44', '2004-04-22 21:35:44', '2004-04-22 21:35:44', '2004-04-22 21:35:44', '2004-04-22 21:35:44', NULL, '0000-00-00 00:00:00', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1);
INSERT INTO `gen_menu` VALUES (5, 'en', 2, 1, NULL, NULL, 2, 'sites', 'Sites in en', 'S', 'index,follow', 'Administration of Génésia\'s sites.', NULL, 'Administration, sites.', 'Web interface of Génésia\'s sites administration.', NULL, NULL, NULL, 'Tela Botanica', NULL, 'Tela Botanica', '2004-04-23 14:23:45', '2004-04-23 14:23:45', '2004-04-23 14:23:45', '2004-04-23 14:23:45', '2004-04-23 14:23:45', NULL, '2004-04-23 14:23:45', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1);
INSERT INTO `gen_menu` VALUES (6, 'fr', 1, 0, NULL, NULL, 6, 'menu_6', 'menu_6', NULL, 'index,follow', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'Jean-Pascal MILCENT', NULL, 'Tela Botanica', '2004-05-03 17:51:15', '2004-05-03 17:51:15', '2004-05-03 17:51:15', '2004-05-03 17:51:15', '2004-05-03 17:51:15', NULL, '2004-00-00 00:00:00', NULL, 'menu', NULL, NULL, NULL, NULL, NULL, NULL, 2);
INSERT INTO `gen_menu` VALUES (18, 'fr', 1, 2, 'site=essai1', '', 18, 'menu_essai1', 'Site essai n°1', '', 'index,follow', '', '', 'test', '', 'Administration des menus du site essai 1.', '', '', 'Jean-Pascal MILCENT', '', 'Tela Botanica', '2004-05-06 14:59:37', '2004-05-06 14:59:37', '2004-05-06 14:59:37', '2004-05-06 14:59:37', '2004-05-06 14:59:37', '0000-00-00 00:00:00', '2004-00-00 00:00:00', '', 'menu', '', '', 0, '', 0, '', 2);
INSERT INTO `gen_menu` VALUES (15, 'en', 2, 3, '', '', 4, 'aide', 'Help', '', 'index,follow', 'Help of Génésia interfaces.', '', 'Help, Génésia.', 'It\'s the help of Génésia.', 'Help of Génésia interfaces.', '', '', 'Jean-Pascal MILCENT', '', 'Tela Botanica', '2004-05-04 13:31:26', '2004-05-04 13:31:26', '2004-05-04 13:31:26', '2004-05-04 13:31:26', '2004-05-04 13:31:26', '0000-00-00 00:00:00', '2004-00-00 00:00:00', '', 'menu', '', '', NULL, '', NULL, '', 2);
INSERT INTO `gen_menu` VALUES (11, 'fr', 1, 3, '', '', 4, 'aide', 'Aide', '', 'index,follow', 'Aide des interfaces de Génésia.', '', 'Aide, Génésia.', 'Contient une aide sur les interfaces de Génésia.', 'Une aide sur les interfaces de Génésia.', '', '', 'Jean-Pascal MILCENT', '', 'Tela Botanica', '2004-05-04 13:31:26', '2004-05-04 13:31:26', '2004-05-04 13:31:26', '2004-05-04 13:31:26', '2004-05-04 13:31:26', '0000-00-00 00:00:00', '2004-00-00 00:00:00', '', 'menu', '', '', NULL, '', NULL, '', 2);
INSERT INTO `gen_menu` VALUES (9, 'fr', 1, 4, '', '', 9, 'plan_genesia', 'Plan du site', '', 'index,follow', 'Plan du site d\'administration.', 'Plan du site d\'administration', 'plan, administration.', '', 'Plan du site d\'administration de Génésia.', '', '', 'Jean-Pascal MILCENT', '', 'Tela Botanica', '2004-05-03 19:24:29', '2004-05-03 19:24:29', '2004-05-03 19:24:29', '2004-05-03 19:24:29', '2004-05-03 19:24:29', '0000-00-00 00:00:00', '2004-00-00 00:00:00', '', 'menu commun', '', '', NULL, '', NULL, '', 2);
INSERT INTO `gen_menu` VALUES (8, 'fr', 1, 3, '', '', 5, 'accessibilite', 'Chartre d\'accessibilité', '', 'index,follow', 'Chartre d\'accessibilité de Tela Botanica.', '', 'accessibilité, chartre, handicap.', 'Fournit des informations sur l\'accessibilité de ce site.', 'La chartre d\'accessibilité de Tela Botanica.', '', '', 'Jean-Pascal MILCENT', '', 'Tela Botanica', '2004-05-03 19:21:29', '2004-05-03 19:21:29', '2004-05-03 19:21:29', '2004-05-03 19:21:29', '2004-05-03 19:21:29', '0000-00-00 00:00:00', '2004-00-00 00:00:00', '', 'menu commun', '', '', NULL, '', NULL, '', 2);
INSERT INTO `gen_menu` VALUES (16, 'fr', 1, 0, '', '', 16, 'gestion', 'Gestion des menus', 'G', 'index,follow', '', '', '', '', 'Gestion des menus des différents sites', '', '', 'Jean-Pascal MILCENT', '', 'Tela Botanica', '2004-05-06 14:52:48', '2004-05-06 14:52:48', '2004-05-06 14:52:48', '2004-05-06 14:52:48', '2004-05-06 14:52:48', '0000-00-00 00:00:00', '2004-00-00 00:00:00', '', 'menu', '', '', NULL, '', NULL, '', 2);
INSERT INTO `gen_menu` VALUES (17, 'fr', 1, 2, 'site=admin', '', 17, 'menu_admin', 'Administration', '', 'index,follow', '', '', '', '', 'Administration des menus du site d\'administration.', '', '', 'Jean-Pascal MILCENT', '', 'Tela Botanica', '2004-05-06 14:57:23', '2004-05-06 14:57:23', '2004-05-06 14:57:23', '2004-05-06 14:57:23', '2004-05-06 14:57:23', '0000-00-00 00:00:00', '2004-00-00 00:00:00', '', 'menu', '', '', NULL, '', NULL, '', 2);
INSERT INTO `gen_menu` VALUES (19, 'fr', 3, 3, '', '', 19, 'menu_19', 'menu_19', '', 'index,follow', '', '', '', '', 'essai', '', '', 'Jean-Pascal MILCENT', '', 'JPM', '2004-05-06 15:01:40', '2004-05-06 15:01:40', '2004-05-06 15:01:40', '2004-05-06 15:01:40', '2004-05-06 15:01:40', '0000-00-00 00:00:00', '2004-00-00 00:00:00', '', 'menu', '', '', 0, '', 0, '', 2);
INSERT INTO `gen_menu` VALUES (20, 'fr', 3, 4, '', '', 20, 'menu_20', 'menu_20', '', 'index,follow', '', '', '', '', '/genesia.', '', '', 'Jean-Pascal MILCENT', '', 'Jean-Pascal MILCENT', '2004-05-10 10:14:58', '2004-05-10 10:14:58', '2004-05-10 10:14:58', '2004-05-10 10:14:58', '2004-05-10 10:14:58', '0000-00-00 00:00:00', '2004-00-00 00:00:00', '', 'menu', '', '', 0, '', 0, '', 2);
INSERT INTO `gen_menu` VALUES (21, 'fr', 3, 0, NULL, NULL, 21, 'menu_21', 'menu_21', NULL, 'index,follow', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'Jean-Pascal MILCENT', NULL, 'Jean-Pascal MILCENT', '2004-05-10 10:15:06', '2004-05-10 10:15:06', '2004-05-10 10:15:06', '2004-05-10 10:15:06', '2004-05-10 10:15:06', NULL, '2004-00-00 00:00:00', NULL, 'menu', NULL, NULL, NULL, NULL, NULL, NULL, 2);
 
#
# Contenu de la table `gen_menu_cache`
#
 
 
#
# Contenu de la table `gen_menu_categorie`
#
 
INSERT INTO `gen_menu_categorie` VALUES (1, 'Relation entre menus');
INSERT INTO `gen_menu_categorie` VALUES (2, 'Type de menu');
 
#
# Contenu de la table `gen_menu_categorie_valeur`
#
 
INSERT INTO `gen_menu_categorie_valeur` VALUES (1, 1, 'avoir père');
INSERT INTO `gen_menu_categorie_valeur` VALUES (2, 1, 'avoir traduction');
INSERT INTO `gen_menu_categorie_valeur` VALUES (101, 2, 'défaut');
INSERT INTO `gen_menu_categorie_valeur` VALUES (102, 2, 'commun');
INSERT INTO `gen_menu_categorie_valeur` VALUES (103, 2, 'traduction');
INSERT INTO `gen_menu_categorie_valeur` VALUES (104, 2, 'copyright');
INSERT INTO `gen_menu_categorie_valeur` VALUES (3, 1, 'avoir suivant logique');
INSERT INTO `gen_menu_categorie_valeur` VALUES (4, 1, 'avoir précédent logique');
INSERT INTO `gen_menu_categorie_valeur` VALUES (100, 2, 'menu classique');
 
#
# Contenu de la table `gen_menu_contenu`
#
 
INSERT INTO `gen_menu_contenu` VALUES (1, 2, 6, 1, 'Essai de contenu.', 1, '', '2004-04-30 16:54:33', 0);
INSERT INTO `gen_menu_contenu` VALUES (2, 2, 6, 1, 'Essai de contenu.\r\nJe tente une modification de ce contenu.', 1, '', '2004-04-30 16:57:07', 0);
INSERT INTO `gen_menu_contenu` VALUES (3, 2, 6, 1, 'Essai de contenu.\r\nJe tente une modification de ce contenu.\r\nEt à nouveau avec des accents et des virugles.\r\n"un essai"\r\n\'un essai\'\r\nL\'autre jour.\r\néàèôûî\r\n', 1, '', '2004-04-30 16:57:52', 0);
INSERT INTO `gen_menu_contenu` VALUES (4, 2, 7, 1, '<h1>Un nouveau titre pour cette page.</h1>\r\n<p>Je commence à voir la fin de cette tache</p>', 1, '', '2004-04-30 17:14:41', 0);
INSERT INTO `gen_menu_contenu` VALUES (5, 2, 6, 1, '<p>\r\nEssai de contenu.\r\nJe tente une modification de ce contenu.\r\nEt à nouveau avec des accents et des virugles.\r\n"un essai"\r\n\'un essai\'\r\nL\'autre jour.\r\néàèôûî\r\n</p>', 1, '', '2004-04-30 17:21:08', 1);
INSERT INTO `gen_menu_contenu` VALUES (6, 2, 7, 1, '<h1>Un nouveau titre pour cette page.</h1>\r\n<p>Je commence à voir la fin de cette tache. Un nouvel essai</p>', 1, '', '2004-05-03 16:23:50', 0);
INSERT INTO `gen_menu_contenu` VALUES (7, 2, 7, 1, '<h1>Un nouveau titre pour cette page.</h1>\r\n<p>Je commence à voir la fin de cette tache.</p>', 1, '', '2004-05-03 16:35:14', 0);
INSERT INTO `gen_menu_contenu` VALUES (8, 2, 7, 1, '<h1>Un nouveau titre pour cette page.</h1>\r\n<p>Je commence à voir la fin de cette tache. Une modif.</p>', 1, '', '2004-05-03 16:43:58', 1);
INSERT INTO `gen_menu_contenu` VALUES (9, 2, 11, 1, '<h1>Aide de Génésia</h1>\r\n<p>Pour l\'instant la gestion des langues ne fonctionne pas.</p>\r\n', 1, '', '2004-05-04 13:34:38', 0);
INSERT INTO `gen_menu_contenu` VALUES (10, 2, 8, 1, '<h1>Chartre d\'accessibilité de Tela Botanica</h1>', 1, '', '2004-05-04 13:44:29', 0);
INSERT INTO `gen_menu_contenu` VALUES (11, 2, 8, 1, '<h1>Chartre d\'accessibilité de Tela Botanica</h1>', 1, '', '2004-05-04 13:44:39', 0);
INSERT INTO `gen_menu_contenu` VALUES (12, 2, 8, 1, '<h1>Chartre d\'accessibilité de Tela Botanica</h1>', 1, '', '2004-05-04 13:48:54', 1);
INSERT INTO `gen_menu_contenu` VALUES (13, 2, 12, 1, 'Un test', 1, '', '2004-05-04 17:23:02', 1);
INSERT INTO `gen_menu_contenu` VALUES (14, 2, 11, 1, '<h1>Aide de Génésia</h1>\r\n<p>Pour l\'instant la gestion des langues ne fonctionne pas.</p>\r\n<p>Un nouveau paragraphe.</p>\r\n', 1, '', '2004-05-05 12:14:11', 0);
INSERT INTO `gen_menu_contenu` VALUES (15, 2, 11, 1, '<h1>Aide de Génésia</h1>\r\n<p>Pour l\'instant la gestion des langues ne fonctionne pas.</p>\r\n<p>Un nouveau paragraphe.</p>\r\n', 1, '', '2004-05-05 12:16:07', 0);
INSERT INTO `gen_menu_contenu` VALUES (17, 2, 15, 1, '<h1>Help of Génésia</h1>\r\n<p> In english.</p>\r\n', 1, '', '2004-05-05 13:33:00', 1);
INSERT INTO `gen_menu_contenu` VALUES (18, 2, 19, 1, '<h1> UN test de Site</h1>\r\n<p>Un nouveau site et sa page.</p>', 1, '', '2004-05-06 15:02:25', 1);
INSERT INTO `gen_menu_contenu` VALUES (19, 2, 22, 1, 'un test', 1, '', '2004-05-10 10:32:20', 1);
 
#
# Contenu de la table `gen_menu_relation`
#
 
INSERT INTO `gen_menu_relation` VALUES (1, 0, 1, 1);
INSERT INTO `gen_menu_relation` VALUES (2, 1, 1, 1);
INSERT INTO `gen_menu_relation` VALUES (16, 1, 1, 4);
INSERT INTO `gen_menu_relation` VALUES (5, 5, 103, 2);
INSERT INTO `gen_menu_relation` VALUES (11, 15, 2, 1);
INSERT INTO `gen_menu_relation` VALUES (2, 5, 2, 1);
INSERT INTO `gen_menu_relation` VALUES (1, 1, 101, NULL);
INSERT INTO `gen_menu_relation` VALUES (8, 8, 102, 1);
INSERT INTO `gen_menu_relation` VALUES (9, 0, 1, 2);
INSERT INTO `gen_menu_relation` VALUES (11, 11, 100, 4);
INSERT INTO `gen_menu_relation` VALUES (11, 0, 1, 5);
INSERT INTO `gen_menu_relation` VALUES (1, 1, 100, 2);
INSERT INTO `gen_menu_relation` VALUES (2, 2, 100, 2);
INSERT INTO `gen_menu_relation` VALUES (19, 19, 101, NULL);
INSERT INTO `gen_menu_relation` VALUES (4, 4, 103, 1);
INSERT INTO `gen_menu_relation` VALUES (16, 16, 100, 8);
INSERT INTO `gen_menu_relation` VALUES (8, 0, 1, 1);
INSERT INTO `gen_menu_relation` VALUES (18, 16, 1, 10);
INSERT INTO `gen_menu_relation` VALUES (17, 16, 1, 1);
INSERT INTO `gen_menu_relation` VALUES (15, 15, 103, 3);
INSERT INTO `gen_menu_relation` VALUES (19, 0, 1, 3);
INSERT INTO `gen_menu_relation` VALUES (18, 18, 100, 10);
INSERT INTO `gen_menu_relation` VALUES (17, 17, 100, 9);
INSERT INTO `gen_menu_relation` VALUES (1, 4, 2, 1);
INSERT INTO `gen_menu_relation` VALUES (19, 19, 100, 1);
INSERT INTO `gen_menu_relation` VALUES (9, 9, 102, 2);
INSERT INTO `gen_menu_relation` VALUES (20, 0, 1, 2);
INSERT INTO `gen_menu_relation` VALUES (20, 20, 100, 2);
INSERT INTO `gen_menu_relation` VALUES (21, 20, 1, 1);
INSERT INTO `gen_menu_relation` VALUES (21, 21, 100, 3);
 
#
# Contenu de la table `gen_menu_url_alternative`
#
 
 
#
# Contenu de la table `gen_site`
#
 
INSERT INTO `gen_site` VALUES (1, 2, 'fr', 1, 1, 'admin', 'Administration', '', 'Administration de Génésia.', 'Administration, Génésia.', 'Site d\'administration de Génésia.', 'Tela Botanica', '2004-05-06 18:38:13', 'admin.html');
INSERT INTO `gen_site` VALUES (2, 1, 'en', 1, 1, 'admin', 'Administration', '', 'Administration of Génésia.', 'Administration, Génésia.', 'Web administration interface of Génésia.', 'Tela Botanica', '2004-04-23 14:18:21', '../sites/admin/en/squelettes/admin.html');
INSERT INTO `gen_site` VALUES (3, 2, 'fr', 1, 2, 'essai1', 'Essai1', 'E', 'Essai n°1', 'Essai, test', 'essai', 'Jean-Pascal MILCENT', '2004-05-09 09:55:06', 'defaut.html');
 
#
# Contenu de la table `gen_site_auth`
#
 
INSERT INTO `gen_site_auth` VALUES (0, 'Aucune identification', 0, 0, 0);
INSERT INTO `gen_site_auth` VALUES (1, 'Administrateur de Génésia', 1, 0, 1);
 
#
# Contenu de la table `gen_site_auth_bdd`
#
 
INSERT INTO `gen_site_auth_bdd` VALUES (0, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `gen_site_auth_bdd` VALUES (1, 'mysql://root:0000@127.0.0.1/tela_prod_genesia', 'gen_annuaire', 'ga_mail', 'ga_mot_de_passe', 'md5');
 
#
# Contenu de la table `gen_site_auth_ldap`
#
 
INSERT INTO `gen_site_auth_ldap` VALUES (0, NULL, NULL, NULL, NULL);
 
#
# Contenu de la table `gen_site_categorie`
#
 
INSERT INTO `gen_site_categorie` VALUES (1, 'Relation entre sites');
INSERT INTO `gen_site_categorie` VALUES (2, 'Type de site');
 
#
# Contenu de la table `gen_site_categorie_valeur`
#
 
INSERT INTO `gen_site_categorie_valeur` VALUES (1, 1, 'avoir traduction');
INSERT INTO `gen_site_categorie_valeur` VALUES (101, 2, 'défaut');
INSERT INTO `gen_site_categorie_valeur` VALUES (2, 1, 'avoir suivant');
INSERT INTO `gen_site_categorie_valeur` VALUES (102, 2, 'principal');
 
#
# Contenu de la table `gen_site_relation`
#
 
INSERT INTO `gen_site_relation` VALUES (1, 2, 1, 1);
INSERT INTO `gen_site_relation` VALUES (1, 1, 101, NULL);
INSERT INTO `gen_site_relation` VALUES (1, 1, 102, 1);
INSERT INTO `gen_site_relation` VALUES (3, 3, 102, 2);
 
/branches/v1.0-menes/papyrus/documentation/modele/sql/papyrus_general_structure.sql
New file
0,0 → 1,380
# phpMyAdmin MySQL-Dump
# version 2.5.0
# http://www.phpmyadmin.net/ (download page)
#
# Serveur: localhost
# Généré le : Lundi 10 Mai 2004 à 14:33
# Version du serveur: 4.0.15
# Version de PHP: 4.3.3
# Base de données: `tela_prod_genesia`
# --------------------------------------------------------
 
#
# Structure de la table `gen_annuaire`
#
# Création: Vendredi 07 Mai 2004 à 18:57
# Dernière modification: Vendredi 07 Mai 2004 à 18:57
#
 
CREATE TABLE `gen_annuaire` (
`ga_id_administrateur` int(11) unsigned NOT NULL default '0',
`ga_ce_i18n` varchar(8) NOT NULL default '',
`ga_nom` varchar(32) NOT NULL default '',
`ga_prenom` varchar(32) NOT NULL default '',
`ga_mot_de_passe` varchar(32) NOT NULL default 'X X',
`ga_mail` varchar(128) NOT NULL default '',
PRIMARY KEY (`ga_id_administrateur`),
KEY `gen_annuaire_FKIndex1` (`ga_ce_i18n`)
) TYPE=MyISAM;
# --------------------------------------------------------
 
#
# Structure de la table `gen_application`
#
# Création: Vendredi 07 Mai 2004 à 18:57
# Dernière modification: Vendredi 07 Mai 2004 à 18:57
#
 
CREATE TABLE `gen_application` (
`gap_id_application` int(11) unsigned NOT NULL default '0',
`gap_nom` varchar(100) NOT NULL default '',
`gap_description` mediumtext NOT NULL,
`gap_chemin` varchar(255) NOT NULL default '',
`gap_bool_applette` tinyint(1) unsigned NOT NULL default '0',
PRIMARY KEY (`gap_id_application`)
) TYPE=MyISAM;
# --------------------------------------------------------
 
#
# Structure de la table `gen_i18n`
#
# Création: Vendredi 07 Mai 2004 à 18:57
# Dernière modification: Vendredi 07 Mai 2004 à 18:57
#
 
CREATE TABLE `gen_i18n` (
`gi_id_i18n` varchar(8) NOT NULL default '',
`gi_ce_langue` char(2) NOT NULL default '',
`gi_ce_pays` char(2) NOT NULL default '',
`gi_jeu_de_caracteres` varchar(50) default NULL,
`gi_nom` varchar(255) NOT NULL default '',
PRIMARY KEY (`gi_id_i18n`),
KEY `gen_i18n_FKIndex1` (`gi_ce_pays`),
KEY `gen_i18n_FKIndex2` (`gi_ce_langue`)
) TYPE=MyISAM;
# --------------------------------------------------------
 
#
# Structure de la table `gen_i18n_langue`
#
# Création: Vendredi 07 Mai 2004 à 18:57
# Dernière modification: Vendredi 07 Mai 2004 à 18:57
#
 
CREATE TABLE `gen_i18n_langue` (
`gil_id_langue` char(2) NOT NULL default '',
`gil_nom` varchar(255) default NULL,
`gil_direction` varchar(20) default NULL,
PRIMARY KEY (`gil_id_langue`)
) TYPE=MyISAM;
# --------------------------------------------------------
 
#
# Structure de la table `gen_i18n_pays`
#
# Création: Vendredi 07 Mai 2004 à 18:57
# Dernière modification: Vendredi 07 Mai 2004 à 18:57
#
 
CREATE TABLE `gen_i18n_pays` (
`gip_id_pays` char(2) NOT NULL default '',
`gip_nom` varchar(255) default NULL,
`gip_fichier_drapeau` varchar(255) default NULL,
PRIMARY KEY (`gip_id_pays`)
) TYPE=MyISAM;
# --------------------------------------------------------
 
#
# Structure de la table `gen_menu`
#
# Création: Vendredi 07 Mai 2004 à 18:57
# Dernière modification: Lundi 10 Mai 2004 à 12:09
#
 
CREATE TABLE `gen_menu` (
`gm_id_menu` int(11) unsigned NOT NULL default '0',
`gm_ce_i18n` varchar(8) NOT NULL default '',
`gm_ce_site` int(11) unsigned NOT NULL default '0',
`gm_ce_application` int(11) unsigned NOT NULL default '0',
`gm_application_arguments` varchar(255) default NULL,
`gm_fichier_squelette` varchar(255) default NULL,
`gm_code_num` int(11) NOT NULL default '0',
`gm_code_alpha` varchar(20) NOT NULL default '',
`gm_nom` varchar(100) default NULL,
`gm_raccourci_clavier` char(1) default NULL,
`gm_robot` varchar(100) default 'index,follow',
`gm_titre` varchar(255) default NULL,
`gm_titre_alternatif` varchar(255) default NULL,
`gm_mots_cles` text,
`gm_description_libre` text,
`gm_description_resume` text,
`gm_description_table_matieres` text,
`gm_source` varchar(255) default NULL,
`gm_auteur` varchar(255) default NULL,
`gm_contributeur` text,
`gm_editeur` text,
`gm_date_creation` datetime default NULL,
`gm_date_soumission` datetime default NULL,
`gm_date_acceptation` datetime default NULL,
`gm_date_publication` datetime default NULL,
`gm_date_debut_validite` datetime default NULL,
`gm_date_fin_validite` datetime default NULL,
`gm_date_copyright` datetime default NULL,
`gm_licence` varchar(255) default NULL,
`gm_categorie` varchar(100) default NULL,
`gm_public` varchar(255) default NULL,
`gm_public_niveau` varchar(45) default NULL,
`gm_ce_type_portee_spatiale` int(11) unsigned default NULL,
`gm_portee_spatiale` varchar(100) default NULL,
`gm_ce_type_portee_temporelle` int(11) unsigned default NULL,
`gm_portee_temporelle` varchar(100) default NULL,
`gm_ce_admin` int(11) unsigned NOT NULL default '0',
PRIMARY KEY (`gm_id_menu`),
KEY `gen_menu_FKIndex2` (`gm_ce_admin`),
KEY `gen_menu_FKIndex3` (`gm_ce_application`),
KEY `gen_menu_FKIndex4` (`gm_ce_i18n`)
) TYPE=MyISAM;
# --------------------------------------------------------
 
#
# Structure de la table `gen_menu_cache`
#
# Création: Vendredi 07 Mai 2004 à 18:57
# Dernière modification: Vendredi 07 Mai 2004 à 18:57
#
 
CREATE TABLE `gen_menu_cache` (
`gmcac_id_md5_url` varchar(32) NOT NULL default '',
`gmcac_ce_site` int(11) unsigned NOT NULL default '0',
`gmcac_corps` longblob NOT NULL,
`gmcac_date_heure` datetime NOT NULL default '0000-00-00 00:00:00',
`gmcac_taille` int(11) NOT NULL default '0',
`gmcac_gz_taille` int(11) NOT NULL default '0',
PRIMARY KEY (`gmcac_id_md5_url`)
) TYPE=MyISAM;
# --------------------------------------------------------
 
#
# Structure de la table `gen_menu_categorie`
#
# Création: Vendredi 07 Mai 2004 à 18:57
# Dernière modification: Vendredi 07 Mai 2004 à 18:57
#
 
CREATE TABLE `gen_menu_categorie` (
`gmca_id_categorie` int(10) unsigned NOT NULL auto_increment,
`gmca_intitule_categorie` varchar(255) default NULL,
PRIMARY KEY (`gmca_id_categorie`)
) TYPE=MyISAM AUTO_INCREMENT=3 ;
# --------------------------------------------------------
 
#
# Structure de la table `gen_menu_categorie_valeur`
#
# Création: Vendredi 07 Mai 2004 à 18:57
# Dernière modification: Vendredi 07 Mai 2004 à 18:57
#
 
CREATE TABLE `gen_menu_categorie_valeur` (
`gmcv_id_valeur` int(11) unsigned NOT NULL auto_increment,
`gmcv_id_categorie` int(10) unsigned NOT NULL default '0',
`gmcv_intitule_valeur` varchar(255) default NULL,
PRIMARY KEY (`gmcv_id_valeur`),
KEY `gen_menu_categorie_valeur_FKIndex1` (`gmcv_id_categorie`)
) TYPE=MyISAM AUTO_INCREMENT=105 ;
# --------------------------------------------------------
 
#
# Structure de la table `gen_menu_contenu`
#
# Création: Vendredi 07 Mai 2004 à 18:57
# Dernière modification: Lundi 10 Mai 2004 à 10:32
#
 
CREATE TABLE `gen_menu_contenu` (
`gmc_id_contenu` int(11) unsigned NOT NULL default '0',
`gmc_ce_admin` int(11) unsigned NOT NULL default '0',
`gmc_ce_menu` int(11) unsigned NOT NULL default '0',
`gmc_ce_type_contenu` int(11) unsigned default NULL,
`gmc_contenu` mediumtext,
`gmc_ce_type_modification` int(11) unsigned default NULL,
`gmc_resume_modification` varchar(255) default NULL,
`gmc_date_modification` datetime default NULL,
`gmc_bool_dernier` tinyint(1) unsigned default '1',
PRIMARY KEY (`gmc_id_contenu`),
KEY `gen_menu_contenu_FKIndex2` (`gmc_ce_menu`),
KEY `idx_fk_gp_ce_admin` (`gmc_ce_admin`)
) TYPE=MyISAM;
# --------------------------------------------------------
 
#
# Structure de la table `gen_menu_relation`
#
# Création: Vendredi 07 Mai 2004 à 18:57
# Dernière modification: Lundi 10 Mai 2004 à 12:09
#
 
CREATE TABLE `gen_menu_relation` (
`gmr_id_menu_01` int(11) unsigned NOT NULL default '0',
`gmr_id_menu_02` int(11) unsigned NOT NULL default '0',
`gmr_id_valeur` int(11) unsigned NOT NULL default '0',
`gmr_ordre` int(11) unsigned default NULL,
PRIMARY KEY (`gmr_id_menu_01`,`gmr_id_menu_02`,`gmr_id_valeur`),
KEY `gen_menu_relation_FKIndex2` (`gmr_id_menu_01`),
KEY `gen_menu_relation_FKIndex3` (`gmr_id_valeur`)
) TYPE=MyISAM;
# --------------------------------------------------------
 
#
# Structure de la table `gen_menu_url_alternative`
#
# Création: Vendredi 07 Mai 2004 à 18:57
# Dernière modification: Vendredi 07 Mai 2004 à 18:57
#
 
CREATE TABLE `gen_menu_url_alternative` (
`gmua_id_url` int(11) unsigned NOT NULL default '0',
`gmua_ce_menu` int(11) unsigned NOT NULL default '0',
`gmua_url` varchar(255) NOT NULL default '',
PRIMARY KEY (`gmua_id_url`),
KEY `gen_menu_url_alternative_FKIndex1` (`gmua_ce_menu`)
) TYPE=MyISAM;
# --------------------------------------------------------
 
#
# Structure de la table `gen_site`
#
# Création: Vendredi 07 Mai 2004 à 18:57
# Dernière modification: Dimanche 09 Mai 2004 à 09:55
#
 
CREATE TABLE `gen_site` (
`gs_id_site` int(11) unsigned NOT NULL default '0',
`gs_ce_admin` int(11) unsigned NOT NULL default '0',
`gs_ce_i18n` varchar(8) NOT NULL default '',
`gs_ce_auth` int(11) unsigned NOT NULL default '0',
`gs_code_num` int(11) NOT NULL default '0',
`gs_code_alpha` varchar(20) NOT NULL default '',
`gs_nom` varchar(100) NOT NULL default '',
`gs_raccourci_clavier` char(1) default NULL,
`gs_titre` varchar(255) default NULL,
`gs_mots_cles` text,
`gs_description` text,
`gs_auteur` varchar(255) default NULL,
`gs_date_creation` datetime default NULL,
`gs_fichier_squelette` varchar(255) NOT NULL default '',
PRIMARY KEY (`gs_id_site`),
KEY `idx_fk_gsi_ce_auth` (`gs_ce_auth`),
KEY `gen_site_FKIndex3` (`gs_ce_i18n`),
KEY `gen_site_FKIndex4` (`gs_ce_admin`)
) TYPE=MyISAM;
# --------------------------------------------------------
 
#
# Structure de la table `gen_site_auth`
#
# Création: Vendredi 07 Mai 2004 à 18:57
# Dernière modification: Vendredi 07 Mai 2004 à 18:57
#
 
CREATE TABLE `gen_site_auth` (
`gsa_id_auth` int(10) unsigned NOT NULL default '0',
`gsa_nom` varchar(100) NOT NULL default '',
`gsa_ce_auth_bdd` int(11) unsigned NOT NULL default '0',
`gsa_ce_auth_ldap` int(10) unsigned NOT NULL default '0',
`gsa_ce_type_auth` int(11) unsigned default NULL,
PRIMARY KEY (`gsa_id_auth`),
KEY `idx_fk_gsa_ce_auth_ldap` (`gsa_ce_auth_ldap`),
KEY `idx_fk_gsa_ce_auth_bdd` (`gsa_ce_auth_bdd`)
) TYPE=MyISAM;
# --------------------------------------------------------
 
#
# Structure de la table `gen_site_auth_bdd`
#
# Création: Vendredi 07 Mai 2004 à 18:57
# Dernière modification: Vendredi 07 Mai 2004 à 18:57
#
 
CREATE TABLE `gen_site_auth_bdd` (
`gsab_id_auth_bdd` int(11) unsigned NOT NULL default '0',
`gsab_dsn` varchar(255) default NULL,
`gsab_nom_table` varchar(100) default NULL,
`gsab_nom_champ_login` varchar(100) default NULL,
`gsab_nom_champ_mdp` varchar(100) default NULL,
`gsab_cryptage_mdp` varchar(100) default NULL,
PRIMARY KEY (`gsab_id_auth_bdd`)
) TYPE=MyISAM;
# --------------------------------------------------------
 
#
# Structure de la table `gen_site_auth_ldap`
#
# Création: Vendredi 07 Mai 2004 à 18:57
# Dernière modification: Vendredi 07 Mai 2004 à 18:57
#
 
CREATE TABLE `gen_site_auth_ldap` (
`gsal_id_auth_ldap` int(10) unsigned NOT NULL default '0',
`gsal_serveur` varchar(100) default NULL,
`gsal_port` int(11) unsigned default NULL,
`gsal_base_dn` varchar(255) default NULL,
`gsal_uid` varchar(100) default NULL,
PRIMARY KEY (`gsal_id_auth_ldap`)
) TYPE=MyISAM;
# --------------------------------------------------------
 
#
# Structure de la table `gen_site_categorie`
#
# Création: Vendredi 07 Mai 2004 à 18:57
# Dernière modification: Vendredi 07 Mai 2004 à 18:57
#
 
CREATE TABLE `gen_site_categorie` (
`gsc_id_categorie` int(10) unsigned NOT NULL auto_increment,
`gsc_intitule_categorie` varchar(255) default NULL,
PRIMARY KEY (`gsc_id_categorie`)
) TYPE=MyISAM AUTO_INCREMENT=3 ;
# --------------------------------------------------------
 
#
# Structure de la table `gen_site_categorie_valeur`
#
# Création: Vendredi 07 Mai 2004 à 18:57
# Dernière modification: Vendredi 07 Mai 2004 à 18:57
#
 
CREATE TABLE `gen_site_categorie_valeur` (
`gscv_id_valeur` int(11) unsigned NOT NULL auto_increment,
`gsc_id_categorie` int(10) unsigned NOT NULL default '0',
`gscv_intitule_valeur` varchar(255) default NULL,
PRIMARY KEY (`gscv_id_valeur`)
) TYPE=MyISAM AUTO_INCREMENT=103 ;
# --------------------------------------------------------
 
#
# Structure de la table `gen_site_relation`
#
# Création: Vendredi 07 Mai 2004 à 18:57
# Dernière modification: Vendredi 07 Mai 2004 à 18:57
#
 
CREATE TABLE `gen_site_relation` (
`gsr_id_site_01` int(11) unsigned NOT NULL default '0',
`gsr_id_site_02` int(11) unsigned NOT NULL default '0',
`gsr_id_valeur` int(11) unsigned NOT NULL default '0',
`gsr_ordre` int(11) unsigned default NULL,
PRIMARY KEY (`gsr_id_site_01`,`gsr_id_site_02`,`gsr_id_valeur`)
) TYPE=MyISAM;
 
/branches/v1.0-menes/papyrus/documentation/modele/modele_papyrus_general.xml
New file
0,0 → 1,1404
<?xml version="1.0" standalone="yes" ?>
<DBMODEL Version="4.0">
<SETTINGS>
<GLOBALSETTINGS ModelName="modele_genesia_general1" IDModel="0" IDVersion="0" VersionStr="1.0.0.0" Comments="" UseVersionHistroy="1" AutoIncVersion="1" DatabaseType="MySQL" ZoomFac="100.00" XPos="226" YPos="360" DefaultDataType="5" DefaultTablePrefix="0" DefSaveDBConn="" DefSyncDBConn="" DefQueryDBConn="" Printer="" HPageCount="4.0" PageAspectRatio="1.440892512336408" PageOrientation="1" PageFormat="A4 (210x297 mm, 8.26x11.7 inches)" SelectedPages="" UsePositionGrid="0" PositionGridX="20" PositionGridY="20" TableNameInRefs="0" DefaultTableType="0" ActivateRefDefForNewRelations="1" FKPrefix="" FKPostfix="" CreateFKRefDefIndex="1" DBQuoteCharacter="`" CreateSQLforLinkedObjects="0" DefModelFont="Nimbus Sans L" CanvasWidth="4096" CanvasHeight="2842" />
<DATATYPEGROUPS>
<DATATYPEGROUP Name="Numeric Types" Icon="1" />
<DATATYPEGROUP Name="Date and Time Types" Icon="2" />
<DATATYPEGROUP Name="String Types" Icon="3" />
<DATATYPEGROUP Name="Blob and Text Types" Icon="4" />
<DATATYPEGROUP Name="User defined Types" Icon="5" />
<DATATYPEGROUP Name="Geographic Types" Icon="6" />
</DATATYPEGROUPS>
<DATATYPES>
<DATATYPE ID="1" IDGroup="0" TypeName="TINYINT" Description="A very small integer. The signed range is -128 to 127. The unsigned range is 0 to 255." ParamCount="1" OptionCount="2" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
<PARAMS>
<PARAM Name="length" />
</PARAMS>
<OPTIONS>
<OPTION Name="UNSIGNED" Default="1" />
<OPTION Name="ZEROFILL" Default="0" />
</OPTIONS>
</DATATYPE>
<DATATYPE ID="2" IDGroup="0" TypeName="SMALLINT" Description="A small integer. The signed range is -32768 to 32767. The unsigned range is 0 to 65535." ParamCount="1" OptionCount="2" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
<PARAMS>
<PARAM Name="length" />
</PARAMS>
<OPTIONS>
<OPTION Name="UNSIGNED" Default="1" />
<OPTION Name="ZEROFILL" Default="0" />
</OPTIONS>
</DATATYPE>
<DATATYPE ID="3" IDGroup="0" TypeName="MEDIUMINT" Description="A medium-size integer. The signed range is -8388608 to 8388607. The unsigned range is 0 to 16777215." ParamCount="1" OptionCount="2" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
<PARAMS>
<PARAM Name="length" />
</PARAMS>
<OPTIONS>
<OPTION Name="UNSIGNED" Default="1" />
<OPTION Name="ZEROFILL" Default="0" />
</OPTIONS>
</DATATYPE>
<DATATYPE ID="4" IDGroup="0" TypeName="INT" Description="A normal-size integer. The signed range is -2147483648 to 2147483647. The unsigned range is 0 to 4294967295." ParamCount="1" OptionCount="2" ParamRequired="0" EditParamsAsString="0" SynonymGroup="1" PhysicalMapping="0" PhysicalTypeName="" >
<PARAMS>
<PARAM Name="length" />
</PARAMS>
<OPTIONS>
<OPTION Name="UNSIGNED" Default="0" />
<OPTION Name="ZEROFILL" Default="0" />
</OPTIONS>
</DATATYPE>
<DATATYPE ID="5" IDGroup="0" TypeName="INTEGER" Description="A normal-size integer. The signed range is -2147483648 to 2147483647. The unsigned range is 0 to 4294967295." ParamCount="1" OptionCount="2" ParamRequired="0" EditParamsAsString="0" SynonymGroup="1" PhysicalMapping="0" PhysicalTypeName="" >
<PARAMS>
<PARAM Name="length" />
</PARAMS>
<OPTIONS>
<OPTION Name="UNSIGNED" Default="1" />
<OPTION Name="ZEROFILL" Default="0" />
</OPTIONS>
</DATATYPE>
<DATATYPE ID="6" IDGroup="0" TypeName="BIGINT" Description="A large integer. The signed range is -9223372036854775808 to 9223372036854775807. The unsigned range is 0 to 18446744073709551615." ParamCount="1" OptionCount="2" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
<PARAMS>
<PARAM Name="length" />
</PARAMS>
<OPTIONS>
<OPTION Name="UNSIGNED" Default="0" />
<OPTION Name="ZEROFILL" Default="0" />
</OPTIONS>
</DATATYPE>
<DATATYPE ID="7" IDGroup="0" TypeName="FLOAT" Description="A small (single-precision) floating-point number. Cannot be unsigned. Allowable values are -3.402823466E+38 to -1.175494351E-38, 0, and 1.175494351E-38 to 3.402823466E+38." ParamCount="1" OptionCount="1" ParamRequired="1" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
<PARAMS>
<PARAM Name="precision" />
</PARAMS>
<OPTIONS>
<OPTION Name="ZEROFILL" Default="0" />
</OPTIONS>
</DATATYPE>
<DATATYPE ID="8" IDGroup="0" TypeName="FLOAT" Description="A small (single-precision) floating-point number. Cannot be unsigned. Allowable values are -3.402823466E+38 to -1.175494351E-38, 0, and 1.175494351E-38 to 3.402823466E+38." ParamCount="2" OptionCount="1" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
<PARAMS>
<PARAM Name="length" />
<PARAM Name="decimals" />
</PARAMS>
<OPTIONS>
<OPTION Name="ZEROFILL" Default="0" />
</OPTIONS>
</DATATYPE>
<DATATYPE ID="9" IDGroup="0" TypeName="DOUBLE" Description="A normal-size (double-precision) floating-point number. Cannot be unsigned. Allowable values are -1.7976931348623157E+308 to -2.2250738585072014E-308, 0, and 2.2250738585072014E-308 to 1.7976931348623157E+308." ParamCount="2" OptionCount="1" ParamRequired="0" EditParamsAsString="0" SynonymGroup="2" PhysicalMapping="0" PhysicalTypeName="" >
<PARAMS>
<PARAM Name="length" />
<PARAM Name="decimals" />
</PARAMS>
<OPTIONS>
<OPTION Name="ZEROFILL" Default="0" />
</OPTIONS>
</DATATYPE>
<DATATYPE ID="10" IDGroup="0" TypeName="DOUBLE PRECISION" Description="This is a synonym for DOUBLE." ParamCount="2" OptionCount="1" ParamRequired="0" EditParamsAsString="0" SynonymGroup="2" PhysicalMapping="0" PhysicalTypeName="" >
<PARAMS>
<PARAM Name="length" />
<PARAM Name="decimals" />
</PARAMS>
<OPTIONS>
<OPTION Name="ZEROFILL" Default="0" />
</OPTIONS>
</DATATYPE>
<DATATYPE ID="11" IDGroup="0" TypeName="REAL" Description="This is a synonym for DOUBLE." ParamCount="2" OptionCount="1" ParamRequired="0" EditParamsAsString="0" SynonymGroup="2" PhysicalMapping="0" PhysicalTypeName="" >
<PARAMS>
<PARAM Name="length" />
<PARAM Name="decimals" />
</PARAMS>
<OPTIONS>
<OPTION Name="ZEROFILL" Default="0" />
</OPTIONS>
</DATATYPE>
<DATATYPE ID="12" IDGroup="0" TypeName="DECIMAL" Description="An unpacked floating-point number. Cannot be unsigned. Behaves like a CHAR column." ParamCount="2" OptionCount="1" ParamRequired="0" EditParamsAsString="0" SynonymGroup="3" PhysicalMapping="0" PhysicalTypeName="" >
<PARAMS>
<PARAM Name="length" />
<PARAM Name="decimals" />
</PARAMS>
<OPTIONS>
<OPTION Name="ZEROFILL" Default="0" />
</OPTIONS>
</DATATYPE>
<DATATYPE ID="13" IDGroup="0" TypeName="NUMERIC" Description="This is a synonym for DECIMAL." ParamCount="2" OptionCount="1" ParamRequired="1" EditParamsAsString="0" SynonymGroup="3" PhysicalMapping="0" PhysicalTypeName="" >
<PARAMS>
<PARAM Name="length" />
<PARAM Name="decimals" />
</PARAMS>
<OPTIONS>
<OPTION Name="ZEROFILL" Default="0" />
</OPTIONS>
</DATATYPE>
<DATATYPE ID="14" IDGroup="1" TypeName="DATE" Description="A date. The supported range is \a1000-01-01\a to \a9999-12-31\a." ParamCount="0" OptionCount="0" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
</DATATYPE>
<DATATYPE ID="15" IDGroup="1" TypeName="DATETIME" Description="A date and time combination. The supported range is \a1000-01-01 00:00:00\a to \a9999-12-31 23:59:59\a." ParamCount="0" OptionCount="0" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
</DATATYPE>
<DATATYPE ID="16" IDGroup="1" TypeName="TIMESTAMP" Description="A timestamp. The range is \a1970-01-01 00:00:00\a to sometime in the year 2037. The length can be 14 (or missing), 12, 10, 8, 6, 4, or 2 representing YYYYMMDDHHMMSS, ... , YYYYMMDD, ... , YY formats." ParamCount="1" OptionCount="0" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
<PARAMS>
<PARAM Name="length" />
</PARAMS>
</DATATYPE>
<DATATYPE ID="17" IDGroup="1" TypeName="TIME" Description="A time. The range is \a-838:59:59\a to \a838:59:59\a." ParamCount="0" OptionCount="0" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
</DATATYPE>
<DATATYPE ID="18" IDGroup="1" TypeName="YEAR" Description="A year in 2- or 4-digit format (default is 4-digit)." ParamCount="1" OptionCount="0" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
<PARAMS>
<PARAM Name="length" />
</PARAMS>
</DATATYPE>
<DATATYPE ID="19" IDGroup="2" TypeName="CHAR" Description="A fixed-length string (1 to 255 characters) that is always right-padded with spaces to the specified length when stored. values are sorted and compared in case-insensitive fashion according to the default character set unless the BINARY keyword is given." ParamCount="1" OptionCount="1" ParamRequired="1" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
<PARAMS>
<PARAM Name="length" />
</PARAMS>
<OPTIONS>
<OPTION Name="BINARY" Default="0" />
</OPTIONS>
</DATATYPE>
<DATATYPE ID="20" IDGroup="2" TypeName="VARCHAR" Description="A variable-length string (1 to 255 characters). Values are sorted and compared in case-sensitive fashion unless the BINARY keyword is given." ParamCount="1" OptionCount="1" ParamRequired="1" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
<PARAMS>
<PARAM Name="length" />
</PARAMS>
<OPTIONS>
<OPTION Name="BINARY" Default="0" />
</OPTIONS>
</DATATYPE>
<DATATYPE ID="21" IDGroup="2" TypeName="BIT" Description="This is a synonym for CHAR(1)." ParamCount="0" OptionCount="0" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
</DATATYPE>
<DATATYPE ID="22" IDGroup="2" TypeName="BOOL" Description="This is a synonym for CHAR(1)." ParamCount="0" OptionCount="0" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
</DATATYPE>
<DATATYPE ID="23" IDGroup="3" TypeName="TINYBLOB" Description="A column maximum length of 255 (2^8 - 1) characters. Values are sorted and compared in case-sensitive fashion." ParamCount="0" OptionCount="0" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
</DATATYPE>
<DATATYPE ID="24" IDGroup="3" TypeName="BLOB" Description="A column maximum length of 65535 (2^16 - 1) characters. Values are sorted and compared in case-sensitive fashion." ParamCount="0" OptionCount="0" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
</DATATYPE>
<DATATYPE ID="25" IDGroup="3" TypeName="MEDIUMBLOB" Description="A column maximum length of 16777215 (2^24 - 1) characters. Values are sorted and compared in case-sensitive fashion." ParamCount="0" OptionCount="0" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
</DATATYPE>
<DATATYPE ID="26" IDGroup="3" TypeName="LONGBLOB" Description="A column maximum length of 4294967295 (2^32 - 1) characters. Values are sorted and compared in case-sensitive fashion." ParamCount="0" OptionCount="0" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
</DATATYPE>
<DATATYPE ID="27" IDGroup="3" TypeName="TINYTEXT" Description="A column maximum length of 255 (2^8 - 1) characters." ParamCount="0" OptionCount="0" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
</DATATYPE>
<DATATYPE ID="28" IDGroup="3" TypeName="TEXT" Description="A column maximum length of 65535 (2^16 - 1) characters." ParamCount="0" OptionCount="0" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
</DATATYPE>
<DATATYPE ID="29" IDGroup="3" TypeName="MEDIUMTEXT" Description="A column maximum length of 16777215 (2^24 - 1) characters." ParamCount="0" OptionCount="0" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
</DATATYPE>
<DATATYPE ID="30" IDGroup="3" TypeName="LONGTEXT" Description="A column maximum length of 4294967295 (2^32 - 1) characters." ParamCount="0" OptionCount="0" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
</DATATYPE>
<DATATYPE ID="31" IDGroup="3" TypeName="ENUM" Description="An enumeration. A string object that can have only one value, chosen from the list of values." ParamCount="1" OptionCount="0" ParamRequired="1" EditParamsAsString="1" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
<PARAMS>
<PARAM Name="values" />
</PARAMS>
</DATATYPE>
<DATATYPE ID="32" IDGroup="3" TypeName="SET" Description="A set. A string object that can have zero or more values, each of which must be chosen from the list of values." ParamCount="1" OptionCount="0" ParamRequired="1" EditParamsAsString="1" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
<PARAMS>
<PARAM Name="values" />
</PARAMS>
</DATATYPE>
<DATATYPE ID="33" IDGroup="4" TypeName="Varchar(20)" Description="" ParamCount="0" OptionCount="1" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
<OPTIONS>
<OPTION Name="BINARY" Default="0" />
</OPTIONS>
</DATATYPE>
<DATATYPE ID="34" IDGroup="4" TypeName="Varchar(45)" Description="" ParamCount="0" OptionCount="1" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
<OPTIONS>
<OPTION Name="BINARY" Default="0" />
</OPTIONS>
</DATATYPE>
<DATATYPE ID="35" IDGroup="4" TypeName="Varchar(255)" Description="" ParamCount="0" OptionCount="1" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
<OPTIONS>
<OPTION Name="BINARY" Default="0" />
</OPTIONS>
</DATATYPE>
<DATATYPE ID="36" IDGroup="5" TypeName="GEOMETRY" Description="Geographic Datatype" ParamCount="0" OptionCount="0" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
</DATATYPE>
<DATATYPE ID="38" IDGroup="5" TypeName="LINESTRING" Description="Geographic Datatype" ParamCount="0" OptionCount="0" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
</DATATYPE>
<DATATYPE ID="39" IDGroup="5" TypeName="POLYGON" Description="Geographic Datatype" ParamCount="0" OptionCount="0" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
</DATATYPE>
<DATATYPE ID="40" IDGroup="5" TypeName="MULTIPOINT" Description="Geographic Datatype" ParamCount="0" OptionCount="0" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
</DATATYPE>
<DATATYPE ID="41" IDGroup="5" TypeName="MULTILINESTRING" Description="Geographic Datatype" ParamCount="0" OptionCount="0" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
</DATATYPE>
<DATATYPE ID="42" IDGroup="5" TypeName="MULTIPOLYGON" Description="Geographic Datatype" ParamCount="0" OptionCount="0" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
</DATATYPE>
<DATATYPE ID="43" IDGroup="5" TypeName="GEOMETRYCOLLECTION" Description="Geographic Datatype" ParamCount="0" OptionCount="0" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
</DATATYPE>
</DATATYPES>
<COMMON_DATATYPES>
<COMMON_DATATYPE ID="5" />
<COMMON_DATATYPE ID="8" />
<COMMON_DATATYPE ID="20" />
<COMMON_DATATYPE ID="15" />
<COMMON_DATATYPE ID="22" />
<COMMON_DATATYPE ID="28" />
<COMMON_DATATYPE ID="26" />
<COMMON_DATATYPE ID="33" />
<COMMON_DATATYPE ID="34" />
<COMMON_DATATYPE ID="35" />
</COMMON_DATATYPES>
<TABLEPREFIXES>
<TABLEPREFIX Name="Defaut (pas de pr\233fixe)" />
</TABLEPREFIXES>
<REGIONCOLORS>
<REGIONCOLOR Color="Red=#FFEEEC" />
<REGIONCOLOR Color="Yellow=#FEFDED" />
<REGIONCOLOR Color="Green=#EAFFE5" />
<REGIONCOLOR Color="Cyan=#ECFDFF" />
<REGIONCOLOR Color="Blue=#F0F1FE" />
<REGIONCOLOR Color="Magenta=#FFEBFA" />
</REGIONCOLORS>
<POSITIONMARKERS>
<POSITIONMARKER ZoomFac="-1.0" X="0" Y="0" />
<POSITIONMARKER ZoomFac="-1.0" X="0" Y="0" />
<POSITIONMARKER ZoomFac="-1.0" X="0" Y="0" />
<POSITIONMARKER ZoomFac="-1.0" X="0" Y="0" />
<POSITIONMARKER ZoomFac="-1.0" X="0" Y="0" />
<POSITIONMARKER ZoomFac="-1.0" X="0" Y="0" />
<POSITIONMARKER ZoomFac="-1.0" X="0" Y="0" />
<POSITIONMARKER ZoomFac="-1.0" X="0" Y="0" />
<POSITIONMARKER ZoomFac="-1.0" X="0" Y="0" />
<POSITIONMARKER ZoomFac="-1.0" X="0" Y="0" />
<POSITIONMARKER ZoomFac="-1.0" X="0" Y="0" />
</POSITIONMARKERS>
</SETTINGS>
<METADATA>
<REGIONS>
<REGION ID="6948" RegionName="G\233n\233sia - Abr\233viation : gen" XPos="2" YPos="3" Width="1773" Height="1715" RegionColor="0" TablePrefix="0" TableType="0" OverwriteTablePrefix="0" OverwriteTableType="0" Comments="Contient les tables du noyau de G\233n\233sia." IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="-1" OrderPos="21" />
</REGIONS>
<TABLES>
<TABLE ID="6929" Tablename="gen_menu_cache" PrevTableName="CACHE" XPos="867" YPos="793" TableType="0" TablePrefix="0" nmTable="0" Temporary="0" UseStandardInserts="0" StandardInserts="\n" TableOptions="DelayKeyTblUpdates=0\nPackKeys=0\nRowChecksum=0\nRowFormat=0\nUseRaid=0\nRaidType=0\nChunks=2\nChunkSize=64\n" Comments="Contient les pages en cache du site." Collapsed="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="6393" OrderPos="2" >
<COLUMNS>
<COLUMN ID="1034" ColName="gmcac_id_md5_url" PrevColName="" Pos="1" idDatatype="20" DatatypeParams="(32)" Width="0" Prec="0" PrimaryKey="1" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Valeur md5 de l\aurl.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6807" ColName="gmcac_ce_site" PrevColName="" Pos="1" idDatatype="5" DatatypeParams="(11)" Width="0" Prec="0" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="1" DefaultValue="" Comments="">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="1036" ColName="gmcac_corps" PrevColName="" Pos="3" idDatatype="26" DatatypeParams="" Width="0" Prec="0" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Contenu sous forme de bits de la page compress\233.">
<OPTIONSELECTED>
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="1037" ColName="gmcac_date_heure" PrevColName="" Pos="4" idDatatype="15" DatatypeParams="" Width="0" Prec="0" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="0000-00-00 00:00:00" Comments="Date et heure de ka mise en cache.">
<OPTIONSELECTED>
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="1038" ColName="gmcac_taille" PrevColName="" Pos="5" idDatatype="5" DatatypeParams="(11)" Width="0" Prec="0" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Taille de la page avant compression.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="1039" ColName="gmcac_gz_taille" PrevColName="" Pos="6" idDatatype="5" DatatypeParams="(11)" Width="0" Prec="0" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Taille de la page compress\233e.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
</COLUMNS>
<RELATIONS_END>
<RELATION_END ID="6949" />
</RELATIONS_END>
<INDICES>
<INDEX ID="1040" IndexName="PRIMARY" IndexKind="0" FKRefDef_Obj_id="-1">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="1034" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
<INDEX ID="6827" IndexName="gen_menu_cache_FKIndex1" IndexKind="1" FKRefDef_Obj_id="6418">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6807" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
</INDICES>
</TABLE>
<TABLE ID="6930" Tablename="gen_menu_relation" PrevTableName="MENU_LEVEL_1" XPos="952" YPos="1193" TableType="0" TablePrefix="0" nmTable="0" Temporary="0" UseStandardInserts="0" StandardInserts="\n" TableOptions="DelayKeyTblUpdates=0\nPackKeys=0\nRowChecksum=0\nRowFormat=0\nUseRaid=0\nRaidType=0\nChunks=2\nChunkSize=64\n" Comments="Table permettant de connaitre les relations unissant les menus entre eux." Collapsed="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="6396" OrderPos="3" >
<COLUMNS>
<COLUMN ID="6662" ColName="gmr_id_menu_01" PrevColName="" Pos="1" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="1" NotNull="1" AutoInc="0" IsForeignKey="1" DefaultValue="" Comments="Identifiant du menu 01.">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6664" ColName="gmr_id_menu_02" PrevColName="" Pos="1" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="1" NotNull="1" AutoInc="0" IsForeignKey="1" DefaultValue="" Comments="Identifiant du menu 02.">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6736" ColName="gmr_id_valeur" PrevColName="" Pos="1" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="1" NotNull="1" AutoInc="0" IsForeignKey="1" DefaultValue="" Comments="">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6691" ColName="gmr_ordre" PrevColName="" Pos="3" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Ordre des relations quand on a le meme identifiant de menu 01 et le meme type de relation.">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
</COLUMNS>
<RELATIONS_END>
<RELATION_END ID="6965" />
<RELATION_END ID="6966" />
<RELATION_END ID="6968" />
</RELATIONS_END>
<INDICES>
<INDEX ID="1273" IndexName="PRIMARY" IndexKind="0" FKRefDef_Obj_id="-1">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6662" LengthParam="0" />
<INDEXCOLUMN idColumn="6664" LengthParam="0" />
<INDEXCOLUMN idColumn="6736" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
<INDEX ID="6663" IndexName="gen_menu_relation_FKIndex2" IndexKind="1" FKRefDef_Obj_id="6656">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6662" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
<INDEX ID="6665" IndexName="gen_menu_relation_FKIndex3" IndexKind="1" FKRefDef_Obj_id="6659">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6664" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
<INDEX ID="6737" IndexName="gen_menu_relation_FKIndex3" IndexKind="1" FKRefDef_Obj_id="6705">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6736" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
</INDICES>
</TABLE>
<TABLE ID="6931" Tablename="gen_site" PrevTableName="PROJECT" XPos="583" YPos="290" TableType="0" TablePrefix="0" nmTable="0" Temporary="0" UseStandardInserts="0" StandardInserts="\n" TableOptions="DelayKeyTblUpdates=0\nPackKeys=0\nRowChecksum=0\nRowFormat=0\nUseRaid=0\nRaidType=0\n" Comments="Contient les informations sur les sites g\233r\233s par G\233n\233sia." Collapsed="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="6397" OrderPos="4" >
<COLUMNS>
<COLUMN ID="1108" ColName="gs_id_site" PrevColName="" Pos="1" idDatatype="5" DatatypeParams="(11)" Width="0" Prec="0" PrimaryKey="1" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Indentifiant du site.">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6800" ColName="gs_ce_i18n" PrevColName="" Pos="1" idDatatype="20" DatatypeParams="(8)" Width="0" Prec="0" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="1" DefaultValue="" Comments="Langue du site.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6798" ColName="gs_ce_auth" PrevColName="" Pos="1" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="1" DefaultValue="0" Comments="Poss\232de une valeur diff\233rente de 0 si le site utilise l\aauthentification des utilisateurs.">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="1115" ColName="gs_fichier_squelette" PrevColName="" Pos="8" idDatatype="20" DatatypeParams="(255)" Width="0" Prec="0" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Chemin et nom du fichier squelette \224 utiliser par d\233faut pour ce site.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6838" ColName="gs_code_num" PrevColName="" Pos="14" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Un site d\aorigine ainsi que ses traductions ont le meme code num\233rique.">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5777" ColName="gs_code_alpha" PrevColName="gs_code" Pos="12" idDatatype="20" DatatypeParams="(20)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Un site d\aorigine ainsi que ses traductions ont le meme code alphanum\233rique.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5776" ColName="gs_nom" PrevColName="" Pos="11" idDatatype="20" DatatypeParams="(100)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Nom du site dans la langue de ce site..">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6816" ColName="gs_raccourci_clavier" PrevColName="" Pos="10" idDatatype="19" DatatypeParams="(1)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Raccourci clavier pour acc\233der au lien menant vers ce site.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6815" ColName="gs_titre" PrevColName="" Pos="11" idDatatype="20" DatatypeParams="(255)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Titre par d\233faut des menus du site, dans la langue du site.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6817" ColName="gs_mots_cles" PrevColName="gs_mot_cles" Pos="11" idDatatype="28" DatatypeParams="" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Mots cl\233, dans la langue du site, d\233finissant le contenu g\233n\233ral de ce site. Utilis\233 par d\233faut pour les menus.">
<OPTIONSELECTED>
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6189" ColName="gs_description" PrevColName="" Pos="10" idDatatype="28" DatatypeParams="" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Description du contenu g\233n\233ral du site dans la langue de ce site. Utilis\233 par d\233faut pour les menus.">
<OPTIONSELECTED>
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6818" ColName="gs_auteur" PrevColName="" Pos="12" idDatatype="20" DatatypeParams="(255)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Auteur du site. G\233n\233ralement la structure \224 l\aorigine du site.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6821" ColName="gs_date_creation" PrevColName="" Pos="15" idDatatype="15" DatatypeParams="" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Date de cr\233ation du site.">
<OPTIONSELECTED>
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6801" ColName="gs_ce_admin" PrevColName="" Pos="1" idDatatype="5" DatatypeParams="(11)" Width="0" Prec="0" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="1" DefaultValue="" Comments="Identifiant de l\aadministrateur \224 l\aorigine de ce site.">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
</COLUMNS>
<RELATIONS_START>
<RELATION_START ID="6949" />
<RELATION_START ID="6958" />
<RELATION_START ID="6971" />
<RELATION_START ID="6972" />
</RELATIONS_START>
<RELATIONS_END>
<RELATION_END ID="6951" />
<RELATION_END ID="6957" />
<RELATION_END ID="6960" />
</RELATIONS_END>
<INDICES>
<INDEX ID="3637" IndexName="PRIMARY" IndexKind="0" FKRefDef_Obj_id="-1">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="1108" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
<INDEX ID="5778" IndexName="idx_gsi_abreviation" IndexKind="2" FKRefDef_Obj_id="-1">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="5777" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
<INDEX ID="6474" IndexName="idx_fk_gsi_ce_auth" IndexKind="1" FKRefDef_Obj_id="6426">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6798" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
<INDEX ID="6609" IndexName="gen_site_FKIndex3" IndexKind="1" FKRefDef_Obj_id="6535">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6800" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
<INDEX ID="6625" IndexName="gen_site_FKIndex4" IndexKind="1" FKRefDef_Obj_id="6623">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6801" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
</INDICES>
</TABLE>
<TABLE ID="6932" Tablename="gen_annuaire" PrevTableName="annu_USERS" XPos="63" YPos="914" TableType="0" TablePrefix="0" nmTable="0" Temporary="0" UseStandardInserts="0" StandardInserts="\n" TableOptions="DelayKeyTblUpdates=0\nPackKeys=0\nRowChecksum=0\nRowFormat=0\nUseRaid=0\nRaidType=0\n" Comments="Contient les informations sur les administrateurs de G\233n\233sia." Collapsed="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="6398" OrderPos="5" >
<COLUMNS>
<COLUMN ID="1164" ColName="ga_id_administrateur" PrevColName="" Pos="1" idDatatype="5" DatatypeParams="(11)" Width="0" Prec="0" PrimaryKey="1" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="0" Comments="Identifiant d\aune personne participant \224 l\aadministration de G\233n\233sia.">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6565" ColName="ga_ce_i18n" PrevColName="" Pos="1" idDatatype="20" DatatypeParams="(8)" Width="0" Prec="0" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="1" DefaultValue="" Comments="">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="1167" ColName="ga_nom" PrevColName="" Pos="4" idDatatype="20" DatatypeParams="(32)" Width="0" Prec="0" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Nom de la personne.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="1168" ColName="ga_prenom" PrevColName="" Pos="5" idDatatype="20" DatatypeParams="(32)" Width="0" Prec="0" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Pr\233nom de la personne.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="1172" ColName="ga_mot_de_passe" PrevColName="" Pos="9" idDatatype="20" DatatypeParams="(32)" Width="0" Prec="0" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="X X" Comments="Mot de passe pour acc\233der \224 l\ainterface d\aadministration.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="1173" ColName="ga_mail" PrevColName="" Pos="10" idDatatype="20" DatatypeParams="(128)" Width="0" Prec="0" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Mail de la personne.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
</COLUMNS>
<RELATIONS_START>
<RELATION_START ID="6950" />
<RELATION_START ID="6959" />
<RELATION_START ID="6960" />
</RELATIONS_START>
<RELATIONS_END>
<RELATION_END ID="6956" />
</RELATIONS_END>
<INDICES>
<INDEX ID="1189" IndexName="PRIMARY" IndexKind="0" FKRefDef_Obj_id="-1">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="1164" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
<INDEX ID="6534" IndexName="gen_annuaire_FKIndex1" IndexKind="1" FKRefDef_Obj_id="6532">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6565" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
</INDICES>
</TABLE>
<TABLE ID="6933" Tablename="gen_application" PrevTableName="APPLICATION" XPos="1364" YPos="610" TableType="0" TablePrefix="0" nmTable="0" Temporary="0" UseStandardInserts="0" StandardInserts="\n" TableOptions="DelayKeyTblUpdates=0\nPackKeys=0\nRowChecksum=0\nRowFormat=0\nUseRaid=0\nRaidType=0\n" Comments="Contient les informations sur les applications ou les applettes disponibles pour G\233n\233sia.\nUne application est sp\233cifiquement appel\233e par un menu et ce menu lui transmet des param\232tres.\nUne applette est appell\233e via une balise pr\233sente dans un squelette et poss\232de ses propres param\232tres.\nUne applette sera donc commune \224 toutes les pages utilisant le squelette en question." Collapsed="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="6399" OrderPos="6" >
<COLUMNS>
<COLUMN ID="5193" ColName="gap_id_application" PrevColName="" Pos="1" idDatatype="5" DatatypeParams="(11)" Width="0" Prec="0" PrimaryKey="1" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Identifiant de l\aapplication">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5195" ColName="gap_nom" PrevColName="" Pos="3" idDatatype="20" DatatypeParams="(100)" Width="0" Prec="0" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Nom de l\aapplication.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5196" ColName="gap_description" PrevColName="" Pos="4" idDatatype="29" DatatypeParams="" Width="0" Prec="0" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Champs libre pour d\233crire une application.">
<OPTIONSELECTED>
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5204" ColName="gap_chemin" PrevColName="" Pos="4" idDatatype="20" DatatypeParams="(255)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Chemin menant au fichier principal de l\aapplication (ancien nom : gp_chemin_application).">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5807" ColName="gap_bool_applette" PrevColName="" Pos="5" idDatatype="1" DatatypeParams="(1)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="0" Comments="Boul\233en permettant de savoir si on a \224 faire \224 une applette (1) ou pas (0).">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5800" ColName="gap_applette_balise" PrevColName="" Pos="4" idDatatype="20" DatatypeParams="(255)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Balise permettant d\aappeler l\aapplette depuis un squelette.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5808" ColName="gap_applette_arguments" PrevColName="" Pos="6" idDatatype="20" DatatypeParams="(255)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Arguments \224 transmettre \224 l\aapplette.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
</COLUMNS>
<RELATIONS_START>
<RELATION_START ID="6962" />
</RELATIONS_START>
<INDICES>
<INDEX ID="5201" IndexName="PRIMARY" IndexKind="0" FKRefDef_Obj_id="-1">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="5193" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
</INDICES>
</TABLE>
<TABLE ID="6934" Tablename="gen_menu_url_alternative" PrevTableName="Table_10" XPos="680" YPos="1537" TableType="0" TablePrefix="0" nmTable="0" Temporary="0" UseStandardInserts="0" StandardInserts="\n" TableOptions="DelayKeyTblUpdates=0\nPackKeys=0\nRowChecksum=0\nRowFormat=0\nUseRaid=0\nRaidType=0\n" Comments="Contient les url alternative pour un menu d\aun site dans une langue donn\233e." Collapsed="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="6400" OrderPos="7" >
<COLUMNS>
<COLUMN ID="5211" ColName="gmua_id_url" PrevColName="" Pos="0" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="1" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="0" Comments="Identifiant num\233rique d\aun raccourci.">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6630" ColName="gmua_ce_menu" PrevColName="" Pos="1" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="1" DefaultValue="" Comments="">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5214" ColName="gmua_url" PrevColName="" Pos="2" idDatatype="20" DatatypeParams="(255)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Url du raccourci ou d\aune ancienne adresse.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
</COLUMNS>
<RELATIONS_END>
<RELATION_END ID="6961" />
</RELATIONS_END>
<INDICES>
<INDEX ID="5212" IndexName="PRIMARY" IndexKind="0" FKRefDef_Obj_id="-1">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="5211" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
<INDEX ID="6629" IndexName="gen_menu_url_alternative_FKIndex1" IndexKind="1" FKRefDef_Obj_id="6627">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6630" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
</INDICES>
</TABLE>
<TABLE ID="6935" Tablename="gen_menu" PrevTableName="Table_12" XPos="497" YPos="787" TableType="0" TablePrefix="0" nmTable="0" Temporary="0" UseStandardInserts="0" StandardInserts="\n" TableOptions="DelayKeyTblUpdates=0\nPackKeys=0\nRowChecksum=0\nRowFormat=0\nUseRaid=0\nRaidType=0\n" Comments="Contient les informations sur les menus constituant un site.\nLes informations d\aun menu permettent de g\233n\233rer les entetes Dublin Core." Collapsed="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="6403" OrderPos="8" >
<COLUMNS>
<COLUMN ID="5823" ColName="gm_id_menu" PrevColName="" Pos="0" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="1" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Identifiant d\aun menu.">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6805" ColName="gm_ce_site" PrevColName="" Pos="1" idDatatype="5" DatatypeParams="(11)" Width="0" Prec="0" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="1" DefaultValue="" Comments="">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6642" ColName="gm_ce_i18n" PrevColName="" Pos="1" idDatatype="20" DatatypeParams="(8)" Width="0" Prec="0" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="1" DefaultValue="" Comments="">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6634" ColName="gm_ce_application" PrevColName="" Pos="1" idDatatype="5" DatatypeParams="(11)" Width="0" Prec="0" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="1" DefaultValue="" Comments="Identifiant de l\aapplication g\233n\233rant le contenu de ce menu.">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6670" ColName="gm_application_arguments" PrevColName="" Pos="36" idDatatype="20" DatatypeParams="(255)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Argument de l\aapplication qui g\233n\232rera le contenu de ce menu.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6671" ColName="gm_fichier_squelette" PrevColName="" Pos="37" idDatatype="20" DatatypeParams="(255)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Chemin d\aacc\232s au fichier de squelette de ce menu s\ail en poss\232de un.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6836" ColName="gm_code_num" PrevColName="" Pos="37" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Un menu d\aorigine ainsi que ses traductions ont le meme code num\233rique.">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6583" ColName="gm_code_alpha" PrevColName="gm_code" Pos="30" idDatatype="20" DatatypeParams="(20)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Un menu d\aorigine, ainsi que ses traductions ont le meme code alphanum\233rique.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6688" ColName="gm_nom" PrevColName="" Pos="41" idDatatype="20" DatatypeParams="(100)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Nom unique d\aun menu.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6672" ColName="gm_raccourci_clavier" PrevColName="" Pos="38" idDatatype="19" DatatypeParams="(1)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Raccourci clavier utilis\233 pour acc\233der \224 ce menu.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6356" ColName="gm_robot" PrevColName="" Pos="25" idDatatype="20" DatatypeParams="(100)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="index,follow" Comments="Valeur pour l\aindexation par les robots.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5838" ColName="gm_titre" PrevColName="" Pos="1" idDatatype="20" DatatypeParams="(255)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Titre du document.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5839" ColName="gm_titre_alternatif" PrevColName="" Pos="2" idDatatype="20" DatatypeParams="(255)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Titre alternatif du document.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5841" ColName="gm_mots_cles" PrevColName="" Pos="4" idDatatype="28" DatatypeParams="" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Mots-clefs : utiliser des mots-clefs choisis dans le cadre d\aune politique de classement.">
<OPTIONSELECTED>
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5843" ColName="gm_description_libre" PrevColName="" Pos="6" idDatatype="28" DatatypeParams="" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Texte libre d\233crivant le document.">
<OPTIONSELECTED>
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5842" ColName="gm_description_resume" PrevColName="" Pos="5" idDatatype="28" DatatypeParams="" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Type MIME des feuilles de styles de la page.">
<OPTIONSELECTED>
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5850" ColName="gm_description_table_matieres" PrevColName="" Pos="12" idDatatype="28" DatatypeParams="" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Table des mati\232res du document.">
<OPTIONSELECTED>
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5895" ColName="gm_source" PrevColName="" Pos="19" idDatatype="20" DatatypeParams="(255)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Lien web (URI) vers la source du document pr\233sent.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5840" ColName="gm_auteur" PrevColName="" Pos="3" idDatatype="20" DatatypeParams="(255)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Auteur (cr\233ateur) du document : nom de la personne, de l\aorganisation ou du service \224 l\aorigine de la r\233daction du document.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5846" ColName="gm_contributeur" PrevColName="" Pos="8" idDatatype="28" DatatypeParams="" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Nom de la personne, de l\aorganisation ou du service ayant contribu\233 \224 l\a\233laboration du document. Plusieurs noms peuvent etre indiqu\233 en les s\233parant par des virgules eux meme encadr\233 d\aespace.">
<OPTIONSELECTED>
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5845" ColName="gm_editeur" PrevColName="" Pos="7" idDatatype="28" DatatypeParams="" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Nom de la personne, de l\aorganisation ou du service \224 l\aorigine de la publication du document. Plusieurs noms peuvent etre indiqu\233 en les s\233parant par des virgules eux meme encadr\233 d\aespace.">
<OPTIONSELECTED>
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5881" ColName="gm_date_creation" PrevColName="" Pos="13" idDatatype="15" DatatypeParams="" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Date de cr\233ation du document (format W3CDTF).">
<OPTIONSELECTED>
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5887" ColName="gm_date_soumission" PrevColName="" Pos="17" idDatatype="15" DatatypeParams="" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Date de soumission du document (format W3CDTF).">
<OPTIONSELECTED>
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5888" ColName="gm_date_acceptation" PrevColName="" Pos="18" idDatatype="15" DatatypeParams="" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Date d\aacceptation du document (format W3CDTF).">
<OPTIONSELECTED>
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6579" ColName="gm_date_publication" PrevColName="" Pos="29" idDatatype="15" DatatypeParams="" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Date \224 laquelle la page a \233t\233 r\233ellement mise en ligne (format W3CDTF).">
<OPTIONSELECTED>
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6586" ColName="gm_date_debut_validite" PrevColName="" Pos="31" idDatatype="15" DatatypeParams="" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Date de d\233but de validit\233 du document, \224 laquelle la page doit etre mise en ligne (format W3CDTF).">
<OPTIONSELECTED>
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5882" ColName="gm_date_fin_validite" PrevColName="" Pos="14" idDatatype="15" DatatypeParams="" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Date de fin de validit\233 du document, \224 laquelle la page doit etre retir\233 de la mise en ligne (format W3CDTF).">
<OPTIONSELECTED>
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5885" ColName="gm_date_copyright" PrevColName="" Pos="16" idDatatype="15" DatatypeParams="" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Date du copyright (format W3CDTF).">
<OPTIONSELECTED>
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5847" ColName="gm_licence" PrevColName="" Pos="9" idDatatype="20" DatatypeParams="(255)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Lien web vers les droits relatifs \224 la ressource : permet de donner des informations sur le statut des droits du document, par exemple la pr\233sence d\aun copyright, ou un lien vers le d\233tenteur des droits. L\aabsence de cet \233l\233ment ne pr\233sume pas que le document est libre de droits.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6577" ColName="gm_categorie" PrevColName="" Pos="28" idDatatype="20" DatatypeParams="(100)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Grande cat\233gorie de document.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5848" ColName="gm_public" PrevColName="" Pos="10" idDatatype="20" DatatypeParams="(255)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Public vis\233 par le document : le public repr\233sente le groupe de personnes \224 qui le document est destin\233">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5849" ColName="gm_public_niveau" PrevColName="" Pos="11" idDatatype="20" DatatypeParams="(45)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Niveau du public demand\233e pour ce document dans un contexte de formation.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5899" ColName="gm_ce_type_portee_spatiale" PrevColName="" Pos="21" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Identifiant d\aun type de port\233e spatiale du document. 0 inconnu, 1 :iso-3166, 2 : point g\233ographique, 3 : r\233gion g\233ographique, 4 : TGN.">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5900" ColName="gm_portee_spatiale" PrevColName="" Pos="22" idDatatype="20" DatatypeParams="(100)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Valeur de la port\233e spatiale.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5901" ColName="gm_ce_type_portee_temporelle" PrevColName="" Pos="23" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Identifiant d\aun type de port\233e temporelle du document. 0 : inconnu, 1 : Period, 2 W3CDTF.">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5902" ColName="gm_portee_temporelle" PrevColName="" Pos="24" idDatatype="20" DatatypeParams="(100)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Valeur de la port\233e temporelle.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6622" ColName="gm_ce_admin" PrevColName="" Pos="1" idDatatype="5" DatatypeParams="(11)" Width="0" Prec="0" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="1" DefaultValue="" Comments="Identifiant de l\aadministrateur cr\233ant, modifiant ou validant ce menu.">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
</COLUMNS>
<RELATIONS_START>
<RELATION_START ID="6961" />
<RELATION_START ID="6963" />
<RELATION_START ID="6965" />
<RELATION_START ID="6966" />
</RELATIONS_START>
<RELATIONS_END>
<RELATION_END ID="6958" />
<RELATION_END ID="6959" />
<RELATION_END ID="6962" />
<RELATION_END ID="6964" />
</RELATIONS_END>
<INDICES>
<INDEX ID="5824" IndexName="PRIMARY" IndexKind="0" FKRefDef_Obj_id="-1">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="5823" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
<INDEX ID="6621" IndexName="gen_menu_FKIndex2" IndexKind="1" FKRefDef_Obj_id="6619">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6622" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
<INDEX ID="6633" IndexName="gen_menu_FKIndex3" IndexKind="1" FKRefDef_Obj_id="6631">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6634" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
<INDEX ID="6641" IndexName="gen_menu_FKIndex4" IndexKind="1" FKRefDef_Obj_id="6639">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6642" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
<INDEX ID="6828" IndexName="gen_menu_FKIndex4" IndexKind="1" FKRefDef_Obj_id="6615">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6805" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
</INDICES>
</TABLE>
<TABLE ID="6936" Tablename="gen_menu_contenu" PrevTableName="Table_13" XPos="373" YPos="1537" TableType="0" TablePrefix="0" nmTable="0" Temporary="0" UseStandardInserts="0" StandardInserts="\n" TableOptions="DelayKeyTblUpdates=0\nPackKeys=0\nRowChecksum=0\nRowFormat=0\nUseRaid=0\nRaidType=0\n" Comments="Permet de suivre l\a\233volution d\aune page et d\aobtenir ses informations d\aentete et son contenu associ\233." Collapsed="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="6404" OrderPos="9" >
<COLUMNS>
<COLUMN ID="6611" ColName="gmc_id_contenu" PrevColName="" Pos="7" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="1" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Identifiant d\aun contenu.">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6811" ColName="gmc_ce_admin" PrevColName="" Pos="1" idDatatype="5" DatatypeParams="(11)" Width="0" Prec="0" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="1" DefaultValue="" Comments="">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6638" ColName="gmc_ce_menu" PrevColName="" Pos="1" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="1" DefaultValue="" Comments="Identifiant du menu poss\233dant ce contenu.">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6607" ColName="gmc_ce_type_contenu" PrevColName="" Pos="9" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Type du contenu : 1, pour XHTML, 2 pour WIKINI.">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6608" ColName="gmc_contenu" PrevColName="" Pos="10" idDatatype="29" DatatypeParams="" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Le contenu du menu.">
<OPTIONSELECTED>
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6605" ColName="gmc_ce_type_modification" PrevColName="" Pos="7" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Type de modification effectu\233e sur le menu : 1 pour mineure, 2 pour majeure.">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6606" ColName="gmc_resume_modification" PrevColName="" Pos="8" idDatatype="20" DatatypeParams="(255)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="R\233sum\233 de la modification, si majeure.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6603" ColName="gmc_date_modification" PrevColName="" Pos="5" idDatatype="15" DatatypeParams="" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Date et heure de modification du contenu.">
<OPTIONSELECTED>
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6604" ColName="gmc_bool_dernier" PrevColName="" Pos="6" idDatatype="1" DatatypeParams="(1)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="1" Comments="Bool\233\233n indiquant le dernier contenu pour le menu.">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
</COLUMNS>
<RELATIONS_END>
<RELATION_END ID="6950" />
<RELATION_END ID="6963" />
</RELATIONS_END>
<INDICES>
<INDEX ID="6612" IndexName="PRIMARY" IndexKind="0" FKRefDef_Obj_id="-1">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6611" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
<INDEX ID="6482" IndexName="idx_fk_gp_ce_admin" IndexKind="1" FKRefDef_Obj_id="6424">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6811" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
<INDEX ID="6637" IndexName="gen_menu_contenu_FKIndex2" IndexKind="1" FKRefDef_Obj_id="6635">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6638" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
</INDICES>
</TABLE>
<TABLE ID="6937" Tablename="gen_site_auth" PrevTableName="Table_15" XPos="1357" YPos="14" TableType="0" TablePrefix="0" nmTable="0" Temporary="0" UseStandardInserts="0" StandardInserts="\n" TableOptions="DelayKeyTblUpdates=0\nPackKeys=0\nRowChecksum=0\nRowFormat=0\nUseRaid=0\nRaidType=0\n" Comments="Contient les informations communes aux diff\233rents syst\232mes d\aidentification.\nLe type d\aidentification permet de savoir dans quel table chercher les informations d\aidentifications sp\233cifique au mode d\aidentification." Collapsed="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="6406" OrderPos="10" >
<COLUMNS>
<COLUMN ID="6265" ColName="gsa_id_auth" PrevColName="" Pos="0" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="1" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Identifiant des informations d\aidentification.">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6267" ColName="gsa_ce_type_auth" PrevColName="" Pos="1" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Type d\aidentification : 0 inconnu, 1 : base de donn\233es, 2 : ldap.">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6840" ColName="gsa_nom" PrevColName="" Pos="4" idDatatype="20" DatatypeParams="(100)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Nom de l\aauthentification.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6341" ColName="gsa_ce_auth_bdd" PrevColName="" Pos="1" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="1" DefaultValue="" Comments="Identifiant des informations pour un identification via une base de donn\233es. ">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6340" ColName="gsa_ce_auth_ldap" PrevColName="" Pos="1" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="1" DefaultValue="" Comments="Identifiant des informations pour un identification via LDAP. ">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
</COLUMNS>
<RELATIONS_START>
<RELATION_START ID="6951" />
</RELATIONS_START>
<RELATIONS_END>
<RELATION_END ID="6952" />
<RELATION_END ID="6953" />
</RELATIONS_END>
<INDICES>
<INDEX ID="6266" IndexName="PRIMARY" IndexKind="0" FKRefDef_Obj_id="-1">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6265" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
<INDEX ID="6483" IndexName="idx_fk_gsa_ce_auth_ldap" IndexKind="1" FKRefDef_Obj_id="6427">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6340" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
<INDEX ID="6484" IndexName="idx_fk_gsa_ce_auth_bdd" IndexKind="1" FKRefDef_Obj_id="6428">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6341" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
</INDICES>
</TABLE>
<TABLE ID="6938" Tablename="gen_site_auth_bdd" PrevTableName="Table_16" XPos="1484" YPos="187" TableType="0" TablePrefix="0" nmTable="0" Temporary="0" UseStandardInserts="0" StandardInserts="\n" TableOptions="DelayKeyTblUpdates=0\nPackKeys=0\nRowChecksum=0\nRowFormat=0\nUseRaid=0\nRaidType=0\n" Comments="Contient les informations pour identification via une base de donn\233es." Collapsed="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="6407" OrderPos="11" >
<COLUMNS>
<COLUMN ID="6279" ColName="gsab_id_auth_bdd" PrevColName="" Pos="0" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="1" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Identifiant d\aune identification par base de donn\233es.">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6281" ColName="gsab_dsn" PrevColName="" Pos="1" idDatatype="20" DatatypeParams="(255)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Valeur du dsn.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6282" ColName="gsab_nom_table" PrevColName="" Pos="2" idDatatype="20" DatatypeParams="(100)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Nom de la table o\249 sont stock\233s les logins et mot de passes.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6283" ColName="gsab_nom_champ_login" PrevColName="" Pos="3" idDatatype="20" DatatypeParams="(100)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Nom du champ o\249 se trouve les logins.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6284" ColName="gsab_nom_champ_mdp" PrevColName="" Pos="4" idDatatype="20" DatatypeParams="(100)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Nom du champ o\249 se trouve les mots de passe.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6285" ColName="gsab_cryptage_mdp" PrevColName="" Pos="5" idDatatype="20" DatatypeParams="(100)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Type de cryptage du mot de passe.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
</COLUMNS>
<RELATIONS_START>
<RELATION_START ID="6953" />
</RELATIONS_START>
<INDICES>
<INDEX ID="6280" IndexName="PRIMARY" IndexKind="0" FKRefDef_Obj_id="-1">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6279" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
</INDICES>
</TABLE>
<TABLE ID="6939" Tablename="gen_site_auth_ldap" PrevTableName="Table_17" XPos="1241" YPos="191" TableType="0" TablePrefix="0" nmTable="0" Temporary="0" UseStandardInserts="0" StandardInserts="\n" TableOptions="DelayKeyTblUpdates=0\nPackKeys=0\nRowChecksum=0\nRowFormat=0\nUseRaid=0\nRaidType=0\n" Comments="Contient les information sp\233cifique \224 une identification via LDAP." Collapsed="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="6408" OrderPos="12" >
<COLUMNS>
<COLUMN ID="6288" ColName="gsal_id_auth_ldap" PrevColName="" Pos="0" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="1" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Identfiant des informations d\aidentification via ldap.">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6290" ColName="gsal_serveur" PrevColName="" Pos="1" idDatatype="20" DatatypeParams="(100)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Nom du serveur ldap.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6291" ColName="gsal_port" PrevColName="" Pos="2" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Port du serveur ldap.">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6292" ColName="gsal_base_dn" PrevColName="" Pos="3" idDatatype="20" DatatypeParams="(255)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Base dn.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6293" ColName="gsal_uid" PrevColName="" Pos="4" idDatatype="20" DatatypeParams="(100)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Uid.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
</COLUMNS>
<RELATIONS_START>
<RELATION_START ID="6952" />
</RELATIONS_START>
<INDICES>
<INDEX ID="6289" IndexName="PRIMARY" IndexKind="0" FKRefDef_Obj_id="-1">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6288" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
</INDICES>
</TABLE>
<TABLE ID="6940" Tablename="gen_i18n" PrevTableName="LOCALE" XPos="105" YPos="199" TableType="0" TablePrefix="0" nmTable="0" Temporary="0" UseStandardInserts="0" StandardInserts="\n" TableOptions="DelayKeyTblUpdates=0\nPackKeys=0\nRowChecksum=0\nRowFormat=0\nUseRaid=0\nRaidType=0\n" Comments="Contient les informations sur le couple langue / pays autrement appel\233 Internationalisation ou i18n." Collapsed="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="6524" OrderPos="13" >
<COLUMNS>
<COLUMN ID="1015" ColName="gi_id_i18n" PrevColName="" Pos="1" idDatatype="20" DatatypeParams="(8)" Width="0" Prec="0" PrimaryKey="1" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Identifiant d\aune langue (voir RFC 1766). Exemple : fr-FR.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6558" ColName="gi_ce_langue" PrevColName="" Pos="1" idDatatype="20" DatatypeParams="(2)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="1" DefaultValue="" Comments="Identifiant de la langue.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6556" ColName="gi_ce_pays" PrevColName="" Pos="1" idDatatype="20" DatatypeParams="(2)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="1" DefaultValue="" Comments="Identifiant du pays.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="1018" ColName="gi_jeu_de_caracteres" PrevColName="" Pos="3" idDatatype="20" DatatypeParams="(50)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Jeu de caract\232re de la langue. Exemple : iso-8859-15 pour le fran\231ais.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="1021" ColName="gi_nom" PrevColName="" Pos="3" idDatatype="20" DatatypeParams="(255)" Width="0" Prec="0" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Informations sur la langue. Peut apparaitre dans l\aattribut alt de l\aimage repr\233sentant la langue.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
</COLUMNS>
<RELATIONS_START>
<RELATION_START ID="6956" />
<RELATION_START ID="6957" />
<RELATION_START ID="6964" />
</RELATIONS_START>
<RELATIONS_END>
<RELATION_END ID="6954" />
<RELATION_END ID="6955" />
</RELATIONS_END>
<INDICES>
<INDEX ID="1024" IndexName="PRIMARY" IndexKind="0" FKRefDef_Obj_id="-1">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="1015" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
<INDEX ID="6570" IndexName="gen_i18n_FKIndex1" IndexKind="1" FKRefDef_Obj_id="6527">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6556" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
<INDEX ID="6571" IndexName="gen_i18n_FKIndex2" IndexKind="1" FKRefDef_Obj_id="6528">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6558" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
</INDICES>
</TABLE>
<TABLE ID="6941" Tablename="gen_i18n_pays" PrevTableName="Table_04" XPos="232" YPos="41" TableType="0" TablePrefix="0" nmTable="0" Temporary="0" UseStandardInserts="0" StandardInserts="\n" TableOptions="DelayKeyTblUpdates=0\nPackKeys=0\nRowChecksum=0\nRowFormat=0\nUseRaid=0\nRaidType=0\n" Comments="Cette table contient les diff\233rents pays du monde et leur nom par d\233faut (en fran\231ais). Ainsi qu\aun nom de fichier pour le drapeaux." Collapsed="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="6525" OrderPos="14" >
<COLUMNS>
<COLUMN ID="1092" ColName="gip_id_pays" PrevColName="" Pos="0" idDatatype="20" DatatypeParams="(2)" Width="-1" Prec="-1" PrimaryKey="1" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Identifiant du pays code iso639.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="1098" ColName="gip_nom" PrevColName="" Pos="1" idDatatype="20" DatatypeParams="(255)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Le nom par d\233faut, en fran\231ais.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="1108" ColName="gip_fichier_drapeau" PrevColName="" Pos="2" idDatatype="20" DatatypeParams="(255)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Un fichier graphique pour le drapeau.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
</COLUMNS>
<RELATIONS_START>
<RELATION_START ID="6954" />
</RELATIONS_START>
<INDICES>
<INDEX ID="1093" IndexName="PRIMARY" IndexKind="0" FKRefDef_Obj_id="-1">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="1092" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
</INDICES>
</TABLE>
<TABLE ID="6942" Tablename="gen_i18n_langue" PrevTableName="Table_05" XPos="8" YPos="42" TableType="0" TablePrefix="0" nmTable="0" Temporary="0" UseStandardInserts="0" StandardInserts="\n" TableOptions="DelayKeyTblUpdates=0\nPackKeys=0\nRowChecksum=0\nRowFormat=0\nUseRaid=0\nRaidType=0\n" Comments="Cette table contient les langues, leur noms par d\233faut, en fran\231ais en g\233n\233ral et la direction d\a\233criture (ltr left to right ou rtl right to left)" Collapsed="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="6526" OrderPos="15" >
<COLUMNS>
<COLUMN ID="1102" ColName="gil_id_langue" PrevColName="" Pos="0" idDatatype="20" DatatypeParams="(2)" Width="-1" Prec="-1" PrimaryKey="1" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Identifiant de la langue. Iso3166.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="1104" ColName="gil_nom" PrevColName="" Pos="1" idDatatype="20" DatatypeParams="(255)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Le nom dans la langue par d\233faut.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="1106" ColName="gil_direction" PrevColName="" Pos="2" idDatatype="20" DatatypeParams="(20)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="La direction d\a\233criture ltr ou rtl.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
</COLUMNS>
<RELATIONS_START>
<RELATION_START ID="6955" />
</RELATIONS_START>
<INDICES>
<INDEX ID="1103" IndexName="PRIMARY" IndexKind="0" FKRefDef_Obj_id="-1">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="1102" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
</INDICES>
</TABLE>
<TABLE ID="6943" Tablename="gen_menu_categorie_valeur" PrevTableName="Table_18" XPos="952" YPos="1062" TableType="0" TablePrefix="0" nmTable="0" Temporary="0" UseStandardInserts="0" StandardInserts="\n" TableOptions="DelayKeyTblUpdates=0\nPackKeys=0\nRowChecksum=0\nRowFormat=0\nUseRaid=0\nRaidType=0\n" Comments="" Collapsed="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="6676" OrderPos="16" >
<COLUMNS>
<COLUMN ID="6693" ColName="gmcv_id_valeur" PrevColName="" Pos="0" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="1" NotNull="1" AutoInc="1" IsForeignKey="0" DefaultValue="" Comments="">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6776" ColName="gmcv_id_categorie" PrevColName="" Pos="1" idDatatype="5" DatatypeParams="" Width="-1" Prec="-1" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="1" DefaultValue="" Comments="">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6695" ColName="gmcv_intitule_valeur" PrevColName="" Pos="1" idDatatype="20" DatatypeParams="(255)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
</COLUMNS>
<RELATIONS_START>
<RELATION_START ID="6968" />
</RELATIONS_START>
<RELATIONS_END>
<RELATION_END ID="6967" />
</RELATIONS_END>
<INDICES>
<INDEX ID="6694" IndexName="PRIMARY" IndexKind="0" FKRefDef_Obj_id="-1">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6693" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
<INDEX ID="6738" IndexName="gen_menu_categorie_valeur_FKIndex1" IndexKind="1" FKRefDef_Obj_id="6684">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6776" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
</INDICES>
</TABLE>
<TABLE ID="6944" Tablename="gen_menu_categorie" PrevTableName="Table_19" XPos="943" YPos="963" TableType="0" TablePrefix="0" nmTable="0" Temporary="0" UseStandardInserts="0" StandardInserts="\n" TableOptions="DelayKeyTblUpdates=0\nPackKeys=0\nRowChecksum=0\nRowFormat=0\nUseRaid=0\nRaidType=0\n" Comments="" Collapsed="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="6677" OrderPos="17" >
<COLUMNS>
<COLUMN ID="6702" ColName="gmca_id_categorie" PrevColName="" Pos="0" idDatatype="5" DatatypeParams="" Width="-1" Prec="-1" PrimaryKey="1" NotNull="1" AutoInc="1" IsForeignKey="0" DefaultValue="" Comments="">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6704" ColName="gmca_intitule_categorie" PrevColName="" Pos="1" idDatatype="20" DatatypeParams="(255)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
</COLUMNS>
<RELATIONS_START>
<RELATION_START ID="6967" />
</RELATIONS_START>
<INDICES>
<INDEX ID="6703" IndexName="PRIMARY" IndexKind="0" FKRefDef_Obj_id="-1">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6702" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
</INDICES>
</TABLE>
<TABLE ID="6945" Tablename="gen_site_relation" PrevTableName="MENU_LEVEL_1" XPos="991" YPos="373" TableType="0" TablePrefix="0" nmTable="0" Temporary="0" UseStandardInserts="0" StandardInserts="\n" TableOptions="DelayKeyTblUpdates=0\nPackKeys=0\nRowChecksum=0\nRowFormat=0\nUseRaid=0\nRaidType=0\nChunks=2\nChunkSize=64\n" Comments="Table permettant de connaitre les relations unissant les menus entre eux." Collapsed="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="6739" OrderPos="18" >
<COLUMNS>
<COLUMN ID="6809" ColName="gsr_id_site_01" PrevColName="" Pos="1" idDatatype="5" DatatypeParams="(11)" Width="0" Prec="0" PrimaryKey="1" NotNull="1" AutoInc="0" IsForeignKey="1" DefaultValue="" Comments="">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6808" ColName="gsr_id_site_02" PrevColName="" Pos="1" idDatatype="5" DatatypeParams="(11)" Width="0" Prec="0" PrimaryKey="1" NotNull="1" AutoInc="0" IsForeignKey="1" DefaultValue="" Comments="">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6784" ColName="gsr_id_valeur" PrevColName="" Pos="1" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="1" NotNull="1" AutoInc="0" IsForeignKey="1" DefaultValue="" Comments="">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6743" ColName="gsr_ordre" PrevColName="" Pos="3" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Ordre des relations quand on a le meme identifiant de menu 01 et le meme type de relation.">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
</COLUMNS>
<RELATIONS_END>
<RELATION_END ID="6970" />
<RELATION_END ID="6971" />
<RELATION_END ID="6972" />
</RELATIONS_END>
<INDICES>
<INDEX ID="6774" IndexName="PRIMARY" IndexKind="0" FKRefDef_Obj_id="-1">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6809" LengthParam="0" />
<INDEXCOLUMN idColumn="6808" LengthParam="0" />
<INDEXCOLUMN idColumn="6784" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
<INDEX ID="6829" IndexName="gen_site_relation_FKIndex1" IndexKind="1" FKRefDef_Obj_id="6746">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6784" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
<INDEX ID="6830" IndexName="gen_site_relation_FKIndex2" IndexKind="1" FKRefDef_Obj_id="6777">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6809" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
<INDEX ID="6831" IndexName="gen_site_relation_FKIndex3" IndexKind="1" FKRefDef_Obj_id="6780">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6808" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
</INDICES>
</TABLE>
<TABLE ID="6946" Tablename="gen_site_categorie_valeur" PrevTableName="Table_18" XPos="980" YPos="234" TableType="0" TablePrefix="0" nmTable="0" Temporary="0" UseStandardInserts="0" StandardInserts="\n" TableOptions="DelayKeyTblUpdates=0\nPackKeys=0\nRowChecksum=0\nRowFormat=0\nUseRaid=0\nRaidType=0\n" Comments="" Collapsed="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="6751" OrderPos="19" >
<COLUMNS>
<COLUMN ID="6752" ColName="gscv_id_valeur" PrevColName="" Pos="0" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="1" NotNull="1" AutoInc="1" IsForeignKey="0" DefaultValue="" Comments="">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6799" ColName="gsc_id_categorie" PrevColName="" Pos="1" idDatatype="5" DatatypeParams="" Width="-1" Prec="-1" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="1" DefaultValue="" Comments="">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6754" ColName="gscv_intitule_valeur" PrevColName="" Pos="1" idDatatype="20" DatatypeParams="(255)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
</COLUMNS>
<RELATIONS_START>
<RELATION_START ID="6970" />
</RELATIONS_START>
<RELATIONS_END>
<RELATION_END ID="6969" />
</RELATIONS_END>
<INDICES>
<INDEX ID="6756" IndexName="PRIMARY" IndexKind="0" FKRefDef_Obj_id="-1">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6752" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
<INDEX ID="6832" IndexName="gen_site_categorie_valeur_FKIndex1" IndexKind="1" FKRefDef_Obj_id="6755">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6799" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
</INDICES>
</TABLE>
<TABLE ID="6947" Tablename="gen_site_categorie" PrevTableName="Table_19" XPos="971" YPos="107" TableType="0" TablePrefix="0" nmTable="0" Temporary="0" UseStandardInserts="0" StandardInserts="\n" TableOptions="DelayKeyTblUpdates=0\nPackKeys=0\nRowChecksum=0\nRowFormat=0\nUseRaid=0\nRaidType=0\n" Comments="" Collapsed="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="6758" OrderPos="20" >
<COLUMNS>
<COLUMN ID="6759" ColName="gsc_id_categorie" PrevColName="" Pos="0" idDatatype="5" DatatypeParams="" Width="-1" Prec="-1" PrimaryKey="1" NotNull="1" AutoInc="1" IsForeignKey="0" DefaultValue="" Comments="">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6760" ColName="gsc_intitule_categorie" PrevColName="" Pos="1" idDatatype="20" DatatypeParams="(255)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
</COLUMNS>
<RELATIONS_START>
<RELATION_START ID="6969" />
</RELATIONS_START>
<INDICES>
<INDEX ID="6761" IndexName="PRIMARY" IndexKind="0" FKRefDef_Obj_id="-1">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6759" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
</INDICES>
</TABLE>
</TABLES>
<RELATIONS>
<RELATION ID="6949" RelationName="fk_GS_GMCAC" Kind="2" SrcTable="6931" DestTable="6929" FKFields="gs_id_site=gmcac_ce_site\n" FKFieldsComments="\n" relDirection="3" MidOffset="1" OptionalStart="0" OptionalEnd="0" CaptionOffsetX="0" CaptionOffsetY="-48" StartIntervalOffsetX="11" StartIntervalOffsetY="-28" EndIntervalOffsetX="0" EndIntervalOffsetY="0" CreateRefDef="1" Invisible="0" RefDef="Matching=0\nOnDelete=3\nOnUpdate=3\n" Comments="" FKRefDefIndex_Obj_id="6827" Splitted="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="-1" OrderPos="22" />
<RELATION ID="6950" RelationName="fk_GA_GMC" Kind="2" SrcTable="6932" DestTable="6936" FKFields="ga_id_administrateur=gmc_ce_admin\n" FKFieldsComments="\n" relDirection="3" MidOffset="215" OptionalStart="0" OptionalEnd="0" CaptionOffsetX="-53" CaptionOffsetY="-23" StartIntervalOffsetX="0" StartIntervalOffsetY="0" EndIntervalOffsetX="0" EndIntervalOffsetY="0" CreateRefDef="1" Invisible="0" RefDef="Matching=0\nOnDelete=3\nOnUpdate=3\n" Comments="" FKRefDefIndex_Obj_id="6482" Splitted="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="-1" OrderPos="23" />
<RELATION ID="6951" RelationName="fk_GSA_GS" Kind="2" SrcTable="6937" DestTable="6931" FKFields="gsa_id_auth=gs_ce_auth\n" FKFieldsComments="\n" relDirection="4" MidOffset="-236" OptionalStart="0" OptionalEnd="0" CaptionOffsetX="0" CaptionOffsetY="-10" StartIntervalOffsetX="0" StartIntervalOffsetY="0" EndIntervalOffsetX="-9" EndIntervalOffsetY="-3" CreateRefDef="1" Invisible="0" RefDef="Matching=0\nOnDelete=3\nOnUpdate=3\n" Comments="" FKRefDefIndex_Obj_id="6474" Splitted="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="-1" OrderPos="24" />
<RELATION ID="6952" RelationName="fk_GSAL_GSA" Kind="5" SrcTable="6939" DestTable="6937" FKFields="gsal_id_auth_ldap=gsa_ce_auth_ldap\n" FKFieldsComments="\n" relDirection="1" MidOffset="-1" OptionalStart="0" OptionalEnd="0" CaptionOffsetX="0" CaptionOffsetY="0" StartIntervalOffsetX="0" StartIntervalOffsetY="0" EndIntervalOffsetX="0" EndIntervalOffsetY="0" CreateRefDef="1" Invisible="0" RefDef="Matching=0\nOnDelete=3\nOnUpdate=3\n" Comments="" FKRefDefIndex_Obj_id="6483" Splitted="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="-1" OrderPos="25" />
<RELATION ID="6953" RelationName="fk_GSAB_GSA" Kind="5" SrcTable="6938" DestTable="6937" FKFields="gsab_id_auth_bdd=gsa_ce_auth_bdd\n" FKFieldsComments="\n" relDirection="1" MidOffset="0" OptionalStart="0" OptionalEnd="0" CaptionOffsetX="-69" CaptionOffsetY="-8" StartIntervalOffsetX="0" StartIntervalOffsetY="0" EndIntervalOffsetX="0" EndIntervalOffsetY="0" CreateRefDef="1" Invisible="0" RefDef="Matching=0\nOnDelete=3\nOnUpdate=3\n" Comments="" FKRefDefIndex_Obj_id="6484" Splitted="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="-1" OrderPos="26" />
<RELATION ID="6954" RelationName="fk_GIP_GI" Kind="2" SrcTable="6941" DestTable="6940" FKFields="gip_id_pays=gi_ce_pays\n" FKFieldsComments="\n" relDirection="3" MidOffset="1" OptionalStart="0" OptionalEnd="0" CaptionOffsetX="3" CaptionOffsetY="-3" StartIntervalOffsetX="0" StartIntervalOffsetY="0" EndIntervalOffsetX="0" EndIntervalOffsetY="0" CreateRefDef="1" Invisible="0" RefDef="Matching=0\nOnDelete=3\nOnUpdate=3\n" Comments="" FKRefDefIndex_Obj_id="6570" Splitted="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="-1" OrderPos="27" />
<RELATION ID="6955" RelationName="fk_GIL_GI" Kind="2" SrcTable="6942" DestTable="6940" FKFields="gil_id_langue=gi_ce_langue\n" FKFieldsComments="\n" relDirection="3" MidOffset="0" OptionalStart="0" OptionalEnd="0" CaptionOffsetX="53" CaptionOffsetY="-22" StartIntervalOffsetX="6" StartIntervalOffsetY="4" EndIntervalOffsetX="0" EndIntervalOffsetY="0" CreateRefDef="1" Invisible="0" RefDef="Matching=0\nOnDelete=3\nOnUpdate=3\n" Comments="" FKRefDefIndex_Obj_id="6571" Splitted="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="-1" OrderPos="28" />
<RELATION ID="6956" RelationName="fk_GI_GA" Kind="2" SrcTable="6940" DestTable="6932" FKFields="gi_id_i18n=ga_ce_i18n\n" FKFieldsComments="\n" relDirection="3" MidOffset="-30" OptionalStart="0" OptionalEnd="0" CaptionOffsetX="47" CaptionOffsetY="-20" StartIntervalOffsetX="0" StartIntervalOffsetY="5" EndIntervalOffsetX="-3" EndIntervalOffsetY="-5" CreateRefDef="1" Invisible="0" RefDef="Matching=0\nOnDelete=3\nOnUpdate=3\n" Comments="" FKRefDefIndex_Obj_id="6534" Splitted="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="-1" OrderPos="29" />
<RELATION ID="6957" RelationName="fk_GI_GS" Kind="2" SrcTable="6940" DestTable="6931" FKFields="gi_id_i18n=gs_ce_i18n\n" FKFieldsComments="\n" relDirection="2" MidOffset="5" OptionalStart="0" OptionalEnd="0" CaptionOffsetX="0" CaptionOffsetY="0" StartIntervalOffsetX="0" StartIntervalOffsetY="0" EndIntervalOffsetX="0" EndIntervalOffsetY="0" CreateRefDef="1" Invisible="0" RefDef="Matching=0\nOnDelete=3\nOnUpdate=3\n" Comments="" FKRefDefIndex_Obj_id="6609" Splitted="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="-1" OrderPos="30" />
<RELATION ID="6958" RelationName="fk_GS_GM" Kind="2" SrcTable="6931" DestTable="6935" FKFields="gs_id_site=gm_ce_site\n" FKFieldsComments="\n" relDirection="3" MidOffset="0" OptionalStart="0" OptionalEnd="0" CaptionOffsetX="0" CaptionOffsetY="0" StartIntervalOffsetX="0" StartIntervalOffsetY="0" EndIntervalOffsetX="0" EndIntervalOffsetY="0" CreateRefDef="1" Invisible="0" RefDef="Matching=0\nOnDelete=3\nOnUpdate=3\n" Comments="" FKRefDefIndex_Obj_id="6828" Splitted="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="-1" OrderPos="31" />
<RELATION ID="6959" RelationName="fk_GA_GM" Kind="2" SrcTable="6932" DestTable="6935" FKFields="ga_id_administrateur=gm_ce_admin\n" FKFieldsComments="\n" relDirection="2" MidOffset="3" OptionalStart="0" OptionalEnd="0" CaptionOffsetX="0" CaptionOffsetY="0" StartIntervalOffsetX="0" StartIntervalOffsetY="0" EndIntervalOffsetX="0" EndIntervalOffsetY="0" CreateRefDef="1" Invisible="0" RefDef="Matching=0\nOnDelete=3\nOnUpdate=3\n" Comments="" FKRefDefIndex_Obj_id="6621" Splitted="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="-1" OrderPos="32" />
<RELATION ID="6960" RelationName="fk_GA_GS" Kind="2" SrcTable="6932" DestTable="6931" FKFields="ga_id_administrateur=gs_ce_admin\n" FKFieldsComments="\n" relDirection="2" MidOffset="-40" OptionalStart="0" OptionalEnd="0" CaptionOffsetX="0" CaptionOffsetY="0" StartIntervalOffsetX="0" StartIntervalOffsetY="0" EndIntervalOffsetX="0" EndIntervalOffsetY="0" CreateRefDef="1" Invisible="0" RefDef="Matching=0\nOnDelete=3\nOnUpdate=3\n" Comments="" FKRefDefIndex_Obj_id="6625" Splitted="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="-1" OrderPos="33" />
<RELATION ID="6961" RelationName="fk_GM_GMUA" Kind="2" SrcTable="6935" DestTable="6934" FKFields="gm_id_menu=gmua_ce_menu\n" FKFieldsComments="\n" relDirection="3" MidOffset="0" OptionalStart="0" OptionalEnd="0" CaptionOffsetX="-62" CaptionOffsetY="-6" StartIntervalOffsetX="0" StartIntervalOffsetY="0" EndIntervalOffsetX="0" EndIntervalOffsetY="0" CreateRefDef="1" Invisible="0" RefDef="Matching=0\nOnDelete=3\nOnUpdate=3\n" Comments="" FKRefDefIndex_Obj_id="6629" Splitted="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="-1" OrderPos="34" />
<RELATION ID="6962" RelationName="fk_GAP_GM" Kind="2" SrcTable="6933" DestTable="6935" FKFields="gap_id_application=gm_ce_application\n" FKFieldsComments="\n" relDirection="4" MidOffset="190" OptionalStart="0" OptionalEnd="0" CaptionOffsetX="0" CaptionOffsetY="0" StartIntervalOffsetX="0" StartIntervalOffsetY="0" EndIntervalOffsetX="0" EndIntervalOffsetY="0" CreateRefDef="1" Invisible="0" RefDef="Matching=0\nOnDelete=3\nOnUpdate=3\n" Comments="" FKRefDefIndex_Obj_id="6633" Splitted="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="-1" OrderPos="35" />
<RELATION ID="6963" RelationName="fk_GM_GMC" Kind="2" SrcTable="6935" DestTable="6936" FKFields="gm_id_menu=gmc_ce_menu\n" FKFieldsComments="\n" relDirection="3" MidOffset="3" OptionalStart="0" OptionalEnd="0" CaptionOffsetX="53" CaptionOffsetY="-5" StartIntervalOffsetX="0" StartIntervalOffsetY="0" EndIntervalOffsetX="0" EndIntervalOffsetY="0" CreateRefDef="1" Invisible="0" RefDef="Matching=0\nOnDelete=3\nOnUpdate=3\n" Comments="" FKRefDefIndex_Obj_id="6637" Splitted="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="-1" OrderPos="36" />
<RELATION ID="6964" RelationName="fk_GI_GM" Kind="2" SrcTable="6940" DestTable="6935" FKFields="gi_id_i18n=gm_ce_i18n\n" FKFieldsComments="\n" relDirection="3" MidOffset="40" OptionalStart="0" OptionalEnd="0" CaptionOffsetX="0" CaptionOffsetY="0" StartIntervalOffsetX="0" StartIntervalOffsetY="0" EndIntervalOffsetX="0" EndIntervalOffsetY="0" CreateRefDef="1" Invisible="0" RefDef="Matching=0\nOnDelete=3\nOnUpdate=3\n" Comments="" FKRefDefIndex_Obj_id="6641" Splitted="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="-1" OrderPos="37" />
<RELATION ID="6965" RelationName="fk_GM_GMR_01" Kind="1" SrcTable="6935" DestTable="6930" FKFields="gm_id_menu=gmr_id_menu_01\n" FKFieldsComments="\n" relDirection="2" MidOffset="10" OptionalStart="0" OptionalEnd="0" CaptionOffsetX="0" CaptionOffsetY="0" StartIntervalOffsetX="0" StartIntervalOffsetY="0" EndIntervalOffsetX="16" EndIntervalOffsetY="-5" CreateRefDef="1" Invisible="0" RefDef="Matching=0\nOnDelete=3\nOnUpdate=3\n" Comments="" FKRefDefIndex_Obj_id="6663" Splitted="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="-1" OrderPos="38" />
<RELATION ID="6966" RelationName="fk_GM_GMR_02" Kind="1" SrcTable="6935" DestTable="6930" FKFields="gm_id_menu=gmr_id_menu_02\n" FKFieldsComments="\n" relDirection="2" MidOffset="9" OptionalStart="0" OptionalEnd="0" CaptionOffsetX="1" CaptionOffsetY="-60" StartIntervalOffsetX="0" StartIntervalOffsetY="0" EndIntervalOffsetX="17" EndIntervalOffsetY="-6" CreateRefDef="1" Invisible="0" RefDef="Matching=0\nOnDelete=3\nOnUpdate=3\n" Comments="" FKRefDefIndex_Obj_id="6665" Splitted="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="-1" OrderPos="39" />
<RELATION ID="6967" RelationName="fk_GMCA_GMVC" Kind="2" SrcTable="6944" DestTable="6943" FKFields="gmca_id_categorie=gmcv_id_categorie\n" FKFieldsComments="\n" relDirection="3" MidOffset="19" OptionalStart="0" OptionalEnd="0" CaptionOffsetX="72" CaptionOffsetY="-23" StartIntervalOffsetX="1" StartIntervalOffsetY="5" EndIntervalOffsetX="1" EndIntervalOffsetY="-8" CreateRefDef="1" Invisible="0" RefDef="Matching=0\nOnDelete=3\nOnUpdate=3\n" Comments="" FKRefDefIndex_Obj_id="6738" Splitted="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="-1" OrderPos="40" />
<RELATION ID="6968" RelationName="fk_GMCV_GMR" Kind="1" SrcTable="6943" DestTable="6930" FKFields="gmcv_id_valeur=gmr_id_valeur\n" FKFieldsComments="\n" relDirection="3" MidOffset="1" OptionalStart="0" OptionalEnd="0" CaptionOffsetX="64" CaptionOffsetY="-28" StartIntervalOffsetX="0" StartIntervalOffsetY="0" EndIntervalOffsetX="0" EndIntervalOffsetY="0" CreateRefDef="1" Invisible="0" RefDef="Matching=0\nOnDelete=3\nOnUpdate=3\n" Comments="" FKRefDefIndex_Obj_id="6737" Splitted="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="-1" OrderPos="41" />
<RELATION ID="6969" RelationName="fk_GSC_GSCV" Kind="2" SrcTable="6947" DestTable="6946" FKFields="gsc_id_categorie=gsc_id_categorie\n" FKFieldsComments="\n" relDirection="3" MidOffset="0" OptionalStart="0" OptionalEnd="0" CaptionOffsetX="62" CaptionOffsetY="-20" StartIntervalOffsetX="0" StartIntervalOffsetY="5" EndIntervalOffsetX="1" EndIntervalOffsetY="-4" CreateRefDef="1" Invisible="0" RefDef="Matching=0\nOnDelete=3\nOnUpdate=3\n" Comments="" FKRefDefIndex_Obj_id="6832" Splitted="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="-1" OrderPos="42" />
<RELATION ID="6970" RelationName="fk_GSCV_GSR" Kind="1" SrcTable="6946" DestTable="6945" FKFields="gscv_id_valeur=gsr_id_valeur\n" FKFieldsComments="\n" relDirection="3" MidOffset="-10" OptionalStart="0" OptionalEnd="0" CaptionOffsetX="70" CaptionOffsetY="-24" StartIntervalOffsetX="0" StartIntervalOffsetY="0" EndIntervalOffsetX="0" EndIntervalOffsetY="0" CreateRefDef="1" Invisible="0" RefDef="Matching=0\nOnDelete=3\nOnUpdate=3\n" Comments="" FKRefDefIndex_Obj_id="6829" Splitted="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="-1" OrderPos="43" />
<RELATION ID="6971" RelationName="fk_GS_GSR_01" Kind="1" SrcTable="6931" DestTable="6945" FKFields="gs_id_site=gsr_id_site_01\n" FKFieldsComments="\n" relDirection="2" MidOffset="0" OptionalStart="0" OptionalEnd="0" CaptionOffsetX="-17" CaptionOffsetY="4" StartIntervalOffsetX="9" StartIntervalOffsetY="0" EndIntervalOffsetX="-12" EndIntervalOffsetY="-23" CreateRefDef="1" Invisible="0" RefDef="Matching=0\nOnDelete=3\nOnUpdate=3\n" Comments="" FKRefDefIndex_Obj_id="6830" Splitted="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="-1" OrderPos="44" />
<RELATION ID="6972" RelationName="fk_GS_GSR_02" Kind="1" SrcTable="6931" DestTable="6945" FKFields="gs_id_site=gsr_id_site_02\n" FKFieldsComments="\n" relDirection="2" MidOffset="1" OptionalStart="0" OptionalEnd="0" CaptionOffsetX="-3" CaptionOffsetY="-53" StartIntervalOffsetX="11" StartIntervalOffsetY="0" EndIntervalOffsetX="-12" EndIntervalOffsetY="-27" CreateRefDef="1" Invisible="0" RefDef="Matching=0\nOnDelete=3\nOnUpdate=3\n" Comments="" FKRefDefIndex_Obj_id="6831" Splitted="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="-1" OrderPos="45" />
</RELATIONS>
<NOTES>
</NOTES>
<IMAGES>
</IMAGES>
</METADATA>
<PLUGINDATA>
<PLUGINDATARECORDS>
</PLUGINDATARECORDS>
</PLUGINDATA>
<QUERYDATA>
<QUERYRECORDS>
</QUERYRECORDS>
</QUERYDATA>
<LINKEDMODELS>
</LINKEDMODELS>
</DBMODEL>
/branches/v1.0-menes/papyrus/documentation/modele_papyrus.xml
New file
0,0 → 1,1404
<?xml version="1.0" standalone="yes" ?>
<DBMODEL Version="4.0">
<SETTINGS>
<GLOBALSETTINGS ModelName="Module G\233n\233al - Papyrus " IDModel="0" IDVersion="0" VersionStr="1.0.0.0" Comments="Module contenant les tables g\233n\233rales de Papyrus." UseVersionHistroy="1" AutoIncVersion="1" DatabaseType="MySQL" ZoomFac="75.00" XPos="0" YPos="0" DefaultDataType="5" DefaultTablePrefix="0" DefSaveDBConn="" DefSyncDBConn="" DefQueryDBConn="" Printer="" HPageCount="4.0" PageAspectRatio="1.440892512336408" PageOrientation="1" PageFormat="A4 (210x297 mm, 8.26x11.7 inches)" SelectedPages="" UsePositionGrid="0" PositionGridX="20" PositionGridY="20" TableNameInRefs="0" DefaultTableType="0" ActivateRefDefForNewRelations="0" FKPrefix="" FKPostfix="" CreateFKRefDefIndex="0" DBQuoteCharacter="`" CreateSQLforLinkedObjects="0" DefModelFont="Nimbus Sans L" CanvasWidth="4096" CanvasHeight="2842" />
<DATATYPEGROUPS>
<DATATYPEGROUP Name="Numeric Types" Icon="1" />
<DATATYPEGROUP Name="Date and Time Types" Icon="2" />
<DATATYPEGROUP Name="String Types" Icon="3" />
<DATATYPEGROUP Name="Blob and Text Types" Icon="4" />
<DATATYPEGROUP Name="User defined Types" Icon="5" />
<DATATYPEGROUP Name="Geographic Types" Icon="6" />
</DATATYPEGROUPS>
<DATATYPES>
<DATATYPE ID="1" IDGroup="0" TypeName="TINYINT" Description="A very small integer. The signed range is -128 to 127. The unsigned range is 0 to 255." ParamCount="1" OptionCount="2" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
<PARAMS>
<PARAM Name="length" />
</PARAMS>
<OPTIONS>
<OPTION Name="UNSIGNED" Default="1" />
<OPTION Name="ZEROFILL" Default="0" />
</OPTIONS>
</DATATYPE>
<DATATYPE ID="2" IDGroup="0" TypeName="SMALLINT" Description="A small integer. The signed range is -32768 to 32767. The unsigned range is 0 to 65535." ParamCount="1" OptionCount="2" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
<PARAMS>
<PARAM Name="length" />
</PARAMS>
<OPTIONS>
<OPTION Name="UNSIGNED" Default="1" />
<OPTION Name="ZEROFILL" Default="0" />
</OPTIONS>
</DATATYPE>
<DATATYPE ID="3" IDGroup="0" TypeName="MEDIUMINT" Description="A medium-size integer. The signed range is -8388608 to 8388607. The unsigned range is 0 to 16777215." ParamCount="1" OptionCount="2" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
<PARAMS>
<PARAM Name="length" />
</PARAMS>
<OPTIONS>
<OPTION Name="UNSIGNED" Default="1" />
<OPTION Name="ZEROFILL" Default="0" />
</OPTIONS>
</DATATYPE>
<DATATYPE ID="4" IDGroup="0" TypeName="INT" Description="A normal-size integer. The signed range is -2147483648 to 2147483647. The unsigned range is 0 to 4294967295." ParamCount="1" OptionCount="2" ParamRequired="0" EditParamsAsString="0" SynonymGroup="1" PhysicalMapping="0" PhysicalTypeName="" >
<PARAMS>
<PARAM Name="length" />
</PARAMS>
<OPTIONS>
<OPTION Name="UNSIGNED" Default="0" />
<OPTION Name="ZEROFILL" Default="0" />
</OPTIONS>
</DATATYPE>
<DATATYPE ID="5" IDGroup="0" TypeName="INTEGER" Description="A normal-size integer. The signed range is -2147483648 to 2147483647. The unsigned range is 0 to 4294967295." ParamCount="1" OptionCount="2" ParamRequired="0" EditParamsAsString="0" SynonymGroup="1" PhysicalMapping="0" PhysicalTypeName="" >
<PARAMS>
<PARAM Name="length" />
</PARAMS>
<OPTIONS>
<OPTION Name="UNSIGNED" Default="1" />
<OPTION Name="ZEROFILL" Default="0" />
</OPTIONS>
</DATATYPE>
<DATATYPE ID="6" IDGroup="0" TypeName="BIGINT" Description="A large integer. The signed range is -9223372036854775808 to 9223372036854775807. The unsigned range is 0 to 18446744073709551615." ParamCount="1" OptionCount="2" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
<PARAMS>
<PARAM Name="length" />
</PARAMS>
<OPTIONS>
<OPTION Name="UNSIGNED" Default="0" />
<OPTION Name="ZEROFILL" Default="0" />
</OPTIONS>
</DATATYPE>
<DATATYPE ID="7" IDGroup="0" TypeName="FLOAT" Description="A small (single-precision) floating-point number. Cannot be unsigned. Allowable values are -3.402823466E+38 to -1.175494351E-38, 0, and 1.175494351E-38 to 3.402823466E+38." ParamCount="1" OptionCount="1" ParamRequired="1" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
<PARAMS>
<PARAM Name="precision" />
</PARAMS>
<OPTIONS>
<OPTION Name="ZEROFILL" Default="0" />
</OPTIONS>
</DATATYPE>
<DATATYPE ID="8" IDGroup="0" TypeName="FLOAT" Description="A small (single-precision) floating-point number. Cannot be unsigned. Allowable values are -3.402823466E+38 to -1.175494351E-38, 0, and 1.175494351E-38 to 3.402823466E+38." ParamCount="2" OptionCount="1" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
<PARAMS>
<PARAM Name="length" />
<PARAM Name="decimals" />
</PARAMS>
<OPTIONS>
<OPTION Name="ZEROFILL" Default="0" />
</OPTIONS>
</DATATYPE>
<DATATYPE ID="9" IDGroup="0" TypeName="DOUBLE" Description="A normal-size (double-precision) floating-point number. Cannot be unsigned. Allowable values are -1.7976931348623157E+308 to -2.2250738585072014E-308, 0, and 2.2250738585072014E-308 to 1.7976931348623157E+308." ParamCount="2" OptionCount="1" ParamRequired="0" EditParamsAsString="0" SynonymGroup="2" PhysicalMapping="0" PhysicalTypeName="" >
<PARAMS>
<PARAM Name="length" />
<PARAM Name="decimals" />
</PARAMS>
<OPTIONS>
<OPTION Name="ZEROFILL" Default="0" />
</OPTIONS>
</DATATYPE>
<DATATYPE ID="10" IDGroup="0" TypeName="DOUBLE PRECISION" Description="This is a synonym for DOUBLE." ParamCount="2" OptionCount="1" ParamRequired="0" EditParamsAsString="0" SynonymGroup="2" PhysicalMapping="0" PhysicalTypeName="" >
<PARAMS>
<PARAM Name="length" />
<PARAM Name="decimals" />
</PARAMS>
<OPTIONS>
<OPTION Name="ZEROFILL" Default="0" />
</OPTIONS>
</DATATYPE>
<DATATYPE ID="11" IDGroup="0" TypeName="REAL" Description="This is a synonym for DOUBLE." ParamCount="2" OptionCount="1" ParamRequired="0" EditParamsAsString="0" SynonymGroup="2" PhysicalMapping="0" PhysicalTypeName="" >
<PARAMS>
<PARAM Name="length" />
<PARAM Name="decimals" />
</PARAMS>
<OPTIONS>
<OPTION Name="ZEROFILL" Default="0" />
</OPTIONS>
</DATATYPE>
<DATATYPE ID="12" IDGroup="0" TypeName="DECIMAL" Description="An unpacked floating-point number. Cannot be unsigned. Behaves like a CHAR column." ParamCount="2" OptionCount="1" ParamRequired="0" EditParamsAsString="0" SynonymGroup="3" PhysicalMapping="0" PhysicalTypeName="" >
<PARAMS>
<PARAM Name="length" />
<PARAM Name="decimals" />
</PARAMS>
<OPTIONS>
<OPTION Name="ZEROFILL" Default="0" />
</OPTIONS>
</DATATYPE>
<DATATYPE ID="13" IDGroup="0" TypeName="NUMERIC" Description="This is a synonym for DECIMAL." ParamCount="2" OptionCount="1" ParamRequired="1" EditParamsAsString="0" SynonymGroup="3" PhysicalMapping="0" PhysicalTypeName="" >
<PARAMS>
<PARAM Name="length" />
<PARAM Name="decimals" />
</PARAMS>
<OPTIONS>
<OPTION Name="ZEROFILL" Default="0" />
</OPTIONS>
</DATATYPE>
<DATATYPE ID="14" IDGroup="1" TypeName="DATE" Description="A date. The supported range is \a1000-01-01\a to \a9999-12-31\a." ParamCount="0" OptionCount="0" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
</DATATYPE>
<DATATYPE ID="15" IDGroup="1" TypeName="DATETIME" Description="A date and time combination. The supported range is \a1000-01-01 00:00:00\a to \a9999-12-31 23:59:59\a." ParamCount="0" OptionCount="0" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
</DATATYPE>
<DATATYPE ID="16" IDGroup="1" TypeName="TIMESTAMP" Description="A timestamp. The range is \a1970-01-01 00:00:00\a to sometime in the year 2037. The length can be 14 (or missing), 12, 10, 8, 6, 4, or 2 representing YYYYMMDDHHMMSS, ... , YYYYMMDD, ... , YY formats." ParamCount="1" OptionCount="0" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
<PARAMS>
<PARAM Name="length" />
</PARAMS>
</DATATYPE>
<DATATYPE ID="17" IDGroup="1" TypeName="TIME" Description="A time. The range is \a-838:59:59\a to \a838:59:59\a." ParamCount="0" OptionCount="0" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
</DATATYPE>
<DATATYPE ID="18" IDGroup="1" TypeName="YEAR" Description="A year in 2- or 4-digit format (default is 4-digit)." ParamCount="1" OptionCount="0" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
<PARAMS>
<PARAM Name="length" />
</PARAMS>
</DATATYPE>
<DATATYPE ID="19" IDGroup="2" TypeName="CHAR" Description="A fixed-length string (1 to 255 characters) that is always right-padded with spaces to the specified length when stored. values are sorted and compared in case-insensitive fashion according to the default character set unless the BINARY keyword is given." ParamCount="1" OptionCount="1" ParamRequired="1" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
<PARAMS>
<PARAM Name="length" />
</PARAMS>
<OPTIONS>
<OPTION Name="BINARY" Default="0" />
</OPTIONS>
</DATATYPE>
<DATATYPE ID="20" IDGroup="2" TypeName="VARCHAR" Description="A variable-length string (1 to 255 characters). Values are sorted and compared in case-sensitive fashion unless the BINARY keyword is given." ParamCount="1" OptionCount="1" ParamRequired="1" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
<PARAMS>
<PARAM Name="length" />
</PARAMS>
<OPTIONS>
<OPTION Name="BINARY" Default="0" />
</OPTIONS>
</DATATYPE>
<DATATYPE ID="21" IDGroup="2" TypeName="BIT" Description="This is a synonym for CHAR(1)." ParamCount="0" OptionCount="0" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
</DATATYPE>
<DATATYPE ID="22" IDGroup="2" TypeName="BOOL" Description="This is a synonym for CHAR(1)." ParamCount="0" OptionCount="0" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
</DATATYPE>
<DATATYPE ID="23" IDGroup="3" TypeName="TINYBLOB" Description="A column maximum length of 255 (2^8 - 1) characters. Values are sorted and compared in case-sensitive fashion." ParamCount="0" OptionCount="0" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
</DATATYPE>
<DATATYPE ID="24" IDGroup="3" TypeName="BLOB" Description="A column maximum length of 65535 (2^16 - 1) characters. Values are sorted and compared in case-sensitive fashion." ParamCount="0" OptionCount="0" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
</DATATYPE>
<DATATYPE ID="25" IDGroup="3" TypeName="MEDIUMBLOB" Description="A column maximum length of 16777215 (2^24 - 1) characters. Values are sorted and compared in case-sensitive fashion." ParamCount="0" OptionCount="0" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
</DATATYPE>
<DATATYPE ID="26" IDGroup="3" TypeName="LONGBLOB" Description="A column maximum length of 4294967295 (2^32 - 1) characters. Values are sorted and compared in case-sensitive fashion." ParamCount="0" OptionCount="0" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
</DATATYPE>
<DATATYPE ID="27" IDGroup="3" TypeName="TINYTEXT" Description="A column maximum length of 255 (2^8 - 1) characters." ParamCount="0" OptionCount="0" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
</DATATYPE>
<DATATYPE ID="28" IDGroup="3" TypeName="TEXT" Description="A column maximum length of 65535 (2^16 - 1) characters." ParamCount="0" OptionCount="0" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
</DATATYPE>
<DATATYPE ID="29" IDGroup="3" TypeName="MEDIUMTEXT" Description="A column maximum length of 16777215 (2^24 - 1) characters." ParamCount="0" OptionCount="0" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
</DATATYPE>
<DATATYPE ID="30" IDGroup="3" TypeName="LONGTEXT" Description="A column maximum length of 4294967295 (2^32 - 1) characters." ParamCount="0" OptionCount="0" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
</DATATYPE>
<DATATYPE ID="31" IDGroup="3" TypeName="ENUM" Description="An enumeration. A string object that can have only one value, chosen from the list of values." ParamCount="1" OptionCount="0" ParamRequired="1" EditParamsAsString="1" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
<PARAMS>
<PARAM Name="values" />
</PARAMS>
</DATATYPE>
<DATATYPE ID="32" IDGroup="3" TypeName="SET" Description="A set. A string object that can have zero or more values, each of which must be chosen from the list of values." ParamCount="1" OptionCount="0" ParamRequired="1" EditParamsAsString="1" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
<PARAMS>
<PARAM Name="values" />
</PARAMS>
</DATATYPE>
<DATATYPE ID="33" IDGroup="4" TypeName="Varchar(20)" Description="" ParamCount="0" OptionCount="1" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
<OPTIONS>
<OPTION Name="BINARY" Default="0" />
</OPTIONS>
</DATATYPE>
<DATATYPE ID="34" IDGroup="4" TypeName="Varchar(45)" Description="" ParamCount="0" OptionCount="1" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
<OPTIONS>
<OPTION Name="BINARY" Default="0" />
</OPTIONS>
</DATATYPE>
<DATATYPE ID="35" IDGroup="4" TypeName="Varchar(255)" Description="" ParamCount="0" OptionCount="1" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
<OPTIONS>
<OPTION Name="BINARY" Default="0" />
</OPTIONS>
</DATATYPE>
<DATATYPE ID="36" IDGroup="5" TypeName="GEOMETRY" Description="Geographic Datatype" ParamCount="0" OptionCount="0" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
</DATATYPE>
<DATATYPE ID="38" IDGroup="5" TypeName="LINESTRING" Description="Geographic Datatype" ParamCount="0" OptionCount="0" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
</DATATYPE>
<DATATYPE ID="39" IDGroup="5" TypeName="POLYGON" Description="Geographic Datatype" ParamCount="0" OptionCount="0" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
</DATATYPE>
<DATATYPE ID="40" IDGroup="5" TypeName="MULTIPOINT" Description="Geographic Datatype" ParamCount="0" OptionCount="0" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
</DATATYPE>
<DATATYPE ID="41" IDGroup="5" TypeName="MULTILINESTRING" Description="Geographic Datatype" ParamCount="0" OptionCount="0" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
</DATATYPE>
<DATATYPE ID="42" IDGroup="5" TypeName="MULTIPOLYGON" Description="Geographic Datatype" ParamCount="0" OptionCount="0" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
</DATATYPE>
<DATATYPE ID="43" IDGroup="5" TypeName="GEOMETRYCOLLECTION" Description="Geographic Datatype" ParamCount="0" OptionCount="0" ParamRequired="0" EditParamsAsString="0" SynonymGroup="0" PhysicalMapping="0" PhysicalTypeName="" >
</DATATYPE>
</DATATYPES>
<COMMON_DATATYPES>
<COMMON_DATATYPE ID="5" />
<COMMON_DATATYPE ID="8" />
<COMMON_DATATYPE ID="20" />
<COMMON_DATATYPE ID="15" />
<COMMON_DATATYPE ID="22" />
<COMMON_DATATYPE ID="28" />
<COMMON_DATATYPE ID="26" />
<COMMON_DATATYPE ID="33" />
<COMMON_DATATYPE ID="34" />
<COMMON_DATATYPE ID="35" />
</COMMON_DATATYPES>
<TABLEPREFIXES>
<TABLEPREFIX Name="Defaut (pas de pr\\\\\\\\233fixe)" />
</TABLEPREFIXES>
<REGIONCOLORS>
<REGIONCOLOR Color="Red=#FFEEEC" />
<REGIONCOLOR Color="Yellow=#FEFDED" />
<REGIONCOLOR Color="Green=#EAFFE5" />
<REGIONCOLOR Color="Cyan=#ECFDFF" />
<REGIONCOLOR Color="Blue=#F0F1FE" />
<REGIONCOLOR Color="Magenta=#FFEBFA" />
</REGIONCOLORS>
<POSITIONMARKERS>
<POSITIONMARKER ZoomFac="-1.0" X="0" Y="0" />
<POSITIONMARKER ZoomFac="-1.0" X="0" Y="0" />
<POSITIONMARKER ZoomFac="-1.0" X="0" Y="0" />
<POSITIONMARKER ZoomFac="-1.0" X="0" Y="0" />
<POSITIONMARKER ZoomFac="-1.0" X="0" Y="0" />
<POSITIONMARKER ZoomFac="-1.0" X="0" Y="0" />
<POSITIONMARKER ZoomFac="-1.0" X="0" Y="0" />
<POSITIONMARKER ZoomFac="-1.0" X="0" Y="0" />
<POSITIONMARKER ZoomFac="-1.0" X="0" Y="0" />
<POSITIONMARKER ZoomFac="-1.0" X="0" Y="0" />
<POSITIONMARKER ZoomFac="-1.0" X="0" Y="0" />
</POSITIONMARKERS>
</SETTINGS>
<METADATA>
<REGIONS>
<REGION ID="6948" RegionName="G\233n\233sia - Abr\233viation : gen" XPos="2" YPos="3" Width="1568" Height="1308" RegionColor="0" TablePrefix="0" TableType="0" OverwriteTablePrefix="0" OverwriteTableType="0" Comments="Contient les tables du noyau de G\233n\233sia." IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="-1" OrderPos="21" />
</REGIONS>
<TABLES>
<TABLE ID="6929" Tablename="gen_menu_cache" PrevTableName="CACHE" XPos="799" YPos="441" TableType="0" TablePrefix="0" nmTable="0" Temporary="0" UseStandardInserts="0" StandardInserts="\n" TableOptions="DelayKeyTblUpdates=0\nPackKeys=0\nRowChecksum=0\nRowFormat=0\nUseRaid=0\nRaidType=0\nChunks=2\nChunkSize=64\n" Comments="Contient les pages en cache du site." Collapsed="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="6393" OrderPos="2" >
<COLUMNS>
<COLUMN ID="1034" ColName="gmcac_id_md5_url" PrevColName="" Pos="1" idDatatype="20" DatatypeParams="(32)" Width="0" Prec="0" PrimaryKey="1" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Valeur md5 de l\aurl.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6807" ColName="gmcac_ce_site" PrevColName="" Pos="1" idDatatype="5" DatatypeParams="(11)" Width="0" Prec="0" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="1" DefaultValue="" Comments="">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="1036" ColName="gmcac_corps" PrevColName="" Pos="3" idDatatype="26" DatatypeParams="" Width="0" Prec="0" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Contenu sous forme de bits de la page compress\233.">
<OPTIONSELECTED>
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="1037" ColName="gmcac_date_heure" PrevColName="" Pos="4" idDatatype="15" DatatypeParams="" Width="0" Prec="0" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="0000-00-00 00:00:00" Comments="Date et heure de ka mise en cache.">
<OPTIONSELECTED>
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="1038" ColName="gmcac_taille" PrevColName="" Pos="5" idDatatype="5" DatatypeParams="(11)" Width="0" Prec="0" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Taille de la page avant compression.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="1039" ColName="gmcac_gz_taille" PrevColName="" Pos="6" idDatatype="5" DatatypeParams="(11)" Width="0" Prec="0" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Taille de la page compress\233e.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
</COLUMNS>
<RELATIONS_END>
<RELATION_END ID="6949" />
</RELATIONS_END>
<INDICES>
<INDEX ID="1040" IndexName="PRIMARY" IndexKind="0" FKRefDef_Obj_id="-1">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="1034" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
<INDEX ID="6827" IndexName="gen_menu_cache_FKIndex1" IndexKind="1" FKRefDef_Obj_id="6418">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6807" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
</INDICES>
</TABLE>
<TABLE ID="6930" Tablename="gen_menu_relation" PrevTableName="MENU_LEVEL_1" XPos="997" YPos="1064" TableType="0" TablePrefix="0" nmTable="0" Temporary="0" UseStandardInserts="0" StandardInserts="\n" TableOptions="DelayKeyTblUpdates=0\nPackKeys=0\nRowChecksum=0\nRowFormat=0\nUseRaid=0\nRaidType=0\nChunks=2\nChunkSize=64\n" Comments="Table permettant de connaitre les relations unissant les menus entre eux." Collapsed="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="6396" OrderPos="3" >
<COLUMNS>
<COLUMN ID="6662" ColName="gmr_id_menu_01" PrevColName="" Pos="1" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="1" NotNull="1" AutoInc="0" IsForeignKey="1" DefaultValue="" Comments="Identifiant du menu 01.">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6664" ColName="gmr_id_menu_02" PrevColName="" Pos="1" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="1" NotNull="1" AutoInc="0" IsForeignKey="1" DefaultValue="" Comments="Identifiant du menu 02.">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6736" ColName="gmr_id_valeur" PrevColName="" Pos="1" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="1" NotNull="1" AutoInc="0" IsForeignKey="1" DefaultValue="" Comments="">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6691" ColName="gmr_ordre" PrevColName="" Pos="3" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Ordre des relations quand on a le meme identifiant de menu 01 et le meme type de relation.">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
</COLUMNS>
<RELATIONS_END>
<RELATION_END ID="6965" />
<RELATION_END ID="6966" />
<RELATION_END ID="6968" />
</RELATIONS_END>
<INDICES>
<INDEX ID="1273" IndexName="PRIMARY" IndexKind="0" FKRefDef_Obj_id="-1">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6662" LengthParam="0" />
<INDEXCOLUMN idColumn="6664" LengthParam="0" />
<INDEXCOLUMN idColumn="6736" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
<INDEX ID="6663" IndexName="gen_menu_relation_FKIndex2" IndexKind="1" FKRefDef_Obj_id="6656">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6662" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
<INDEX ID="6665" IndexName="gen_menu_relation_FKIndex3" IndexKind="1" FKRefDef_Obj_id="6659">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6664" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
<INDEX ID="6737" IndexName="gen_menu_relation_FKIndex3" IndexKind="1" FKRefDef_Obj_id="6705">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6736" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
</INDICES>
</TABLE>
<TABLE ID="6931" Tablename="gen_site" PrevTableName="PROJECT" XPos="431" YPos="219" TableType="0" TablePrefix="0" nmTable="0" Temporary="0" UseStandardInserts="0" StandardInserts="\n" TableOptions="DelayKeyTblUpdates=0\nPackKeys=0\nRowChecksum=0\nRowFormat=0\nUseRaid=0\nRaidType=0\n" Comments="Contient les informations sur les sites g\233r\233s par Papyrus." Collapsed="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="6397" OrderPos="4" >
<COLUMNS>
<COLUMN ID="1108" ColName="gs_id_site" PrevColName="" Pos="1" idDatatype="5" DatatypeParams="(11)" Width="0" Prec="0" PrimaryKey="1" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Indentifiant du site.">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6800" ColName="gs_ce_i18n" PrevColName="" Pos="1" idDatatype="20" DatatypeParams="(8)" Width="0" Prec="0" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="1" DefaultValue="" Comments="Langue du site.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6798" ColName="gs_ce_auth" PrevColName="" Pos="1" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="1" DefaultValue="0" Comments="Poss\232de une valeur diff\233rente de 0 si le site utilise l\aauthentification des utilisateurs.">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="1115" ColName="gs_fichier_squelette" PrevColName="" Pos="8" idDatatype="20" DatatypeParams="(255)" Width="0" Prec="0" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Chemin et nom du fichier squelette \224 utiliser par d\233faut pour ce site.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6838" ColName="gs_code_num" PrevColName="" Pos="14" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Un site d\aorigine ainsi que ses traductions ont le meme code num\233rique.">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5777" ColName="gs_code_alpha" PrevColName="gs_code" Pos="12" idDatatype="20" DatatypeParams="(20)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Un site d\aorigine ainsi que ses traductions ont le meme code alphanum\233rique.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5776" ColName="gs_nom" PrevColName="" Pos="11" idDatatype="20" DatatypeParams="(100)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Nom du site dans la langue de ce site..">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6816" ColName="gs_raccourci_clavier" PrevColName="" Pos="10" idDatatype="19" DatatypeParams="(1)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Raccourci clavier pour acc\233der au lien menant vers ce site.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6815" ColName="gs_titre" PrevColName="" Pos="11" idDatatype="20" DatatypeParams="(255)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Titre par d\233faut des menus du site, dans la langue du site.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6817" ColName="gs_mots_cles" PrevColName="gs_mot_cles" Pos="11" idDatatype="28" DatatypeParams="" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Mots cl\233, dans la langue du site, d\233finissant le contenu g\233n\233ral de ce site. Utilis\233 par d\233faut pour les menus.">
<OPTIONSELECTED>
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6189" ColName="gs_description" PrevColName="" Pos="10" idDatatype="28" DatatypeParams="" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Description du contenu g\233n\233ral du site dans la langue de ce site. Utilis\233 par d\233faut pour les menus.">
<OPTIONSELECTED>
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6818" ColName="gs_auteur" PrevColName="" Pos="12" idDatatype="20" DatatypeParams="(255)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Auteur du site. G\233n\233ralement la structure \224 l\aorigine du site.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6821" ColName="gs_date_creation" PrevColName="" Pos="15" idDatatype="15" DatatypeParams="" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Date de cr\233ation du site.">
<OPTIONSELECTED>
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6801" ColName="gs_ce_admin" PrevColName="" Pos="1" idDatatype="5" DatatypeParams="(11)" Width="0" Prec="0" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="1" DefaultValue="" Comments="Identifiant de l\aadministrateur \224 l\aorigine de ce site.">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
</COLUMNS>
<RELATIONS_START>
<RELATION_START ID="6949" />
<RELATION_START ID="6958" />
<RELATION_START ID="6971" />
<RELATION_START ID="6972" />
</RELATIONS_START>
<RELATIONS_END>
<RELATION_END ID="6951" />
<RELATION_END ID="6957" />
<RELATION_END ID="6960" />
</RELATIONS_END>
<INDICES>
<INDEX ID="3637" IndexName="PRIMARY" IndexKind="0" FKRefDef_Obj_id="-1">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="1108" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
<INDEX ID="5778" IndexName="idx_gsi_abreviation" IndexKind="2" FKRefDef_Obj_id="-1">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="5777" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
<INDEX ID="6474" IndexName="idx_fk_gsi_ce_auth" IndexKind="1" FKRefDef_Obj_id="6426">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6798" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
<INDEX ID="6609" IndexName="gen_site_FKIndex3" IndexKind="1" FKRefDef_Obj_id="6535">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6800" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
<INDEX ID="6625" IndexName="gen_site_FKIndex4" IndexKind="1" FKRefDef_Obj_id="6623">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6801" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
</INDICES>
</TABLE>
<TABLE ID="6932" Tablename="gen_annuaire" PrevTableName="annu_USERS" XPos="64" YPos="739" TableType="0" TablePrefix="0" nmTable="0" Temporary="0" UseStandardInserts="0" StandardInserts="\n" TableOptions="DelayKeyTblUpdates=0\nPackKeys=0\nRowChecksum=0\nRowFormat=0\nUseRaid=0\nRaidType=0\n" Comments="Contient les informations sur les administrateurs de Papyrus." Collapsed="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="6398" OrderPos="5" >
<COLUMNS>
<COLUMN ID="1164" ColName="ga_id_administrateur" PrevColName="" Pos="1" idDatatype="5" DatatypeParams="(11)" Width="0" Prec="0" PrimaryKey="1" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="0" Comments="Identifiant d\aune personne participant \224 l\aadministration.">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6565" ColName="ga_ce_i18n" PrevColName="" Pos="1" idDatatype="20" DatatypeParams="(8)" Width="0" Prec="0" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="1" DefaultValue="" Comments="Identifiant de la langue demand\233e par cet administrateur.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="1167" ColName="ga_nom" PrevColName="" Pos="4" idDatatype="20" DatatypeParams="(32)" Width="0" Prec="0" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Nom de la personne.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="1168" ColName="ga_prenom" PrevColName="" Pos="5" idDatatype="20" DatatypeParams="(32)" Width="0" Prec="0" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Pr\233nom de la personne.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="1172" ColName="ga_mot_de_passe" PrevColName="" Pos="9" idDatatype="20" DatatypeParams="(32)" Width="0" Prec="0" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="X X" Comments="Mot de passe pour acc\233der \224 l\ainterface d\aadministration.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="1173" ColName="ga_mail" PrevColName="" Pos="10" idDatatype="20" DatatypeParams="(128)" Width="0" Prec="0" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Mail de la personne.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
</COLUMNS>
<RELATIONS_START>
<RELATION_START ID="6950" />
<RELATION_START ID="6959" />
<RELATION_START ID="6960" />
</RELATIONS_START>
<RELATIONS_END>
<RELATION_END ID="6956" />
</RELATIONS_END>
<INDICES>
<INDEX ID="1189" IndexName="PRIMARY" IndexKind="0" FKRefDef_Obj_id="-1">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="1164" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
<INDEX ID="6534" IndexName="gen_annuaire_FKIndex1" IndexKind="1" FKRefDef_Obj_id="6532">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6565" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
</INDICES>
</TABLE>
<TABLE ID="6933" Tablename="gen_application" PrevTableName="APPLICATION" XPos="1152" YPos="629" TableType="0" TablePrefix="0" nmTable="0" Temporary="0" UseStandardInserts="0" StandardInserts="\n" TableOptions="DelayKeyTblUpdates=0\nPackKeys=0\nRowChecksum=0\nRowFormat=0\nUseRaid=0\nRaidType=0\n" Comments="Contient les informations sur les applications ou les applettes disponibles pour Papyrus.\nUne application est sp\233cifiquement appel\233e par un menu et ce menu lui transmet des param\232tres.\nUne applette est appell\233e via une balise pr\233sente dans un squelette et poss\232de ses propres param\232tres.\nUne applette sera donc commune \224 toutes les pages utilisant le squelette en question." Collapsed="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="6399" OrderPos="6" >
<COLUMNS>
<COLUMN ID="5193" ColName="gap_id_application" PrevColName="" Pos="1" idDatatype="5" DatatypeParams="(11)" Width="0" Prec="0" PrimaryKey="1" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Identifiant de l\aapplication">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5195" ColName="gap_nom" PrevColName="" Pos="3" idDatatype="20" DatatypeParams="(100)" Width="0" Prec="0" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Nom de l\aapplication.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5196" ColName="gap_description" PrevColName="" Pos="4" idDatatype="29" DatatypeParams="" Width="0" Prec="0" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Champs libre pour d\233crire une application.">
<OPTIONSELECTED>
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5204" ColName="gap_chemin" PrevColName="" Pos="4" idDatatype="20" DatatypeParams="(255)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Chemin menant au fichier principal de l\aapplication (ancien nom : gp_chemin_application).">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5807" ColName="gap_bool_applette" PrevColName="" Pos="5" idDatatype="1" DatatypeParams="(1)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="0" Comments="Boul\233en permettant de savoir si on a \224 faire \224 une applette (1) ou pas (0).">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5800" ColName="gap_applette_balise" PrevColName="" Pos="4" idDatatype="20" DatatypeParams="(255)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Balise permettant d\aappeler l\aapplette depuis un squelette.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5808" ColName="gap_applette_arguments" PrevColName="" Pos="6" idDatatype="20" DatatypeParams="(255)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Arguments \224 transmettre \224 l\aapplette.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
</COLUMNS>
<RELATIONS_START>
<RELATION_START ID="6962" />
</RELATIONS_START>
<INDICES>
<INDEX ID="5201" IndexName="PRIMARY" IndexKind="0" FKRefDef_Obj_id="-1">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="5193" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
</INDICES>
</TABLE>
<TABLE ID="6934" Tablename="gen_menu_url_alternative" PrevTableName="Table_10" XPos="981" YPos="1208" TableType="0" TablePrefix="0" nmTable="0" Temporary="0" UseStandardInserts="0" StandardInserts="\n" TableOptions="DelayKeyTblUpdates=0\nPackKeys=0\nRowChecksum=0\nRowFormat=0\nUseRaid=0\nRaidType=0\n" Comments="Contient les url alternative pour un menu d\aun site dans une langue donn\233e." Collapsed="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="6400" OrderPos="7" >
<COLUMNS>
<COLUMN ID="5211" ColName="gmua_id_url" PrevColName="" Pos="0" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="1" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="0" Comments="Identifiant num\233rique d\aun raccourci.">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6630" ColName="gmua_ce_menu" PrevColName="" Pos="1" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="1" DefaultValue="" Comments="">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5214" ColName="gmua_url" PrevColName="" Pos="2" idDatatype="20" DatatypeParams="(255)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Url du raccourci ou d\aune ancienne adresse.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
</COLUMNS>
<RELATIONS_END>
<RELATION_END ID="6961" />
</RELATIONS_END>
<INDICES>
<INDEX ID="5212" IndexName="PRIMARY" IndexKind="0" FKRefDef_Obj_id="-1">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="5211" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
<INDEX ID="6629" IndexName="gen_menu_url_alternative_FKIndex1" IndexKind="1" FKRefDef_Obj_id="6627">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6630" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
</INDICES>
</TABLE>
<TABLE ID="6935" Tablename="gen_menu" PrevTableName="Table_12" XPos="457" YPos="641" TableType="0" TablePrefix="0" nmTable="0" Temporary="0" UseStandardInserts="0" StandardInserts="\n" TableOptions="DelayKeyTblUpdates=0\nPackKeys=0\nRowChecksum=0\nRowFormat=0\nUseRaid=0\nRaidType=0\n" Comments="Contient les informations sur les menus constituant un site.\nLes informations d\aun menu permettent de g\233n\233rer les entetes Dublin Core." Collapsed="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="6403" OrderPos="8" >
<COLUMNS>
<COLUMN ID="5823" ColName="gm_id_menu" PrevColName="" Pos="0" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="1" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Identifiant d\aun menu.">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6805" ColName="gm_ce_site" PrevColName="" Pos="1" idDatatype="5" DatatypeParams="(11)" Width="0" Prec="0" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="1" DefaultValue="" Comments="">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6642" ColName="gm_ce_i18n" PrevColName="" Pos="1" idDatatype="20" DatatypeParams="(8)" Width="0" Prec="0" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="1" DefaultValue="" Comments="">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6634" ColName="gm_ce_application" PrevColName="" Pos="1" idDatatype="5" DatatypeParams="(11)" Width="0" Prec="0" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="1" DefaultValue="" Comments="Identifiant de l\aapplication g\233n\233rant le contenu de ce menu.">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6670" ColName="gm_application_arguments" PrevColName="" Pos="36" idDatatype="20" DatatypeParams="(255)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Argument de l\aapplication qui g\233n\232rera le contenu de ce menu.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6671" ColName="gm_fichier_squelette" PrevColName="" Pos="37" idDatatype="20" DatatypeParams="(255)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Chemin d\aacc\232s au fichier de squelette de ce menu s\ail en poss\232de un.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6836" ColName="gm_code_num" PrevColName="" Pos="37" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Un menu d\aorigine ainsi que ses traductions ont le meme code num\233rique.">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6583" ColName="gm_code_alpha" PrevColName="gm_code" Pos="30" idDatatype="20" DatatypeParams="(20)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Un menu d\aorigine, ainsi que ses traductions ont le meme code alphanum\233rique.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6688" ColName="gm_nom" PrevColName="" Pos="41" idDatatype="20" DatatypeParams="(100)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Nom unique d\aun menu.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6672" ColName="gm_raccourci_clavier" PrevColName="" Pos="38" idDatatype="19" DatatypeParams="(1)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Raccourci clavier utilis\233 pour acc\233der \224 ce menu.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6356" ColName="gm_robot" PrevColName="" Pos="25" idDatatype="20" DatatypeParams="(100)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="index,follow" Comments="Valeur pour l\aindexation par les robots.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5838" ColName="gm_titre" PrevColName="" Pos="1" idDatatype="20" DatatypeParams="(255)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Titre du document.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5839" ColName="gm_titre_alternatif" PrevColName="" Pos="2" idDatatype="20" DatatypeParams="(255)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Titre alternatif du document.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5841" ColName="gm_mots_cles" PrevColName="" Pos="4" idDatatype="28" DatatypeParams="" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Mots-clefs : utiliser des mots-clefs choisis dans le cadre d\aune politique de classement.">
<OPTIONSELECTED>
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5843" ColName="gm_description_libre" PrevColName="" Pos="6" idDatatype="28" DatatypeParams="" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Texte libre d\233crivant le document.">
<OPTIONSELECTED>
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5842" ColName="gm_description_resume" PrevColName="" Pos="5" idDatatype="28" DatatypeParams="" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Type MIME des feuilles de styles de la page.">
<OPTIONSELECTED>
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5850" ColName="gm_description_table_matieres" PrevColName="" Pos="12" idDatatype="28" DatatypeParams="" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Table des mati\232res du document.">
<OPTIONSELECTED>
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5895" ColName="gm_source" PrevColName="" Pos="19" idDatatype="20" DatatypeParams="(255)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Lien web (URI) vers la source du document pr\233sent.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5840" ColName="gm_auteur" PrevColName="" Pos="3" idDatatype="20" DatatypeParams="(255)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Auteur (cr\233ateur) du document : nom de la personne, de l\aorganisation ou du service \224 l\aorigine de la r\233daction du document.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5846" ColName="gm_contributeur" PrevColName="" Pos="8" idDatatype="28" DatatypeParams="" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Nom de la personne, de l\aorganisation ou du service ayant contribu\233 \224 l\a\233laboration du document. Plusieurs noms peuvent etre indiqu\233 en les s\233parant par des virgules eux meme encadr\233 d\aespace.">
<OPTIONSELECTED>
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5845" ColName="gm_editeur" PrevColName="" Pos="7" idDatatype="28" DatatypeParams="" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Nom de la personne, de l\aorganisation ou du service \224 l\aorigine de la publication du document. Plusieurs noms peuvent etre indiqu\233 en les s\233parant par des virgules eux meme encadr\233 d\aespace.">
<OPTIONSELECTED>
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5881" ColName="gm_date_creation" PrevColName="" Pos="13" idDatatype="15" DatatypeParams="" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Date de cr\233ation du document (format W3CDTF).">
<OPTIONSELECTED>
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5887" ColName="gm_date_soumission" PrevColName="" Pos="17" idDatatype="15" DatatypeParams="" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Date de soumission du document (format W3CDTF).">
<OPTIONSELECTED>
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5888" ColName="gm_date_acceptation" PrevColName="" Pos="18" idDatatype="15" DatatypeParams="" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Date d\aacceptation du document (format W3CDTF).">
<OPTIONSELECTED>
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6579" ColName="gm_date_publication" PrevColName="" Pos="29" idDatatype="15" DatatypeParams="" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Date \224 laquelle la page a \233t\233 r\233ellement mise en ligne (format W3CDTF).">
<OPTIONSELECTED>
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6586" ColName="gm_date_debut_validite" PrevColName="" Pos="31" idDatatype="15" DatatypeParams="" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Date de d\233but de validit\233 du document, \224 laquelle la page doit etre mise en ligne (format W3CDTF).">
<OPTIONSELECTED>
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5882" ColName="gm_date_fin_validite" PrevColName="" Pos="14" idDatatype="15" DatatypeParams="" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Date de fin de validit\233 du document, \224 laquelle la page doit etre retir\233 de la mise en ligne (format W3CDTF).">
<OPTIONSELECTED>
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5885" ColName="gm_date_copyright" PrevColName="" Pos="16" idDatatype="15" DatatypeParams="" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Date du copyright (format W3CDTF).">
<OPTIONSELECTED>
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5847" ColName="gm_licence" PrevColName="" Pos="9" idDatatype="20" DatatypeParams="(255)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Lien web vers les droits relatifs \224 la ressource : permet de donner des informations sur le statut des droits du document, par exemple la pr\233sence d\aun copyright, ou un lien vers le d\233tenteur des droits. L\aabsence de cet \233l\233ment ne pr\233sume pas que le document est libre de droits.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6577" ColName="gm_categorie" PrevColName="" Pos="28" idDatatype="20" DatatypeParams="(100)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Grande cat\233gorie de document.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5848" ColName="gm_public" PrevColName="" Pos="10" idDatatype="20" DatatypeParams="(255)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Public vis\233 par le document : le public repr\233sente le groupe de personnes \224 qui le document est destin\233">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5849" ColName="gm_public_niveau" PrevColName="" Pos="11" idDatatype="20" DatatypeParams="(45)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Niveau du public demand\233e pour ce document dans un contexte de formation.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5899" ColName="gm_ce_type_portee_spatiale" PrevColName="" Pos="21" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Identifiant d\aun type de port\233e spatiale du document. 0 inconnu, 1 :iso-3166, 2 : point g\233ographique, 3 : r\233gion g\233ographique, 4 : TGN.">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5900" ColName="gm_portee_spatiale" PrevColName="" Pos="22" idDatatype="20" DatatypeParams="(100)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Valeur de la port\233e spatiale.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5901" ColName="gm_ce_type_portee_temporelle" PrevColName="" Pos="23" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Identifiant d\aun type de port\233e temporelle du document. 0 : inconnu, 1 : Period, 2 W3CDTF.">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="5902" ColName="gm_portee_temporelle" PrevColName="" Pos="24" idDatatype="20" DatatypeParams="(100)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Valeur de la port\233e temporelle.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6622" ColName="gm_ce_admin" PrevColName="" Pos="1" idDatatype="5" DatatypeParams="(11)" Width="0" Prec="0" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="1" DefaultValue="" Comments="Identifiant de l\aadministrateur cr\233ant, modifiant ou validant ce menu.">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
</COLUMNS>
<RELATIONS_START>
<RELATION_START ID="6961" />
<RELATION_START ID="6963" />
<RELATION_START ID="6965" />
<RELATION_START ID="6966" />
</RELATIONS_START>
<RELATIONS_END>
<RELATION_END ID="6958" />
<RELATION_END ID="6959" />
<RELATION_END ID="6962" />
<RELATION_END ID="6964" />
</RELATIONS_END>
<INDICES>
<INDEX ID="5824" IndexName="PRIMARY" IndexKind="0" FKRefDef_Obj_id="-1">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="5823" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
<INDEX ID="6621" IndexName="gen_menu_FKIndex2" IndexKind="1" FKRefDef_Obj_id="6619">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6622" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
<INDEX ID="6633" IndexName="gen_menu_FKIndex3" IndexKind="1" FKRefDef_Obj_id="6631">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6634" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
<INDEX ID="6641" IndexName="gen_menu_FKIndex4" IndexKind="1" FKRefDef_Obj_id="6639">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6642" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
<INDEX ID="6828" IndexName="gen_menu_FKIndex4" IndexKind="1" FKRefDef_Obj_id="6615">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6805" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
</INDICES>
</TABLE>
<TABLE ID="6936" Tablename="gen_menu_contenu" PrevTableName="Table_13" XPos="48" YPos="989" TableType="0" TablePrefix="0" nmTable="0" Temporary="0" UseStandardInserts="0" StandardInserts="\n" TableOptions="DelayKeyTblUpdates=0\nPackKeys=0\nRowChecksum=0\nRowFormat=0\nUseRaid=0\nRaidType=0\n" Comments="Permet de suivre l\a\233volution d\aune page et d\aobtenir ses informations d\aentete et son contenu associ\233." Collapsed="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="6404" OrderPos="9" >
<COLUMNS>
<COLUMN ID="6611" ColName="gmc_id_contenu" PrevColName="" Pos="7" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="1" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Identifiant d\aun contenu.">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6811" ColName="gmc_ce_admin" PrevColName="" Pos="1" idDatatype="5" DatatypeParams="(11)" Width="0" Prec="0" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="1" DefaultValue="" Comments="">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6638" ColName="gmc_ce_menu" PrevColName="" Pos="1" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="1" DefaultValue="" Comments="Identifiant du menu poss\233dant ce contenu.">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6607" ColName="gmc_ce_type_contenu" PrevColName="" Pos="9" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Type du contenu : 1, pour XHTML, 2 pour WIKINI.">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6608" ColName="gmc_contenu" PrevColName="" Pos="10" idDatatype="29" DatatypeParams="" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Le contenu du menu.">
<OPTIONSELECTED>
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6605" ColName="gmc_ce_type_modification" PrevColName="" Pos="7" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Type de modification effectu\233e sur le menu : 1 pour mineure, 2 pour majeure.">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6606" ColName="gmc_resume_modification" PrevColName="" Pos="8" idDatatype="20" DatatypeParams="(255)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="R\233sum\233 de la modification, si majeure.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6603" ColName="gmc_date_modification" PrevColName="" Pos="5" idDatatype="15" DatatypeParams="" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Date et heure de modification du contenu.">
<OPTIONSELECTED>
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6604" ColName="gmc_bool_dernier" PrevColName="" Pos="6" idDatatype="1" DatatypeParams="(1)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="1" Comments="Bool\233\233n indiquant le dernier contenu pour le menu.">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
</COLUMNS>
<RELATIONS_END>
<RELATION_END ID="6950" />
<RELATION_END ID="6963" />
</RELATIONS_END>
<INDICES>
<INDEX ID="6612" IndexName="PRIMARY" IndexKind="0" FKRefDef_Obj_id="-1">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6611" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
<INDEX ID="6482" IndexName="idx_fk_gp_ce_admin" IndexKind="1" FKRefDef_Obj_id="6424">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6811" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
<INDEX ID="6637" IndexName="gen_menu_contenu_FKIndex2" IndexKind="1" FKRefDef_Obj_id="6635">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6638" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
</INDICES>
</TABLE>
<TABLE ID="6937" Tablename="gen_site_auth" PrevTableName="Table_15" XPos="1171" YPos="8" TableType="0" TablePrefix="0" nmTable="0" Temporary="0" UseStandardInserts="0" StandardInserts="\n" TableOptions="DelayKeyTblUpdates=0\nPackKeys=0\nRowChecksum=0\nRowFormat=0\nUseRaid=0\nRaidType=0\n" Comments="Contient les informations communes aux diff\233rents syst\232mes d\aidentification.\nLe type d\aidentification permet de savoir dans quel table chercher les informations d\aidentifications sp\233cifique au mode d\aidentification." Collapsed="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="6406" OrderPos="10" >
<COLUMNS>
<COLUMN ID="6265" ColName="gsa_id_auth" PrevColName="" Pos="0" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="1" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Identifiant des informations d\aidentification.">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6267" ColName="gsa_ce_type_auth" PrevColName="" Pos="1" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Type d\aidentification : 0 inconnu, 1 : base de donn\233es, 2 : ldap.">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6840" ColName="gsa_nom" PrevColName="" Pos="4" idDatatype="20" DatatypeParams="(100)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Nom de l\aauthentification.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6341" ColName="gsa_ce_auth_bdd" PrevColName="" Pos="1" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="1" DefaultValue="" Comments="Identifiant des informations pour un identification via une base de donn\233es. ">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6340" ColName="gsa_ce_auth_ldap" PrevColName="" Pos="1" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="1" DefaultValue="" Comments="Identifiant des informations pour un identification via LDAP. ">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
</COLUMNS>
<RELATIONS_START>
<RELATION_START ID="6951" />
</RELATIONS_START>
<RELATIONS_END>
<RELATION_END ID="6952" />
<RELATION_END ID="6953" />
</RELATIONS_END>
<INDICES>
<INDEX ID="6266" IndexName="PRIMARY" IndexKind="0" FKRefDef_Obj_id="-1">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6265" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
<INDEX ID="6483" IndexName="idx_fk_gsa_ce_auth_ldap" IndexKind="1" FKRefDef_Obj_id="6427">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6340" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
<INDEX ID="6484" IndexName="idx_fk_gsa_ce_auth_bdd" IndexKind="1" FKRefDef_Obj_id="6428">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6341" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
</INDICES>
</TABLE>
<TABLE ID="6938" Tablename="gen_site_auth_bdd" PrevTableName="Table_16" XPos="1297" YPos="181" TableType="0" TablePrefix="0" nmTable="0" Temporary="0" UseStandardInserts="0" StandardInserts="\n" TableOptions="DelayKeyTblUpdates=0\nPackKeys=0\nRowChecksum=0\nRowFormat=0\nUseRaid=0\nRaidType=0\n" Comments="Contient les informations pour identification via une base de donn\233es." Collapsed="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="6407" OrderPos="11" >
<COLUMNS>
<COLUMN ID="6279" ColName="gsab_id_auth_bdd" PrevColName="" Pos="0" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="1" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Identifiant d\aune identification par base de donn\233es.">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6281" ColName="gsab_dsn" PrevColName="" Pos="1" idDatatype="20" DatatypeParams="(255)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Valeur du dsn.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6282" ColName="gsab_nom_table" PrevColName="" Pos="2" idDatatype="20" DatatypeParams="(100)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Nom de la table o\249 sont stock\233s les logins et mot de passes.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6283" ColName="gsab_nom_champ_login" PrevColName="" Pos="3" idDatatype="20" DatatypeParams="(100)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Nom du champ o\249 se trouve les logins.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6284" ColName="gsab_nom_champ_mdp" PrevColName="" Pos="4" idDatatype="20" DatatypeParams="(100)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Nom du champ o\249 se trouve les mots de passe.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6285" ColName="gsab_cryptage_mdp" PrevColName="" Pos="5" idDatatype="20" DatatypeParams="(100)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Type de cryptage du mot de passe.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
</COLUMNS>
<RELATIONS_START>
<RELATION_START ID="6953" />
</RELATIONS_START>
<INDICES>
<INDEX ID="6280" IndexName="PRIMARY" IndexKind="0" FKRefDef_Obj_id="-1">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6279" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
</INDICES>
</TABLE>
<TABLE ID="6939" Tablename="gen_site_auth_ldap" PrevTableName="Table_17" XPos="1055" YPos="185" TableType="0" TablePrefix="0" nmTable="0" Temporary="0" UseStandardInserts="0" StandardInserts="\n" TableOptions="DelayKeyTblUpdates=0\nPackKeys=0\nRowChecksum=0\nRowFormat=0\nUseRaid=0\nRaidType=0\n" Comments="Contient les information sp\233cifique \224 une identification via LDAP." Collapsed="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="6408" OrderPos="12" >
<COLUMNS>
<COLUMN ID="6288" ColName="gsal_id_auth_ldap" PrevColName="" Pos="0" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="1" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Identfiant des informations d\aidentification via ldap.">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6290" ColName="gsal_serveur" PrevColName="" Pos="1" idDatatype="20" DatatypeParams="(100)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Nom du serveur ldap.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6291" ColName="gsal_port" PrevColName="" Pos="2" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Port du serveur ldap.">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6292" ColName="gsal_base_dn" PrevColName="" Pos="3" idDatatype="20" DatatypeParams="(255)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Base dn.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6293" ColName="gsal_uid" PrevColName="" Pos="4" idDatatype="20" DatatypeParams="(100)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Uid.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
</COLUMNS>
<RELATIONS_START>
<RELATION_START ID="6952" />
</RELATIONS_START>
<INDICES>
<INDEX ID="6289" IndexName="PRIMARY" IndexKind="0" FKRefDef_Obj_id="-1">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6288" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
</INDICES>
</TABLE>
<TABLE ID="6940" Tablename="gen_i18n" PrevTableName="LOCALE" XPos="105" YPos="199" TableType="0" TablePrefix="0" nmTable="0" Temporary="0" UseStandardInserts="0" StandardInserts="\n" TableOptions="DelayKeyTblUpdates=0\nPackKeys=0\nRowChecksum=0\nRowFormat=0\nUseRaid=0\nRaidType=0\n" Comments="Contient les informations sur le couple langue / pays autrement appel\233 Internationalisation ou i18n." Collapsed="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="6524" OrderPos="13" >
<COLUMNS>
<COLUMN ID="1015" ColName="gi_id_i18n" PrevColName="" Pos="1" idDatatype="20" DatatypeParams="(8)" Width="0" Prec="0" PrimaryKey="1" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Identifiant d\aune langue (voir RFC 1766). Exemple : fr-FR.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6558" ColName="gi_ce_langue" PrevColName="" Pos="1" idDatatype="20" DatatypeParams="(2)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="1" DefaultValue="" Comments="Identifiant de la langue.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6556" ColName="gi_ce_pays" PrevColName="" Pos="1" idDatatype="20" DatatypeParams="(2)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="1" DefaultValue="" Comments="Identifiant du pays.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="1018" ColName="gi_jeu_de_caracteres" PrevColName="" Pos="3" idDatatype="20" DatatypeParams="(50)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Jeu de caract\232re de la langue. Exemple : iso-8859-15 pour le fran\231ais.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="1021" ColName="gi_nom" PrevColName="" Pos="3" idDatatype="20" DatatypeParams="(255)" Width="0" Prec="0" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Informations sur la langue. Peut apparaitre dans l\aattribut alt de l\aimage repr\233sentant la langue.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
</COLUMNS>
<RELATIONS_START>
<RELATION_START ID="6956" />
<RELATION_START ID="6957" />
<RELATION_START ID="6964" />
</RELATIONS_START>
<RELATIONS_END>
<RELATION_END ID="6954" />
<RELATION_END ID="6955" />
</RELATIONS_END>
<INDICES>
<INDEX ID="1024" IndexName="PRIMARY" IndexKind="0" FKRefDef_Obj_id="-1">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="1015" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
<INDEX ID="6570" IndexName="gen_i18n_FKIndex1" IndexKind="1" FKRefDef_Obj_id="6527">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6556" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
<INDEX ID="6571" IndexName="gen_i18n_FKIndex2" IndexKind="1" FKRefDef_Obj_id="6528">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6558" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
</INDICES>
</TABLE>
<TABLE ID="6941" Tablename="gen_i18n_pays" PrevTableName="Table_04" XPos="232" YPos="41" TableType="0" TablePrefix="0" nmTable="0" Temporary="0" UseStandardInserts="0" StandardInserts="\n" TableOptions="DelayKeyTblUpdates=0\nPackKeys=0\nRowChecksum=0\nRowFormat=0\nUseRaid=0\nRaidType=0\n" Comments="Cette table contient les diff\233rents pays du monde et leur nom par d\233faut (en fran\231ais). Ainsi qu\aun nom de fichier pour le drapeaux." Collapsed="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="6525" OrderPos="14" >
<COLUMNS>
<COLUMN ID="1092" ColName="gip_id_pays" PrevColName="" Pos="0" idDatatype="20" DatatypeParams="(2)" Width="-1" Prec="-1" PrimaryKey="1" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Identifiant du pays code iso639.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="1098" ColName="gip_nom" PrevColName="" Pos="1" idDatatype="20" DatatypeParams="(255)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Le nom par d\233faut, en fran\231ais.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="1108" ColName="gip_fichier_drapeau" PrevColName="" Pos="2" idDatatype="20" DatatypeParams="(255)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Un fichier graphique pour le drapeau.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
</COLUMNS>
<RELATIONS_START>
<RELATION_START ID="6954" />
</RELATIONS_START>
<INDICES>
<INDEX ID="1093" IndexName="PRIMARY" IndexKind="0" FKRefDef_Obj_id="-1">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="1092" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
</INDICES>
</TABLE>
<TABLE ID="6942" Tablename="gen_i18n_langue" PrevTableName="Table_05" XPos="8" YPos="42" TableType="0" TablePrefix="0" nmTable="0" Temporary="0" UseStandardInserts="0" StandardInserts="\n" TableOptions="DelayKeyTblUpdates=0\nPackKeys=0\nRowChecksum=0\nRowFormat=0\nUseRaid=0\nRaidType=0\n" Comments="Cette table contient les langues, leur noms par d\233faut, en fran\231ais en g\233n\233ral et la direction d\a\233criture (ltr left to right ou rtl right to left)" Collapsed="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="6526" OrderPos="15" >
<COLUMNS>
<COLUMN ID="1102" ColName="gil_id_langue" PrevColName="" Pos="0" idDatatype="20" DatatypeParams="(2)" Width="-1" Prec="-1" PrimaryKey="1" NotNull="1" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Identifiant de la langue. Iso3166.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="1104" ColName="gil_nom" PrevColName="" Pos="1" idDatatype="20" DatatypeParams="(255)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Le nom dans la langue par d\233faut.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="1106" ColName="gil_direction" PrevColName="" Pos="2" idDatatype="20" DatatypeParams="(20)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="La direction d\a\233criture ltr ou rtl.">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
</COLUMNS>
<RELATIONS_START>
<RELATION_START ID="6955" />
</RELATIONS_START>
<INDICES>
<INDEX ID="1103" IndexName="PRIMARY" IndexKind="0" FKRefDef_Obj_id="-1">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="1102" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
</INDICES>
</TABLE>
<TABLE ID="6943" Tablename="gen_menu_categorie_valeur" PrevTableName="Table_18" XPos="992" YPos="920" TableType="0" TablePrefix="0" nmTable="0" Temporary="0" UseStandardInserts="0" StandardInserts="\n" TableOptions="DelayKeyTblUpdates=0\nPackKeys=0\nRowChecksum=0\nRowFormat=0\nUseRaid=0\nRaidType=0\n" Comments="" Collapsed="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="6676" OrderPos="16" >
<COLUMNS>
<COLUMN ID="6693" ColName="gmcv_id_valeur" PrevColName="" Pos="0" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="1" NotNull="1" AutoInc="1" IsForeignKey="0" DefaultValue="" Comments="">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6776" ColName="gmcv_id_categorie" PrevColName="" Pos="1" idDatatype="5" DatatypeParams="" Width="-1" Prec="-1" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="1" DefaultValue="" Comments="">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6695" ColName="gmcv_intitule_valeur" PrevColName="" Pos="1" idDatatype="20" DatatypeParams="(255)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
</COLUMNS>
<RELATIONS_START>
<RELATION_START ID="6968" />
</RELATIONS_START>
<RELATIONS_END>
<RELATION_END ID="6967" />
</RELATIONS_END>
<INDICES>
<INDEX ID="6694" IndexName="PRIMARY" IndexKind="0" FKRefDef_Obj_id="-1">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6693" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
<INDEX ID="6738" IndexName="gen_menu_categorie_valeur_FKIndex1" IndexKind="1" FKRefDef_Obj_id="6684">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6776" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
</INDICES>
</TABLE>
<TABLE ID="6944" Tablename="gen_menu_categorie" PrevTableName="Table_19" XPos="987" YPos="821" TableType="0" TablePrefix="0" nmTable="0" Temporary="0" UseStandardInserts="0" StandardInserts="\n" TableOptions="DelayKeyTblUpdates=0\nPackKeys=0\nRowChecksum=0\nRowFormat=0\nUseRaid=0\nRaidType=0\n" Comments="" Collapsed="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="6677" OrderPos="17" >
<COLUMNS>
<COLUMN ID="6702" ColName="gmca_id_categorie" PrevColName="" Pos="0" idDatatype="5" DatatypeParams="" Width="-1" Prec="-1" PrimaryKey="1" NotNull="1" AutoInc="1" IsForeignKey="0" DefaultValue="" Comments="">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6704" ColName="gmca_intitule_categorie" PrevColName="" Pos="1" idDatatype="20" DatatypeParams="(255)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
</COLUMNS>
<RELATIONS_START>
<RELATION_START ID="6967" />
</RELATIONS_START>
<INDICES>
<INDEX ID="6703" IndexName="PRIMARY" IndexKind="0" FKRefDef_Obj_id="-1">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6702" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
</INDICES>
</TABLE>
<TABLE ID="6945" Tablename="gen_site_relation" PrevTableName="MENU_LEVEL_1" XPos="804" YPos="315" TableType="0" TablePrefix="0" nmTable="0" Temporary="0" UseStandardInserts="0" StandardInserts="\n" TableOptions="DelayKeyTblUpdates=0\nPackKeys=0\nRowChecksum=0\nRowFormat=0\nUseRaid=0\nRaidType=0\nChunks=2\nChunkSize=64\n" Comments="Table permettant de connaitre les relations unissant les menus entre eux." Collapsed="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="6739" OrderPos="18" >
<COLUMNS>
<COLUMN ID="6809" ColName="gsr_id_site_01" PrevColName="" Pos="1" idDatatype="5" DatatypeParams="(11)" Width="0" Prec="0" PrimaryKey="1" NotNull="1" AutoInc="0" IsForeignKey="1" DefaultValue="" Comments="">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6808" ColName="gsr_id_site_02" PrevColName="" Pos="1" idDatatype="5" DatatypeParams="(11)" Width="0" Prec="0" PrimaryKey="1" NotNull="1" AutoInc="0" IsForeignKey="1" DefaultValue="" Comments="">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6784" ColName="gsr_id_valeur" PrevColName="" Pos="1" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="1" NotNull="1" AutoInc="0" IsForeignKey="1" DefaultValue="" Comments="">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6743" ColName="gsr_ordre" PrevColName="" Pos="3" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="Ordre des relations quand on a le meme identifiant de menu 01 et le meme type de relation.">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
</COLUMNS>
<RELATIONS_END>
<RELATION_END ID="6970" />
<RELATION_END ID="6971" />
<RELATION_END ID="6972" />
</RELATIONS_END>
<INDICES>
<INDEX ID="6774" IndexName="PRIMARY" IndexKind="0" FKRefDef_Obj_id="-1">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6809" LengthParam="0" />
<INDEXCOLUMN idColumn="6808" LengthParam="0" />
<INDEXCOLUMN idColumn="6784" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
<INDEX ID="6829" IndexName="gen_site_relation_FKIndex1" IndexKind="1" FKRefDef_Obj_id="6746">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6784" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
<INDEX ID="6830" IndexName="gen_site_relation_FKIndex2" IndexKind="1" FKRefDef_Obj_id="6777">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6809" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
<INDEX ID="6831" IndexName="gen_site_relation_FKIndex3" IndexKind="1" FKRefDef_Obj_id="6780">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6808" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
</INDICES>
</TABLE>
<TABLE ID="6946" Tablename="gen_site_categorie_valeur" PrevTableName="Table_18" XPos="808" YPos="199" TableType="0" TablePrefix="0" nmTable="0" Temporary="0" UseStandardInserts="0" StandardInserts="\n" TableOptions="DelayKeyTblUpdates=0\nPackKeys=0\nRowChecksum=0\nRowFormat=0\nUseRaid=0\nRaidType=0\n" Comments="" Collapsed="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="6751" OrderPos="19" >
<COLUMNS>
<COLUMN ID="6752" ColName="gscv_id_valeur" PrevColName="" Pos="0" idDatatype="5" DatatypeParams="(11)" Width="-1" Prec="-1" PrimaryKey="1" NotNull="1" AutoInc="1" IsForeignKey="0" DefaultValue="" Comments="">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6799" ColName="gsc_id_categorie" PrevColName="" Pos="1" idDatatype="5" DatatypeParams="" Width="-1" Prec="-1" PrimaryKey="0" NotNull="1" AutoInc="0" IsForeignKey="1" DefaultValue="" Comments="">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6754" ColName="gscv_intitule_valeur" PrevColName="" Pos="1" idDatatype="20" DatatypeParams="(255)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
</COLUMNS>
<RELATIONS_START>
<RELATION_START ID="6970" />
</RELATIONS_START>
<RELATIONS_END>
<RELATION_END ID="6969" />
</RELATIONS_END>
<INDICES>
<INDEX ID="6756" IndexName="PRIMARY" IndexKind="0" FKRefDef_Obj_id="-1">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6752" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
<INDEX ID="6832" IndexName="gen_site_categorie_valeur_FKIndex1" IndexKind="1" FKRefDef_Obj_id="6755">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6799" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
</INDICES>
</TABLE>
<TABLE ID="6947" Tablename="gen_site_categorie" PrevTableName="Table_19" XPos="803" YPos="92" TableType="0" TablePrefix="0" nmTable="0" Temporary="0" UseStandardInserts="0" StandardInserts="\n" TableOptions="DelayKeyTblUpdates=0\nPackKeys=0\nRowChecksum=0\nRowFormat=0\nUseRaid=0\nRaidType=0\n" Comments="" Collapsed="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="6758" OrderPos="20" >
<COLUMNS>
<COLUMN ID="6759" ColName="gsc_id_categorie" PrevColName="" Pos="0" idDatatype="5" DatatypeParams="" Width="-1" Prec="-1" PrimaryKey="1" NotNull="1" AutoInc="1" IsForeignKey="0" DefaultValue="" Comments="">
<OPTIONSELECTED>
<OPTIONSELECT Value="1" />
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
<COLUMN ID="6760" ColName="gsc_intitule_categorie" PrevColName="" Pos="1" idDatatype="20" DatatypeParams="(255)" Width="-1" Prec="-1" PrimaryKey="0" NotNull="0" AutoInc="0" IsForeignKey="0" DefaultValue="" Comments="">
<OPTIONSELECTED>
<OPTIONSELECT Value="0" />
</OPTIONSELECTED>
</COLUMN>
</COLUMNS>
<RELATIONS_START>
<RELATION_START ID="6969" />
</RELATIONS_START>
<INDICES>
<INDEX ID="6761" IndexName="PRIMARY" IndexKind="0" FKRefDef_Obj_id="-1">
<INDEXCOLUMNS>
<INDEXCOLUMN idColumn="6759" LengthParam="0" />
</INDEXCOLUMNS>
</INDEX>
</INDICES>
</TABLE>
</TABLES>
<RELATIONS>
<RELATION ID="6949" RelationName="fk_GS_GMCAC" Kind="2" SrcTable="6931" DestTable="6929" FKFields="gs_id_site=gmcac_ce_site\n" FKFieldsComments="\n" relDirection="2" MidOffset="1" OptionalStart="0" OptionalEnd="0" CaptionOffsetX="0" CaptionOffsetY="-48" StartIntervalOffsetX="11" StartIntervalOffsetY="-28" EndIntervalOffsetX="0" EndIntervalOffsetY="0" CreateRefDef="1" Invisible="0" RefDef="Matching=0\nOnDelete=3\nOnUpdate=3\n" Comments="" FKRefDefIndex_Obj_id="6827" Splitted="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="-1" OrderPos="22" />
<RELATION ID="6950" RelationName="fk_GA_GMC" Kind="2" SrcTable="6932" DestTable="6936" FKFields="ga_id_administrateur=gmc_ce_admin\n" FKFieldsComments="\n" relDirection="3" MidOffset="0" OptionalStart="0" OptionalEnd="0" CaptionOffsetX="-53" CaptionOffsetY="-23" StartIntervalOffsetX="0" StartIntervalOffsetY="0" EndIntervalOffsetX="0" EndIntervalOffsetY="0" CreateRefDef="1" Invisible="0" RefDef="Matching=0\nOnDelete=3\nOnUpdate=3\n" Comments="" FKRefDefIndex_Obj_id="6482" Splitted="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="-1" OrderPos="23" />
<RELATION ID="6951" RelationName="fk_GSA_GS" Kind="2" SrcTable="6937" DestTable="6931" FKFields="gsa_id_auth=gs_ce_auth\n" FKFieldsComments="\n" relDirection="4" MidOffset="-236" OptionalStart="0" OptionalEnd="0" CaptionOffsetX="0" CaptionOffsetY="-10" StartIntervalOffsetX="0" StartIntervalOffsetY="0" EndIntervalOffsetX="-9" EndIntervalOffsetY="-3" CreateRefDef="1" Invisible="0" RefDef="Matching=0\nOnDelete=3\nOnUpdate=3\n" Comments="" FKRefDefIndex_Obj_id="6474" Splitted="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="-1" OrderPos="24" />
<RELATION ID="6952" RelationName="fk_GSAL_GSA" Kind="5" SrcTable="6939" DestTable="6937" FKFields="gsal_id_auth_ldap=gsa_ce_auth_ldap\n" FKFieldsComments="\n" relDirection="1" MidOffset="15" OptionalStart="0" OptionalEnd="0" CaptionOffsetX="56" CaptionOffsetY="-5" StartIntervalOffsetX="0" StartIntervalOffsetY="0" EndIntervalOffsetX="0" EndIntervalOffsetY="0" CreateRefDef="1" Invisible="0" RefDef="Matching=0\nOnDelete=3\nOnUpdate=3\n" Comments="" FKRefDefIndex_Obj_id="6483" Splitted="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="-1" OrderPos="25" />
<RELATION ID="6953" RelationName="fk_GSAB_GSA" Kind="5" SrcTable="6938" DestTable="6937" FKFields="gsab_id_auth_bdd=gsa_ce_auth_bdd\n" FKFieldsComments="\n" relDirection="1" MidOffset="30" OptionalStart="0" OptionalEnd="0" CaptionOffsetX="-69" CaptionOffsetY="-8" StartIntervalOffsetX="0" StartIntervalOffsetY="0" EndIntervalOffsetX="0" EndIntervalOffsetY="0" CreateRefDef="1" Invisible="0" RefDef="Matching=0\nOnDelete=3\nOnUpdate=3\n" Comments="" FKRefDefIndex_Obj_id="6484" Splitted="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="-1" OrderPos="26" />
<RELATION ID="6954" RelationName="fk_GIP_GI" Kind="2" SrcTable="6941" DestTable="6940" FKFields="gip_id_pays=gi_ce_pays\n" FKFieldsComments="\n" relDirection="3" MidOffset="1" OptionalStart="0" OptionalEnd="0" CaptionOffsetX="3" CaptionOffsetY="-3" StartIntervalOffsetX="0" StartIntervalOffsetY="0" EndIntervalOffsetX="0" EndIntervalOffsetY="0" CreateRefDef="1" Invisible="0" RefDef="Matching=0\nOnDelete=3\nOnUpdate=3\n" Comments="" FKRefDefIndex_Obj_id="6570" Splitted="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="-1" OrderPos="27" />
<RELATION ID="6955" RelationName="fk_GIL_GI" Kind="2" SrcTable="6942" DestTable="6940" FKFields="gil_id_langue=gi_ce_langue\n" FKFieldsComments="\n" relDirection="3" MidOffset="0" OptionalStart="0" OptionalEnd="0" CaptionOffsetX="53" CaptionOffsetY="-22" StartIntervalOffsetX="6" StartIntervalOffsetY="4" EndIntervalOffsetX="0" EndIntervalOffsetY="0" CreateRefDef="1" Invisible="0" RefDef="Matching=0\nOnDelete=3\nOnUpdate=3\n" Comments="" FKRefDefIndex_Obj_id="6571" Splitted="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="-1" OrderPos="28" />
<RELATION ID="6956" RelationName="fk_GI_GA" Kind="2" SrcTable="6940" DestTable="6932" FKFields="gi_id_i18n=ga_ce_i18n\n" FKFieldsComments="\n" relDirection="3" MidOffset="-30" OptionalStart="0" OptionalEnd="0" CaptionOffsetX="47" CaptionOffsetY="-20" StartIntervalOffsetX="0" StartIntervalOffsetY="5" EndIntervalOffsetX="-3" EndIntervalOffsetY="-5" CreateRefDef="1" Invisible="0" RefDef="Matching=0\nOnDelete=3\nOnUpdate=3\n" Comments="" FKRefDefIndex_Obj_id="6534" Splitted="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="-1" OrderPos="29" />
<RELATION ID="6957" RelationName="fk_GI_GS" Kind="2" SrcTable="6940" DestTable="6931" FKFields="gi_id_i18n=gs_ce_i18n\n" FKFieldsComments="\n" relDirection="2" MidOffset="5" OptionalStart="0" OptionalEnd="0" CaptionOffsetX="0" CaptionOffsetY="0" StartIntervalOffsetX="0" StartIntervalOffsetY="0" EndIntervalOffsetX="0" EndIntervalOffsetY="0" CreateRefDef="1" Invisible="0" RefDef="Matching=0\nOnDelete=3\nOnUpdate=3\n" Comments="" FKRefDefIndex_Obj_id="6609" Splitted="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="-1" OrderPos="30" />
<RELATION ID="6958" RelationName="fk_GS_GM" Kind="2" SrcTable="6931" DestTable="6935" FKFields="gs_id_site=gm_ce_site\n" FKFieldsComments="\n" relDirection="3" MidOffset="0" OptionalStart="0" OptionalEnd="0" CaptionOffsetX="0" CaptionOffsetY="0" StartIntervalOffsetX="0" StartIntervalOffsetY="0" EndIntervalOffsetX="0" EndIntervalOffsetY="0" CreateRefDef="1" Invisible="0" RefDef="Matching=0\nOnDelete=3\nOnUpdate=3\n" Comments="" FKRefDefIndex_Obj_id="6828" Splitted="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="-1" OrderPos="31" />
<RELATION ID="6959" RelationName="fk_GA_GM" Kind="2" SrcTable="6932" DestTable="6935" FKFields="ga_id_administrateur=gm_ce_admin\n" FKFieldsComments="\n" relDirection="2" MidOffset="3" OptionalStart="0" OptionalEnd="0" CaptionOffsetX="0" CaptionOffsetY="0" StartIntervalOffsetX="0" StartIntervalOffsetY="0" EndIntervalOffsetX="0" EndIntervalOffsetY="0" CreateRefDef="1" Invisible="0" RefDef="Matching=0\nOnDelete=3\nOnUpdate=3\n" Comments="" FKRefDefIndex_Obj_id="6621" Splitted="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="-1" OrderPos="32" />
<RELATION ID="6960" RelationName="fk_GA_GS" Kind="2" SrcTable="6932" DestTable="6931" FKFields="ga_id_administrateur=gs_ce_admin\n" FKFieldsComments="\n" relDirection="2" MidOffset="-40" OptionalStart="0" OptionalEnd="0" CaptionOffsetX="0" CaptionOffsetY="0" StartIntervalOffsetX="0" StartIntervalOffsetY="0" EndIntervalOffsetX="0" EndIntervalOffsetY="0" CreateRefDef="1" Invisible="0" RefDef="Matching=0\nOnDelete=3\nOnUpdate=3\n" Comments="" FKRefDefIndex_Obj_id="6625" Splitted="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="-1" OrderPos="33" />
<RELATION ID="6961" RelationName="fk_GM_GMUA" Kind="2" SrcTable="6935" DestTable="6934" FKFields="gm_id_menu=gmua_ce_menu\n" FKFieldsComments="\n" relDirection="2" MidOffset="0" OptionalStart="0" OptionalEnd="0" CaptionOffsetX="-62" CaptionOffsetY="-6" StartIntervalOffsetX="0" StartIntervalOffsetY="0" EndIntervalOffsetX="0" EndIntervalOffsetY="0" CreateRefDef="1" Invisible="0" RefDef="Matching=0\nOnDelete=3\nOnUpdate=3\n" Comments="" FKRefDefIndex_Obj_id="6629" Splitted="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="-1" OrderPos="34" />
<RELATION ID="6962" RelationName="fk_GAP_GM" Kind="2" SrcTable="6933" DestTable="6935" FKFields="gap_id_application=gm_ce_application\n" FKFieldsComments="\n" relDirection="4" MidOffset="28" OptionalStart="0" OptionalEnd="0" CaptionOffsetX="0" CaptionOffsetY="0" StartIntervalOffsetX="0" StartIntervalOffsetY="0" EndIntervalOffsetX="0" EndIntervalOffsetY="0" CreateRefDef="1" Invisible="0" RefDef="Matching=0\nOnDelete=3\nOnUpdate=3\n" Comments="" FKRefDefIndex_Obj_id="6633" Splitted="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="-1" OrderPos="35" />
<RELATION ID="6963" RelationName="fk_GM_GMC" Kind="2" SrcTable="6935" DestTable="6936" FKFields="gm_id_menu=gmc_ce_menu\n" FKFieldsComments="\n" relDirection="4" MidOffset="-21" OptionalStart="0" OptionalEnd="0" CaptionOffsetX="-50" CaptionOffsetY="-23" StartIntervalOffsetX="0" StartIntervalOffsetY="0" EndIntervalOffsetX="0" EndIntervalOffsetY="0" CreateRefDef="1" Invisible="0" RefDef="Matching=0\nOnDelete=3\nOnUpdate=3\n" Comments="" FKRefDefIndex_Obj_id="6637" Splitted="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="-1" OrderPos="36" />
<RELATION ID="6964" RelationName="fk_GI_GM" Kind="2" SrcTable="6940" DestTable="6935" FKFields="gi_id_i18n=gm_ce_i18n\n" FKFieldsComments="\n" relDirection="3" MidOffset="147" OptionalStart="0" OptionalEnd="0" CaptionOffsetX="0" CaptionOffsetY="0" StartIntervalOffsetX="0" StartIntervalOffsetY="0" EndIntervalOffsetX="0" EndIntervalOffsetY="0" CreateRefDef="1" Invisible="0" RefDef="Matching=0\nOnDelete=3\nOnUpdate=3\n" Comments="" FKRefDefIndex_Obj_id="6641" Splitted="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="-1" OrderPos="37" />
<RELATION ID="6965" RelationName="fk_GM_GMR_01" Kind="1" SrcTable="6935" DestTable="6930" FKFields="gm_id_menu=gmr_id_menu_01\n" FKFieldsComments="\n" relDirection="2" MidOffset="10" OptionalStart="0" OptionalEnd="0" CaptionOffsetX="0" CaptionOffsetY="0" StartIntervalOffsetX="0" StartIntervalOffsetY="0" EndIntervalOffsetX="16" EndIntervalOffsetY="-5" CreateRefDef="1" Invisible="0" RefDef="Matching=0\nOnDelete=3\nOnUpdate=3\n" Comments="" FKRefDefIndex_Obj_id="6663" Splitted="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="-1" OrderPos="38" />
<RELATION ID="6966" RelationName="fk_GM_GMR_02" Kind="1" SrcTable="6935" DestTable="6930" FKFields="gm_id_menu=gmr_id_menu_02\n" FKFieldsComments="\n" relDirection="2" MidOffset="9" OptionalStart="0" OptionalEnd="0" CaptionOffsetX="1" CaptionOffsetY="-60" StartIntervalOffsetX="0" StartIntervalOffsetY="0" EndIntervalOffsetX="17" EndIntervalOffsetY="-6" CreateRefDef="1" Invisible="0" RefDef="Matching=0\nOnDelete=3\nOnUpdate=3\n" Comments="" FKRefDefIndex_Obj_id="6665" Splitted="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="-1" OrderPos="39" />
<RELATION ID="6967" RelationName="fk_GMCA_GMVC" Kind="2" SrcTable="6944" DestTable="6943" FKFields="gmca_id_categorie=gmcv_id_categorie\n" FKFieldsComments="\n" relDirection="3" MidOffset="19" OptionalStart="0" OptionalEnd="0" CaptionOffsetX="72" CaptionOffsetY="-23" StartIntervalOffsetX="1" StartIntervalOffsetY="5" EndIntervalOffsetX="1" EndIntervalOffsetY="-8" CreateRefDef="1" Invisible="0" RefDef="Matching=0\nOnDelete=3\nOnUpdate=3\n" Comments="" FKRefDefIndex_Obj_id="6738" Splitted="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="-1" OrderPos="40" />
<RELATION ID="6968" RelationName="fk_GMCV_GMR" Kind="1" SrcTable="6943" DestTable="6930" FKFields="gmcv_id_valeur=gmr_id_valeur\n" FKFieldsComments="\n" relDirection="3" MidOffset="1" OptionalStart="0" OptionalEnd="0" CaptionOffsetX="64" CaptionOffsetY="-28" StartIntervalOffsetX="0" StartIntervalOffsetY="0" EndIntervalOffsetX="0" EndIntervalOffsetY="0" CreateRefDef="1" Invisible="0" RefDef="Matching=0\nOnDelete=3\nOnUpdate=3\n" Comments="" FKRefDefIndex_Obj_id="6737" Splitted="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="-1" OrderPos="41" />
<RELATION ID="6969" RelationName="fk_GSC_GSCV" Kind="2" SrcTable="6947" DestTable="6946" FKFields="gsc_id_categorie=gsc_id_categorie\n" FKFieldsComments="\n" relDirection="3" MidOffset="0" OptionalStart="0" OptionalEnd="0" CaptionOffsetX="62" CaptionOffsetY="-20" StartIntervalOffsetX="0" StartIntervalOffsetY="5" EndIntervalOffsetX="1" EndIntervalOffsetY="-4" CreateRefDef="1" Invisible="0" RefDef="Matching=0\nOnDelete=3\nOnUpdate=3\n" Comments="" FKRefDefIndex_Obj_id="6832" Splitted="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="-1" OrderPos="42" />
<RELATION ID="6970" RelationName="fk_GSCV_GSR" Kind="1" SrcTable="6946" DestTable="6945" FKFields="gscv_id_valeur=gsr_id_valeur\n" FKFieldsComments="\n" relDirection="3" MidOffset="1" OptionalStart="0" OptionalEnd="0" CaptionOffsetX="70" CaptionOffsetY="-24" StartIntervalOffsetX="0" StartIntervalOffsetY="0" EndIntervalOffsetX="0" EndIntervalOffsetY="0" CreateRefDef="1" Invisible="0" RefDef="Matching=0\nOnDelete=3\nOnUpdate=3\n" Comments="" FKRefDefIndex_Obj_id="6829" Splitted="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="-1" OrderPos="43" />
<RELATION ID="6971" RelationName="fk_GS_GSR_01" Kind="1" SrcTable="6931" DestTable="6945" FKFields="gs_id_site=gsr_id_site_01\n" FKFieldsComments="\n" relDirection="2" MidOffset="0" OptionalStart="0" OptionalEnd="0" CaptionOffsetX="-1" CaptionOffsetY="5" StartIntervalOffsetX="9" StartIntervalOffsetY="0" EndIntervalOffsetX="-12" EndIntervalOffsetY="-23" CreateRefDef="1" Invisible="0" RefDef="Matching=0\nOnDelete=3\nOnUpdate=3\n" Comments="" FKRefDefIndex_Obj_id="6830" Splitted="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="-1" OrderPos="44" />
<RELATION ID="6972" RelationName="fk_GS_GSR_02" Kind="1" SrcTable="6931" DestTable="6945" FKFields="gs_id_site=gsr_id_site_02\n" FKFieldsComments="\n" relDirection="2" MidOffset="1" OptionalStart="0" OptionalEnd="0" CaptionOffsetX="4" CaptionOffsetY="-50" StartIntervalOffsetX="11" StartIntervalOffsetY="0" EndIntervalOffsetX="-12" EndIntervalOffsetY="-27" CreateRefDef="1" Invisible="0" RefDef="Matching=0\nOnDelete=3\nOnUpdate=3\n" Comments="" FKRefDefIndex_Obj_id="6831" Splitted="0" IsLinkedObject="0" IDLinkedModel="-1" Obj_id_Linked="-1" OrderPos="45" />
</RELATIONS>
<NOTES>
</NOTES>
<IMAGES>
</IMAGES>
</METADATA>
<PLUGINDATA>
<PLUGINDATARECORDS>
</PLUGINDATARECORDS>
</PLUGINDATA>
<QUERYDATA>
<QUERYRECORDS>
</QUERYRECORDS>
</QUERYDATA>
<LINKEDMODELS>
</LINKEDMODELS>
</DBMODEL>
/branches/v1.0-menes/papyrus/documentation/bdd_papyrus.sql
New file
0,0 → 1,269
-- ------------------------------------------------------------
-- Contient les informations sur les administrateurs de Papyrus.
-- ------------------------------------------------------------
 
CREATE TABLE gen_annuaire (
ga_id_administrateur INTEGER(11) UNSIGNED NOT NULL DEFAULT '0',
ga_ce_i18n VARCHAR(8) NOT NULL,
ga_nom VARCHAR(32) NOT NULL,
ga_prenom VARCHAR(32) NOT NULL,
ga_mot_de_passe VARCHAR(32) NOT NULL DEFAULT 'X X',
ga_mail VARCHAR(128) NOT NULL,
PRIMARY KEY(ga_id_administrateur),
);
 
-- ------------------------------------------------------------
-- Contient les informations sur les applications ou les applettes disponibles pour Papyrus.
-- Une application est spécifiquement appelée par un menu et ce menu lui transmet des paramètres.
-- Une applette est appellée via une balise présente dans un squelette et possède ses propres paramètres.
-- Une applette sera donc commune à toutes les pages utilisant le squelette en question.
-- ------------------------------------------------------------
 
CREATE TABLE gen_application (
gap_id_application INTEGER(11) UNSIGNED NOT NULL,
gap_nom VARCHAR(100) NOT NULL,
gap_description MEDIUMTEXT NOT NULL,
gap_chemin VARCHAR(255) NOT NULL,
gap_bool_applette TINYINT(1) UNSIGNED NOT NULL DEFAULT '0',
gap_applette_balise VARCHAR(255) NULL,
gap_applette_arguments VARCHAR(255) NULL,
PRIMARY KEY(gap_id_application)
);
 
-- ------------------------------------------------------------
-- Contient les informations sur le couple langue / pays autrement appelé Internationalisation ou i18n.
-- ------------------------------------------------------------
 
CREATE TABLE gen_i18n (
gi_id_i18n VARCHAR(8) NOT NULL,
gi_ce_langue VARCHAR(2) NOT NULL,
gi_ce_pays VARCHAR(2) NOT NULL,
gi_jeu_de_caracteres VARCHAR(50) NULL,
gi_nom VARCHAR(255) NOT NULL,
PRIMARY KEY(gi_id_i18n),
);
 
-- ------------------------------------------------------------
-- Cette table contient les langues, leur noms par défaut, en français en général et la direction d'écriture (ltr left to right ou rtl right to left)
-- ------------------------------------------------------------
 
CREATE TABLE gen_i18n_langue (
gil_id_langue VARCHAR(2) NOT NULL,
gil_nom VARCHAR(255) NULL,
gil_direction VARCHAR(20) NULL,
PRIMARY KEY(gil_id_langue)
);
 
-- ------------------------------------------------------------
-- Cette table contient les différents pays du monde et leur nom par défaut (en français). Ainsi qu'un nom de fichier pour le drapeaux.
-- ------------------------------------------------------------
 
CREATE TABLE gen_i18n_pays (
gip_id_pays VARCHAR(2) NOT NULL,
gip_nom VARCHAR(255) NULL,
gip_fichier_drapeau VARCHAR(255) NULL,
PRIMARY KEY(gip_id_pays)
);
 
-- ------------------------------------------------------------
-- Contient les informations sur les menus constituant un site.
-- Les informations d'un menu permettent de générer les entetes Dublin Core.
-- ------------------------------------------------------------
 
CREATE TABLE gen_menu (
gm_id_menu INTEGER(11) UNSIGNED NOT NULL,
gm_ce_site INTEGER(11) UNSIGNED NOT NULL,
gm_ce_i18n VARCHAR(8) NOT NULL,
gm_ce_application INTEGER(11) UNSIGNED NOT NULL,
gm_application_arguments VARCHAR(255) NULL,
gm_fichier_squelette VARCHAR(255) NULL,
gm_code_num INTEGER(11) UNSIGNED NOT NULL,
gm_code_alpha VARCHAR(20) NOT NULL,
gm_nom VARCHAR(100) NULL,
gm_raccourci_clavier CHAR(1) NULL,
gm_robot VARCHAR(100) NULL DEFAULT 'index,follow',
gm_titre VARCHAR(255) NULL,
gm_titre_alternatif VARCHAR(255) NULL,
gm_mots_cles TEXT NULL,
gm_description_libre TEXT NULL,
gm_description_resume TEXT NULL,
gm_description_table_matieres TEXT NULL,
gm_source VARCHAR(255) NULL,
gm_auteur VARCHAR(255) NULL,
gm_contributeur TEXT NULL,
gm_editeur TEXT NULL,
gm_date_creation DATETIME NULL,
gm_date_soumission DATETIME NULL,
gm_date_acceptation DATETIME NULL,
gm_date_publication DATETIME NULL,
gm_date_debut_validite DATETIME NULL,
gm_date_fin_validite DATETIME NULL,
gm_date_copyright DATETIME NULL,
gm_licence VARCHAR(255) NULL,
gm_categorie VARCHAR(100) NULL,
gm_public VARCHAR(255) NULL,
gm_public_niveau VARCHAR(45) NULL,
gm_ce_type_portee_spatiale INTEGER(11) UNSIGNED NULL,
gm_portee_spatiale VARCHAR(100) NULL,
gm_ce_type_portee_temporelle INTEGER(11) UNSIGNED NULL,
gm_portee_temporelle VARCHAR(100) NULL,
gm_ce_admin INTEGER(11) UNSIGNED NOT NULL,
PRIMARY KEY(gm_id_menu),
);
 
-- ------------------------------------------------------------
-- Contient les pages en cache du site.
-- ------------------------------------------------------------
 
CREATE TABLE gen_menu_cache (
gmcac_id_md5_url VARCHAR(32) NOT NULL,
gmcac_ce_site INTEGER(11) UNSIGNED NOT NULL,
gmcac_corps LONGBLOB NOT NULL,
gmcac_date_heure DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
gmcac_taille INTEGER(11) NOT NULL,
gmcac_gz_taille INTEGER(11) NOT NULL,
PRIMARY KEY(gmcac_id_md5_url),
);
 
CREATE TABLE gen_menu_categorie (
gmca_id_categorie INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
gmca_intitule_categorie VARCHAR(255) NULL,
PRIMARY KEY(gmca_id_categorie)
);
 
CREATE TABLE gen_menu_categorie_valeur (
gmcv_id_valeur INTEGER(11) UNSIGNED NOT NULL AUTO_INCREMENT,
gmcv_id_categorie INTEGER UNSIGNED NOT NULL,
gmcv_intitule_valeur VARCHAR(255) NULL,
PRIMARY KEY(gmcv_id_valeur),
);
 
-- ------------------------------------------------------------
-- Permet de suivre l'évolution d'une page et d'obtenir ses informations d'entete et son contenu associé.
-- ------------------------------------------------------------
 
CREATE TABLE gen_menu_contenu (
gmc_id_contenu INTEGER(11) UNSIGNED NOT NULL,
gmc_ce_admin INTEGER(11) UNSIGNED NOT NULL,
gmc_ce_menu INTEGER(11) UNSIGNED NOT NULL,
gmc_ce_type_contenu INTEGER(11) UNSIGNED NULL,
gmc_contenu MEDIUMTEXT NULL,
gmc_ce_type_modification INTEGER(11) UNSIGNED NULL,
gmc_resume_modification VARCHAR(255) NULL,
gmc_date_modification DATETIME NULL,
gmc_bool_dernier TINYINT(1) UNSIGNED NULL DEFAULT '1',
PRIMARY KEY(gmc_id_contenu),
);
 
-- ------------------------------------------------------------
-- Table permettant de connaitre les relations unissant les menus entre eux.
-- ------------------------------------------------------------
 
CREATE TABLE gen_menu_relation (
gmr_id_menu_01 INTEGER(11) UNSIGNED NOT NULL,
gmr_id_menu_02 INTEGER(11) UNSIGNED NOT NULL,
gmr_id_valeur INTEGER(11) UNSIGNED NOT NULL,
gmr_ordre INTEGER(11) UNSIGNED NULL,
PRIMARY KEY(gmr_id_menu_01, gmr_id_menu_02, gmr_id_valeur),
);
 
-- ------------------------------------------------------------
-- Contient les url alternative pour un menu d'un site dans une langue donnée.
-- ------------------------------------------------------------
 
CREATE TABLE gen_menu_url_alternative (
gmua_id_url INTEGER(11) UNSIGNED NOT NULL DEFAULT '0',
gmua_ce_menu INTEGER(11) UNSIGNED NOT NULL,
gmua_url VARCHAR(255) NOT NULL,
PRIMARY KEY(gmua_id_url),
);
 
-- ------------------------------------------------------------
-- Contient les informations sur les sites gérés par Papyrus.
-- ------------------------------------------------------------
 
CREATE TABLE gen_site (
gs_id_site INTEGER(11) UNSIGNED NOT NULL,
gs_ce_i18n VARCHAR(8) NOT NULL,
gs_ce_auth INTEGER(11) UNSIGNED NOT NULL DEFAULT '0',
gs_fichier_squelette VARCHAR(255) NOT NULL,
gs_code_num INTEGER(11) UNSIGNED NULL,
gs_code_alpha VARCHAR(20) NOT NULL,
gs_nom VARCHAR(100) NOT NULL,
gs_raccourci_clavier CHAR(1) NULL,
gs_titre VARCHAR(255) NULL,
gs_mots_cles TEXT NULL,
gs_description TEXT NULL,
gs_auteur VARCHAR(255) NULL,
gs_date_creation DATETIME NULL,
gs_ce_admin INTEGER(11) UNSIGNED NOT NULL,
PRIMARY KEY(gs_id_site),
);
 
-- ------------------------------------------------------------
-- Contient les informations communes aux différents systèmes d'identification.
-- Le type d'identification permet de savoir dans quel table chercher les informations d'identifications spécifique au mode d'identification.
-- ------------------------------------------------------------
 
CREATE TABLE gen_site_auth (
gsa_id_auth INTEGER(11) UNSIGNED NOT NULL,
gsa_ce_type_auth INTEGER(11) UNSIGNED NULL,
gsa_nom VARCHAR(100) NULL,
gsa_ce_auth_bdd INTEGER(11) UNSIGNED NOT NULL,
gsa_ce_auth_ldap INTEGER(11) UNSIGNED NOT NULL,
PRIMARY KEY(gsa_id_auth),
);
 
-- ------------------------------------------------------------
-- Contient les informations pour identification via une base de données.
-- ------------------------------------------------------------
 
CREATE TABLE gen_site_auth_bdd (
gsab_id_auth_bdd INTEGER(11) UNSIGNED NOT NULL,
gsab_dsn VARCHAR(255) NULL,
gsab_nom_table VARCHAR(100) NULL,
gsab_nom_champ_login VARCHAR(100) NULL,
gsab_nom_champ_mdp VARCHAR(100) NULL,
gsab_cryptage_mdp VARCHAR(100) NULL,
PRIMARY KEY(gsab_id_auth_bdd)
);
 
-- ------------------------------------------------------------
-- Contient les information spécifique à une identification via LDAP.
-- ------------------------------------------------------------
 
CREATE TABLE gen_site_auth_ldap (
gsal_id_auth_ldap INTEGER(11) UNSIGNED NOT NULL,
gsal_serveur VARCHAR(100) NULL,
gsal_port INTEGER(11) UNSIGNED NULL,
gsal_base_dn VARCHAR(255) NULL,
gsal_uid VARCHAR(100) NULL,
PRIMARY KEY(gsal_id_auth_ldap)
);
 
CREATE TABLE gen_site_categorie (
gsc_id_categorie INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
gsc_intitule_categorie VARCHAR(255) NULL,
PRIMARY KEY(gsc_id_categorie)
);
 
CREATE TABLE gen_site_categorie_valeur (
gscv_id_valeur INTEGER(11) UNSIGNED NOT NULL AUTO_INCREMENT,
gsc_id_categorie INTEGER UNSIGNED NOT NULL,
gscv_intitule_valeur VARCHAR(255) NULL,
PRIMARY KEY(gscv_id_valeur),
);
 
-- ------------------------------------------------------------
-- Table permettant de connaitre les relations unissant les menus entre eux.
-- ------------------------------------------------------------
 
CREATE TABLE gen_site_relation (
gsr_id_site_01 INTEGER(11) UNSIGNED NOT NULL,
gsr_id_site_02 INTEGER(11) UNSIGNED NOT NULL,
gsr_id_valeur INTEGER(11) UNSIGNED NOT NULL,
gsr_ordre INTEGER(11) UNSIGNED NULL,
PRIMARY KEY(gsr_id_site_01, gsr_id_site_02, gsr_id_valeur),
);
 
 
/branches/v1.0-menes/papyrus/documentation/bdd_creation_papyrus.sql
New file
0,0 → 1,504
-- phpMyAdmin SQL Dump
-- version 2.6.0-pl1
-- http://www.phpmyadmin.net
--
-- Serveur: localhost
-- Généré le : Jeudi 14 Octobre 2004 à 18:05
-- Version du serveur: 4.0.18
-- Version de PHP: 4.3.4
--
-- Base de données: `papyrus`
--
 
-- --------------------------------------------------------
 
--
-- Structure de la table `gen_annuaire`
--
 
CREATE TABLE `gen_annuaire` (
`ga_id_administrateur` int(11) unsigned NOT NULL default '0',
`ga_ce_i18n` varchar(8) NOT NULL default '',
`ga_nom` varchar(32) NOT NULL default '',
`ga_prenom` varchar(32) NOT NULL default '',
`ga_mot_de_passe` varchar(32) NOT NULL default 'X X',
`ga_mail` varchar(128) NOT NULL default '',
PRIMARY KEY (`ga_id_administrateur`),
KEY `gen_annuaire_FKIndex1` (`ga_ce_i18n`)
) TYPE=MyISAM;
 
--
-- Contenu de la table `gen_annuaire`
--
 
INSERT INTO `gen_annuaire` VALUES (0, '', 'Non renseigné', '', '', '');
INSERT INTO `gen_annuaire` VALUES (1, 'fr-FR', 'Administrateur', 'Super', 'd41d8cd98f00b204e9800998ecf8427e', 'admin@tela-botanica.org');
 
-- --------------------------------------------------------
 
--
-- Structure de la table `gen_application`
--
 
CREATE TABLE `gen_application` (
`gap_id_application` int(11) unsigned NOT NULL default '0',
`gap_nom` varchar(100) NOT NULL default '',
`gap_description` mediumtext NOT NULL,
`gap_chemin` varchar(255) NOT NULL default '',
`gap_bool_applette` tinyint(1) unsigned NOT NULL default '0',
PRIMARY KEY (`gap_id_application`)
) TYPE=MyISAM;
 
--
-- Contenu de la table `gen_application`
--
 
INSERT INTO `gen_application` VALUES (0, 'Inconnue', 'Pour les menu ne contenant auncune application.', 'inconnu', 0);
INSERT INTO `gen_application` VALUES (1, 'Administrateur des sites', 'Permet de rajouter des sites sur les serveurs.\r\nProchainement permetra de gérer le cache, les squelettes et leurs fichiers CSS et JS.\r\nPermetra aussi de visualiser les statistiques de chaque site.', 'papyrus/applications/admin_site/admin_site.php', 0);
INSERT INTO `gen_application` VALUES (2, 'Administrateur des menus', 'Permet de modifier la hiérarchie et les informations concernant les menus d''un site.\r\n', 'papyrus/applications/admin_menu/admin_menu.php', 0);
INSERT INTO `gen_application` VALUES (3, 'Afficheur', 'L''application standart qui permet d''afficher du contenu XHTML dans les pages.', 'papyrus/applications/afficheur/afficheur.php', 0);
INSERT INTO `gen_application` VALUES (4, 'Plan du site', 'Application affichant le plan d''un site Génésia.', 'papyrus/applications/plan/plan.php', 0);
INSERT INTO `gen_application` VALUES (5, 'Menu classique mono ou multi niveaux', 'Génère une liste de listes correspondant à la hiérarchie des menus.\r\nLa liste dépend des paramètres passés dans la balise.\r\nBalise de type MENU_n_m : affiche tous les menus de niveaux n à m.\r\nExemple :\r\nMENU_1_1 : affiche tous les menus de niveaux 1.\r\nMENU_1_3 : affiche tous les menus de niveaux 1 à 3.', 'papyrus/applettes/menu/menu.php', 1);
INSERT INTO `gen_application` VALUES (6, 'Menu commun', 'Génère une liste de menus communs à l''ensemble du site.', 'papyrus/applettes/menu_commun/menu_commun.php', 1);
INSERT INTO `gen_application` VALUES (7, 'Sélecteur de sites', 'Génère un formulaire permettant de passer de site en site pour une langue donnée.', 'papyrus/applettes/selecteur_sites/selecteur_sites.php', 1);
INSERT INTO `gen_application` VALUES (8, 'Identification', 'Génère un formulaire permettant de s''identifier ou fournissant les informations sur la personne identifiée.', 'papyrus/applettes/identification/identification.php', 1);
INSERT INTO `gen_application` VALUES (9, 'Vous-êtes-ici', 'Affiche la suite des menus visité, sous forme de lien, pour arriver au menu courant visioné par l''utilisateur.', 'papyrus/applettes/vous_etes_ici/vous_etes_ici.php', 1);
INSERT INTO `gen_application` VALUES (10, 'Annuaire (Front-office)', 'Application affichant l''annuaire.', 'client/bottin/annuaire.php', 0);
INSERT INTO `gen_application` VALUES (11, 'Annuaire (Back-office)', 'Application affichant le back-office de l''annuaire.', 'client/bottin/annuaire_backoffice.php', 0);
-- --------------------------------------------------------
 
--
-- Structure de la table `gen_i18n`
--
 
CREATE TABLE `gen_i18n` (
`gi_id_i18n` varchar(8) NOT NULL default '',
`gi_ce_langue` char(2) NOT NULL default '',
`gi_ce_pays` char(2) NOT NULL default '',
`gi_jeu_de_caracteres` varchar(50) default NULL,
`gi_nom` varchar(255) NOT NULL default '',
PRIMARY KEY (`gi_id_i18n`),
KEY `gen_i18n_FKIndex1` (`gi_ce_pays`),
KEY `gen_i18n_FKIndex2` (`gi_ce_langue`)
) TYPE=MyISAM;
 
--
-- Contenu de la table `gen_i18n`
--
 
INSERT INTO `gen_i18n` VALUES ('fr', 'fr', '', 'iso-8859-15', 'Français');
INSERT INTO `gen_i18n` VALUES ('en', 'en', '', 'iso-8859-15', 'English');
 
-- --------------------------------------------------------
 
--
-- Structure de la table `gen_i18n_langue`
--
 
CREATE TABLE `gen_i18n_langue` (
`gil_id_langue` char(2) NOT NULL default '',
`gil_nom` varchar(255) default NULL,
`gil_direction` varchar(20) default NULL,
PRIMARY KEY (`gil_id_langue`)
) TYPE=MyISAM;
 
--
-- Contenu de la table `gen_i18n_langue`
--
 
INSERT INTO `gen_i18n_langue` VALUES ('fr', 'français', 'ltr');
INSERT INTO `gen_i18n_langue` VALUES ('en', 'anglais', 'ltr');
 
-- --------------------------------------------------------
 
--
-- Structure de la table `gen_i18n_pays`
--
 
CREATE TABLE `gen_i18n_pays` (
`gip_id_pays` char(2) NOT NULL default '',
`gip_nom` varchar(255) default NULL,
`gip_fichier_drapeau` varchar(255) default NULL,
PRIMARY KEY (`gip_id_pays`)
) TYPE=MyISAM;
 
--
-- Contenu de la table `gen_i18n_pays`
--
 
INSERT INTO `gen_i18n_pays` VALUES ('FR', 'France', 'FR.png');
INSERT INTO `gen_i18n_pays` VALUES ('UK', 'Royaume-Uni', 'UK.png');
 
-- --------------------------------------------------------
 
--
-- Structure de la table `gen_menu`
--
 
CREATE TABLE `gen_menu` (
`gm_id_menu` int(11) unsigned NOT NULL default '0',
`gm_ce_i18n` varchar(8) NOT NULL default '',
`gm_ce_site` int(11) unsigned NOT NULL default '0',
`gm_ce_application` int(11) unsigned NOT NULL default '0',
`gm_application_arguments` varchar(255) default NULL,
`gm_fichier_squelette` varchar(255) default NULL,
`gm_code_num` int(11) NOT NULL default '0',
`gm_code_alpha` varchar(20) NOT NULL default '',
`gm_nom` varchar(100) default NULL,
`gm_raccourci_clavier` char(1) default NULL,
`gm_robot` varchar(100) default 'index,follow',
`gm_titre` varchar(255) default NULL,
`gm_titre_alternatif` varchar(255) default NULL,
`gm_mots_cles` text,
`gm_description_libre` text,
`gm_description_resume` text,
`gm_description_table_matieres` text,
`gm_source` varchar(255) default NULL,
`gm_auteur` varchar(255) default NULL,
`gm_contributeur` text,
`gm_editeur` text,
`gm_date_creation` datetime default NULL,
`gm_date_soumission` datetime default NULL,
`gm_date_acceptation` datetime default NULL,
`gm_date_publication` datetime default NULL,
`gm_date_debut_validite` datetime default NULL,
`gm_date_fin_validite` datetime default NULL,
`gm_date_copyright` datetime default NULL,
`gm_licence` varchar(255) default NULL,
`gm_categorie` varchar(100) default NULL,
`gm_public` varchar(255) default NULL,
`gm_public_niveau` varchar(45) default NULL,
`gm_ce_type_portee_spatiale` int(11) unsigned default NULL,
`gm_portee_spatiale` varchar(100) default NULL,
`gm_ce_type_portee_temporelle` int(11) unsigned default NULL,
`gm_portee_temporelle` varchar(100) default NULL,
`gm_ce_admin` int(11) unsigned NOT NULL default '0',
PRIMARY KEY (`gm_id_menu`),
KEY `gen_menu_FKIndex2` (`gm_ce_admin`),
KEY `gen_menu_FKIndex3` (`gm_ce_application`),
KEY `gen_menu_FKIndex4` (`gm_ce_i18n`)
) TYPE=MyISAM;
 
--
-- Contenu de la table `gen_menu`
--
 
INSERT INTO `gen_menu` VALUES (1, 'fr', 1, 0, '', '', 1, 'config', 'Configuration', 'C', 'index,follow', '', '', '', '', 'Configuration des sites de Génésia', '', '', '', '', '', '2004-04-22 21:35:44', '2004-04-22 21:35:44', '2004-04-22 21:35:44', '2004-04-22 21:35:44', '2004-04-22 21:35:44', '2004-04-22 21:35:44', '2004-04-22 21:35:44', '', '', '', '', 0, '', 0, '', 0);
INSERT INTO `gen_menu` VALUES (2, 'fr', 1, 1, '', '', 2, 'sites', 'Administration sites', 'S', 'index,follow', 'Administration des sites de Génésia.', '', 'Administration, sites.', 'Interface d''administration des sites de Génésia.', 'Administration des sites de Génésia.', '', '', 'Tela Botanica', '', 'Tela Botanica', '2004-04-22 21:38:30', '2004-04-22 21:38:30', '2004-04-22 21:38:30', '2004-04-22 21:38:30', '2004-04-22 21:38:30', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '', '', '', 0, '', 0, '', 0);
INSERT INTO `gen_menu` VALUES (4, 'fr', 1, 3, '', '', 4, 'aide', 'Aide', '', 'index,follow', 'Aide des interfaces de Génésia.', '', 'Aide, Génésia.', 'Contient une aide sur les interfaces de Génésia.', 'Une aide sur les interfaces de Génésia.', '', '', 'Jean-Pascal MILCENT', '', 'Tela Botanica', '2004-05-04 13:31:26', '2004-05-04 13:31:26', '2004-05-04 13:31:26', '2004-05-04 13:31:26', '2004-05-04 13:31:26', '0000-00-00 00:00:00', '2004-00-00 00:00:00', '', 'menu', '', '', NULL, '', NULL, '', 0);
INSERT INTO `gen_menu` VALUES (6, 'fr', 1, 4, '', '', 6, 'plan_genesia', 'Plan du site', '', 'index,follow', 'Plan du site d''administration.', 'Plan du site d''administration', 'plan, administration.', '', 'Plan du site d''administration de Génésia.', '', '', 'Jean-Pascal MILCENT', '', 'Tela Botanica', '2004-05-03 19:24:29', '2004-05-03 19:24:29', '2004-05-03 19:24:29', '2004-05-03 19:24:29', '2004-05-03 19:24:29', '0000-00-00 00:00:00', '2004-00-00 00:00:00', '', 'menu commun', '', '', NULL, '', NULL, '', 0);
INSERT INTO `gen_menu` VALUES (5, 'fr', 1, 3, '', '', 5, 'accessibilite', 'Chartre d''accessibilité', '', 'index,follow', 'Chartre d''accessibilité de Tela Botanica.', '', 'accessibilité, chartre, handicap.', 'Fournit des informations sur l''accessibilité de ce site.', 'La chartre d''accessibilité de Tela Botanica.', '', '', 'Jean-Pascal MILCENT', '', 'Tela Botanica', '2004-05-03 19:21:29', '2004-05-03 19:21:29', '2004-05-03 19:21:29', '2004-05-03 19:21:29', '2004-05-03 19:21:29', '0000-00-00 00:00:00', '2004-00-00 00:00:00', '', 'menu commun', '', '', NULL, '', NULL, '', 0);
INSERT INTO `gen_menu` VALUES (3, 'fr', 1, 2, '', '', 3, 'gestion', 'Administration des menus', 'G', 'index,follow', '', '', '', '', 'Gestion des menus des différents sites', '', '', 'Jean-Pascal MILCENT', '', 'Tela Botanica', '2004-05-06 14:52:48', '2004-05-06 14:52:48', '2004-05-06 14:52:48', '2004-05-06 14:52:48', '2004-05-06 14:52:48', '0000-00-00 00:00:00', '2004-00-00 00:00:00', '', 'menu', '', '', 0, '', 0, '', 0);
 
-- --------------------------------------------------------
 
--
-- Structure de la table `gen_menu_cache`
--
 
CREATE TABLE `gen_menu_cache` (
`gmcac_id_md5_url` varchar(32) NOT NULL default '',
`gmcac_ce_site` int(11) unsigned NOT NULL default '0',
`gmcac_corps` longblob NOT NULL,
`gmcac_date_heure` datetime NOT NULL default '0000-00-00 00:00:00',
`gmcac_taille` int(11) NOT NULL default '0',
`gmcac_gz_taille` int(11) NOT NULL default '0',
PRIMARY KEY (`gmcac_id_md5_url`)
) TYPE=MyISAM;
 
--
-- Contenu de la table `gen_menu_cache`
--
 
 
-- --------------------------------------------------------
 
--
-- Structure de la table `gen_menu_categorie`
--
 
CREATE TABLE `gen_menu_categorie` (
`gmca_id_categorie` int(10) unsigned NOT NULL auto_increment,
`gmca_intitule_categorie` varchar(255) default NULL,
PRIMARY KEY (`gmca_id_categorie`)
) TYPE=MyISAM AUTO_INCREMENT=3 ;
 
--
-- Contenu de la table `gen_menu_categorie`
--
 
INSERT INTO `gen_menu_categorie` VALUES (1, 'Relation entre menus');
INSERT INTO `gen_menu_categorie` VALUES (2, 'Type de menu');
 
-- --------------------------------------------------------
 
--
-- Structure de la table `gen_menu_categorie_valeur`
--
 
CREATE TABLE `gen_menu_categorie_valeur` (
`gmcv_id_valeur` int(11) unsigned NOT NULL auto_increment,
`gmcv_id_categorie` int(10) unsigned NOT NULL default '0',
`gmcv_intitule_valeur` varchar(255) default NULL,
PRIMARY KEY (`gmcv_id_valeur`),
KEY `gen_menu_categorie_valeur_FKIndex1` (`gmcv_id_categorie`)
) TYPE=MyISAM AUTO_INCREMENT=105 ;
 
--
-- Contenu de la table `gen_menu_categorie_valeur`
--
 
INSERT INTO `gen_menu_categorie_valeur` VALUES (1, 1, 'avoir père');
INSERT INTO `gen_menu_categorie_valeur` VALUES (2, 1, 'avoir traduction');
INSERT INTO `gen_menu_categorie_valeur` VALUES (101, 2, 'défaut');
INSERT INTO `gen_menu_categorie_valeur` VALUES (102, 2, 'commun');
INSERT INTO `gen_menu_categorie_valeur` VALUES (103, 2, 'traduction');
INSERT INTO `gen_menu_categorie_valeur` VALUES (104, 2, 'copyright');
INSERT INTO `gen_menu_categorie_valeur` VALUES (3, 1, 'avoir suivant logique');
INSERT INTO `gen_menu_categorie_valeur` VALUES (4, 1, 'avoir précédent logique');
INSERT INTO `gen_menu_categorie_valeur` VALUES (100, 2, 'menu classique');
 
-- --------------------------------------------------------
 
--
-- Structure de la table `gen_menu_contenu`
--
 
CREATE TABLE `gen_menu_contenu` (
`gmc_id_contenu` int(11) unsigned NOT NULL default '0',
`gmc_ce_admin` int(11) unsigned NOT NULL default '0',
`gmc_ce_menu` int(11) unsigned NOT NULL default '0',
`gmc_ce_type_contenu` int(11) unsigned default NULL,
`gmc_contenu` mediumtext,
`gmc_ce_type_modification` int(11) unsigned default NULL,
`gmc_resume_modification` varchar(255) default NULL,
`gmc_date_modification` datetime default NULL,
`gmc_bool_dernier` tinyint(1) unsigned default '1',
PRIMARY KEY (`gmc_id_contenu`),
KEY `gen_menu_contenu_FKIndex2` (`gmc_ce_menu`),
KEY `idx_fk_gp_ce_admin` (`gmc_ce_admin`)
) TYPE=MyISAM;
 
--
-- Contenu de la table `gen_menu_contenu`
--
 
INSERT INTO `gen_menu_contenu` VALUES (1, 1, 4, 1, '<h1>Aide</h1>\r\n<p>Ici figurera l''aide de Papyrus!</p>', 2, 'Origine', '2004-10-14 17:57:29', 1);
INSERT INTO `gen_menu_contenu` VALUES (2, 1, 5, 1, '<h1>Accessibilité</h1>\r\n<p>Ici figurera la charte d''accessibilité de Papyrus!</p>', 2, 'Origine', '2004-10-14 17:58:09', 1);
 
-- --------------------------------------------------------
 
--
-- Structure de la table `gen_menu_relation`
--
 
CREATE TABLE `gen_menu_relation` (
`gmr_id_menu_01` int(11) unsigned NOT NULL default '0',
`gmr_id_menu_02` int(11) unsigned NOT NULL default '0',
`gmr_id_valeur` int(11) unsigned NOT NULL default '0',
`gmr_ordre` int(11) unsigned default NULL,
PRIMARY KEY (`gmr_id_menu_01`,`gmr_id_menu_02`,`gmr_id_valeur`),
KEY `gen_menu_relation_FKIndex2` (`gmr_id_menu_01`),
KEY `gen_menu_relation_FKIndex3` (`gmr_id_valeur`)
) TYPE=MyISAM;
 
--
-- Contenu de la table `gen_menu_relation`
--
 
INSERT INTO `gen_menu_relation` VALUES (1, 0, 1, 1);
INSERT INTO `gen_menu_relation` VALUES (2, 1, 1, 1);
INSERT INTO `gen_menu_relation` VALUES (3, 1, 1, 2);
INSERT INTO `gen_menu_relation` VALUES (1, 1, 101, NULL);
INSERT INTO `gen_menu_relation` VALUES (5, 5, 102, 1);
INSERT INTO `gen_menu_relation` VALUES (6, 0, 1, 2);
INSERT INTO `gen_menu_relation` VALUES (4, 4, 100, 4);
INSERT INTO `gen_menu_relation` VALUES (4, 0, 1, 5);
INSERT INTO `gen_menu_relation` VALUES (1, 1, 100, 2);
INSERT INTO `gen_menu_relation` VALUES (2, 2, 100, 2);
INSERT INTO `gen_menu_relation` VALUES (3, 3, 100, 2);
INSERT INTO `gen_menu_relation` VALUES (5, 0, 1, 1);
INSERT INTO `gen_menu_relation` VALUES (6, 6, 102, 2);
 
-- --------------------------------------------------------
 
--
-- Structure de la table `gen_menu_url_alternative`
--
 
CREATE TABLE `gen_menu_url_alternative` (
`gmua_id_url` int(11) unsigned NOT NULL default '0',
`gmua_ce_menu` int(11) unsigned NOT NULL default '0',
`gmua_url` varchar(255) NOT NULL default '',
PRIMARY KEY (`gmua_id_url`),
KEY `gen_menu_url_alternative_FKIndex1` (`gmua_ce_menu`)
) TYPE=MyISAM;
 
--
-- Contenu de la table `gen_menu_url_alternative`
--
 
 
-- --------------------------------------------------------
 
--
-- Structure de la table `gen_site`
--
 
CREATE TABLE `gen_site` (
`gs_id_site` int(11) unsigned NOT NULL default '0',
`gs_ce_admin` int(11) unsigned NOT NULL default '0',
`gs_ce_i18n` varchar(8) NOT NULL default '',
`gs_ce_auth` int(11) unsigned NOT NULL default '0',
`gs_code_num` int(11) NOT NULL default '0',
`gs_code_alpha` varchar(20) NOT NULL default '',
`gs_nom` varchar(100) NOT NULL default '',
`gs_raccourci_clavier` char(1) default NULL,
`gs_titre` varchar(255) default NULL,
`gs_mots_cles` text,
`gs_description` text,
`gs_auteur` varchar(255) default NULL,
`gs_date_creation` datetime default NULL,
`gs_fichier_squelette` varchar(255) NOT NULL default '',
PRIMARY KEY (`gs_id_site`),
KEY `idx_fk_gsi_ce_auth` (`gs_ce_auth`),
KEY `gen_site_FKIndex3` (`gs_ce_i18n`),
KEY `gen_site_FKIndex4` (`gs_ce_admin`)
) TYPE=MyISAM;
 
--
-- Contenu de la table `gen_site`
--
 
INSERT INTO `gen_site` VALUES (1, 2, 'fr', 1, 1, 'admin', 'Administration', '', 'Administration de Génésia.', 'Administration, Génésia.', 'Site de test de l''administration de Génésia.', 'Tela Botanica', '2004-07-06 19:06:16', 'admin.html');
INSERT INTO `gen_site` VALUES (2, 1, 'en', 1, 1, 'admin', 'Administration', '', 'Administration of Génésia.', 'Administration, Génésia.', 'Web administration interface of Génésia.', 'Tela Botanica', '2004-04-23 14:18:21', '../sites/admin/en/squelettes/admin.html');
 
-- --------------------------------------------------------
 
--
-- Structure de la table `gen_site_auth`
--
 
CREATE TABLE `gen_site_auth` (
`gsa_id_auth` int(10) unsigned NOT NULL default '0',
`gsa_nom` varchar(100) NOT NULL default '',
`gsa_ce_auth_bdd` int(11) unsigned NOT NULL default '0',
`gsa_ce_auth_ldap` int(10) unsigned NOT NULL default '0',
`gsa_ce_type_auth` int(11) unsigned default NULL,
PRIMARY KEY (`gsa_id_auth`),
KEY `idx_fk_gsa_ce_auth_ldap` (`gsa_ce_auth_ldap`),
KEY `idx_fk_gsa_ce_auth_bdd` (`gsa_ce_auth_bdd`)
) TYPE=MyISAM;
 
--
-- Contenu de la table `gen_site_auth`
--
 
INSERT INTO `gen_site_auth` VALUES (0, 'Aucune identification', 0, 0, 0);
INSERT INTO `gen_site_auth` VALUES (1, 'Administrateur de Papyrus', 1, 0, 1);
 
-- --------------------------------------------------------
 
--
-- Structure de la table `gen_site_auth_bdd`
--
 
CREATE TABLE `gen_site_auth_bdd` (
`gsab_id_auth_bdd` int(11) unsigned NOT NULL default '0',
`gsab_dsn` varchar(255) default NULL,
`gsab_nom_table` varchar(100) default NULL,
`gsab_nom_champ_login` varchar(100) default NULL,
`gsab_nom_champ_mdp` varchar(100) default NULL,
`gsab_cryptage_mdp` varchar(100) default NULL,
PRIMARY KEY (`gsab_id_auth_bdd`)
) TYPE=MyISAM;
 
--
-- Contenu de la table `gen_site_auth_bdd`
--
 
INSERT INTO `gen_site_auth_bdd` VALUES (0, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `gen_site_auth_bdd` VALUES (1, 'mysql://root:0000@127.0.0.1/tela_prod_genesia', 'gen_annuaire', 'ga_mail', 'ga_mot_de_passe', 'md5');
 
-- --------------------------------------------------------
 
--
-- Structure de la table `gen_site_auth_ldap`
--
 
CREATE TABLE `gen_site_auth_ldap` (
`gsal_id_auth_ldap` int(10) unsigned NOT NULL default '0',
`gsal_serveur` varchar(100) default NULL,
`gsal_port` int(11) unsigned default NULL,
`gsal_base_dn` varchar(255) default NULL,
`gsal_uid` varchar(100) default NULL,
PRIMARY KEY (`gsal_id_auth_ldap`)
) TYPE=MyISAM;
 
--
-- Contenu de la table `gen_site_auth_ldap`
--
 
INSERT INTO `gen_site_auth_ldap` VALUES (0, NULL, NULL, NULL, NULL);
 
-- --------------------------------------------------------
 
--
-- Structure de la table `gen_site_categorie`
--
 
CREATE TABLE `gen_site_categorie` (
`gsc_id_categorie` int(10) unsigned NOT NULL auto_increment,
`gsc_intitule_categorie` varchar(255) default NULL,
PRIMARY KEY (`gsc_id_categorie`)
) TYPE=MyISAM AUTO_INCREMENT=3 ;
 
--
-- Contenu de la table `gen_site_categorie`
--
 
INSERT INTO `gen_site_categorie` VALUES (1, 'Relation entre sites');
INSERT INTO `gen_site_categorie` VALUES (2, 'Type de site');
 
-- --------------------------------------------------------
 
--
-- Structure de la table `gen_site_categorie_valeur`
--
 
CREATE TABLE `gen_site_categorie_valeur` (
`gscv_id_valeur` int(11) unsigned NOT NULL auto_increment,
`gsc_id_categorie` int(10) unsigned NOT NULL default '0',
`gscv_intitule_valeur` varchar(255) default NULL,
PRIMARY KEY (`gscv_id_valeur`)
) TYPE=MyISAM AUTO_INCREMENT=103 ;
 
--
-- Contenu de la table `gen_site_categorie_valeur`
--
 
INSERT INTO `gen_site_categorie_valeur` VALUES (1, 1, 'avoir traduction');
INSERT INTO `gen_site_categorie_valeur` VALUES (101, 2, 'défaut');
INSERT INTO `gen_site_categorie_valeur` VALUES (2, 1, 'avoir suivant');
INSERT INTO `gen_site_categorie_valeur` VALUES (102, 2, 'principal');
 
-- --------------------------------------------------------
 
--
-- Structure de la table `gen_site_relation`
--
 
CREATE TABLE `gen_site_relation` (
`gsr_id_site_01` int(11) unsigned NOT NULL default '0',
`gsr_id_site_02` int(11) unsigned NOT NULL default '0',
`gsr_id_valeur` int(11) unsigned NOT NULL default '0',
`gsr_ordre` int(11) unsigned default NULL,
PRIMARY KEY (`gsr_id_site_01`,`gsr_id_site_02`,`gsr_id_valeur`)
) TYPE=MyISAM;
 
--
-- Contenu de la table `gen_site_relation`
--
 
INSERT INTO `gen_site_relation` VALUES (1, 1, 101, NULL);
INSERT INTO `gen_site_relation` VALUES (1, 1, 102, 1);
/branches/v1.0-menes/papyrus/documentation/bdd_papyrus.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.0-menes/papyrus/documentation/bdd_papyrus.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.0-menes/papyrus/pap_initialise_auth.inc.php
New file
0,0 → 1,278
<?php
//vim: set expandtab tabstop=4 shiftwidth=4:
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2003 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | |
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library 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 |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// | |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: pap_initialise_auth.inc.php,v 1.22 2006-11-20 17:29:42 jp_milcent Exp $
/**
* Initialisation de l'authentification.
*
* Suite à la recherche des informations depuis la base de données nous initialisons
* l'authentification des utilisateurs si le site l'utilise.
* La page contient le code initialisant l'objet PEAR créé par Net_URL contenant l'url
* courante demandée par l'utilisateur.
* Nous initialisons aussi l'identification de l'utilisateur et le démarage de la session.
*
*@package Papyrus
//Auteur original :
*@author Alexandre GRANIER <alex@tela-botanica.org>
//Autres auteurs :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.22 $ $Date: 2006-11-20 17:29:42 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTÊTE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
/** <br> Inclusion de l'authentification de PEAR.*/
include_once PAP_CHEMIN_API_PEAR.'Auth/Auth.php';
 
/** Inclusion de la bibliothèque de fonctions d'identification.
* Contient entre autre la fonction founissant le formulaire d'identification pour Auth de Pear.
* Cette inclusion n'a lieu que si le site utilise l'identification.
*/
include_once GEN_CHEMIN_PAP.'bibliotheque/fonctions/pap_identification.fonct.php' ;
include_once GEN_CHEMIN_PAP.'bibliotheque/fonctions/pap_site.fonct.php' ;
 
// +------------------------------------------------------------------------------------------------------+
// | CORPS du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
// +------------------------------------------------------------------------------------------------------+
// Gestion de l'identification des utilisateurs et des sessions
 
// +------------------------------------------------------------------------------------------------------+
// Récupération des informations d'identification pour le site courant
 
// Récupération des informations sur le site
$requete_auth = 'SELECT gen_site_auth.*, gs_id_site '.
'FROM gen_site_auth, gen_site '.
'WHERE gs_ce_auth <> 0 '.
'AND gs_ce_auth = gsa_id_auth';
 
$resultat_auth = $db->query($requete_auth);
(DB::isError($resultat_auth))
? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_auth->getMessage(), $requete_auth))
: '';
 
while ($ligne_auth = $resultat_auth->fetchRow(DB_FETCHMODE_OBJECT)) {
// Ajout des valeurs communes aux différents type d'auth
$GLOBALS['_PAPYRUS_']['auth'][$ligne_auth->gsa_id_auth]['gsa_nom'] = $ligne_auth->gsa_nom;
$GLOBALS['_PAPYRUS_']['auth'][$ligne_auth->gsa_id_auth]['gsa_abreviation'] = $ligne_auth->gsa_abreviation;
$GLOBALS['_PAPYRUS_']['auth'][$ligne_auth->gsa_id_auth]['gsa_ce_type_auth'] = $ligne_auth->gsa_ce_type_auth;
if ($ligne_auth->gsa_id_auth == $GLOBALS['_GEN_commun']['info_site']->gs_ce_auth) {
$GLOBALS['_GEN_commun']['info_auth'] = $ligne_auth;
}
if ($ligne_auth->gsa_ce_auth_bdd != 0) {
//Identification via une base de donnée :
$requete_auth_bdd = 'SELECT * '.
'FROM gen_site_auth_bdd '.
'WHERE gsab_id_auth_bdd = '.$ligne_auth->gsa_ce_auth_bdd;
$resultat_auth_bdd = $db->query($requete_auth_bdd);
(DB::isError($resultat_auth_bdd))
? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_auth_bdd->getMessage(), $requete_auth_bdd))
: '';
$tab_auth_bdd = $resultat_auth_bdd->fetchRow(DB_FETCHMODE_OBJECT) ;
if ($ligne_auth->gsa_id_auth == $GLOBALS['_GEN_commun']['info_site']->gs_ce_auth) {
$GLOBALS['_GEN_commun']['info_auth_bdd'] = $tab_auth_bdd ;
// Gestion des arguments de l'authentification
if (isset($GLOBALS['_GEN_commun']['info_auth_bdd']->gsab_parametres)) {
$arguments = explode(' ', $GLOBALS['_GEN_commun']['info_auth_bdd']->gsab_parametres);
for ($i = 0; $i < count($arguments); $i++) {
$attr = explode('=', $arguments[$i]);
if ($attr[0] != '') {
$GLOBALS['_GEN_commun']['info_auth_bdd']->$attr[0] = (isset($attr[1]) ? $attr[1] : '');
}
}
}
}
$GLOBALS['_PAPYRUS_']['auth'][$ligne_auth->gsa_id_auth] = array_merge((array)$GLOBALS['_PAPYRUS_']['auth'][$ligne_auth->gsa_id_auth], (array) $tab_auth_bdd);
$resultat_auth_bdd->free();
} else if ($ligne_auth->gsa_ce_auth_ldap != 0) {
//Identification via LDAP :
$requete_auth_ldap = 'SELECT * '.
'FROM gen_site_auth_ldap '.
'WHERE gsal_id_auth_ldap = '.$ligne_auth->gsa_ce_auth_ldap;
$resultat_auth_ldap = $db->query($requete_auth_ldap);
(DB::isError($resultat_auth_ldap))
? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_auth_ldap->getMessage(), $requete_auth_ldap))
: '';
$tab_auth_ldap = $resultat_auth_ldap->fetchRow(DB_FETCHMODE_OBJECT);
if ($ligne_auth->gsa_id_auth == $_GEN_commun['info_site']->gs_ce_auth) {
$GLOBALS['_GEN_commun']['info_auth_ldap'] = $tab_auth_ldap;
}
$GLOBALS['_PAPYRUS_']['auth'][$ligne_auth->gsa_id_auth] = array_merge((array) $GLOBALS['_PAPYRUS_']['auth'][$ligne_auth->gsa_id_auth], (array) $tab_auth_ldap);
$resultat_auth_ldap->free();
} else {
die('ERREUR Papyrus : impossible de trouver les information authentification. <br />'.
'Identifiant auth : '.$ligne_auth->gs_ce_auth.'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier : '. __FILE__ );
}
// On teste le type d'authentification
$tab_type_site = GEN_retournerTableauTypeSiteExterne($db);
$types_site = '';
foreach ($tab_type_site as $val) {
$types_site .= $val['id'].', ';
}
$types_site = substr($types_site, 0, -2);
$requete = 'SELECT gsr_id_valeur '.
'FROM gen_site_relation '.
'WHERE gsr_id_site_01 = '.$ligne_auth->gs_id_site.' '.
'AND gsr_id_site_01 = gsr_id_site_02 '.
'AND gsr_id_valeur IN ('.$types_site.')';
$type_site_externe = $db->getOne($requete);
(DB::isError($type_site_externe))
? die(BOG_afficherErreurSql(__FILE__, __LINE__, $type_site_externe->getMessage(), $requete))
: '';
// Type du site de l'authentification
if ($type_site_externe != '') {
$GLOBALS['_PAPYRUS_']['auth'][$ligne_auth->gsa_id_auth]['type_site_externe'] = $type_site_externe;
}
}
$resultat_auth->free();
 
// Nour regardons à quel type d'identification nous avons à faire:
$auth_courante = $GLOBALS['_PAPYRUS_']['auth'][$GLOBALS['_GEN_commun']['info_site']->gs_ce_auth] ;
if ($auth_courante['gsa_ce_type_auth'] == 1) {
// Authentification via une base de données
$GLOBALS['_PAPYRUS_']['auth']['param_bdd'] = array ('dsn' => $auth_courante['gsab_dsn'],
'table' => $auth_courante['gsab_nom_table'],
'usernamecol' => $auth_courante['gsab_nom_champ_login'],
'passwordcol' => $auth_courante['gsab_nom_champ_mdp'],
'cryptType' => $auth_courante['gsab_cryptage_mdp'],
'db_fields' => '*');
// L'authentification courrante
$GLOBALS['_GEN_commun']['pear_auth'] = new Auth('DB', $GLOBALS['_PAPYRUS_']['auth']['param_bdd'], 'GEN_afficherInfoIdentification', 1);
} else if ($auth_courante['gsa_ce_type_auth'] == 2) {
// Authentification via LDAP
$GLOBALS['_PAPYRUS_']['auth']['param_ldap'] = array ( 'host' => $auth_courante['gsal_serveur'],
'port' => $auth_courante['gsal_port'],
'basedn' => $auth_courante['gsal_base_dn'],
'userattr' => $auth_courante['gsal_uid']);
$GLOBALS['_GEN_commun']['pear_auth'] = new Auth('LDAP', $GLOBALS['_PAPYRUS_']['auth']['param_ldap'], 'GEN_afficherInfoIdentification', 1);
} else {
die('ERREUR Papyrus : type identification introuvable. <br />'.
'Type identification : '.$auth_courante['gsa_ce_type_auth'].'<br />'.
'Ligne n° : '. __LINE__ . '<br />'.
'Fichier : '. __FILE__ . '<br />');
}
 
// +------------------------------------------------------------------------------------------------------+
// Définition du nom de la session
$GLOBALS['_GEN_commun']['pear_auth']->setSessionname('gen_'.$GLOBALS['_GEN_commun']['info_auth']->gsa_abreviation);
// Démarage de la session
$GLOBALS['_GEN_commun']['pear_auth']->start();
 
/* +--Fin du code ---------------------------------------------------------------------------------------+
* $Log: not supported by cvs2svn $
* Revision 1.21 2006/04/28 12:41:49 florian
* corrections erreurs chemin
*
* Revision 1.20 2006/03/15 09:30:50 florian
* suppression des echos, qui entrainaient des problemes d'affichages
*
* Revision 1.19 2005/09/20 17:01:22 ddelon
* php5 et bugs divers
*
* Revision 1.18 2005/07/07 09:15:36 alexandre_tb
* mise en place de la co-authentification Wikini - papyrus.
* - ajout d'une requete pour récupérer le mot de passe
*
* Revision 1.17 2005/04/27 15:06:21 alex
* ajout de l'authentification wiki.
*
* Revision 1.16 2005/03/25 13:08:20 jpm
* Déplacement de la gestion des arguments de l'authentification.
*
* Revision 1.15 2005/03/24 15:04:26 alex
* ajout d'un appel à session_set_cookie_params pour allonger la durée de la session
*
* Revision 1.14 2005/03/15 14:20:01 jpm
* Gestion des arguments de l'identification courante.
*
* Revision 1.13 2005/02/22 18:27:24 jpm
* Changement de nom de variables.
*
* Revision 1.12 2004/12/15 15:24:45 alex
* suppression d'un notice
*
* Revision 1.11 2004/12/13 18:06:52 alex
* authentification spip presque parfaite
*
* Revision 1.10 2004/12/07 19:13:51 alex
* authentification spip
*
* Revision 1.7 2004/12/07 10:26:27 jpm
* Correction for en foreach.
*
* Revision 1.6 2004/12/06 12:42:02 alex
* en cours
*
* Revision 1.5 2004/12/06 12:12:28 jpm
* Début de gestion des auth multiples.
*
* Revision 1.4 2004/10/25 16:28:47 jpm
* Ajout de nouvelles balises Papyrus, ajout vérification mise à jour de Papyrus, meilleure gestion des sessions...
*
* Revision 1.3 2004/10/15 18:29:19 jpm
* Modif pour gérer l'appli installateur de Papyrus.
*
* Revision 1.2 2004/06/30 07:23:36 jpm
* Ajout d'un commentaire.
*
* Revision 1.1 2004/06/16 08:12:01 jpm
* Changement de nom de Génésia en Papyrus.
* Changement de l'arborescence.
*
* Revision 1.6 2004/05/01 11:40:21 jpm
* Suppression de code intégré dans le fichier de l'applette Identification.
*
* Revision 1.5 2004/04/28 12:04:31 jpm
* Changement du modèle de la base de données.
*
* Revision 1.4 2004/04/22 08:29:11 jpm
* Transformation de $GS_GLOBAL en $_GEN_commun.
*
* Revision 1.3 2004/04/09 16:20:33 jpm
* Gestion de l'authentification uniquement.
* Gestion des tables i18n.
*
* Revision 1.2 2004/04/02 16:29:58 jpm
* Ajout de la gestion de la déconnexion et reconnexion.
*
* Revision 1.1 2004/04/02 08:54:58 jpm
* Création du fichier qui contient l'initialisation des objets Pear, hormis la base de données.
*
* +--Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/pap_rendu.inc.php
New file
0,0 → 1,737
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// Copyright (C) 1999-2004 Tela Botanica (accueil@tela-botanica.org)
//
// Ce logiciel est un programme informatique servant à gérer du contenu et des
// applications web.
// Ce logiciel est régi par la licence CeCILL soumise au droit français et
// respectant les principes de diffusion des logiciels libres. Vous pouvez
// utiliser, modifier et/ou redistribuer ce programme sous les conditions
// de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA
// sur le site "http://www.cecill.info".
 
// En contrepartie de l'accessibilité au code source et des droits de copie,
// de modification et de redistribution accordés par cette licence, il n'est
// offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons,
// seule une responsabilité restreinte pèse sur l'auteur du programme, le
// titulaire des droits patrimoniaux et les concédants successifs.
 
// A cet égard l'attention de l'utilisateur est attirée sur les risques
// associés au chargement, à l'utilisation, à la modification et/ou au
// développement et à la reproduction du logiciel par l'utilisateur étant
// donné sa spécificité de logiciel libre, qui peut le rendre complexe à
// manipuler et qui le réserve donc à des développeurs et des professionnels
// avertis possédant des connaissances informatiques approfondies. Les
// utilisateurs sont donc invités à charger et tester l'adéquation du
// logiciel à leurs besoins dans des conditions permettant d'assurer la
// sécurité de leurs systèmes et ou de leurs données et, plus généralement,
// à l'utiliser et l'exploiter dans les mêmes conditions de sécurité.
 
// Le fait que vous puissiez accéder à cet en-tête signifie que vous avez
// pris connaissance de la licence CeCILL, et que vous en avez accepté les
// termes.
// ----
// CVS : $Id: pap_rendu.inc.php,v 1.29.2.2 2007-04-19 15:18:16 florian Exp $
/**
* Rendu : programme traitant l'url demandée et retournant la page compressé au navigateur.
*
* Ce programme contient la partie collectant les informations sur la page demandée par le navigateur client.
* Elle vérifie que la page ne soit pas déjà présente en cache et la renvoie si elle est disponible.
* Elle recherche ensuite l'application liée à la page demandée. Elle exécute cette application et récupère le
* contenu XHTML à afficher, le stocke en cache, le compresse et le renvoi au navigateur client.
*
*@package Papyrus
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author Alexandre GRANIER <alexandre@tela-botanica.org>
*@author Laurent COUDOUNEAU <laurent.coudouneau@ema.fr>
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.29.2.2 $ $Date: 2007-04-19 15:18:16 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// TODO : revoir les initialisation en l'absence de menu par defaut
 
// +------------------------------------------------------------------------------------------------------+
// | ENTÊTE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
/** Inclusion de la bibliothèque de fonctions servant à l'insertion de meta informations pour une page donnée.*/
include_once GEN_CHEMIN_BIBLIO.'pap_meta.fonct.php';
 
/** Inclusion de la bibliothèque de fonctions servant à l'insertion de styles pour une page donnée.*/
include_once GEN_CHEMIN_BIBLIO.'pap_style.fonct.php';
 
/** Inclusion de la bibliothèque de fonctions servant à l'insertion de scripts pour une page donnée.*/
include_once GEN_CHEMIN_BIBLIO.'pap_script.fonct.php';
 
/** Inclusion de la bibliothèque PEAR Text_Wiki.*/
include_once PAP_CHEMIN_API_PEAR.'Text/Wiki.php';
 
/** Inclusion de la bibliothèque Text_Wiki_Papyrus.*/
include_once GEN_CHEMIN_API.'text/wiki_papyrus/Papyrus.class.php';
 
// +------------------------------------------------------------------------------------------------------+
// | CORPS du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
// Recherche du squelette de la page demandée.
 
 
// Ouverture du squelette
if (empty($GLOBALS['_GEN_commun']['info_menu']->gm_fichier_squelette)) {
if (isset($GLOBALS['_GEN_commun']['traduction_info_site'])) {
$GLOBALS['_PAPYRUS_']['general']['chemin_squelette'] = $GLOBALS['_GEN_commun']['traduction_info_site']->gs_fichier_squelette;
} else {
$GLOBALS['_PAPYRUS_']['general']['chemin_squelette'] = $GLOBALS['_GEN_commun']['info_site']->gs_fichier_squelette;
}
} else {
if (isset($GLOBALS['_GEN_commun']['traduction_info_menu'])) {
$GLOBALS['_PAPYRUS_']['general']['chemin_squelette'] = $GLOBALS['_GEN_commun']['traduction_info_menu']->gm_fichier_squelette;
} else {
$GLOBALS['_PAPYRUS_']['general']['chemin_squelette'] = $GLOBALS['_GEN_commun']['info_menu']->gm_fichier_squelette;
}
}
 
// Si l'information concernant le chemin est réellement un chemin
if (! file_exists($GLOBALS['_PAPYRUS_']['general']['chemin_squelette'])) {
//Si ce n'est qu'un nom de fichier squelette
$GLOBALS['_PAPYRUS_']['general']['chemin_test'] = GEN_CHEMIN_SITES.
$GLOBALS['_GEN_commun']['info_site']->gs_code_alpha.'/'.
$GLOBALS['_GEN_commun']['i18n'].'/'.GEN_DOSSIER_SQUELETTE.'/'.$GLOBALS['_PAPYRUS_']['general']['chemin_squelette'];
if (! file_exists($GLOBALS['_PAPYRUS_']['general']['chemin_test'])) {
die('ERREUR Papyrus : Impossible de trouver de fichier de squelette. <br />'.
'Chemin fichier squelette : '.$GLOBALS['_PAPYRUS_']['general']['chemin_squelette'].' <br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier : '. __FILE__ );
} else {
$GLOBALS['_PAPYRUS_']['general']['chemin_squelette'] = $GLOBALS['_PAPYRUS_']['general']['chemin_test'];
}
}
 
// +------------------------------------------------------------------------------------------------------+
// Récupération du contenu du fichier de squelette de la page demandée.
/*
// Lecture du fichier de squelette XHTML en PHP 4.1.2
$tab_fichier_squelette = file($chemin_squelette);
$contenu_squelette = '';
for ($i = 0; $i < count($tab_fichier_squelette); $i++) {
$contenu_squelette .= $tab_fichier_squelette[$i];
}
*/
// Lecture du fichier de squelette XHTML en PHP 4.3
$GLOBALS['_PAPYRUS_']['general']['contenu_squelette'] = file_get_contents($GLOBALS['_PAPYRUS_']['general']['chemin_squelette']);
 
 
if (isset($GLOBALS['_GEN_commun']['traduction_info_site'])) {
$type_site='traduction_info_site';
}
else {
$type_site='info_site';
}
 
if (isset($GLOBALS['_GEN_commun']['traduction_info_menu'])) {
$type_menu='traduction_info_menu';
}
else {
$type_menu='info_menu';
}
 
 
 
// +------------------------------------------------------------------------------------------------------+
// Recherche des informations pour la complétion de l'entête du squelette de la page demandée.
 
if (isset($GLOBALS['_GEN_commun'][$type_menu])) {
// Construction du titre.
if (! empty($GLOBALS['_GEN_commun'][$type_menu]->gm_titre)) {
$GLOBALS['_PAPYRUS_']['page']['titre'] = htmlentities($GLOBALS['_GEN_commun'][$type_menu]->gm_titre);
} else if (! empty($GLOBALS['_GEN_commun'][$type_menu]->gm_titre_alternatif)) {
$GLOBALS['_PAPYRUS_']['page']['titre'] = htmlentities($GLOBALS['_GEN_commun'][$type_menu]->gm_titre_alternatif);
} else {
$GLOBALS['_PAPYRUS_']['page']['titre'] = htmlentities($GLOBALS['_GEN_commun'][$type_menu]->gm_nom);
}
 
}
else {
$GLOBALS['_PAPYRUS_']['page']['titre']='';
}
 
 
$GLOBALS['_PAPYRUS_']['rendu']['TITRE_PAGE'] = $GLOBALS['_PAPYRUS_']['page']['titre'];
 
// Construction des infos sur le site
$GLOBALS['_PAPYRUS_']['page']['nom_site'] = htmlentities($GLOBALS['_GEN_commun'][$type_site]->gs_nom);
$GLOBALS['_PAPYRUS_']['rendu']['SITE_NOM'] = $GLOBALS['_PAPYRUS_']['page']['nom_site'];
$GLOBALS['_PAPYRUS_']['page']['langue_site'] = htmlentities($GLOBALS['_GEN_commun']['i18n']);
$GLOBALS['_PAPYRUS_']['rendu']['SITE_LANGUE'] = $GLOBALS['_PAPYRUS_']['page']['langue_site'];
$GLOBALS['_PAPYRUS_']['page']['code_alpha_site'] = htmlentities($GLOBALS['_GEN_commun'][$type_site]->gs_code_alpha);
$GLOBALS['_PAPYRUS_']['rendu']['SITE_CODE_ALPHA'] = $GLOBALS['_PAPYRUS_']['page']['code_alpha_site'];
 
//Construction des infos sur le contexte d'affichage de la page
$une_url =new Net_URL();
$une_url->addQueryString("site",$GLOBALS['_GEN_commun']['url_site']);
$une_url->removeQueryString("langue");
$GLOBALS['_PAPYRUS_']['rendu']['PAGE_URL'] = $une_url->getUrl();
 
 
// Construction des Meta "http-equiv".
$GLOBALS['_GEN_commun']['meta_http_equiv'] = array();
$GLOBALS['_PAPYRUS_']['page']['jeu_de_caracteres'] = htmlentities(strtoupper($GLOBALS['_GEN_commun']['info_i18n']->gi_jeu_de_caracteres));
$GLOBALS['_PAPYRUS_']['rendu']['SITE_JEU_DE_CARACTERES'] = $GLOBALS['_PAPYRUS_']['page']['jeu_de_caracteres'];
$GLOBALS['_PAPYRUS_']['page']['langue'] = htmlentities($GLOBALS['_GEN_commun']['info_i18n_langue']->gil_id_langue);
$GLOBALS['_PAPYRUS_']['rendu']['SITE_LANGUE'] = $GLOBALS['_PAPYRUS_']['page']['langue'];
GEN_stockerMetaHttpEquiv('Content-Type', 'text/html; charset='.$GLOBALS['_PAPYRUS_']['page']['jeu_de_caracteres']);
GEN_stockerMetaHttpEquiv('Content-style-type', 'text/css');
GEN_stockerMetaHttpEquiv('Content-script-type', 'text/javascript');
GEN_stockerMetaHttpEquiv('Content-language', $GLOBALS['_PAPYRUS_']['page']['langue']);
 
// Construction des Meta "name".
$GLOBALS['_GEN_commun']['meta_name'] = array();
if (isset($GLOBALS['_GEN_commun'][$type_menu])) {
$GLOBALS['_PAPYRUS_']['page']['robot'] = htmlentities($GLOBALS['_GEN_commun'][$type_menu]->gm_robot);
$GLOBALS['_PAPYRUS_']['page']['auteur'] = htmlentities($GLOBALS['_GEN_commun'][$type_menu]->gm_auteur);
}
else {
$GLOBALS['_PAPYRUS_']['page']['robot'] = '';
$GLOBALS['_PAPYRUS_']['page']['auteur'] = '';
}
if (empty($GLOBALS['_PAPYRUS_']['page']['auteur'])) {
$GLOBALS['_PAPYRUS_']['page']['auteur'] = htmlentities($GLOBALS['_GEN_commun'][$type_site]->gs_auteur);
}
if (isset($GLOBALS['_GEN_commun'][$type_menu])) {
$GLOBALS['_PAPYRUS_']['page']['mots_cles'] = htmlentities($GLOBALS['_GEN_commun'][$type_menu]->gm_mots_cles);
}
if (empty($GLOBALS['_PAPYRUS_']['page']['mots_cles'])) {
$GLOBALS['_PAPYRUS_']['page']['mots_cles'] = htmlentities($GLOBALS['_GEN_commun'][$type_site]->gs_mots_cles);
}
if (isset($GLOBALS['_GEN_commun'][$type_menu])) {
$GLOBALS['_PAPYRUS_']['page']['description_libre'] = htmlentities($GLOBALS['_GEN_commun'][$type_menu]->gm_description_libre);
}
if (empty($GLOBALS['_PAPYRUS_']['page']['description_libre'])) {
$GLOBALS['_PAPYRUS_']['page']['description_libre'] = htmlentities($GLOBALS['_GEN_commun'][$type_site]->gs_description);
}
 
 
GEN_stockerMetaName('revisit-after', '15 days');
GEN_stockerMetaName('robots', $GLOBALS['_PAPYRUS_']['page']['robot']);
GEN_stockerMetaName('author', $GLOBALS['_PAPYRUS_']['page']['auteur']);
GEN_stockerMetaName('keywords', $GLOBALS['_PAPYRUS_']['page']['mots_cles']);
GEN_stockerMetaName('description', $GLOBALS['_PAPYRUS_']['page']['description_libre']);
 
// Construction des Meta Meta "name" du Dublin Core.
 
if (isset($GLOBALS['_GEN_commun'][$type_menu])) {
$GLOBALS['_PAPYRUS_']['page']['titre_alternatif'] = htmlentities($GLOBALS['_GEN_commun'][$type_menu]->gm_titre_alternatif);
$GLOBALS['_PAPYRUS_']['page']['auteur'] = htmlentities($GLOBALS['_GEN_commun'][$type_menu]->gm_auteur);
$GLOBALS['_PAPYRUS_']['page']['description_resume'] = htmlentities($GLOBALS['_GEN_commun'][$type_menu]->gm_description_resume);
$GLOBALS['_PAPYRUS_']['page']['description_table_matieres'] = htmlentities($GLOBALS['_GEN_commun'][$type_menu]->gm_description_table_matieres);
$GLOBALS['_PAPYRUS_']['page']['publieur'] = htmlentities($GLOBALS['_GEN_commun'][$type_menu]->gm_editeur);
$GLOBALS['_PAPYRUS_']['page']['contributeur'] = htmlentities($GLOBALS['_GEN_commun'][$type_menu]->gm_contributeur);
$GLOBALS['_PAPYRUS_']['page']['date_creation'] = htmlentities($GLOBALS['_GEN_commun'][$type_menu]->gm_date_creation);
$GLOBALS['_PAPYRUS_']['page']['date_soumission'] = htmlentities($GLOBALS['_GEN_commun'][$type_menu]->gm_date_soumission);
$GLOBALS['_PAPYRUS_']['page']['date_acceptation'] = htmlentities($GLOBALS['_GEN_commun'][$type_menu]->gm_date_acceptation);
$GLOBALS['_PAPYRUS_']['page']['periode_validite'] = htmlentities($GLOBALS['_GEN_commun'][$type_menu]->gm_date_debut_validite);
$GLOBALS['_PAPYRUS_']['page']['date_copyright'] = htmlentities($GLOBALS['_GEN_commun'][$type_menu]->gm_date_copyright);
$GLOBALS['_PAPYRUS_']['page']['source'] = htmlentities($GLOBALS['_GEN_commun'][$type_menu]->gm_source);
}
else {
$GLOBALS['_PAPYRUS_']['page']['titre_alternatif'] = '';
$GLOBALS['_PAPYRUS_']['page']['auteur'] = '';
$GLOBALS['_PAPYRUS_']['page']['description_resume'] = '';
$GLOBALS['_PAPYRUS_']['page']['description_table_matieres'] = '';
$GLOBALS['_PAPYRUS_']['page']['publieur'] = '';
$GLOBALS['_PAPYRUS_']['page']['contributeur'] = '';
$GLOBALS['_PAPYRUS_']['page']['date_creation'] = '';
$GLOBALS['_PAPYRUS_']['page']['date_soumission'] = '';
$GLOBALS['_PAPYRUS_']['page']['date_acceptation'] = '';
$GLOBALS['_PAPYRUS_']['page']['periode_validite'] = '';
$GLOBALS['_PAPYRUS_']['page']['date_copyright'] = '';
$GLOBALS['_PAPYRUS_']['page']['source'] = '';
}
 
if ((isset($GLOBALS['_GEN_commun']['info_i18n_pays'])) && ($GLOBALS['_GEN_commun']['info_i18n_pays']->gip_id_pays != '')) {
$GLOBALS['_PAPYRUS_']['page']['langue_rfc_3066'] = $GLOBALS['_PAPYRUS_']['page']['langue'].'-'.htmlentities($GLOBALS['_GEN_commun']['info_i18n_pays']->gip_id_pays);
} else {
$GLOBALS['_PAPYRUS_']['page']['langue_rfc_3066'] = $GLOBALS['_PAPYRUS_']['page']['langue'];
}
if (isset($GLOBALS['_GEN_commun']['$type_menu'])) {
$GLOBALS['_PAPYRUS_']['page']['type_portee_spatiale'] = htmlentities($GLOBALS['_GEN_commun']['$type_menu']->gm_ce_type_portee_spatiale);
$GLOBALS['_PAPYRUS_']['page']['portee_spatiale'] = htmlentities($GLOBALS['_GEN_commun']['$type_menu']->gm_portee_spatiale);
$GLOBALS['_PAPYRUS_']['page']['type_portee_temporelle'] = htmlentities($GLOBALS['_GEN_commun']['$type_menu']->gm_ce_type_portee_temporelle);
$GLOBALS['_PAPYRUS_']['page']['portee_temporelle'] = htmlentities($GLOBALS['_GEN_commun']['$type_menu']->gm_portee_temporelle);
$GLOBALS['_PAPYRUS_']['page']['licence'] = htmlentities($GLOBALS['_GEN_commun']['$type_menu']->gm_licence);
$GLOBALS['_PAPYRUS_']['page']['public'] = htmlentities($GLOBALS['_GEN_commun']['$type_menu']->gm_public);
$GLOBALS['_PAPYRUS_']['page']['public_niveau'] = htmlentities($GLOBALS['_GEN_commun']['$type_menu']->gm_public_niveau);
}
else {
$GLOBALS['_PAPYRUS_']['page']['type_portee_spatiale'] = '';
$GLOBALS['_PAPYRUS_']['page']['portee_spatiale'] = '';
$GLOBALS['_PAPYRUS_']['page']['type_portee_temporelle'] = '';
$GLOBALS['_PAPYRUS_']['page']['portee_temporelle'] = '';
$GLOBALS['_PAPYRUS_']['page']['licence'] = '';
$GLOBALS['_PAPYRUS_']['page']['public'] = '';
$GLOBALS['_PAPYRUS_']['page']['public_niveau'] = '';
}
 
 
GEN_stockerMetaNameDC('DC.Title', $GLOBALS['_PAPYRUS_']['page']['titre'], $GLOBALS['_PAPYRUS_']['page']['langue']);
GEN_stockerMetaNameDC('DC.Title.alternative', $GLOBALS['_PAPYRUS_']['page']['titre_alternatif'], $GLOBALS['_PAPYRUS_']['page']['langue']);
GEN_stockerMetaNameDC('DC.Creator', $GLOBALS['_PAPYRUS_']['page']['auteur']);
GEN_stockerMetaNameDC('DC.Subject', $GLOBALS['_PAPYRUS_']['page']['mots_cles'], $GLOBALS['_PAPYRUS_']['page']['langue']);
GEN_stockerMetaNameDC('DC.Description', $GLOBALS['_PAPYRUS_']['page']['description_libre'], $GLOBALS['_PAPYRUS_']['page']['langue']);
GEN_stockerMetaNameDC('DC.Description.abstract', $GLOBALS['_PAPYRUS_']['page']['description_resume'], $GLOBALS['_PAPYRUS_']['page']['langue']);
GEN_stockerMetaNameDC('DC.Description.tableOfContents', $GLOBALS['_PAPYRUS_']['page']['description_table_matieres'], $GLOBALS['_PAPYRUS_']['page']['langue']);
GEN_stockerMetaNameDC('DC.Publisher', $GLOBALS['_PAPYRUS_']['page']['publieur']);
GEN_stockerMetaNameDC('DC.Contributor', $GLOBALS['_PAPYRUS_']['page']['contributeur']);
GEN_stockerMetaNameDC('DC.Date.created', $GLOBALS['_PAPYRUS_']['page']['date_creation'], '', 'W3CDTF');
GEN_stockerMetaNameDC('DC.Date.valid', $GLOBALS['_PAPYRUS_']['page']['periode_validite'], '', 'W3CDTF');
//Ajouter la gestion des dates valid et available en utilisant les dates de la table gen_page_contenu.
GEN_stockerMetaNameDC('DC.Date.dateSubmitted', $GLOBALS['_PAPYRUS_']['page']['date_soumission'], '', 'W3CDTF');
GEN_stockerMetaNameDC('DC.Date.dateCopyrighted', $GLOBALS['_PAPYRUS_']['page']['date_copyright'], '', 'W3CDTF');
GEN_stockerMetaNameDC('DC.Date.dateAccepted', $GLOBALS['_PAPYRUS_']['page']['date_acceptation'], '', 'W3CDTF');
GEN_stockerMetaNameDC('DC.Source', $GLOBALS['_PAPYRUS_']['page']['source'], '', 'URI');
GEN_stockerMetaNameDC('DC.Language', $GLOBALS['_PAPYRUS_']['page']['langue_rfc_3066'], '', 'RFC3066');
GEN_stockerMetaNameDC('DC.Coverage.spatial', $GLOBALS['_PAPYRUS_']['page']['portee_spatiale'], '', $GLOBALS['_PAPYRUS_']['page']['type_portee_spatiale']);
GEN_stockerMetaNameDC('DC.Coverage.temporal', $GLOBALS['_PAPYRUS_']['page']['portee_temporelle'], '', $GLOBALS['_PAPYRUS_']['page']['type_portee_temporelle']);
GEN_stockerMetaNameDC('DC.Rights', $GLOBALS['_PAPYRUS_']['page']['licence'], '', 'URI');
GEN_stockerMetaNameDC('DC.Audience', $GLOBALS['_PAPYRUS_']['page']['public']);
GEN_stockerMetaNameDC('DC.Audience.educationLevel', $GLOBALS['_PAPYRUS_']['page']['public_niveau']);
 
// Construction des CSS
// Déclaration des constantes contenant les CSS à afficher sur la page.
$GLOBALS['_GEN_commun']['style_type'] = 'text/css';
$GLOBALS['_GEN_commun']['style_integree'] = '';
$GLOBALS['_GEN_commun']['style_externe'] = array();
 
// Construction du Javascript
// Déclaration des constantes contenant le Javascript à afficher sur la page.
$GLOBALS['_GEN_commun']['script_type'] = 'text/javascript';
$GLOBALS['_GEN_commun']['script_code'] = '';
$GLOBALS['_GEN_commun']['script_fonction'] = array();
$GLOBALS['_GEN_commun']['script_fichier'] = array();
 
// +------------------------------------------------------------------------------------------------------+
// Gestion des inclusions des fichiers d'applettes
// PERF : on inclus des applettes meme s'il elle ne sont pas utilisées, les initialisations peuvent etre
// longue et c'est source de bug ...
 
for ($i = 0; $i < count($GLOBALS['_GEN_commun']['info_applette']); $i++) {
// Nous vérifions que le chemin vers l'applette existe.
if (file_exists($GLOBALS['_GEN_commun']['info_applette'][$i]->gap_chemin)) {
include_once($GLOBALS['_GEN_commun']['info_applette'][$i]->gap_chemin);
// Nous récupérons l'expression régulière de la balise pour l'utiliser lors de l'appel
// de la fonction de l'applette. L'appel des fonctions des applettes à lieu après l'appel
// de l'application pour permettre à l'appli de modifier certains paramètres (identification, ordre des menus).
$GLOBALS['_GEN_commun']['info_applette'][$i]->applette_balise = $GLOBALS['_GEN_commun']['info_applette_balise'];
$GLOBALS['_GEN_commun']['info_applette'][$i]->applette_fonction = $GLOBALS['_GEN_commun']['info_applette_nom_fonction'];
} else {
// Ne devrait pas arrêter le programme! Mais instancier le gestionnaire de débogage.
echo('ERREUR Papyrus : Impossible de trouver le fichier de l\'applette. <br />'.
'Nom applette : '.$GLOBALS['_GEN_commun']['info_applette'][$i]->gap_nom.' <br />'.
'Chemin fichier applette : '.$GLOBALS['_GEN_commun']['info_applette'][$i]->gap_chemin.' <br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier : '. __FILE__ );
}
}
 
// +------------------------------------------------------------------------------------------------------+
// Gestion de l'intégration de l'application liée au menu
 
// Une fois les applettes appelées et exécutées nous appelons l'application qui peut avoir
// besoins des infos des applettes (c'est le cas, pour l'applette IDENTIFICATION).
$GLOBALS['_PAPYRUS_']['general']['application_chemin'] = '';
if (isset($GLOBALS['_GEN_commun']['info_application']->gap_chemin)) {
$GLOBALS['_PAPYRUS_']['general']['application_chemin'] = $GLOBALS['_GEN_commun']['info_application']->gap_chemin;
}
 
// Affichage contenu si identifié (parametre : lecture = + )
 
$lecture=0;
if ((isset($GLOBALS['_GEN_commun']['info_application']->lecture)) && ($GLOBALS['_GEN_commun']['info_application']->lecture=="+")) {
if ($GLOBALS['_GEN_commun']['pear_auth']->getAuth()) {
$lecture=1;
}
}
// Emplacement pour traiter les futurs cas :
else {
$lecture=1;
}
 
if (!$lecture) {
function afficherContenuCorps()
{
return '<p class="pap_erreur">'.'Pas autorisé, veuillez vous identifier.'.'</p>';
}
}
 
// $application_chemin contient le chemin de l'application
// Si $application_chemin est vide, on défini putFrame comme ne retournant rien.
 
if (empty($GLOBALS['_PAPYRUS_']['general']['application_chemin']) ) {
function afficherContenuCorps()
{
return '<p class="pap_erreur">'.'Pas d\'application.'.'</p>';
}
} else {
if (file_exists($GLOBALS['_PAPYRUS_']['general']['application_chemin'])) {
if (!function_exists('afficherContenuCorps')) {
include_once($GLOBALS['_PAPYRUS_']['general']['application_chemin']);
}
} else {
die('ERREUR Papyrus : application impossible à charger. <br />'.
'Chemin application : '.$GLOBALS['_PAPYRUS_']['general']['application_chemin'].' <br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier : '. __FILE__ );
}
}
 
 
// +------------------------------------------------------------------------------------------------------+
// Recherche des informations provenant de l'application pour la complétion du squelette
 
// Contenu navigation
// Appel de la fonction afficherContenuNavigation() si elle existe.
$GLOBALS['_PAPYRUS_']['rendu']['CONTENU_NAVIGATION'] = (function_exists('afficherContenuNavigation') ? afficherContenuNavigation() : '<!-- '.'Aucune navigation'.' -->');
 
// Contenu tête
// Appel de la fonction afficherContenuTete() si elle existe.
$GLOBALS['_PAPYRUS_']['rendu']['CONTENU_TETE'] = (function_exists('afficherContenuTete') ? afficherContenuTete() : '<!-- '.'Aucun contenu tête'.' -->');
 
// Contenu corps
// Appel de la fonction afficherContenuCorps().
if (function_exists('afficherContenuCorps') ) {
$GLOBALS['_PAPYRUS_']['rendu']['CONTENU_CORPS'] = afficherContenuCorps();
} else {
$GLOBALS['_PAPYRUS_']['rendu']['CONTENU_CORPS'] =
'ERREUR Papyrus : fonction afficherContenuCorps() introuvable dans l\'application demandée. <br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier : '. __FILE__;
}
 
// Appel de la fonction afficherContenuMenu() si elle existe.
if (isset($GLOBALS['_PAPYRUS_']['rendu']['CONTENU_MENU'])) {
$GLOBALS['_PAPYRUS_']['rendu']['CONTENU_MENU'] .= (function_exists('afficherContenuMenu') ? afficherContenuMenu() : '<!-- '.'Aucun menu pour cette application'.' -->');
}
else {
$GLOBALS['_PAPYRUS_']['rendu']['CONTENU_MENU'] = (function_exists('afficherContenuMenu') ? afficherContenuMenu() : '<!-- '.'Aucun menu pour cette application'.' -->');
}
 
// Contenu pied
// Appel de la fonction afficherContenuPied() si elle existe.
$GLOBALS['_PAPYRUS_']['rendu']['CONTENU_PIED'] = (function_exists('afficherContenuPied') ? afficherContenuPied() : '<!-- '.'Aucun contenu pied'.' -->');
 
// +------------------------------------------------------------------------------------------------------+
// Gestion de l'espace de nom pour les balise Papyrus
$GLOBALS['_GEN_commun']['balise_prefixe'] = 'PAPYRUS_';
 
// +------------------------------------------------------------------------------------------------------+
// Gestion des appels des fonctions d'applettes de papyrus
 
for ($i = 0; $i < count($GLOBALS['_GEN_commun']['info_applette']); $i++) {
// Recherche du nombre de balise d'une applette donnée présentes dans le squelette
$GLOBALS['_PAPYRUS_']['applette']['nbr_balise'] = preg_match_all(
'/<!-- '.$GLOBALS['_GEN_commun']['balise_prefixe'].'('.$GLOBALS['_GEN_commun']['info_applette'][$i]->applette_balise.') -->/',
$GLOBALS['_PAPYRUS_']['general']['contenu_squelette'],
$GLOBALS['_PAPYRUS_']['applette']['applet_arguments'],
PREG_SET_ORDER);
// Si on trouve au moins une balise, on lance la boucle pour les remplacer
for ($j = 0; $j <= ($GLOBALS['_PAPYRUS_']['applette']['nbr_balise'] - 1); $j++) {
// Nous vérifions que le nom de la fonction principale de l'applette existe.
if (function_exists($GLOBALS['_GEN_commun']['info_applette'][$i]->applette_fonction)) {
// Nous comptabilisons le nombre d'utilisation des applettes dans un squelette:
if (!isset($GLOBALS['_PAPYRUS_']['applette']['comptage'][$GLOBALS['_GEN_commun']['info_applette'][$i]->applette_fonction])) {
$GLOBALS['_PAPYRUS_']['applette']['comptage'][$GLOBALS['_GEN_commun']['info_applette'][$i]->applette_fonction] = 1;
} else {
$GLOBALS['_PAPYRUS_']['applette']['comptage'][$GLOBALS['_GEN_commun']['info_applette'][$i]->applette_fonction]++;
}
$GLOBALS['_PAPYRUS_']['applette']['contenu_applette'] =
call_user_func( $GLOBALS['_GEN_commun']['info_applette'][$i]->applette_fonction,
$GLOBALS['_PAPYRUS_']['applette']['applet_arguments'][$j],
$GLOBALS['_GEN_commun']);
} else {
$GLOBALS['_PAPYRUS_']['applette']['contenu_applette'] =
'<!-- '."\n".
$GLOBALS['_PAPYRUS_']['applette']['applet_arguments'][$j][1].' : '.
'fonction de l\'applette "'.$GLOBALS['_GEN_commun']['info_applette'][$i]->gap_nom.'" introuvable! '."\n".
'Fonction : '.$GLOBALS['_GEN_commun']['info_applette'][$i]->applette_fonction."\n".
' -->';
}
// Remplacement des balises d'applette de Papyrus dans le squelette
$GLOBALS['_PAPYRUS_']['general']['contenu_squelette'] =
str_replace( '<!-- '.$GLOBALS['_GEN_commun']['balise_prefixe'].$GLOBALS['_PAPYRUS_']['applette']['applet_arguments'][$j][1].' -->',
$GLOBALS['_PAPYRUS_']['applette']['contenu_applette'],
$GLOBALS['_PAPYRUS_']['general']['contenu_squelette']);
}
}
 
 
 
// +------------------------------------------------------------------------------------------------------+
// Gestion des appels des fonctions d'applettes des applications clientes de papyrus
 
$GLOBALS['_GEN_commun']['balise_prefixe_client'] = 'CLIENT_';
 
for ($i = 0; $i < count($GLOBALS['_GEN_commun']['info_applette']); $i++) {
// Recherche du nombre de balise d'une applette donnée présentes dans le squelette
$GLOBALS['_PAPYRUS_']['applette']['nbr_balise'] = preg_match_all(
'/<!-- '.$GLOBALS['_GEN_commun']['balise_prefixe_client'].'('.$GLOBALS['_GEN_commun']['info_applette'][$i]->applette_balise.') -->/',
$GLOBALS['_PAPYRUS_']['general']['contenu_squelette'],
$GLOBALS['_PAPYRUS_']['applette']['applet_arguments'],
PREG_SET_ORDER);
// Si on trouve au moins une balise, on lance la boucle pour les remplacer
for ($j = 0; $j <= ($GLOBALS['_PAPYRUS_']['applette']['nbr_balise'] - 1); $j++) {
// Nous vérifions que le nom de la fonction principale de l'applette existe.
if (function_exists($GLOBALS['_GEN_commun']['info_applette'][$i]->applette_fonction)) {
// Nous comptabilisons le nombre d'utilisation des applettes dans un squelette:
if (!isset($GLOBALS['_PAPYRUS_']['applette']['comptage'][$GLOBALS['_GEN_commun']['info_applette'][$i]->applette_fonction])) {
$GLOBALS['_PAPYRUS_']['applette']['comptage'][$GLOBALS['_GEN_commun']['info_applette'][$i]->applette_fonction] = 1;
} else {
$GLOBALS['_PAPYRUS_']['applette']['comptage'][$GLOBALS['_GEN_commun']['info_applette'][$i]->applette_fonction]++;
}
$GLOBALS['_PAPYRUS_']['applette']['contenu_applette'] =
call_user_func( $GLOBALS['_GEN_commun']['info_applette'][$i]->applette_fonction,
$GLOBALS['_PAPYRUS_']['applette']['applet_arguments'][$j],
$GLOBALS['_GEN_commun']);
} else {
$GLOBALS['_PAPYRUS_']['applette']['contenu_applette'] =
'<!-- '."\n".
$GLOBALS['_PAPYRUS_']['applette']['applet_arguments'][$j][1].' : '.
'fonction de l\'applette "'.$GLOBALS['_GEN_commun']['info_applette'][$i]->gap_nom.'" introuvable! '."\n".
'Fonction : '.$GLOBALS['_GEN_commun']['info_applette'][$i]->applette_fonction."\n".
' -->';
}
// Remplacement des balises d'applette de Papyrus dans le squelette
$GLOBALS['_PAPYRUS_']['general']['contenu_squelette'] =
str_replace( '<!-- '.$GLOBALS['_GEN_commun']['balise_prefixe_client'].$GLOBALS['_PAPYRUS_']['applette']['applet_arguments'][$j][1].' -->',
$GLOBALS['_PAPYRUS_']['applette']['contenu_applette'],
$GLOBALS['_PAPYRUS_']['general']['contenu_squelette']);
}
}
 
// +------------------------------------------------------------------------------------------------------+
// Continuation recherche d'info provenant de Papyrus pour la complétion du squelette
 
// Une fois l'application appelé est exécuté nous affichons le contenu de l'entête qui a pu
// être modifié par l'application.
$GLOBALS['_PAPYRUS_']['rendu']['META_HTTP_EQUIV'] = GEN_afficherMeta('http-equiv');
$GLOBALS['_PAPYRUS_']['rendu']['META_NAME'] = GEN_afficherMeta('name');
$GLOBALS['_PAPYRUS_']['rendu']['META_NAME_DC'] = GEN_afficherMeta('dc');
// Nous récupérons tout les styles CSS pour l'afficher dans l'entête de la page.
$GLOBALS['_PAPYRUS_']['rendu']['STYLES'] = GEN_afficherStyle();
// Nous récupérons tout le Javascript pour l'afficher dans l'entête de la page.
$GLOBALS['_PAPYRUS_']['rendu']['SCRIPTS'] = GEN_afficherScript();
$GLOBALS['_PAPYRUS_']['rendu']['VERSION'] = PAP_VERSION;
 
// +------------------------------------------------------------------------------------------------------+
// Remplacement des balises Papyrus dans le squelette
foreach ($GLOBALS['_PAPYRUS_']['rendu'] as $GLOBALS['_PAPYRUS_']['tmp']['cle'] => $GLOBALS['_PAPYRUS_']['tmp']['val']) {
$GLOBALS['_PAPYRUS_']['general']['contenu_squelette'] =
str_replace( '<!-- '.$GLOBALS['_GEN_commun']['balise_prefixe'].$GLOBALS['_PAPYRUS_']['tmp']['cle'].' -->',
$GLOBALS['_PAPYRUS_']['tmp']['val'],
$GLOBALS['_PAPYRUS_']['general']['contenu_squelette']);
}
// +------------------------------------------------------------------------------------------------------+
// Remplacement des actions Papyrus dans le squelette
// Création d'un objet Text_Papyrus :
$papyrus =& new Text_Papyrus();
// Pour éviter de remplacer les caractères spéciaux du XHTML:
$papyrus->setFormatConf('Xhtml', 'translate', false);
// Pour indiquer le jeu de caractères (encodage) de la page courante :
$papyrus->setRenderConf('Xhtml', 'inclure', 'encodage', $GLOBALS['_PAPYRUS_']['page']['jeu_de_caracteres']);
// Pour indiquer les infos sur les pages des sites à intégrer :
$papyrus->setRenderConf('Xhtml', 'inclure', 'sites', $GLOBALS['_PAPYRUS_']['inclure_sites']);
// Application des règles de Papyrus :
$GLOBALS['_PAPYRUS_']['general']['contenu_squelette'] = $papyrus->transform($GLOBALS['_PAPYRUS_']['general']['contenu_squelette'], 'Xhtml');
 
// +------------------------------------------------------------------------------------------------------+
// Stokage du squelette dans un variable globale après avoir remplacer les balises Papyrus.
$GLOBALS['_GEN_commun']['sortie'] = $GLOBALS['_PAPYRUS_']['general']['contenu_squelette'];
 
/* +--Fin du code ---------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.29.2.1 2007/01/11 18:22:35 ddelon
* Titre et meta information multilinguisme
*
* Revision 1.29 2006/04/20 09:45:30 alexandre_tb
* ligne 92, remplacement de gs_fichier_squelette par gm_fichier_squelette, car on appelle le squelette du menu (s'il existe) et non du site.
* Posait un pb lors de l'affichage de squelettes (de menu) des traductions de menu
*
* Revision 1.28 2006/03/13 21:00:20 ddelon
* Suppression messages d'erreur multilinguisme
*
* Revision 1.27 2006/03/02 13:45:27 ddelon
* Balise url page
*
* Revision 1.26 2006/03/02 10:49:49 ddelon
* Fusion branche multilinguisme dans branche principale
*
* Revision 1.25 2005/12/09 15:07:07 florian
* suppression de debogage.css, pour optimiser les performances (c'est intégré dans la feuille de style par défaut dorénavant)
*
* Revision 1.24.2.6 2006/03/01 22:28:15 ddelon
* Balise url page
*
* Revision 1.24.2.5 2006/03/01 22:09:49 ddelon
* Balise url page
*
* Revision 1.24.2.4 2006/02/28 15:54:07 ddelon
* Integration branche principale
*
* Revision 1.24.2.3 2006/02/28 14:02:09 ddelon
* Finition multilinguisme
*
* Revision 1.24.2.2 2006/01/19 21:26:20 ddelon
* Multilinguisme site + bug ftp
*
* Revision 1.24.2.1 2005/12/20 14:40:24 ddelon
* Fusion Head vers Livraison
*
* Revision 1.25 2005/12/09 15:07:07 florian
* suppression de debogage.css, pour optimiser les performances (c'est intégré dans la feuille de style par défaut dorénavant)
*
* Revision 1.24 2005/10/21 22:22:16 ddelon
* projet wikini : fiche synthese
*
* Revision 1.23 2005/10/20 13:12:18 ddelon
* Gestion protection menu
*
* Revision 1.22 2005/10/20 10:28:25 ddelon
* Wikini complet dans l'intégrateur Wikini
*
* Revision 1.21 2005/10/17 13:41:34 ddelon
* Projet Wikini
*
* Revision 1.20 2005/10/17 10:52:00 jp_milcent
* Mise en majuscule du jeu de caractère, conformément à la recommandation.
*
* Revision 1.19 2005/10/12 17:20:33 ddelon
* Reorganisation calendrier + applette
*
* Revision 1.18 2005/09/22 14:02:49 ddelon
* nettoyage annuaire et php5
*
* Revision 1.17 2005/09/20 17:01:22 ddelon
* php5 et bugs divers
*
* Revision 1.16 2005/07/12 09:13:15 alexandre_tb
* Déplacement de l'appel de la fonction afficherContenuMenu APRES l'appel de afficherContenuCorps.
* Le menu d'une application étant calculé après les opérations de l'application.
*
* Revision 1.15 2005/07/08 21:13:15 ddelon
* Gestion indentation menu
*
* Revision 1.14 2005/05/11 14:31:45 jpm
* Ajout de la fonction afficherContenuMenu() pour les applications.
*
* Revision 1.13 2005/04/21 16:46:39 jpm
* Gestion via Papyrus du XHTML de Text_Wiki_Papyrus.
*
* Revision 1.12 2005/03/02 11:04:36 jpm
* Modification de l'utilisation d'une variable globale.
*
* Revision 1.11 2005/02/28 11:20:42 jpm
* Modification des auteurs.
*
* Revision 1.10 2005/01/26 16:20:46 jpm
* Correction bogue meta : auteurs et mots-clés mélangés.
*
* Revision 1.9 2004/12/06 19:39:40 jpm
* Correction langue DC.
*
* Revision 1.8 2004/11/26 19:02:07 jpm
* Comptabilisation du nombre d'appel de chaque applette dans le squelette.
*
* Revision 1.7 2004/11/24 18:33:29 jpm
* Encapsulation des variables dans le tableau global _PAPYRUS_.
*
* Revision 1.6 2004/11/15 17:40:21 jpm
* Gestion d'un espace de nom pour les balises Papyrus.
*
* Revision 1.5 2004/10/26 18:42:54 jpm
* Gestion de la fonction de navigation pour les appli Papyrus.
*
* Revision 1.4 2004/10/25 16:28:47 jpm
* Ajout de nouvelles balises Papyrus, ajout vérification mise à jour de Papyrus, meilleure gestion des sessions...
*
* Revision 1.3 2004/10/22 17:23:35 jpm
* Amélioration de la gestion de l'erreur si pas d'appli.
*
* Revision 1.2 2004/06/17 08:04:44 jpm
* Changement de constante pour les chemin d'accès à la biblio de code de Papyrus.
*
* Revision 1.1 2004/06/16 08:13:58 jpm
* Changement de nom de Papyrus en Papyrus.
* Changement de l'arborescence.
*
* Revision 1.32 2004/05/10 12:24:55 jpm
* Amélioration de la recherche des fichiers de squelette.
*
* Revision 1.31 2004/05/05 10:42:35 jpm
* Amélioration de la gestion de l'internationalisation.
*
* Revision 1.30 2004/05/05 08:25:37 jpm
* Modification de la façon d'ajouter la feuille de style de débogage pour qu'elle soit prise en compte par défaut.
*
* Revision 1.29 2004/05/03 14:12:04 jpm
* Suppression du fichier bibliothèque de fonctions sur gen_menu.
*
* Revision 1.28 2004/05/03 11:21:58 jpm
* Fin de la gestion des applettes et suppression de l'info_menu_hierarchie de _GEN_commun.
*
* Revision 1.27 2004/05/01 17:22:55 jpm
* Appel de la bibliothèque de fonctions concernant les menus.
*
* Revision 1.26 2004/05/01 16:19:36 jpm
* Suppression du code ayant pu être transformé en applettes (menu multi-niveaux, menu unique, menu commun, identification, sélecteur de sites).
*
* Revision 1.25 2004/05/01 11:39:38 jpm
* Déplacement du code gérant les applettes et du code de récupération du contenu du fichier squelette.
*
* Revision 1.24 2004/04/28 12:04:31 jpm
* Changement du modèle de la base de données.
*
* Revision 1.23 2004/04/22 08:30:47 jpm
* Transformation de $GS_GLOBAL en $GLOBALS['_GEN_commun'].
*
* Revision 1.22 2004/04/21 07:55:02 jpm
* Ajout de la feuille de style de débogage si le débogage de Papyrus est activé.
*
* Revision 1.19 2004/04/09 16:20:54 jpm
* Extraction de la gestion du cache et de l'envoi.
* Gestion des tables i18n.
*
* Revision 1.18 2004/04/08 12:29:48 jpm
* Début amélioration de la gestion du cache et de la compression des pages de Papyrus.
*
* Revision 1.17 2004/04/05 16:38:04 jpm
* Utilisation des nouvelles fonctions gérant l'insertion du Javascript.
*
* Revision 1.16 2004/04/02 16:30:56 jpm
* Gestion de la balise Papyrus IDENTIFICATION permettant l'envoie d'un formulaire de login.
*
* Revision 1.15 2004/04/01 11:27:13 jpm
* Ajout et modification de commentaires pour PhpDocumentor.
*
* Revision 1.14 2004/03/31 16:50:10 jpm
* Prise en compte du nouveau modèle de Papyrus révision 1.9.
*
* Revision 1.13 2004/03/27 11:07:45 jpm
* Modification des commentaires vis à vis du nouveau modèle.
* Mise en conformité avec la convention de codage.
* Amélioration du code.
*
* Revision 1.12 2004/03/23 17:06:44 jpm
* Ajout de commentaire dans l'entête.
* Mise en conformité avec la convention de codage.
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/bibliotheque/classes/pap_url.class.php
New file
0,0 → 1,415
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2005 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This file is part of Papyrus. |
// | |
// | Foobar is free software; you can redistribute it and/or modify |
// | it under the terms of the GNU General Public License as published by |
// | the Free Software Foundation; either version 2 of the License, or |
// | (at your option) any later version. |
// | |
// | Foobar 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 General Public License for more details. |
// | |
// | You should have received a copy of the GNU General Public License |
// | along with Foobar; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: pap_url.class.php,v 1.4.2.1 2006-12-08 20:07:43 jp_milcent Exp $
/**
* Classe de gestion des url de Papyrus
*
* Permet de gérer la réecriture des url.
*
*@package Papyrus
*@subpackage Classes
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author Aucun
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.4.2.1 $ $Date: 2006-12-08 20:07:43 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTETE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
 
// +------------------------------------------------------------------------------------------------------+
// | CORPS du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
class Pap_URL extends Net_URL {
/** Identifiant du menu
*
* @var integer
*/
var $id;
/** Chaine contenant le permalien.
*
* @var string
*/
var $permalien = '';
/** Booléen indiquant si on affiche ou pas un permalien.
*
* @var boolean
*/
var $permalien_bool;
/** Chaine indiquant le type d'url.
*
* @var string
*/
var $url_type = 'MENU';
/** Code numérique du menu courant
*
* @var integer
*/
var $code_num;
/** Code alphanumérique du menu courant
*
* @var string
*/
var $code_alpha;
/**
* PHP4 Constructeur
*
* @see __construct()
*/
function Pap_URL($url = null, $useBrackets = true)
{
$this->__construct($url, $useBrackets);
// Gestion de la réecriture d'url
if (defined('PAP_URL_REECRITURE') AND PAP_URL_REECRITURE == '1') {
$this->setPermalienBool(true);
}
}
/** Méthode setId() - Définit l'id du menu courant
*
* @param integer l'identifiant du menu courant.
* @return mixed false en cas d'erreur
* @access public
*/
function setId($id)
{
// Nous transformons en entier l'identifiant
settype($id, "integer");
// Nous vérifions que l'identifiant est bien un entier
if (is_integer($id)) {
$this->id = $id;
} else {
return false;
}
}
/** Méthode getId() - Retourne l'id du menu courant
*
* @return integer l'identifiant du menu courant.
* @access public
*/
function getId()
{
return $this->id;
}
/** Méthode setPermalien() - Définit le permaliens
*
* @param string valeur
* @return mixed false en cas d'erreur
* @access public
*/
function setPermalien($chaine = '')
{
// Nous vérifions que l'identifiant est bien un entier
if (is_string($chaine) && $chaine != '') {
if ($this->permalien != '') {
$this->permalien .= PAP_URL_REECRITURE_SEP;
} else {
$this->permalien = constant('PAP_URL_REECRITURE_'.$this->getUrlType()).PAP_URL_REECRITURE_SEP;
}
$this->permalien .= $chaine;
} else if ($chaine == '') {
$this->permalien = '';
} else {
return false;
}
}
/** Méthode getPermalien() - Retourne le permalien
*
* @return string le permalien
* @access public
*/
function getPermalien()
{
return $this->permalien;
}
/** Méthode setUrlType() - Définit le type d'URL
*
* @param string type d'URL (SITE ou MENU)
* @return mixed false en cas d'erreur
* @access public
*/
function setUrlType($type)
{
// Nous vérifions que l'identifiant est bien un entier
if (is_string($type) && ($type == 'MENU' || $type == 'SITE')) {
$this->url_type = $type;
} else {
return false;
}
}
/** Méthode getUrlType() - Retourne le type de l'URL
*
* @return string le type d'URL
* @access public
*/
function getUrlType()
{
return $this->url_type;
}
/** Méthode setPermalienBool() - Définit le type d'utilisation des permaliens
*
* @param boolean true ou false
* @return mixed false en cas d'erreur
* @access public
*/
function setPermalienBool($bool)
{
// Nous vérifions que l'identifiant est bien un entier
if (is_bool($bool)) {
$this->permalien_bool = $bool;
} else {
return false;
}
}
/** Méthode getPermalienBool() - Retourne booléen indiquant si on utilise ou pas les permaliens
*
* @return boolean true ou false
* @access public
*/
function getPermalienBool()
{
return $this->permalien_bool;
}
/** Méthode setCodeAlpha() - Définit le code alphanumérique de l'url
*
* @param string le code alphanumérique pour l'url du menu
* @return mixed false en cas d'erreur
* @access public
*/
function setCodeAlpha($code_alpha)
{
if (is_string($code_alpha)) {
$this->code_alpha = $code_alpha;
} else {
return false;
}
}
/** Méthode getCodeNum() - Retourne le code numérique de l'url
*
* @return string le code numérique pour l'url du menu
* @access public
*/
function getCodeNum()
{
return $this->code_num;
}
/** Méthode setCodeNum() - Définit le code numérique de l'url
*
* @param string le code numérique pour l'url du menu
* @return mixed false en cas d'erreur
* @access public
*/
function setCodeNum($code_num)
{
if (is_integer($code_num)) {
$this->code_num = $code_num;
} else {
return false;
}
}
/** Méthode getCodeAlpha() - Retourne le code alphanumérique de l'url
*
* @return string le code alphanumérique pour l'url du menu
* @access public
*/
function getCodeAlpha()
{
return $this->code_alpha;
}
/**
* Méthode getURL() - Retourne l'url
*
* @return string l'url complète.
* @access public
*/
function getURL()
{
// Identifiant de la langue choisie
if ( (isset($GLOBALS['_GEN_commun']['i18n'])) && (!empty($GLOBALS['_GEN_commun']['i18n'])) ) {
if ($GLOBALS['_GEN_commun']['i18n'] != GEN_I18N_ID_DEFAUT) {
$this->addQueryString(GEN_URL_CLE_I18N, $GLOBALS['_GEN_commun']['i18n']);
}
}
// Nous regardons si un id de menu existe
if ($this->getId() != '') {
// Préparation des noms des champs des codes pour le site et le menu
$champs_code_site = (GEN_URL_ID_TYPE_SITE == 'int') ? 'gs_code_num' : 'gs_code_alpha';
$champs_code_menu = (GEN_URL_ID_TYPE_MENU == 'int') ? 'gm_code_num' : 'gm_code_alpha';
if ($this->getUrlType() == 'MENU') {
// Récupération du nom de l'entrée du menu à afficher
$requete = 'SELECT gm_code_alpha, gm_code_num, gm_ce_i18n, gm_ce_site '.
'FROM gen_menu '.
'WHERE gm_id_menu = '.$this->id.' ';
$resultat = $GLOBALS['_GEN_commun']['pear_db']->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
$ligne = $resultat->fetchRow(DB_FETCHMODE_ASSOC);
$resultat->free();
// Nous vérifions si nous avons à faire à un menu commun ou pas
if ($ligne['gm_ce_site'] != 0) {
// Récupération des infos sur le site
$bln_url_site = false;
$requete_site = 'SELECT gs_code_alpha, gs_code_num '.
'FROM gen_site '.
'WHERE gs_id_site = '.$ligne['gm_ce_site'].' ';
$resultat_site = $GLOBALS['_GEN_commun']['pear_db']->query($requete_site);
(DB::isError($resultat_site)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_site->getMessage(), $requete_site)) : '';
$ligne_site = $resultat_site->fetchRow(DB_FETCHMODE_ASSOC);
$resultat_site->free();
} else {
// Menu commun
$bln_url_site = true;
$ligne_site[$champs_code_site] = $GLOBALS['_GEN_commun']['info_site']->$champs_code_site;
}
$this->addQueryString(GEN_URL_CLE_MENU, $ligne[$champs_code_menu]);
$this->setCodeAlpha($ligne['gm_code_alpha']);
$this->setCodeNum($ligne['gm_code_num']);
} else if ($this->getUrlType() == 'SITE') {
$bln_url_site = true;
$requete_site = 'SELECT gs_code_alpha, gs_code_num '.
'FROM gen_site '.
'WHERE gs_id_site = '.$this->getId().' ';
$resultat_site = $GLOBALS['_GEN_commun']['pear_db']->query($requete_site);
(DB::isError($resultat_site)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_site->getMessage(), $requete_site)) : '';
$ligne_site = $resultat_site->fetchRow(DB_FETCHMODE_ASSOC);
$resultat_site->free();
$this->setCodeAlpha($ligne_site['gs_code_alpha']);
$this->setCodeNum($ligne_site['gs_code_num']);
// Suppression de l'éventuel identifiant de menu passé dans l'url...
$this->removeQueryString(GEN_URL_CLE_MENU);
} else {
$message = 'ERREUR Papyrus : le type d\'url est inconnu : seul "MENU" et "SITE" existent. <br />'.
'Type : '.$this->getUrlType().' <br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier : '. __FILE__ ;
trigger_error($message, E_USER_ERROR);
}
// Préparation de l'url de l'entrée
if ($bln_url_site) {
$this->addQueryString(GEN_URL_CLE_SITE, $ligne_site[$champs_code_site]);
}
if ( (isset($GLOBALS['_GEN_commun']['url_i18n'])) && (!empty($GLOBALS['_GEN_commun']['url_i18n'])) ) {
$this->addQueryString(GEN_URL_CLE_I18N, $GLOBALS['_GEN_commun']['url_i18n']);
}
if ( (isset($GLOBALS['_GEN_commun']['url_date'])) && (!empty($GLOBALS['_GEN_commun']['url_date'])) ) {
$this->addQueryString(GEN_URL_CLE_DATE, $GLOBALS['_GEN_commun']['url_date']);
}
if ( (isset($GLOBALS['_GEN_commun']['url_format'])) && (!empty($GLOBALS['_GEN_commun']['url_format'])) ) {
$this->addQueryString(GEN_URL_CLE_FORMAT, $GLOBALS['_GEN_commun']['url_format']);
}
}
// Construction du permalien ou pas
if ($this->getPermalienBool()) {
// Récupération du chemin jusqu'au fichier principal de Papyrus
$this->path = (dirname($this->path) == DIRECTORY_SEPARATOR) ? DIRECTORY_SEPARATOR : dirname($this->path).DIRECTORY_SEPARATOR;
// On vide le permalien construite par les appels à getUrl() avant de le remplir
$this->setPermalien();
if (constant('GEN_URL_RACCOURCI_ID_TYPE_'.$this->getUrlType()) == 'int') {
$this->setPermalien($this->getCodeNum());
} else {
$this->setPermalien($this->getCodeAlpha());
}
$this->removeQueryString(GEN_URL_CLE_SITE);
$this->removeQueryString(GEN_URL_CLE_MENU);
$querystring = $this->getQueryString();
} else {
$querystring = $this->getQueryString();
}
// Construction de l'url
$this->url = $this->protocol . '://'
. $this->user . (!empty($this->pass) ? ':' : '')
. $this->pass . (!empty($this->user) ? '@' : '')
. $this->host . ($this->port == $this->getStandardPort($this->protocol) ? '' : ':' . $this->port)
. $this->path
. $this->getPermalien()
. (!empty($querystring) ? '?' . $querystring : '')
. (!empty($this->anchor) ? '#' . $this->anchor : '');
return $this->url;
}
/** Méthode retournant la valeur d'un paramêtre de l'URL.
*
* @return mixed la valeur du paramêtre demandé ou false
* @access public
*/
function retournerUnParametre($parametre)
{
if (!empty($this->querystring)) {
if (isset($this->querystring[$parametre])) {
return $this->querystring[$parametre];
}
}
return FALSE;
}
 
}
 
// +------------------------------------------------------------------------------------------------------+
// | PIED du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.4 2006/10/11 18:04:11 jp_milcent
* Gestion avancée de la réecriture d'URL.
*
* Revision 1.3 2006/03/02 10:49:49 ddelon
* Fusion branche multilinguisme dans branche principale
*
* Revision 1.2.2.1 2005/12/27 15:56:00 ddelon
* Fusion Head vers multilinguisme (wikini double clic)
*
* Revision 1.2 2005/04/18 16:40:50 jpm
* Modifications pour contrôler les permaliens.
*
* Revision 1.1 2005/04/14 13:56:25 jpm
* Ajout de la classe URL de Papyrus.
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/bibliotheque/fonctions/pap_application.fonct.php
New file
0,0 → 1,217
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This file is part of Papyrus. |
// | |
// | Foobar is free software; you can redistribute it and/or modify |
// | it under the terms of the GNU General Public License as published by |
// | the Free Software Foundation; either version 2 of the License, or |
// | (at your option) any later version. |
// | |
// | Foobar 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 General Public License for more details. |
// | |
// | You should have received a copy of the GNU General Public License |
// | along with Foobar; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: pap_application.fonct.php,v 1.3 2006-04-28 12:41:49 florian Exp $
/**
* Biblibothèque de fonction sur les applications.
*
* Liste des fonctions sur les applications.
*
*@package Papyrus
*@subpackage Fonctions
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author Aucun
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.3 $ $Date: 2006-04-28 12:41:49 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTETE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
// +------------------------------------------------------------------------------------------------------+
// | LISTE de FONCTIONS |
// +------------------------------------------------------------------------------------------------------+
/** Fonction GEN_verifierPresenceInterfaceAdmin() - Vérifie la présence d'une interface d'administration.
*
* Vérifie que l'application attribuée à un menu possède une interface d'administration.
*
* @param object objet Pear de connection à la base de données.
* @param integer l'identifiant de l'application.
* @return boolean true si l'appli peut être administrer, sinon false.
*/
function GEN_verifierPresenceInterfaceAdmin($db, $id_appli) {
// Gestion des erreurs
if ($id_appli == 0) {
return false;
}
// Requête sur les applications
$requete = 'SELECT * '.
'FROM gen_application '.
'WHERE gap_id_application = '.$id_appli;
$resultat = $db->query($requete);
$ligne_appli = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
$chemin_appli = $ligne_appli->gap_chemin;
$chemin_appli = preg_replace('/.php$/', '.admin.php', $chemin_appli);
if (file_exists($chemin_appli)) {
return true;
} else {
return false;
}
}
 
/** Fonction GEN_retournerCheminInterfaceAdmin() - Retourne le chemin de l'interface d'administration d'une appli.
*
* Retourne le chemin de l'interface d'administration d'une appli si elle en possède sinon false
*
* @param object objet Pear de connection à la base de données.
* @param integer l'identifiant de l'application.
* @return mixed le chemin si l'appli peut être administrer, sinon false.
*/
function GEN_retournerCheminInterfaceAdmin($db, $id_appli) {
// Requête sur les applications
$requete = 'SELECT gap_chemin '.
'FROM gen_application '.
'WHERE gap_id_application = '.$id_appli.' ';
$resultat = $db->query($requete);
$ligne_appli = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
$chemin_appli = $ligne_appli->gap_chemin;
$chemin_interface_admin = preg_replace('/.php$/', '.admin.php', $chemin_appli);
if (file_exists($chemin_interface_admin)) {
return $chemin_interface_admin;
} else {
return false;
}
}
 
/** Fonction GEN_retournerNomInterfaceAdmin() - Retourne le nom de la classe d'une interface d'administration d'une appli.
*
* Retourne le nom de la classe d'une interface d'administration d'une appli si elle en possède sinon false
*
* @param object objet Pear de connection à la base de données.
* @param integer l'identifiant de l'application.
* @return mixed le nom de l'interface d'admin de l'appli, sinon false.
*/
function GEN_retournerNomInterfaceAdmin($db, $id_appli) {
// Requête sur les applications
$requete = 'SELECT gap_chemin '.
'FROM gen_application '.
'WHERE gap_id_application = '.$id_appli.' ';
$resultat = $db->query($requete);
$ligne_appli = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
$chemin_appli = $ligne_appli->gap_chemin;
$morceaux='';
preg_match('/([\w_]+).php$/', $chemin_appli, $morceaux);
$nom_interface_admin = ucfirst($morceaux[1]).'_Admin';
return $nom_interface_admin;
}
 
/** Fonction GEN_retournerNomAppli() - Retourne le nom de la classe d'une appli.
*
* Retourne le nom de la classe d'une appli.
*
* @param object objet Pear de connection à la base de données.
* @param integer l'identifiant de l'application.
* @return mixed le nom de la classe de l'appli, sinon false.
*/
function GEN_retournerNomAppli($db, $id_appli) {
// Requête sur les applications
$requete = 'SELECT gap_chemin '.
'FROM gen_application '.
'WHERE gap_id_application = '.$id_appli.' ';
$resultat = $db->query($requete);
$ligne_appli = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
$chemin_appli = $ligne_appli->gap_chemin;
$morceaux='';
preg_match('/([\w_]+).php$/', $chemin_appli, $morceaux);
preg_replace('/_(\w)/', '_'.ucfirst(${1}),$morceaux[1]);
$nom_classe_appli = $morceaux[1];
return $nom_classe_appli;
}
 
/** Fonction GEN_retournerInfoAppliMenu() - Retourne les infos de l'application d'un menu.
*
* Retourne un objet contenant les infos de l'application liée à un menu
*
* @param object objet Pear de connection à la base de données.
* @param integer l'identifiant du menu.
* @return mixed l'objet représentant les infos de l'appli, sinon false.
*/
function GEN_retournerInfoAppliMenu($db, $id_menu) {
// Gestion des erreurs
if ($id_menu == 0) {
return false;
}
// Requête sur les applications
$requete = 'SELECT gen_application.* '.
'FROM gen_application, gen_menu '.
'WHERE gm_id_menu = '.$id_menu.' '.
'AND gm_ce_application = gap_id_application';
$resultat = $db->query($requete);
$ligne_appli = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
return $ligne_appli;
}
 
/** Fonction GEN_retournerIdAppliMenu() - Retourne l'identifiant de l'application d'un menu.
*
* Retourne l'identifiant de l'application liée à un menu
*
* @param object objet Pear de connection à la base de données.
* @param integer l'identifiant du menu.
* @return integer identifiant de l'appli du menu, sinon false.
*/
function GEN_retournerIdAppliMenu($db, $id_menu) {
// Requête sur les applications
$requete = 'SELECT gen_application.* '.
'FROM gen_application, gen_menu '.
'WHERE gm_id_menu = '.$id_menu.' '.
'AND gm_ce_application = gap_id_application';
$resultat = $db->query($requete);
$ligne_appli = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
return $ligne_appli->gap_id_application;
}
// +------------------------------------------------------------------------------------------------------+
// | PIED du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.2 2005/02/28 11:12:03 jpm
* Modification des auteurs.
*
* Revision 1.1 2004/11/09 17:54:50 jpm
* Ajout de fonction permettant de manipuler les informations liées aux applications.
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/bibliotheque/fonctions/pap_cache.fonct.php
New file
0,0 → 1,90
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library 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 |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: pap_cache.fonct.php,v 1.1 2004-06-15 15:08:02 jpm Exp $
/**
* Bibliothèque de fonctions utilisées dans le cadre de la gestion du cache.
*
* Contient des fonctions permettant de gérer le cache.
*
*@package Papyrus
*@subpackage Fonctions
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author Aucun
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.1 $ $Date: 2004-06-15 15:08:02 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | LISTE de FONCTIONS |
// +------------------------------------------------------------------------------------------------------+
/** Fonction GEN_concatenerTaleauAsso() - Retourne une chaine des valeurs et clés du tableau.
*
* Cette fonction prend un tableau associatif en paramêtre dont elle concatène les clés et valeurs,
* puis ces paires clé-valeur entre elles.
* Il est possible de définir la chaine utilisée pour liée une clé avec sa valeur et la chaine liant
* les paires clé-valeur.
*
* @param string chaine utilisé pour faire la liaison entre les clés et les valeurs du tableau associatif.
* @param string chaine utilisé pour faire la liaison entre chaque paire clé-valeur du tableau associatif.
* @param array le tableau associatif à transformer en chaine.
* @return string la chaine des des clés et valeurs du tableau associatif concaténés.
*/
function GEN_concatenerTaleauAsso($liaison_cle_val, $liaison_paire, $tableau_associatif)
{
$tab_sortie = array();
foreach( $tableau_associatif as $cle => $valeur ) {
$tab_sortie[] = $cle.$liaison_cle_val.$valeur;
}
return implode($liaison_paire, $tab_sortie);
}
 
/** Fonction GEN_donnerMD5UriPostSession() - Retourne une chaine des valeurs de l'Uri, du Post et du Session.
*
* Cette fonction retourne une valeur md5 d'une chaine contenant la concaténation de l'URI et des paires
* clé-valeur des tableaux $_POST et $_SESSION. Les données des tableaux sont ajoutés à l'URI en utilisant "="
* pour séparé les clés des valeurs et "&" pour séparer les paires clé-valeur.
*
* @return string la valeur md5 de la chaine concaténant l'uri aux paires clé-valeur des tableaux _POST et _SESSION.
*/
function GEN_donnerMD5UriPostSession()
{
$chaine_variable_post = GEN_concatenerTaleauAsso('=', '&', $_POST);
$chaine_variable_session = GEN_concatenerTaleauAsso('=', '&', $_SESSION);
return md5($_SERVER['REQUEST_URI'].'&'.$chaine_variable_post.'&'.$chaine_variable_session);
}
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.2 2004/04/09 16:23:20 jpm
* Amélioration de la gestion du cache côté serveur avec prise en compte des variables de session.
*
* Revision 1.1 2004/04/08 12:21:21 jpm
* Ajout de fonction utilisées dans le cadre de la mise en cache d'une page générée par Génésia.
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/bibliotheque/fonctions/pap_menu.fonct.php
New file
0,0 → 1,1058
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library 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 |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: pap_menu.fonct.php,v 1.27 2006-10-16 15:50:10 ddelon Exp $
/**
* Bibliothèque de fonction sur le rendu.
*
* Cette bibliothèque contient des fonctions utilisé par le rendu des pages de Papyrus.
*
*@package Papyrus
*@subpackage Fonctions
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author Alexandre GRANIER <alexadandre@tela-botanica.org>
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.27 $ $Date: 2006-10-16 15:50:10 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | LISTE des FONCTIONS |
// +------------------------------------------------------------------------------------------------------+
 
/** Fonction GEN_donnerProfondeurMax() - Renvoie le nombre de niveau de menu.
*
* Cette fonction calcule, pour un menu donné, le nombre de niveau de menu fils complétant
* l'arbre des menus jusqu'au feuilles.
* Ici on l'utilise en passant l'argument égal à zéro c'est à dire
* en partant du menu racine d'un site gmr_id_menu_02 = 0.
* C'est une fonction récursive.
* Noter que la variable $prof est statique.
*
* @param integer identifiant du site sur lequel la profondeur est calculé.
* @param integer identifiant du menu à partir delaquelle on souhaite calculer la profondeur.
* @return integer le nombre de niveau de menu.
*/
function GEN_donnerProfondeurMax($id_site, $id_menu)
{
global $db;
static $prof = 0;
 
// Requête sur les relations de type "avoir père" entre menus
$requete = 'SELECT gmr_id_menu_01 '.
'FROM gen_menu, gen_menu_relation '.
'WHERE gmr_id_menu_02 = '.$id_menu.' '.
'AND gmr_id_menu_01 = gm_id_menu '.
'AND gm_ce_site = '.$id_site.' '.
'AND gmr_id_valeur = 1 '.
'ORDER BY gmr_ordre ASC';
 
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
 
if ($resultat->numRows() == 0) {
return $prof;
}
$prof++;
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
$prof = GEN_donnerProfondeurMax($id_site, $ligne->gmr_id_menu_01);
}
return $prof;
}
 
/** Fonction GEN_donnerDernierFreres() - Renvoie l'id du dernier menu frère.
*
* Cette fonction regarde si un menu donné possède au moins un frère dans l'arbre
* des menus. Elle retourne l'id du dernier menu frére en utilisant gmr_ordre.
* Cette fonction fait appel à la fonction : GEN_lireIdentifiantMenuPere().
*
* @param integer identifiant du menu.
* @return boolean renvoi l'id du dernier menu frère sinon faux.
*/
function GEN_donnerDernierFreres($id_menu)
{
// Initialisation des variables.
global $db;
 
$requete = 'SELECT gmr_id_menu_01 '.
'FROM gen_menu_relation '.
'WHERE gmr_id_menu_02 = '.GEN_lireIdentifiantMenuPere($id_menu).' '.
'AND gmr_id_valeur = 1 '.
'AND gmr_id_menu_01 <> '.$id_menu.' '.
'ORDER BY gmr_ordre DESC';
 
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
 
$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
if ($resultat->numRows() > 0) {
return $ligne->gmr_id_menu_01;
} else {
return false;
}
}
 
/** Fonction GEN_etreFreres() - Renvoie vrai si les menus ont le même père.
*
* Cette fonction regarde si deux menus donnés sont frères dans l'arbre
* des menus. Nous regardons si les menus ont le même identifiant comme père.
*
* @param integer identifiant du premier menu.
* @param integer identifiant du seconde menu.
* @return boolean renvoi vrai si les deux menus sont frères sinon faux.
*/
function GEN_etreFreres($id_menu_1, $id_menu_2)
{
// Initialisation des variables.
global $db;
 
$requete = 'SELECT gmr_id_menu_02 '.
'FROM gen_menu_relation '.
'WHERE gmr_id_menu_01 = '.$id_menu_1.' '.
'AND gmr_id_valeur = 1 ';
 
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
 
$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
$id_pere_1 = $ligne->gmr_id_menu_02;
$resultat->free();
 
$requete = 'SELECT gmr_id_menu_02 '.
'FROM gen_menu_relation '.
'WHERE gmr_id_menu_01 = '.$id_menu_2.' '.
'AND gmr_id_valeur = 1 ';
 
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
 
$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
$id_pere_2 = $ligne->gmr_id_menu_02;
$resultat->free();
 
return ($id_pere_1 == $id_pere_2);
}
 
/** Fonction GEN_etreAncetre() - Renvoie vrai si le premier argument (identifiant de menu) est un ancètre du second.
*
* Nous récupérons l'identifiant du père du menu passé en argument numéro 2. Puis,
* nous le comparons à l'argument 1. Si c'est les même on retourne faux. Sinon on rapelle
* la fonction avec l'identifiant du père trouvé pour l'argument 2. Ainsi de suite jusqu'a
* renvoyé vrai où tomber sur un menu racine (idetifiant du père = 0).
* Si les variable sont null nous retournons false.
* C'est une fonction récursive.
*
* @param integer identifiant d'un menu numéro 1.
* @param integer identifiant d'un menu numéro 2.
* @return boolean vrai si le menu numéro 1 est ancètre du second.
*/
function GEN_etreAncetre($id_menu_1, $id_menu_2)
{
//Test erreur
if (is_null($id_menu_1) || is_null($id_menu_2)) {
return false;
}
 
// Initialisation des variables.
global $db;
 
$requete = 'SELECT gmr_id_menu_02 '.
'FROM gen_menu_relation '.
'WHERE gmr_id_menu_01 = '.$id_menu_2.' '.
'AND gmr_id_valeur = 1 ';
 
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die (BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
 
$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
$resultat->free();
if (isset($ligne)) {
if ($ligne->gmr_id_menu_02 == 0) {
return false;
} else if ($ligne->gmr_id_menu_02 == $id_menu_1) {
return true;
} else {
return GEN_etreAncetre($id_menu_1, $ligne->gmr_id_menu_02);
}
}
}
 
/** Fonction GEN_lireIdentifiantMenuAncetre() - Renvoie l'identifiant du menu ancètre du menu passé en paramètre.
*
* Cette fonction parcours la table gen_menu_relation et retourne l'identifiant du
* menu dont le père est le menu racine (identifiant = 0) pour le menu passé en paramètre.
*
* @global mixed objet Pear DB de connexion à la base de données..
* @param int identifiant du menu dont il faut rechercher le père.
* @return int identifiant du menu ancètre du menu passé en paramètre.
*/
function GEN_lireIdentifiantMenuAncetre($id_menu)
{
global $db;
// On teste si on est au niveau d'un menu racine i.e GM_ID_PERE=0
$requete = 'SELECT gmr_id_menu_02 '.
'FROM gen_menu_relation '.
'WHERE gmr_id_menu_01 = '.$id_menu.' '.
'AND gmr_id_valeur = 1 ';// 1 = avoir "père"
 
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
 
$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
$resultat->free();
 
// Dans le cas où le menu en paramètre est un menu racine
if ($ligne->gmr_id_menu_02 == 0) {
return $id_menu;
}
 
return GEN_lireIdentifiantMenuAncetre($ligne->gmr_id_menu_02);
}
 
/** Fonction GEN_lireIdentifiantMenuPere() - Renvoie l'identifiant du père du menu passé en paramètre.
*
* Cette fonction parcours la table gen_menu_relation et retourne l'identifiant du
* menu père du menu passé en paramètre.
*
* @global mixed objet Pear DB de connexion à la base de données..
* @param int l'identifiant du fils
* @param mixed une instance de la classse Pear DB.
* @return mixed l'identifiant du père,ou false en cas d'erreur.
*/
function GEN_lireIdentifiantMenuPere($id_menu, $db = null)
{
if (is_null($db)) {
$db =& $GLOBALS['_GEN_commun']['pear_db'];
}
 
$requete = 'SELECT gmr_id_menu_02 '.
'FROM gen_menu_relation '.
'WHERE gmr_id_menu_01 = '.$id_menu.' '.
'AND gmr_id_valeur = 1 ';// 1 = avoir "père"
 
$resultat = $db->getOne($requete) ;
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
 
return $resultat;
}
 
/** Fonction GEN_lireInfoMenu() - Renvoie un objet ou un tableau contenant une ligne de la table gen_menu
*
* Retourne la ligne de la table gen_menu concernant le menu ayant pour identifiant la valeur
* passée en paramètre.
* Ancien nom : getLevel()
*
* @param mixed une instance de la classse Pear DB.
* @param int l'identifiant d'un menu.
* @param string le mode dans Pear DB dans lequel on veut recevoir les infos du menu.
* @return mixed un objet ou tableau résultat de Pear DB contenant une ligne de la table gen_menu, ou false en cas d'erreur.
*/
function GEN_lireInfoMenu(&$db, $id_menu, $mode = DB_FETCHMODE_OBJECT)
{
 
//----------------------------------------------------------------------------
// Recherche des informations sur le menu
$requete = 'SELECT * '.
'FROM gen_menu '.
'WHERE gm_id_menu = '.$id_menu;
 
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
 
if ($resultat->numRows() != 1) {
return false;
}
 
//----------------------------------------------------------------------------
// Récupération des infos
$info_menu = $resultat->fetchRow($mode);
$resultat->free();
 
return $info_menu;
}
/** Fonction GEN_retournerMenuCodeNum() - Renvoie le code num d'un menu en fonction du code Alphanumérique
*
* Retourne le code numérique d'un menu en fonction du code alphanumérique.
*
* @param mixed une instance de la classse Pear DB.
* @param string le code alphanumérique d'un menu.
* @return mixed le code numérique du menu sinon false.
*/
function GEN_retournerMenuCodeNum(&$db, $code_alphanum)
{
//----------------------------------------------------------------------------
// Recherche des informations sur le menu
$requete = 'SELECT gm_code_num '.
'FROM gen_menu '.
'WHERE gm_code_alpha = "'.$code_alphanum.'"';
 
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
 
if ($resultat->numRows() != 1) {
return false;
}
 
//----------------------------------------------------------------------------
// Récupération des infos
$info_menu = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
$code_num = $info_menu->gm_code_num;
$resultat->free();
 
return $code_num;
}
 
/** Fonction GEN_retournerMenuCodeAlpha() - Renvoie le code alphanumérique d'un menu en fonction du code numérique
*
* Retourne le code alphanumérique d'un menu en fonction du code numérique.
*
* @param mixed une instance de la classse Pear DB.
* @param string le code numérique d'un menu.
* @return mixed le code alphanumérique du menu sinon false.
*/
function GEN_retournerMenuCodeAlpha(&$db, $code_num)
{
//----------------------------------------------------------------------------
// Recherche des informations sur le menu
$requete = 'SELECT gm_code_alpha '.
'FROM gen_menu '.
'WHERE gm_code_num = '.$code_num;
 
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
 
if ($resultat->numRows() != 1) {
return false;
}
 
//----------------------------------------------------------------------------
// Récupération des infos
$info_menu = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
$code_alphanum = $info_menu->gm_code_alpha;
$resultat->free();
 
return $code_alphanum;
}
 
/** Fonction GEN_lireContenuMenu() - Renvoie un objet ou un tableau contenant une ligne de la table gen_menu_contenu
*
* Retourne la ligne de la table gen_menu_contenu concernant le menu ayant pour identifiant la valeur
* passée en paramètre. Seul la dernière version du contenu du menu est retourné.
*
* @param mixed une instance de la classse Pear DB.
* @param int l'identifiant d'un menu.
* @param string le mode dans Pear DB dans lequel on veut recevoir les infos du menu.
* @return mixed un objet ou tableau résultat de Pear DB contenant une ligne de la table gen_menu_contenu, ou false en cas d'erreur.
*/
function GEN_lireContenuMenu(&$db, $id_menu, $mode = DB_FETCHMODE_OBJECT)
{
//----------------------------------------------------------------------------
// Gestion des erreurs
 
//----------------------------------------------------------------------------
// Recherche des informations sur le menu
$requete = 'SELECT * '.
'FROM gen_menu_contenu '.
'WHERE gmc_ce_menu = '.$id_menu.' '.
'AND gmc_bool_dernier = 1';
 
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
 
if ($resultat->numRows() != 1) {
return false;
}
 
//----------------------------------------------------------------------------
// Récupération des infos
$info_menu = $resultat->fetchRow($mode);
$resultat->free();
 
return $info_menu;
}
 
/** Fonction GEN_retournerMenus() - Renvoie un tableau contenant les id de l'ensemble des menus
*
* Retourne un tableau contenant les id de l'ensemble des menus des différents sites de Papyrus.
*
* @param mixed une instance de la classse Pear DB.
* @return array tableau contenant les id de chaque menu.
*/
function GEN_retournerMenus(&$db)
{
//----------------------------------------------------------------------------
// Gestion des erreurs
 
//----------------------------------------------------------------------------
// Recherche des informations sur le menu
$requete = 'SELECT gm_id_menu '.
'FROM gen_menu ';
 
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
 
//----------------------------------------------------------------------------
// Récupération des infos
$tab_retour = array();
while ($info_menu = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
array_push($tab_retour, $info_menu->gm_id_menu);
}
$resultat->free();
 
return $tab_retour;
}
 
/** Fonction GEN_lireInfoMenuRelation() - Renvoie un objet ou un tableau contenant une ligne de la table gen_menu_relation
*
* Par défaut recherche une relation de type père.
* Ancien nom : getMenuRelation().
*
* @param mixed Une instance de la classse PEAR_DB
* @param int l'identifiant d'un menu.
* @param int l'identifiant d'une valeur de relation.
* @param string le mode dans Pear DB dans lequel on veut recevoir les infos du menu.
* @return mixed un objet ou tableau résultat Pear DB, ou false en cas d'erreur.
*/
function GEN_lireInfoMenuRelation(&$db, $menuid, $id_valeur = 1, $mode = DB_FETCHMODE_OBJECT)
{
//----------------------------------------------------------------------------
// Recherche des informations sur la relation de menu
$requete = 'SELECT * '.
'FROM gen_menu_relation '.
'WHERE gmr_id_menu_01 = '.$menuid.' '.
'AND gmr_id_valeur = '.$id_valeur;
 
$result = $db->query($requete);
(DB::isError($result)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $result->getMessage(), $requete)) : '';
 
if ($result->numRows() != 1) {
return false;
}
 
//----------------------------------------------------------------------------
// Récupération des infos
$info_menu_relation = $result->fetchRow($mode);
$result->free();
 
return $info_menu_relation;
}
 
/** Fonction GEN_verifierPresenceCodeMenu() - Vérifie l'existence d'un code de menu
*
* Permet de vérifier dans la base de données si le code fournie (alphanumérique ou numérique) a déjà
* été attribué à un menu ou pas!
*
* @param mixed Une instance de la classse PEAR_DB
* @param string le type du code (int ou string).
* @param integer l'identifiant du menu courant.
* @param mixed le code numérique ou alphanumérique.
* @return mixed retourne l'identifiant du menu possédant le code sinon false.
*/
function GEN_verifierPresenceCodeMenu(&$db, $type, $id_menu, $code)
{
// Gestion des erreurs
if ($code == '') {
return true;
}
 
// Requete pour vérifier l'abscence du code numérique et alphanumérique de la table gen_menu
$requete = 'SELECT gm_id_menu '.
'FROM gen_menu '.
'WHERE gm_id_menu <> '.$id_menu.' ';
 
// Complément de requête en fonction du type de code
if ($type == 'int') {
$requete .= 'AND gm_code_num = '.$code;
} else {
$requete .= 'AND gm_code_alpha = "'.$code.'"';
}
$resultat = $db->query($requete);
if (DB::isError($resultat)) {
die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
}
$nombre_reponse = $resultat->numRows();
if ($nombre_reponse >= 1) {
return true;
} else {
return false;
}
}
/** Fonction GEN_lireInfoMenuMotsCles() - Renvoie un objet ou un tableau contenant des lignes de la table gen_menu
*
* Renvoie un objet ou un tableau contenant une ligne de la table gen_menu en fonction des mots clés présents dans
* la table gen_menu.
*
* @param mixed Une instance de la classse PEAR_DB
* @param array un tableau de mots clés.
* @param string la condition séparant chaque rechercher de mots-clés (AND ou OR).
* @param string l'ordre d'affichage des Menus (ASC ou DESC).
* @param string le mode dans Pear DB dans lequel on veut recevoir les infos du menu.
* @param boolean true pour grouper les résultats (voir Pear DB : getAssoc() ) sinon false.
* @return mixed un objet ou tableau résultat Pear DB, ou false en cas d'erreur.
*/
function GEN_lireInfoMenuMotsCles(&$db, $tab_mots, $condition = 'OR', $ordre = 'ASC', $mode = DB_FETCHMODE_OBJECT, $groupe = false)
{
//----------------------------------------------------------------------------
// Recherche des informations sur les menus en fonctions des mots clés
$requete = 'SELECT DISTINCT * '.
'FROM gen_menu '.
'WHERE ';
for ($i = 0; $i < count($tab_mots); $i++) {
if ($i == 0) {
$requete .= 'gm_mots_cles LIKE "%'.$tab_mots[$i].'%" ';
} else {
$requete .= $condition.' gm_mots_cles LIKE "%'.$tab_mots[$i].'%" ';
}
}
$requete .= 'ORDER BY gm_date_creation '.$ordre;
$aso_info =& $db->getAssoc($requete, false, array(), $mode, $groupe);
(PEAR::isError($aso_info)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $aso_info->getMessage(), $requete)) : '';
 
return $aso_info;
}
 
/** Fonction GEN_lireInfoMenuMeta() - Renvoie un objet ou un tableau contenant des lignes de la table gen_menu
*
* Renvoie un objet ou un tableau contenant une ligne de la table gen_menu en fonction des mots clés,
* catégories, id_menu,
* la table gen_menu.
*
* @param mixed Une instance de la classse PEAR_DB
* @param array un tableau de mots clés.
* @param string la condition séparant chaque rechercher de mots-clés (AND ou OR).
* @param string l'ordre d'affichage des Menus (ASC ou DESC).
* @param string le mode dans Pear DB dans lequel on veut recevoir les infos du menu.
* @param boolean true pour grouper les résultats (voir Pear DB : getAssoc() ) sinon false.
* @return mixed un objet ou tableau résultat Pear DB, ou false en cas d'erreur.
*/
function GEN_lireInfoMenuMeta(&$db, $tab_mots, $tab_cat, $condition = 'OR', $condition2="OR", $ordre = 'ASC', $mode = DB_FETCHMODE_OBJECT, $groupe = false)
{
//----------------------------------------------------------------------------
// Recherche des informations sur les menus en fonctions des mots clés
$requete = 'SELECT DISTINCT * '.
'FROM gen_menu '.
'WHERE ';
for ($i = 0; $i < count($tab_mots); $i++) {
if ($i == 0) {
$requete .= 'gm_mots_cles LIKE "%'.$tab_mots[$i].'%" ';
} else {
$requete .= $condition.' gm_mots_cles LIKE "%'.$tab_mots[$i].'%" ';
}
}
if (count($tab_mots) != 0) $requete .= 'AND ' ;
for ($i = 0; $i < count($tab_cat); $i++) {
if ($i == 0) {
$requete .= 'gm_categorie LIKE "%'.$tab_cat[$i].'%" ';
} else {
$requete .= $condition2.' gm_categorie LIKE "%'.$tab_cat[$i].'%" ';
}
}
$requete .= 'ORDER BY gm_date_creation '.$ordre;
$aso_info =& $db->getAssoc($requete, false, array(), $mode, $groupe);
(PEAR::isError($aso_info)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $aso_info->getMessage(), $requete)) : '';
 
return $aso_info;
}
/** Fonction GEN_lireInfoMenuCategorie() - Renvoie un objet ou un tableau contenant des lignes de la table gen_menu
*
* Renvoie un objet ou un tableau contenant une ligne de la table gen_menu en fonction des catégories présentes dans
* la table gen_menu.
*
* @param mixed Une instance de la classse PEAR_DB
* @param array un tableau de catégorie(s).
* @param string le mode dans Pear DB dans lequel on veut recevoir les infos du menu.
* @param boolean true pour grouper les résultats (voir Pear DB : getAssoc() ) sinon false.
* @return mixed un objet ou tableau résultat Pear DB, ou false en cas d'erreur.
*/
function GEN_lireInfoMenuCategorie(&$db, $tab_categories, $mode = DB_FETCHMODE_OBJECT, $groupe = false)
{
//----------------------------------------------------------------------------
// Recherche des informations sur les menus en fonctions des mots clés
$requete = 'SELECT DISTINCT * '.
'FROM gen_menu '.
'WHERE ';
for ($i = 0; $i < count($tab_categories); $i++) {
if ($i == 0) {
$requete .= 'gm_categorie LIKE "%'.$tab_categories[$i].'%" ';
} else {
$requete .= 'OR gm_categorie LIKE "%'.$tab_categories[$i].'%" ';
}
}
$aso_info =& $db->getAssoc($requete, false, array(), $mode, $groupe);
(PEAR::isError($aso_info)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $aso_info->getMessage(), $requete)) : '';
 
return $aso_info;
}
/** Fonction GEN_lireInfoMenuContenuDate() - Renvoie un objet ou un tableau contenant des lignes de la table gen_menu
*
* Renvoie un objet ou un tableau contenant une ligne de la table gen_menu en fonction des catégories présentes dans
* la table gen_menu.
*
* @param mixed Une instance de la classse PEAR_DB
* @param array le type de modification.
* @param array le code alphanumérique du site ou de plusieurs sites séparés par des virgules.
* @param string le mode dans Pear DB dans lequel on veut recevoir les infos du menu.
* @param boolean true pour grouper les résultats (voir Pear DB : getAssoc() ) sinon false.
* @return mixed un objet ou tableau résultat Pear DB, ou false en cas d'erreur.
*/
function GEN_lireInfoMenuContenuDate(&$db, $type_modif = '', $site = '', $categorie='', $mode = DB_FETCHMODE_OBJECT, $groupe = false)
{
$type_modif_sql = 'AND gmc_ce_type_modification IN (%s) ';
if (!empty($type_modif)) {
$type_modif = sprintf($type_modif_sql, $type_modif);
} else {
$type_modif = sprintf($type_modif_sql, '1, 2');
}
$site_sql = 'AND gs_code_alpha IN (%s) ';
if (!empty($site)) {
$site = sprintf($site_sql, '"'.implode('", "', array_map('trim', explode(',', $site))).'"');
} else {
$site = '';
}
 
if (!empty($categorie)) {
$categorie = 'AND gm_categorie like "%'.$categorie.'%"' ;
} else {
$categorie = '';
}
// Recherche des informations sur les menus en fonctions des mots clés
$requete = 'SELECT DISTINCT gen_menu.*, gs_code_alpha, gmc_date_modification, gmc_resume_modification, gmc_ce_type_modification '.
'FROM gen_site, gen_menu, gen_menu_contenu '.
'WHERE gmc_date_modification <= "'.date('Y-m-d H:i:s', time()).'" '.
'AND (gm_ce_site = gs_id_site OR gm_ce_site = 0) '.
'AND gm_id_menu = gmc_ce_menu '.
'AND gmc_bool_dernier = 1 '.
$site.
$type_modif.
$categorie.
'ORDER BY gmc_date_modification DESC';
 
$aso_info =& $db->getAssoc($requete, false, array(), $mode, $groupe);
(PEAR::isError($aso_info)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $aso_info->getMessage(), $requete)) : '';
 
return $aso_info;
}
/** Fonction GEN_retournerTableauMenusSiteCodeAlpha() - Renvoie un tableau de tableau contenant des lignes de la table gen_menu
*
* Renvoie un tableau de tableau contenant les lignes de la table gen_menu pour un site donné. Les tableaux sont imbriquées
* pour reproduire l'arborescence des menus.
*
* @param mixed Une instance de la classse PEAR_DB
* @param string le code alphanumérique du site.
* @return array un tableau de tableau contenant des lignes de la table gen_menu.
*/
function GEN_retournerTableauMenusSiteCodeAlpha(&$db, $site, $id_pere = 0, $aso_site_menus = array())
{
 
$requete = 'SELECT gen_menu.* '.
'FROM gen_site, gen_menu, gen_menu_relation AS GMR01, gen_menu_relation AS GMR02 '.
'WHERE GMR01.gmr_id_menu_02 = '.$id_pere.' '.
'AND GMR01.gmr_id_menu_01 = gm_id_menu '.
'AND gs_code_alpha = "'.$site.'" '.
'AND gm_ce_site = gs_id_site '.
'AND GMR01.gmr_id_valeur = 1 '.// 1 = avoir "père"
'AND GMR02.gmr_id_menu_02 = gm_id_menu '.
'AND GMR02.gmr_id_menu_01 = GMR02.gmr_id_menu_02 '.
'AND GMR02.gmr_id_valeur = 100 '.// 100 = type "menu classique"
'ORDER BY GMR01.gmr_ordre ASC';
$resultat = $db->query($requete);
if (DB::isError($resultat)) {
die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));
}
 
if ($resultat->numRows() > 0) {
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_ASSOC)) {
$aso_site_menus[$ligne['gm_id_menu']] = $ligne;
$aso_site_menus[$ligne['gm_id_menu']]['sous_menus'] = GEN_retournerTableauMenusSiteCodeAlpha($db, $site, $ligne['gm_id_menu']);
}
}
return $aso_site_menus;
}
 
 
// Code menu --> Identifiant
// Identifiant menu --> Identifiant version originale
// Identifiant menu --> Identifiant version par défaut
// Identifiant menu --> Contenu
// Identifiant menu --> Contenu version originale
// Identifiant menu --> Contenu version par défaut
 
// Identifiant menu --> Identifiant version originale
 
/** Fonction GEN_rechercheMenuIdentifiant() - Recherche code menu à partir de l'identifiant d'un site
*
*
* @param object objet Pear de connection à la base de données.
*/
 
function GEN_rechercheMenuIdentifiant($db, $id_menu) {
$requete = 'SELECT gm_code_num '.
'FROM gen_menu '.
'WHERE gm_id_menu = '.$id_menu.' ';
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
 
 
$ligne = $resultat->fetchrow(DB_FETCHMODE_OBJECT);
return $ligne->gm_code_num;
}
 
/** Fonction GEN_rechercheMenuCode() - Recherche identifiant à partir du code menu d'un site et en fonction de la langue
*
*
* @param object objet Pear de connection à la base de données.
* @param code menu
* @return identifiant menu
*/
 
function GEN_rechercheMenuCode($db, $code_menu) {
 
// Si identifiant existe pour la langue choisie : retour identifiant
// Si identifiant n'existe pas : retour identifiant de la langue par defaut :
// Recherche de l'identifiant par defaut
// Recherche de l'identifiant de la langue du site
// Recherche de l'identifiant par defaut
$id_langue = $GLOBALS['_GEN_commun']['i18n'];
if (isset($id_langue) && ($id_langue!='')) {
$langue_test=$id_langue;
} else {
$langue_test=GEN_I18N_ID_DEFAUT;
}
$requete = 'SELECT gm_id_menu, gm_code_num '.
'FROM gen_menu '.
'WHERE gm_code_num = '.$code_menu.' '.
'AND gm_ce_i18n = "'.$langue_test.'" ';
$resultat = $db->query($requete);
 
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
if ( $resultat->numRows() > 0 ) {
$ligne = $resultat->fetchrow(DB_FETCHMODE_OBJECT);
return $ligne->gm_id_menu;
}
else {
// Recherche defaut :
 
$requete = 'SELECT gm_id_menu, gm_code_num '.
'FROM gen_menu '.
'WHERE gm_code_num = '.$code_menu.' ';
'AND gm_ce_i18n = "'.GEN_I18N_ID_DEFAUT.'" ';
$resultat = $db->query($requete);
 
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
if ( $resultat->numRows() > 0 ) {
$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
if ($langue_test!=GEN_I18N_ID_DEFAUT) {
return GEN_rechercheMenuIdentifiantVersionParDefaut($db,$ligne->gm_id_menu);
}
else {
return $ligne->gm_id_menu;
}
}
}
 
 
}
 
/* Fonction GEN_rechercheContenu
*
*/
function GEN_rechercheContenu($db,$id_menu,$type_fetch=DB_FETCHMODE_OBJECT) {
$requete = 'SELECT gmc_contenu , gmc_ce_type_contenu, gmc_ce_menu '.
'FROM gen_menu_contenu '.
'WHERE gmc_ce_menu = '.$id_menu.' '.
'AND gmc_ce_type_contenu in (1,2) '.
'AND gmc_bool_dernier = 1';
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
// Rien trouvé ? : Pas encore de contenu
// Recherche identifiant par défaut
if ( $resultat->numRows() == 0 ) {
 
$id_menu_defaut=GEN_rechercheMenuIdentifiantVersionParDefaut($db,$id_menu);
$requete = 'SELECT gmc_contenu , gmc_ce_type_contenu, gmc_ce_menu '.
'FROM gen_menu_contenu '.
'WHERE gmc_ce_menu = '.$id_menu_defaut.' '.
'AND gmc_ce_type_contenu in (1,2) '.
'AND gmc_bool_dernier = 1';
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
 
if ( $resultat->numRows() == 0 ) {
// Toujours rien ?
// Tentative recherche dans la langue du site par defaut
$id_menu_origine=GEN_rechercheMenuIdentifiantVersionOriginale($db,$id_menu);
$requete = 'SELECT gmc_contenu , gmc_ce_type_contenu, gmc_ce_menu '.
'FROM gen_menu_contenu '.
'WHERE gmc_ce_menu = '.$id_menu_origine.' '.
'AND gmc_ce_type_contenu in (1,2) '.
'AND gmc_bool_dernier = 1';
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
}
}
$ligne_contenu = $resultat->fetchRow($type_fetch);
 
return $ligne_contenu;
 
}
 
/** Fonction GEN_rechercheMenuIdentifiantVersionOriginale() - Recherche identifiant de la version orginale d'un menu
*
*
* @param object objet Pear de connection à la base de données.
* @param identifiant menu
* @return identifiant menu
*/
 
function GEN_rechercheMenuIdentifiantVersionOriginale($db, $id_menu) {
$requete = 'SELECT gmr_id_menu_01 '.
'FROM gen_menu_relation '.
'WHERE gmr_id_menu_02 = ' . $id_menu .' '.
'AND gmr_id_valeur = 2 '; // 2 = "avoir traduction"
$resultat = $db->query($requete) ;
if (DB::isError($resultat)) {
die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
}
if ($resultat->numRows() > 0) {
$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
return $ligne->gmr_id_menu_01;
}
else {
return $id_menu;
}
}
 
/** Fonction GEN_rechercheMenuIdentifiantVersionParDefaut() - Recherche identifiant par defaut d'un menu
*
*
* @param object objet Pear de connection à la base de données.
* @param identifiant menu
* @return identifiant menu
*/
 
 
function GEN_rechercheMenuIdentifiantVersionParDefaut($db, $id_menu) {
 
$identifiantVersionOrginale=GEN_rechercheMenuIdentifiantVersionOriginale($db, $id_menu);
 
$requete = 'SELECT gmr_id_menu_02 '.
'FROM gen_menu_relation '.
'WHERE gmr_id_menu_01 = ' . $identifiantVersionOrginale .' '.
'AND gmr_id_valeur = 105 '; // 105
$resultat = $db->query($requete) ;
if (DB::isError($resultat)) {
die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
}
if ($resultat->numRows() > 0) {
$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
return $ligne->gmr_id_menu_02;
}
else {
return $identifiantVersionOrginale;
}
 
}
 
 
 
 
/* +--Fin du code ---------------------------------------------------------------------------------------+
* $Log: not supported by cvs2svn $
* Revision 1.26 2006/03/02 10:49:49 ddelon
* Fusion branche multilinguisme dans branche principale
*
* Revision 1.25.2.1 2005/12/20 14:40:24 ddelon
* Fusion Head vers Livraison
*
* Revision 1.25 2005/11/08 17:43:46 ddelon
* Bug Nouveaute ne s'affichant pas pour les menu communs
*
* Revision 1.24 2005/09/20 17:01:22 ddelon
* php5 et bugs divers
*
* Revision 1.23 2005/08/29 09:05:12 ddelon
* Suppression message debug
*
* Revision 1.22 2005/07/08 15:16:37 alexandre_tb
* ajout de la fonction GEN_lireInfoMenuMeta() qui permet de sélectionner des menus en fonction de leur mot clé et leur catégorie
*
* Revision 1.21 2005/06/08 19:11:43 jpm
* Ajout de ordre et condition pour la fonction de lecture des infos sur les menus.
*
* Revision 1.20 2005/05/26 08:00:51 jpm
* Correction dans la fonction GEN_retournerTableauMenusSiteCodeAlpha().
*
* Revision 1.19 2005/05/25 13:46:58 jpm
* Changement du sql de la fonction GEN_lireContenuMenu().
*
* Revision 1.18 2005/04/19 17:21:19 jpm
* Utilisation des références d'objets.
*
* Revision 1.17 2005/04/18 16:41:25 jpm
* Ajout d'une fonction pour récupérer tous les menus d'un site avec son code alphanumérique.
*
* Revision 1.16 2005/04/14 17:40:31 jpm
* Modification fonction pour les actions.
*
* Revision 1.15 2005/04/14 13:56:53 jpm
* Modification d'une ancienne fonction.
*
* Revision 1.14 2005/04/12 16:13:50 jpm
* Ajout de fonction renvoyant des infos sur un menu en fonction des mots clés, catégories ou date de modification du contenu.
*
* Revision 1.13 2005/03/30 08:53:59 jpm
* Ajout de fonctions permettant de récupérer les codes alphanumériques ou numériques en fonction de l'un ou de l'autre.
*
* Revision 1.12 2005/02/28 11:12:03 jpm
* Modification des auteurs.
*
* Revision 1.11 2004/12/06 19:49:35 jpm
* Ajout d'une fonction permettant de récupérer le contenu d'un menu.
*
* Revision 1.10 2004/12/06 17:53:55 jpm
* Ajout fonction GEN_retournerMenus().
*
* Revision 1.9 2004/11/29 18:34:42 jpm
* Correction bogue.
*
* Revision 1.8 2004/11/10 17:25:51 jpm
* Modification de fonction suite à des bogues.
*
* Revision 1.7 2004/11/09 17:55:26 jpm
* Suppresion de fonctions inutiles et mise en conformité.
*
* Revision 1.6 2004/11/08 17:39:32 jpm
* Suppression d'une fonction inutile.
* GEN_etreFils() n'est pas utile. On peut utiliser GEN_etreAncetre() à la place.
*
* Revision 1.5 2004/11/04 12:51:45 jpm
* Suppression de message de débogage.
*
* Revision 1.4 2004/11/04 12:23:50 jpm
* Nouvelles fonctions sur les menus frères.
*
* Revision 1.3 2004/10/25 14:16:21 jpm
* Suppression de code commenté.
*
* Revision 1.2 2004/10/21 18:15:21 jpm
* Ajout de gestion d'erreur aux fonctions.
*
* Revision 1.1 2004/06/15 15:11:37 jpm
* Changement de nom et d'arborescence de Genesia en Papyrus.
*
* Revision 1.43 2004/05/05 06:13:27 jpm
* Extraction de la fonction générant le "vous êtes ici", transformée en applette.
*
* Revision 1.42 2004/05/04 16:24:06 jpm
* Amélioration de la fonction générant le "vous êtes ici".
*
* Revision 1.41 2004/05/04 16:17:31 jpm
* Ajout de la fonction générant le "vous êtes ici".
*
* Revision 1.40 2004/05/03 11:18:17 jpm
* Normalisation de deux fonctions issues du fichier fontctions.php.
*
* Revision 1.39 2004/05/01 16:17:11 jpm
* Suppression des fonctions liées à la création des listes de menu. Elles ont été transformées en applette.
*
* Revision 1.38 2004/05/01 11:43:16 jpm
* Suppression des fonction GEN_afficherMenuCommun() et GEN_afficherSelecteurSites() transformées en applette.
*
* Revision 1.37 2004/04/30 16:18:41 jpm
* Correction d'un bogue dans les fonctions de gestion des scripts.
*
* Revision 1.36 2004/04/28 12:04:40 jpm
* Changement du modèle de la base de données.
*
* Revision 1.35 2004/04/09 16:23:41 jpm
* Prise en compte des tables i18n.
*
* Revision 1.34 2004/04/02 16:34:44 jpm
* Extraction de variable globale des fonction, remplacé par un passage en paramètre.
*
* Revision 1.33 2004/04/01 11:24:51 jpm
* Ajout et modification de commentaires pour PhpDocumentor.
*
* Revision 1.32 2004/03/31 16:52:30 jpm
* Modification du code vis à vis du modèle revision 1.9 de Génésia.
*
* Revision 1.31 2004/03/29 17:13:05 jpm
* Suppression de fonction, passer en code classique.
*
* Revision 1.30 2004/03/27 11:11:58 jpm
* Début changement nom de variable dans fonction creerInfoPageEtApplication().
*
* Revision 1.29 2004/03/26 12:52:25 jpm
* Ajout des fonctions creerInfoPageEtApplication() et donnerIdPremiereApplicationLiee().
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/bibliotheque/fonctions/pap_script.fonct.php
New file
0,0 → 1,231
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library 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 |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: pap_script.fonct.php,v 1.3 2005-02-28 11:12:03 jpm Exp $
/**
* Les fonctions permettant d'inclure des scripts.
*
* Ces fonctions permettent d'inclure des scripts, éxécuté côté client, directement dans les pages
* des applications. Elles peuvent donc être appelées par les applications
* intégrées à Génésia. Par défaut, c'est le Javascript qui est conscidéré commé utilisé.
*
*@package Papyrus
*@subpackage Fonctions
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author Alexandre GRANIER <alexandre@tela-botanica.org>
*@author Laurent COUDOUNEAU <lc@gsite.org>
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.3 $ $Date: 2005-02-28 11:12:03 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | LISTE de FONCTIONS |
// +------------------------------------------------------------------------------------------------------+
 
/** Fonction GEN_modifierTypeScript() - Permet de stocker le type des scripts.
*
* Papyrus permet à une application donnée d'intégrer du code de scripts, exécuté côté client,
* directement dans l'entête de la page. Cette fonction définit le type Mime du langage de script utilisé.
* En XHTML strict, cette fonction ne devrait pas être utilisé car les scripts devraient être
* stocké dans des fichiers séparés.
*
* @deprecated déprécier dans le cadre d'application XHTML.
* @global string "script_type" : utilisé pour stocker le type des scripts intégrés.
* @param string le code à insérer.
* @return void le code est stocké dans une variable globale.
*/
function GEN_modifierTypeScript($type = 'text/javascript')
{
global $_GEN_commun;
$_GEN_commun['script_type'] .= $type;
}
 
/** Fonction GEN_stockerCodeScript() - Permet de stocker le code d'un script côté client utilisé par une application.
*
* Papyrus permet à une application donnée de stocker du code de script, exécuté côté client, qui sera
* envoyer directement dans l'entête de la page. En XHTML strict, l'utilisation de cette
* fonction est déconseillée. Utiliser plutôt une fichier de scripts séparé qui
* sera appelé par l'entête. Cette fonction peut être appelé plusieurs fois. Elle ne
* fait que stocker le code dans une variable globale utilisée par Génésia.
*
* @deprecated déprécier dans le cadre d'application XHTML.
* @global string "script_code" : utilisé pour stocker le code des scripts.
* @param string le code à insérer.
* @return void le code est stocké dans une variable globale.
*/
function GEN_stockerCodeScript($bloc_code)
{
global $_GEN_commun;
$_GEN_commun['script_code'] .= $bloc_code;
}
 
/** Fonction GEN_stockerFonctionScript() - Permet de stocker des fonctions Javascript.
*
* Papyrus permet à une application donnée de stocker des fonctions dans un langage de script donné
* qui seront envoyer directement dans l'entête de la page. En XHTML strict, l'utilisation de cette
* fonction est déconseillée. Utiliser plutôt une fichier de scripts séparé qui
* sera appelé par l'entête. Cette fonction peut être appelé plusieurs fois. Elle ne
* fait que stocker les fonctions dans une variable (tableau associatif) globale utilisée
* par Génésia.
*
* @deprecated déprécier dans le cadre d'application XHTML.
* @global array "script_fonction" : utilisé pour stocker le code des fontions du script.
* @param string la clé du tableau de fontion, par exemple le nom de la fonction à insérer.
* @param string le code complet de la fonction à insérer.
* @return void la fonction est stockée dans une variable (tableau associatif) globale.
*/
function GEN_stockerFonctionScript($id_fonction, $code_fonction)
{
global $_GEN_commun;
if (empty($_GEN_commun['script_fonction'][$id_fonction])) {
$_GEN_commun['script_fonction'][$id_fonction] = $code_fonction;
} else {
if (GEN_DEBOGAGE) {
$_GEN_commun['debogage_info'] .=
'ERREUR Papyrus : cet identifiant de fonction à déjà été enregistré par GEN_stockerFonctionJavascript(). <br />'.
'Identifiant : '. $id_fonction .'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier : '. __FILE__;
}
}
}
 
/** Fonction GEN_stockerFichierScript() - Permet de stocker des fichiers de scripts.
*
* Papyrus permet à une application donnée de stocker des fichiers de script qui seront
* appelés depuis l'entête de la page. En XHTML strict, l'utilisation de cette
* fonction est conseillée.
* Cette fonction peut être appelé plusieurs fois. Elle ne fait que stocker les chemin des
* fichiers dans une variable (tableau associatif) globale utilisée par Papyrus.
*
* @global array "script_fichier" : utilisé pour stocker les chemins des scripts.
* @param string la clé du tableau de fichiers, par exemple le nom du fichier à insérer.
* @param string le chemin complet du fichier à insérer.
* @param string le type MIME du langage de script utilisé dans le fichier à insérer.
* @return void le chemin du fichier est stocké dans une variable (tableau associatif) globale.
*/
function GEN_stockerFichierScript($id_fichier, $chemin_fichier, $type_fichier = 'text/javascript')
{
global $_GEN_commun;
if (empty($_GEN_commun['script_fichier'][$id_fichier])) {
$_GEN_commun['script_fichier'][$id_fichier]['type'] = $type_fichier;
$_GEN_commun['script_fichier'][$id_fichier]['chemin'] = $chemin_fichier;
} else {
if (GEN_DEBOGAGE) {
$_GEN_commun['debogage_info'] .=
'ERREUR Papyrus : cet identifiant de fichier à déjà été enregistré par GEN_stockerFichierJavascript(). <br />'.
'Identifiant : '. $id_fichier .'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier : '. __FILE__;
}
}
}
 
/** Fonction GEN_afficherScript() - Permet de renvoyer les scripts.
*
* Cette fonction récupère les scripts stockés dans les variables globales de Papyrus
* et le retourne formaté pour l'affichage dans l'entête du squelette du site.
* C'est la balise Papyrus <!-- SCRIPTS --> qui permet de situer l'endroit où afficher
* les script.
*
* @global array "script_fichier" : utilisé pour stocker les chemins des scripts,
* "script_fonction" : utilisé pour stocker le code des fontions et "script_code" :
* utilisé pour stocker le code des script.
* @return string le code XHTML contenant les scripts à insérer dans l'entête.
*/
function GEN_afficherScript()
{
global $_GEN_commun;
$sortie = '';
$fichiers = '';
if (isset($_GEN_commun['script_fichier'])) {
while (list($cle, $valeur) = each($_GEN_commun['script_fichier'])) {
$fichiers .= str_repeat(' ', 8).'<script type="'.$valeur['type'].'" src="'.$valeur['chemin'].'" ></script>'."\n";
}
$sortie .= $fichiers;
} else {
$sortie .= '<!-- Aucun script externe -->'."\n";
}
$fonctions = '';
while (list($cle, $valeur) = each($_GEN_commun['script_fonction'])) {
$fonctions .= $valeur;
}
$code = '';
$code = $_GEN_commun['script_code'];
if ($fonctions != '' || $code != '') {
$sortie .= "\n";
$sortie .= str_repeat(' ', 8).'<script type="'.$_GEN_commun['script_type'].'">'."\n";
$sortie .= str_repeat(' ', 12).'<!--/*--><![CDATA[//><!--'."\n";
$sortie .= $fonctions."\n";
$sortie .= $code."\n";
$sortie .= str_repeat(' ', 12).'//--><!]]>'."\n";
$sortie .= str_repeat(' ', 8).'</script>';
} else {
$sortie .= '<!-- Aucun script intégré -->'."\n";
}
return $sortie;
}
 
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.2 2004/09/10 16:40:41 jpm
* Ajout de messages d'erreurs dans les infos de débogage.
*
* Revision 1.1 2004/06/15 15:13:07 jpm
* Changement de nom et d'arborescence de Genesia en Papyrus.
*
* Revision 1.6 2004/04/30 16:18:56 jpm
* Correction d'un bogue dans les fonctions de gestion des scripts.
*
* Revision 1.5 2004/04/20 15:25:58 jpm
* Ajout de commentaire html à la place d'une chaine vide lors du remplacement de balise Genesia.
*
* Revision 1.4 2004/04/20 12:18:03 jpm
* Ajout d'une fonction permettant de modifier le type de scripts intégrés à une page.
*
* Revision 1.3 2004/04/20 10:46:58 jpm
* Modification des commentaires.
*
* Revision 1.2 2004/04/05 16:37:08 jpm
* Correction de bogues concernant les variables globales javascript.
*
* Revision 1.1 2004/04/05 12:35:09 jpm
* Ajout du fichier contenant les fonctions permettant d'inclure le Javascript dans l'entete des pages générées par Génésia.
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/bibliotheque/fonctions/pap_site.fonct.php
New file
0,0 → 1,295
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library 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 |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: pap_site.fonct.php,v 1.5 2006-10-11 18:04:11 jp_milcent Exp $
/**
* Bibliothèque de fonctions concernant les sites.
*
* Bibliothèque de fonctions permettant de manipuler les tables :
* - gen_site,
* - gen_site_auth,
* - gen_site_auth_bdd,
* - gen_site_auth_ldap,
* - gen_site_categorie,
* - gen_site_categorie_valeur.
*
*@package Papyrus
*@subpackage Fonctions
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author Alexandre GRANIER <alexandre@tela-botanica.org>
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.5 $ $Date: 2006-10-11 18:04:11 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | LISTE de FONCTIONS |
// +------------------------------------------------------------------------------------------------------+
 
/** Fonction GEN_lireInfoSites() - Renvoie un tableau contenant les lignes de la table gen_site
*
* Retourne un tableau contenant les lignes de la table gen_site pour les sites "classiques".
*
* @param mixed une instance de la classse Pear DB.
* @param string le mode dans Pear DB dans lequel on veut recevoir les infos du menu.
* @param integer le type de site (par défaut 102 = site "principal")
* @return array un tableau contenant les lignes de la table gen_site pour les sites "principaux".
*/
function GEN_lireInfoSites(&$bdd, $mode = DB_FETCHMODE_OBJECT, $type_site = 102)
{
$aso_sites = array();
$requete = 'SELECT gen_site.* '.
'FROM gen_site, gen_site_relation '.
'WHERE gs_id_site = gsr_id_site_01 '.
'AND gsr_id_site_01 = gsr_id_site_02 '.
'AND gsr_id_valeur = '.$type_site.' '; // 102 = par défaut site "principal"
$resultat = $bdd->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
if ($resultat->numRows() > 0) {
while ($ligne = $resultat->fetchRow($mode)) {
array_push($aso_sites, $ligne);
}
}
$resultat->free();
return $aso_sites;
}
 
/** Fonction GEN_lireInfoSitePrincipal() - Renvoie un objet contenant une ligne de la table gen_site
*
* Retourne la ligne de la table gen_site concernant le site principal ayant pour identifiant la valeur
* passée en paramètre.
*
* @param mixed une instance de la classse Pear DB.
* @param string l'identifiant du site.
* @param string le mode dans Pear DB dans lequel on veut recevoir les infos du menu.
* @return mixed un objet résultat de Pear DB contenant une ligne de la table gen_site, ou false en cas d'erreur.
*/
function GEN_lireInfoSitePrincipal(&$objet_pear_db, $site_id, $mode = DB_FETCHMODE_OBJECT)
{
$requete = 'SELECT * '.
'FROM gen_site, gen_site_relation '.
'WHERE gs_id_site = '.$site_id.' '.
'AND gs_id_site = gsr_id_site_01 '.
'AND gsr_id_site_01 = gsr_id_site_02 '.
'AND gsr_id_valeur = 102 '; // 102 = site "principal"
$resultat = $objet_pear_db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
if ($resultat->numRows() != 1) {
// Impossible de récupérer des informations sur le site principal ayant pour code alpha $code_alpha
return false;
}
$info_site_principal = $resultat->fetchRow($mode);
$resultat->free();
return $info_site_principal;
}
 
/** Fonction GEN_lireInfoSitePrincipalCodeAlpha() - Renvoie un objet contenant une ligne de la table gen_site
*
* Retourne la ligne de la table gen_site concernant le site principal ayant pour code alphanumérique la valeur
* passée en paramètre.
* Ancien nom : getProjectInfos()
*
* @param mixed une instance de la classse Pear DB.
* @param string le code alphanumérique du site.
* @param string le mode dans Pear DB dans lequel on veut recevoir les infos du menu.
* @return mixed un objet résultat de Pear DB contenant une ligne de la table gen_site, ou false en cas d'erreur.
*/
function GEN_lireInfoSitePrincipalCodeAlpha(&$objet_pear_db, $code_alpha, $mode = DB_FETCHMODE_OBJECT)
{
$requete = 'SELECT * '.
'FROM gen_site, gen_site_relation '.
'WHERE gs_code_alpha = "'.$code_alpha.'" '.
'AND gs_id_site = gsr_id_site_01 '.
'AND gsr_id_site_01 = gsr_id_site_02 '.
'AND gsr_id_valeur = 102 '; // 102 = site "principal"
$resultat = $objet_pear_db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
if ($resultat->numRows() != 1) {
// Impossible de récupérer des informations sur le site principal ayant pour code alpha $code_alpha
return false;
}
$info_site_principal = $resultat->fetchRow($mode);
$resultat->free();
return $info_site_principal;
}
 
/** Fonction getSiteI18nInfos() - Renvoie un objet contenant une ligne de la table gen_site
*
* Retourne la ligne de la table gen_site concernant un site ayant pour code alphanumérique et identifiant
* i18n les valeurs passées en paramètres.
* Ancien nom :getSiteI18nInfos():
*
* @param mixed une instance de la classse Pear DB.
* @param string le code alphanumérique du site recherché.
* @param string l'identifiant i18n possédé par le site recherché.
* @return mixed un objet résultat de Pear DB contenant une ligne de la table gen_site, ou false en cas d'erreur.
*/
function GEN_lireInfoSiteI18nCodeAlpha(&$objet_pear_db, $code_alpha, $i18n)
{
$requete = 'SELECT * '.
'FROM gen_site, gen_site_relation '.
'WHERE gs_code_alpha = "'.$code_alpha.'" '.
'AND gs_ce_i18n = "'.$i18n.'" ';
$resultat = $objet_pear_db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
if ($resultat->numRows() != 1) {
return false;
}
$info_site = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
$resultat->free();
return $info_site;
}
 
/** Fonction GEN_retournerTableauTypeSiteExterne() - Renvoie un tableau des types site externe
*
* Retourne un tableau de tableaux associatifs contenant les valeurs des types des sites externes.
*
* @param mixed une instance de la classse Pear DB.
* @return mixed un tableau de tableaux associatifs contenant les valeurs des types des sites externes
*/
function GEN_retournerTableauTypeSiteExterne(&$objet_pear_db)
{
$requete = 'SELECT * '.
'FROM gen_site_categorie_valeur '.
'WHERE gscv_id_categorie = 3 ';// 3 = type de site externe
$resultat = $objet_pear_db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
if ($resultat->numRows() == 0) {
return false;
}
$tab_type = array();
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT) ) {
$aso_type_site_externe = array('id' => $ligne->gscv_id_valeur, 'intitule' => $ligne->gscv_intitule_valeur);
array_push($tab_type, $aso_type_site_externe);
}
$resultat->free();
return $tab_type;
}
 
/** Fonction GEN_retournerSiteCodeNum() - Renvoie le code num d'un site en fonction du code Alphanumérique
*
* Retourne le code numérique d'un site en fonction du code alphanumérique.
*
* @param mixed une instance de la classe Pear DB.
* @param string le code alphanumérique d'un site.
* @return mixed le code numérique du site sinon false.
*/
function GEN_retournerSiteCodeNum(&$db, $code_alphanum)
{
//----------------------------------------------------------------------------
// Recherche des informations sur le menu
$requete = 'SELECT gs_code_num '.
'FROM gen_site '.
'WHERE gs_code_alpha = "'.$code_alphanum.'"';
 
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
 
if ($resultat->numRows() != 1) {
return false;
}
 
//----------------------------------------------------------------------------
// Récupération des infos
$info_site = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
$code_num = $info_site->gs_code_num;
$resultat->free();
 
return $code_num;
}
 
/** Fonction GEN_retournerSiteCodeAlpha() - Renvoie le code alphanumérique d'un site en fonction du code numérique
*
* Retourne le code alphanumérique d'un site en fonction du code numérique.
*
* @param mixed une instance de la classse Pear DB.
* @param string le code numérique d'un site.
* @return mixed le code alphanumérique du site sinon false.
*/
function GEN_retournerSiteCodeAlpha(&$db, $code_num)
{
//----------------------------------------------------------------------------
// Recherche des informations sur le menu
$requete = 'SELECT gs_code_alpha '.
'FROM gen_site '.
'WHERE gs_code_num = '.$code_num;
 
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
 
if ($resultat->numRows() != 1) {
return false;
}
 
//----------------------------------------------------------------------------
// Récupération des infos
$info_site = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
$code_alphanum = $info_site->gs_code_alpha;
$resultat->free();
 
return $code_alphanum;
}
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.4 2005/04/19 17:21:19 jpm
* Utilisation des références d'objets.
*
* Revision 1.3 2004/12/03 19:22:30 jpm
* Ajout d'une fonction retournant les types de sites externes gérés par Papyrus.
*
* Revision 1.2 2004/11/04 12:25:35 jpm
* Ajout d'une fonction permettant de récupérer les infos sur un site à partir de son id.
*
* Revision 1.1 2004/06/15 15:13:37 jpm
* Changement de nom et d'arborescence de Genesia en Papyrus.
*
* Revision 1.1 2004/05/03 16:26:07 jpm
* Ajout de la bibliothèque de fonctions permettant de manipuler les informations issues des tables "gen_site_..." de Génésia.
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/bibliotheque/fonctions/pap_meta.fonct.php
New file
0,0 → 1,305
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library 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 |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: pap_meta.fonct.php,v 1.5 2006-10-10 12:05:52 jp_milcent Exp $
/**
* Bibliothèque de fonctions permettant d'inclure des balises META.
*
* Cet ensemble de fonctions permet de manipuler les balise meta à intégrer dans l'entête
* des pages html. Cela peut être très pratique pour les applications voulant définir précisément
* ces informations.
*
*@package Papyrus
*@subpackage Fonctions
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author Aucun
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.5 $ $Date: 2006-10-10 12:05:52 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | LISTE de FONCTIONS |
// +------------------------------------------------------------------------------------------------------+
 
 
/** Fonction GEN_stockerMetaHttpEquiv() - Permet de stocker des informations Http-Equiv.
*
* Papyrus permet à une application donnée de stocker les balises meta contenant l'attribut http-equiv
* à intégrer dans l'entête de la page.
* Cette fonction peut être appelé plusieurs fois. Elle ne fait que stocker les informations
* dans une variable (tableau associatif) globale utilisée par Papyrus.
*
* @param string la clé du tableau des meta http-equiv, l'information présente dans l'attribut http-equiv.
* @param string le contenu présent dans l'attribut content.
* @return void les informations sont stockées dans une variable (tableau associatif) globale.
*/
function GEN_stockerMetaHttpEquiv($id_http_equiv, $content)
{
if (empty($GLOBALS['_GEN_commun']['meta_http_equiv'][$id_http_equiv])) {
$GLOBALS['_GEN_commun']['meta_http_equiv'][$id_http_equiv] = $content;
} else {
die('ERREUR Papyrus : cette balise meta à déjà été enregistré par GEN_stockerMetaHttpEquiv(). <br />'.
'Identifiant : '. $id_http_equiv .'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier : '. __FILE__);
}
}
 
/** Fonction GEN_modifierMetaHttpEquiv() - Permet de modifier les informations d'une balise http-equiv.
*
* Papyrus permet à une application donnée de modifier les balises meta contenant l'attribut http-equiv
* à intégrer dans l'entête de la page.
* Cette fonction peut être appelé plusieurs fois. Elle ne fait que modifier les informations
* dans une variable (tableau associatif) globale utilisée par Papyrus.
*
* @param string la clé du tableau des meta http-equiv, l'information présente dans l'attribut http-equiv.
* @param string le contenu présent dans l'attribut content.
* @return void les informations sont stockées dans une variable (tableau associatif) globale.
*/
function GEN_modifierMetaHttpEquiv($id_http_equiv, $content)
{
if ($content != '') {
$GLOBALS['_GEN_commun']['meta_http_equiv'][$id_http_equiv] = $content;
} else {
die('ERREUR Papyrus : cette balise ne peut avoir un contenu vide. <br />'.
'Contenu : '. $content .'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier : '. __FILE__);
}
}
 
/** Fonction GEN_stockerMetaName() - Permet de stocker des informations pour la balise meta.
*
* Papyrus permet à une application donnée de stocker les balises meta contenant l'attribut name
* à intégrer dans l'entête de la page.
* Cette fonction peut être appelé plusieurs fois. Elle ne fait que stocker les informations
* dans une variable (tableau associatif) globale utilisée par Papyrus.
*
* @param string la clé du tableau des meta name, l'information présente dans l'attribut name.
* @param string le contenu présent dans l'attribut content.
* @return void les informations sont stockées dans une variable (tableau associatif) globale.
*/
function GEN_stockerMetaName($id_name, $content)
{
if (empty($GLOBALS['_GEN_commun']['meta_name'][$id_name])) {
$GLOBALS['_GEN_commun']['meta_name'][$id_name] = $content;
} else {
die('ERREUR Papyrus : cette balise meta à déjà été enregistré par GEN_stockerMetaName(). <br />'.
'Identifiant : '. $id_name .'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier : '. __FILE__);
}
}
 
/** Fonction GEN_modifierMetaName() - Permet de modifier les informations d'une balise meta.
*
* Papyrus permet à une application donnée de modifier les balises meta contenant l'attribut name
* à intégrer dans l'entête de la page.
* Cette fonction peut être appelé plusieurs fois. Elle ne fait que modifier les informations
* dans une variable (tableau associatif) globale utilisée par Papyrus.
*
* @param string la clé du tableau des meta name, l'information présente dans l'attribut name.
* @param string le contenu présent dans l'attribut content.
* @return void les informations sont stockées dans une variable (tableau associatif) globale.
*/
function GEN_modifierMetaName($id_name, $content)
{
if ($content != '') {
$GLOBALS['_GEN_commun']['meta_name'][$id_name] = $content;
} else {
die('ERREUR Papyrus : cette balise ne peut avoir un contenu vide. <br />'.
'Contenu : '. $content .'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier : '. __FILE__);
}
}
 
/** Fonction GEN_stockerMetaNameDC() - Permet de stocker des informations Dublin Core pour la balise meta.
*
* Papyrus permet à une application donnée de stocker des informations Dublin Core pour les balises meta
* à intégrer dans l'entête de la page.
* Cette fonction peut être appelé plusieurs fois. Elle ne fait que stocker les informations
* dans une variable (tableau associatif) globale utilisée par Papyrus.
*
* @param string la clé du tableau des meta name, l'information présente dans l'attribut name.
* @param string le contenu présent dans l'attribut content.
* @param string le contenu présent dans l'attribut lang.
* @param string le contenu présent dans l'attribut scheme.
* @return void les informations sont stockées dans une variable (tableau associatif) globale.
*/
function GEN_stockerMetaNameDC($id_name, $content, $lang = '', $scheme = '')
{
if (empty($GLOBALS['_GEN_commun']['meta_name_dc'][$id_name])) {
$GLOBALS['_GEN_commun']['meta_name_dc'][$id_name]['contenu'] = $content;
$GLOBALS['_GEN_commun']['meta_name_dc'][$id_name]['langue'] = $lang;
$GLOBALS['_GEN_commun']['meta_name_dc'][$id_name]['scheme'] = $scheme;
} else {
die('ERREUR Papyrus : cette balise meta à déjà été enregistré par GEN_stockerMetaNameDC(). <br />'.
'Identifiant : '. $id_name .'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier : '. __FILE__);
}
}
 
/** Fonction GEN_modifierMetaNameDC() - Permet de modifier les informations d'une balise meta DC.
*
* Papyrus permet à une application donnée de modifier les balises meta DC contenant l'attribut name
* à intégrer dans l'entête de la page.
* Cette fonction peut être appelé plusieurs fois. Elle ne fait que modifier les informations
* dans une variable (tableau associatif) globale utilisée par Papyrus.
*
* @param string la clé du tableau des meta name DC, l'information présente dans l'attribut name.
* @param string le contenu présent dans l'attribut content.
* @param string le contenu présent dans l'attribut lang.
* @param string le contenu présent dans l'attribut scheme.
* @return void les informations sont stockées dans une variable (tableau associatif) globale.
*/
function GEN_modifierMetaNameDC($id_name, $content, $lang = '', $scheme = '')
{
if ($content != '') {
$GLOBALS['_GEN_commun']['meta_name_dc'][$id_name]['contenu'] = $content;
$GLOBALS['_GEN_commun']['meta_name_dc'][$id_name]['langue'] = $lang;
$GLOBALS['_GEN_commun']['meta_name_dc'][$id_name]['scheme'] = $scheme;
} else {
die('ERREUR Papyrus : cette balise ne peut avoir un contenu vide. <br />'.
'Contenu : '. $content .'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier : '. __FILE__);
}
}
 
/** Fonction GEN_afficherMeta() - Permet d'afficher les meta informations.
*
* Cette fonction affiche les meta informations Http-Equiv, Meta ou DC stockées
* dans une variable (tableau associatif) globale utilisée par Papyrus.
*
* @param string le type de balise meta à afficher (http-equiv, name ou dc).
* @return void les informations sont stockées dans une variable (tableau associatif) globale.
*/
function GEN_afficherMeta($type = 'name')
{
$sortie = '';
if ($type == 'http-equiv' && isset($GLOBALS['_GEN_commun']['meta_http_equiv'])) {
while (list($cle, $valeur) = each($GLOBALS['_GEN_commun']['meta_http_equiv'])) {
$sortie .= str_repeat(' ', 8).'<meta http-equiv="'.$cle.'" content="'.$valeur.'" />'."\n";
}
if (empty($sortie)) {
$sortie .= '<!-- Aucune balise meta http-equiv -->'."\n";
}
}else if ($type == 'name' && isset($GLOBALS['_GEN_commun']['meta_name'])) {
while (list($cle, $valeur) = each($GLOBALS['_GEN_commun']['meta_name'])) {
if (! empty($valeur['contenu'])) {
$sortie .= str_repeat(' ', 8).'<meta name="'.$cle.'" content="'.$valeur.'" />'."\n";
}
}
if (empty($sortie)) {
$sortie .= '<!-- Aucune balise meta name -->'."\n";
}
} else if ($type == 'dc' && isset($GLOBALS['_GEN_commun']['meta_name_dc'])) {
while (list($cle, $valeur) = each($GLOBALS['_GEN_commun']['meta_name_dc'])) {
if (! empty($valeur['contenu'])) {
$sortie .= str_repeat(' ', 8).'<meta name="'.$cle.'" ';
if (! empty($valeur['langue'])) {
$sortie .= 'lang="'.$valeur['langue'].'" ';
}
if (! empty($valeur['scheme'])) {
$sortie .= 'scheme="'.$valeur['scheme'].'" ';
}
$sortie .= 'content="'.$valeur['contenu'].'" />'."\n";
}
}
// Ajout du schéma du Dublin Core si on affiche des informations DC
if (! empty($sortie)) {
$tmp = $sortie;
$sortie = str_repeat(' ', 8).'<link rel="schema.DC" href="http://purl.org/dc/elements/1.1/" />'."\n";
$sortie .= $tmp;
} else {
$sortie .= '<!-- Aucune balise meta name Dublin Core -->'."\n";
}
}
return $sortie;
}
 
/** Fonction GEN_viderMeta() - Permet de vider les informations d'un type de balise meta.
*
* Papyrus permet à une application donnée de modifier les balises meta contenant l'attribut name
* à intégrer dans l'entête de la page.
* Cette fonction peut être appelé plusieurs fois. Elle ne fait que modifier les informations
* dans une variable (tableau associatif) globale utilisée par Papyrus.
*
* @param string le type de balise meta à vider (http-equiv, name ou dc).
* @return void la variable (tableau associatif) globale contenant les infos meta est vidée.
*/
function GEN_viderMeta($type)
{
if ($type == 'http-equiv') {
if (count($GLOBALS['_GEN_commun']['meta_http_equiv']) > 0) {
foreach ($GLOBALS['_GEN_commun']['meta_http_equiv'] as $cle => $val) {
$GLOBALS['_GEN_commun']['meta_http_equiv'][$cle] = null;
}
}
} else if ($type == 'meta') {
if (count($GLOBALS['_GEN_commun']['meta']) > 0) {
foreach ($GLOBALS['_GEN_commun']['meta'] as $cle => $val) {
$GLOBALS['_GEN_commun']['meta'][$cle] = null;
}
}
} else if ($type == 'dc') {
if (count($GLOBALS['_GEN_commun']['meta_name_dc']) > 0) {
foreach ($GLOBALS['_GEN_commun']['meta_name_dc'] as $cle => $val) {
$GLOBALS['_GEN_commun']['meta_name_dc'][$cle] = null;
}
}
} else {
die('ERREUR Papyrus : le type de balise est incorrect. <br />'.
'Contenu : <br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier : '. __FILE__);
}
}
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.4 2006/04/28 12:41:49 florian
* corrections erreurs chemin
*
* Revision 1.3 2004/12/06 19:45:45 jpm
* Ajout d'une fonction permettant de vider les tableaux des meta.
*
* Revision 1.2 2004/12/06 17:58:02 jpm
* Ajout de fonctions permettant de modifier le contenu des balises meta : http-equiv, name et name DC.
*
* Revision 1.1 2004/06/15 15:12:12 jpm
* Changement de nom et d'arborescence de Genesia en Papyrus.
*
* Revision 1.1 2004/04/20 15:24:54 jpm
* Ajout de la bibliotheque de fonctions gérant les meta.
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/bibliotheque/fonctions/pap_identification.fonct.php
New file
0,0 → 1,158
<?php
//vim: set expandtab tabstop=4 shiftwidth=4:
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | |
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library 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 |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// | |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: pap_identification.fonct.php,v 1.4.4.1 2006-12-14 10:31:35 jp_milcent Exp $
/**
* Bibliothèque de fonctions d'identification de Papyrus.
*
* Ce paquetage contient des fonctions d'identifiacation pour différents besoin
* de Papyrus.
*
*@package Papyrus
*@subpackage Fonctions
//Auteur original :
*@author Alexandre GRANIER <alex@tela-botanica.org>
//Autres auteurs :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.4.4.1 $ $Date: 2006-12-14 10:31:35 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +-------------------------------------------------------------------------+
// | Liste des fonctions |
// +-------------------------------------------------------------------------+
 
/** Fonction GEN_afficherInfoIdentification() - Retourne un message demandant l'identification.
*
* Cette fonction informe l'utilisateur qu'il doit utiliser le formulaire d'identification
* mis à sa dispositon. Ce formulaire peut être placé n'importe où dans le squelette via la
* balise <!-- IDENTIFICATION -->. Un note précise de contacter le webmaster si le formulaire
* d'identification est indisponible.
*
* @return string note précisant la nécessité de s'identifier sur le site.
*/
function GEN_afficherInfoIdentification()
{
$res = "\n";
$res .= str_repeat(' ', 12).'<p>';
$res .= 'Veuillez vous identifier dans la zone d\'identification mise à votre disposition sur ce site.';
$res .= str_repeat(' ', 12).'</p>'."\n";
$res .= str_repeat(' ', 12).'<p>';
$res .= '<strong>Note : </strong>Veuillez contacter le webmaster si cette zone d\'identification est absente.';
$res .= str_repeat(' ', 12).'</p>'."\n";
return $res;
}
 
/** Fonction verification_mot_de_passe() - Met à jour les mots de passe vers le cryptage MD5.
*
* Cette fonction permet de mettre à jour en douceur l'annuaire des inscrits à Tela Botanica.
* Les mots de passe anciennement crypté avec la fonction password de Mysql sont progressivement
* passé en cryptage MD5.
*
* @param mixed l'objet de Pear DB permettant la connexion à la base de données.
* @param string le mot de passe non crypté de l'utilisateur.
* @param string le login de l'utilisateur.
* @return void une requête modifie la base de données.
*/
function verification_mot_de_passe($objet_pear_db, $password, $username)
{
// Requête pour la taille du champs mot de passe pour l'individu
$requete = 'SELECT U_PASSWD, LENGTH(U_PASSWD) AS longueur '.
'FROM annuaire_tela '.
'WHERE U_MAIL = "'.$username.'"';
$resultat = $objet_pear_db->query($requete);
(DB::isError($resultat)) ? die (BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
$longueur = $ligne->longueur;
$mot_de_passe_crypte = $ligne->U_PASSWD;
unset($ligne);
$resultat->free();
if ($longueur == 16) {
// Le couple login / mot de passe est-il bon ?
$requete = 'SELECT OLD_PASSWORD("'.$password.'")';
$resultat = $objet_pear_db->query($requete);
(DB::isError($resultat)) ? die (BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
$ligne = $resultat->fetchRow(DB_FETCHMODE_ORDERED);
$resultat->free();
// Est-ce que le mot de passe est bon ?
if ($ligne[0] == $mot_de_passe_crypte) {
// On met à jour le champs de U_PASSWD pour le mettre en md5
$requete = 'UPDATE annuaire_tela '.
'SET U_PASSWD = "'.md5($password).'" '.
'WHERE U_MAIL = "'.$username.'"';
$resultat = $objet_pear_db->query($requete);
(DB::isError($resultat)) ? die (BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
}
}
}
 
/* +--Fin du code ---------------------------------------------------------------------------------------+
* $Log: not supported by cvs2svn $
* Revision 1.4 2005/03/03 14:36:09 jpm
* Correction orthographe.
*
* Revision 1.3 2004/10/25 14:49:59 jpm
* Correction orthographe.
*
* Revision 1.2 2004/09/23 14:32:03 jpm
* Correction bogue sur l'annuaire_tela.
*
* Revision 1.1 2004/06/15 15:10:15 jpm
* Changement de nom et d'arborescence de Genesia en Papyrus.
*
* Revision 1.8 2004/05/01 11:42:40 jpm
* Suppression de la fonction GEN_afficherFormIdentification() transformée en applette.
*
* Revision 1.7 2004/04/09 16:23:41 jpm
* Prise en compte des tables i18n.
*
* Revision 1.6 2004/04/02 16:33:04 jpm
* Ajout de commentaires aux fonctions.
* Modification des formulaires d'identification.
*
* Revision 1.5 2004/04/01 11:24:51 jpm
* Ajout et modification de commentaires pour PhpDocumentor.
*
* Revision 1.4 2004/03/26 12:51:24 jpm
* Modification mineure sur l'indentation.
*
* Revision 1.3 2004/03/24 17:31:54 jpm
* Ajout de l'indentation du xhtml de la fonction loginFunction().
* Mise en forme.
*
* Revision 1.2 2004/03/22 18:36:49 jpm
* Ajout de la fonction de mise à jour des mots de passe de l'annuaire Tela Botanica. Cette fonction devrait à terme intégré l'application Annuaire Tela Botanica.
*
* Revision 1.1 2004/03/22 11:34:19 jpm
* Bibliothèque de fonctions gérant l'identification dans Génésia.
*
*
* +--Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/bibliotheque/fonctions/pap_initialisation.fonct.php
New file
0,0 → 1,126
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library 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 |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: pap_initialisation.fonct.php,v 1.4 2004-10-21 18:15:20 jpm Exp $
/**
* Bibliothèque de fonction pour l'initialisation de Papyrus.
*
* Cette bibliothèque contient des fonctions utilisé lors de l'initialisation de Papyrus.
*
*@package Papyrus
*@subpackage Fonctions
//Auteur original :
*@author Alexandre GRANIER <alexadandre@tela-botanica.org
//Autres auteurs :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.4 $ $Date: 2004-10-21 18:15:20 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | LISTE des FONCTIONS |
// +------------------------------------------------------------------------------------------------------+
 
/** Fonction GEN_donnerIdPremiereApplicationLiee() - Renvoie l'id de la première application liée à un menu.
*
* Cette fonction recherche l'application liée à un menu et l'identifiant de ce menu, mais comme il peut
* ne pas y en avoir, elle cherche alors l'application du menu fils qui
* lui-même peut ne pas en avoir, etc...
*
* @param integer l'identifiant d'un menu.
* @return mixed tableau associatif indexé avec gm_id_menu et gm_ce_application et leur valeur ou false en cas d'erreur.
*/
function GEN_donnerIdPremiereApplicationLiee($id_menu)
{
global $db;
$aso_application_info = array();
$requete = 'SELECT gm_id_menu, gm_ce_application '.
'FROM gen_menu '.
'WHERE gm_id_menu = '.$id_menu;
$resultat = $db->query($requete) ;
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
$aso_application_info =& $resultat->fetchRow(DB_FETCHMODE_ASSOC);
if ($aso_application_info['gm_ce_application'] == 0) {
// Le menu demandé n'a pas d'application liée, nous cherchons celle du premièr menu fils.
$requete_fils = 'SELECT gm_id_menu '.
'FROM gen_menu, gen_menu_relation '.
'WHERE gmr_id_menu_02 = '.$id_menu.' '.
'AND gmr_id_valeur = 1 '.
'AND gmr_id_menu_01 = gm_id_menu '.
'ORDER BY gmr_ordre ASC ';
$resultat_fils = $db->query($requete_fils) ;
(DB::isError($resultat_fils))
? die (BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_fils->getMessage(), $requete_fils))
: '' ;
if ($resultat_fils->numRows() >= 1) {
// Nous avons un menu fils, nous rappelons récursivement la fontion avec son identifiant
// pour récuperer l'application liée.
$ligne_fils = $resultat_fils->fetchRow(DB_FETCHMODE_OBJECT);
$aso_application_info = GEN_donnerIdPremiereApplicationLiee($ligne_fils->gm_id_menu);
}
else {
// Gestion des erreurs sur la recherche de l'application liée.
return false;
}
}
return $aso_application_info ;
}
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.3 2004/06/30 07:26:52 jpm
* Modification nom de la fonction.
*
* Revision 1.2 2004/06/18 15:51:27 alex
* Modification fonction de recherche d'application liée, elle renvoie maintenant un tableau.
*
* Revision 1.1 2004/06/15 15:10:44 jpm
* Changement de nom et d'arborescence de Genesia en Papyrus.
*
* Revision 1.6 2004/04/28 12:04:40 jpm
* Changement du modèle de la base de données.
*
* Revision 1.5 2004/04/09 16:23:41 jpm
* Prise en compte des tables i18n.
*
* Revision 1.4 2004/04/02 16:34:03 jpm
* Modifications de commentaires des fonctions.
*
* Revision 1.3 2004/04/01 11:24:51 jpm
* Ajout et modification de commentaires pour PhpDocumentor.
*
* Revision 1.2 2004/03/31 16:53:05 jpm
* Modification du code vis à vis du modèle revision 1.9 de Génésia.
*
* Revision 1.1 2004/03/29 14:53:25 jpm
* Création du fichier et ajout de la fonction donnerIdPremiereApplicationLiee().
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/bibliotheque/fonctions/pap_style.fonct.php
New file
0,0 → 1,178
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library 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 |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: pap_style.fonct.php,v 1.3 2005-10-12 17:20:33 ddelon Exp $
/**
* Les fonctions permettant d'inclure des styles CSS.
*
* Ces fonctions permettent d'inclure des CSS directement dans les pages
* des applications. Elles peuvent donc être appelées par les applications
* intégrées à Papyrus.
*
*@package Papyrus
*@subpackage Fonctions
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author Aucun
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.3 $ $Date: 2005-10-12 17:20:33 $
// +------------------------------------------------------------------------------------------------------+
*/
// +------------------------------------------------------------------------------------------------------+
// | LISTE de FONCTIONS |
// +------------------------------------------------------------------------------------------------------+
 
/** Fonction GEN_modifierTypeStyle() - Permet de stocker le type des styles intégrés.
*
* Papyrus permet à une application donnée d'intégrer des styles directement dans
* l'entête de la page. Cette fonction définit le type Mime des styles utilisés.
* En XHTML strict, cette fonction ne devrait pas être utilisé car les styles devraient être
* stockés dans des fichiers séparés.
*
* @deprecated déprécier dans le cadre d'application XHTML.
* @global string "style_type" : utilisé pour stocker le type des styles intégrés dans l'entête de la page.
* @param string le type des styles intégrés.
* @return void le type des styles intégrés est stocké dans une variable globale.
*/
function GEN_modifierTypeStyle($type = 'text/css')
{
global $_GEN_commun;
$_GEN_commun['style_type'] .= $type;
}
 
/** Fonction GEN_stockerStyleIntegree() - Permet de stocker un style utilisé par une application.
*
* Papyrus permet à une application donnée de stocker des styles intégrés
* directement dans l'entête de la page. En XHTML strict, l'utilisation de cette
* fonction est déconseillée. Utiliser plutôt une feuille de styles externes qui
* sera appelé par l'entête. Cette fonction peut être appelé plusieurs fois. Elle ne
* fait que stocker les styles dans une variable globale utilisée par Génésia.
*
* @deprecated déprécier dans le cadre d'application XHTML.
* @global string "style_integree" : utilisé pour stocker les styles intégrés.
* @param string le style à insérer.
* @return void le style est stocké dans une variable globale.
*/
function GEN_stockerStyleIntegree($style_integree)
{
global $_GEN_commun;
$_GEN_commun['style_integree'] .= $style_integree;
}
 
/** Fonction GEN_stockerStyleExterne() - Permet de stocker des fichiers de styles externes.
*
* Papyrus permet à une application donnée de stocker des feuilles de styles externes qui seront
* appelés depuis l'entête de la page. En XHTML strict, l'utilisation de cette
* fonction est conseillée.
* Cette fonction peut être appelé plusieurs fois. Elle ne fait que stocker les chemin des
* feuilles de styles externes dans une variable (tableau associatif) globale utilisée par Papyrus.
*
* @global array "style_fichier" : utilisé pour stocker les chemins des feuilles de styles externes.
* @param string la clé du tableau de fichiers, par exemple le nom de la feuille de styles externes à insérer.
* @param string le chemin complet du fichier de styles à insérer.
* @param string le titre de la feuille de styles externes.
* @param string la relation de la feuille de style (stylesheet, alternate stylesheet, ...).
* @param string le type MIME des styles (text/css, ...).
* @param string le type de média concerné par la feuille de styles (screen, print, aural, ...).
* @return void le chemin du fichier CSS est stocké dans une variable (tableau associatif) globale.
*/
function GEN_stockerStyleExterne($id_fichier, $chemin_fichier, $titre = '', $rel = 'stylesheet', $type = 'text/css', $media = 'screen')
{
global $_GEN_commun;
if (empty($_GEN_commun['style_externe'][$id_fichier])) {
$_GEN_commun['style_externe'][$id_fichier]['rel'] = $rel;
$_GEN_commun['style_externe'][$id_fichier]['type'] = $type;
$_GEN_commun['style_externe'][$id_fichier]['media'] = $media;
$_GEN_commun['style_externe'][$id_fichier]['titre'] = $titre;
$_GEN_commun['style_externe'][$id_fichier]['chemin'] = $chemin_fichier;
}
}
 
/** Fonction GEN_afficherStyle() - Permet de renvoyer les styles dans l'entete.
*
* Cette fonction récupère les feuilles de styles stockés dans les variables globales de Papyrus
* et les retourne formatés pour l'affichage dans l'entête du squelette du site.
* C'est la balise Génésia <!-- STYLES --> qui permet de situer l'endroit où afficher
* les CSS.
*
* @global array "style_externe" : utilisé pour stocker les chemins des feuilles de styles externes et
* "style_integree" : utilisé pour stocker les styles intégrés directement dans l'entête.
* @return string le code XHTML contenant les styles à insérer dans l'entête.
*/
function GEN_afficherStyle()
{
global $_GEN_commun;
$sortie = '';
$styles_externes = '';
if (isset($_GEN_commun['style_externe'])) {
foreach ($_GEN_commun['style_externe'] as $cle => $valeur) {
$styles_externes .= str_repeat(' ', 8).
'<link rel="'.$valeur['rel'].'" '.
'type="'.$valeur['type'].'" '.
'media="'.$valeur['media'].'" '.
'title="'.$valeur['titre'].'" '.
'href="'.$valeur['chemin'].'" />'."\n";
}
$sortie .= $styles_externes;
} else {
$sortie .= '<!-- Aucun style externe -->'."\n";
}
$styles_integrees = '';
$styles_integrees = $_GEN_commun['style_integree'];
if ($styles_integrees != '') {
$sortie .= "\n";
$sortie .= str_repeat(' ', 8).'<style type="'.$_GEN_commun['style_type'].'">'."\n";
$sortie .= str_repeat(' ', 12).'<!--/*--><![CDATA[//><!--'."\n";
$sortie .= $styles_integrees."\n";
$sortie .= str_repeat(' ', 12).'//--><!]]>'."\n";
$sortie .= str_repeat(' ', 8).'</style>';
} else {
$sortie .= '<!-- Aucun style intégré -->'."\n";
}
return $sortie;
}
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.2 2004/12/06 17:53:32 jpm
* Correction Génésia en Papyrus.
*
* Revision 1.1 2004/06/15 15:14:32 jpm
* Changement de nom et d'arborescence de Genesia en Papyrus.
*
* Revision 1.3 2004/04/20 15:25:58 jpm
* Ajout de commentaire html à la place d'une chaine vide lors du remplacement de balise Genesia.
*
* Revision 1.1 2004/04/20 10:46:43 jpm
* Ajout de la bibliothèque gérant les styles.
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/bibliotheque/fonctions/pap_compression.fonct.php
New file
0,0 → 1,166
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library 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 |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: pap_compression.fonct.php,v 1.3 2006-03-15 09:30:50 florian Exp $
/**
* Bibliothèque de fonction de compression et d'envoi de données.
*
* Cette bibliothèque contient toutes les fonctions nécessaires à l'envoi de
* données au navigateur client. Cela consiste donc à vérifier le support de
* la compression par le navigateur du client et à compresser puis envoyer ces donées.
*
*@package Papyrus
*@subpackage Fonctions
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author Aucun
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.3 $ $Date: 2006-03-15 09:30:50 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | LISTE de FONCTIONS |
// +------------------------------------------------------------------------------------------------------+
 
 
/** Fonction GEN_compresserDonneesZLIB() - Compresse des données si nécessaire et les retourne.
*
* Si les données sont plus grandes que 2048 caractères nous compressons et nous les retournons
* compressées. Si la compression est un echec false est retourné. Si le nombre de caractères des
* données à compresser ou que l'extension ZLIB n'est pas présente, la valeur vide est retournée.
*
* @param string données à compresser.
* @param int taux de compression à utiliser.
* @param int nombre de caractères minimums que doivent comporter les données pour être compressé.
* @return mixed données compressées, "false" si la compression échoue, void s'il n'est pas nécessaire de compresser.
*/
function GEN_compresserDonneesZLIB($donnees, $taux_compression = 9, $valeur_incompressible = 2048)
{
// Si les données sont infèrieures à 2048 nous ne compressons pas.
if ((strlen($donnees) < $valeur_incompressible) || (! extension_loaded('zlib')) ) {
return '';
}
// Tentative de compression des donnée
$donnees_gzip = gzcompress($donnees, $taux_compression);
if (! $donnees_gzip) {
return false;
} else {
return $donnees_gzip;
}
}
 
/** Fonction GEN_decompresserDonneesZLIB() - Décompresse des données si nécessaire et les retourne.
*
* Nous décompressons les données. Si la décompression renvoie faut, nous retournons les données
* tels qu'elle nous été transmises.
*
* @param mixed données à décompresser.
* @return mixed données décompressées ou "false" si les données n'ont pas pue être décompréssées...
*/
function GEN_decompresserDonneesZLIB($donnees)
{
$donnees_ungzip = gzuncompress($donnees);
if (! $donnees_ungzip) {
return false;
} else {
return $donnees_ungzip;
}
}
 
/** Fonction GEN_retournerTypeCompressionNavigateur() - Retourne le type de compression du navigateur du client.
*
* Si le navigateur supporte la compression nous retournons le type d'encodage supporté.
* Dans tous les autres cas, nous retournons une chaine vide.
* Nous utilisons la superglobale $_SERVER permettant d'obtenir "SERVER_PROTOCOL" et "HTTP_ACCEPT_ENCODING".
*
* @return string la chaine correspondant au type d'encodage surpporté par le navigateur du client.
*/
function GEN_retournerTypeCompressionNavigateur()
{
// Si les entêtes HTTP ont déjà été envoyés, nous retournons void.
if (headers_sent()) return '';
if ($_SERVER['SERVER_PROTOCOL'] != 'HTTP/1.1') return '';
if (isset ($_SERVER['HTTP_ACCEPT_ENCODING']) && strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'x-gzip') !== false) return 'x-gzip';
if (isset ($_SERVER['HTTP_ACCEPT_ENCODING']) && strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== false) return 'gzip';
return '';
}
 
/** Fonction GEN_envoyerDonneesCompressees() - Envoi les données au navigateur du client.
*
* Si le navigateur supporte la compression nous lui envoyons les données compressées. Sinon,
* nous lui envoyons les données décompressées. Si la décompression échoue nous n'envoyons rien
* et la fonction retourne false. Si l'envoi est un succès la fonction retourne true.
* Cett fonction fait appel aux fonctions GEN_retournerTypeCompressionNavigateur() et
* GEN_decompresserDonneesZLIB().
*
* @param mixed données compressées (ou pas) à envoyer au navigateur.
* @return bool booléen indiquant si l'envoi est un succès (true) ou pas (false).
*/
function GEN_envoyerDonneesCompressees($donnees_compressees)
{
// Le navigateur du client accepte-t-il la compression?
$type_encodage = GEN_retournerTypeCompressionNavigateur();
// La compression n'est pas supportée.
if (empty($type_encodage)) {
$donnees_decompressees = GEN_decompresserDonneesZLIB($donnees_compressees);
if (! $donnees_decompressees) {
return false;
}
$res = $donnees_decompressees;
return $res;
} else {
// La compression est supportée. Nous envoyons les données compressées.
header('Content-Encoding: gzip');
// Laisser la chaine ci-dessous entre guillemets. Les cotes font planter le programme!
$res = "\x1f\x8b\x08\x00\x00\x00\x00\x00";
$res .= $donnees_compressees;
}
return $res;
}
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.2 2004/06/22 15:27:15 alex
* ajout du test d'existence la variable $_SERVER['HTTP_ENCODING_TYPE'] avant de tester sa valeur
*
* Revision 1.1 2004/06/15 15:09:26 jpm
* Changement de nom et d'arborescence de Genesia en Papyrus.
*
* Revision 1.4 2004/04/22 08:39:05 jpm
* Correction d'une déclaration en tant que global d'une variable superglobale.
*
* Revision 1.3 2004/04/09 16:22:49 jpm
* Envoi d'une page sous forme compressée si l'extenssion ZLIB existe. Sinon, la page part non compréssée.
*
* Revision 1.2 2004/04/06 15:56:33 jpm
* Changement de l'ordre des fonctions dans le fichier.
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/langues/pap_langue_fr.inc.php
New file
0,0 → 1,68
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This file is part of Papyrus. |
// | |
// | Foobar is free software; you can redistribute it and/or modify |
// | it under the terms of the GNU General Public License as published by |
// | the Free Software Foundation; either version 2 of the License, or |
// | (at your option) any later version. |
// | |
// | Foobar 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 General Public License for more details. |
// | |
// | You should have received a copy of the GNU General Public License |
// | along with Foobar; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: pap_langue_fr.inc.php,v 1.1 2004-10-21 18:16:50 jpm Exp $
/**
* Traduction de Papyrus
*
* Traduction française.
*
*@package Papyrus
*@subpackage Traduction
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author Aucun
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.1 $ $Date: 2004-10-21 18:16:50 $
// +------------------------------------------------------------------------------------------------------+
*/
// +------------------------------------------------------------------------------------------------------+
// | ENTÊTE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
// +------------------------------------------------------------------------------------------------------+
// | CONSTANTE DE LANGUES |
// +------------------------------------------------------------------------------------------------------+
 
// Débogage :
/** Texte d'entête du message d'une erreur (txt ou XHTML).*/
define('PAP_LANG_DEBOG_TETE', 'ERREUR Papyrus : ');
/** Texte de pied du message d'une erreur (txt ou XHTML).*/
define('PAP_LANG_DEBOG_PIED', '.');
/** Texte du niveau d'erreur d'un message d'erreur (txt ou XHTML).*/
define('PAP_LANG_DEBOG_NIVEAU', 'Niveau d\'erreur : ');
/** Texte précédent le nom du fichier d'un message d'erreur (txt ou XHTML).*/
define('PAP_LANG_DEBOG_FICHIER', 'Nom du fichier : ');
/** Texte précédent le n° de la ligne d'un message d'erreur (txt ou XHTML).*/
define('PAP_LANG_DEBOG_LIGNE', 'N° de ligne : ');
/** Texte précédent le contexte d'un message d'erreur (txt ou XHTML).*/
define('PAP_LANG_DEBOG_CONTEXTE', 'Contexte d\'erreur : ');
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/langues/pap_langue_fr-FR.inc.php
New file
0,0 → 1,64
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This file is part of Papyrus. |
// | |
// | Foobar is free software; you can redistribute it and/or modify |
// | it under the terms of the GNU General Public License as published by |
// | the Free Software Foundation; either version 2 of the License, or |
// | (at your option) any later version. |
// | |
// | Foobar 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 General Public License for more details. |
// | |
// | You should have received a copy of the GNU General Public License |
// | along with Foobar; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: pap_langue_fr-FR.inc.php,v 1.1 2004-10-21 18:16:50 jpm Exp $
/**
* Traduction de Papyrus
*
* Traduction française-France.
*
*@package Papyrus
*@subpackage Traduction
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author Aucun
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.1 $ $Date: 2004-10-21 18:16:50 $
// +------------------------------------------------------------------------------------------------------+
*/
// +------------------------------------------------------------------------------------------------------+
// | ENTÊTE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
// +------------------------------------------------------------------------------------------------------+
// | CONSTANTE DE LANGUES |
// +------------------------------------------------------------------------------------------------------+
 
 
 
// +------------------------------------------------------------------------------------------------------+
// | PIED du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
/** Inclusion de la traduction principale pour la langue française de Papyrus.*/
require_once GEN_CHEMIN_LANGUE.'pap_langue_fr.inc.php';
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/pap_envoi.inc.php
New file
0,0 → 1,100
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library 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 |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: pap_envoi.inc.php,v 1.9 2006-06-08 09:00:06 ddelon Exp $
/**
* Gestion de l'envoie des pages à afficher.
*
* Ce fichier envoi les données en les compressant si possible.
*
*@package Papyrus
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author Laurent COUDOUNEAU <lc@gsite.org>
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.9 $ $Date: 2006-06-08 09:00:06 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTÊTE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
function pap_compress_output($output)
{
return gzencode($output);
}
 
// Check if the browser supports gzip encoding, HTTP_ACCEPT_ENCODING
if (strstr ($HTTP_SERVER_VARS['HTTP_ACCEPT_ENCODING'], 'gzip') && function_exists('gzencode') )
{
// Start output buffering, and register compress_output() (see
// below)
ob_start ("pap_compress_output");
 
// Tell the browser the content is compressed with gzip
header ("Content-Encoding: gzip");
}
 
echo($_GEN_commun['sortie']);
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.8 2006/05/10 16:02:49 ddelon
* Finition multilinguise et schizo flo
*
* Revision 1.7 2006/01/12 16:37:01 ddelon
* compression N**t*n
*
* Revision 1.6 2005/12/09 16:01:53 ddelon
* retablissement compression
*
* Revision 1.5 2005/11/25 14:33:08 ddelon
* desactivation compression
*
* Revision 1.4 2005/02/28 11:20:42 jpm
* Modification des auteurs.
*
* Revision 1.3 2004/10/15 18:29:19 jpm
* Modif pour gérer l'appli installateur de Papyrus.
*
* Revision 1.2 2004/06/16 15:07:56 jpm
* Correction d'un chemin et nom de fichier.
*
* Revision 1.1 2004/06/16 08:11:37 jpm
* Changement de nom de Génésia en Papyrus.
* Changement de l'arborescence.
*
* Revision 1.3 2004/04/28 12:04:31 jpm
* Changement du modèle de la base de données.
*
* Revision 1.2 2004/04/22 08:31:43 jpm
* Transformation de $GS_GLOBAL en $_GEN_commun.
*
* Revision 1.1 2004/04/09 16:19:23 jpm
* Ajout du fichier indépendant d'envoi avec gestion des tables i18n.
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/pap_verification.inc.php
New file
0,0 → 1,134
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library 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 |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: pap_verification.inc.php,v 1.8 2006-04-28 12:41:49 florian Exp $
/**
* Réalisation de la vérification des besoins de Papyrus.
*
* Ce fichier vérifie la présence de certaines extensions nécessaires à Papyrus.
*
*@package Papyrus
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author Laurent COUDOUNEAU <lc@gsite.org>
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.8 $ $Date: 2006-04-28 12:41:49 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTÊTE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
// +------------------------------------------------------------------------------------------------------+
// | CORPS du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
// +------------------------------------------------------------------------------------------------------+
// Initialisation des variables globales de gestion d'erreur et de l'installation:
$_GEN_commun['erreur_instal_afaire'] = false;
 
// +------------------------------------------------------------------------------------------------------+
// Gestion des fichiers de configuration et de l'installation
 
$chemin_fichier_config_defaut = 'papyrus/configuration/pap_config.inc.php';
 
/** Inclusion du fichier de configuration avancée
** Ajout du fichier de configuration avancée de de Papyrus contenant les chemins des fichiers.*/
include_once 'configuration/pap_config_avancee.inc.php';
 
// Gestion du fichier de config par défaut permettant de savoir si l'installation a été faite ou pas
if (file_exists($chemin_fichier_config_defaut)) {
/** Inclusion du fichier de configuration de base contenant la connexion à la base de donnée de Papyrus.*/
include_once $chemin_fichier_config_defaut;
// Nous vérifions que nous avons pas à faire à une mise à jour de Papyrus
if (GEN_VERSION != PAP_VERSION) {
$_GEN_commun['erreur_instal_afaire'] = true;
}
// Initialisation de la variable stockant les infos de débogage.
if (GEN_DEBOGAGE) {
$_GEN_commun['debogage_info'] = '';
}
// Niveau d'erreur pour le code PHP de Papyrus
// Inutile car shunté par set_error_handler du gestionnaire d'erreur
error_reporting(GEN_DEBOGAGE_NIVEAU);
} else {
$_GEN_commun['erreur_instal_afaire'] = true;
}
 
// +------------------------------------------------------------------------------------------------------+
// | PIED du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.7 2006/03/15 09:30:50 florian
* suppression des echos, qui entrainaient des problemes d'affichages
*
* Revision 1.6 2005/09/20 17:01:22 ddelon
* php5 et bugs divers
*
* Revision 1.5 2005/02/28 11:20:42 jpm
* Modification des auteurs.
*
* Revision 1.4 2004/10/25 16:28:47 jpm
* Ajout de nouvelles balises Papyrus, ajout vérification mise à jour de Papyrus, meilleure gestion des sessions...
*
* Revision 1.3 2004/10/22 17:23:59 jpm
* Début amélioration de la gestion des erreurs et de l'installation.
*
* Revision 1.2 2004/10/15 18:29:19 jpm
* Modif pour gérer l'appli installateur de Papyrus.
*
* Revision 1.1 2004/06/16 08:14:23 jpm
* Changement de nom de Génésia en Papyrus.
* Changement de l'arborescence.
*
* Revision 1.7 2004/05/10 12:24:24 jpm
* Configuration de la gestion des niveaux d'erreur.
*
* Revision 1.6 2004/04/28 12:04:31 jpm
* Changement du modèle de la base de données.
*
* Revision 1.5 2004/04/23 09:24:47 jpm
* Suppression recherche ip et port.
*
* Revision 1.4 2004/04/22 08:23:47 jpm
* Transformation de $GS_GLOBAL en $_GEN_commun.
*
* Revision 1.3 2004/04/09 16:21:23 jpm
* Extraction de la gestion de la connexion à la BdD transféré dans genesia.php.
*
* Revision 1.2 2004/04/08 14:13:02 jpm
* Suppression de code inutile et renomage de fonctions.
*
* Revision 1.1 2004/04/08 12:29:00 jpm
* Ajout du code réalisant les vérification nécessaires au fonctionnement de Génésia.
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/applettes/vous_etes_ici/vous_etes_ici.php
New file
0,0 → 1,236
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library 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 |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: vous_etes_ici.php,v 1.10 2006-04-28 12:41:49 florian Exp $
/**
* Applette : Vous Etes Ici
*
* Affiche les liens contenant la suite des menus visités pour arriver
* au menu courant visioné par l'utilisateur.
* Nécessite :
* - Constantes et variable de Papyrus.
* - Base de données de Papyrus
* - Pear Net_URL
* - Pear DB
* - API Débogage 1.0
*
*@package Applette
*@subpackage Vous_Etes_Ici
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author Aucun
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.10 $ $Date: 2006-04-28 12:41:49 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTÊTE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
// Inclusion de la bibliothèque defonction sur les menu : inutile car inclue par Papyrus
// require_once GEN_CHEMIN_BIBLIO.'pap_menu.fonct.php';
 
$GLOBALS['_VEI_']['nom_fonction'] = 'afficherVousEtesIci';
$_GEN_commun['info_applette_nom_fonction'] = $GLOBALS['_VEI_']['nom_fonction'];
$_GEN_commun['info_applette_balise'] = 'VOUS_ETES_ICI';
 
// +------------------------------------------------------------------------------------------------------+
// | CORPS du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
 
// +------------------------------------------------------------------------------------------------------+
// | LISTE de FONCTIONS |
// +------------------------------------------------------------------------------------------------------+
 
/** Fonction afficherVousEtesIci() - Déploie le "vous êtes ici" d'un menu.
*
* Affiche la suite des menus visité, sous forme de lien, pour arriver
* au menu courant visioné par l'utilisateur.
* Necessite :
* - Constantes et variable de Papyrus.
* - Pear Net_URL
* - Pear DB
*
* @param array tableau d'éventuel arguments présent dans la balise transmis à la fonction.
* @param array tableau global de Papyrus.
* @param int identifiant du menu courant qui représentent la fin du "vous êtes ici".
* @param boolean indique que nous avons à faire au premier appel de cette fonction récursive.
* @return string une liste de listes XHTML représentant le plan du site.
*/
function afficherVousEtesIci($tab_arguments, $_GEN_commun, $menu_courant_id = '', $premier_appel = true)
{
// Initialisation de variable.
$objet_pear_db =& $GLOBALS['_GEN_commun']['pear_db'];
$vei_numero = $GLOBALS['_PAPYRUS_']['applette']['comptage'][$GLOBALS['_VEI_']['nom_fonction']];
if (isset( $GLOBALS['_GEN_commun']['info_menu']->gm_id_menu)) {
(empty($menu_courant_id)) ? $menu_courant_id = $GLOBALS['_GEN_commun']['info_menu']->gm_id_menu : '';
}
$vei = '';
// Gestion des erreurs
if (empty($menu_courant_id)) {
if (isset($GLOBALS['_VEI_']['usurpation'])) {
$vei = $GLOBALS['_VEI_']['usurpation'];
}
return $vei;
}
// Début contruction du vei
$menu_pere_id = GEN_lireIdentifiantMenuPere($menu_courant_id, $objet_pear_db);
// Récupération des infos sur sur l'entrée du menu à afficher
// GEN_I18N_ID_DEFAUT;
$id_langue = $GLOBALS['_GEN_commun']['i18n'];
if (isset($id_langue) && ($id_langue!='')) {
$langue_test=$id_langue;
} else {
$langue_test=GEN_I18N_ID_DEFAUT;
}
$requete_traduction = 'SELECT gmr_id_menu_02, gm_ce_i18n '.
'FROM gen_menu_relation, gen_menu '.
'WHERE '.$menu_courant_id.' = gmr_id_menu_01 ' .
'AND gmr_id_menu_02 = gm_id_menu '.
'AND gmr_id_valeur = 2 '.// 2 = "avoir traduction"
'AND gm_ce_i18n = "'.$langue_test.'" ';
$resultat_traduction = $objet_pear_db->query($requete_traduction);
(DB::isError($resultat_traduction)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_traduction->getMessage(), $requete_traduction))
: '';
 
if ($resultat_traduction->numRows() > 0) {
$ligne_resultat_traduction=$resultat_traduction->fetchRow(DB_FETCHMODE_ASSOC);
$menu_courant_id=$ligne_resultat_traduction['gmr_id_menu_02'];
}
$menu_info = GEN_lireInfoMenu($objet_pear_db, $menu_courant_id, DB_FETCHMODE_ASSOC);
// Préparation d'une entrée dans la liste du menu
$menu_nom = htmlentities($menu_info['gm_nom']);
$menu_hreflang = htmlentities($menu_info['gm_ce_i18n']);
$menu_accesskey = '';
$raccourci_txt = '';
if (($menu_accesskey = htmlentities($menu_info['gm_raccourci_clavier'])) != '') {
$raccourci_txt = '(Raccourci : '.$menu_accesskey.' ).';
$menu_accesskey = 'accesskey="'.$menu_accesskey.'" ';
}
$menu_texte_title = '';
if (($menu_texte_title = htmlentities($menu_info['gm_description_resume'])) != '') {
$menu_texte_title = 'title="'.$raccourci_txt.$menu_texte_title.'" ';;
}
// Création de l'url du menu courant
$une_url =& new Pap_URL('http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']);
$une_url->setId($menu_courant_id);
$menu_url = $une_url->getURL();
if ($menu_pere_id != 0) {
// Ce n'est pas le menu racine : nous continuons
$vei .= '<a id="vei_menu_'.$vei_numero.'_'.$menu_courant_id.'" href="'.$menu_url.'" ';
$vei .= 'hreflang="'.$menu_hreflang.'" '.$menu_texte_title.$menu_accesskey.'>'.$menu_nom.'</a> >>> '."\n";
$vei .= afficherVousEtesIci($tab_arguments, $_GEN_commun, $menu_pere_id, false);
} else {
// C'est le menu racine : nous nous arrêtons
$vei .= '<a id="vei_menu_'.$vei_numero.'_'.$menu_courant_id.'" href="'.$menu_url.'" ';
$vei .= 'hreflang="'.$menu_hreflang.'" '.$menu_texte_title.$menu_accesskey.'>'.$menu_nom.'</a>'."\n";
}
// Retour du VEI après la recherche récursive des liens
if ($premier_appel) {
$tab_vei = explode(' >>> ', $vei);
// Récupération des liens pour les inverser et créer le VEI
$retour = '';
for ($i = (count($tab_vei) - 1); $i >= 0 ;$i--) {
if ($i == 0) {
// Supprime le lien pour le nom du menu courant
$tab_txt_capture='';
preg_match("/>(.*)<\/a>/", $tab_vei[$i], $tab_txt_capture);
$retour .= $tab_txt_capture[1];
} else {
$retour .= $tab_vei[$i];
}
// Ajout du séparateur
$retour .= ($i != 0) ? "\n".'<span class="separateur_vei"> > </span>'."\n" : '' ;
}
// Retour de la chaine de liens et de textes du VEI
return $retour;
}
return $vei;
}
 
// +------------------------------------------------------------------------------------------------------+
// | PIED du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.9 2006/03/02 10:49:49 ddelon
* Fusion branche multilinguisme dans branche principale
*
* Revision 1.8.2.1 2006/02/28 14:02:10 ddelon
* Finition multilinguisme
*
* Revision 1.8 2005/09/26 20:18:27 ddelon
* Appli projet : php5 et generalisation
*
* Revision 1.7 2005/09/23 14:21:18 florian
* compatibilité XHTML
*
* Revision 1.6 2005/04/14 16:38:02 jpm
* Ajout de la gestion des URL avec la classe Pap_URL de Papyrus.
*
* Revision 1.5 2004/12/06 19:39:57 jpm
* Gestion de l'usurpation de VEI.
*
* Revision 1.4 2004/11/10 19:41:27 jpm
* Correction bogue quand pas de menu par défaut.
*
* Revision 1.3 2004/09/23 17:57:19 jpm
* La page active n'est pas afficher sous forme de lien mais sous forme de texte.
*
* Revision 1.2 2004/07/06 17:07:21 jpm
* Modification de la documentation pour une mailleur analyse par PhpDocumentor.
*
* Revision 1.1 2004/06/15 15:06:25 jpm
* Changement de nom et d'arborescence de Genesia en Papyrus.
*
* Revision 1.4 2004/05/05 14:33:19 jpm
* Gestion de l'indication de langue dans l'url.
* Utile que si on veut forcer la langue.
*
* Revision 1.2 2004/05/05 06:44:33 jpm
* Complément des commentaires indiquant les paquetages nécessaire à l'applette.
*
* Revision 1.1 2004/05/05 06:39:18 jpm
* Transformation en applette de la fonction générant le "vous êtes ici".
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/applettes/selecteur_sites/configuration/sesi_config.inc.php
New file
0,0 → 1,72
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2005 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This file is part of Papyrus. |
// | |
// | Foobar is free software; you can redistribute it and/or modify |
// | it under the terms of the GNU General Public License as published by |
// | the Free Software Foundation; either version 2 of the License, or |
// | (at your option) any later version. |
// | |
// | Foobar 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 General Public License for more details. |
// | |
// | You should have received a copy of the GNU General Public License |
// | along with Foobar; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: sesi_config.inc.php,v 1.2 2006-03-02 10:49:49 ddelon Exp $
/**
* Configuration de l'applette Identification.
*
* Fichier de configuration de l'applette selection de site.
*
*@package Applette
*@subpackage Selecteur
//Auteur original :
*@author David Delon <david.delon@clapas.net>
//Autres auteurs :
*@author Aucun
*@copyright Tela-Botanica 2000-2005
*@version $Revision: 1.2 $ $Date: 2006-03-02 10:49:49 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTETE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
// +------------------------------------------------------------------------------------------------------+
// | CORPS du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
/** Constante stockant la valeur de la langue par défaut pour l'applette IDEN.*/
define('SESI_I18N_DEFAUT', GEN_I18N_ID_DEFAUT);
 
// Chemin vers les dossiers de l'applette
/** Chemin vers l'applette Identification de Papyrus.*/
define('SESI_CHEMIN_APPLETTE', GEN_CHEMIN_APPLETTE.'selecteur_sites'.GEN_SEP);
/** Chemin vers les fichiers de traduction de l'applette Identification de Papyrus.*/
define('SESI_CHEMIN_LANGUE', SESI_CHEMIN_APPLETTE.'langues'.GEN_SEP);
/** Chemin vers les fichiers de la bibliotheque de l'applette Identification de Papyrus.*/
define('SESI_CHEMIN_BIBLIO', SESI_CHEMIN_APPLETTE.'bibliotheque'.GEN_SEP);
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.1.2.1 2005/12/07 19:46:15 ddelon
* Merge + navi sites
*
* Revision 1.1 2005/03/15 14:18:49 jpm
* Ajout d'un fichier de config.
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/applettes/selecteur_sites/selecteur_sites.php
New file
0,0 → 1,349
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library 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 |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: selecteur_sites.php,v 1.10 2006-10-11 17:20:19 jp_milcent Exp $
/**
* Applette : selecteur sites
*
* Génère un formulaire contenant un menu déroulant permettant de choisir un site parmis les disponibles.
* Nécessite :
* - Constantes et globales de Papyrus.
* - Base de données de Papyrus
* - Pear Net_URL
* - Pear DB
* - API Débogage 1.0
* Le nom de l'applette est "SELECTEUR_SITES" pour afficher un formulaire HTML et "SELECTEUR_SITES_XHTML"
* pour afficher un formulaire XHTML strict.
*
*@package Applette
*@subpackage Selecteur_sites
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author Aucun
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.10 $ $Date: 2006-10-11 17:20:19 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTÊTE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
$_GEN_commun['info_applette_nom_fonction'] = 'afficherSelecteurSite';
$_GEN_commun['info_applette_balise'] = 'SELECTEUR_SITES_?(XHTML)?_?(SANS_(?:\d+_?)+)?';
 
 
/** Inclusion du fichier de configuration de cette applette.*/
require_once GEN_CHEMIN_APPLETTE.'selecteur_sites/configuration/sesi_config.inc.php';
 
// Inclusion des fichiers de traduction de l'applette.
if (file_exists(SESI_CHEMIN_LANGUE.'sesi_langue_'.$_GEN_commun['i18n'].'.inc.php')) {
/** Inclusion du fichier de traduction suite à la transaction avec le navigateur.*/
require_once SESI_CHEMIN_LANGUE.'sesi_langue_'.$_GEN_commun['i18n'].'.inc.php';
} else {
/** Inclusion du fichier de traduction par défaut.*/
require_once SESI_CHEMIN_LANGUE.'sesi_langue_'.SESI_I18N_DEFAUT.'.inc.php';
}
 
// +------------------------------------------------------------------------------------------------------+
// | CORPS du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
// +------------------------------------------------------------------------------------------------------+
// | LISTE de FONCTIONS |
// +------------------------------------------------------------------------------------------------------+
/** Fonnction GEN_afficherContenuApplette() - Fournit un formulaire de sélection des sites.
*
* Renvoie un formulaire permettant de passer de site en site pour une langue donnée.
* Le formulaire affiche les noms des sites en fonctions de la langue passée dans l'url.
* Necessite l'utilisation de Pear Net_URL par le programme appelant cette fonction.
*
* @param array tableau d'éventuel arguments présent dans la balise transmis à la fonction.
* @param array tableau global de Papyrus.
* @return string formulaire XHTML contenant les sites disponibles.
*/
function afficherSelecteurSite($tab_applette_arguments, $_GEN_commun)
{
// Initialisation de variable de configuration.
$liste_type_site = '102, 103';// Les id des types des sites pouvant apparaître dans le sélecteur
$objet_pear_db = $_GEN_commun['pear_db'];//objet Pear créé par DB contenant la connexion à la base de données.
$code_site = $_GEN_commun['url_site'];//identifiant du site courant.
$id_langue = $_GEN_commun['i18n'];//identifiant de la langue choisie
$url_base = PAP_URL;
$url_cle_site = GEN_URL_CLE_SITE;
$url_cle_i18n = GEN_URL_CLE_I18N;
$url_id_type_site = GEN_URL_ID_TYPE_SITE;
$indent_origine = 12;// Indentation de départ en nombre d'espace
$indent_pas = 4;// Pas d'indentation en nombre d'espace
// Récupérations des arguments passés dans la balise.
// Nous vérifions si on veut du XHTML strict ou pas
$bln_xhtml_strict = 0;
if (isset($tab_applette_arguments[2]) && $tab_applette_arguments[2] == 'XHTML') {
$bln_xhtml_strict = 1;
}
// Nous vérifions s'il y a des sites que nous ne voulons pas afficher:
$morceau_requete_id_suppr = '';
$tab_id_suppr_groupe = '';
if (isset($tab_applette_arguments[3]) && ereg('SANS_(.+)', $tab_applette_arguments[3], $tab_id_suppr_groupe)) {
if (preg_match('/^\d+$/', $tab_id_suppr_groupe[1])) {
$liste_id_suppr = $tab_id_suppr_groupe[1];
} else if (preg_match('/^\d+(?:_\d+)+$/', $tab_id_suppr_groupe[1])) {
$liste_id_suppr = preg_replace('/_/', ', ', $tab_id_suppr_groupe[1]);
} else {
$liste_id_suppr = '0';
}
$morceau_requete_id_suppr = 'AND gs_id_site NOT IN ('.$liste_id_suppr.') ';
}
// Recherche de tous les sites langue en cours
// On recherche l'ensemble des site en excluant le site admin ? (administration de Papyrus).
 
if (isset($id_langue) && ($id_langue != '')) {
$langue_test = $id_langue;
} else {
$langue_test = GEN_I18N_ID_DEFAUT;
}
$requete = 'SELECT gs_id_site, gs_code_num, gs_code_alpha, gs_nom, gs_ce_i18n '.
'FROM gen_site, gen_site_relation '.
'WHERE gsr_id_site_01 = gsr_id_site_02 '.
'AND gs_id_site = gsr_id_site_01 '.
'AND gsr_id_valeur IN ('.$liste_type_site.') '.
'AND gs_ce_i18n = "'.$langue_test.'" '.
$morceau_requete_id_suppr.// Liste des sites ne devant pas figurer
'ORDER BY gs_code_num ASC';// 102 = site "principal" et 103 = site "externe"
$resultat = $objet_pear_db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
$liste_site = array();
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_ASSOC)) {
// Si le site trouvé est une traduction vers la langue principale, on ne le selectionne pas
if ($langue_test == GEN_I18N_ID_DEFAUT) {
$requete_est_traduction = 'SELECT gsr_id_site_01 '.
'FROM gen_site_relation '.
'WHERE '.$ligne['gs_id_site'].' = gsr_id_site_02 ' .
'AND gsr_id_site_01 <> gsr_id_site_02 ' .
'AND gsr_id_valeur = 1 ';// 1 = "avoir traduction"
$resultat_est_traduction = $objet_pear_db->query($requete_est_traduction);
(DB::isError($resultat_est_traduction))
? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_est_traduction->getMessage(), $requete_est_traduction))
: '';
if ( $resultat_est_traduction->numRows() == 0 ) {
$liste_site[] = $ligne;
}
}
else {
$liste_site[] = $ligne;
}
}
$resultat->free();
 
// Si la langue en cours n'est pas la langue par défaut, recherche des sites ayant comme langue
// la langue par defaut et non traduits dans la langue en cours.
 
// On recherche l'ensemble des site en excluant le site admin (administration de Papyrus).
if ($langue_test != GEN_I18N_ID_DEFAUT) {
// Site ayant commme langue, la langue par defaut
$requete = 'SELECT gs_id_site, gs_code_num, gs_code_alpha, gs_nom, gs_ce_i18n '.
'FROM gen_site, gen_site_relation '.
'WHERE gsr_id_site_01 = gsr_id_site_02 '.
'AND gs_id_site = gsr_id_site_01 '.
'AND gsr_id_valeur IN ('.$liste_type_site.') '.
'AND gs_ce_i18n = "'.GEN_I18N_ID_DEFAUT.'" '.
$morceau_requete_id_suppr.// Liste des sites ne devant pas figurer
'ORDER BY gs_code_num ASC';// 102 = site "principal" et 103 = site "externe"
$resultat = $objet_pear_db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
// Est il traduit ? Non, alors affichage
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_ASSOC)) {
if (isset($id_langue) && ($id_langue != '')) {
$langue_test=$id_langue;
} else {
$langue_test=GEN_I18N_ID_DEFAUT;
}
$requete_est_traduction = 'SELECT gsr_id_site_01 '.
'FROM gen_site_relation '.
'WHERE '.$ligne['gs_id_site'].' = gsr_id_site_02 ' .
'AND gsr_id_site_01 <> gsr_id_site_02 ' .
'AND gsr_id_valeur = 1 ';// 1 = "avoir traduction"
$resultat_est_traduction = $objet_pear_db->query($requete_est_traduction);
(DB::isError($resultat_est_traduction))
? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_est_traduction->getMessage(), $requete_est_traduction))
: '';
if ( $resultat_est_traduction->numRows() == 0 ) {
$requete_traduction = 'SELECT gsr_id_site_01 '.
'FROM gen_site_relation, gen_site '.
'WHERE '.$ligne['gs_id_site'].' = gsr_id_site_01 ' .
'AND gsr_id_site_02 = gs_id_site '.
'AND gs_ce_i18n = "'.$langue_test.'" '.
'AND gsr_id_valeur = 1 ';// 1 = "avoir traduction"
$resultat_traduction = $objet_pear_db->query($requete_traduction);
(DB::isError($resultat_traduction))
? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_traduction->getMessage(), $requete_traduction))
: '';
if ( $resultat_traduction->numRows() == 0 ) {
$liste_site[] = $ligne;
}
$resultat_traduction->free();
}
}
$resultat->free();
}
if (count($liste_site) == 0 ) {
$retour = str_repeat(' ', $indent_origine + ($indent_pas * 0)).
'<!-- '.SESI_LG_ETIQUETTE_VALIDER.' -->';
} else {
// Préparation de l'url de retour du formulaire
$objet_pear_url = & new Net_URL($url_base);
 
// Préparation du code du sites
$champs_code_site = ($url_id_type_site == 'int') ? 'gs_code_num' : 'gs_code_alpha';
// Préparation du formulaire
$retour = str_repeat(' ', $indent_origine + ($indent_pas * 0)).
'<form id="sesi_selecteur" ';
// Test sur XHTML strict
if ($bln_xhtml_strict == 0) {
$retour .= 'name="sesi_selecteur" ';
}
$retour .= 'action="'.$objet_pear_url->getURL().'" method="get">'."\n";
$retour .= str_repeat(' ', $indent_origine + ($indent_pas * 1)).
'<fieldset>'."\n";
$retour .= str_repeat(' ', $indent_origine + ($indent_pas * 2)).
'<legend>'.SESI_LG_LEGENDE.'</legend>'."\n";
$retour .= str_repeat(' ', $indent_origine + ($indent_pas * 2)).
'<select id="sesi_'.$url_cle_site.'" name="'.$url_cle_site.'" onchange="javascript:this.form.submit();">'."\n";
$retour .= str_repeat(' ', $indent_origine + ($indent_pas * 3)).
'<option value="'.$code_site.'" selected="selected">'.SESI_LG_DEFAUT.'</option>'."\n";
foreach ($liste_site as $ligne ) {
// Initialisation des variables
$nom = $ligne['gs_nom'];
$retour .= str_repeat(' ', $indent_origine + ($indent_pas * 3)).
'<option value="'.$ligne[$champs_code_site].'">'.$nom.'</option>'."\n";
}
$retour .= str_repeat(' ', $indent_origine + ($indent_pas * 2)).
'</select>'."\n";
$retour .= str_repeat(' ', $indent_origine + ($indent_pas * 2)).
'<input id="sesi_ok" name="sesi_ok" type="submit" value="'.SESI_LG__VALIDER.'"/>'."\n";
$retour .= str_repeat(' ', $indent_origine + ($indent_pas * 1)).
'</fieldset>'."\n";
if ($langue_test != GEN_I18N_ID_DEFAUT) {
$retour .= str_repeat(' ', $indent_origine + ($indent_pas * 1)).
'<input name="'.$url_cle_i18n.'" type="hidden" value="'.$id_langue.'"/>'."\n";
}
$retour .= str_repeat(' ', $indent_origine + ($indent_pas * 0)).
'</form>'."\n";
}
return $retour;
}
 
// +------------------------------------------------------------------------------------------------------+
// | PIED du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.9 2006/04/28 12:41:49 florian
* corrections erreurs chemin
*
* Revision 1.8 2006/03/02 10:49:49 ddelon
* Fusion branche multilinguisme dans branche principale
*
* Revision 1.7.2.4 2006/02/28 14:02:07 ddelon
* Finition multilinguisme
*
* Revision 1.7.2.3 2006/01/19 21:26:20 ddelon
* Multilinguisme site + bug ftp
*
* Revision 1.7.2.2 2005/12/20 14:40:24 ddelon
* Fusion Head vers Livraison
*
* Revision 1.7.2.1 2005/12/07 19:46:14 ddelon
* Merge + navi sites
*
* Revision 1.7 2005/05/25 12:53:00 jpm
* Changement et ajout d'attributs id.
*
* Revision 1.6 2005/05/23 09:31:43 jpm
* Ajout d'une majuscule à un txt.
*
* Revision 1.5 2004/10/26 18:42:02 jpm
* Possibilité d'externaliser l'applette.
* Gestion des sites externes.
*
* Revision 1.4 2004/09/15 09:32:01 jpm
* Mise en conformité avec le standard XHTML Strict.
*
* Revision 1.3 2004/07/06 17:07:16 jpm
* Modification de la documentation pour une mailleur analyse par PhpDocumentor.
*
* Revision 1.2 2004/06/21 07:37:50 alex
* Modification d'un label
*
* Revision 1.1 2004/06/15 15:05:47 jpm
* Changement de nom et d'arborescence de Genesia en Papyrus.
*
* Revision 1.5 2004/05/05 08:27:12 jpm
* Ajout du paramétrage de l'indentation et l'utilisation de variable pour contenir les textes de l'appli.
*
* Revision 1.4 2004/05/05 06:44:28 jpm
* Complément des commentaires indiquant les paquetages nécessaire à l'applette.
*
* Revision 1.3 2004/05/03 11:19:10 jpm
* Intégration de la variable globale de Génésia dans les arguments de la fonction de l'applette.
*
* Revision 1.2 2004/05/01 16:13:11 jpm
* Ajout du nom de la balise de l'applette dans le code de l'applette.
*
* Revision 1.1 2004/05/01 10:30:59 jpm
* Ajout de l'applette selecteur de sites.
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/applettes/selecteur_sites/langues/sesi_langue_en.inc.php
New file
0,0 → 1,84
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2005 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This file is part of Papyrus. |
// | |
// | Foobar is free software; you can redistribute it and/or modify |
// | it under the terms of the GNU General Public License as published by |
// | the Free Software Foundation; either version 2 of the License, or |
// | (at your option) any later version. |
// | |
// | Foobar 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 General Public License for more details. |
// | |
// | You should have received a copy of the GNU General Public License |
// | along with Foobar; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: sesi_langue_en.inc.php,v 1.2 2006-03-02 10:49:49 ddelon Exp $
/**
* Traduction de l'applette selecteur de site : fr
*
* Fichier de traduction de l'applette Identification en français.
*
*@package Applette
*@subpackage Identification
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author Aucun
*@copyright Tela-Botanica 2000-2005
*@version $Revision: 1.2 $ $Date: 2006-03-02 10:49:49 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTETE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
// +------------------------------------------------------------------------------------------------------+
// | CORPS du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
/** Legende de l'applette */
define('SESI_LG_LEGENDE', 'Site selection');
/** Message du texte par defaut */
define('SESI_LG_DEFAUT', 'Site selection');
/** Texte du bouton valider.*/
define('SESI_LG__VALIDER', 'ok');
/** Texte message erreur */
define('SESI_LG_ETIQUETTE_VALIDER', 'Only one site available');
 
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.1.2.1 2005/12/07 19:46:14 ddelon
* Merge + navi sites
*
* Revision 1.5 2005/06/09 17:06:28 jpm
* Ajout de constantes de langue.
*
* Revision 1.4 2005/06/02 11:56:00 jpm
* Modification de l'affichage de l'identification.
*
* Revision 1.3 2005/04/14 16:37:27 jpm
* Ajout de la gestion de la modification de son inscription.
*
* Revision 1.2 2005/03/25 14:41:04 jpm
* Modification et ajout de constantes.
*
* Revision 1.1 2005/03/15 14:19:32 jpm
* Ajout d'un fichier de traduction.
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/applettes/selecteur_sites/langues/sesi_langue_fr.inc.php
New file
0,0 → 1,87
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2005 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This file is part of Papyrus. |
// | |
// | Foobar is free software; you can redistribute it and/or modify |
// | it under the terms of the GNU General Public License as published by |
// | the Free Software Foundation; either version 2 of the License, or |
// | (at your option) any later version. |
// | |
// | Foobar 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 General Public License for more details. |
// | |
// | You should have received a copy of the GNU General Public License |
// | along with Foobar; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: sesi_langue_fr.inc.php,v 1.3 2006-11-27 13:52:26 florian Exp $
/**
* Traduction de l'applette selecteur de site : fr
*
* Fichier de traduction de l'applette Identification en français.
*
*@package Applette
*@subpackage Identification
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author Aucun
*@copyright Tela-Botanica 2000-2005
*@version $Revision: 1.3 $ $Date: 2006-11-27 13:52:26 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTETE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
// +------------------------------------------------------------------------------------------------------+
// | CORPS du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
/** Legende de l'applette */
define('SESI_LG_LEGENDE', 'S&eacute;lecteur de monde');
/** Message du texte par defaut */
define('SESI_LG_DEFAUT', 'changer de site');
/** Texte du bouton valider.*/
define('SESI_LG__VALIDER', 'ok');
/** Texte message erreur */
define('SESI_LG_ETIQUETTE_VALIDER', 'Un seul site disponible dans Papyrus.');
 
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.2 2006/03/02 10:49:49 ddelon
* Fusion branche multilinguisme dans branche principale
*
* Revision 1.1.2.1 2005/12/07 19:46:14 ddelon
* Merge + navi sites
*
* Revision 1.5 2005/06/09 17:06:28 jpm
* Ajout de constantes de langue.
*
* Revision 1.4 2005/06/02 11:56:00 jpm
* Modification de l'affichage de l'identification.
*
* Revision 1.3 2005/04/14 16:37:27 jpm
* Ajout de la gestion de la modification de son inscription.
*
* Revision 1.2 2005/03/25 14:41:04 jpm
* Modification et ajout de constantes.
*
* Revision 1.1 2005/03/15 14:19:32 jpm
* Ajout d'un fichier de traduction.
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/applettes/moteur_recherche/bibliotheque/more_recherche_spip_article.class.php
New file
0,0 → 1,267
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This file is part of Papyrus. |
// | |
// | Foobar is free software; you can redistribute it and/or modify |
// | it under the terms of the GNU General Public License as published by |
// | the Free Software Foundation; either version 2 of the License, or |
// | (at your option) any later version. |
// | |
// | Foobar 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 General Public License for more details. |
// | |
// | You should have received a copy of the GNU General Public License |
// | along with Foobar; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id$
/**
* Classe permettant d'effectuer des recherches sur les informations des articles de Spip.
*
* Permet de rechercher et classer les articles en fonction d'une chaine.
* Utilisation des bibliothèques inclue par Papyrus :
* - Papyrus pap_meta.fonct.php
* - Papyrus pap_menu.fonct.php
* - Papyrus pap_url.class.php
*
*@package Applette
*@subpackage Moteur_Recherche
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author aucun
*@copyright Tela-Botanica 2000-2006
*@version $Revision$ $Date$
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTETE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
///** Inclusion du fichier contenant les fonctions de manipulations des menus de Papyrus.*/
//require_once GEN_CHEMIN_BIBLIO.'pap_menu.fonct.php';
 
// +------------------------------------------------------------------------------------------------------+
// | CORPS du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
class Recherche_Spip_Article extends Recherche {
// Constructeur
function Recherche_Menu_Meta($motif) {
$this->setMotif($motif);
}
// Accesseurs
function getMotif() {
return $this->motif;
}
function setMotif($motif) {
$this->motif = $motif;
}
// Méthodes
function rechercherMotif($motif) {
for ($i = 0; $i < count($GLOBALS['_MOTEUR_RECHERCHE_']['spip']); $i++ ) {
$db = DB::connect($GLOBALS['_MOTEUR_RECHERCHE_']['spip'][$i]['bdd_dsn']);
if (DB::isError($db)) {
$msg_erreur_connection = 'Impossible de se connecter à la base de données Spip.';
die(BOG_afficherErreurSql(__FILE__, __LINE__, $db->getMessage(), 'connexion à la base de données',$msg_erreur_connection));
}
$prefixe = $GLOBALS['_MOTEUR_RECHERCHE_']['spip'][$i]['table_prefixe'];
$url_base = $GLOBALS['_MOTEUR_RECHERCHE_']['spip'][$i]['url'];
$tab_articles = $this->retournerArticles($db, $prefixe);
foreach ($tab_articles as $article_id => $Article) {
// Initialisation du tableau de résultat vide
$aso_resultat = array( 'poids' => 0, 'url' => '', 'titre' => '',
'hreflang' => '', 'accesskey' => '', 'title' => '',
'date_creation' => '', 'description' => '');
// Analyse du poids de cette page vis à vis des données
$tab_champs_a_visiter = array('surtitre', 'titre', 'soustitre', 'descriptif', 'chapo', 'texte', 'ps');
foreach ($tab_champs_a_visiter as $val) {
// Vérification que le champ existe et contient quelque chose
if (isset($Article->$val) && $Article->$val != '') {
$aso_resultat['poids'] += $this->retournerOccurenceMotif($motif, $Article->$val);
}
}
if ($aso_resultat['poids'] > 0) {
// Création de l'url
$var_recherche = str_replace(' ', '+', trim($motif));
$aso_resultat['url_simple'] = $url_base.'article'.$article_id.'.html';
$aso_resultat['url'] = $aso_resultat['url_simple'].'?var_recherche='.$var_recherche;
// Récupération du titre de la page
if (trim($Article->titre) != '') {
$aso_resultat['titre'] = htmlentities($Article->titre);
} else if (trim($Article->surtitre) != '') {
$aso_resultat['titre'] = htmlentities($Article->surtitre);
} else if (trim($Article->soustitre) != '') {
$aso_resultat['titre'] = htmlentities($Article->soustitre);
}
$aso_resultat['hreflang'] = htmlentities($Article->lang);
$aso_resultat['description'] = $this->couper($Article->texte, MORE_RESULTAT_TAILLE_DESCRIPTION);
if (($jour = date('d', strtotime($Article->date)) ) != 0 ) {
$aso_resultat['date_creation'] .= '<span class="page_modification_jour"> '.$jour.'</span>'."\n";
}
if (($mois = $this->traduireMois(date('m', strtotime($Article->date))) ) != '' ) {
$aso_resultat['date_creation'] .= '<span class="page_modification_mois"> '.$mois.'</span>'."\n";
}
if (($annee = date('Y', strtotime($Article->date)) ) != 0 ) {
$aso_resultat['date_creation'] .= '<span class="page_modification_annee"> '.$annee.'</span>'."\n";
}
$this->setResultat($aso_resultat);
}
}
}
return $this->getResultats();
}
/** Renvoie un tableau contenant les infos sur les articles
*
* @param mixed une instance de la classse Pear DB.
* @param string le préfixe pour les tables spip.
* @return array tableau contenant les articles.
*/
function retournerArticles(&$db, $prefixe = '')
{
//----------------------------------------------------------------------------
// Recherche des informations sur le menu
$requete = 'SELECT * '.
'FROM '.$prefixe.'spip_articles '.
'WHERE statut = "publie"';
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
//----------------------------------------------------------------------------
// Récupération des infos
$tab_retour = array();
while ($info_article = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
$tab_retour[$info_article->id_article] = $info_article;
}
$resultat->free();
return $tab_retour;
}
// Fichier : inc_texte.php3
function couper($texte, $taille = 50)
{
$texte = substr($texte, 0, 400 + 2*$taille); /* eviter de travailler sur 10ko pour extraire 150 caracteres */
// on utilise les \r pour passer entre les gouttes
$texte = str_replace("\r\n", "\n", $texte);
$texte = str_replace("\r", "\n", $texte);
// sauts de ligne et paragraphes
$texte = ereg_replace("\n\n+", "\r", $texte);
$texte = ereg_replace("<(p|br)( [^>]*)?".">", "\r", $texte);
// supprimer les traits, lignes etc
$texte = ereg_replace("(^|\r|\n)(-[-#\*]*|_ )", "\r", $texte);
// supprimer les tags
$texte = $this->supprimer_tags($texte);
$texte = trim(str_replace("\n"," ", $texte));
$texte .= "\n"; // marquer la fin
// travailler en accents charset
// On supprime dans Papyrus car cela tire trop de fonctions...
//$texte = $this->filtrer_entites($texte);
// supprimer les liens
$texte = ereg_replace("\[->([^]]*)\]","\\1", $texte); // liens sans texte
$texte = ereg_replace("\[([^\[]*)->([^]]*)\]","\\1", $texte);
// supprimer les notes
$texte = ereg_replace("\[\[([^]]|\][^]])*\]\]", "", $texte);
// supprimer les codes typos
$texte = ereg_replace("[}{]", "", $texte);
// supprimer les tableaux
$texte = ereg_replace("(^|\r)\|.*\|\r", "\r", $texte);
// couper au mot precedent
$long = $this->spip_substr($texte, 0, max($taille-4,1));
$court = ereg_replace("([^[:space:]][[:space:]]+)[^[:space:]]*\n?$", "\\1", $long);
$points = MORE_LG_RESULTAT_ETC;
// trop court ? ne pas faire de (...)
if (strlen($court) < max(0.75 * $taille,2)) {
$points = '';
$long = $this->spip_substr($texte, 0, $taille);
$texte = ereg_replace("([^[:space:]][[:space:]]+)[^[:space:]]*$", "\\1", $long);
// encore trop court ? couper au caractere
if (strlen($texte) < 0.75 * $taille)
$texte = $long;
} else
$texte = $court;
if (strpos($texte, "\n")) // la fin est encore la : c'est qu'on n'a pas de texte de suite
$points = '';
// remettre les paragraphes
$texte = ereg_replace("\r+", "\n\n", $texte);
// supprimer l'eventuelle entite finale mal coupee
$texte = preg_replace('/&#?[a-z0-9]*$/', '', $texte);
return trim($texte).$points;
}
// Gerer les outils mb_string
// Fichier : inc_texte.php3
function spip_substr($c, $start=0, $end='')
{
// methode substr normale
if ($end) {
return substr($c, $start, $end);
} else {
return substr($c, $start);
}
}
 
// Suppression basique et brutale de tous les <...>
// Fichier : inc_filtres.php3
function supprimer_tags($texte, $rempl = "")
{
$texte = preg_replace(",<[^>]*>,U", $rempl, $texte);
// ne pas oublier un < final non ferme
$texte = str_replace('<', ' ', $texte);
return $texte;
}
 
}
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log$
* Revision 1.4 2006/11/14 16:08:40 jp_milcent
* Paramétrage de la découpe de la description et du symbole "etc"
*
* Revision 1.3 2006/10/17 09:21:40 jp_milcent
* Mise en commun des spécifications de la recherche.
*
* Revision 1.2 2006/10/16 14:11:30 jp_milcent
* Amélioration du moteur de recherche.
* Utilisation de l'opérateur "et" entre les mots recherchés.
*
* Revision 1.1 2006/05/19 10:04:55 jp_milcent
* Ajout d'un moteur de recherche analysant les articles des sites sous Spip.
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/applettes/moteur_recherche/bibliotheque/more_recherche.class.php
New file
0,0 → 1,228
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This file is part of Papyrus. |
// | |
// | Foobar is free software; you can redistribute it and/or modify |
// | it under the terms of the GNU General Public License as published by |
// | the Free Software Foundation; either version 2 of the License, or |
// | (at your option) any later version. |
// | |
// | Foobar 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 General Public License for more details. |
// | |
// | You should have received a copy of the GNU General Public License |
// | along with Foobar; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: more_recherche.class.php,v 1.9.2.1 2006-12-12 13:55:23 jp_milcent Exp $
/**
* Classe permettant d'effectuer des recherches sur les métas informations des menus.
*
* Permet de rechercher et classer les menus en fonction d'une chaine.
*
*@package Applette
*@subpackage Moteur_Recherche
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author aucun
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.9.2.1 $ $Date: 2006-12-12 13:55:23 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTETE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
// +------------------------------------------------------------------------------------------------------+
// | CORPS du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
class Recherche {
var $motif = '';
var $moteurs_recherches = array();
var $resultats = array();
// Constructeur
function Recherche($motif) {
$this->setMotif($motif);
}
// Accesseurs
function getMotif() {
return $this->motif;
}
function setMotif($motif) {
$this->motif = $motif;
}
function getMoteurs() {
return $this->moteurs_recherches;
}
function getMoteur($id) {
return $this->moteurs_recherches[$id];
}
function setMoteur($val) {
$id_nouveau = count($this->moteurs_recherches);
$this->moteurs_recherches[$id_nouveau] = $val;
}
function getResultats() {
return $this->resultats;
}
function setResultats($val) {
$this->resultats = $val;
}
function setResultat($aso_page) {
$id_nouveau = count($this->resultats);
$this->resultats[$id_nouveau] = $aso_page;
}
// Méthodes
function ajouterRecherche(&$objet_recherche) {
return $this->setMoteur($objet_recherche);
}
 
function rechercherMotif() {
foreach ($this->getMoteurs() as $cle => $val) {
$this->setResultats(array_merge((array)$this->getResultats(),(array)$val->rechercherMotif($this->getMotif())));
}
$aso_resultats = $this->getResultats();
function comparer($a, $b) {
if ($a['poids'] > $b['poids']) {
return -1;
}
if ($a['poids'] < $b['poids']) {
return +1;
}
if ($a['poids'] = $b['poids']) {
return 0;
}
}
usort($aso_resultats, 'comparer');
$pds_max = 0;
if (isset($aso_resultats[0]['poids'])) {
$pds_max = $aso_resultats[0]['poids'];
}
for ($i = 0 ; $i < count($aso_resultats) ; $i++) {
$aso_resultats[$i]['score'] = round((100 / $pds_max) * $aso_resultats[$i]['poids'], 1);
}
return $aso_resultats;
}
/** Renvoie le nombre d'occurences total de la présence de chaque mot.
*
* @param string le motif à rechercher.
* @param string le texte dans lequel effectuer la recherche.
* @return integer le nombre de fois où les mots sont trouvés.
*/
function retournerOccurenceMotif($motif, &$texte, $mode = MORE_MODE)
{
$nbre_correspondance = 0;
$nbre_correspondance_total = 0;
if ($mode == 1) {
// Découpage en mot
$tab_motif = explode(' ', trim($motif));
} else {
// La chaine saisie par l'utilisateur est recherchée tel quel
$tab_motif[] = trim($motif);
}
// Nous recherchons chaque mot
$compteur_mot = 0;
foreach ($tab_motif as $mot) {
//$nbre_correspondance += preg_match_all('/'.$mot.'/i', $texte, $tab_morceaux);
$nbre_correspondance = substr_count(strtolower($texte), strtolower(stripslashes($mot)));
if ($nbre_correspondance > 0) {
$compteur_mot++;
}
$nbre_correspondance_total += $nbre_correspondance;
}
// Si tous les mots recherchés sont présents nous renvoyons le poids de la page.
if ($compteur_mot == count($tab_motif)) {
return $nbre_correspondance_total;
} else {
return 0;
}
}
function traduireMois($mois_numerique)
{
switch ($mois_numerique) {
case '01' :
return 'janvier';
case '02' :
return 'février';
case '03' :
return 'mars';
case '04' :
return 'avril';
case '05' :
return 'mai';
case '06' :
return 'juin';
case '07' :
return 'juillet';
case '08' :
return 'août';
case '09' :
return 'septembre';
case '10' :
return 'octobre';
case '11' :
return 'novembre';
case '12' :
return 'décembre';
default:
return '';
}
}
}
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.9 2006/10/17 09:21:40 jp_milcent
* Mise en commun des spécifications de la recherche.
*
* Revision 1.8 2006/05/23 14:18:19 jp_milcent
* Ajout de la gestion du mode de recherche au moteur de recherche de Papyrus.
* Soit on recherche chaque mot du motif, soit le motif entier.
*
* Revision 1.7 2006/05/19 10:04:55 jp_milcent
* Ajout d'un moteur de recherche analysant les articles des sites sous Spip.
*
* Revision 1.6 2006/04/28 12:41:49 florian
* corrections erreurs chemin
*
* Revision 1.5 2005/09/20 17:01:22 ddelon
* php5 et bugs divers
*
* Revision 1.4 2005/05/25 13:49:22 jpm
* Corection erreur pour la recherche dans le contenu.
*
* Revision 1.3 2005/05/19 12:46:12 jpm
* Correction bogue accesskey.
* Ajout d'un id à la liste.
* Arrondissement des score.
*
* Revision 1.2 2005/04/14 17:39:34 jpm
* Amélioration du moteur de rechercher :
* - pourcentage
* - ajout d'info
*
* Revision 1.1 2004/12/07 10:24:06 jpm
* Moteur de recherche version de départ.
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/applettes/moteur_recherche/bibliotheque/more_recherche_papyrus_menu.class.php
New file
0,0 → 1,189
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This file is part of Papyrus. |
// | |
// | Foobar is free software; you can redistribute it and/or modify |
// | it under the terms of the GNU General Public License as published by |
// | the Free Software Foundation; either version 2 of the License, or |
// | (at your option) any later version. |
// | |
// | Foobar 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 General Public License for more details. |
// | |
// | You should have received a copy of the GNU General Public License |
// | along with Foobar; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: more_recherche_papyrus_menu.class.php,v 1.11 2006-11-21 18:52:20 jp_milcent Exp $
/**
* Classe permettant d'effectuer des recherches sur les informations des menus de Papyrus.
*
* Permet de rechercher et classer les menus en fonction d'une chaine.
* Utilisation des bibliothèques inclue par Papyrus :
* - Papyrus pap_meta.fonct.php
* - Papyrus pap_menu.fonct.php
* - Papyrus pap_url.class.php
*
*@package Applette
*@subpackage Moteur_Recherche
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author aucun
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.11 $ $Date: 2006-11-21 18:52:20 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTETE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
///** Inclusion du fichier contenant les fonctions de manipulations des menus de Papyrus.*/
//require_once GEN_CHEMIN_BIBLIO.'pap_menu.fonct.php';
 
// +------------------------------------------------------------------------------------------------------+
// | CORPS du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
class Recherche_Papyrus_Menu extends Recherche{
// Constructeur
function Recherche_Menu_Meta($motif) {
$this->setMotif($motif);
}
// Accesseurs
function getMotif() {
return $this->motif;
}
function setMotif($motif) {
$this->motif = $motif;
}
// Méthodes
function rechercherMotif($motif) {
$db = $GLOBALS['_MOTEUR_RECHERCHE_']['bd']['papyrus'];
$tab_menus = GEN_retournerMenus($db);
foreach ($tab_menus as $cle => $menu_id) {
// Initialisation du tableau de résultat vide
$aso_resultat = array( 'poids' => 0, 'url' => '', 'titre' => '',
'hreflang' => '', 'accesskey' => '', 'title' => '',
'date_creation' => '', 'description' => '');
// Récupération des infos du menu courant : transtypage pour éviter les erreur avec array_merge
$aso_menu_info = (array) GEN_lireInfoMenu($db, $menu_id, DB_FETCHMODE_ASSOC);
// Récupération du contenu du menu courant : transtypage pour éviter les erreur avec array_merge
$aso_menu_contenu = (array) GEN_lireContenuMenu($db, $menu_id, DB_FETCHMODE_ASSOC);
// Fusion des deux tableaux de champs à analyser
$aso_menu = array_merge($aso_menu_info, $aso_menu_contenu);
// Analyse du poids de cette page vis à vis des méta informations et du contenu
$tab_champs_a_visiter = array( 'gm_nom', 'gm_titre', 'gm_titre_alternatif', 'gm_mots_cles',
'gm_description_libre', 'gm_description_resume', 'gm_description_table_matieres',
'gm_source', 'gm_auteur', 'gm_contributeur', 'gm_editeur', 'gm_categorie',
'gm_public', 'gmc_contenu');
foreach ($tab_champs_a_visiter as $val) {
// Vérification que le champ existe et contient quelque chose
if (isset($aso_menu[$val]) && $aso_menu[$val] != '') {
$aso_resultat['poids'] += $this->retournerOccurenceMotif($motif, $aso_menu[$val]);
}
}
// Si le menu contient les mots recherchés nous poursuivons
if ($aso_resultat['poids'] > 0) {
// Création de l'url
// TODO : utiliser comme pour spip un fichier de config spécifique pour virer PAP_URL d'ici
$une_url =& new Pap_URL(PAP_URL);
$une_url->setId($menu_id);
$aso_resultat['url_simple'] = $une_url->getURL();
$une_url->addQueryString('var_recherche', $motif);
$aso_resultat['url'] = $une_url->getURL();
$une_url->removeQueryString('var_recherche');
// Récupération du titre de la page
if (trim($aso_menu_info['gm_nom']) != '') {
$aso_resultat['titre'] = htmlentities($aso_menu_info['gm_nom']);
} else if (trim($aso_menu_info['gm_titre']) != '') {
$aso_resultat['titre'] = htmlentities($aso_menu_info['gm_titre']);
} else if (trim($aso_menu_info['gm_titre_alternatif']) != '') {
$aso_resultat['titre'] = htmlentities($aso_menu_info['gm_titre_alternatif']);
}
$aso_resultat['hreflang'] = htmlentities($aso_menu_info['gm_ce_i18n']);
$raccourci_txt = '';
$aso_resultat['accesskey'] = htmlentities($aso_menu_info['gm_raccourci_clavier']);
if ($aso_resultat['accesskey'] != '') {
$raccourci_txt = MORE_LG_RESULTAT_CADRE_OUVRIR.
MORE_LG_RESULTAT_RACCOURCI.$aso_resultat['accesskey'].' '.
MORE_LG_RESULTAT_CADRE_FERMER.MORE_LG_RESULTAT_POINT.' ';
}
$aso_resultat['title'] = htmlentities($raccourci_txt.$aso_menu_info['gm_description_resume']);
$aso_resultat['description'] = htmlentities($aso_menu_info['gm_description_libre']);
if (($jour = date('d', strtotime($aso_menu_info['gm_date_creation'] )) ) != 0 ) {
$aso_resultat['date_creation'] .= '<span class="page_modification_jour"> '.$jour.'</span>'."\n";
}
if (($mois = $this->traduireMois(date('m', strtotime($aso_menu_info['gm_date_creation'] ))) ) != '' ) {
$aso_resultat['date_creation'] .= '<span class="page_modification_mois"> '.$mois.'</span>'."\n";
}
if (($annee = date('Y', strtotime($aso_menu_info['gm_date_creation'] )) ) != 0 ) {
$aso_resultat['date_creation'] .= '<span class="page_modification_annee"> '.$annee.'</span>'."\n";
}
$this->setResultat($aso_resultat);
}
}
return $this->getResultats();
}
}
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.10 2006/11/20 09:36:59 jp_milcent
* Correction bogue zéro résultat et ajout d'url simple pour indiquer la page de l'article.
*
* Revision 1.9 2006/10/17 09:21:40 jp_milcent
* Mise en commun des spécifications de la recherche.
*
* Revision 1.8 2006/10/16 14:11:30 jp_milcent
* Amélioration du moteur de recherche.
* Utilisation de l'opérateur "et" entre les mots recherchés.
*
* Revision 1.7 2006/10/10 13:28:13 jp_milcent
* Suppression d'une variable et utilisation de la constante PAP_URL
*
* Revision 1.6 2006/05/19 10:04:55 jp_milcent
* Ajout d'un moteur de recherche analysant les articles des sites sous Spip.
*
* Revision 1.5 2006/04/28 12:41:49 florian
* corrections erreurs chemin
*
* Revision 1.4 2005/05/25 13:49:22 jpm
* Corection erreur pour la recherche dans le contenu.
*
* Revision 1.3 2005/05/19 12:46:12 jpm
* Correction bogue accesskey.
* Ajout d'un id à la liste.
* Arrondissement des score.
*
* Revision 1.2 2005/04/14 17:39:34 jpm
* Amélioration du moteur de rechercher :
* - pourcentage
* - ajout d'info
*
* Revision 1.1 2004/12/07 10:24:06 jpm
* Moteur de recherche version de départ.
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/applettes/moteur_recherche/langues/more_langue_en.inc.php
New file
0,0 → 1,116
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This file is part of Papyrus. |
// | |
// | Foobar is free software; you can redistribute it and/or modify |
// | it under the terms of the GNU General Public License as published by |
// | the Free Software Foundation; either version 2 of the License, or |
// | (at your option) any later version. |
// | |
// | Foobar 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 General Public License for more details. |
// | |
// | You should have received a copy of the GNU General Public License |
// | along with Foobar; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: more_langue_en.inc.php,v 1.4 2006-11-14 16:07:41 jp_milcent Exp $
/**
* Gestion des langues de l'applette Moteur_Recherche
*
* Contient les constantes pour la langue anglaise de l'applette MORE.
*
*@package Applette
*@subpackage Moteur_Recherche
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author Aucun
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.4 $ $Date: 2006-11-14 16:07:41 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTETE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
 
// +------------------------------------------------------------------------------------------------------+
// | CORPS du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
// Le formulaire de sélection du site dont les menus doivent être administrer :
define('MORE_LG_FORM_TITRE', 'Search engine');
define('MORE_LG_FORM_ACCESSKEY', '4');
define('MORE_LG_FORM_MOTIF', 'Search : ');
define('MORE_LG_FORM_MOTIF_REGLE', 'You must type a string !');
define('MORE_LG_FORM_MOTIF_VALUE', 'Search');
define('MORE_LG_FORM_VALIDER', 'ok');
define('MORE_LG_FORM_SYMBOLE_OBLIGATOIRE', '*');
define('MORE_LG_TITRE', 'Search result of : ');
define('MORE_LG_USURPATION', 'Search of : ');
 
// Les résultats de la recherche :
define('MORE_LG_RESULTAT_TITRE', 'Search results : %s page found');
define('MORE_LG_RESULTAT_TITRE_PLURIEL', 'Search results : %s pages found');
define('MORE_LG_RESULTAT_RACCOURCI', 'Shortcut : ');
define('MORE_LG_RESULTAT_DESCRIPTION', 'Description : ');
define('MORE_LG_RESULTAT_DATE_CREATION', 'Creation date : ');
define('MORE_LG_RESULTAT_DETAIL', 'Detail : ');
define('MORE_LG_RESULTAT_POIDS', 'Weight : ');
define('MORE_LG_RESULTAT_SCORE', 'Accuracy : ');
define('MORE_LG_RESULTAT_URL', 'URL : ');
define('MORE_LG_RESULTAT_SEPARATEUR', '-');
define('MORE_LG_RESULTAT_POURCENT', '%');
define('MORE_LG_RESULTAT_CADRE_OUVRIR', '(');
define('MORE_LG_RESULTAT_CADRE_FERMER', ')');
define('MORE_LG_RESULTAT_POINT', '.');
define('MORE_LG_RESULTAT_VIDE', 'No matches for this query!');
define('MORE_LG_RESULTAT_ETC', ' (...)');
 
// +------------------------------------------------------------------------------------------------------+
// | PIED du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.3 2006/05/19 10:04:55 jp_milcent
* Ajout d'un moteur de recherche analysant les articles des sites sous Spip.
*
* Revision 1.2 2006/03/02 10:49:49 ddelon
* Fusion branche multilinguisme dans branche principale
*
* Revision 1.1.2.2 2005/12/27 15:56:00 ddelon
* Fusion Head vers multilinguisme (wikini double clic)
*
* Revision 1.1.2.1 2005/12/20 14:40:25 ddelon
* Fusion Head vers Livraison
*
* Revision 1.4 2005/10/26 08:14:51 jp_milcent
* Changement du terme "score" en "pertinence".
*
* Revision 1.3 2005/05/25 13:49:22 jpm
* Corection erreur pour la recherche dans le contenu.
*
* Revision 1.2 2005/04/14 17:39:34 jpm
* Amélioration du moteur de rechercher :
* - pourcentage
* - ajout d'info
*
* Revision 1.1 2004/12/07 10:24:16 jpm
* Moteur de recherche version de départ.
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/applettes/moteur_recherche/langues/more_langue_fr.inc.php
New file
0,0 → 1,113
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This file is part of Papyrus. |
// | |
// | Foobar is free software; you can redistribute it and/or modify |
// | it under the terms of the GNU General Public License as published by |
// | the Free Software Foundation; either version 2 of the License, or |
// | (at your option) any later version. |
// | |
// | Foobar 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 General Public License for more details. |
// | |
// | You should have received a copy of the GNU General Public License |
// | along with Foobar; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: more_langue_fr.inc.php,v 1.7 2006-11-14 16:07:41 jp_milcent Exp $
/**
* Gestion des langues de l'applette Moteur_Recherche
*
* Contient les constantes pour la langue française de l'applette MORE.
*
*@package Applette
*@subpackage Moteur_Recherche
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author Aucun
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.7 $ $Date: 2006-11-14 16:07:41 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTETE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
 
// +------------------------------------------------------------------------------------------------------+
// | CORPS du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
// Le formulaire de sélection du site dont les menus doivent être administrer :
define('MORE_LG_FORM_TITRE', 'Moteur de recherche');
define('MORE_LG_FORM_ACCESSKEY', '4');
define('MORE_LG_FORM_MOTIF', 'Rechercher : ');
define('MORE_LG_FORM_MOTIF_REGLE', 'Une chaine doit être saisie pour pouvoir lancer la recherche !');
define('MORE_LG_FORM_MOTIF_VALUE', 'Rechercher');
define('MORE_LG_FORM_VALIDER', 'ok');
define('MORE_LG_FORM_SYMBOLE_OBLIGATOIRE', '*');
define('MORE_LG_TITRE', 'Résultat de la recherche de : ');
define('MORE_LG_USURPATION', 'Recherche de : ');
 
// Les résultats de la recherche :
define('MORE_LG_RESULTAT_TITRE', 'Résultats de la recherche : %s page trouvée');
define('MORE_LG_RESULTAT_TITRE_PLURIEL', 'Résultats de la recherche : %s pages trouvées');
define('MORE_LG_RESULTAT_RACCOURCI', 'Raccourci : ');
define('MORE_LG_RESULTAT_DESCRIPTION', 'Description : ');
define('MORE_LG_RESULTAT_DATE_CREATION', 'Date de création : ');
define('MORE_LG_RESULTAT_DETAIL', 'Détail : ');
define('MORE_LG_RESULTAT_POIDS', 'Poids : ');
define('MORE_LG_RESULTAT_SCORE', 'Pertinence : ');
define('MORE_LG_RESULTAT_URL', 'URL : ');
define('MORE_LG_RESULTAT_SEPARATEUR', '-');
define('MORE_LG_RESULTAT_POURCENT', '%');
define('MORE_LG_RESULTAT_CADRE_OUVRIR', '(');
define('MORE_LG_RESULTAT_CADRE_FERMER', ')');
define('MORE_LG_RESULTAT_POINT', '.');
define('MORE_LG_RESULTAT_VIDE', 'Aucun résultat pour cette recherche!');
define('MORE_LG_RESULTAT_ETC', ' (...)');
 
// +------------------------------------------------------------------------------------------------------+
// | PIED du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.6 2006/05/19 10:04:55 jp_milcent
* Ajout d'un moteur de recherche analysant les articles des sites sous Spip.
*
* Revision 1.5 2006/03/02 10:49:49 ddelon
* Fusion branche multilinguisme dans branche principale
*
* Revision 1.4.2.1 2005/12/27 15:56:00 ddelon
* Fusion Head vers multilinguisme (wikini double clic)
*
* Revision 1.4 2005/10/26 08:14:51 jp_milcent
* Changement du terme "score" en "pertinence".
*
* Revision 1.3 2005/05/25 13:49:22 jpm
* Corection erreur pour la recherche dans le contenu.
*
* Revision 1.2 2005/04/14 17:39:34 jpm
* Amélioration du moteur de rechercher :
* - pourcentage
* - ajout d'info
*
* Revision 1.1 2004/12/07 10:24:16 jpm
* Moteur de recherche version de départ.
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/applettes/moteur_recherche/squelettes/resultat_std.tpl.html
New file
0,0 → 1,26
<h1><?=$titre;?></h1>
<?php if ($nbre_pages == 0) : ?>
<p class="information"><?=$vide;?></p>
<?php else : ?>
<ul id="more_resultat">
<?php foreach ($resultats as $val) : ?>
<li>
<h2><a href="<?=$val['url'];?>" <?=$val['hreflang']!= ''?'hreflang="'.$val['hreflang'].'"':'';?> <?=$val['accesskey']!= ''?'accesskey="'.$val['accesskey'].'"':'';?> <?=$val['title']!= ''?'title="'.$val['title'].'"':'';?> ><?=$val['titre'];?></a></h2>
<dl>
<?php if ($val['score'] != '') : ?>
<dt><?=MORE_LG_RESULTAT_SCORE;?></dt>
<dd><?=$val['score'].MORE_LG_RESULTAT_POURCENT;?></dd>
<?php endif; ?>
<?php if ($val['date_creation'] != '') : ?>
<dt><?=MORE_LG_RESULTAT_DATE_CREATION;?></dt>
<dd><?=$val['date_creation'];?></dd>
<?php endif; ?>
<?php if ($val['description'] != '') : ?>
<dt><?=MORE_LG_RESULTAT_DESCRIPTION;?></dt>
<dd><?=$val['description'];?></dd>
<?php endif; ?>
</dl>
</li>
<?php endforeach; ?>
</ul>
<?php endif;?>
/branches/v1.0-menes/papyrus/applettes/moteur_recherche/squelettes/resultat_gg.tpl.html
New file
0,0 → 1,31
<h1><?=$titre;?></h1>
<?php if ($nbre_pages == 0) : ?>
<p class="information"><?=$vide;?></p>
<?php else : ?>
<ul id="more_resultat">
<?php foreach ($resultats as $val) : ?>
<li>
<h2><a href="<?=$val['url'];?>" <?=$val['hreflang']!= ''?'hreflang="'.$val['hreflang'].'"':'';?> <?=$val['accesskey']!= ''?'accesskey="'.$val['accesskey'].'"':'';?><?=$val['title']!= ''?'title="'.$val['title'].'"':'';?> ><?=$val['titre'];?></a></h2>
<dl class="more_info">
<?php if ($val['date_creation'] != '') : ?>
<dt class="more_iidc"><?=MORE_LG_RESULTAT_DATE_CREATION;?></dt>
<dd class="more_ivdc"><?=$val['date_creation'];?></dd>
<?php endif; ?>
<?php if ($val['description'] != '') : ?>
<dt class="more_iid"><?=MORE_LG_RESULTAT_DESCRIPTION;?></dt>
<dd class="more_ivd"><?=$val['description'];?></dd>
<?php endif; ?>
<dt class="more_iid"><?=MORE_LG_RESULTAT_DETAIL;?></dt>
<dd class="more_ivd">
<ul class="more_detail">
<li class="more_du"><span class="more_dui"><?=MORE_LG_RESULTAT_URL;?></span><span class="more_duv"><a href="<?=$val['url'];?>" <?=$val['hreflang']!= ''?'hreflang="'.$val['hreflang'].'"':'';?> <?=$val['accesskey']!= ''?'accesskey="'.$val['accesskey'].'"':'';?> ><?=$val['url_simple'];?></a></span</li>
<?php if ($val['score'] != '') : ?>
<li class="more_ds"><span class="more_dsi"><?=MORE_LG_RESULTAT_SCORE;?></span><span class="more_dsv"><?=$val['score'].MORE_LG_RESULTAT_POURCENT;?></span></li>
<?php endif; ?>
</ul>
</dd>
</dl>
</li>
<?php endforeach; ?>
</ul>
<?php endif;?>
/branches/v1.0-menes/papyrus/applettes/moteur_recherche/squelettes/formulaire.tpl.html
New file
0,0 → 1,8
<form action="<?=$form_url;?>" method="post" id="form_more_recherche">
<fieldset>
<legend><?=MORE_LG_FORM_TITRE;?></legend>
<label for="more_motif"><?=MORE_LG_FORM_MOTIF;?></label>
<input id="more_motif" name="more_motif" tabindex="<?=$form_tab;?>" maxlength="<?=MORE_FORM_MOTIF_MAXLENGTH;?>" accesskey="<?=MORE_LG_FORM_ACCESSKEY;?>" type="text" value="<?=$more_motif;?>" />
<input id="more_ok" name="more_ok" tabindex="<?=++$form_tab;?>" value="<?=MORE_LG_FORM_VALIDER;?>" type="submit" />
</fieldset>
</form>
/branches/v1.0-menes/papyrus/applettes/moteur_recherche/configuration/more_config_spip.inc.php
New file
0,0 → 1,66
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This file is part of Papyrus. |
// | |
// | Foobar is free software; you can redistribute it and/or modify |
// | it under the terms of the GNU General Public License as published by |
// | the Free Software Foundation; either version 2 of the License, or |
// | (at your option) any later version. |
// | |
// | Foobar 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 General Public License for more details. |
// | |
// | You should have received a copy of the GNU General Public License |
// | along with Foobar; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id$
/**
* Fichier de configuration de la recherche dans Spip.
*
* Permet de définir certains paramètres valables pour toutes l'applette MORE.
*
*@package Applette
*@subpackage Moteur_Recherche
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author aucun
*@copyright Tela-Botanica 2000-2006
*@version $Revision$ $Date$
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTETE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
$GLOBALS['_MOTEUR_RECHERCHE_']['spip'] = array();
// Information pour un premier site Spip...
//$GLOBALS['_MOTEUR_RECHERCHE_']['spip'][0] =
// array( 'bdd_dsn' => 'mysql://nom_utilisateur:mot_de_passe@localhost/nom_base_de_donnees',
// 'table_prefixe' => '',
// 'url' => 'url_de_base_du_spip');
// Information pour un deuxième site Spip...
//$GLOBALS['_MOTEUR_RECHERCHE_']['spip'][1] =
// array( 'bdd_dsn' => 'mysql://nom_utilisateur:mot_de_passe@localhost/nom_base_de_donnees',
// 'table_prefixe' => '',
// 'url' => 'url_de_base_du_spip');
// Ainsi de suite...
// +------------------------------------------------------------------------------------------------------+
// | CORPS du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log$
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/applettes/moteur_recherche/configuration/more_configuration.inc.php
New file
0,0 → 1,105
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This file is part of Papyrus. |
// | |
// | Foobar is free software; you can redistribute it and/or modify |
// | it under the terms of the GNU General Public License as published by |
// | the Free Software Foundation; either version 2 of the License, or |
// | (at your option) any later version. |
// | |
// | Foobar 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 General Public License for more details. |
// | |
// | You should have received a copy of the GNU General Public License |
// | along with Foobar; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: more_configuration.inc.php,v 1.5 2006-11-14 16:08:12 jp_milcent Exp $
/**
* Fichier de configuration général de l'applette Moteur_Recherche.
*
* Permet de définir certains paramètres valables pour toutes l'applette MORE.
*
*@package Applette
*@subpackage Moteur_Recherche
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author aucun
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.5 $ $Date: 2006-11-14 16:08:12 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTETE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
// +------------------------------------------------------------------------------------------------------+
// | CORPS du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
/** Constante stockant la valeur de la langue par défaut pour l'applette MORE.*/
define('MORE_I18N_DEFAUT', GEN_I18N_ID_DEFAUT);
/** Constante stockant la valeur de la langue par défaut pour l'applette MORE.*/
define('MORE_MODE', 1);// 1 : recherche de chaque mot du motif; 2: recherche du motif complet
 
// Chemin des fichiers à inclure.
/** Chemin vers la bibliothèque PEAR.*/
define('MORE_CHEMIN_BIBLIOTHEQUE_PEAR', PAP_CHEMIN_API_PEAR);
 
// Chemin vers les dossiers de l'applette
/** Chemin vers l'applette Moteur de Recherche de Papyrus.*/
define('MORE_CHEMIN_APPLETTE', GEN_CHEMIN_APPLETTE.'moteur_recherche'.GEN_SEP);
/** Chemin vers les fichiers de traduction de l'applette Moteur de Recherche de Papyrus.*/
define('MORE_CHEMIN_LANGUE', MORE_CHEMIN_APPLETTE.'langues'.GEN_SEP);
/** Chemin vers les fichiers de la bibliotheque de l'applette Moteur de Recherche de Papyrus.*/
define('MORE_CHEMIN_BIBLIO', MORE_CHEMIN_APPLETTE.'bibliotheque'.GEN_SEP);
/** Chemin vers les fichiers squelettes de l'applette Moteur de Recherche de Papyrus.*/
define('MORE_CHEMIN_SQUELETTE', MORE_CHEMIN_APPLETTE.'squelettes'.GEN_SEP);
 
// Configuration du formulaire de recherche
/** Nom du fichier de squelette à utiliser pour le formulaire du moteur de recherche.*/
define('MORE_FORM_SQUELETTE', 'formulaire.tpl.html');
/** Valeur de départ des tabulations pour le formulaire de recherche.*/
define('MORE_FORM_MOTIF_TAB', 100);
/** Taille de la zone de saisie de texte du formulaire de recherche.*/
define('MORE_FORM_MOTIF_SIZE', 20);
/** Nombre de caractères maximum pouvant être saisis dans la zone de texte du formulaire de recherche.*/
define('MORE_FORM_MOTIF_MAXLENGTH', 100);
 
// Configuration des résultats d'une recherche
/** Nom du fichier de squelette à utiliser pour les résultats du moteur de recherche.*/
define('MORE_RESULTAT_SQUELETTE', 'resultat_gg.tpl.html');
/** Taille du champ description en nombre de caractères.*/
define('MORE_RESULTAT_TAILLE_DESCRIPTION', 200);
 
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.4 2006/10/17 09:22:02 jp_milcent
* Utilisation par défaut du mode de recherche 1.
*
* Revision 1.3 2006/10/10 12:02:30 jp_milcent
* Suppression d'une bibliothèque Pear qu'il est inutile d'inclure.
* Ajout du chemin vers la bibliotheque Pear de Papyrus.
*
* Revision 1.2 2006/05/23 14:18:19 jp_milcent
* Ajout de la gestion du mode de recherche au moteur de recherche de Papyrus.
* Soit on recherche chaque mot du motif, soit le motif entier.
*
* Revision 1.1 2004/12/07 10:24:12 jpm
* Moteur de recherche version de départ.
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/applettes/moteur_recherche/moteur_recherche.php
New file
0,0 → 1,273
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This file is part of Papyrus. |
// | |
// | Foobar is free software; you can redistribute it and/or modify |
// | it under the terms of the GNU General Public License as published by |
// | the Free Software Foundation; either version 2 of the License, or |
// | (at your option) any later version. |
// | |
// | Foobar 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 General Public License for more details. |
// | |
// | You should have received a copy of the GNU General Public License |
// | along with Foobar; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: moteur_recherche.php,v 1.16 2006-11-20 09:36:59 jp_milcent Exp $
/**
* Applette : moteur de recherche
*
* Génère un formulaire contenant une zone de saisie permettant de taper un texte à rechercher sur l'ensemble
* des sites gérés par Papyrus.
* Utilisation des bibliothèques inclue par Papyrus :
* - Papyrus pap_meta.fonct.php
* - PEAR NET_URL
*
*@package Applette
*@subpackage Moteur_recherche
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author Aucun
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.16 $ $Date: 2006-11-20 09:36:59 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTETE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
$GLOBALS['_GEN_commun']['info_applette_nom_fonction'] = 'afficherMoteurRecherche';
$GLOBALS['_GEN_commun']['info_applette_balise'] = 'MOTEUR_RECHERCHE';
 
// --------------------------------------------------------------------------------------------------------
//Utilisation de la bibliothèque Papyrus pap_meta.fonct.php inclue par Papyrus
//Utilisation de la bibliothèque PEAR NET_URL inclue par Papyrus
/** Inclusion du fichier de configuration de cette application.*/
require_once GEN_CHEMIN_APPLETTE.'moteur_recherche/configuration/more_configuration.inc.php';
/** Inclusion du fichier de configuration des Spip.*/
require_once GEN_CHEMIN_APPLETTE.'moteur_recherche/configuration/more_config_spip.inc.php';
/** Inclusion de la bibliothèque PEAR de conception de formulaire.*/
require_once MORE_CHEMIN_BIBLIOTHEQUE_PEAR.'HTML/QuickForm.php';
 
// Inclusion des fichiers de traduction de l'appli ADME dePapyrus
if (file_exists(MORE_CHEMIN_LANGUE.'more_langue_'.$GLOBALS['_GEN_commun']['i18n'].'.inc.php')) {
/** Inclusion du fichier de traduction suite à la transaction avec le navigateur.*/
require_once MORE_CHEMIN_LANGUE.'more_langue_'.$GLOBALS['_GEN_commun']['i18n'].'.inc.php';
} else {
/** Inclusion du fichier de traduction par défaut.*/
require_once MORE_CHEMIN_LANGUE.'more_langue_'.MORE_I18N_DEFAUT.'.inc.php';
}
 
// +------------------------------------------------------------------------------------------------------+
// | CORPS du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
if (isset($_POST['more_motif']) && $_POST['more_motif'] != '') {
// Initialisation de variable extérieures
$GLOBALS['_VEI_']['usurpation'] = MORE_LG_USURPATION.htmlentities(stripslashes($_POST['more_motif']));
$GLOBALS['_PAPYRUS_']['general']['application_chemin'] = null;
// Modification des meta de l'entête de la page
GEN_modifierMetaHttpEquiv('Content-Type', 'text/html; charset=ISO-8859-15');
GEN_modifierMetaHttpEquiv('Content-style-type', 'text/css');
GEN_modifierMetaHttpEquiv('Content-script-type', 'text/javascript');
GEN_modifierMetaHttpEquiv('Content-language', $GLOBALS['_GEN_commun']['i18n']);
GEN_modifierMetaName('revisit-after', '15 days');
GEN_modifierMetaName('robots', 'index,follow');
GEN_modifierMetaName('author', 'Tela Botanica');
GEN_modifierMetaName('keywords', 'Recherche, résultat.');
GEN_modifierMetaName('description', 'Page de résultats du moteur de recherche de Papyrus.');
GEN_viderMeta('dc');
}
 
// +------------------------------------------------------------------------------------------------------+
// | LISTE de FONCTIONS |
// +------------------------------------------------------------------------------------------------------+
 
/** Fonction afficherMoteurRecherche() - Fournit un formulaire de recherche.
*
* Renvoie un formulaire permettant de rechercher une chaine de caractères dans les sites
* gérés par Papyrus.
* Necessite l'utilisation de Pear Net_URL par le programme appelant cette fonction.
*
* @param array tableau d'éventuel arguments présent dans la balise transmis à la fonction.
* @param array tableau global de Papyrus.
* @return string formulaire XHTML de recherche.
*/
function afficherMoteurRecherche($tab_applette_arguments, $_GEN_commun)
{
// --------------------------------------------------------------------------------------------------------
// Initialisation de variable de configuration.
$liste_type_site = '102, 103';// Les id des types des sites pouvant apparaître dans le sélecteur
$objet_pear_db =& $_GEN_commun['pear_db'];//objet Pear créé par DB contenant la connexion à la base de données.
$GLOBALS['_MOTEUR_RECHERCHE_']['bd']['papyrus'] =& $_GEN_commun['pear_db'];// Connexion à la BD de Papyrus
$GLOBALS['_MOTEUR_RECHERCHE_']['variables'] = array();
$code_site = $_GEN_commun['url_site'];// identifiant du site courant.
$url = $_GEN_commun['url'];
$url_id_type_site = GEN_URL_ID_TYPE_SITE;
$indent_origine = 12;// Indentation de départ en nombre d'espace
$indent_pas = 4;// Pas d'indentation en nombre d'espace
$retour = '';
$retour_resultats = '';
// --------------------------------------------------------------------------------------------------------
// Lancement de la recherche si nécessaire
$aso_squelette = array('formulaire' => MORE_FORM_SQUELETTE);
$_SESSION['_MOTEUR_RECHERCHE_']['rechercher']['more_motif'] = '';
$GLOBALS['_MOTEUR_RECHERCHE_']['formulaire']['form_url'] = str_replace('&amp;', '&', $url->getUrl());
$GLOBALS['_MOTEUR_RECHERCHE_']['formulaire']['form_tab'] = MORE_FORM_MOTIF_TAB;
if (!isset($_POST['more_motif']) || $_POST['more_motif'] == '') {
$GLOBALS['_MOTEUR_RECHERCHE_']['formulaire']['more_motif'] = MORE_LG_FORM_MOTIF_VALUE;
} else {
// Ajout du squelette de résultat
$aso_squelette['resultat'] = MORE_RESULTAT_SQUELETTE;
// Titre de la page
$GLOBALS['_PAPYRUS_']['rendu']['TITRE_PAGE'] = MORE_LG_TITRE.htmlentities(stripslashes($_POST['more_motif']));
$_SESSION['_MOTEUR_RECHERCHE_']['rechercher']['more_motif'] = $_POST['more_motif'];
$GLOBALS['_MOTEUR_RECHERCHE_']['formulaire']['more_motif'] = $_POST['more_motif'];
/** Inclusion de la classe Recherche.*/
require_once MORE_CHEMIN_BIBLIO.'more_recherche.class.php';
/** Inclusion de la classe Recherche_Papyrus_Menu.*/
require_once MORE_CHEMIN_BIBLIO.'more_recherche_papyrus_menu.class.php';
/** Inclusion de la classe Recherche_Spip_Article.*/
require_once MORE_CHEMIN_BIBLIO.'more_recherche_spip_article.class.php';
$moteur = new Recherche($_SESSION['_MOTEUR_RECHERCHE_']['rechercher']['more_motif']);
$recherche_papyrus_menu = new Recherche_Papyrus_Menu($_SESSION['_MOTEUR_RECHERCHE_']['rechercher']['more_motif']);
$recherche_spip_article = new Recherche_Spip_Article($_SESSION['_MOTEUR_RECHERCHE_']['rechercher']['more_motif']);
$moteur->ajouterRecherche($recherche_papyrus_menu);
$moteur->ajouterRecherche($recherche_spip_article);
$GLOBALS['_MOTEUR_RECHERCHE_']['resultat']['resultats'] = $moteur->rechercherMotif();
//$GLOBALS['_DEBOGAGE_'] = '<pre>'.print_r($GLOBALS['_MOTEUR_RECHERCHE_']['resultat']['resultats'], true).'</pre>';
$nbre_pages = count($GLOBALS['_MOTEUR_RECHERCHE_']['resultat']['resultats']);
$GLOBALS['_MOTEUR_RECHERCHE_']['resultat']['nbre_pages'] = $nbre_pages;
$GLOBALS['_MOTEUR_RECHERCHE_']['resultat']['vide'] = MORE_LG_RESULTAT_VIDE;
if ($nbre_pages <= 1) {
$GLOBALS['_MOTEUR_RECHERCHE_']['resultat']['titre'] = sprintf(MORE_LG_RESULTAT_TITRE, $nbre_pages);
} else {
$GLOBALS['_MOTEUR_RECHERCHE_']['resultat']['titre'] = sprintf(MORE_LG_RESULTAT_TITRE_PLURIEL, $nbre_pages);
}
foreach ($GLOBALS['_MOTEUR_RECHERCHE_']['resultat']['resultats'] as $cle => $val) {
if (empty($val['url'])) {
unset($GLOBALS['_MOTEUR_RECHERCHE_']['resultat']['resultats'][$cle]);
} else {
$GLOBALS['_MOTEUR_RECHERCHE_']['resultat']['resultats'][$cle]['score'] = trim($val['score']);
$GLOBALS['_MOTEUR_RECHERCHE_']['resultat']['resultats'][$cle]['date_creation'] = trim($val['date_creation']);
$GLOBALS['_MOTEUR_RECHERCHE_']['resultat']['resultats'][$cle]['description'] = trim($val['description']);
}
}
}
 
// Génération du contenu à partir des squelettes
foreach ($aso_squelette as $squelette => $fichier) {
// Extrait les variables et les ajoutes à l'espace de noms local
extract($GLOBALS['_MOTEUR_RECHERCHE_'][$squelette]);
// Démarre le buffer
ob_start();
// Inclusion du fichier
include(MORE_CHEMIN_SQUELETTE.$fichier);
// Récupérer le contenu du buffer
$retour = ob_get_contents();
// Arrête et détruit le buffer
ob_end_clean();
// Retourne le contenu
switch ($squelette) {
case 'resultat' :
// L'applette fournie un résultat qui écrase le contenu de la page courrante
$GLOBALS['_PAPYRUS_']['rendu']['CONTENU_NAVIGATION'] = '';
$GLOBALS['_PAPYRUS_']['rendu']['CONTENU_TETE'] = '';
$GLOBALS['_PAPYRUS_']['rendu']['CONTENU_CORPS'] = $retour;
$GLOBALS['_PAPYRUS_']['rendu']['CONTENU_PIED'] = '';
$GLOBALS['_GEN_commun']['info_menu'] = '';
break;
case 'formulaire' :
// L'applette est appelée par défaut
$retour_formulaire = $retour;
break;
default:
$e = "Squellette <$squelette> pour le moteur de recherche inconnu!";
trigger_error($e, E_USER_WARNING);
}
}
return $retour_formulaire;
}
 
// +------------------------------------------------------------------------------------------------------+
// | PIED du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.15 2006/11/14 16:10:13 jp_milcent
* Extraction du XHTML et utilisation de squelettes à la place.
* Possibilité de configurer le squlette voulu via le fichier de conf.
*
* Revision 1.14 2006/10/10 13:28:14 jp_milcent
* Suppression d'une variable et utilisation de la constante PAP_URL
*
* Revision 1.13 2006/10/10 12:02:30 jp_milcent
* Suppression d'une bibliothèque Pear qu'il est inutile d'inclure.
* Ajout du chemin vers la bibliotheque Pear de Papyrus.
*
* Revision 1.12 2006/06/16 09:45:10 jp_milcent
* Correction bogue lié à la suppression de l'objet info_menu.
*
* Revision 1.11 2006/05/23 13:39:13 florian
* corection bug notice de jean pascal ;-)
*
* Revision 1.10 2006/05/19 10:04:55 jp_milcent
* Ajout d'un moteur de recherche analysant les articles des sites sous Spip.
*
* Revision 1.9 2006/04/28 12:41:49 florian
* corrections erreurs chemin
*
* Revision 1.8 2006/03/02 10:49:49 ddelon
* Fusion branche multilinguisme dans branche principale
*
* Revision 1.7.2.2 2005/12/27 15:56:00 ddelon
* Fusion Head vers multilinguisme (wikini double clic)
*
* Revision 1.7.2.1 2005/12/20 14:40:25 ddelon
* Fusion Head vers Livraison
*
* Revision 1.7 2005/09/27 09:07:32 ddelon
* size applette et squelettes
*
* Revision 1.6 2005/05/25 13:49:22 jpm
* Corection erreur pour la recherche dans le contenu.
*
* Revision 1.5 2005/05/19 12:46:12 jpm
* Correction bogue accesskey.
* Ajout d'un id à la liste.
* Arrondissement des score.
*
* Revision 1.4 2005/04/14 17:39:34 jpm
* Amélioration du moteur de rechercher :
* - pourcentage
* - ajout d'info
*
* Revision 1.3 2005/02/22 19:27:21 jpm
* Changement de nom de variables.
* Suppression de l'attribut nam de la balise form via une méthode de HTML_Common.
*
* Revision 1.2 2005/02/22 17:44:03 jpm
* Suppression de référence posant problème.
*
* Revision 1.1 2004/12/07 10:24:01 jpm
* Moteur de recherche version de départ.
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/applettes/menu/menu.php
New file
0,0 → 1,631
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library 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 |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: menu.php,v 1.30 2006-11-27 13:47:23 florian Exp $
/**
* Applette : menu
*
* Génère une liste de listes comportant tous les niveaux des menus "classiques" d'un site.
* Nécessite :
* - Variable de Papyrus.
* - Base de données de Papyrus
* - Pear DB
* - Pear Net_URL
* - API Débogage 1.0
*
*@package Applette
*@subpackage Menu
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author Aucun
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.30 $ $Date: 2006-11-27 13:47:23 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTÊTE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
// Inclusion de la bibliothèque defonction sur les menu : inutile car inclue par Papyrus
require_once GEN_CHEMIN_BIBLIO.'pap_menu.fonct.php';
 
$GLOBALS['_MENU_']['nom_fonction'] = 'afficherMenuNiveauMultiple';
$_GEN_commun['info_applette_nom_fonction'] = $GLOBALS['_MENU_']['nom_fonction'];
$_GEN_commun['info_applette_balise'] = 'MENU_?(?:(|CLASSIQUE|COMMUN|DEROULANT)_([0-9]+)_([0-9]+)(|_ID_([0-9]+))|(UNIQUE)_([0-9]+))(?:|_NUMID_([0-9]+))';
 
// +------------------------------------------------------------------------------------------------------+
// | CORPS du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
// +------------------------------------------------------------------------------------------------------+
// | LISTE de FONCTIONS |
// +------------------------------------------------------------------------------------------------------+
/** Fonction GEN_afficherMenuNiveauMultiple() - Retourne la liste des listes de menus.
*
* Cette fonction retourne ne fait qu'encapsuler une fonction récursive
* retournant les listes de menus de l'arborescence d'un site dans une
* langue donnée.
*
* @param array contient les arguments de la fonction en 1 le niveau de départ et en 2 le niveau d'arrivée (profondeur max demandée).
* @param array tableau global de Papyrus.
* @return string HTML la liste des listes de menus.
*/
function afficherMenuNiveauMultiple($tab_applette_arguments, $_GEN_commun)
{
// Initialisation de variable.
$objet_pear_db = $_GEN_commun['pear_db'];
$id_site = $_GEN_commun['info_site']->gs_id_site;
if (isset($_GEN_commun['info_menu'])) {
$id_menu = $_GEN_commun['info_menu']->gm_id_menu;
}
$num_menu = $GLOBALS['_PAPYRUS_']['applette']['comptage'][$GLOBALS['_MENU_']['nom_fonction']];
$indent_origine = 12;// Indentation de départ en nombre d'espace
$indent_pas = 4;// Pas d'indentation en nombre d'espace
$niveau_depart = 1;
// Récupérations des arguments passés dans la balise.
// Pour les menus CLASSIQUE et COMMUN
$balise = $tab_applette_arguments[1];
$menu_type = $tab_applette_arguments[2];
$niveau_depart = $tab_applette_arguments[3];
$profondeur = $tab_applette_arguments[4];
if (isset($tab_applette_arguments[5]) && !empty($tab_applette_arguments[5])) {
$menu_depart = $tab_applette_arguments[6];
} else {
$menu_depart = 0;
}
// Pour les menus UNIQUE
if (isset($tab_applette_arguments[7])) {
$menu_type = $tab_applette_arguments[7];
}
if (isset($tab_applette_arguments[8])) {
$menu_depart = $tab_applette_arguments[8];
}
// Gestion du numéro unique pour l'attribut id des li des menus
if (isset($tab_applette_arguments[9])) {
$num_menu = $tab_applette_arguments[9];
}
// Gestion du type de menu
switch ($menu_type) {
case '' :
$menu_type = 'classique';
break;
case 'CLASSIQUE' :
$menu_type = 'classique';
break;
case 'COMMUN' :
$menu_type = 'commun';
break;
case 'UNIQUE' :
$menu_type = 'unique';
break;
case 'DEROULANT' :
$menu_type = 'deroulant';
break;
default:
$menu_type = 'classique';
}
 
//Construction du menu
$xhtml_menu = afficherListeNiveauMultiple( $objet_pear_db, $id_site,$niveau_depart,
$profondeur, $menu_depart, 1, $menu_type, $indent_origine,
$indent_pas, $_GEN_commun, $num_menu);
// Si le menu est déroulant il faut stocker un peu de javascript pour IE
if ($menu_type == 'deroulant') {
GEN_stockerCodeScript ('sfHover = function() {
var sfEls = document.getElementById("groupe_menu_1_0").getElementsByTagName("LI");
for (var i=0; i<sfEls.length; i++) {
sfEls[i].onmouseover=function() {
this.className+=" sfhover";
}
sfEls[i].onmouseout=function() {
this.className=this.className.replace(new RegExp(" sfhover\\\\b"), "");
}
}
}
if (window.attachEvent) window.attachEvent("onload", sfHover);') ;
}
//Si nous avons un
if (! empty($xhtml_menu)) {
$retour = $xhtml_menu;
} else {
$retour = '<!-- '.$balise.' : aucun menu trouvé ! -->';
}
return $retour;
}
 
/** Fonction afficherListeNiveauMultiple() - Affiche une arborescence des menu classiques d'un site.
*
* Créé et retourne une liste pour chaque niveau de menu classique trouvé dans l'arborescence
* des menus d'un site dans une langue donnée.
* C'est une fonction récursive.
*
* @param mixed objet Pear DB de connexion à la base de données.
* @param integer identifiant d'un site.
* @param integer identifiant de la langue demandée.
* @param integer niveau de départ.
* @param integer niveau d'arrivée (profondeur max demandée).
* @param integer identifiant d'un menu pére.
* @return string les listes de menus au format XHTML.
*/
function afficherListeNiveauMultiple( &$objet_pear_db, $id_site, $niveau_depart, $profondeur,
$id_pere_menu_a_deployer, $position, $menu_type, $indent_origine = 12,
$indent_pas = 4, $_GEN_commun, $num_menu)
{
// Initialisation des variables
static $niveau_actuel = 1;
$retour = '';
$tete = '';
$corps = '';
$pied = '';
$i18n_url = '' ;
$id_langue = $_GEN_commun['i18n'];//identifiant de la langue choisie
if ($id_langue != GEN_I18N_ID_DEFAUT) {
$i18n_url=$id_langue;
}
if (isset($id_langue) && ($id_langue!='')) {
$langue_test=$id_langue;
} else {
$langue_test=GEN_I18N_ID_DEFAUT;
}
// Récupération des infos sur sur l'entrée du menu à afficher
$menu_info = GEN_lireInfoMenu($objet_pear_db, $id_pere_menu_a_deployer, DB_FETCHMODE_ASSOC);
// Gestion des menus uniques
if ($menu_type == 'unique' && ($menu_info['gm_date_fin_validite'] == '0000-00-00 00:00:00' || strtotime($menu_info['gm_date_fin_validite']) > time() )) {
$retour .= afficherEntreeListeMenu( $objet_pear_db, $id_pere_menu_a_deployer, $i18n_url,
$niveau_actuel, 1, $position, $menu_type, $indent_origine, $indent_pas, $_GEN_commun, $num_menu);
// Dans le cas, d'un menu unique, on retourne directement le résultat ici.
return $retour;
}
// On affiche un menu que si $profondeur <= $niveau_actuel <= $depart
if ($niveau_actuel > $profondeur) {
return null;
}
// Nous regardons si nous devons afficher un menu racine
if ($id_pere_menu_a_deployer != 0 && $niveau_actuel == 1 && ($menu_info['gm_date_fin_validite'] == '' || $menu_info['gm_date_fin_validite'] == '0000-00-00 00:00:00' || strtotime($menu_info['gm_date_fin_validite']) > time() )) {
$tete .= str_repeat(' ', $indent_origine + ($indent_pas * $position)).
'<ul class="groupe_menu_'.$num_menu.'_'.$id_pere_menu_a_deployer.'" class="menu_'.$menu_type.'_'.'n'.$niveau_actuel.'">'."\n";
$id_menu_selectionne = $GLOBALS['_GEN_commun']['info_menu']->gm_id_menu;
if (!empty($id_menu_selectionne) && (GEN_etreAncetre($id_pere_menu_a_deployer, $id_menu_selectionne) || $id_pere_menu_a_deployer == $id_menu_selectionne) ) {
$classe = 'menu_actif';
} else {
$classe = 'menu_inactif';
}
// Pour un menu dont on spécifie l'identifiant du menu départ, on affiche ce menu.
$corps .= str_repeat(' ', $indent_origine + ($indent_pas * ($position + 1))).
'<li id="menu_'.$num_menu.'_'.$id_pere_menu_a_deployer.'" class="'.$classe.'">'."\n";
$corps .= afficherEntreeListeMenu( $objet_pear_db, $id_pere_menu_a_deployer, $i18n_url,
$niveau_actuel, 1, $position, $menu_type, $indent_origine, $indent_pas, $_GEN_commun, $num_menu);
}
if ($niveau_actuel >= $niveau_depart && $niveau_actuel <= $profondeur) {
$tete .= str_repeat(' ', $indent_origine + ($indent_pas * ($position + 1))).
'<ul id="groupe_menu_'.$num_menu.'_'.$id_pere_menu_a_deployer.'" class="menu_'.$menu_type.'_'.'n'.$niveau_actuel.'">'."\n";
}
$requete = 'SELECT gm_id_menu, gm_date_fin_validite, GMR01.gmr_ordre, gm_nom '.
'FROM gen_menu, gen_menu_relation AS GMR01, gen_menu_relation AS GMR02 '.
'WHERE GMR01.gmr_id_menu_01 = gm_id_menu '.
'AND GMR01.gmr_id_valeur = 1 '.// 1 = "avoir père"
'AND GMR02.gmr_id_menu_02 = gm_id_menu '.
'AND GMR02.gmr_id_menu_01 = GMR02.gmr_id_menu_02 '.
'AND gm_ce_i18n = "'.GEN_I18N_ID_DEFAUT.'" ';
$requete .= 'AND GMR01.gmr_id_menu_02 = '.$id_pere_menu_a_deployer.' ';
if ($menu_type == 'classique' || $menu_type == 'deroulant') {
$requete .= 'AND gm_ce_site = '.$id_site.' '.
'AND GMR02.gmr_id_valeur = 100 '.// 100 = type "menu classique"
'ORDER BY GMR01.gmr_ordre ASC';
} else if ($menu_type == 'commun') {
$requete .= 'AND gm_ce_site = 0 '.
'AND GMR02.gmr_id_valeur = 102 '.// 102 = type "menu commun"
'ORDER BY GMR01.gmr_ordre ASC';
}
//$GLOBALS['_GEN_commun']['debogage_info'] .= $requete;
$resultat = $objet_pear_db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
$liste_menu=array();
// On ne retient pas les menus qui sont des traductions ...
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
if ($langue_test == GEN_I18N_ID_DEFAUT) {
// Le menu n'est pas une traduction : on le traite
$requete_est_traduction = 'SELECT gmr_id_menu_01 '.
'FROM gen_menu_relation '.
'WHERE '.$ligne->gm_id_menu.' = gmr_id_menu_02 ' .
'AND gmr_id_menu_01 <> gmr_id_menu_02 '.
'AND gmr_id_valeur = 2 ';// 2 = "avoir traduction"
$resultat_est_traduction = $objet_pear_db->query($requete_est_traduction);
(DB::isError($resultat_est_traduction))
? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_est_traduction->getMessage(), $requete_est_traduction))
: '';
if ( $resultat_est_traduction->numRows() == 0 ) {
$liste_menu[]=$ligne;
}
}
// Par defaut, on traite tous les menus trouvés
else {
$liste_menu[]=$ligne;
}
}
if (!function_exists('cmp')) {
function cmp($a, $b) {
if ($a->gmr_ordre == $b->gmr_ordre) {
return 0;
}
return ($a->gmr_ordre < $b->gmr_ordre) ? -1 : 1;
}
}
usort ($liste_menu,"cmp");
foreach ($liste_menu as $ligne) {
//while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
if ($ligne->gm_date_fin_validite == '' || $ligne->gm_date_fin_validite == '0000-00-00 00:00:00' || strtotime($ligne->gm_date_fin_validite) > time()) {
// On commence par regarder si le menu existe dans la langue demandée
if ($niveau_actuel >= $niveau_depart && $niveau_actuel <= $profondeur) {
$id_menu_inf = $ligne->gm_id_menu;
$id_menu_selectionne = '';
if (isset($GLOBALS['_GEN_commun']['info_menu']->gm_id_menu)) {
$id_menu_selectionne = $GLOBALS['_GEN_commun']['info_menu']->gm_id_menu;
}
// On vérifie si le menu est le menu sélectionné
if (!empty($id_menu_selectionne) && (GEN_etreAncetre($id_menu_inf, $id_menu_selectionne) || $id_menu_inf == $id_menu_selectionne) ) {
$classe = 'menu_actif';
} else {
$classe = 'menu_inactif';
}
$tmp= afficherEntreeListeMenu( $objet_pear_db, $id_menu_inf, $niveau_actuel,
$ligne->gmr_ordre, $position, $menu_type, $indent_origine, $indent_pas, $_GEN_commun, $num_menu);
// Affichage du menu
if ($tmp!='') {
$corps .= str_repeat(' ', $indent_origine + ($indent_pas * ($position + 2))).
'<li id="menu_'.$num_menu.'_'.$id_menu_inf.'" class="'.$classe.'">'."\n";
$corps .= $tmp;
}
}
// Pour chaque menu on regarde s'il y a des fils. Si oui, on les déploie.
$requete_fils = 'SELECT gm_id_menu '.
'FROM gen_menu, gen_menu_relation AS GMR01, gen_menu_relation AS GMR02 '.
'WHERE GMR01.gmr_id_menu_02 = '.$ligne->gm_id_menu.' '.
'AND GMR01.gmr_id_menu_01 = gm_id_menu '.
'AND GMR01.gmr_id_valeur = 1 '.// 1 = "avoir père"
'AND GMR02.gmr_id_menu_02 = gm_id_menu '.
'AND GMR02.gmr_id_menu_01 = GMR02.gmr_id_menu_02 ' ;
if ($menu_type == 'classique') {
$requete_fils .='AND GMR02.gmr_id_valeur = 100 ' ;// 100 = type "menu classique"
}
if ($menu_type == 'commun') {
$requete_fils .='AND GMR02.gmr_id_valeur = 102 '; // 102 = type "menu commun"
}
$requete_fils .= 'ORDER BY GMR01.gmr_ordre ASC LIMIT 0,1';
$resultat_fils = $objet_pear_db->query($requete_fils);
(DB::isError($resultat_fils))
? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_fils->getMessage(), $requete_fils))
: '';
if (isset($_GEN_commun['info_menu'])) {
if ($resultat_fils->numRows() != 0 && $ligne->gm_id_menu == $GLOBALS['_GEN_commun']['info_menu']->gm_id_menu
|| GEN_etreAncetre($ligne->gm_id_menu, $GLOBALS['_GEN_commun']['info_menu']->gm_id_menu) || $menu_type == 'deroulant') {
$niveau_actuel++;
$corps .= afficherListeNiveauMultiple( $objet_pear_db, $id_site, $niveau_depart,
$profondeur, $ligne->gm_id_menu, ($position + 3), $menu_type,
null, null, $_GEN_commun, $num_menu);
// On ramène $niveau_actuel un cran plus bas
$niveau_actuel--;
}
}
if ($niveau_actuel >= $niveau_depart && $niveau_actuel <= $profondeur) {
$corps .= str_repeat(' ', $indent_origine + ($indent_pas * ($position + 2))).'</li>'."\n";
}
$resultat_fils->free();
}
}
if ($niveau_actuel >= $niveau_depart && $niveau_actuel <= $profondeur) {
$pied .= str_repeat(' ', $indent_origine + ($indent_pas * $position+ 1)).'</ul>'."\n";
}
// Nous regardons si nous avons affiché le menu racine
if ($id_pere_menu_a_deployer != 0 && $niveau_actuel == 1) {
$corps .= str_repeat(' ', $indent_origine + ($indent_pas * ($position + 1))).'</li>'."\n";
$pied .= str_repeat(' ', $indent_origine + ($indent_pas * $position)).'</ul>'."\n";
}
if (empty($corps)) {
return $retour;
} else {
$retour = $tete.$corps.$pied;
return $retour;
}
}
 
/** Fonction afficherEntreeListeMenu() - Contruit une entrée dans une liste du menu d'un site.
*
* Cette fonction retourne une entrée dans la liste du menu d'un site (<a></a>).
* Le menu est un lien.
* Necessite l'utilisation de Pear Net_URL par le programme appelant cette fonction.
*
* @param mixed objet Pear DB de connexion à la base de données.
* @param integer niveau du menu.
* @param integer ordre du menu dans le niveau.
* @return string liste représentant le menu duHTML
*
* $menu_id : identifiant du menu (!= code menu)
*/
function afficherEntreeListeMenu($db, $menu_id, $niveau, $ordre, $position, $menu_type, $indent_origine = 12, $indent_pas = 4, $_GEN_commun, $num_menu)
{
 
$id_langue = $GLOBALS['_GEN_commun']['i18n'];
if (isset($id_langue) && ($id_langue!='')) {
$langue_test=$id_langue;
} else {
$langue_test=GEN_I18N_ID_DEFAUT;
}
 
$requete_traduction = 'SELECT gmr_id_menu_02, gm_ce_i18n '.
'FROM gen_menu_relation, gen_menu '.
'WHERE '.$menu_id.' = gmr_id_menu_01 ' .
'AND gmr_id_menu_02 = gm_id_menu '.
'AND gmr_id_valeur = 2 '.// 2 = "avoir traduction"
'AND gm_ce_i18n = "'.$langue_test.'" ';
$resultat_traduction = $db->query($requete_traduction);
(DB::isError($resultat_traduction)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_traduction->getMessage(), $requete_traduction))
: '';
 
if ($resultat_traduction->numRows() > 0) {
$ligne_resultat_traduction=$resultat_traduction->fetchRow(DB_FETCHMODE_ASSOC);
$menu_id=$ligne_resultat_traduction['gmr_id_menu_02'];
}
 
else {
// Ne sont affichés que les traductions par defaut des menus
// non traduits
// Ici : pas de traduction
 
if ($langue_test!=GEN_I18N_ID_DEFAUT) {
$requete_defaut = 'SELECT gmr_id_menu_02 '.
'FROM gen_menu_relation '.
'WHERE '.$menu_id. ' = gmr_id_menu_01 ' .
'AND gmr_id_valeur = 105 ';// 105 Traduction par defaut
$resultat_defaut = $db->query($requete_defaut);
(DB::isError($resultat_defaut)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_defaut->getMessage(), $requete_defaut))
: '';
if ($resultat_defaut->numRows() > 0) {
$ligne_resultat_defaut=$resultat_defaut->fetchRow(DB_FETCHMODE_ASSOC);
$menu_id=$ligne_resultat_defaut['gmr_id_menu_02'];
}
}
}
// Récupération des infos sur sur l'entrée du menu à afficher
$menu_info = GEN_lireInfoMenu($db, $menu_id, DB_FETCHMODE_ASSOC);
// Préparation d'une entrée dans la liste du menu
$menu_nom = htmlentities($menu_info['gm_nom']);
 
if (trim($menu_nom)=='') return '';
$menu_accesskey = '';
$raccourci_txt = '';
if (($menu_accesskey = htmlentities($menu_info['gm_raccourci_clavier'])) != '') {
$raccourci_txt = '[Raccourci : Alt+'.$menu_accesskey.' ] ';
$menu_accesskey = 'accesskey="'.$menu_accesskey.'" ';
}
$menu_texte_title = '';
if (($menu_texte_title = htmlentities($menu_info['gm_description_resume'])) != '') {
$menu_texte_title = 'title="'.$raccourci_txt.$menu_texte_title.'" ';;
}
$une_url =& new Pap_URL(PAP_URL);
$une_url->setId($menu_id);
 
if (isset($i18n) && ($i18n!='')) {
$une_url->addQuerystring(GEN_URL_CLE_I18N,$i18n);
}
//Création d'une entrée dans la liste du menu
$espaces = str_repeat(' ', $indent_origine + ($indent_pas * ($position + 2)));
$retour = $espaces.'<a id="menu_lien_'.$num_menu.'_'.$menu_id.'" href="'.$une_url->getURL().'" '.$menu_texte_title.$menu_accesskey.'>'.$menu_nom.'</a>'."\n";
return $retour;
}
 
// +------------------------------------------------------------------------------------------------------+
// | PIED du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.29 2006/10/16 15:49:46 ddelon
* Refactorisation code mulitlinguisme et gestion menu invisibles
*
* Revision 1.28 2006/09/21 15:52:19 jp_milcent
* Utilisation de PAP_URL pour Net_URL à la place des constantes serveur.
*
* Revision 1.27 2006/09/20 09:25:31 alexandre_tb
* Initialisation de la variable $i18n_url pour éviter un notice
*
* Revision 1.26 2006/07/04 09:43:21 alexandre_tb
* correction d'un bug du javascript
*
* Revision 1.25 2006/06/28 12:53:34 ddelon
* Multilinguisme : menu par defaut
*
* Revision 1.24 2006/03/13 21:00:20 ddelon
* Suppression messages d'erreur multilinguisme
*
* Revision 1.23 2006/03/02 10:49:49 ddelon
* Fusion branche multilinguisme dans branche principale
*
* Revision 1.22.2.2 2006/02/28 14:02:11 ddelon
* Finition multilinguisme
*
* Revision 1.22.2.1 2005/12/20 14:40:25 ddelon
* Fusion Head vers Livraison
*
* Revision 1.22 2005/09/27 08:42:49 ddelon
* Menu et Squelette
*
* Revision 1.21 2005/09/22 14:02:49 ddelon
* nettoyage annuaire et php5
*
* Revision 1.20 2005/05/27 14:56:51 alex
* correction de bug d'affichage des menus communs
*
* Revision 1.19 2005/05/27 10:23:00 jpm
* Modification du style des raccourcis.
*
* Revision 1.18 2005/05/03 08:39:32 jpm
* Ajout d'un test sur la date.
*
* Revision 1.17 2005/04/19 16:59:51 jpm
* Suppression de l'affichage d'un débogage.
*
* Revision 1.16 2005/04/19 16:47:24 jpm
* Gestion des dates de fin de validité des menus.
*
* Revision 1.15 2005/04/14 16:37:48 jpm
* Ajout de la gestion des URL avec la classe Pap_URL de Papyrus.
*
* Revision 1.14 2005/03/02 11:02:33 jpm
* Suppression des espaces avant l'ouverture de la balise php.
*
* Revision 1.13 2005/02/08 19:03:03 alex
* ajout de la balise DEROULANT qui permet de faire un affichage des menus avec survol javascript. Il nécessite des styles particuliers.
*
* Revision 1.12 2004/12/02 10:42:15 jpm
* Correction bogue liste ul vide si pas de menu.
*
* Revision 1.11 2004/11/26 19:02:22 jpm
* Correction bogue li surnuméraires.
*
* Revision 1.10 2004/11/15 17:40:02 jpm
* Changement nom balise.
*
* Revision 1.9 2004/11/15 16:17:40 jpm
* Gestion des différents types de menus.
*
* Revision 1.8 2004/11/10 18:59:21 jpm
* Début de gestion de l'ensemble des types de menu dans l'applette menu.
*
* Revision 1.7 2004/09/23 14:31:40 jpm
* Correction bogue sur le menu actif.
*
* Revision 1.6 2004/09/23 10:47:16 jpm
* Amélioration de la gestion du menu actif en fonction du menu demandé dans l'url.
*
* Revision 1.5 2004/09/15 09:32:21 jpm
* Mise en conformité avec le standard XHTML Strict.
* Amélioration de la gestion de l'indentation.
*
* Revision 1.4 2004/09/13 18:02:34 jpm
* Changement de nom de m_select en menu_actif et de m_non_select en menu_inactif.
* Amélioration du rendu du code html.
*
* Revision 1.3 2004/07/23 11:21:25 alex
* suppression du javascript.
*
* Revision 1.2 2004/06/25 08:32:02 alex
* modification des styles
*
* Revision 1.1 2004/06/15 15:04:14 jpm
* Changement de nom et d'arborescence de Genesia en Papyrus.
*
* Revision 1.10 2004/05/05 14:33:04 jpm
* Gestion de l'indication de langue dans l'url.
* Utile que si on veut forcer la langue.
*
* Revision 1.8 2004/05/05 06:44:19 jpm
* Complément des commentaires indiquant les paquetages nécessaire à l'applette.
*
* Revision 1.7 2004/05/04 14:19:37 jpm
* Mise entre guillemet simple d'un texte.
*
* Revision 1.6 2004/05/03 14:11:01 jpm
* Intégration du fichier bibliothèquie de fonctions sur gen_menu provenant de la bibliothèque de Génésia INUTILE!
*
* Revision 1.5 2004/05/03 14:09:32 jpm
* Intégration du fichier bibliothèquie de fonctions sur gen_menu provenant de la bibliothèque de Génésia.
*
* Revision 1.4 2004/05/03 11:19:00 jpm
* Intégration de la variable globale de Génésia dans les arguments de la fonction de l'applette.
*
* Revision 1.3 2004/05/03 08:52:44 jpm
* Modification pour intégrer les sous listes (ul) de menus à l'intèrieur de l'entrée (li) du menu supérieur.
*
* Revision 1.2 2004/05/01 17:22:23 jpm
* Changement de nom de l'applette dans les commentaires.
*
* Revision 1.1 2004/05/01 16:12:39 jpm
* Ajout de l'applette gérant les menus multi niveaux ou niveau unique.
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/applettes/identification/langues/iden_langue_en.inc.php
New file
0,0 → 1,112
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2005 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This file is part of Papyrus. |
// | |
// | Foobar is free software; you can redistribute it and/or modify |
// | it under the terms of the GNU General Public License as published by |
// | the Free Software Foundation; either version 2 of the License, or |
// | (at your option) any later version. |
// | |
// | Foobar 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 General Public License for more details. |
// | |
// | You should have received a copy of the GNU General Public License |
// | along with Foobar; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: iden_langue_en.inc.php,v 1.2 2006-11-20 18:39:22 jp_milcent Exp $
/**
* Traduction de l'applette Identification : en
*
* Fichier de traduction de l'applette Identification en anglais
*
*@package Applette
*@subpackage Identification
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author Aucun
*@copyright Tela-Botanica 2000-2005
*@version $Revision: 1.2 $ $Date: 2006-11-20 18:39:22 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTETE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
// +------------------------------------------------------------------------------------------------------+
// | CORPS du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
/** Message de bienvenu de l'identification.*/
define('IDEN_LG_MESSAGE', 'You are');
/** Message de la légende du formulaire demandant de s'identifier.*/
define('IDEN_LG_FORM_LEGEND', 'Please log in');
/** Label du champ courriel.*/
define('IDEN_LG_FORM_LABEL_COURRIEL', 'Mail : ');
/** Valeur du champ courriel.*/
define('IDEN_LG_FORM_VALUE_COURRIEL', 'mail');
/** Label du champ mot de passe.*/
define('IDEN_LG_FORM_LABEL_MDP', 'Password : ');
/** Valeur du champ mot de passe.*/
define('IDEN_LG_FORM_VALUE_MDP', 'password');
/** Valeur du champ submit.*/
define('IDEN_LG_FORM_VALUE_SUBMIT', 'ok');
/** Message indiquant le lien vers la page d'inscription.*/
define('IDEN_LG_INSCRIPTION_URL', 'Register... ');
/** Message indiquant le lien vers la page d'aide de l'inscription.*/
define('IDEN_LG_INSCRIPTION_AIDE', 'Help... ');
/** Message indiquant le lien vers la page de modification de son inscription.*/
define('IDEN_LG_INSCRIPTION_URL_MODIF', 'Change parameters...');
/** Message indiquant le lien pour se déconnecter.*/
define('IDEN_LG_DECONNEXION', 'Logout');
/** Message d'échec d'authentification */
define ('IDEN_ECHEC_AUTH', 'Lost password ? ') ;
/** Message ici */
define ('IDEN_ICI', 'Clic here') ;
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.1 2006/03/13 21:00:20 ddelon
* Suppression messages d'erreur multilinguisme
*
* Revision 1.7 2006/03/02 10:49:49 ddelon
* Fusion branche multilinguisme dans branche principale
*
* Revision 1.6 2005/12/13 11:13:52 alexandre_tb
* ajout d'un message si l'identification échoue
*
* Revision 1.5.2.1 2005/12/20 14:40:25 ddelon
* Fusion Head vers Livraison
*
* Revision 1.6 2005/12/13 11:13:52 alexandre_tb
* ajout d'un message si l'identification échoue
*
* Revision 1.5 2005/06/09 17:06:28 jpm
* Ajout de constantes de langue.
*
* Revision 1.4 2005/06/02 11:56:00 jpm
* Modification de l'affichage de l'identification.
*
* Revision 1.3 2005/04/14 16:37:27 jpm
* Ajout de la gestion de la modification de son inscription.
*
* Revision 1.2 2005/03/25 14:41:04 jpm
* Modification et ajout de constantes.
*
* Revision 1.1 2005/03/15 14:19:32 jpm
* Ajout d'un fichier de traduction.
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/applettes/identification/langues/iden_langue_fr.inc.php
New file
0,0 → 1,114
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2005 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This file is part of Papyrus. |
// | |
// | Foobar is free software; you can redistribute it and/or modify |
// | it under the terms of the GNU General Public License as published by |
// | the Free Software Foundation; either version 2 of the License, or |
// | (at your option) any later version. |
// | |
// | Foobar 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 General Public License for more details. |
// | |
// | You should have received a copy of the GNU General Public License |
// | along with Foobar; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: iden_langue_fr.inc.php,v 1.9 2006-11-20 18:39:22 jp_milcent Exp $
/**
* Traduction de l'applette Identification : fr
*
* Fichier de traduction de l'applette Identification en français.
*
*@package Applette
*@subpackage Identification
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author Aucun
*@copyright Tela-Botanica 2000-2005
*@version $Revision: 1.9 $ $Date: 2006-11-20 18:39:22 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTETE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
// +------------------------------------------------------------------------------------------------------+
// | CORPS du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
/** Message de bienvenu de l'identification.*/
define('IDEN_LG_MESSAGE', 'Votre identité');
/** Message de la légende du formulaire demandant de s'identifier.*/
define('IDEN_LG_FORM_LEGEND', 'Identifiez vous');
/** Label du champ courriel.*/
define('IDEN_LG_FORM_LABEL_COURRIEL', 'Courriel : ');
/** Valeur du champ courriel.*/
define('IDEN_LG_FORM_VALUE_COURRIEL', 'courriel');
/** Label du champ mot de passe.*/
define('IDEN_LG_FORM_LABEL_MDP', 'Mot de passe : ');
/** Valeur du champ mot de passe.*/
define('IDEN_LG_FORM_VALUE_MDP', 'mot de passe');
/** Valeur du champ submit.*/
define('IDEN_LG_FORM_VALUE_SUBMIT', 'ok');
/** Message indiquant le lien vers la page d'inscription.*/
define('IDEN_LG_INSCRIPTION_URL', 'S\'inscrire... ');
/** Message indiquant le lien vers la page d'aide de l'inscription.*/
define('IDEN_LG_INSCRIPTION_AIDE', 'Aide... ');
/** Message indiquant le lien vers la page de modification de son inscription.*/
define('IDEN_LG_INSCRIPTION_URL_MODIF', 'Modifier votre inscription...');
/** Message indiquant le lien pour se déconnecter.*/
define('IDEN_LG_DECONNEXION', 'Déconnexion');
/** Message d'échec d'authentification */
define ('IDEN_ECHEC_AUTH', 'Mot de passe perdu ? ') ;
/** Message ici */
define ('IDEN_ICI', 'Cliquer ici') ;
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.8 2006/11/20 17:30:40 jp_milcent
* Amélioration de la gestion de l'identification.
* Utilisation des durées de session correcte.
* Suppression du code pour Spip non fonctionnel.
*
* Revision 1.7 2006/03/02 10:49:49 ddelon
* Fusion branche multilinguisme dans branche principale
*
* Revision 1.6 2005/12/13 11:13:52 alexandre_tb
* ajout d'un message si l'identification échoue
*
* Revision 1.5.2.1 2005/12/20 14:40:25 ddelon
* Fusion Head vers Livraison
*
* Revision 1.6 2005/12/13 11:13:52 alexandre_tb
* ajout d'un message si l'identification échoue
*
* Revision 1.5 2005/06/09 17:06:28 jpm
* Ajout de constantes de langue.
*
* Revision 1.4 2005/06/02 11:56:00 jpm
* Modification de l'affichage de l'identification.
*
* Revision 1.3 2005/04/14 16:37:27 jpm
* Ajout de la gestion de la modification de son inscription.
*
* Revision 1.2 2005/03/25 14:41:04 jpm
* Modification et ajout de constantes.
*
* Revision 1.1 2005/03/15 14:19:32 jpm
* Ajout d'un fichier de traduction.
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/applettes/identification/identification.php
New file
0,0 → 1,326
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library 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 |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: identification.php,v 1.25.2.1 2006-12-08 18:17:06 jp_milcent Exp $
/**
* Applette : identification
*
* Génère un formulaire les champs nécessaires pour s'identifier.
* Nécessite :
* - Variable globale de Génésia.
* - Pear Auth
* - Pear Net_URL
*
* A faire : remplacer le formulaire par un QuickForm
*
*@package Applette
*@subpackage Identification
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author Aucun
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.25.2.1 $ $Date: 2006-12-08 18:17:06 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTÊTE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
$_GEN_commun['info_applette_nom_fonction'] = 'afficherFormIdentification';
$_GEN_commun['info_applette_balise'] = 'IDENTIFICATION';
 
/** Inclusion du fichier de configuration de cette applette.*/
require_once GEN_CHEMIN_APPLETTE.'identification/configuration/iden_config.inc.php';
 
// Inclusion des fichiers de traduction de l'applette.
if (file_exists(IDEN_CHEMIN_LANGUE.'iden_langue_'.$_GEN_commun['i18n'].'.inc.php')) {
/** Inclusion du fichier de traduction suite à la transaction avec le navigateur.*/
require_once IDEN_CHEMIN_LANGUE.'iden_langue_'.$_GEN_commun['i18n'].'.inc.php';
} else {
/** Inclusion du fichier de traduction par défaut.*/
require_once IDEN_CHEMIN_LANGUE.'iden_langue_'.IDEN_I18N_DEFAUT.'.inc.php';
}
// +------------------------------------------------------------------------------------------------------+
// | CORPS du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
// Si le site utilise une authentification.
if ($GLOBALS['_GEN_commun']['info_auth']->gsa_ce_type_auth == 1) {
// Si un formulaire nous renvoie en POST une variable "deconnexion", nous délogons l'utilisateur.
if (isset($_REQUEST['deconnexion']) || isset($_REQUEST['logout'])) {
$GLOBALS['_GEN_commun']['pear_auth']->logout();
// Destruction du cookie de Papyrus
setcookie(session_name(), session_id(), time()-3600, '/');
}
// Si un formulaire nous renvoie en POST une variable "connexion", nous logons l'utilisateur.
if (isset($_REQUEST['connexion'])) {
// Nous vérifions que l'utilisateur est coché "Mémoriser mon compte"
if (isset($_POST['persistant']) && $_POST['persistant'] == 'o' && IDEN_AUTH_SESSION_DUREE != 0) {
//echo '<pre>'.print_r($_POST, true).'</pre>';
// Expiration si l'utilisateur ne referme pas son navigateur
$GLOBALS['_GEN_commun']['pear_auth']->setExpire((int)IDEN_AUTH_SESSION_DUREE);
// Pour que la session dure même après avoir refermer son navigateur
setcookie(session_name(), session_id(), (int)IDEN_AUTH_SESSION_DUREE, '/');
}
$GLOBALS['_GEN_commun']['pear_auth']->login();
$_SESSION['username'] = $_POST['username'];
}
// Si un cookie existe, nous loggons l'utilisateur.
if (isset($_COOKIE[session_name()])) {
$GLOBALS['_GEN_commun']['pear_auth']->login();
}
}
 
// +------------------------------------------------------------------------------------------------------+
// | LISTE de FONCTIONS |
// +------------------------------------------------------------------------------------------------------+
 
/** Fonction afficherFormIdentification() - Retourne une formulaire pour s'identifier.
*
* Retourne un formulaire d'identificatin ou de déconnexion suivant que l'utilisateur est
* identifié ou pas.
*
* @param array tableau d'éventuel arguments présent dans la balise transmis à la fonction.
* @param array tableau global de Papyrus.
* @return string formulaire de connexion ou de déconnexion.
*/
function afficherFormIdentification($tab_arguments, &$_GEN_commun)
{
// Initialisation de variable.
$retour = '';
$objet_pear_auth =& $GLOBALS['_GEN_commun']['pear_auth'];
$objet_pear_db =& $GLOBALS['_GEN_commun']['pear_db'];
$InfoAuthBdd =& $GLOBALS['_GEN_commun']['info_auth_bdd'];
$objet_url =& $GLOBALS['_GEN_commun']['url'];
$url = $objet_url->getURL();
// Récupération des valeurs pour le login et le mot de passe
$mot_de_passe = (! isset($_POST['password'])) ? '' : $_POST['password'];
$login = (! isset($_POST['username'])) ? '' : $_POST['username'];
// ATTENTION : Partie à supprimer une fois les mise à jour effectué dans l'annuaire de Tela Botanica
// Devrait être déplacer dans l'appli inscription de Tela.
if (isset($InfoAuthBdd->gsab_nom_table) && $InfoAuthBdd->gsab_nom_table == 'annuaire_tela') {
verification_mot_de_passe($objet_pear_db, $mot_de_passe, $login);
if (isset($_POST['connexion'])) {
$objet_pear_auth->login();
}
}
if (! $objet_pear_auth->getAuth()) {
// L'utilisateur a essayé de s'identifier mais a échoué
if ($login != '') {
$retour .= '<span class="erreur">'.IDEN_ECHEC_AUTH ;
if (isset($InfoAuthBdd->url_inscription)) {
$retour .= '<a id="lien_inscription" href="'.$InfoAuthBdd->url_inscription.'">' ;
$retour .= IDEN_ICI.'</a>' ;
}
$retour .= '</span>'."\n";
}
// L'utilisateur n'est pas identifié:
$retour .= str_repeat(' ', 16).'<form id="form_connexion" class="form_identification" action="'.$url.'" method="post">'."\n";
$retour .= str_repeat(' ', 16).'<fieldset>'."\n";
$retour .= str_repeat(' ', 20).'<legend>'.IDEN_LG_FORM_LEGEND.'</legend>'."\n";
$retour .= str_repeat(' ', 20).''."\n";
$retour .= str_repeat(' ', 24).'<label for="username">'.IDEN_LG_FORM_LABEL_COURRIEL.'</label>'."\n";
$retour .= str_repeat(' ', 24).'<input type="text" id="username" name="username" maxlength="80" tabindex="1" value="'.IDEN_LG_FORM_VALUE_COURRIEL.'" />'."\n";
$retour .= str_repeat(' ', 20).''."\n";
$retour .= str_repeat(' ', 20).''."\n";
$retour .= str_repeat(' ', 24).'<label for="password">'.IDEN_LG_FORM_LABEL_MDP.'</label>'."\n";
$retour .= str_repeat(' ', 24).'<input type="password" id="password" name="password" maxlength="80" tabindex="2" value="'.IDEN_LG_FORM_VALUE_MDP.'" />'."\n";
$retour .= str_repeat(' ', 20).''."\n";
$retour .= str_repeat(' ', 20).''."\n";
if (IDEN_AUTH_SESSION_DUREE != 0) {
$retour .= str_repeat(' ', 24).'<input type="checkbox" id="persistant" name="persistant" tabindex="3" value="o" />'."\n";
$retour .= str_repeat(' ', 24).'<label id="persistant_label" for="persistant">'.'Mémoriser mon compte'.'</label>'."\n";
}
$retour .= str_repeat(' ', 20).''."\n";
$retour .= str_repeat(' ', 20).''."\n";
$retour .= str_repeat(' ', 24).'<input type="submit" id="connexion" name="connexion" tabindex="4" value="'.IDEN_LG_FORM_VALUE_SUBMIT.'" />'."\n";
$retour .= str_repeat(' ', 20).''."\n";
// Si l'url de la page d'inscription est stockée dans les paramêtres, nous l'affichons
if (isset($InfoAuthBdd->url_inscription) || isset($InfoAuthBdd->url_inscription_aide)) {
$retour .= '<p id="inscription_info">';
if (isset($InfoAuthBdd->url_inscription)) {
$retour .= '<a id="lien_inscription" href="'.$InfoAuthBdd->url_inscription.'">'.
IDEN_LG_INSCRIPTION_URL.
'</a>';
}
if (isset($InfoAuthBdd->url_inscription_aide)) {
$retour .= '<a id="inscription_aide" href="'.$InfoAuthBdd->url_inscription_aide.'">'.
IDEN_LG_INSCRIPTION_AIDE.
'</a>';
}
$retour .= '</p>'."\n";
}
$retour .= str_repeat(' ', 16).'</fieldset>'."\n";
$retour .= str_repeat(' ', 16).'</form>';
} else {
// L'utilisateur est identifié. Nous affichons ses informations.
// Affichage du prénom et nom d'une personne ou du nom de la structure en fonction des paramêtres
// de l'annuaire utilisé
$retour .= str_repeat(' ', 16).'<p id="identification_info"><span id="identification_message">'.IDEN_LG_MESSAGE.'</span> ';
// Si les intitulés des champs nom et prénoms d'une personne ou le nom d'une structure sont indiqués nous les affichons
if (isset($InfoAuthBdd->chp_personne_prenom) && isset($InfoAuthBdd->chp_personne_nom)) {
$retour .= '<span id="identification_prenom">'.
$objet_pear_auth->getAuthData($InfoAuthBdd->chp_personne_prenom).
'</span> '.
'<span id="identification_nom">'.
$objet_pear_auth->getAuthData($InfoAuthBdd->chp_personne_nom).
'</span>';
} elseif (isset($InfoAuthBdd->chp_structure_nom)) {
$retour .= '<span id="identification_structure">'.
$objet_pear_auth->getAuthData($InfoAuthBdd->chp_structure_nom).
'</span>';
}
$retour .= '</p>'."\n";
$retour .= str_repeat(' ', 16).'<p id="iden_action">'."\n";
// Si l'url de la page de modification de l'inscription est stockée dans les paramêtres, nous l'affichons
if (isset($InfoAuthBdd->url_inscription_modif)) {
$retour .= str_repeat(' ', 20).'<a id="lien_inscription_modif" href="'.
$InfoAuthBdd->url_inscription_modif.'">'.
IDEN_LG_INSCRIPTION_URL_MODIF.
'</a>'."\n";
}
// Affichage du bouton de déconnexion
$objet_url->addQueryString('logout', 1);
$retour .= str_repeat(' ', 20).'<a id="deconnexion" href="'.$objet_url->getURL().'">'.IDEN_LG_DECONNEXION.'</a>'."\n";
$objet_url->removeQueryString('logout');
$retour .= str_repeat(' ', 16).'</p>'."\n";
}
return $retour;
}
 
// +------------------------------------------------------------------------------------------------------+
// | PIED du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.25 2006/11/20 18:40:33 jp_milcent
* Amélioration de la gestion des infos sur l'inscription.
* Ajout du paramêtre url_inscription_aide permettant d'indiquer l'url vers une page d'aide sur l'inscription.
*
* Revision 1.24 2006/11/20 17:42:40 jp_milcent
* Ajout d'un test activant ou pas la mémorisation de l'identification.
*
* Revision 1.23 2006/11/20 17:30:40 jp_milcent
* Amélioration de la gestion de l'identification.
* Utilisation des durées de session correcte.
* Suppression du code pour Spip non fonctionnel.
*
* Revision 1.22 2006/09/21 15:25:17 jp_milcent
* Nettoyage dans l'url de la querystring logout.
*
* Revision 1.21 2006/03/02 10:49:49 ddelon
* Fusion branche multilinguisme dans branche principale
*
* Revision 1.20 2005/12/13 11:13:35 alexandre_tb
* ajout d'un message si l'identification échoue
*
* Revision 1.19.2.1 2005/12/20 14:40:24 ddelon
* Fusion Head vers Livraison
*
* Revision 1.20 2005/12/13 11:13:35 alexandre_tb
* ajout d'un message si l'identification échoue
*
* Revision 1.19 2005/10/31 17:09:28 ddelon
* Suppression auth start suite à deconnexion ... attention aux effets de bord
*
* Revision 1.18 2005/09/27 09:07:32 ddelon
* size applette et squelettes
*
* Revision 1.17 2005/09/12 09:17:17 alexandre_tb
* utilisation de l'objet Net_URL pour ajouter la variable logout dans le lien de déconnexion
*
* Revision 1.16 2005/06/09 17:06:28 jpm
* Ajout de constantes de langue.
*
* Revision 1.15 2005/06/02 11:56:00 jpm
* Modification de l'affichage de l'identification.
*
* Revision 1.14 2005/05/19 14:00:58 jpm
* Déplacement du menu de modif de l'inscription.
*
* Revision 1.13 2005/04/14 16:37:22 jpm
* Ajout de la gestion de la modification de son inscription.
*
* Revision 1.12 2005/03/25 14:40:51 jpm
* Prise en compte du paramêtre url_inscription permettant de faire figurer dans l'applette inscription un lien vers la page d'inscription.
*
* Revision 1.11 2005/03/17 15:52:17 jpm
* Suppression d'un / causant un bogue.
*
* Revision 1.10 2005/03/15 14:47:14 jpm
* Utilisation d'un lien à la place d'un formulaire pour la déconnexion.
*
* Revision 1.9 2005/03/15 14:17:46 jpm
* Ajout d'un fichier de config et de traduction.
* Début gestion des constantes de langue.
*
* Revision 1.8 2005/03/10 12:50:44 alex
* remplacement de & par &amp;
*
* Revision 1.7 2005/01/07 12:43:03 alex
* réauction de la taille des champs texte à 12
*
* Revision 1.6 2004/12/13 18:07:09 alex
* désauthentification spip presque parfaite
*
* Revision 1.5 2004/09/23 14:31:12 jpm
* Correction bogue sur l'identification de l'annuaire_tela.
*
* Revision 1.4 2004/09/23 10:53:44 jpm
* Suppression de l'attribut size. Gestion via les css.
*
* Revision 1.3 2004/06/28 10:18:48 alex
* suppression de balises <p>
*
* Revision 1.2 2004/06/21 07:37:30 alex
* Modification d'un label
*
* Revision 1.1 2004/06/15 15:01:41 jpm
* Changement de nom et d'arborescence de Genesia en Papyrus.
*
* Revision 1.5 2004/05/05 06:44:15 jpm
* Complément des commentaires indiquant les paquetages nécessaire à l'applette.
*
* Revision 1.4 2004/05/03 11:18:55 jpm
* Intégration de la variable globale de Génésia dans les arguments de la fonction de l'applette.
*
* Revision 1.3 2004/05/01 17:21:16 jpm
* Ajout d'un fieldset et d'une légende au formulaire.
*
* Revision 1.2 2004/05/01 16:13:07 jpm
* Ajout du nom de la balise de l'applette dans le code de l'applette.
*
* Revision 1.1 2004/05/01 11:42:01 jpm
* Ajout de l'applette identification.
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/applettes/identification/configuration/iden_config.inc.php
New file
0,0 → 1,72
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2005 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This file is part of Papyrus. |
// | |
// | Foobar is free software; you can redistribute it and/or modify |
// | it under the terms of the GNU General Public License as published by |
// | the Free Software Foundation; either version 2 of the License, or |
// | (at your option) any later version. |
// | |
// | Foobar 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 General Public License for more details. |
// | |
// | You should have received a copy of the GNU General Public License |
// | along with Foobar; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: iden_config.inc.php,v 1.2 2006-11-20 17:30:40 jp_milcent Exp $
/**
* Configuration de l'applette Identification.
*
* Fichier de configuration de l'applette Identification.
*
*@package Applette
*@subpackage Identification
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author Aucun
*@copyright Tela-Botanica 2000-2005
*@version $Revision: 1.2 $ $Date: 2006-11-20 17:30:40 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTETE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
// +------------------------------------------------------------------------------------------------------+
// | CORPS du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
/** Constante stockant la valeur de la langue par défaut pour l'applette IDEN.*/
define('IDEN_I18N_DEFAUT', GEN_I18N_ID_DEFAUT);
 
/** Constante stockant la valeur de durée de la session.*/
define('IDEN_AUTH_SESSION_DUREE', PAP_AUTH_SESSION_DUREE);
 
// Chemin vers les dossiers de l'applette
/** Chemin vers l'applette Identification de Papyrus.*/
define('IDEN_CHEMIN_APPLETTE', GEN_CHEMIN_APPLETTE.'identification'.GEN_SEP);
/** Chemin vers les fichiers de traduction de l'applette Identification de Papyrus.*/
define('IDEN_CHEMIN_LANGUE', IDEN_CHEMIN_APPLETTE.'langues'.GEN_SEP);
/** Chemin vers les fichiers de la bibliotheque de l'applette Identification de Papyrus.*/
define('IDEN_CHEMIN_BIBLIO', IDEN_CHEMIN_APPLETTE.'bibliotheque'.GEN_SEP);
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.1 2005/03/15 14:18:49 jpm
* Ajout d'un fichier de config.
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-menes/papyrus/installation/papyrus_v0.24.sql
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.0-menes/papyrus/installation/papyrus_v0.24.sql
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.0-menes/papyrus/pap_cache.inc.php
New file
0,0 → 1,124
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library 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 |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: pap_cache.inc.php,v 1.3 2006-04-28 12:41:49 florian Exp $
/**
* Gestion de la suppression et de la recherche dans le cache.
*
* Ce fichier n'est utilisé que si le site utilise la gestion du cache proposée
* par Papyrus.
* Il commence par supprimer les pages en cache trop anciennes et recherche en suite
* la présence de la page demandée dans le cache. Si elle est trouvée la page est renvoyée
* directement et le programme s'arrête ici. Si elle n'est pas trouvée, le programme de rendu
* la reconstruit et le programme d'envoi la sotcke dans le cache.
*
*@package Papyrus
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author Laurent COUDOUNEAU <lc@gsite.org>
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.3 $ $Date: 2006-04-28 12:41:49 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTÊTE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
/** <BR> Inclusion de la bibliothèque de fonctions de gestion du cache.*/
include_once './bibliotheque/fonctions/pap_cache.fonct.php';
 
/** <BR> Inclusion de la bibliothèque de fonctions de compression des données à envoyer.*/
include_once './bibliotheque/fonctions/pap_compression.fonct.php';
 
// +------------------------------------------------------------------------------------------------------+
// | CORPS du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
// +------------------------------------------------------------------------------------------------------+
// Gestion de la recherche dans le cache de la page demandée.
 
/*
// Utilisons nous le cache ?
if (! $GS_ARGUMENTS['cachectrl']) {
//header ("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
//header ("Pragma: no-cache"); // HTTP/1.0
}
*/
 
// Nous supprimons les pages en cache dont le délai de mise en cache est dépassé.
$duree_cache = $_GEN_commun['application_info']->cache_duree * 3600;
if ($duree_cache > 0) {
$requete = 'DELETE FROM gen_page_cache '.
'WHERE gpc_ce_site = '.$_GEN_commun['site_info']->gsi_id_site.' '.
'AND gpc_ce_i18n = "'.$_GEN_commun['site_info']->gsi_id_i18n.'" '.
'AND gpc_date_heure + '.$duree_cache.' < NOW()';
$resultat = $db->query($requete);
(DB::isError($resultat))
? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete))
: '';
}
 
// Vérification de la présence de la page demandée dans le cache.
$requete = 'SELECT * '.
'FROM gen_page_cache '.
'WHERE gpc_ce_site = '.$_GEN_commun['site_info']->gsi_id_site.' '.
'AND gpc_ce_i18n = "'.$_GEN_commun['site_info']->gsi_id_i18n.'" '.
'AND gpc_id_md5_url = "'.GEN_donnerMD5UriPostSession().'"';
 
$resultat = $db->query($requete);
(DB::isError($resultat))
? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete))
: '';
 
$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT) ;
$resultat->free();
 
// Nous avons trouvé la page. Nous essayons de la renvoyer.
if ($ligne == true) {
if ( GEN_envoyerDonneesCompressees($ligne->gpc_corps) ) {
// Si l'envoie des données à réussi nous arrétons le script ICI.
exit();
}
}
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.2 2005/02/28 11:20:42 jpm
* Modification des auteurs.
*
* Revision 1.1 2004/06/16 08:11:01 jpm
* Changement de nom de Génésia en Papyrus.
* Changement de l'arborescence.
*
* Revision 1.2 2004/04/22 08:29:55 jpm
* Transformation de $GS_GLOBAL en $_GEN_commun.
*
* Revision 1.1 2004/04/09 16:19:15 jpm
* Ajout du fichier indépendant du cache avec gestion des tables i18n.
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>