Subversion Repositories Applications.papyrus

Rev

Rev 75 | Rev 115 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
6 jpm 1
<?php
2
/*vim: set expandtab tabstop=4 shiftwidth=4: */
3
// +------------------------------------------------------------------------------------------------------+
4
// | PHP version 4.1                                                                                      |
5
// +------------------------------------------------------------------------------------------------------+
6
// | Copyright (C) 2001 Laurent COUDOUNEAU (lc@gsite.org)                                                 |
7
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org)                                         |
8
// +------------------------------------------------------------------------------------------------------+
9
// | This library is free software; you can redistribute it and/or                                        |
10
// | modify it under the terms of the GNU Lesser General Public                                           |
11
// | License as published by the Free Software Foundation; either                                         |
12
// | version 2.1 of the License, or (at your option) any later version.                                   |
13
// |                                                                                                      |
14
// | This library is distributed in the hope that it will be useful,                                      |
15
// | but WITHOUT ANY WARRANTY; without even the implied warranty of                                       |
16
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU                                    |
17
// | Lesser General Public License for more details.                                                      |
18
// |                                                                                                      |
19
// | You should have received a copy of the GNU Lesser General Public                                     |
20
// | License along with this library; if not, write to the Free Software                                  |
21
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                            |
22
// +------------------------------------------------------------------------------------------------------+
96 jpm 23
// CVS : $Id: adsi_site.fonct.php,v 1.6 2004-10-22 17:25:31 jpm Exp $
6 jpm 24
/**
25
* Bibliothèque de fonctions d'admininistration des projets
26
*
27
* Contient un ensemble de fonctions permettant à l'application Administrateur de Papyrus, de modifier des informations
28
* sur les projets (=sites gérés par Papyrus).
29
*
25 jpm 30
*@package Admin_site
6 jpm 31
*@subpackage Fonctions
32
//Auteur original :
33
*@author        Laurent COUDOUNEAU <lc@gsite.org>
34
//Autres auteurs :
35
*@author        Alexandre GRANIER <alexandre@tela-botanica.org>
36
*@author        Jean-Pascal MILCENT <jpm@tela-botanica.org>
37
*@copyright     Tela-Botanica 2000-2004
96 jpm 38
*@version       $Revision: 1.6 $ $Date: 2004-10-22 17:25:31 $
6 jpm 39
// +------------------------------------------------------------------------------------------------------+
40
*/
41
 
42
// +------------------------------------------------------------------------------------------------------+
43
// |                                            ENTÊTE du PROGRAMME                                       |
44
// +------------------------------------------------------------------------------------------------------+
45
 
46
/** Inclusion de la classe Formulaire.
47
* Elle permet la création rapide de formulaire basé sur les tables Mysql.
48
*/
49
require_once ADSI_CHEMIN_BIBLIOTHEQUE_API.'formulaire_1.0/FORM_Form.class.php';
75 jpm 50
if (GEN_FTP_UTILISE) {
72 jpm 51
    /** Inclusion bibliothèque de PEAR gérant le FTP.*/
52
    require_once ADSI_CHEMIN_BIBLIOTHEQUE_PEAR.'Net/FTP.php';
53
}
6 jpm 54
 
55
// +------------------------------------------------------------------------------------------------------+
56
// |                                            CORPS du PROGRAMME                                        |
57
// +------------------------------------------------------------------------------------------------------+
58
/** Fonction ADMIN_afficherListeSites()- Génére le xhtml permettant de choisir un site parmis une liste.
59
*
60
* Cette fonction fournie une liste des sites principaux gérés par Génésia.
61
*
62
* @param  string   l'objet Pear DB.
63
* @param  string   l'url de la page à laquelle renvoyer le formulaire.
64
* @param  string   un message important à destination de l'utilisateur.
65
* return  string   le code XHTML à retourner.
66
*/
67
function ADMIN_afficherFormListeSites($db, $url, $message = '')
68
{
69
    // Liste des sites principaux
70
    $requete =  'SELECT * '.
71
                'FROM gen_site, gen_site_relation '.
72
                'WHERE gsr_id_site_01 = gsr_id_site_02 '.
73
                'AND gsr_id_valeur = 102 '.
74
                'AND gsr_id_site_01 = gs_id_site '.
75
                'ORDER BY gsr_ordre';
76
 
77
    $resultat = $db->query($requete);
78
    (DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;
79
 
80
    //----------------------------------------------------------------------------
81
    // Création du formulaire
82
    $form =& new HTML_QuickForm('form_sites', 'post', $url);
83
    $tab_index = 1000;
84
    $squelette =& $form->defaultRenderer();
85
    $squelette->setFormTemplate("\n".'<form{attributes}>'."\n".'{content}'."\n".'</form>'."\n");
86
    $squelette->setElementTemplate( '<li>'."\n".'{label}'."\n".'{element}'."\n".
87
                                    '<!-- BEGIN required --><span class="symbole_obligatoire">*</span><!-- END required -->'."\n".
88
                                    '<!-- BEGIN error --><span class="erreur">{error}</span><!-- END error -->'."\n".
89
                                    '</li>'."\n");
90
    $squelette->setRequiredNoteTemplate("\n".'<p>'."\n".'<span class="symbole_obligatoire">*</span> {requiredNote}'."\n".'</p>'."\n");
91
 
92
    $partie_site_debut =    '<fieldset>'."\n".
93
                            '<legend>Listes des sites</legend>'."\n".
94
                            '<ul>'."\n";
95
    $form->addElement('html', $partie_site_debut);
96
 
97
    $aso_options = array();
98
    while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
99
        $aso_options[$ligne->gs_id_site] = htmlentities($ligne->gs_nom.' ('.$ligne->gs_code_alpha.')');
100
    }
101
    $resultat->free();
102
    $id = 'form_sites_id_site';
103
    $aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++);
104
    $label = '<label for="'.$id.'">'.'Listes des sites : '.'</label>';
105
    $form->addElement('select', $id, $label, $aso_options, $aso_attributs);
106
 
107
    $partie_site_fin =  '</ul>'."\n".
108
                        '</fieldset>'."\n";
109
    $form->addElement('html', $partie_site_fin);
110
 
111
    $liste_bouton_debut = '<ul class="liste_bouton">'."\n";
112
    $form->addElement('html', $liste_bouton_debut);
113
 
114
    $form->addElement('submit', 'form_sites_ajouter', 'Ajouter');
115
    $form->addElement('submit', 'form_sites_modifier', 'Modifier');
116
    $form->addElement('submit', 'form_sites_supprimer', 'Supprimer');
117
 
118
    $liste_bouton_fin = '</ul>'."\n";
119
    $form->addElement('html', $liste_bouton_fin);
120
 
121
    $sortie = $form->toHTML()."\n";
122
 
123
    // Titre de la page:
124
    $titre = 'Configuration des sites';
125
 
126
    // Construction de la page.
127
    return ADMIN_contruirePage($titre, $sortie, $message);
128
}
129
 
130
/** Fonction ADMIN_validerFormListesSites() - Valide les données issues du formulaire de liste de sites.
131
*
132
* Cette fonction valide les données du formulaire de liste de site.
133
*
134
* @param  string   l'objet pear de connexion à la base de données.
135
* @param  string   le tableau contenant les valeurs du formulaire.
136
* @return string   retourne les messages d'erreurs sinon rien.
137
*/
138
function ADMIN_validerFormListesSites($db, $aso_valeurs)
139
{
140
    $message = '';
141
 
142
    // Validation des données du formulaire
143
    if (empty($aso_valeurs['form_sites_id_site'])) {
96 jpm 144
        $message .= '<p class="pap_erreur">Vous devez d\'abord sélectionner un site.</p>';
6 jpm 145
    }
146
 
147
    return $message;
148
}
149
 
