Rev 25 | 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) 2001 Laurent COUDOUNEAU (lc@gsite.org) |
// | 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.1 2004-06-16 14:28:46 jpm 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 Administrateur de Sites
*@subpackage Fonctions
//Auteur original :
*@author Laurent COUDOUNEAU <lc@gsite.org>
//Autres auteurs :
*@author Alexandre GRANIER <alexandre@tela-botanica.org>
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.1 $ $Date: 2004-06-16 14:28:46 $
// +------------------------------------------------------------------------------------------------------+
*/
// +------------------------------------------------------------------------------------------------------+
// | ENTÊTE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
/** Inclusion de la classe Formulaire.
* Elle permet la création rapide de formulaire basé sur les tables Mysql.
*/
require_once ADSI_CHEMIN_BIBLIOTHEQUE_API.'formulaire_1.0/FORM_Form.class.php';
/** 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 = '')
{
// Liste des sites principaux
$requete = 'SELECT * '.
'FROM gen_site, gen_site_relation '.
'WHERE gsr_id_site_01 = gsr_id_site_02 '.
'AND gsr_id_valeur = 102 '.
'AND gsr_id_site_01 = gs_id_site '.
'ORDER BY gsr_ordre';
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;
//----------------------------------------------------------------------------
// Création du formulaire
$form =& new HTML_QuickForm('form_sites', 'post', $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();
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
$aso_options[$ligne->gs_id_site] = htmlentities($ligne->gs_nom.' ('.$ligne->gs_code_alpha.')');
}
$resultat->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);
$form->addElement('submit', 'form_sites_ajouter', 'Ajouter');
$form->addElement('submit', 'form_sites_modifier', 'Modifier');
$form->addElement('submit', 'form_sites_supprimer', 'Supprimer');
$liste_bouton_fin = '</ul>'."\n";
$form->addElement('html', $liste_bouton_fin);
$sortie = $form->toHTML()."\n";
// Titre de la page:
$titre = 'Configuration des sites';
// Construction de la page.
return ADMIN_contruirePage($titre, $sortie, $message);
}
/** Fonction ADMIN_validerFormListesSites() - Valide les données issues du formulaire de liste de sites.
*
* Cette fonction valide les données du formulaire de liste de site.
*
* @param string l'objet pear de connexion à la base de données.
* @param string le tableau contenant les valeurs du formulaire.
* @return string retourne les messages d'erreurs sinon rien.
*/
function ADMIN_validerFormListesSites($db, $aso_valeurs)
{
$message = '';
// Validation des données du formulaire
if (empty($aso_valeurs['form_sites_id_site'])) {
$message .= '<p class="genesia_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 = '')
{
// Nous cherchons à savoir si nous somme en modification
$aso_valeurs['modification'] = false;
if (isset($aso_valeurs['form_sites_modifier'])) {
// Requete pour récupérer les informations sur le site à modifier
$requete = 'SELECT * '.
'FROM gen_site '.
'WHERE gs_id_site = '.$aso_valeurs['form_sites_id_site'];
$resultat = $db->query($requete);
if (DB::isError($resultat)) {
die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
}
$aso_valeurs = $resultat->fetchRow(DB_FETCHMODE_ASSOC);
$aso_valeurs['modification'] = true;
} else if (isset($aso_valeurs['gs_id_site'])) {
$aso_valeurs['modification'] = true;
}
//----------------------------------------------------------------------------
// Création du formulaire
$form =& new HTML_QuickForm('site', 'post', $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><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']) {
$form->addElement('hidden', 'gs_id_site');
}
$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);
$id = 'defaut';
$aso_attributs = array('id'=>$id, 'tabindex' => $tab_index++);
$label = '<label for="'.$id.'">'.'En faire le site par défaut : '.'</label>';
$form->addElement('checkbox', $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>';
$form->addElement('select', $id, $label, $aso_options, $aso_attributs);
// En modification nous affichons la liste des squelettes disponiblent dans
// le dossier du site.
if ($aso_valeurs['modification']) {
// ouverture des squelettes présent dans le dossier du site
// création de l'objet pear ftp
$objet_pear_ftp = new Net_FTP(GEN_FTP_SERVEUR, GEN_FTP_PORT);
// création de la connexion
$ftp_conn = $objet_pear_ftp->connect(GEN_FTP_SERVEUR, GEN_FTP_PORT);
// identification
$ftp_login_result = $objet_pear_ftp->login(GEN_FTP_UTILISATEUR, GEN_FTP_MOT_DE_PASSE);;
// Gestion des erreurs ftp
if ((PEAR::isError($ftp_conn) || PEAR::isError($ftp_login_result))) {
die('ERREUR Génésia 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 />');
}
$chemin_squelettes = GEN_FTP_CHEMIN.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].'/'.$aso_valeurs['gs_ce_i18n'].'/'.GEN_DOSSIER_SQUELETTE.'/';
$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();
$id = 'gs_fichier_squelette';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++);
$label = '<label for="'.$id.'">'.'Squelette : '.'</label>';
$form->addElement('select', $id, $label, $aso_options, $aso_attributs);
}
// Requete pour connaitre les internationalisation dispo
$requete = 'SELECT * '.
'FROM gen_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);
$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' => 'titre du site');
$label = '<label for="'.$id.'">'.'Titre du 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']) {
// 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);
$info_admin = '<p class="info">Dernière modification par'.$ligne_admin->ga_prenom.' '.$ligne_admin->ga_nom.
' le '.$aso_valeurs['gs_date_creation'].'</p>';
$form->addElement('html', $info_admin);
$form->addElement('hidden', 'gs_ce_admin');
$form->addElement('hidden', 'gs_date_creation');
// Titre de la page:
$titre = 'Modifier un site';
// Bouton validant le formulaire
$bouton_validation = '<input type="submit" id="site_modifier" name="site_modifier" 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()
$regles_javascript = ereg_replace ( '<script type="text\/javascript">', '', $regles_javascript);
$regles_javascript = ereg_replace ( '<!--', '', $regles_javascript);
$regles_javascript = ereg_replace ( '\/\/-->', '', $regles_javascript);
$regles_javascript = ereg_replace ( '<\/script>', '', $regles_javascript);
GEN_stockerCodeScript($regles_javascript);
// Note de fin de formulaire
$form->setRequiredNote('Indique les champs obligatoires');
$sortie = $form->toHTML()."\n";
// Construction de la page.
return ADMIN_contruirePage($titre, $sortie, $message);
}
/** Fonction ADMIN_validerFormAjouterSite() - Valide les données issues du formulaire pour gen_site.
*
* Cette fonction valide les données à ajouter dans la table gen_site.
*
* @param string l'objet pear de connexion à la base de données.
* @param string le tableau contenant les valeurs du formulaire.
* @return string retourne les messages d'erreurs sinon rien.
*/
function ADMIN_validerFormSite($db, $aso_valeurs)
{
$message = '';
// Validation des données du formulaire
if (empty($aso_valeurs['gs_nom'])) {
$message .= '<p class="genesia_erreur">Le champ "Nom" ne doit pas être vide.</p>';
}
if (empty($aso_valeurs['gs_code_alpha'])) {
$message .= '<p class="genesia_erreur">Le champ "Code alphanumérique" ne doit pas être vide.</p>';
}
if (empty($aso_valeurs['gs_code_num'])) {
$message .= '<p class="genesia_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="genesia_erreur">Le champ "Code numérique" doit contenir un nombre.</p>';
}
// Requete pour vérifier l'abscence du code numérique et alphanumérique de la table gen_site
$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_valeur = 102 '.// 102 = site "principal"
'AND gsr_id_site_01 = gs_id_site ';
$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="genesia_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="genesia_erreur">La valeur "'.$aso_valeurs['gs_code_alpha'].'" pour le champ "Code alphanumérique" existe déjà.</p>';
}
}
$resultat->free();
if (empty($aso_valeurs['gs_titre'])) {
$message .= '<p class="genesia_erreur">Le champ "Titre" ne doit pas être vide.</p>';
}
if (empty($aso_valeurs['gs_mots_cles'])) {
$message .= '<p class="genesia_erreur">Le champ "Mots clés" ne doit pas être vide.</p>';
}
if (empty($aso_valeurs['gs_description'])) {
$message .= '<p class="genesia_erreur">Le champ "Description" ne doit pas être vide.</p>';
}
if (empty($aso_valeurs['gs_auteur'])) {
$message .= '<p class="genesia_erreur">Le champ "Auteur" ne doit pas être vide.</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)
{
$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;
}
// 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;
$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
$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 = 102 ';// 102 = site "principal"
$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 = 102, '.
'gsr_ordre = '.$nouvel_ordre;
$resultat = $db->query($requete);
if (DB::isError($resultat)) {
die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));
}
if (isset($aso_valeurs['defaut']) && $aso_valeurs['defaut'] == 1) {
$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
$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));
}
}
// Ajout des répertoires du site
// 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(GEN_FTP_SERVEUR, GEN_FTP_PORT);
// création de la connexion
$ftp_conn = $objet_pear_ftp->connect(GEN_FTP_SERVEUR, GEN_FTP_PORT);
// identification
$ftp_login_result = $objet_pear_ftp->login(GEN_FTP_UTILISATEUR, GEN_FTP_MOT_DE_PASSE);;
// Gestion des erreurs ftp
if ((PEAR::isError($ftp_conn) || PEAR::isError($ftp_login_result))) {
$message = '<p class="genesia_erreur"> ERREUR Génésia admin : impossible de se connecter par ftp.<br />'.
'Serveur : '. GEN_FTP_SERVEUR .'<br />'.
'Utilisateur : '. GEN_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;
}
$tableau_repertoires = array( GEN_DOSSIER_IMAGE,
GEN_DOSSIER_STYLE,
GEN_DOSSIER_SCRIPT,
GEN_DOSSIER_SQUELETTE,
GEN_DOSSIER_DOC);
foreach ($tableau_repertoires as $nom_repertoire) {
$chemin_repertoire = GEN_FTP_CHEMIN.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].'/'.$aso_valeurs['gs_ce_i18n'].'/'.$nom_repertoire.'/';
$resultat = $objet_pear_ftp->mkdir($chemin_repertoire, true) ;
if (PEAR::isError($resultat)) {
$message = '<p class="genesia_erreur"> ERREUR Génésia 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 = GEN_FTP_CHEMIN.GEN_CHEMIN_COMMUN.GEN_DOSSIER_GENERIQUE.'/'.GEN_DOSSIER_SQUELETTE.'/defaut.html';
$chemin_squelette_site = GEN_FTP_CHEMIN.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].'/'.$aso_valeurs['gs_ce_i18n'].'/'.GEN_DOSSIER_SQUELETTE.'/defaut.html';
$resultat = $objet_pear_ftp->put($chemin_squelette_defaut, $chemin_squelette_site, true, FTP_BINARY);
if (PEAR::isError($resultat)) {
$message = '<p class="genesia_erreur"> ERREUR Génésia 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 = GEN_FTP_CHEMIN.GEN_CHEMIN_COMMUN.GEN_DOSSIER_GENERIQUE.'/'.GEN_DOSSIER_STYLE.'/defaut.css';
$chemin_style_site = GEN_FTP_CHEMIN.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].'/'.$aso_valeurs['gs_ce_i18n'].'/'.GEN_DOSSIER_STYLE.'/defaut.css';
$resultat = $objet_pear_ftp->put($chemin_style_defaut, $chemin_style_site, true, FTP_BINARY);
if (PEAR::isError($resultat)) {
$message = '<p class="genesia_erreur"> ERREUR Génésia admin : impossible de copier le squelette 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();
$message = '<p class="genesia_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)
{
// 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 = "'.date('Y-m-d H:i:s').'", '.
'gs_ce_admin = '.$id_admin.' '.
'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) );
}
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="genesia_info">'.'Succés de la modification du site.'.'</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));
}
// 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
// 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(GEN_FTP_SERVEUR, GEN_FTP_PORT);
// création de la connexion
$ftp_conn = $objet_pear_ftp->connect(GEN_FTP_SERVEUR, GEN_FTP_PORT);
// identification
$ftp_login_result = $objet_pear_ftp->login(GEN_FTP_UTILISATEUR, GEN_FTP_MOT_DE_PASSE);;
// Gestion des erreurs ftp
if ((PEAR::isError($ftp_conn) || PEAR::isError($ftp_login_result))) {
$message = '<p class="genesia_erreur"> ERREUR Génésia admin : impossible de se connecter par ftp.<br />'.
'Erreur connexion : '.$ftp_conn->getMessage().'<br />'.
'Erreur login : '.$ftp_login_result->getMessage().'<br />'.
'Serveur : '. GEN_FTP_SERVEUR .'<br />'.
'Utilisateur : '. GEN_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 = GEN_FTP_CHEMIN.GEN_CHEMIN_SITES.$code_alpha_site_principal.'/';
$resultat = $objet_pear_ftp->rm($chemin_repertoire, true);
if (PEAR::isError($resultat)) {
$message = '<p class="genesia_erreur"> ERREUR Génésia 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="genesia_info">Succés de la suppression du site.</p>';
return $message;
}
// +- Fin du code source --------------------------------------------------------------------------------+
/*
* $Log: not supported by cvs2svn $
* 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.
*
*
*/
?>