Rev 790 | Rev 925 | 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.30 2006-07-19 13:57:35 ddelon Exp $/*** Bibliothèque de fonctions d'admininistration des projets** Contient un ensemble de fonctions permettant à l'application Administrateur de Papyrus, de modifier des informations* sur les projets (=sites gérés par Papyrus).**@package Admin_site*@subpackage Fonctions//Auteur original :*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>//Autres auteurs :*@author Alexandre GRANIER <alexandre@tela-botanica.org>*@author Laurent COUDOUNEAU <lc@gsite.org>*@copyright Tela-Botanica 2000-2004*@version $Revision: 1.30 $ $Date: 2006-07-19 13:57:35 $// +------------------------------------------------------------------------------------------------------+*/// +------------------------------------------------------------------------------------------------------+// | ENTÊTE du PROGRAMME |// +------------------------------------------------------------------------------------------------------+if (GEN_FTP_UTILISE) {/** Inclusion bibliothèque de PEAR gérant le FTP.*/require_once ADSI_CHEMIN_BIBLIOTHEQUE_PEAR.'Net/FTP.php';}// +------------------------------------------------------------------------------------------------------+// | CORPS du PROGRAMME |// +------------------------------------------------------------------------------------------------------+/** Fonction ADMIN_afficherListeSites()- Génére le xhtml permettant de choisir un site parmis une liste.** Cette fonction fournie une liste des sites principaux gérés par Génésia.** @param string l'objet Pear DB.* @param string l'url de la page à laquelle renvoyer le formulaire.* @param string un message important à destination de l'utilisateur.* return string le code XHTML à retourner.*/function ADMIN_afficherFormListeSites(&$db, $url, $message = ''){$id_langue = $GLOBALS['_GEN_commun']['i18n']; //identifiant de la langue choisie// Langue en cours : langue choisie ou langue par defaut (principale)if (isset($id_langue) && ($id_langue!='')) {$langue_test=$id_langue;} else {$langue_test=GEN_I18N_ID_DEFAUT;}// Liste des sites principaux :// Recherche de tous les sites langue en cours$requete = 'SELECT * '.'FROM gen_site, gen_site_relation '.'WHERE gsr_id_site_01 = gsr_id_site_02 '.'AND gsr_id_site_01 = gs_id_site '.'AND gsr_id_valeur IN (102, 103) '.'AND gs_ce_i18n = "'.$langue_test.'" '.'ORDER BY gsr_ordre';$resultat = $db->query($requete);(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;$liste_site=array();while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {if ($langue_test == GEN_I18N_ID_DEFAUT) {$requete_est_traduction = 'SELECT gsr_id_site_01 '.'FROM gen_site_relation '.'WHERE '.$ligne->gs_id_site.' = gsr_id_site_02 ' .'AND gsr_id_site_01 <> gsr_id_site_02 ' .'AND gsr_id_valeur = 1 ';// 1 = "avoir traduction"$resultat_est_traduction = $db->query($requete_est_traduction);(DB::isError($resultat_est_traduction))? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_est_traduction->getMessage(), $requete_est_traduction)): '';if ( $resultat_est_traduction->numRows() == 0 ) {$liste_site[]=$ligne;}}else {$liste_site[]=$ligne;}}$resultat->free();// Si la langue en cours n'est pas la langue par défaut, recherche des sites ayant comme langue// la langue par defaut, non traduits dans la langue en cours et n'etant pas des traductionsif ($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 courswhile ($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('&', '&', $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] = ' '.$ligne_traduction->gs_ce_i18n.": ".htmlentities($ligne_traduction->gs_nom.' ('.$ligne_traduction->gs_code_alpha.')');}$resultat_traduction->free();}$id = 'form_sites_id_site';$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++);$label = '<label for="'.$id.'">'.'Listes des sites : '.'</label>';$form->addElement('select', $id, $label, $aso_options, $aso_attributs);$partie_site_fin = '</ul>'."\n".'</fieldset>'."\n";$form->addElement('html', $partie_site_fin);$liste_bouton_debut = '<ul class="liste_bouton">'."\n";$form->addElement('html', $liste_bouton_debut);$id = 'form_sites_ajouter';$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++);$label = 'Ajouter';$form->addElement('submit', $id, $label, $aso_attributs);$id = 'form_sites_modifier';$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++);$label = 'Modifier';$form->addElement('submit', $id, $label, $aso_attributs);$id = 'form_sites_traduire';$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++);$label = 'Traduire';$form->addElement('submit', $id, $label, $aso_attributs);$id = 'form_sites_supprimer';$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'onclick' => 'javascript:return confirm(\''.'Êtes vous sûr de vouloir supprimer ce site ?'.'\');');$label = 'Supprimer';$form->addElement('submit', $id, $label, $aso_attributs);$liste_bouton_fin = '</ul>'."\n";$form->addElement('html', $liste_bouton_fin);$sortie = $form->toHTML()."\n";// Titre de la page:$titre = 'Configuration des sites';// Construction de la page.return ADMIN_contruirePage($titre, $sortie, $message);}/** Fonction ADMIN_validerFormListesSites() - Valide les données issues du formulaire de liste de sites.** Cette fonction valide les données du formulaire de liste de site.** @param string l'objet pear de connexion à la base de données.* @param string le tableau contenant les valeurs du formulaire.* @return string retourne les messages d'erreurs sinon rien.*/function ADMIN_validerFormListesSites(&$db, $aso_valeurs){$message = '';// Validation des données du formulaireif (empty($aso_valeurs['form_sites_id_site'])) {$message .= '<p class="pap_erreur">Vous devez d\'abord sélectionner un site.</p>';}return $message;}/** Fonction ADMIN_afficherFormSite()- Génére un formulaire pour gen_site.** Cette fonction retourne un formulaire pour modification ou pour ajout.** @param string l'objet pear de connexion à la base de données.* @param string l'url à laquelle renvoyer le formulaire.* @param string le tableau contenant les valeurs du formulaire.* @param string un message à destination de l'utilisateur.* return string le code XHTML à retourner.*/function ADMIN_afficherFormSite(&$db, $url, $aso_valeurs = array(), $message = ''){// Initialisation des valeurs$sortie = '';$aso_valeurs['modification'] = false;$aso_valeurs['traduction'] = false;$aso_valeurs['defaut'] = false;$aso_valeurs['type_site_externe'] = 0;// Nous cherchons à savoir si nous somme en modificationif ((isset($aso_valeurs['form_sites_modifier'])) || (isset($aso_valeurs['form_sites_traduire']))) {if ((isset($aso_valeurs['form_sites_modifier']))) {$as_val['modification'] = true;$as_val['traduction'] = false;}else {$as_val['traduction'] = true;$as_val['modification'] = false;}if ($as_val['traduction']) {// Traduction d'un site principal uniquement :$requete = 'SELECT * '.'FROM gen_site_relation '.'WHERE gsr_id_site_02 = '.$aso_valeurs['form_sites_id_site'].' '.'AND gsr_id_valeur =1 '; // 1 = "avoir traduction"$resultat = $db->query($requete);if (DB::isError($resultat)) {die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );}if ( $resultat->numRows() == 0 ) {$site_id = $aso_valeurs['form_sites_id_site'];}else {$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);$site_id = $ligne->gsr_id_site_01;}$resultat->free();}else {$site_id = $aso_valeurs['form_sites_id_site'];}// Requete pour récupérer les informations sur le site à modifier$requete = 'SELECT * '.'FROM gen_site '.'WHERE gs_id_site = '.$site_id;$resultat = $db->query($requete);if (DB::isError($resultat)) {die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );}$aso_valeurs = $resultat->fetchRow(DB_FETCHMODE_ASSOC);$site_ligne = $aso_valeurs;$resultat->free();// Requete pour récupérer les informations issues des relations du site à modifier$requete = 'SELECT * '.'FROM gen_site_relation '.'WHERE gsr_id_site_01 = '.$site_id.' '.'AND gsr_id_site_01 = gsr_id_site_02';$resultat = $db->query($requete);if (DB::isError($resultat)) {die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );}$tab_type = GEN_retournerTableauTypeSiteExterne($db);while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT) ) {if ($ligne->gsr_id_valeur == 101) {// 101 = site par défaut$aso_valeurs['defaut'] = true;}foreach ($tab_type as $cle => $val) {if ($ligne->gsr_id_valeur == $val['id']) {// 20x = type de site externe à Papyrus$aso_valeurs['type_site_externe'] = $val['id'];}}}$resultat->free();if (($as_val['modification'])) {$aso_valeurs['modification'] = true;$aso_valeurs['traduction'] = false;}else {$aso_valeurs['traduction'] = true;$aso_valeurs['modification'] = false;};} else if (isset($aso_valeurs['gs_id_site'])) {$aso_valeurs['modification'] = true;}// Débogage ://$GLOBALS['_DEBOGAGE_'] .= '<pre>'.print_r($aso_valeurs, true).'</pre>';//-------------------------------------------------------------------------------------------------------------------// Information précédent le formulaire (en modification)if ((isset($aso_valeurs['modification'])||isset($aso_valeurs['traduction']))&&isset($aso_valeurs['gs_id_site'])) {$sortie .= '<p>'.'Identifiant de ce site : '.'<span id="adsi_site_id">'.$aso_valeurs['gs_id_site'].'</span></p>'."\n";}//-------------------------------------------------------------------------------------------------------------------// Création du formulaire$form =& new HTML_QuickForm('site', 'post', str_replace('&', '&', $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".' '."\n", 'double');$squelette->setRequiredNoteTemplate("\n".'<p><span class="symbole_obligatoire">*</span> {requiredNote}</p>'."\n");$partie_site_debut = '<fieldset>'."\n".'<legend>Configuration du site</legend>'."\n".'<ul>'."\n";$form->addElement('html', $partie_site_debut);if ($aso_valeurs['modification'] || $aso_valeurs['traduction']) {$form->addElement('hidden', 'gs_id_site');$form->addElement('hidden', 'modification');$form->addElement('hidden', 'traduction');}$id = 'gs_nom';$aso_attributs = array('id'=>$id, 'tabindex' => $tab_index++, 'size' => 45, 'maxlength' => 100, 'value' => 'nom du site');$label = '<label for="'.$id.'">'.'Nom du site : '.'</label>';$form->addElement('text', $id, $label, $aso_attributs);$form->addRule($id, 'Un nom est requis pour le site !', 'required', '', 'client');$id = 'gs_code_alpha';$aso_attributs = array('id'=>$id, 'tabindex' => $tab_index++, 'size' => 20, 'maxlength' => 20, 'value' => 'site_01');$label = '<label for="'.$id.'">'.'Code alphanumérique : '.'</label>';$form->addElement('text', $id, $label, $aso_attributs);$form->addRule('gs_code_alpha', 'Un code alphanumérique est requis pour le site !', 'required', '', 'client');$id = 'gs_code_num';$aso_attributs = array('id'=>$id, 'tabindex' => $tab_index++, 'size' => 20, 'maxlength' => 20, 'value' => 1);$label = '<label for="'.$id.'">'.'Code numérique : '.'</label>';$form->addElement('text', $id, $label, $aso_attributs);$form->addRule('gs_code_num', 'Un code numérique est requis pour le site !', 'required', '', 'client');$id = 'gs_raccourci_clavier';$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => 1, 'maxlength' => 1, 'value' => 'Z');$label = '<label for="'.$id.'">'.'Raccourci clavier : '.'</label>';$form->addElement('text', $id, $label, $aso_attributs);// Requete pour connaitre les identifications dispo$requete = 'SELECT * '.'FROM gen_site_auth '.'WHERE gsa_id_auth != 0';$resultat = $db->query($requete) ;if (DB::isError($resultat)) {die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );}$aso_options = array();while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT) ) {// Test pour connaître le type d'authentification.$type = '';if ($ligne->gsa_ce_type_auth == '1' ) {$type = 'Base de données';} else if ($ligne->gsa_ce_type_auth == '2' ) {$type = 'LDAP';}$aso_options[$ligne->gsa_id_auth] = $ligne->gsa_nom.' ('.$type.')';}$resultat->free();$id = 'gs_ce_auth';$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++);$label = '<label for="'.$id.'">'.'Identification : '.'</label>';$s = &$form->createElement('select', $id , $label, "", $aso_attributs);if (isset($aso_valeurs['gs_ce_auth'])) {$s->loadArray($aso_options,$aso_valeurs['gs_ce_auth']);$form->addElement($s);}// En modification nous affichons la liste des squelettes disponibles dans// le dossier du site.if ($aso_valeurs['modification'] || $aso_valeurs['traduction']) {$aso_options = array();if (!GEN_FTP_UTILISE) {$chemin_squelettes = PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.$aso_valeurs['gs_ce_i18n'].GEN_SEP.GEN_DOSSIER_SQUELETTE.GEN_SEP;$dossier = opendir($chemin_squelettes);while(($fichier = readdir($dossier)) !== false) {if ($fichier != '.' && $fichier != '..') {$chemin_type = $chemin_squelettes.GEN_SEP.$fichier;if (filetype($chemin_type) != 'dir') {$aso_options[$fichier] = $fichier;}}}} else {// ouverture des squelettes présent dans le dossier du site// création de l'objet pear ftp$objet_pear_ftp = new Net_FTP(PAP_FTP_SERVEUR, PAP_FTP_PORT);// création de la connexion$ftp_conn = $objet_pear_ftp->connect(PAP_FTP_SERVEUR, PAP_FTP_PORT);// identification$ftp_login_result = $objet_pear_ftp->login(PAP_FTP_UTILISATEUR, PAP_FTP_MOT_DE_PASSE);// Gestion des erreurs ftpif ((PEAR::isError($ftp_conn) || PEAR::isError($ftp_login_result))) {die('ERREUR Papyrus admin : impossible de se connecter par ftp.<br />'.'Serveur : '. GEN_FTP_SERVEUR .'<br />'.'Utilisateur : '. GEN_FTP_UTILISATEUR .'<br />'.'Ligne n° : '. __LINE__ .'<br />'.'Fichier n° : '. __FILE__ .'<br />');//'Message erreur de connection : '.$ftp_conn->getMessage().'<br />'.//'Message erreur de login : '.$ftp_login_result->getMessage());}$chemin_squelettes = PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.$aso_valeurs['gs_ce_i18n'].GEN_SEP.GEN_DOSSIER_SQUELETTE.GEN_SEP;$tab_squelettes = $objet_pear_ftp->ls($chemin_squelettes);$aso_options = array();for ($i = 0; $i < count($tab_squelettes) ; $i++) {if ($tab_squelettes[$i]['is_dir'] == false) {$aso_options[$tab_squelettes[$i]['name']] = $tab_squelettes[$i]['name'];}}$objet_pear_ftp->disconnect();}// Vérification de la présence de squelettesif (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 dispoif (!$aso_valeurs['modification'] && !$aso_valeurs['traduction']) {$requete = 'SELECT * '.'FROM gen_i18n ';}else {if ($aso_valeurs['traduction']) {// Recherche liste des sites deja traduits$requete = 'SELECT distinct gs_ce_i18n '.'FROM gen_site_relation, gen_site '.'WHERE gsr_id_site_01 = ' .$site_ligne['gs_id_site'] .' '.'AND gs_id_site = gsr_id_site_02 '.'AND gsr_id_valeur =1 '; // 1 = "avoir traduction"$resultat = $db->query($requete) ;if (DB::isError($resultat)) {die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );}$not_in_langue='';if ( $resultat->numRows() == 0 ) {$not_in_langue="gi_id_i18n not in('".$site_ligne['gs_ce_i18n']."')";}else {while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {$not_in_langue="'".$ligne->gs_ce_i18n."'".",".$not_in_langue;$end="'".$ligne->gs_ce_i18n."'";}if ($not_in_langue) {$not_in_langue="'".$site_ligne['gs_ce_i18n']."'".",".$not_in_langue;$not_in_langue=' gi_id_i18n not in('.$not_in_langue.$end.')';}else {$not_in_langue="gi_id_i18n not in('".$site_ligne['gs_ce_i18n']."')";}}$resultat->free();$requete = "SELECT * FROM gen_i18n where ".$not_in_langue;}else{$requete = "SELECT * FROM gen_i18n where gi_id_i18n =('".$site_ligne['gs_ce_i18n']."')";}}$resultat = $db->query($requete) ;if (DB::isError($resultat)) {die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );}$aso_options = array();while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT) ) {$aso_options[$ligne->gi_id_i18n] = $ligne->gi_id_i18n;}$resultat->free();$id = 'gs_ce_i18n';$aso_attributs = array('id' => $id, 'tabindex' => $tab_index++);$label = '<label for="'.$id.'">'.'Langue : '.'</label>';$form->addElement('select', $id, $label, $aso_options, $aso_attributs);$id = 'defaut';$aso_attributs = array('id' => $id, 'tabindex' => $tab_index++);if (isset($aso_valeurs[$id]) && $aso_valeurs[$id] === true) {$aso_attributs['checked'] = 'checked';}$label = '<label for="'.$id.'">'.'En faire le site par défaut : '.'</label>';$form->addElement('checkbox', $id, $label, null, $aso_attributs);// Groupe site externe$tab_type = GEN_retournerTableauTypeSiteExterne($db);$aso_options = array('0' => 'Aucun');foreach ($tab_type as $cle => $val) {$aso_options[$val['id']] = $val['intitule'];}$id = 'type_site_externe';$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++);$label = '<label>'.'Type de site externe : '.'</label>';$form->addElement('select', $id, $label, $aso_options, $aso_attributs);$id = 'gs_url';$aso_attributs = array('id' => $id, 'tabindex' => $tab_index++,'size' => 45, 'maxlength' => 255, 'value' => 'http://');$label = '<label>'.'URL du site externe : '.'</label>';$form->addElement('text', $id, $label, $aso_attributs);$partie_site_fin = '</ul>'."\n".'</fieldset>'."\n";$form->addElement('html', $partie_site_fin);$partie_entete_debut = '<fieldset>'."\n".'<legend>Entête par défaut des pages du site</legend>'."\n".'<ul>'."\n";$form->addElement('html', $partie_entete_debut);$id = 'gs_titre';$aso_attributs = array('id'=>$id, 'tabindex' => $tab_index++, 'size' => 45, 'maxlength' => 255, 'value' => ADSI_TITRE_SITE);$label = '<label for="'.$id.'">'.ADSI_TITRE_SITE.' : '.'</label>';$form->addElement('text', $id, $label, $aso_attributs);$form->addRule('gs_titre', 'Un titre est requis pour le site !', 'required', '', 'client');$id = 'gs_mots_cles';$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'rows' => 3, 'cols' => 45);$label = '<label for="'.$id.'">'.'Mots-clés : '.'</label>';$zone_mots_cles = $form->createElement('textarea', $id, $label, $aso_attributs);$zone_mots_cles->setValue('mots-clés du site');$form->addElement($zone_mots_cles);$form->addRule($id, 'Des mots clés sont requis pour le site !', 'required', '', 'client');$id = 'gs_description';$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'rows' => 3, 'cols' => 45);$label = '<label for="'.$id.'">'.'Description du contenu : '.'</label>';$zone = $form->createElement('textarea', $id, $label, $aso_attributs);$zone->setValue('description du site');$form->addElement($zone);$form->addRule($id, 'Une description est requise pour le site !', 'required', '', 'client');$id = 'gs_auteur';$aso_attributs = array('id'=>$id, 'tabindex' => $tab_index++, 'size' => 45, 'maxlength' => 255, 'value' => 'auteur du site');$label = '<label for="'.$id.'">'.'Auteur du site : '.'</label>';$form->addElement('text', $id, $label, $aso_attributs);$form->addRule('gs_auteur', 'Un auteur est requis pour le site !', 'required', '', 'client');$partie_entete_fin = '</ul>'."\n".'</fieldset>'."\n";$form->addElement('html', $partie_entete_fin);if ($aso_valeurs['modification'] || $aso_valeurs['traduction']) {// Requete pour connaitre les informations sur l'administrateur ayant fait la dernière modif$requete_admin = 'SELECT * '.'FROM gen_annuaire '.'WHERE ga_id_administrateur = '.$aso_valeurs['gs_ce_admin'];$resultat_admin = $db->query($requete_admin);if (DB::isError($resultat_admin)) {die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_admin->getMessage(), $requete_admin));}$ligne_admin = $resultat_admin->fetchRow(DB_FETCHMODE_OBJECT);if (isset($ligne_admin)) {$info_admin = '<p class="info">Site créé le '.$aso_valeurs['gs_date_creation'].'. Dernière modification par '.$ligne_admin->ga_prenom.' '.$ligne_admin->ga_nom.'.'.'</p>';$form->addElement('html', $info_admin);$form->addElement('hidden', 'gs_ce_admin');$form->addElement('hidden', 'gs_date_creation');}// Titre de la page:if ($aso_valeurs['modification']) {$titre = 'Modifier un site';$bouton_validation = '<input type="submit" id="site_modifier" name="site_modifier" value="Enregistrer" />';}else {$titre = 'Traduire un site';$bouton_validation = '<input type="submit" id="site_traduire" name="site_traduire" value="Enregistrer" />';}} else {// Titre de la page:$titre = 'Ajouter un site';// Bouton validant le formulaire$bouton_validation = '<input type="submit" id="site_enregistrer" name="site_enregistrer" value="Enregistrer" />';}$bouton_annuler = '<input type="submit" id="form_annuler" name="form_annuler" value="Annuler" />';$bouton_effacer = '<input type="reset" id="effacer" name="effacer" value="Effacer" />';$boutons = '<p>'."\n".$bouton_validation."\n".$bouton_annuler."\n".$bouton_effacer."\n".'</p>'."\n";$form->addElement('html', $boutons);// Instanciation des valeurs par défaut du formulaire$form->setDefaults($aso_valeurs);// Javascript pour la validation côté client$regles_javascript = $form->getValidationScript();// Suppression des balises déjà créées par GEN_stockerCodeScript()// Le code ci-dessous devrait être utilisé si on arrive à empécher Quickform de l'ajouter lui-même!/*$regles_javascript = ereg_replace ( '<script type="text\/javascript">', '', $regles_javascript);$regles_javascript = ereg_replace ( '<!--', '', $regles_javascript);$regles_javascript = ereg_replace ( '\/\/-->', '', $regles_javascript);$regles_javascript = ereg_replace ( '<\/script>', '', $regles_javascript);GEN_stockerCodeScript($regles_javascript);*/// Note de fin de formulaire$form->setRequiredNote('Indique les champs obligatoires');$sortie .= $form->toHTML()."\n";// Construction de la page.return ADMIN_contruirePage($titre, $sortie, $message);}/** Fonction ADMIN_validerFormAjouterSite() - Valide les données issues du formulaire pour gen_site.** Cette fonction valide les données à ajouter dans la table gen_site.** @param string l'objet pear de connexion à la base de données.* @param string le tableau contenant les valeurs du formulaire.* @return string retourne les messages d'erreurs sinon rien.*/function ADMIN_validerFormSite(&$db, $aso_valeurs){$message = '';// Validation des données du formulaireif (empty($aso_valeurs['gs_nom'])) {$message .= '<p class="pap_erreur">Le champ "Nom" ne doit pas être vide.</p>';}if (empty($aso_valeurs['gs_code_alpha'])) {$message .= '<p class="pap_erreur">Le champ "Code alphanumérique" ne doit pas être vide.</p>';}if ($aso_valeurs['gs_code_num'] == '') {// Note: ne pas utilisez empty() car si on veut saisir 0, cela est conscidéré comme vide!$message .= '<p class="pap_erreur">Le champ "Code numérique" ne doit pas être vide.</p>';}if (preg_match('/^[0-9]+$/',$aso_valeurs['gs_code_num']) == 0) {$message .= '<p class="pap_erreur">Le champ "Code numérique" doit contenir un nombre.</p>';}// Requete pour vérifier l'absence du code numérique et alphanumérique de la table gen_site// en mode creation uniquement !if (!$aso_valeurs['site_modifier'] && !$aso_valeurs['site_traduire'] ) {$requete = 'SELECT gs_code_alpha, gs_code_num '.'FROM gen_site, gen_site_relation '.'WHERE gsr_id_site_01 = gsr_id_site_02 '.'AND gsr_id_site_01 = gs_id_site '.'AND gsr_id_valeur IN (102, 103) ';// 102 = site "principal" et 103 = site "externe"$requete .= (isset($aso_valeurs['gs_id_site'])) ? 'AND gs_id_site != '.$aso_valeurs['gs_id_site'] : '';$resultat = $db->query($requete);if (DB::isError($resultat)) {die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );}while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT) ) {if ($ligne->gs_code_num == $aso_valeurs['gs_code_num']) {$message .= '<p class="pap_erreur">La valeur "'.$aso_valeurs['gs_code_num'].'" pour le champ "Code numérique" existe déjà.</p>';}if ($ligne->gs_code_alpha == $aso_valeurs['gs_code_alpha']) {$message .= '<p class="pap_erreur">La valeur "'.$aso_valeurs['gs_code_alpha'].'" pour le champ "Code alphanumérique" existe déjà.</p>';}}$resultat->free();}else {// Refuser si plus de traduction disponible !}if (empty($aso_valeurs['gs_titre'])) {$message .= '<p class="pap_erreur">Le champ "Titre" ne doit pas être vide.</p>';}if (empty($aso_valeurs['gs_mots_cles'])) {$message .= '<p class="pap_erreur">Le champ "Mots clés" ne doit pas être vide.</p>';}if (empty($aso_valeurs['gs_description'])) {$message .= '<p class="pap_erreur">Le champ "Description" ne doit pas être vide.</p>';}if (empty($aso_valeurs['gs_auteur'])) {$message .= '<p class="pap_erreur">Le champ "Auteur" ne doit pas être vide.</p>';}if (isset($aso_valeurs['externe']) && $aso_valeurs['externe'] == 1 && (empty($aso_valeurs['gs_url']) || $aso_valeurs['gs_url'] == 'http://')) {$message .= '<p class="pap_erreur">'.'Vous avez désigné ce site comme étant externe. Il est nécessaire de saisir son URL!'.'</p>';}if (isset($aso_valeurs['externe']) && $aso_valeurs['externe'] == 0 && (!empty($aso_valeurs['gs_url']) && $aso_valeurs['gs_url'] != 'http://')) {$message .= '<p class="pap_erreur">'.'Vous avez saisie une l\'url : '.$aso_valeurs['gs_url'].'<br />'.'Vous conscidérez donc ce site comme étant externe. Il est nécessaire de cocher la case "oui"!'.'</p>';}return $message;}/** Fonction ADMIN_enregistrerSite() - Ajoute un site à Papyrus.** Cette fonction ajoute le site à Papyrus, c'est à dire :* - 1. Création des répertoire du projet en fonction du nom et des sous-répertoires.* - 2. Insertion d'une ligne dans la table "gen_site".* - 3. Insertion d'une ligne dans la table "gen_site_auth" et ses tables liées si nécessaire.** @param string l'objet pear de connexion à la base de données.* @param string le tableau contenant les valeurs du formulaire.* @param int identifiant de l'administrateur réalisant cette création.* @return string retourne un message en cas de succès ou d'échec.*/function ADMIN_enregistrerSite(&$db, $aso_valeurs, $id_admin){// Nous vérifions si nous avons à faire à un site externe.$id_type_site = '102';// par défaut on conscidére que c'est un site "principal"if (isset($aso_valeurs['type_site_externe']) && $aso_valeurs['type_site_externe'] > 0 && !empty($aso_valeurs['gs_url']) && $aso_valeurs['gs_url'] != 'http://') {$id_type_site = '103';// c'est un site "externe"}// Ajout des répertoires des sites "principaux" soit par manipulation de fichier soit par FTP en fonction de la constante définie// par l'utilisateur dans le fichier de config avancée.$tab_rep_langue = array(GEN_DOSSIER_GENERIQUE, $aso_valeurs['gs_ce_i18n']);$tab_rep_site = array( GEN_DOSSIER_IMAGE,GEN_DOSSIER_STYLE,GEN_DOSSIER_SCRIPT,GEN_DOSSIER_SQUELETTE,GEN_DOSSIER_DOC);if (!GEN_FTP_UTILISE && $id_type_site != '103') {foreach ($tab_rep_langue as $nom_rep_langue) {foreach ($tab_rep_site as $nom_rep_site) {$chemin_repertoire = PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.$nom_rep_langue.GEN_SEP.$nom_rep_site;$vieux_umask = umask(0);$resultat = creerDossier($chemin_repertoire, 0777, GEN_SEP);umask($vieux_umask);if ($resultat == false) {$message = '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de créer le répertoire.<br />'.'Répertoire : '. $chemin_repertoire .'<br />'.'Ligne n° : '. __LINE__ .'<br />'.'Fichier n° : '. __FILE__ .'<br /></p>';return $message;}}}$chemin_squelette_defaut = PAP_CHEMIN_RACINE.GEN_CHEMIN_COMMUN.GEN_DOSSIER_GENERIQUE.GEN_SEP.GEN_DOSSIER_SQUELETTE.GEN_SEP.GEN_FICHIER_SQUELETTE;$chemin_squelette_site = PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.$aso_valeurs['gs_ce_i18n'].GEN_SEP.GEN_DOSSIER_SQUELETTE.GEN_SEP.GEN_FICHIER_SQUELETTE;if (!copy($chemin_squelette_defaut, $chemin_squelette_site)) {$message = '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de créer le fichier de squellete par défaut.<br />'.'Fichier : '. $chemin_squelette_site .'<br />'.'Ligne n° : '. __LINE__ .'<br />'.'Fichier n° : '. __FILE__ .'<br /></p>';return $message;}$chemin_style_defaut = PAP_CHEMIN_RACINE.GEN_CHEMIN_COMMUN.GEN_DOSSIER_GENERIQUE.GEN_SEP.GEN_DOSSIER_STYLE.GEN_SEP.GEN_FICHIER_STYLE;$chemin_style_site = PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.$aso_valeurs['gs_ce_i18n'].GEN_SEP.GEN_DOSSIER_STYLE.GEN_SEP.GEN_FICHIER_STYLE;if (!copy($chemin_style_defaut, $chemin_style_site)) {$message = '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de créer le fichier de style par défaut.<br />'.'Fichier : '. $chemin_style_site .'<br />'.'Ligne n° : '. __LINE__ .'<br />'.'Fichier n° : '. __FILE__ .'<br /></p>';return $message;}} else if (GEN_FTP_UTILISE && $id_type_site != '103') { // 103 est le type "site externe"// Création d'une connection ftp avec Net_FTP de PEAR// voir http://pear.php.net/manual/fr/package.networking.net-ftp.php// création de l'objet pear ftp$objet_pear_ftp = new Net_FTP(PAP_FTP_SERVEUR, PAP_FTP_PORT);// création de la connexion$ftp_conn = $objet_pear_ftp->connect(PAP_FTP_SERVEUR, PAP_FTP_PORT);// identification$ftp_login_result = $objet_pear_ftp->login(PAP_FTP_UTILISATEUR, PAP_FTP_MOT_DE_PASSE);// Gestion des erreurs ftpif ((PEAR::isError($ftp_conn) || PEAR::isError($ftp_login_result))) {$message = '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de se connecter par ftp.<br />'.'Serveur : '. PAP_FTP_SERVEUR .'<br />'.'Utilisateur : '. PAP_FTP_UTILISATEUR .'<br />'.'Erreur connexion : '.$ftp_conn->getMessage().'<br />'.'Erreur login : '.$ftp_login_result->getMessage().'<br />'.'Ligne n° : '. __LINE__ .'<br />'.'Fichier n° : '. __FILE__ .'<br /><p>';return $message;}$objet_pear_ftp->mkdir(PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha']) ;//$objet_pear_ftp->cd(PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha']) ;foreach ($tab_rep_langue as $nom_rep_langue) {$objet_pear_ftp->mkdir(PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.$nom_rep_langue) ;foreach ($tab_rep_site as $nom_rep_site) {$chemin_repertoire = PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.$nom_rep_langue.GEN_SEP.$nom_rep_site;$resultat = $objet_pear_ftp->mkdir($chemin_repertoire) ;if (PEAR::isError($resultat)) {$message = '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de créer le répertoire par ftp.<br />'.'Répertoire : '. $chemin_repertoire .'<br />'.'Erreur origine : '. $resultat->getMessage() .'<br />'.'Ligne n° : '. __LINE__ .'<br />'.'Fichier n° : '. __FILE__ .'<br /></p>';return $message;}}}$chemin_squelette_defaut = PAP_CHEMIN_RACINE.GEN_CHEMIN_COMMUN.GEN_DOSSIER_GENERIQUE.GEN_SEP.GEN_DOSSIER_SQUELETTE.GEN_SEP.GEN_FICHIER_SQUELETTE;$chemin_squelette_site = PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.$aso_valeurs['gs_ce_i18n'].GEN_SEP.GEN_DOSSIER_SQUELETTE.GEN_SEP.GEN_FICHIER_SQUELETTE;$resultat = $objet_pear_ftp->put($chemin_squelette_defaut, $chemin_squelette_site, true, FTP_BINARY);if (PEAR::isError($resultat)) {$message = '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de copier le squelette defaut par ftp.<br />'.'Fichier origine : '. $chemin_squelette_defaut .'<br />'.'Fichier copié : '. $chemin_squelette_site .'<br />'.'Erreur origine : '. $resultat->getMessage() .'<br />'.'Ligne n° : '. __LINE__ .'<br />'.'Fichier n° : '. __FILE__ .'<br /></p>';return $message;}$chemin_style_defaut = PAP_CHEMIN_RACINE.GEN_CHEMIN_COMMUN.GEN_DOSSIER_GENERIQUE.GEN_SEP.GEN_DOSSIER_STYLE.GEN_SEP.GEN_FICHIER_STYLE;$chemin_style_site = PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.$aso_valeurs['gs_ce_i18n'].GEN_SEP.GEN_DOSSIER_STYLE.GEN_SEP.GEN_FICHIER_STYLE;$resultat = $objet_pear_ftp->put($chemin_style_defaut, $chemin_style_site, true, FTP_BINARY);if (PEAR::isError($resultat)) {$message = '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de copier les styles defaut par ftp.<br />'.'Fichier origine : '. $chemin_style_defaut .'<br />'.'Fichier copié : '. $chemin_style_site .'<br />'.'Erreur origine : '. $resultat->getMessage() .'<br />'.'Ligne n° : '. __LINE__ .'<br />'.'Fichier n° : '. __FILE__ .'<br /></p>';return $message;}$objet_pear_ftp->disconnect();}$id_site = SQL_obtenirNouveauId($db, 'gen_site','gs_id_site');if ($id_site == false) {$message = '<p class="erreur"> ERREUR Génésia admin : impossible de récupérer un identifiant pour la table gen_site.<br />'.'Ligne n° : '. __LINE__ .'<br />'.'Fichier n° : '. __FILE__ .'<br /></p>';return $message;}// Modification de la requete si nous avons à faire à un site externe.$requete_complement = ', gs_url = NULL';if (isset($aso_valeurs['type_site_externe']) && $aso_valeurs['type_site_externe'] > 0 && !empty($aso_valeurs['gs_url']) && $aso_valeurs['gs_url'] != 'http://') {$requete_complement = ', gs_url = "'.$aso_valeurs['gs_url'].'"';}// Requete d'insertion des infos d'un site dans gen_site$requete = 'INSERT INTO gen_site '.'SET gs_id_site = '.$id_site.', '.'gs_ce_i18n = "'.$aso_valeurs['gs_ce_i18n'].'", '.'gs_ce_auth = '.$aso_valeurs['gs_ce_auth'].', '.'gs_fichier_squelette = "defaut.html", '.'gs_code_num = '.$aso_valeurs['gs_code_num'].', '.'gs_code_alpha = "'.$aso_valeurs['gs_code_alpha'].'", '.'gs_nom = "'.$aso_valeurs['gs_nom'].'", '.'gs_raccourci_clavier = "'.$aso_valeurs['gs_raccourci_clavier'].'", '.'gs_titre = "'.$aso_valeurs['gs_titre'].'", '.'gs_mots_cles = "'.$aso_valeurs['gs_mots_cles'].'", '.'gs_description = "'.$aso_valeurs['gs_description'].'", '.'gs_auteur = "'.$aso_valeurs['gs_auteur'].'", '.'gs_date_creation = "'.date('Y-m-d H:i:s').'", '.'gs_ce_admin = '.$id_admin.$requete_complement;$resultat = $db->query($requete);if (DB::isError($resultat)) {die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );}// Recherche du nouveau numéro d'ordre de ce site "principal" ou "externe"$requete = 'SELECT MAX(gsr_ordre) AS max_ordre '.'FROM gen_site_relation '.'WHERE gsr_id_site_01 = gsr_id_site_02 '.'AND gsr_id_valeur IN (102, 103) ';// 102 = site "principal" et 103 = site "externe"$resultat = $db->query($requete) ;if (DB::isError($resultat)) {die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );}$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);$nouvel_ordre = $ligne->max_ordre + 1;// Requete d'insertion des relations dans gen_site_relation$requete = 'INSERT INTO gen_site_relation '.'SET gsr_id_site_01 = '.$id_site.', '.'gsr_id_site_02 = '.$id_site.', '.'gsr_id_valeur = '.$id_type_site.', '.'gsr_ordre = '.$nouvel_ordre;$resultat = $db->query($requete);if (DB::isError($resultat)) {die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));}// Gestion du site par défautif (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 externesif ($id_type_site == '103') {// Requete d'insertion des relations dans gen_site_relation$requete = 'INSERT INTO gen_site_relation '.'SET gsr_id_site_01 = '.$id_site.', '.'gsr_id_site_02 = '.$id_site.', '.'gsr_id_valeur = '.$aso_valeurs['type_site_externe'].', '.'gsr_ordre = NULL ';$resultat = $db->query($requete);if (DB::isError($resultat)) {die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));}}$message = '<p class="pap_info">'.'Succés de l\'ajout du site.'.'</p>';return $message;}/** Fonction ADMIN_traduireSite() - Traduire un site papyrus** Cette fonction traduit un site à Papyrus, c'est à dire :* - 1. Création des répertoire du projet en fonction du nom et des sous-répertoires.* - 2. Insertion d'une ligne dans la table "gen_site".* - 3. Insertion d'une ligne dans la table "gen_site_auth" et ses tables liées si nécessaire.** @param string l'objet pear de connexion à la base de données.* @param string le tableau contenant les valeurs du formulaire.* @param int identifiant de l'administrateur réalisant cette création.* @return string retourne un message en cas de succès ou d'échec.*/function ADMIN_traduireSite(&$db, $aso_valeurs, $id_admin){// Nous vérifions si nous avons à faire à un site externe.$id_type_site = '102';// par défaut on considére que c'est un site "principal"if (isset($aso_valeurs['type_site_externe']) && $aso_valeurs['type_site_externe'] > 0 && !empty($aso_valeurs['gs_url']) && $aso_valeurs['gs_url'] != 'http://') {$id_type_site = '103';// c'est un site "externe"}// Ajout des répertoires des sites "principaux" soit par manipulation de fichier soit par FTP en fonction de la constante définie// par l'utilisateur dans le fichier de config avancée.$tab_rep_langue = array(GEN_DOSSIER_GENERIQUE, $aso_valeurs['gs_ce_i18n']);$tab_rep_site = array( GEN_DOSSIER_IMAGE,GEN_DOSSIER_STYLE,GEN_DOSSIER_SCRIPT,GEN_DOSSIER_SQUELETTE,GEN_DOSSIER_DOC);if (!GEN_FTP_UTILISE && $id_type_site != '103') {foreach ($tab_rep_langue as $nom_rep_langue) {foreach ($tab_rep_site as $nom_rep_site) {$chemin_repertoire = PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.$nom_rep_langue.GEN_SEP.$nom_rep_site;$vieux_umask = umask(0);$resultat = creerDossier($chemin_repertoire, 0777, GEN_SEP);umask($vieux_umask);if ($resultat == false) {$message = '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de créer le répertoire.<br />'.'Répertoire : '. $chemin_repertoire .'<br />'.'Ligne n° : '. __LINE__ .'<br />'.'Fichier n° : '. __FILE__ .'<br /></p>';return $message;}}}$chemin_squelette_defaut = PAP_CHEMIN_RACINE.GEN_CHEMIN_COMMUN.GEN_DOSSIER_GENERIQUE.GEN_SEP.GEN_DOSSIER_SQUELETTE.GEN_SEP.GEN_FICHIER_SQUELETTE;$chemin_squelette_site = PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.$aso_valeurs['gs_ce_i18n'].GEN_SEP.GEN_DOSSIER_SQUELETTE.GEN_SEP.GEN_FICHIER_SQUELETTE;if (!copy($chemin_squelette_defaut, $chemin_squelette_site)) {$message = '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de créer le fichier de squellete par défaut.<br />'.'Fichier : '. $chemin_squelette_site .'<br />'.'Ligne n° : '. __LINE__ .'<br />'.'Fichier n° : '. __FILE__ .'<br /></p>';return $message;}$chemin_style_defaut = PAP_CHEMIN_RACINE.GEN_CHEMIN_COMMUN.GEN_DOSSIER_GENERIQUE.GEN_SEP.GEN_DOSSIER_STYLE.GEN_SEP.GEN_FICHIER_STYLE;$chemin_style_site = PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.$aso_valeurs['gs_ce_i18n'].GEN_SEP.GEN_DOSSIER_STYLE.GEN_SEP.GEN_FICHIER_STYLE;if (!copy($chemin_style_defaut, $chemin_style_site)) {$message = '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de créer le fichier de style par défaut.<br />'.'Fichier : '. $chemin_style_site .'<br />'.'Ligne n° : '. __LINE__ .'<br />'.'Fichier n° : '. __FILE__ .'<br /></p>';return $message;}} else if (GEN_FTP_UTILISE && $id_type_site != '103') { // 103 est le type "site externe"// Création d'une connection ftp avec Net_FTP de PEAR// voir http://pear.php.net/manual/fr/package.networking.net-ftp.php// création de l'objet pear ftp$objet_pear_ftp = new Net_FTP(PAP_FTP_SERVEUR, PAP_FTP_PORT);// création de la connexion$ftp_conn = $objet_pear_ftp->connect(PAP_FTP_SERVEUR, PAP_FTP_PORT);// identification$ftp_login_result = $objet_pear_ftp->login(PAP_FTP_UTILISATEUR, PAP_FTP_MOT_DE_PASSE);// Gestion des erreurs ftpif ((PEAR::isError($ftp_conn) || PEAR::isError($ftp_login_result))) {$message = '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de se connecter par ftp.<br />'.'Serveur : '. PAP_FTP_SERVEUR .'<br />'.'Utilisateur : '. PAP_FTP_UTILISATEUR .'<br />'.'Erreur connexion : '.$ftp_conn->getMessage().'<br />'.'Erreur login : '.$ftp_login_result->getMessage().'<br />'.'Ligne n° : '. __LINE__ .'<br />'.'Fichier n° : '. __FILE__ .'<br /><p>';return $message;}$objet_pear_ftp->mkdir(PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha']) ;//$objet_pear_ftp->cd(PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha']) ;foreach ($tab_rep_langue as $nom_rep_langue) {$objet_pear_ftp->mkdir(PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.$nom_rep_langue) ;foreach ($tab_rep_site as $nom_rep_site) {$chemin_repertoire = PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.$nom_rep_langue.GEN_SEP.$nom_rep_site;$resultat = $objet_pear_ftp->mkdir($chemin_repertoire) ;if (PEAR::isError($resultat)) {$message = '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de créer le répertoire par ftp.<br />'.'Répertoire : '. $chemin_repertoire .'<br />'.'Erreur origine : '. $resultat->getMessage() .'<br />'.'Ligne n° : '. __LINE__ .'<br />'.'Fichier n° : '. __FILE__ .'<br /></p>';return $message;}}}$chemin_squelette_defaut = PAP_CHEMIN_RACINE.GEN_CHEMIN_COMMUN.GEN_DOSSIER_GENERIQUE.GEN_SEP.GEN_DOSSIER_SQUELETTE.GEN_SEP.GEN_FICHIER_SQUELETTE;$chemin_squelette_site = PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.$aso_valeurs['gs_ce_i18n'].GEN_SEP.GEN_DOSSIER_SQUELETTE.GEN_SEP.GEN_FICHIER_SQUELETTE;$resultat = $objet_pear_ftp->put($chemin_squelette_defaut, $chemin_squelette_site, true, FTP_BINARY);if (PEAR::isError($resultat)) {$message = '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de copier le squelette defaut par ftp.<br />'.'Fichier origine : '. $chemin_squelette_defaut .'<br />'.'Fichier copié : '. $chemin_squelette_site .'<br />'.'Erreur origine : '. $resultat->getMessage() .'<br />'.'Ligne n° : '. __LINE__ .'<br />'.'Fichier n° : '. __FILE__ .'<br /></p>';return $message;}$chemin_style_defaut = PAP_CHEMIN_RACINE.GEN_CHEMIN_COMMUN.GEN_DOSSIER_GENERIQUE.GEN_SEP.GEN_DOSSIER_STYLE.GEN_SEP.GEN_FICHIER_STYLE;$chemin_style_site = PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.$aso_valeurs['gs_ce_i18n'].GEN_SEP.GEN_DOSSIER_STYLE.GEN_SEP.GEN_FICHIER_STYLE;$resultat = $objet_pear_ftp->put($chemin_style_defaut, $chemin_style_site, true, FTP_BINARY);if (PEAR::isError($resultat)) {$message = '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de copier les styles defaut par ftp.<br />'.'Fichier origine : '. $chemin_style_defaut .'<br />'.'Fichier copié : '. $chemin_style_site .'<br />'.'Erreur origine : '. $resultat->getMessage() .'<br />'.'Ligne n° : '. __LINE__ .'<br />'.'Fichier n° : '. __FILE__ .'<br /></p>';return $message;}$objet_pear_ftp->disconnect();}$id_site = SQL_obtenirNouveauId($db, 'gen_site','gs_id_site');if ($id_site == false) {$message = '<p class="erreur"> ERREUR Génésia admin : impossible de récupérer un identifiant pour la table gen_site.<br />'.'Ligne n° : '. __LINE__ .'<br />'.'Fichier n° : '. __FILE__ .'<br /></p>';return $message;}// Modification de la requete si nous avons à faire à un site externe.$requete_complement = ', gs_url = NULL';if (isset($aso_valeurs['type_site_externe']) && $aso_valeurs['type_site_externe'] > 0 && !empty($aso_valeurs['gs_url']) && $aso_valeurs['gs_url'] != 'http://') {$requete_complement = ', gs_url = "'.$aso_valeurs['gs_url'].'"';}// Requete d'insertion des infos d'un site dans gen_site$requete = 'INSERT INTO gen_site '.'SET gs_id_site = '.$id_site.', '.'gs_ce_i18n = "'.$aso_valeurs['gs_ce_i18n'].'", '.'gs_ce_auth = '.$aso_valeurs['gs_ce_auth'].', '.'gs_fichier_squelette = "defaut.html", '.'gs_code_num = '.$aso_valeurs['gs_code_num'].', '.'gs_code_alpha = "'.$aso_valeurs['gs_code_alpha'].'", '.'gs_nom = "'.$aso_valeurs['gs_nom'].'", '.'gs_raccourci_clavier = "'.$aso_valeurs['gs_raccourci_clavier'].'", '.'gs_titre = "'.$aso_valeurs['gs_titre'].'", '.'gs_mots_cles = "'.$aso_valeurs['gs_mots_cles'].'", '.'gs_description = "'.$aso_valeurs['gs_description'].'", '.'gs_auteur = "'.$aso_valeurs['gs_auteur'].'", '.'gs_date_creation = "'.date('Y-m-d H:i:s').'", '.'gs_ce_admin = '.$id_admin.$requete_complement;$resultat = $db->query($requete);if (DB::isError($resultat)) {die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );}// Recherche du nouveau numéro d'ordre de ce site "principal" ou "externe"$requete = 'SELECT MAX(gsr_ordre) AS max_ordre '.'FROM gen_site_relation '.'WHERE gsr_id_site_01 = gsr_id_site_02 '.'AND gsr_id_valeur IN (102, 103) ';// 102 = site "principal" et 103 = site "externe"$resultat = $db->query($requete) ;if (DB::isError($resultat)) {die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );}$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);$nouvel_ordre = $ligne->max_ordre + 1;// Requete d'insertion des relations dans gen_site_relation$requete = 'INSERT INTO gen_site_relation '.'SET gsr_id_site_01 = '.$id_site.', '.'gsr_id_site_02 = '.$id_site.', '.'gsr_id_valeur = '.$id_type_site.', '.'gsr_ordre = '.$nouvel_ordre;$resultat = $db->query($requete);if (DB::isError($resultat)) {die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));}// Traduction : Requete d'insertion des relations dans gen_site_relation$requete = 'SELECT MAX(gsr_ordre) AS max_ordre '.'FROM gen_site_relation '.'WHERE gsr_id_site_01 = ' .$aso_valeurs['gs_id_site'] .' '.'AND gsr_id_valeur =1 '; // 1 = "avoir traduction"$resultat = $db->query($requete) ;if (DB::isError($resultat)) {die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );}if ( $resultat->numRows() == 0 ) {$nouvel_ordre = 1;}else {$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);$nouvel_ordre = $ligne->max_ordre + 1;}// 1 : insertion information traduction pere (si inexistant)$requete = 'SELECT * '.'FROM gen_site_relation '.'WHERE gsr_id_site_01 = ' .$aso_valeurs['gs_id_site'] .' '.'AND gsr_id_site_01 = gsr_id_site_02 '.'AND gsr_id_valeur =1 '; // 1 = "avoir traduction"$resultat = $db->query($requete) ;if (DB::isError($resultat)) {die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );}if ( $resultat->numRows() == 0 ) {$requete = 'INSERT INTO gen_site_relation '.'SET gsr_id_site_01 = '. $aso_valeurs['gs_id_site'].', '.'gsr_id_site_02 = '.$aso_valeurs['gs_id_site'].', '.'gsr_id_valeur = 1, '. // 1 = "avoir traduction"'gsr_ordre = 1 ';$resultat = $db->query($requete);if (DB::isError($resultat)) {die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));}$nouvel_ordre = 2;}// 2 : insertion information traduction site en cours (si inexistant ?) (et la mise a jour, c'est ailleurs// dans les mises à jour$requete = 'INSERT INTO gen_site_relation '.'SET gsr_id_site_01 = '. $aso_valeurs['gs_id_site'].', '.'gsr_id_site_02 = '.$id_site.', '.'gsr_id_valeur = 1, '. // 1 = "avoir traduction"'gsr_ordre = '.$nouvel_ordre;$resultat = $db->query($requete);if (DB::isError($resultat)) {die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));}// Gestion du site par défautif (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 externesif ($id_type_site == '103') {// Requete d'insertion des relations dans gen_site_relation$requete = 'INSERT INTO gen_site_relation '.'SET gsr_id_site_01 = '.$id_site.', '.'gsr_id_site_02 = '.$id_site.', '.'gsr_id_valeur = '.$aso_valeurs['type_site_externe'].', '.'gsr_ordre = NULL ';$resultat = $db->query($requete);if (DB::isError($resultat)) {die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));}}$message = '<p class="pap_info">'.'Succés de l\'ajout du site.'.'</p>';return $message;}/** Fonction ADMIN_modifierSite() - Modifie un site de Papyrus.** Cette fonction modifie un site géré par Papyrus.* Il faudrait aussi pouvoir renomer le dossier du site si le code alpha change.** @param string l'objet pear de connexion à la base de données.* @param string le tableau contenant les valeurs du formulaire.* @param int identifiant de l'administrateur réalisant cette modification.* @return string retourne un message en cas de succès ou d'échec.*/function ADMIN_modifierSite(&$db, $aso_valeurs, $id_admin){// Initialisation de variables$message_complement = '';// Récupération de l'ancien code alphanumérique$requete = 'SELECT gs_code_alpha '.'FROM gen_site '.'WHERE gs_id_site = '.$aso_valeurs['gs_id_site'];$ancien_code_alphnum = $db->getOne($requete);if (DB::isError($ancien_code_alphnum)) {die( BOG_afficherErreurSql(__FILE__, __LINE__, $ancien_code_alphnum->getMessage(), $requete) );}// Nous vérifions si nous avons à faire à un site externe.$id_type_site = '102';// par défaut on conscidére que c'est un site "principal"$requete_complement = ', gs_url = NULL ';if (isset($aso_valeurs['type_site_externe']) && $aso_valeurs['type_site_externe'] > 0 && !empty($aso_valeurs['gs_url']) && $aso_valeurs['gs_url'] != 'http://') {$requete_complement = ', gs_url = "'.$aso_valeurs['gs_url'].'" ';$id_type_site = '103';// c'est un site "externe"}// Si le code alphanumérique à changé et que nous n'avons pas à faire à un site externe.if ($aso_valeurs['gs_code_alpha'] != $ancien_code_alphnum && $id_type_site != 103) {if (!GEN_FTP_UTILISE) {$chemin_site_ancien = PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$ancien_code_alphnum.GEN_SEP;$chemin_site_nouveau = PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP;if (!rename($chemin_site_ancien, $chemin_site_nouveau)) {$message = '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de changer le nom du dossier du site.<br />'.'Ancien nom : '. $chemin_site_ancien .'<br />'.'Nouveau nom : '. $chemin_site_nouveau .'<br />'.'Ligne n° : '. __LINE__ .'<br />'.'Fichier n° : '. __FILE__ .'<br /></p>';return $message;}} else {$chemin_site_ancien = PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$ancien_code_alphnum.GEN_SEP;$chemin_site_nouveau = PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP;// Création d'une connection ftp avec Net_FTP de PEAR// voir http://pear.php.net/manual/fr/package.networking.net-ftp.php// création de l'objet pear ftp$objet_pear_ftp = new Net_FTP(PAP_FTP_SERVEUR, PAP_FTP_PORT);// création de la connexion$ftp_conn = $objet_pear_ftp->connect(PAP_FTP_SERVEUR, PAP_FTP_PORT);// identification$ftp_login_result = $objet_pear_ftp->login(PAP_FTP_UTILISATEUR, PAP_FTP_MOT_DE_PASSE);// Gestion des erreurs ftpif ((PEAR::isError($ftp_conn) || PEAR::isError($ftp_login_result))) {$message = '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de se connecter par ftp.<br />'.'Serveur : '. PAP_FTP_SERVEUR .'<br />'.'Utilisateur : '. PAP_FTP_UTILISATEUR .'<br />'.'Erreur connexion : '.$ftp_conn->getMessage().'<br />'.'Erreur login : '.$ftp_login_result->getMessage().'<br />'.'Ligne n° : '. __LINE__ .'<br />'.'Fichier n° : '. __FILE__ .'<br /><p>';return $message;}$resultat = $objet_pear_ftp->putRecursive($chemin_site_ancien, $chemin_site_nouveau, false, FTP_BINARY);if (PEAR::isError($resultat)) {$message = '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de copier l\'ancien dossier du site.<br />'.'Dossier site ancien : '. $chemin_site_ancien .'<br />'.'Dossier site nouveau : '. $chemin_site_nouveau .'<br />'.'Erreur origine : '. $resultat->getMessage() .'<br />'.'Ligne n° : '. __LINE__ .'<br />'.'Fichier n° : '. __FILE__ .'<br /></p>';return $message;}// On utilise la racine FTP pour rm$chemin_site_ancien = PAP_FTP_RACINE.GEN_CHEMIN_SITES.$ancien_code_alphnum.GEN_SEP;// Changement du niveau d'erreur pour éviter les Notices PHP dues à Net_FTPerror_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 Papyruserror_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 externeif ($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écessaireif ($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éfautif (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 siteif (!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 ftpif ((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_FTPerror_reporting(E_PARSE);$chemin_repertoire = PAP_FTP_RACINE.GEN_CHEMIN_SITES.$code_alpha_site_principal.'/';if ($code_alpha_site_principal!='') {$resultat = $objet_pear_ftp->rm($chemin_repertoire, true);if (PEAR::isError($resultat)) {$message = '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de supprimer le répertoire par ftp.<br />'.'Erreur ftp : '.$resultat->getMessage().'<br />'.'Répertoire : '. $chemin_repertoire .'<br />'.'Ligne n° : '. __LINE__ .'<br />'.'Fichier n° : '. __FILE__ .'<br /></p>';return $message;}}$objet_pear_ftp->disconnect();// Retour au niveau d'erreur définit dans le fichier de config de Papyruserror_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.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 & dans les urls du formulaire.** Revision 1.20 2005/03/08 11:17:47 jpm* Suppression de l'inclusion d'un fichier inutile.** Revision 1.19 2005/02/28 11:07:00 jpm* Modification des auteurs.** Revision 1.18 2005/02/28 10:59:07 jpm* Modification des commentaires et copyright.** Revision 1.17 2005/02/17 17:51:11 florian* Correction bug FTP** Revision 1.16 2005/02/17 16:44:55 florian* correction du bug sur les sites par défaut** Revision 1.15 2005/01/04 19:52:50 alex* correction de bug de copie de répertoire récursif de PEAR.** Revision 1.14 2004/12/03 19:22:53 jpm* Gestion des types de sites externes gérés par Papyrus.** Revision 1.13 2004/12/03 16:37:34 jpm* Correction d'un bogue qui empécher la mise à jour des url des sites externes.** Revision 1.12 2004/12/01 17:22:58 jpm* Ajout d'une confirmation javascript pour la suppression d'un site.** Revision 1.11 2004/11/30 16:43:51 jpm* Correction de bogues.** Revision 1.10 2004/11/29 17:05:28 jpm* Correction d'un bogue concernat les cases à cocher.** Revision 1.9 2004/11/26 13:13:51 jpm* Mise en commentaire de variable passée dans un message d'erreur car elles semblent provoquer un bogue et ne sont pas obligatoire.** Revision 1.8 2004/11/03 17:59:59 jpm* Corrections bogues erreurs variable inconnue.** Revision 1.7 2004/10/26 18:41:28 jpm* Gestion des sites externes à Papyrus.** Revision 1.6 2004/10/22 17:25:31 jpm* Changement du nom de la class CSS d'erreur.** Revision 1.5 2004/10/19 15:57:55 jpm* Amélioration de la gestion des fichiers sur le serveur.* Ajout d'une contrainte pour éviter la suppression par erreur du site par défaut.** Revision 1.4 2004/10/18 18:27:41 jpm* Correction problèmes FTP et manipulation de fichiers.** Revision 1.3 2004/09/23 16:51:27 jpm* Ajout d'informations supplémentaires sur les messages d'erreur.** Revision 1.2 2004/07/06 17:08:01 jpm* Modification de la documentation pour une mailleur analyse par PhpDocumentor.** Revision 1.1 2004/06/16 14:28:46 jpm* Changement de nom de Génésia en Papyrus.* Changement de l'arborescence.** Revision 1.20 2004/05/10 14:32:14 jpm* Changement du titre.** Revision 1.19 2004/05/10 12:23:39 jpm* Modification formulaire.** Revision 1.18 2004/05/07 16:33:53 jpm* Amélioration des formulaires.** Revision 1.17 2004/05/07 07:22:51 jpm* Ajout de la gestion des modification et suppression de site.* Amélioration de la création des sites.** Revision 1.16 2004/04/30 16:22:53 jpm* Poursuite de l'administration des sites.** Revision 1.14 2004/04/02 15:58:39 jpm* Modification fonction liste des projets.** Revision 1.13 2004/04/01 11:21:41 jpm* Ajout et modification de commentaires pour PhpDocumentor.** Revision 1.12 2004/03/24 20:01:02 jpm* Traduction, mise en forme, ajout de commentaire pour les fonctions listProjects() et updateProject().** Revision 1.11 2004/03/24 10:06:01 jpm* Ajout des commentaires d'entête.* Début mise en conformité avec la convention de codage.* Début traitement de la fonction listant les projets.***/?>