150
/** Fonction ADMIN_afficherFormSite()- Génére un formulaire pour gen_site.
151
*
152
* Cette fonction retourne un formulaire pour modification ou pour ajout.
153
*
154
* @param  string   l'objet pear de connexion à la base de données.
155
* @param  string   l'url à laquelle renvoyer le formulaire.
156
* @param  string   le tableau contenant les valeurs du formulaire.
157
* @param  string   un message à destination de l'utilisateur.
158
* return  string   le code XHTML à retourner.
159
*/
160
function ADMIN_afficherFormSite($db, $url, $aso_valeurs = array(), $message = '')
161
{
162
 
163
    // Nous cherchons à savoir si nous somme en modification
164
    $aso_valeurs['modification'] = false;
165
    if (isset($aso_valeurs['form_sites_modifier'])) {
166
        // Requete pour récupérer les informations sur le site à modifier
167
        $requete =  'SELECT * '.
168
                    'FROM gen_site '.
169
                    'WHERE gs_id_site = '.$aso_valeurs['form_sites_id_site'];
170
        $resultat = $db->query($requete);
171
        if (DB::isError($resultat)) {
172
            die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
173
        }
174
        $aso_valeurs = $resultat->fetchRow(DB_FETCHMODE_ASSOC);
175
        $aso_valeurs['modification'] = true;
176
    } else if (isset($aso_valeurs['gs_id_site'])) {
177
        $aso_valeurs['modification'] = true;
178
    }
179
 
180
    //----------------------------------------------------------------------------
181
    // Création du formulaire
182
    $form =& new HTML_QuickForm('site', 'post', $url);
183
    $tab_index = 1000;
184
    $squelette =& $form->defaultRenderer();
185
    $squelette->setFormTemplate("\n".'<form{attributes}>'."\n".'{content}'."\n".'</form>'."\n");
186
    $squelette->setElementTemplate(  '<li>'."\n".
187
                                    '{label}'."\n".
188
                                    '{element}'."\n".
189
                                    '<!-- BEGIN required --><span class="symbole_obligatoire">*</span><!-- END required -->'."\n".
190
                                    '<!-- BEGIN error --><span class="erreur">{error}</span><!-- END error -->'."\n".
191
                                    '</li>'."\n");
192
    $squelette->setRequiredNoteTemplate("\n".'<p><span class="symbole_obligatoire">*</span> {requiredNote}</p>'."\n");
193
 
194
    $partie_site_debut = '<fieldset>'."\n".'<legend>Configuration du site</legend>'."\n".'<ul>'."\n";
195
    $form->addElement('html', $partie_site_debut);
196
 
197
    if ($aso_valeurs['modification']) {
198
        $form->addElement('hidden', 'gs_id_site');
199
    }
200
 
201
    $id = 'gs_nom';
202
    $aso_attributs = array('id'=>$id, 'tabindex' => $tab_index++, 'size' => 45, 'maxlength' => 100, 'value' => 'nom du site');
203
    $label = '<label for="'.$id.'">'.'Nom du site : '.'</label>';
204
    $form->addElement('text', $id, $label, $aso_attributs);
205
    $form->addRule($id, 'Un nom est requis pour le site !', 'required', '', 'client');
206
 
207
    $id = 'gs_code_alpha';
208
    $aso_attributs = array('id'=>$id, 'tabindex' => $tab_index++, 'size' => 20, 'maxlength' => 20, 'value' => 'site_01');
209
    $label = '<label for="'.$id.'">'.'Code alphanumérique : '.'</label>';
210
    $form->addElement('text', $id, $label, $aso_attributs);
211
    $form->addRule('gs_code_alpha', 'Un code alphanumérique est requis pour le site !', 'required', '', 'client');
212
 
213
    $id = 'gs_code_num';
214
    $aso_attributs = array('id'=>$id, 'tabindex' => $tab_index++, 'size' => 20, 'maxlength' => 20, 'value' => 1);
215
    $label = '<label for="'.$id.'">'.'Code numérique : '.'</label>';
216
    $form->addElement('text', $id, $label, $aso_attributs);
217
    $form->addRule('gs_code_num', 'Un code numérique est requis pour le site !', 'required', '', 'client');
218
 
219
    $id = 'gs_raccourci_clavier';
220
    $aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => 1, 'maxlength' => 1, 'value' => 'Z');
221
    $label = '<label for="'.$id.'">'.'Raccourci clavier : '.'</label>';
222
    $form->addElement('text', $id, $label, $aso_attributs);
223
 
224
    $id = 'defaut';
225
    $aso_attributs = array('id'=>$id, 'tabindex' => $tab_index++);
226
    $label = '<label for="'.$id.'">'.'En faire le site par défaut : '.'</label>';
227
    $form->addElement('checkbox', $id, $label, '', $aso_attributs);
228
 
229
    // Requete pour connaitre les identifications dispo
230
    $requete =  'SELECT * '.
231
                'FROM gen_site_auth '.
232
                'WHERE gsa_id_auth != 0';
233
    $resultat = $db->query($requete) ;
234
    if (DB::isError($resultat)) {
235
        die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
236
    }
237
    $aso_options = array();
238
    while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT) ) {
239
        // Test pour connaître le type d'authentification.
240
        $type = '';
241
        if ($ligne->gsa_ce_type_auth == '1' ) {
242
            $type = 'Base de données';
243
        } else if ($ligne->gsa_ce_type_auth == '2' ) {
244
            $type = 'LDAP';
245
        }
246
        $aso_options[$ligne->gsa_id_auth] = $ligne->gsa_nom.' ('.$type.')';
247
    }
248
    $resultat->free();
249
    $id = 'gs_ce_auth';
250
    $aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++);
251
    $label = '<label for="'.$id.'">'.'Identification : '.'</label>';
252
    $form->addElement('select', $id, $label, $aso_options, $aso_attributs);
253
 
254
    // En modification nous affichons la liste des squelettes disponiblent dans
255
    // le dossier du site.
