Subversion Repositories Applications.papyrus

Rev

Rev 1364 | Rev 1471 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

<?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.37 2007-04-24 13:27:57 alexandre_tb Exp $
/**
* Bibliotheque de fonctions d'admininistration des projets
*
* Contient un ensemble de fonctions permettant a l'application Administrateur de Papyrus, de modifier des informations
* sur les projets (=sites geres 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.37 $ $Date: 2007-04-24 13:27:57 $
// +------------------------------------------------------------------------------------------------------+
*/

// +------------------------------------------------------------------------------------------------------+
// |                                            ENTÊTE du PROGRAMME                                       |
// +------------------------------------------------------------------------------------------------------+
if (GEN_FTP_UTILISE) {
    /** Inclusion bibliotheque de PEAR gerant le FTP.*/
    require_once ADSI_CHEMIN_BIBLIOTHEQUE_PEAR.'Net/FTP.php';
}

// +------------------------------------------------------------------------------------------------------+
// |                                            CORPS du PROGRAMME                                        |
// +------------------------------------------------------------------------------------------------------+
/** Fonction ADMIN_afficherListeSites()- Genere le xhtml permettant de choisir un site parmis une liste.
*
* Cette fonction fournie une liste des sites principaux geres par papyrus.
*
* @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 a 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 defaut, 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 donnees 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 a la base de donnees.
* @param  string   l'url a laquelle renvoyer le formulaire.
* @param  string   le tableau contenant les valeurs du formulaire.
* @param  string   un message a destination de l'utilisateur.
* return  string   le code XHTML a 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 a 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 recuperer les informations sur le site a 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 recuperer les informations issues des relations du site a 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 defaut
                $aso_valeurs['defaut'] = true;
            }
            foreach ($tab_type as $cle => $val) {
                if ($ligne->gsr_id_valeur == $val['id']) {// 20x = type de site externe a 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;
    }
    // Debogage :
    //$GLOBALS['_DEBOGAGE_'] .= '<pre>'.print_r($aso_valeurs, true).'</pre>';
    //-------------------------------------------------------------------------------------------------------------------
    // Information precedent 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&eacute;rique : '.'</label>';
    $form->addElement('text', $id, $label, $aso_attributs);
    $form->addRule('gs_code_alpha', 'Un code alphanum&eacute;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&eacute;rique : '.'</label>';
    $form->addElement('text', $id, $label, $aso_attributs);
    $form->addRule('gs_code_num', 'Un code num&eacute;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&eacute;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 present dans le dossier du site 
            // creation de l'objet pear ftp
            $objet_pear_ftp = new Net_FTP(PAP_FTP_SERVEUR, PAP_FTP_PORT);
            // creation 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))) {
                return ('ERREUR Papyrus admin : impossible de se connecter par ftp.<br />'.
                    'Serveur : '. GEN_FTP_SERVEUR .'<br />'.
                    'Utilisateur : '. GEN_FTP_UTILISATEUR .'<br />'.
                    'Ligne n&deg; : '. __LINE__ .'<br />'.
                    'Fichier n&deg; : '. __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();
            if (PEAR::isError($tab_squelettes)) {
                return ('ERREUR Papyrus admin : impossible d\'acc&eacute; aux fichiers par ftp.<br />'.
                    'Chemin : '. $chemin_squelettes .'<br />'.
                    'Ligne n&deg; : '. __LINE__ .'<br />'.
                    'Fichier n&deg; : '. __FILE__ .'<br />'.
                    'Message : '. $tab_squelettes->getMessage());
            }
            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();
        }
        
        // Verification de la presence 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&eacute;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&egrave;te par d&eacute;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&eacute;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&eacute;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&eacute;&eacute; le '.$aso_valeurs['gs_date_creation'].'. Derni&egrave;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 defaut du formulaire
    $form->setDefaults($aso_valeurs);
    
    // Javascript pour la validation cote client
    $regles_javascript = $form->getValidationScript();
    
    // 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 donnees issues du formulaire pour gen_site.
*
* Cette fonction valide les donnees a ajouter dans la table gen_site.
*
* @param  string   l'objet pear de connexion a 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 donnees du formulaire
    if (empty($aso_valeurs['gs_nom'])) {
        $message .= '<p class="pap_erreur">Le champ "Nom" ne doit pas &ecirc;tre vide.</p>';
    }
    if (empty($aso_valeurs['gs_code_alpha'])) {
        $message .= '<p class="pap_erreur">Le champ "Code alphanum&eacute;rique" ne doit pas &ecirc;tre vide.</p>';
    }
    if ($aso_valeurs['gs_code_num'] == '') {
        // Note: ne pas utilisez empty() car si on veut saisir 0, cela est considéré comme vide!
        $message .= '<p class="pap_erreur">Le champ "Code num&eacute;rique" ne doit pas &ecirc;tre vide.</p>';
    }
    if (preg_match('/^[0-9]+$/',$aso_valeurs['gs_code_num']) == 0) {
        $message .= '<p class="pap_erreur">Le champ "Code num&eacute;rique" doit contenir un nombre.</p>';
    }
    
    // Requete pour verifier l'absence du code numerique et alphanumerique 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&eacute;rique" existe d&eacute;j&agrave;.</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&eacute;rique" existe d&eacute;j&agrave;.</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 &ecirc;tre vide.</p>';
    }
    if (empty($aso_valeurs['gs_mots_cles'])) {
        $message .= '<p class="pap_erreur">Le champ "Mots clés" ne doit pas &ecirc;tre vide.</p>';
    }
    if (empty($aso_valeurs['gs_description'])) {
        $message .= '<p class="pap_erreur">Le champ "Description" ne doit pas &ecirc;tre vide.</p>';
    }
    if (empty($aso_valeurs['gs_auteur'])) {
        $message .= '<p class="pap_erreur">Le champ "Auteur" ne doit pas &ecirc;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&eacute;sign&eacute; ce site comme &eacute;tant externe. Il est n&eacute;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&eacute;rez donc ce site comme &eacute;tant externe. Il est n&eacute;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 verifions si nous avons a faire a un site externe.
    $id_type_site = '102';// par defaut 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 repertoires des sites "principaux" soit par manipulation de fichier soit par FTP en fonction de la constante definie
    // par l'utilisateur dans le fichier de config avancee.
    $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&eacute;er le r&eacute;pertoire.<br />'.
                                'R&eacute;pertoire : '. $chemin_repertoire .'<br />'.
                                'Ligne n&deg; : '. __LINE__ .'<br />'.
                                'Fichier n&deg; : '. __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&eacute;er le fichier de squellete par d&eacute;faut.<br />'.
                        'Fichier : '. $chemin_squelette_site .'<br />'.
                        'Ligne n&deg; : '. __LINE__ .'<br />'.
                        'Fichier n&deg; : '. __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&eacute;er le fichier de style par d&eacute;faut.<br />'.
                        'Fichier : '. $chemin_style_site .'<br />'.
                        'Ligne n&deg; : '. __LINE__ .'<br />'.
                        'Fichier n&deg; : '. __FILE__ .'<br /></p>';
            return $message;
        }
    } else if (GEN_FTP_UTILISE && $id_type_site != '103') {  // 103 est le type "site externe"
        // Creation d'une connection ftp avec Net_FTP de PEAR
        // voir http://pear.php.net/manual/fr/package.networking.net-ftp.php
        
        // creation de l'objet pear ftp
        $objet_pear_ftp = new Net_FTP(PAP_FTP_SERVEUR, PAP_FTP_PORT);
        // creation 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&deg; : '. __LINE__ .'<br />'.
                        'Fichier n&deg; : '. __FILE__ .'<br /><p>';
            return $message;
        }
        $resultat = $objet_pear_ftp->mkdir(PAP_CHEMIN_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&eacute;pertoire : '. PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'] .'<br />'.
                        'Erreur origine : '. $resultat->getMessage() .'<br />'.
                        'Informations de debogage : '.$resultat->getDebugInfo().'<br />'.
                        'Ligne n&deg; : '. __LINE__ .'<br />'.
                        'Fichier n&deg; : '. __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_CHEMIN_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_CHEMIN_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&eacute;er le r&eacute;pertoire par ftp.<br />'.
                                'R&eacute;pertoire : '. $chemin_repertoire .'<br />'.
                                'Erreur origine : '. $resultat->getMessage() .'<br />'.
                                'Informations de debogage : '.$resultat->getDebugInfo().'<br />'.
                                'Ligne n&deg; : '. __LINE__ .'<br />'.
                                'Fichier n&deg; : '. __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;
        $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&eacute; : '. $chemin_squelette_site .'<br />'.
                        'Erreur origine : '. $resultat->getMessage() .'<br />'.
                        'Ligne n&deg; : '. __LINE__ .'<br />'.
                        'Fichier n&deg; : '. __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;
        $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&eacute; : '. $chemin_style_site .'<br />'.
                        'Erreur origine : '. $resultat->getMessage() .'<br />'.
                        'Ligne n&deg; : '. __LINE__ .'<br />'.
                        'Fichier n&deg; : '. __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_CHEMIN_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&eacute; : '. $chemin_style_site .'<br />'.
                        'Erreur origine : '. $resultat->getMessage() .'<br />'.
                        'Ligne n&deg; : '. __LINE__ .'<br />'.
                        'Fichier n&deg; : '. __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 papyrus admin : impossible de r&eacute;cup&eacute;rer un identifiant pour la table gen_site.<br />'.
                    'Ligne n&deg; : '. __LINE__ .'<br />'.
                    'Fichier n&deg; : '. __FILE__ .'<br /></p>';
        return $message;
    }
    
    // Modification de la requete si nous avons a faire a 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 numero 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 defaut
        $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 a Papyrus, c'est a dire :
* - 1. Creation des repertoire du projet en fonction du nom et des sous-repertoires.
* - 2. Insertion d'une ligne dans la table "gen_site".
* - 3. Insertion d'une ligne dans la table "gen_site_auth" et ses tables liees si necessaire.
*
* @param  string   l'objet pear de connexion a la base de données.
* @param  string   le tableau contenant les valeurs du formulaire.
* @param  int      identifiant de l'administrateur realisant cette création.
* @return string retourne un message en cas de succes ou d'echec.
*/
function ADMIN_traduireSite(&$db, $aso_valeurs, $id_admin)
{
    // Nous verifions si nous avons a faire a un site externe.
    $id_type_site = '102';// par defaut on considere 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 repertoires des sites "principaux" soit par manipulation de fichier soit par FTP en fonction de la constante definie
    // par l'utilisateur dans le fichier de config avancee.
    $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&eacute;er le r&eacute;pertoire.<br />'.
                                'R&eacute;pertoire : '. $chemin_repertoire .'<br />'.
                                'Ligne n&deg; : '. __LINE__ .'<br />'.
                                'Fichier n&deg; : '. __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&eacute;er le fichier de squellete par d&eacute;faut.<br />'.
                        'Fichier : '. $chemin_squelette_site .'<br />'.
                        'Ligne n&deg; : '. __LINE__ .'<br />'.
                        'Fichier n&deg; : '. __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&eacute;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_CHEMIN_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_CHEMIN_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_CHEMIN_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_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;
        $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_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;
        $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 Papyrus 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 considè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_CHEMIN_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_CHEMIN_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_CHEMIN_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.36  2007/04/20 13:48:31  alexandre_tb
* nettoyage accent
*
* Revision 1.35  2007/04/20 10:42:42  neiluj
* suite oubli, fix des derniers bugs FTP
*
* Revision 1.34  2007/04/20 09:21:41  neiluj
* correction bug ftp création/suppression/modification de site
* (changé PAP_FTP_RACINE en PAP_CHEMIN_RACINE)
* voir compatibilité chroot() du serveur FTP)
*
* Revision 1.33  2007/04/19 15:34:35  neiluj
* préparration release (livraison) "Narmer" - v0.25
*
* 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 Papyrus 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.
*
*
*/
?>