256
    if ($aso_valeurs['modification']) {
257
        $aso_options = array();
75 jpm 258
        if (!GEN_FTP_UTILISE) {
72 jpm 259
            $chemin_squelettes =    PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.
260
                                    $aso_valeurs['gs_ce_i18n'].GEN_SEP.GEN_DOSSIER_SQUELETTE.GEN_SEP;
261
            $dossier = opendir($chemin_squelettes);
262
            while(($fichier = readdir($dossier)) !== false) {
263
                if ($fichier != '.' && $fichier != '..') {
264
                    $chemin_type = $chemin_squelettes.GEN_SEP.$fichier;
265
                    if (filetype($chemin_type) != 'dir') {
266
                        $aso_options[$fichier] = $fichier;
267
                    }
268
                }
6 jpm 269
            }
72 jpm 270
        } else {
271
            // ouverture des squelettes présent dans le dossier du site
272
            // création de l'objet pear ftp
273
            $objet_pear_ftp = new Net_FTP(PAP_FTP_SERVEUR, PAP_FTP_PORT);
274
            // création de la connexion
275
            $ftp_conn = $objet_pear_ftp->connect(PAP_FTP_SERVEUR, PAP_FTP_PORT);
276
            // identification
277
            $ftp_login_result = $objet_pear_ftp->login(PAP_FTP_UTILISATEUR, PAP_FTP_MOT_DE_PASSE);
278
            // Gestion des erreurs ftp
279
            if ((PEAR::isError($ftp_conn) || PEAR::isError($ftp_login_result))) {
280
                die('ERREUR Génésia admin : impossible de se connecter par ftp.<br />'.
281
                    'Serveur : '. GEN_FTP_SERVEUR .'<br />'.
282
                    'Utilisateur : '. GEN_FTP_UTILISATEUR .'<br />'.
283
                    'Ligne n° : '. __LINE__ .'<br />'.
284
                    'Fichier n° : '. __FILE__ .'<br />'.
285
                    'Message erreur de connection : '.$ftp_conn->getMessage().'<br />'.
286
                    'Message erreur de login : '.$ftp_login_result->getMessage());
287
            }
288
            $chemin_squelettes =    PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.
289
                                    $aso_valeurs['gs_ce_i18n'].GEN_SEP.GEN_DOSSIER_SQUELETTE.GEN_SEP;
290
            $tab_squelettes = $objet_pear_ftp->ls($chemin_squelettes);
291
            $aso_options = array();
292
            for ($i = 0; $i < count($tab_squelettes) ; $i++) {
293
                if ($tab_squelettes[$i]['is_dir'] == false) {
294
                    $aso_options[$tab_squelettes[$i]['name']] = $tab_squelettes[$i]['name'];
295
                }
296
            }
297
            $objet_pear_ftp->disconnect();
6 jpm 298
        }
299
        $id = 'gs_fichier_squelette';
300
        $aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++);
301
        $label = '<label for="'.$id.'">'.'Squelette : '.'</label>';
302
        $form->addElement('select', $id, $label, $aso_options, $aso_attributs);
303
    }
304
 
305
    // Requete pour connaitre les internationalisation dispo
306
    $requete =  'SELECT * '.
307
                'FROM gen_i18n ';
308
    $resultat = $db->query($requete) ;
309
    if (DB::isError($resultat)) {
310
        die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
311
    }
312
    $aso_options = array();
313
    while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT) ) {
314
        $aso_options[$ligne->gi_id_i18n] = $ligne->gi_id_i18n;
315
    }
316
    $resultat->free();
317
    $id = 'gs_ce_i18n';
318
    $aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++);
319
    $label = '<label for="'.$id.'">'.'Langue : '.'</label>';
320
    $form->addElement('select', $id, $label, $aso_options, $aso_attributs);
321
 
322
    $partie_site_fin = '</ul>'."\n".'</fieldset>'."\n";
323
    $form->addElement('html', $partie_site_fin);
324
 
325
    $partie_entete_debut = '<fieldset>'."\n".'<legend>Entête par défaut des pages du site</legend>'."\n".'<ul>'."\n";
326
    $form->addElement('html', $partie_entete_debut);
327
 
328
    $id = 'gs_titre';
329
    $aso_attributs = array('id'=>$id, 'tabindex' => $tab_index++, 'size' => 45, 'maxlength' => 255, 'value' => 'titre du site');
330
    $label = '<label for="'.$id.'">'.'Titre du site : '.'</label>';
331
    $form->addElement('text', $id, $label, $aso_attributs);
332
    $form->addRule('gs_titre', 'Un titre est requis pour le site !', 'required', '', 'client');
333
 
334
    $id = 'gs_mots_cles';
335
    $aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'rows' => 3, 'cols' => 45);
336
    $label = '<label for="'.$id.'">'.'Mots-clés : '.'</label>';
337
    $zone_mots_cles = $form->createElement('textarea', $id, $label, $aso_attributs);
338
    $zone_mots_cles->setValue('mots-clés du site');
339
    $form->addElement($zone_mots_cles);
340
    $form->addRule($id, 'Des mots clés sont requis pour le site !', 'required', '', 'client');
341
 
342
    $id = 'gs_description';
343
    $aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'rows' => 3, 'cols' => 45);
344
    $label = '<label for="'.$id.'">'.'Description du contenu : '.'</label>';
345
    $zone = $form->createElement('textarea', $id, $label, $aso_attributs);
346
    $zone->setValue('description du site');
347
    $form->addElement($zone);
348
    $form->addRule($id, 'Une description est requise pour le site !', 'required', '', 'client');
349
 
350
    $id = 'gs_auteur';
351
    $aso_attributs = array('id'=>$id, 'tabindex' => $tab_index++, 'size' => 45, 'maxlength' => 255, 'value' => 'auteur du site');
352
    $label = '<label for="'.$id.'">'.'Auteur du site : '.'</label>';
353
    $form->addElement('text', $id, $label, $aso_attributs);
354
    $form->addRule('gs_auteur', 'Un auteur est requis pour le site !', 'required', '', 'client');
355
 
356
    $partie_entete_fin = '</ul>'."\n".'</fieldset>'."\n";
357
    $form->addElement('html', $partie_entete_fin);
358
 
359
    if ($aso_valeurs['modification']) {
360
        // Requete pour connaitre les informations sur l'administrateur ayant fait la dernière modif
361
        $requete_admin =    'SELECT * '.
362
                            'FROM gen_annuaire '.
363
                            'WHERE ga_id_administrateur = '.$aso_valeurs['gs_ce_admin'];
364
        $resultat_admin = $db->query($requete_admin);
365
        if (DB::isError($resultat_admin)) {
366
            die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_admin->getMessage(), $requete_admin));
367
        }
368
        $ligne_admin = $resultat_admin->fetchRow(DB_FETCHMODE_OBJECT);
369
        $info_admin =   '<p class="info">Dernière modification par'.$ligne_admin->ga_prenom.' '.$ligne_admin->ga_nom.
370
                        ' le '.$aso_valeurs['gs_date_creation'].'</p>';
371
        $form->addElement('html', $info_admin);
372
        $form->addElement('hidden', 'gs_ce_admin');
373
        $form->addElement('hidden', 'gs_date_creation');
374
 
375
        // Titre de la page:
376
        $titre = 'Modifier un site';
377
        // Bouton validant le formulaire
378
        $bouton_validation = '<input type="submit" id="site_modifier" name="site_modifier" value="Enregistrer" />';
379
    } else {
380
        // Titre de la page:
381
        $titre = 'Ajouter un site';
382
        // Bouton validant le formulaire
383
        $bouton_validation = '<input type="submit" id="site_enregistrer" name="site_enregistrer" value="Enregistrer" />';
384
    }
385
    $bouton_annuler =   '<input type="submit" id="form_annuler" name="form_annuler" value="Annuler" />';
386
    $bouton_effacer =   '<input type="reset" id="effacer" name="effacer" value="Effacer" />';
387
    $boutons =  '<p>'."\n".
388
                $bouton_validation."\n".
389
                $bouton_annuler."\n".
390
                $bouton_effacer."\n".
391
                '</p>'."\n";
392
    $form->addElement('html', $boutons);
393
 
394
    // Instanciation des valeurs par défaut du formulaire
395
    $form->setDefaults($aso_valeurs);
396
 
397
    // Javascript pour la validation côté client
398
    $regles_javascript = $form->getValidationScript();
399
    // Suppression des balises déjà créées par GEN_stockerCodeScript()
400
    $regles_javascript = ereg_replace ( '<script type="text\/javascript">', '', $regles_javascript);
401
    $regles_javascript = ereg_replace ( '<!--', '', $regles_javascript);
402
    $regles_javascript = ereg_replace ( '\/\/-->', '', $regles_javascript);
403
    $regles_javascript = ereg_replace ( '<\/script>', '', $regles_javascript);
404
    GEN_stockerCodeScript($regles_javascript);
405
 
406
    // Note de fin de formulaire
407
    $form->setRequiredNote('Indique les champs obligatoires');
408
    $sortie = $form->toHTML()."\n";
409
 
410
    // Construction de la page.
411
    return ADMIN_contruirePage($titre, $sortie, $message);
412
}
413
 
414
/** Fonction ADMIN_validerFormAjouterSite() - Valide les données issues du formulaire pour gen_site.
415
*
416
* Cette fonction valide les données à ajouter dans la table gen_site.
417
*
418
* @param  string   l'objet pear de connexion à la base de données.
419
* @param  string   le tableau contenant les valeurs du formulaire.
420
* @return string   retourne les messages d'erreurs sinon rien.
421
*/
422
function ADMIN_validerFormSite($db, $aso_valeurs)
423
{
424
    $message = '';
425
 
426
    // Validation des données du formulaire
427
    if (empty($aso_valeurs['gs_nom'])) {
96 jpm 428
        $message .= '<p class="pap_erreur">Le champ "Nom" ne doit pas être vide.</p>';
6 jpm 429
    }
430
    if (empty($aso_valeurs['gs_code_alpha'])) {
96 jpm 431
        $message .= '<p class="pap_erreur">Le champ "Code alphanumérique" ne doit pas être vide.</p>';
6 jpm 432
    }
75 jpm 433
    if ($aso_valeurs['gs_code_num'] == '') {
434
        // Note: ne pas utilisez empty() car si on veut saisir 0, cela est conscidéré comme vide!
96 jpm 435
        $message .= '<p class="pap_erreur">Le champ "Code numérique" ne doit pas être vide.</p>';
6 jpm 436
    }
437
    if (preg_match('/^[0-9]+$/',$aso_valeurs['gs_code_num']) == 0) {
96 jpm 438
        $message .= '<p class="pap_erreur">Le champ "Code numérique" doit contenir un nombre.</p>';
6 jpm 439
    }
440
 
441
    // Requete pour vérifier l'abscence du code numérique et alphanumérique de la table gen_site
442
    $requete =  'SELECT gs_code_alpha, gs_code_num '.
443
                'FROM gen_site, gen_site_relation '.
444
                'WHERE gsr_id_site_01 = gsr_id_site_02 '.
445
                'AND gsr_id_valeur = 102 '.// 102 = site "principal"
446
                'AND gsr_id_site_01 = gs_id_site ';
447
    $requete .= (isset($aso_valeurs['gs_id_site'])) ? 'AND gs_id_site != '.$aso_valeurs['gs_id_site'] : '';
448
 
449
    $resultat = $db->query($requete);
450
    if (DB::isError($resultat)) {
451
        die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
452
    }
453
 
454
    while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT) ) {
455
        if ($ligne->gs_code_num == $aso_valeurs['gs_code_num']) {
96 jpm 456
            $message .= '<p class="pap_erreur">La valeur "'.$aso_valeurs['gs_code_num'].'" pour le champ "Code numérique" existe déjà.</p>';
6 jpm 457
        }
458
        if ($ligne->gs_code_alpha == $aso_valeurs['gs_code_alpha']) {
96 jpm 459
            $message .= '<p class="pap_erreur">La valeur "'.$aso_valeurs['gs_code_alpha'].'" pour le champ "Code alphanumérique" existe déjà.</p>';
6 jpm 460
        }
461
    }
462
    $resultat->free();
463
 
464
    if (empty($aso_valeurs['gs_titre'])) {
96 jpm 465
        $message .= '<p class="pap_erreur">Le champ "Titre" ne doit pas être vide.</p>';
6 jpm 466
    }
467
    if (empty($aso_valeurs['gs_mots_cles'])) {
96 jpm 468
        $message .= '<p class="pap_erreur">Le champ "Mots clés" ne doit pas être vide.</p>';
6 jpm 469
    }
470
    if (empty($aso_valeurs['gs_description'])) {
96 jpm 471
        $message .= '<p class="pap_erreur">Le champ "Description" ne doit pas être vide.</p>';
6 jpm 472
    }
473
    if (empty($aso_valeurs['gs_auteur'])) {
96 jpm 474
        $message .= '<p class="pap_erreur">Le champ "Auteur" ne doit pas être vide.</p>';
6 jpm 475
    }
476
 
477
    return $message;
478
}
479
 
480
/** Fonction ADMIN_enregistrerSite() - Ajoute un site à Papyrus.
481
*
482
* Cette fonction ajoute le site à Papyrus, c'est à dire :
483
* - 1. Création des répertoire du projet en fonction du nom et des sous-répertoires.
484
* - 2. Insertion d'une ligne dans la table "gen_site".
485
* - 3. Insertion d'une ligne dans la table "gen_site_auth" et ses tables liées si nécessaire.
486
*
487
* @param  string   l'objet pear de connexion à la base de données.
488
* @param  string   le tableau contenant les valeurs du formulaire.
489
* @param  int      identifiant de l'administrateur réalisant cette création.
490
* @return string retourne un message en cas de succès ou d'échec.
491
*/
492
function ADMIN_enregistrerSite($db, $aso_valeurs, $id_admin)
493
{
494
    $id_site = SQL_obtenirNouveauId($db, 'gen_site','gs_id_site');
495
    if ($id_site == false) {
496
        $message = '<p class="erreur"> ERREUR Génésia admin : impossible de récupérer un identifiant pour la table gen_site.<br />'.
497
                    'Ligne n° : '. __LINE__ .'<br />'.
498
                    'Fichier n° : '. __FILE__ .'<br /></p>';
499
        return $message;
500
    }
501
    // Requete d'insertion des infos d'un site dans gen_site
502
    $requete =  'INSERT INTO gen_site '.
503
                'SET gs_id_site = '.$id_site.', '.
504
                'gs_ce_i18n = "'.$aso_valeurs['gs_ce_i18n'].'", '.
505
                'gs_ce_auth = '.$aso_valeurs['gs_ce_auth'].', '.
506
                'gs_fichier_squelette = "defaut.html", '.
507
                'gs_code_num = '.$aso_valeurs['gs_code_num'].', '.
508
                'gs_code_alpha = "'.$aso_valeurs['gs_code_alpha'].'", '.
509
                'gs_nom = "'.$aso_valeurs['gs_nom'].'", '.
510
                'gs_raccourci_clavier = "'.$aso_valeurs['gs_raccourci_clavier'].'", '.
511
                'gs_titre = "'.$aso_valeurs['gs_titre'].'", '.
512
                'gs_mots_cles = "'.$aso_valeurs['gs_mots_cles'].'", '.
513
                'gs_description = "'.$aso_valeurs['gs_description'].'", '.
514
                'gs_auteur = "'.$aso_valeurs['gs_auteur'].'", '.
515
                'gs_date_creation = "'.date('Y-m-d H:i:s').'", '.
516
                'gs_ce_admin = '.$id_admin;
517
    $resultat = $db->query($requete) ;
518
    if (DB::isError($resultat)) {
519
        die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
520
    }
521
 
522
    // Recherche du nouveau numéro d'ordre de ce site principal
523
    $requete =  'SELECT MAX(gsr_ordre) AS max_ordre '.
524
                'FROM gen_site_relation '.
525
                'WHERE gsr_id_site_01 = gsr_id_site_02 '.
526
                'AND gsr_id_valeur = 102 ';// 102 = site "principal"
527
    $resultat = $db->query($requete) ;
528
    if (DB::isError($resultat)) {
529
        die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
530
    }
531
    $ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
532
    $nouvel_ordre = $ligne->max_ordre + 1;
533
 
534
    // Requete d'insertion des relations dans gen_site_relation
535
    $requete =  'INSERT INTO gen_site_relation '.
536
                'SET gsr_id_site_01 = '.$id_site.', '.
537
                'gsr_id_site_02 = '.$id_site.', '.
538
                'gsr_id_valeur = 102, '.
539
                'gsr_ordre = '.$nouvel_ordre;
540
    $resultat = $db->query($requete);
541
    if (DB::isError($resultat)) {
542
        die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));
543
    }
544
 
545
    if (isset($aso_valeurs['defaut']) && $aso_valeurs['defaut'] == 1) {
546
        $ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
547
        $requete_supr_defaut =  'DELETE FROM gen_site_relation '.
548
                                'WHERE gsr_id_site_01 = gsr_id_site_02 '.
549
                                'AND gsr_id_valeur = 101 ';// 101 = site par "defaut"
550
        $resultat_supr_defaut = $db->query($requete_supr_defaut);
551
        if (DB::isError($resultat_supr_defaut)) {
552
            die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_supr_defaut->getMessage(), $requete_supr_defaut));
553
        }
554
 
555
        // Requete d'insertion de la relations site par défaut
556
        $requete =  'INSERT INTO gen_site_relation '.
557
                    'SET gsr_id_site_01 = '.$id_site.', '.
558
                    'gsr_id_site_02 = '.$id_site.', '.
559
                    'gsr_id_valeur = 101, '.
560
                    'gsr_ordre = NULL ';
561
        $resultat = $db->query($requete);
562
        if (DB::isError($resultat)) {
563
            die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));
564
        }
565
    }
72 jpm 566
    // Ajout des répertoires du site soit par manipulation de fichier soit par FTP en fonction de l'activation du safe_mode ou pas
75 jpm 567
    $tab_rep_langue = array(GEN_DOSSIER_GENERIQUE, $aso_valeurs['gs_ce_i18n']);
568
    $tab_rep_site = array(  GEN_DOSSIER_IMAGE,
569
                            GEN_DOSSIER_STYLE,
570
                            GEN_DOSSIER_SCRIPT,
571
                            GEN_DOSSIER_SQUELETTE,
572
                            GEN_DOSSIER_DOC);
573
    if (!GEN_FTP_UTILISE) {
574
        foreach ($tab_rep_langue as $nom_rep_langue) {
575
            foreach ($tab_rep_site as $nom_rep_site) {
576
                $chemin_repertoire =    PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.
577
                                        $nom_rep_langue.GEN_SEP.$nom_rep_site;
578
                $vieux_umask = umask(0);
579
                $resultat = creerDossier($chemin_repertoire, 0755, GEN_SEP);
580
                umask($vieux_umask);
581
                if ($resultat == false) {
96 jpm 582
                    $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de créer le répertoire.<br />'.
75 jpm 583
                                'Répertoire : '. $chemin_repertoire .'<br />'.
584
                                'Ligne n° : '. __LINE__ .'<br />'.
585
                                'Fichier n° : '. __FILE__ .'<br /></p>';
586
                    return $message;
587
                }
72 jpm 588
            }
589
        }
590
        $chemin_squelette_defaut =  PAP_CHEMIN_RACINE.GEN_CHEMIN_COMMUN.GEN_DOSSIER_GENERIQUE.GEN_SEP.
591
                                    GEN_DOSSIER_SQUELETTE.GEN_SEP.GEN_FICHIER_SQUELETTE;
592
        $chemin_squelette_site =    PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.
593
                                    $aso_valeurs['gs_ce_i18n'].GEN_SEP.GEN_DOSSIER_SQUELETTE.GEN_SEP.GEN_FICHIER_SQUELETTE;
594
        if (!copy($chemin_squelette_defaut, $chemin_squelette_site)) {
96 jpm 595
            $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de créer le fichier de squellete par défaut.<br />'.
75 jpm 596
                        'Fichier : '. $chemin_squelette_site .'<br />'.
6 jpm 597
                        'Ligne n° : '. __LINE__ .'<br />'.
598
                        'Fichier n° : '. __FILE__ .'<br /></p>';
599
            return $message;
600
        }
72 jpm 601
        $chemin_style_defaut =  PAP_CHEMIN_RACINE.GEN_CHEMIN_COMMUN.GEN_DOSSIER_GENERIQUE.GEN_SEP.
602
                                GEN_DOSSIER_STYLE.GEN_SEP.GEN_FICHIER_STYLE;
603
        $chemin_style_site =    PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.
604
                                $aso_valeurs['gs_ce_i18n'].GEN_SEP.GEN_DOSSIER_STYLE.GEN_SEP.GEN_FICHIER_STYLE;
605
        if (!copy($chemin_style_defaut, $chemin_style_site)) {
96 jpm 606
            $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de créer le fichier de style par défaut.<br />'.
75 jpm 607
                        'Fichier : '. $chemin_style_site .'<br />'.
72 jpm 608
                        'Ligne n° : '. __LINE__ .'<br />'.
609
                        'Fichier n° : '. __FILE__ .'<br /></p>';
6 jpm 610
            return $message;
72 jpm 611
        }
612
    } else {
613
        // Création d'une connection ftp avec Net_FTP de PEAR
614
        // voir http://pear.php.net/manual/fr/package.networking.net-ftp.php
615
 
616
        // création de l'objet pear ftp
617
        $objet_pear_ftp = new Net_FTP(PAP_FTP_SERVEUR, PAP_FTP_PORT);
618
        // création de la connexion
619
        $ftp_conn = $objet_pear_ftp->connect(PAP_FTP_SERVEUR, PAP_FTP_PORT);
620
        // identification
621
        $ftp_login_result = $objet_pear_ftp->login(PAP_FTP_UTILISATEUR, PAP_FTP_MOT_DE_PASSE);
622
        // Gestion des erreurs ftp
623
        if ((PEAR::isError($ftp_conn) || PEAR::isError($ftp_login_result))) {
624
            $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de se connecter par ftp.<br />'.
625
                        'Serveur : '. PAP_FTP_SERVEUR .'<br />'.
626
                        'Utilisateur : '. PAP_FTP_UTILISATEUR .'<br />'.
627
                        'Erreur connexion : '.$ftp_conn->getMessage().'<br />'.
628
                        'Erreur login : '.$ftp_login_result->getMessage().'<br />'.
629
                        'Ligne n° : '. __LINE__ .'<br />'.
630
                        'Fichier n° : '. __FILE__ .'<br /><p>';
6 jpm 631
            return $message;
72 jpm 632
        }
75 jpm 633
        foreach ($tab_rep_langue as $nom_rep_langue) {
634
            foreach ($tab_rep_site as $nom_rep_site) {
635
                $chemin_repertoire =    PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.
636
                                        $nom_rep_langue.GEN_SEP.$nom_rep_site.GEN_SEP;
637
                $resultat = $objet_pear_ftp->mkdir($chemin_repertoire, true) ;
638
                if (PEAR::isError($resultat)) {
639
                    $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de créer le répertoire par ftp.<br />'.
640
                                'Répertoire : '. $chemin_repertoire .'<br />'.
641
                                'Erreur origine : '. $resultat->getMessage() .'<br />'.
642
                                'Ligne n° : '. __LINE__ .'<br />'.
643
                                'Fichier n° : '. __FILE__ .'<br /></p>';
644
                    return $message;
645
                }
72 jpm 646
            }
647
        }
648
        $chemin_squelette_defaut =  PAP_CHEMIN_RACINE.GEN_CHEMIN_COMMUN.GEN_DOSSIER_GENERIQUE.GEN_SEP.
649
                                    GEN_DOSSIER_SQUELETTE.GEN_SEP.GEN_FICHIER_SQUELETTE;
650
        $chemin_squelette_site =    PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.
651
                                    $aso_valeurs['gs_ce_i18n'].GEN_SEP.GEN_DOSSIER_SQUELETTE.GEN_SEP.GEN_FICHIER_SQUELETTE;
652
        $resultat = $objet_pear_ftp->put($chemin_squelette_defaut, $chemin_squelette_site, true, FTP_BINARY);
653
        if (PEAR::isError($resultat)) {
654
            $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de copier le squelette defaut par ftp.<br />'.
655
                        'Fichier origine : '. $chemin_squelette_defaut .'<br />'.
656
                        'Fichier copié : '. $chemin_squelette_site .'<br />'.
657
                        'Erreur origine : '. $resultat->getMessage() .'<br />'.
658
                        'Ligne n° : '. __LINE__ .'<br />'.
659
                        'Fichier n° : '. __FILE__ .'<br /></p>';
660
                return $message;
661
        }
662
        $chemin_style_defaut =  PAP_CHEMIN_RACINE.GEN_CHEMIN_COMMUN.GEN_DOSSIER_GENERIQUE.GEN_SEP.
663
                                GEN_DOSSIER_STYLE.GEN_SEP.GEN_FICHIER_STYLE;
664
        $chemin_style_site =    PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.
665
                                $aso_valeurs['gs_ce_i18n'].GEN_SEP.GEN_DOSSIER_STYLE.GEN_SEP.GEN_FICHIER_STYLE;
666
        $resultat = $objet_pear_ftp->put($chemin_style_defaut, $chemin_style_site, true, FTP_BINARY);
667
        if (PEAR::isError($resultat)) {
668
            $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de copier les styles defaut par ftp.<br />'.
669
                        'Fichier origine : '. $chemin_style_defaut .'<br />'.
670
                        'Fichier copié : '. $chemin_style_site .'<br />'.
671
                        'Erreur origine : '. $resultat->getMessage() .'<br />'.
672
                        'Ligne n° : '. __LINE__ .'<br />'.
673
                        'Fichier n° : '. __FILE__ .'<br /></p>';
674
                return $message;
675
        }
676
        $objet_pear_ftp->disconnect();
6 jpm 677
    }
72 jpm 678
    $message = '<p class="pap_info">'.'Succés de l\'ajout du site.'.'</p>';
6 jpm 679
    return $message;
680
}
681
 
682
/** Fonction ADMIN_modifierSite() - Modifie un site de Papyrus.
683
*
684
* Cette fonction modifie un site géré par Papyrus.
685
* Il faudrait aussi pouvoir renomer le dossier du site si le code alpha change.
686
*
687
* @param  string   l'objet pear de connexion à la base de données.
688
* @param  string   le tableau contenant les valeurs du formulaire.
689
* @param  int      identifiant de l'administrateur réalisant cette modification.
690
* @return string retourne un message en cas de succès ou d'échec.
691
*/
692
function ADMIN_modifierSite($db, $aso_valeurs, $id_admin)
693
{
75 jpm 694
    // Récupération de l'ancien code alphanumérique
695
    $requete =  'SELECT gs_code_alpha '.
696
                'FROM gen_site '.
697
                'WHERE gs_id_site = '.$aso_valeurs['gs_id_site'];
698
    $ancien_code_alphnum = $db->getOne($requete);
699
    if (DB::isError($ancien_code_alphnum)) {
700
        die( BOG_afficherErreurSql(__FILE__, __LINE__, $ancien_code_alphnum->getMessage(), $requete) );
701
    }
702
    if ($aso_valeurs['gs_code_alpha'] != $ancien_code_alphnum) {
703
        if (!GEN_FTP_UTILISE) {
704
            $chemin_site_ancien = PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$ancien_code_alphnum.GEN_SEP;
705
            $chemin_site_nouveau = PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP;
706
            if (!rename($chemin_site_ancien, $chemin_site_nouveau)) {
707
                $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de changer le nom du dossier du site.<br />'.
708
                            'Ancien nom : '. $chemin_site_ancien .'<br />'.
709
                            'Nouveau nom : '. $chemin_site_nouveau .'<br />'.
710
                            'Ligne n° : '. __LINE__ .'<br />'.
711
                            'Fichier n° : '. __FILE__ .'<br /></p>';
712
                return $message;
713
            }
714
        } else {
715
            $chemin_site_ancien = PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$ancien_code_alphnum.GEN_SEP;
716
            $chemin_site_nouveau = PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP;
717
            // Création d'une connection ftp avec Net_FTP de PEAR
718
            // voir http://pear.php.net/manual/fr/package.networking.net-ftp.php
719
            // création de l'objet pear ftp
720
            $objet_pear_ftp = new Net_FTP(PAP_FTP_SERVEUR, PAP_FTP_PORT);
721
            // création de la connexion
722
            $ftp_conn = $objet_pear_ftp->connect(PAP_FTP_SERVEUR, PAP_FTP_PORT);
723
            // identification
724
            $ftp_login_result = $objet_pear_ftp->login(PAP_FTP_UTILISATEUR, PAP_FTP_MOT_DE_PASSE);
725
            // Gestion des erreurs ftp
726
            if ((PEAR::isError($ftp_conn) || PEAR::isError($ftp_login_result))) {
727
                $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de se connecter par ftp.<br />'.
728
                            'Serveur : '. PAP_FTP_SERVEUR .'<br />'.
729
                            'Utilisateur : '. PAP_FTP_UTILISATEUR .'<br />'.
730
                            'Erreur connexion : '.$ftp_conn->getMessage().'<br />'.
731
                            'Erreur login : '.$ftp_login_result->getMessage().'<br />'.
732
                            'Ligne n° : '. __LINE__ .'<br />'.
733
                            'Fichier n° : '. __FILE__ .'<br /><p>';
734
                return $message;
735
            }
736
            $resultat = $objet_pear_ftp->putRecursive($chemin_site_ancien, $chemin_site_nouveau, false, FTP_BINARY);
737
            if (PEAR::isError($resultat)) {
738
                $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de copier l\'ancien dossier du site.<br />'.
739
                            'Dossier site ancien : '. $chemin_site_ancien .'<br />'.
740
                            'Dossier site nouveau : '. $chemin_site_nouveau .'<br />'.
741
                            'Erreur origine : '. $resultat->getMessage() .'<br />'.
742
                            'Ligne n° : '. __LINE__ .'<br />'.
743
                            'Fichier n° : '. __FILE__ .'<br /></p>';
744
                    return $message;
745
            }
746
            // On utilise la racine FTP pour rm
747
            $chemin_site_ancien = PAP_FTP_RACINE.GEN_CHEMIN_SITES.$ancien_code_alphnum.GEN_SEP;
748
            // Changement du niveau d'erreur pour éviter les Notices PHP dues à Net_FTP
749
            error_reporting(E_PARSE);
750
            $resultat = $objet_pear_ftp->rm($chemin_site_ancien, true);
751
            if (PEAR::isError($resultat)) {
752
                $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de supprimer l\'ancien dossier du site.<br />'.
753
                            'Dossier site ancien : '. $chemin_site_ancien .'<br />'.
754
                            'Erreur origine : '. $resultat->getMessage() .'<br />'.
755
                            'Ligne n° : '. __LINE__ .'<br />'.
756
                            'Fichier n° : '. __FILE__ .'<br /></p>';
757
                    return $message;
758
            }
759
            // Retour au niveau d'erreur définit dans le fichier de config de Papyrus
760
            error_reporting(GEN_DEBOGAGE_NIVEAU);
761
            $objet_pear_ftp->disconnect();
762
        }
763
    }
6 jpm 764
    // Requete de mise à jour des infos d'un site dans gen_site
765
    $requete =  'UPDATE gen_site '.
766
                'SET gs_ce_i18n = "'.$aso_valeurs['gs_ce_i18n'].'", '.
767
                'gs_ce_auth = '.$aso_valeurs['gs_ce_auth'].', '.
768
                'gs_fichier_squelette = "'.$aso_valeurs['gs_fichier_squelette'].'", '.
769
                'gs_code_num = '.$aso_valeurs['gs_code_num'].', '.
770
                'gs_code_alpha = "'.$aso_valeurs['gs_code_alpha'].'", '.
771
                'gs_nom = "'.$aso_valeurs['gs_nom'].'", '.
772
                'gs_raccourci_clavier = "'.$aso_valeurs['gs_raccourci_clavier'].'", '.
773
                'gs_titre = "'.$aso_valeurs['gs_titre'].'", '.
774
                'gs_mots_cles = "'.$aso_valeurs['gs_mots_cles'].'", '.
775
                'gs_description = "'.$aso_valeurs['gs_description'].'", '.
776
                'gs_auteur = "'.$aso_valeurs['gs_auteur'].'", '.
777
                'gs_date_creation = "'.date('Y-m-d H:i:s').'", '.
778
                'gs_ce_admin = '.$id_admin.' '.
779
                'WHERE gs_id_site = '.$aso_valeurs['gs_id_site'];
780
    $resultat = $db->query($requete) ;
781
    if (DB::isError($resultat)) {
782
        die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
783
    }
784
 
785
    if (isset($aso_valeurs['defaut']) && $aso_valeurs['defaut'] == 1) {
786
        $requete_supr_defaut =  'DELETE FROM gen_site_relation '.
787
                                'WHERE gsr_id_site_01 = gsr_id_site_02 '.
788
                                'AND gsr_id_valeur = 101 ';// 101 = site par "defaut"
789
        $resultat_supr_defaut = $db->query($requete_supr_defaut);
790
        if (DB::isError($resultat_supr_defaut)) {
791
            die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_supr_defaut->getMessage(), $requete_supr_defaut));
792
        }
793
 
794
        // Requete d'insertion de la relations site par défaut
795
        $requete =  'INSERT INTO gen_site_relation '.
796
                    'SET gsr_id_site_01 = '.$aso_valeurs['gs_id_site'].', '.
797
                    'gsr_id_site_02 = '.$aso_valeurs['gs_id_site'].', '.
798
                    'gsr_id_valeur = 101, '.
799
                    'gsr_ordre = NULL ';
800
        $resultat = $db->query($requete);
801
        if (DB::isError($resultat)) {
802
            die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));
803
        }
804
    }
805
    $message = '<p class="genesia_info">'.'Succés de la modification du site.'.'</p>';
806
    return $message;
807
}
808
 
809
/** Fonction ADMIN_supprimerSite() - Ajoute un site à Papyrus.
810
*
811
* Cette fonction ajoute le site à Papyrus, c'est à dire :
812
* - 1. Création des répertoire du projet en fonction du nom et des sous-répertoires.
813
* - 2. Insertion d'une ligne dans la table "gen_site".
814
* - 3. Insertion d'une ligne dans la table "gen_site_auth" et ses tables liées si nécessaire.
815
*
816
* @param  string   l'objet pear de connexion à la base de données.
817
* @param  string   le tableau contenant les valeurs du formulaire.
818
* @param  int      identifiant de l'administrateur réalisant cette création.
819
* @return string retourne un message en cas de succès ou d'échec.
820
*/
821
function ADMIN_supprimerSite($db, $aso_valeurs)
822
{
823
    // Recherche du coda alpha du site principal afin de pouvoir détruire ses répertoires
824
    $requete =  'SELECT gs_code_alpha '.
825
                'FROM gen_site '.
826
                'WHERE gs_id_site = '.$aso_valeurs['form_sites_id_site'];
827
    $code_alpha_site_principal = $db->getOne($requete);
828
    if (DB::isError($code_alpha_site_principal)) {
829
        die(BOG_afficherErreurSql(__FILE__, __LINE__, $code_alpha_site_principal->getMessage(), $requete));
830
    }
831
 
75 jpm 832
    // Nous vérifions que le site n'a pas le code alphanum correspondant au site par défaut d'administration (admin).
833
    if ($code_alpha_site_principal == GEN_SITE_DEFAUT) {
834
        $message =  '<p class="pap_erreur">Si vous voulez vraiment supprimer le site d\'administration par défaut de '.
835
                    'Papyrus, veuillez commencer par changer la valeur de son code alphanumérique. Vous pourrez '.
836
                    'ensuite le supprimer via cette interface.</p>';
837
        return $message;
838
    }
839
 
6 jpm 840
    // Recherche des différents sites liés à celui que l'on veut détruire
841
    // Cela comprend le site à détruire lui méme car il posséde la relations
842
    // sur lui meme "site principale".
843
    $requete =  'SELECT gs_id_site '.
844
                'FROM gen_site, gen_site_relation '.
845
                'WHERE gsr_id_site_01 = '.$aso_valeurs['form_sites_id_site'].' '.
846
                'AND gsr_id_site_02 = gs_id_site ';
847
    $resultat = $db->query($requete);
848
    if (DB::isError($resultat)) {
849
        die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));
850
    }
851
 
852
    while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
853
        // Requete de suppression des sites liés dans gen_site
854
        $requete_supr_site =    'DELETE FROM gen_site '.
855
                                'WHERE gs_id_site = '.$ligne->gs_id_site;
856
        $resultat_supr_site = $db->query($requete_supr_site);
857
        if (DB::isError($resultat_supr_site)) {
858
            die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_supr_site->getMessage(), $requete_supr_site));
859
        }
860
 
861
        // Requete de suppression des relations des sites à détruire
862
        $requete_supr_site_relation =   'DELETE FROM gen_site_relation '.
863
                                        'WHERE gsr_id_site_01 = '.$ligne->gs_id_site;
864
        $resultat_supr_site_relation = $db->query($requete_supr_site_relation);
865
        if (DB::isError($resultat_supr_site_relation)) {
866
            die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_supr_site_relation->getMessage(), $requete_supr_site_relation));
867
        }
868
 
869
        // Recherche des différents menus liés au site à détruire
870
        $requete_menu = 'SELECT gm_id_menu '.
871
                        'FROM gen_menu '.
872
                        'WHERE gm_ce_site = '.$ligne->gs_id_site;
873
        $resultat_menu = $db->query($requete_menu) ;
874
        if (DB::isError($resultat_menu)) {
875
            die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_menu->getMessage(), $requete_menu));
876
        }
877
        while ($ligne_menu = $resultat_menu->fetchRow(DB_FETCHMODE_OBJECT)) {
878
            // Requete de suppression des des menus
879
            $requete_supr_menu =   'DELETE FROM gen_menu '.
880
                                            'WHERE gm_id_menu = '.$ligne_menu->gm_id_menu;
881
            $resultat_supr_menu = $db->query($requete_supr_menu);
882
            if (DB::isError($resultat_supr_menu)) {
883
                die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_supr_menu->getMessage(), $requete_supr_menu));
884
            }
885
            // Requete de suppression des relations des menus
886
            $requete_supr_menu_relation =   'DELETE FROM gen_menu_relation '.
887
                                            'WHERE gmr_id_menu_01 = '.$ligne_menu->gm_id_menu;
888
            $resultat_supr_menu_relation = $db->query($requete_supr_menu_relation);
889
            if (DB::isError($resultat_supr_menu_relation)) {
890
                die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_supr_menu_relation->getMessage(), $requete_supr_menu_relation));
891
            }
892
 
893
            // Requete de suppression des contenus des menus
894
            $requete_supr_menu_contenu =   'DELETE FROM gen_menu_contenu '.
895
                                            'WHERE gmc_ce_menu = '.$ligne_menu->gm_id_menu;
896
            $resultat_supr_menu_contenu = $db->query($requete_supr_menu_contenu);
897
            if (DB::isError($resultat_supr_menu_contenu)) {
898
                die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_supr_menu_contenu->getMessage(), $requete_supr_menu_contenu));
899
            }
900
 
901
            // Requete de suppression des ulr alternatives des menus
902
            $requete_supr_menu_url_alt =   'DELETE FROM gen_menu_url_alternative '.
903
                                            'WHERE gmua_ce_menu = '.$ligne_menu->gm_id_menu;
904
            $resultat_supr_menu_url_alt = $db->query($requete_supr_menu_url_alt);
905
            if (DB::isError($resultat_supr_menu_url_alt)) {
906
                die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_supr_menu_url_alt->getMessage(), $requete_supr_menu_url_alt));
907
            }
908
        }
909
        $resultat_menu->free();
910
    }
911
    $resultat->free();
912
 
913
    // Suppression des répertoires du site
75 jpm 914
    if (!GEN_FTP_UTILISE) {
72 jpm 915
        $chemin_repertoire = PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$code_alpha_site_principal;
916
        $resultat = supprimerDossier($chemin_repertoire, GEN_SEP);
917
        if (!$resultat) {
918
            $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de supprimer le répertoire.<br />'.
919
                        'Répertoire : '. $chemin_repertoire .'<br />'.
920
                        'Ligne n° : '. __LINE__ .'<br />'.
921
                        'Fichier n° : '. __FILE__ .'<br /></p>';
922
            return $message;
923
        }
924
    } else {
925
        // Création d'une connection ftp avec Net_FTP de PEAR
926
        // voir http://pear.php.net/manual/fr/package.networking.net-ftp.php
927
 
928
        // création de l'objet pear ftp
929
        $objet_pear_ftp = new Net_FTP(PAP_FTP_SERVEUR, PAP_FTP_PORT);
930
        // création de la connexion
931
        $ftp_conn = $objet_pear_ftp->connect(PAP_FTP_SERVEUR, PAP_FTP_PORT);
932
        // identification
75 jpm 933
        $ftp_login_result = $objet_pear_ftp->login(PAP_FTP_UTILISATEUR, PAP_FTP_MOT_DE_PASSE);
72 jpm 934
        // Gestion des erreurs ftp
935
        if ((PEAR::isError($ftp_conn) || PEAR::isError($ftp_login_result))) {
936
            $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de se connecter par ftp.<br />'.
937
                        'Erreur connexion : '.$ftp_conn->getMessage().'<br />'.
938
                        'Erreur login : '.$ftp_login_result->getMessage().'<br />'.
939
                        'Serveur : '. PAP_FTP_SERVEUR .'<br />'.
940
                        'Utilisateur : '. PAP_FTP_UTILISATEUR .'<br />'.
941
                        'Ligne n° : '. __LINE__ .'<br />'.
942
                        'Fichier n° : '. __FILE__ .'<br /><p>';
943
            return $message;
944
        }
945
        // Changement du niveau d'erreur pour éviter les Notices PHP dues à  Net_FTP
946
        error_reporting(E_PARSE);
947
        $chemin_repertoire = PAP_FTP_RACINE.GEN_CHEMIN_SITES.$code_alpha_site_principal.'/';
948
        $resultat = $objet_pear_ftp->rm($chemin_repertoire, true);
949
        if (PEAR::isError($resultat)) {
950
            $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de supprimer le répertoire par ftp.<br />'.
951
                        'Erreur ftp : '.$resultat->getMessage().'<br />'.
952
                        'Répertoire : '. $chemin_repertoire .'<br />'.
953
                        'Ligne n° : '. __LINE__ .'<br />'.
954
                        'Fichier n° : '. __FILE__ .'<br /></p>';
955
            return $message;
956
        }
957
        $objet_pear_ftp->disconnect();
958
        // Retour au niveau d'erreur définit dans le fichier de config de Papyrus
959
        error_reporting(GEN_DEBOGAGE_NIVEAU);
6 jpm 960
    }
72 jpm 961
    $message = '<p class="pap_info">Succés de la suppression du site.</p>';
6 jpm 962
    return $message;
963
}
964
 
965
// +- Fin du code source  --------------------------------------------------------------------------------+
966
/*
967
* $Log: not supported by cvs2svn $
96 jpm 968
* Revision 1.5  2004/10/19 15:57:55  jpm
969
* Amélioration de la gestion des fichiers sur le serveur.
970
* Ajout d'une contrainte pour éviter la suppression par erreur du site par défaut.
971
*
75 jpm 972
* Revision 1.4  2004/10/18 18:27:41  jpm
973
* Correction problèmes FTP et manipulation de fichiers.
974
*
72 jpm 975
* Revision 1.3  2004/09/23 16:51:27  jpm
976
* Ajout d'informations supplémentaires sur les messages d'erreur.
977
*
55 jpm 978
* Revision 1.2  2004/07/06 17:08:01  jpm
979
* Modification de la documentation pour une mailleur analyse par PhpDocumentor.
980
*
25 jpm 981
* Revision 1.1  2004/06/16 14:28:46  jpm
982
* Changement de nom de Génésia en Papyrus.
983
* Changement de l'arborescence.
984
*
6 jpm 985
* Revision 1.20  2004/05/10 14:32:14  jpm
986
* Changement du titre.
987
*
988
* Revision 1.19  2004/05/10 12:23:39  jpm
989
* Modification formulaire.
990
*
991
* Revision 1.18  2004/05/07 16:33:53  jpm
992
* Amélioration des formulaires.
993
*
994
* Revision 1.17  2004/05/07 07:22:51  jpm
995
* Ajout de la gestion des modification et suppression de site.
996
* Amélioration de la création des sites.
997
*
998
* Revision 1.16  2004/04/30 16:22:53  jpm
999
* Poursuite de l'administration des sites.
1000
*
1001
* Revision 1.14  2004/04/02 15:58:39  jpm
1002
* Modification fonction liste des projets.
1003
*
1004
* Revision 1.13  2004/04/01 11:21:41  jpm
1005
* Ajout et modification de commentaires pour PhpDocumentor.
1006
*
1007
* Revision 1.12  2004/03/24 20:01:02  jpm
1008
* Traduction, mise en forme, ajout de commentaire pour les fonctions listProjects() et updateProject().
1009
*
1010
* Revision 1.11  2004/03/24 10:06:01  jpm
1011
* Ajout des commentaires d'entête.
1012
* Début mise en conformité avec la convention de codage.
1013
* Début traitement de la fonction listant les projets.
1014
*
1015
*
1016
*/
1017
?>