Subversion Repositories Applications.papyrus

Rev

Rev 183 | Rev 198 | 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
// +------------------------------------------------------------------------------------------------------+
190 jpm 23
// CVS : $Id: adsi_site.fonct.php,v 1.10 2004-11-29 17:05:28 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
190 jpm 38
*@version       $Revision: 1.10 $ $Date: 2004-11-29 17:05:28 $
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_site_01 = gs_id_site '.
115 jpm 74
                'AND gsr_id_valeur IN (102, 103) '.
6 jpm 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'])) {
190 jpm 166
        $site_id = $aso_valeurs['form_sites_id_site'];
6 jpm 167
        // Requete pour récupérer les informations sur le site à modifier
168
        $requete =  'SELECT * '.
169
                    'FROM gen_site '.
190 jpm 170
                    'WHERE gs_id_site = '.$site_id;
6 jpm 171
        $resultat = $db->query($requete);
172
        if (DB::isError($resultat)) {
173
            die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
174
        }
175
        $aso_valeurs = $resultat->fetchRow(DB_FETCHMODE_ASSOC);
190 jpm 176
        $resultat->free();
177
 
178
        // Requete pour récupérer les informations issues des relations du site à modifier
179
        $requete =    'SELECT * '.
180
                        'FROM gen_site_relation '.
181
                        'WHERE gsr_id_site_01 = '.$site_id;
182
        $resultat = $db->query($requete);
183
        if (DB::isError($resultat)) {
184
            die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
185
        }
186
        $aso_valeurs['defaut'] = false;
187
        $aso_valeurs['externe'] = false;
188
        while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT) ) {
189
            if ($ligne->gsr_id_valeur == 101) {// 101 = site par défaut
190
                $aso_valeurs['defaut'] = true;
191
            }
192
            if ($ligne->gsr_id_valeur == 103) {// 103 = site externe à Papyrus
193
                $aso_valeurs['externe'] = true;
194
            }
195
        }
196
        $resultat->free();
197
 
6 jpm 198
        $aso_valeurs['modification'] = true;
199
    } else if (isset($aso_valeurs['gs_id_site'])) {
200
        $aso_valeurs['modification'] = true;
201
    }
190 jpm 202
    // Débogage :
203
    //$GLOBALS['_DEBOGAGE_'] .= '<pre>'.print_r($aso_valeurs, true).'</pre>';
6 jpm 204
 
205
    //----------------------------------------------------------------------------
206
    // Création du formulaire
207
    $form =& new HTML_QuickForm('site', 'post', $url);
208
    $tab_index = 1000;
209
    $squelette =& $form->defaultRenderer();
210
    $squelette->setFormTemplate("\n".'<form{attributes}>'."\n".'{content}'."\n".'</form>'."\n");
211
    $squelette->setElementTemplate(  '<li>'."\n".
212
                                    '{label}'."\n".
213
                                    '{element}'."\n".
214
                                    '<!-- BEGIN required --><span class="symbole_obligatoire">*</span><!-- END required -->'."\n".
215
                                    '<!-- BEGIN error --><span class="erreur">{error}</span><!-- END error -->'."\n".
216
                                    '</li>'."\n");
115 jpm 217
    $squelette->setGroupElementTemplate('{label}'."\n".
218
                                        '{element}'."\n".
219
                                        '<!-- BEGIN required --><span class="symbole_obligatoire">*</span><!-- END required -->'."\n".
220
                                        '&nbsp;'."\n"
221
                                        , 'double');
6 jpm 222
    $squelette->setRequiredNoteTemplate("\n".'<p><span class="symbole_obligatoire">*</span> {requiredNote}</p>'."\n");
223
 
224
    $partie_site_debut = '<fieldset>'."\n".'<legend>Configuration du site</legend>'."\n".'<ul>'."\n";
225
    $form->addElement('html', $partie_site_debut);
226
 
227
    if ($aso_valeurs['modification']) {
228
        $form->addElement('hidden', 'gs_id_site');
229
    }
230
 
231
    $id = 'gs_nom';
232
    $aso_attributs = array('id'=>$id, 'tabindex' => $tab_index++, 'size' => 45, 'maxlength' => 100, 'value' => 'nom du site');
233
    $label = '<label for="'.$id.'">'.'Nom du site : '.'</label>';
234
    $form->addElement('text', $id, $label, $aso_attributs);
235
    $form->addRule($id, 'Un nom est requis pour le site !', 'required', '', 'client');
236
 
237
    $id = 'gs_code_alpha';
238
    $aso_attributs = array('id'=>$id, 'tabindex' => $tab_index++, 'size' => 20, 'maxlength' => 20, 'value' => 'site_01');
239
    $label = '<label for="'.$id.'">'.'Code alphanumérique : '.'</label>';
240
    $form->addElement('text', $id, $label, $aso_attributs);
241
    $form->addRule('gs_code_alpha', 'Un code alphanumérique est requis pour le site !', 'required', '', 'client');
242
 
243
    $id = 'gs_code_num';
244
    $aso_attributs = array('id'=>$id, 'tabindex' => $tab_index++, 'size' => 20, 'maxlength' => 20, 'value' => 1);
245
    $label = '<label for="'.$id.'">'.'Code numérique : '.'</label>';
246
    $form->addElement('text', $id, $label, $aso_attributs);
247
    $form->addRule('gs_code_num', 'Un code numérique est requis pour le site !', 'required', '', 'client');
248
 
249
    $id = 'gs_raccourci_clavier';
250
    $aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => 1, 'maxlength' => 1, 'value' => 'Z');
251
    $label = '<label for="'.$id.'">'.'Raccourci clavier : '.'</label>';
252
    $form->addElement('text', $id, $label, $aso_attributs);
253
 
254
    // Requete pour connaitre les identifications dispo
255
    $requete =  'SELECT * '.
256
                'FROM gen_site_auth '.
257
                'WHERE gsa_id_auth != 0';
258
    $resultat = $db->query($requete) ;
259
    if (DB::isError($resultat)) {
260
        die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
261
    }
262
    $aso_options = array();
263
    while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT) ) {
264
        // Test pour connaître le type d'authentification.
265
        $type = '';
266
        if ($ligne->gsa_ce_type_auth == '1' ) {
267
            $type = 'Base de données';
268
        } else if ($ligne->gsa_ce_type_auth == '2' ) {
269
            $type = 'LDAP';
270
        }
271
        $aso_options[$ligne->gsa_id_auth] = $ligne->gsa_nom.' ('.$type.')';
272
    }
273
    $resultat->free();
274
    $id = 'gs_ce_auth';
275
    $aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++);
276
    $label = '<label for="'.$id.'">'.'Identification : '.'</label>';
277
    $form->addElement('select', $id, $label, $aso_options, $aso_attributs);
278
 
279
    // En modification nous affichons la liste des squelettes disponiblent dans
280
    // le dossier du site.
281
    if ($aso_valeurs['modification']) {
282
        $aso_options = array();
75 jpm 283
        if (!GEN_FTP_UTILISE) {
72 jpm 284
            $chemin_squelettes =    PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.
285
                                    $aso_valeurs['gs_ce_i18n'].GEN_SEP.GEN_DOSSIER_SQUELETTE.GEN_SEP;
286
            $dossier = opendir($chemin_squelettes);
287
            while(($fichier = readdir($dossier)) !== false) {
288
                if ($fichier != '.' && $fichier != '..') {
289
                    $chemin_type = $chemin_squelettes.GEN_SEP.$fichier;
290
                    if (filetype($chemin_type) != 'dir') {
291
                        $aso_options[$fichier] = $fichier;
292
                    }
293
                }
6 jpm 294
            }
72 jpm 295
        } else {
296
            // ouverture des squelettes présent dans le dossier du site
297
            // création de l'objet pear ftp
298
            $objet_pear_ftp = new Net_FTP(PAP_FTP_SERVEUR, PAP_FTP_PORT);
299
            // création de la connexion
300
            $ftp_conn = $objet_pear_ftp->connect(PAP_FTP_SERVEUR, PAP_FTP_PORT);
301
            // identification
302
            $ftp_login_result = $objet_pear_ftp->login(PAP_FTP_UTILISATEUR, PAP_FTP_MOT_DE_PASSE);
303
            // Gestion des erreurs ftp
304
            if ((PEAR::isError($ftp_conn) || PEAR::isError($ftp_login_result))) {
190 jpm 305
                die('ERREUR Papyrus admin : impossible de se connecter par ftp.<br />'.
72 jpm 306
                    'Serveur : '. GEN_FTP_SERVEUR .'<br />'.
307
                    'Utilisateur : '. GEN_FTP_UTILISATEUR .'<br />'.
308
                    'Ligne n° : '. __LINE__ .'<br />'.
183 jpm 309
                    'Fichier n° : '. __FILE__ .'<br />');
310
                    //'Message erreur de connection : '.$ftp_conn->getMessage().'<br />'.
311
                    //'Message erreur de login : '.$ftp_login_result->getMessage());
72 jpm 312
            }
313
            $chemin_squelettes =    PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.
314
                                    $aso_valeurs['gs_ce_i18n'].GEN_SEP.GEN_DOSSIER_SQUELETTE.GEN_SEP;
315
            $tab_squelettes = $objet_pear_ftp->ls($chemin_squelettes);
316
            $aso_options = array();
317
            for ($i = 0; $i < count($tab_squelettes) ; $i++) {
318
                if ($tab_squelettes[$i]['is_dir'] == false) {
319
                    $aso_options[$tab_squelettes[$i]['name']] = $tab_squelettes[$i]['name'];
320
                }
321
            }
322
            $objet_pear_ftp->disconnect();
6 jpm 323
        }
324
        $id = 'gs_fichier_squelette';
325
        $aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++);
326
        $label = '<label for="'.$id.'">'.'Squelette : '.'</label>';
327
        $form->addElement('select', $id, $label, $aso_options, $aso_attributs);
328
    }
329
 
330
    // Requete pour connaitre les internationalisation dispo
331
    $requete =  'SELECT * '.
332
                'FROM gen_i18n ';
333
    $resultat = $db->query($requete) ;
334
    if (DB::isError($resultat)) {
335
        die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
336
    }
337
    $aso_options = array();
338
    while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT) ) {
339
        $aso_options[$ligne->gi_id_i18n] = $ligne->gi_id_i18n;
340
    }
341
    $resultat->free();
342
    $id = 'gs_ce_i18n';
343
    $aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++);
344
    $label = '<label for="'.$id.'">'.'Langue : '.'</label>';
345
    $form->addElement('select', $id, $label, $aso_options, $aso_attributs);
346
 
115 jpm 347
    $id = 'defaut';
348
    $aso_attributs = array('id'=>$id, 'tabindex' => $tab_index++);
190 jpm 349
    if ($aso_valeurs[$id] === true) {
350
        $aso_attributs['checked'] = 'checked';
351
    }
115 jpm 352
    $label = '<label for="'.$id.'">'.'En faire le site par défaut : '.'</label>';
353
    $form->addElement('checkbox', $id, $label, '', $aso_attributs);
354
 
355
    // Groupe site externe
356
    $id = 'externe';
357
    $aso_attributs = array('id'=>$id, 'tabindex' => $tab_index++);
190 jpm 358
    if ($aso_valeurs[$id] === true) {
359
        $aso_attributs['checked'] = 'checked';
360
    }
115 jpm 361
    $label = 'oui : ';// Les navigateurs gères mal les labels au sein d'un même <li>
362
    $groupe[] =& HTML_QuickForm::createElement('checkbox', $id, $label, '', $aso_attributs);
363
 
364
    $id = 'gs_url';
365
    $aso_attributs = array('id'=>$id, 'tabindex' => $tab_index++,'size' => 45, 'maxlength' => 255, 'value' => 'http://');
366
    $label = 'url externe : ';// Les navigateurs gères mal les labels au sein d'un même <li>
367
    $groupe[] =& HTML_QuickForm::createElement('text', $id, $label, $aso_attributs);
368
 
369
    $label = '<label>'.'Le site n\'est pas géré par Papyrus : '.'</label>';
370
    $form->addGroup($groupe, 'double', $label, '', false);
371
 
6 jpm 372
    $partie_site_fin = '</ul>'."\n".'</fieldset>'."\n";
373
    $form->addElement('html', $partie_site_fin);
374
 
375
    $partie_entete_debut = '<fieldset>'."\n".'<legend>Entête par défaut des pages du site</legend>'."\n".'<ul>'."\n";
376
    $form->addElement('html', $partie_entete_debut);
377
 
378
    $id = 'gs_titre';
379
    $aso_attributs = array('id'=>$id, 'tabindex' => $tab_index++, 'size' => 45, 'maxlength' => 255, 'value' => 'titre du site');
380
    $label = '<label for="'.$id.'">'.'Titre du site : '.'</label>';
381
    $form->addElement('text', $id, $label, $aso_attributs);
382
    $form->addRule('gs_titre', 'Un titre est requis pour le site !', 'required', '', 'client');
383
 
384
    $id = 'gs_mots_cles';
385
    $aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'rows' => 3, 'cols' => 45);
386
    $label = '<label for="'.$id.'">'.'Mots-clés : '.'</label>';
387
    $zone_mots_cles = $form->createElement('textarea', $id, $label, $aso_attributs);
388
    $zone_mots_cles->setValue('mots-clés du site');
389
    $form->addElement($zone_mots_cles);
390
    $form->addRule($id, 'Des mots clés sont requis pour le site !', 'required', '', 'client');
391
 
392
    $id = 'gs_description';
393
    $aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'rows' => 3, 'cols' => 45);
394
    $label = '<label for="'.$id.'">'.'Description du contenu : '.'</label>';
395
    $zone = $form->createElement('textarea', $id, $label, $aso_attributs);
396
    $zone->setValue('description du site');
397
    $form->addElement($zone);
398
    $form->addRule($id, 'Une description est requise pour le site !', 'required', '', 'client');
399
 
400
    $id = 'gs_auteur';
401
    $aso_attributs = array('id'=>$id, 'tabindex' => $tab_index++, 'size' => 45, 'maxlength' => 255, 'value' => 'auteur du site');
402
    $label = '<label for="'.$id.'">'.'Auteur du site : '.'</label>';
403
    $form->addElement('text', $id, $label, $aso_attributs);
404
    $form->addRule('gs_auteur', 'Un auteur est requis pour le site !', 'required', '', 'client');
405
 
406
    $partie_entete_fin = '</ul>'."\n".'</fieldset>'."\n";
407
    $form->addElement('html', $partie_entete_fin);
408
 
409
    if ($aso_valeurs['modification']) {
410
        // Requete pour connaitre les informations sur l'administrateur ayant fait la dernière modif
411
        $requete_admin =    'SELECT * '.
412
                            'FROM gen_annuaire '.
413
                            'WHERE ga_id_administrateur = '.$aso_valeurs['gs_ce_admin'];
414
        $resultat_admin = $db->query($requete_admin);
415
        if (DB::isError($resultat_admin)) {
416
            die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_admin->getMessage(), $requete_admin));
417
        }
418
        $ligne_admin = $resultat_admin->fetchRow(DB_FETCHMODE_OBJECT);
419
        $info_admin =   '<p class="info">Dernière modification par'.$ligne_admin->ga_prenom.' '.$ligne_admin->ga_nom.
420
                        ' le '.$aso_valeurs['gs_date_creation'].'</p>';
421
        $form->addElement('html', $info_admin);
422
        $form->addElement('hidden', 'gs_ce_admin');
423
        $form->addElement('hidden', 'gs_date_creation');
424
 
425
        // Titre de la page:
426
        $titre = 'Modifier un site';
427
        // Bouton validant le formulaire
428
        $bouton_validation = '<input type="submit" id="site_modifier" name="site_modifier" value="Enregistrer" />';
429
    } else {
430
        // Titre de la page:
431
        $titre = 'Ajouter un site';
432
        // Bouton validant le formulaire
433
        $bouton_validation = '<input type="submit" id="site_enregistrer" name="site_enregistrer" value="Enregistrer" />';
434
    }
435
    $bouton_annuler =   '<input type="submit" id="form_annuler" name="form_annuler" value="Annuler" />';
436
    $bouton_effacer =   '<input type="reset" id="effacer" name="effacer" value="Effacer" />';
437
    $boutons =  '<p>'."\n".
438
                $bouton_validation."\n".
439
                $bouton_annuler."\n".
440
                $bouton_effacer."\n".
441
                '</p>'."\n";
442
    $form->addElement('html', $boutons);
443
 
444
    // Instanciation des valeurs par défaut du formulaire
445
    $form->setDefaults($aso_valeurs);
446
 
447
    // Javascript pour la validation côté client
448
    $regles_javascript = $form->getValidationScript();
449
    // Suppression des balises déjà créées par GEN_stockerCodeScript()
450
    $regles_javascript = ereg_replace ( '<script type="text\/javascript">', '', $regles_javascript);
451
    $regles_javascript = ereg_replace ( '<!--', '', $regles_javascript);
452
    $regles_javascript = ereg_replace ( '\/\/-->', '', $regles_javascript);
453
    $regles_javascript = ereg_replace ( '<\/script>', '', $regles_javascript);
454
    GEN_stockerCodeScript($regles_javascript);
455
 
456
    // Note de fin de formulaire
457
    $form->setRequiredNote('Indique les champs obligatoires');
458
    $sortie = $form->toHTML()."\n";
459
 
460
    // Construction de la page.
461
    return ADMIN_contruirePage($titre, $sortie, $message);
462
}
463
 
464
/** Fonction ADMIN_validerFormAjouterSite() - Valide les données issues du formulaire pour gen_site.
465
*
466
* Cette fonction valide les données à ajouter dans la table gen_site.
467
*
468
* @param  string   l'objet pear de connexion à la base de données.
469
* @param  string   le tableau contenant les valeurs du formulaire.
470
* @return string   retourne les messages d'erreurs sinon rien.
471
*/
472
function ADMIN_validerFormSite($db, $aso_valeurs)
473
{
474
    $message = '';
475
 
476
    // Validation des données du formulaire
477
    if (empty($aso_valeurs['gs_nom'])) {
96 jpm 478
        $message .= '<p class="pap_erreur">Le champ "Nom" ne doit pas être vide.</p>';
6 jpm 479
    }
480
    if (empty($aso_valeurs['gs_code_alpha'])) {
96 jpm 481
        $message .= '<p class="pap_erreur">Le champ "Code alphanumérique" ne doit pas être vide.</p>';
6 jpm 482
    }
75 jpm 483
    if ($aso_valeurs['gs_code_num'] == '') {
484
        // Note: ne pas utilisez empty() car si on veut saisir 0, cela est conscidéré comme vide!
96 jpm 485
        $message .= '<p class="pap_erreur">Le champ "Code numérique" ne doit pas être vide.</p>';
6 jpm 486
    }
487
    if (preg_match('/^[0-9]+$/',$aso_valeurs['gs_code_num']) == 0) {
96 jpm 488
        $message .= '<p class="pap_erreur">Le champ "Code numérique" doit contenir un nombre.</p>';
6 jpm 489
    }
490
 
491
    // Requete pour vérifier l'abscence du code numérique et alphanumérique de la table gen_site
492
    $requete =  'SELECT gs_code_alpha, gs_code_num '.
493
                'FROM gen_site, gen_site_relation '.
494
                'WHERE gsr_id_site_01 = gsr_id_site_02 '.
115 jpm 495
                'AND gsr_id_site_01 = gs_id_site '.
496
                'AND gsr_id_valeur IN (102, 103) ';// 102 = site "principal" et 103 = site "externe"
6 jpm 497
    $requete .= (isset($aso_valeurs['gs_id_site'])) ? 'AND gs_id_site != '.$aso_valeurs['gs_id_site'] : '';
498
 
499
    $resultat = $db->query($requete);
500
    if (DB::isError($resultat)) {
501
        die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
502
    }
503
 
504
    while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT) ) {
505
        if ($ligne->gs_code_num == $aso_valeurs['gs_code_num']) {
96 jpm 506
            $message .= '<p class="pap_erreur">La valeur "'.$aso_valeurs['gs_code_num'].'" pour le champ "Code numérique" existe déjà.</p>';
6 jpm 507
        }
508
        if ($ligne->gs_code_alpha == $aso_valeurs['gs_code_alpha']) {
96 jpm 509
            $message .= '<p class="pap_erreur">La valeur "'.$aso_valeurs['gs_code_alpha'].'" pour le champ "Code alphanumérique" existe déjà.</p>';
6 jpm 510
        }
511
    }
512
    $resultat->free();
513
 
514
    if (empty($aso_valeurs['gs_titre'])) {
96 jpm 515
        $message .= '<p class="pap_erreur">Le champ "Titre" ne doit pas être vide.</p>';
6 jpm 516
    }
517
    if (empty($aso_valeurs['gs_mots_cles'])) {
96 jpm 518
        $message .= '<p class="pap_erreur">Le champ "Mots clés" ne doit pas être vide.</p>';
6 jpm 519
    }
520
    if (empty($aso_valeurs['gs_description'])) {
96 jpm 521
        $message .= '<p class="pap_erreur">Le champ "Description" ne doit pas être vide.</p>';
6 jpm 522
    }
523
    if (empty($aso_valeurs['gs_auteur'])) {
96 jpm 524
        $message .= '<p class="pap_erreur">Le champ "Auteur" ne doit pas être vide.</p>';
6 jpm 525
    }
123 jpm 526
    if (isset($aso_valeurs['externe']) && $aso_valeurs['externe'] == 1 && (empty($aso_valeurs['gs_url']) || $aso_valeurs['gs_url'] == 'http://')) {
115 jpm 527
        $message .= '<p class="pap_erreur">'.'Vous avez désigné ce site comme étant externe. Il est nécessaire de saisir son URL!'.'</p>';
528
    }
123 jpm 529
    if (isset($aso_valeurs['externe']) && $aso_valeurs['externe'] == 0 && (!empty($aso_valeurs['gs_url']) && $aso_valeurs['gs_url'] != 'http://')) {
115 jpm 530
        $message .= '<p class="pap_erreur">'.'Vous avez saisie une l\'url : '.$aso_valeurs['gs_url'].'<br />'.
531
                    'Vous conscidérez donc ce site comme étant externe. Il est nécessaire de cocher la case "oui"!'.'</p>';
532
    }
6 jpm 533
    return $message;
534
}
535
 
536
/** Fonction ADMIN_enregistrerSite() - Ajoute un site à Papyrus.
537
*
538
* Cette fonction ajoute le site à Papyrus, c'est à dire :
539
* - 1. Création des répertoire du projet en fonction du nom et des sous-répertoires.
540
* - 2. Insertion d'une ligne dans la table "gen_site".
541
* - 3. Insertion d'une ligne dans la table "gen_site_auth" et ses tables liées si nécessaire.
542
*
543
* @param  string   l'objet pear de connexion à la base de données.
544
* @param  string   le tableau contenant les valeurs du formulaire.
545
* @param  int      identifiant de l'administrateur réalisant cette création.
546
* @return string retourne un message en cas de succès ou d'échec.
547
*/
548
function ADMIN_enregistrerSite($db, $aso_valeurs, $id_admin)
549
{
550
    $id_site = SQL_obtenirNouveauId($db, 'gen_site','gs_id_site');
551
    if ($id_site == false) {
552
        $message = '<p class="erreur"> ERREUR Génésia admin : impossible de récupérer un identifiant pour la table gen_site.<br />'.
553
                    'Ligne n° : '. __LINE__ .'<br />'.
554
                    'Fichier n° : '. __FILE__ .'<br /></p>';
555
        return $message;
556
    }
115 jpm 557
    // Nous vérifions si nous avons à faire à un site externe.
558
    $id_type_site = '102';// par défaut on conscidére que c'est un site "principal"
559
    $requete_complement = ', gs_url = NULL';
123 jpm 560
    if (isset($aso_valeurs['externe']) && $aso_valeurs['externe'] == 1 && !empty($aso_valeurs['gs_url']) && $aso_valeurs['gs_url'] != 'http://') {
115 jpm 561
        $requete_complement = ', gs_url = "'.$aso_valeurs['gs_url'].'"';
562
        $id_type_site = '103';// c'est un site "externe"
563
    }
564
 
6 jpm 565
    // Requete d'insertion des infos d'un site dans gen_site
566
    $requete =  'INSERT INTO gen_site '.
567
                'SET gs_id_site = '.$id_site.', '.
568
                'gs_ce_i18n = "'.$aso_valeurs['gs_ce_i18n'].'", '.
569
                'gs_ce_auth = '.$aso_valeurs['gs_ce_auth'].', '.
570
                'gs_fichier_squelette = "defaut.html", '.
571
                'gs_code_num = '.$aso_valeurs['gs_code_num'].', '.
572
                'gs_code_alpha = "'.$aso_valeurs['gs_code_alpha'].'", '.
573
                'gs_nom = "'.$aso_valeurs['gs_nom'].'", '.
574
                'gs_raccourci_clavier = "'.$aso_valeurs['gs_raccourci_clavier'].'", '.
575
                'gs_titre = "'.$aso_valeurs['gs_titre'].'", '.
576
                'gs_mots_cles = "'.$aso_valeurs['gs_mots_cles'].'", '.
577
                'gs_description = "'.$aso_valeurs['gs_description'].'", '.
578
                'gs_auteur = "'.$aso_valeurs['gs_auteur'].'", '.
579
                'gs_date_creation = "'.date('Y-m-d H:i:s').'", '.
115 jpm 580
                'gs_ce_admin = '.$id_admin.
581
                $requete_complement;
582
    $resultat = $db->query($requete);
6 jpm 583
    if (DB::isError($resultat)) {
584
        die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
585
    }
586
 
115 jpm 587
    // Recherche du nouveau numéro d'ordre de ce site "principal" ou "externe"
6 jpm 588
    $requete =  'SELECT MAX(gsr_ordre) AS max_ordre '.
589
                'FROM gen_site_relation '.
590
                'WHERE gsr_id_site_01 = gsr_id_site_02 '.
115 jpm 591
                'AND gsr_id_valeur IN (102, 103) ';// 102 = site "principal" et 103 = site "externe"
6 jpm 592
    $resultat = $db->query($requete) ;
593
    if (DB::isError($resultat)) {
594
        die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
595
    }
596
    $ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
597
    $nouvel_ordre = $ligne->max_ordre + 1;
598
 
599
    // Requete d'insertion des relations dans gen_site_relation
600
    $requete =  'INSERT INTO gen_site_relation '.
601
                'SET gsr_id_site_01 = '.$id_site.', '.
602
                'gsr_id_site_02 = '.$id_site.', '.
115 jpm 603
                'gsr_id_valeur = '.$id_type_site.', '.
6 jpm 604
                'gsr_ordre = '.$nouvel_ordre;
605
    $resultat = $db->query($requete);
606
    if (DB::isError($resultat)) {
607
        die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));
608
    }
609
 
115 jpm 610
    // Gestion du site par défaut
6 jpm 611
    if (isset($aso_valeurs['defaut']) && $aso_valeurs['defaut'] == 1) {
612
        $ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
613
        $requete_supr_defaut =  'DELETE FROM gen_site_relation '.
614
                                'WHERE gsr_id_site_01 = gsr_id_site_02 '.
615
                                'AND gsr_id_valeur = 101 ';// 101 = site par "defaut"
616
        $resultat_supr_defaut = $db->query($requete_supr_defaut);
617
        if (DB::isError($resultat_supr_defaut)) {
618
            die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_supr_defaut->getMessage(), $requete_supr_defaut));
619
        }
620
 
621
        // Requete d'insertion de la relations site par défaut
622
        $requete =  'INSERT INTO gen_site_relation '.
623
                    'SET gsr_id_site_01 = '.$id_site.', '.
624
                    'gsr_id_site_02 = '.$id_site.', '.
625
                    'gsr_id_valeur = 101, '.
626
                    'gsr_ordre = NULL ';
627
        $resultat = $db->query($requete);
628
        if (DB::isError($resultat)) {
629
            die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));
630
        }
631
    }
115 jpm 632
    // Ajout des répertoires des sites "principaux" soit par manipulation de fichier soit par FTP en fonction de la constante définie
633
    // par l'utilisateur dans le fichier de config avancée.
75 jpm 634
    $tab_rep_langue = array(GEN_DOSSIER_GENERIQUE, $aso_valeurs['gs_ce_i18n']);
635
    $tab_rep_site = array(  GEN_DOSSIER_IMAGE,
636
                            GEN_DOSSIER_STYLE,
637
                            GEN_DOSSIER_SCRIPT,
638
                            GEN_DOSSIER_SQUELETTE,
639
                            GEN_DOSSIER_DOC);
115 jpm 640
    if (!GEN_FTP_UTILISE && $id_type_site == '101') {
75 jpm 641
        foreach ($tab_rep_langue as $nom_rep_langue) {
642
            foreach ($tab_rep_site as $nom_rep_site) {
643
                $chemin_repertoire =    PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.
644
                                        $nom_rep_langue.GEN_SEP.$nom_rep_site;
645
                $vieux_umask = umask(0);
646
                $resultat = creerDossier($chemin_repertoire, 0755, GEN_SEP);
647
                umask($vieux_umask);
648
                if ($resultat == false) {
96 jpm 649
                    $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de créer le répertoire.<br />'.
75 jpm 650
                                'Répertoire : '. $chemin_repertoire .'<br />'.
651
                                'Ligne n° : '. __LINE__ .'<br />'.
652
                                'Fichier n° : '. __FILE__ .'<br /></p>';
653
                    return $message;
654
                }
72 jpm 655
            }
656
        }
657
        $chemin_squelette_defaut =  PAP_CHEMIN_RACINE.GEN_CHEMIN_COMMUN.GEN_DOSSIER_GENERIQUE.GEN_SEP.
658
                                    GEN_DOSSIER_SQUELETTE.GEN_SEP.GEN_FICHIER_SQUELETTE;
659
        $chemin_squelette_site =    PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.
660
                                    $aso_valeurs['gs_ce_i18n'].GEN_SEP.GEN_DOSSIER_SQUELETTE.GEN_SEP.GEN_FICHIER_SQUELETTE;
661
        if (!copy($chemin_squelette_defaut, $chemin_squelette_site)) {
96 jpm 662
            $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de créer le fichier de squellete par défaut.<br />'.
75 jpm 663
                        'Fichier : '. $chemin_squelette_site .'<br />'.
6 jpm 664
                        'Ligne n° : '. __LINE__ .'<br />'.
665
                        'Fichier n° : '. __FILE__ .'<br /></p>';
666
            return $message;
667
        }
72 jpm 668
        $chemin_style_defaut =  PAP_CHEMIN_RACINE.GEN_CHEMIN_COMMUN.GEN_DOSSIER_GENERIQUE.GEN_SEP.
669
                                GEN_DOSSIER_STYLE.GEN_SEP.GEN_FICHIER_STYLE;
670
        $chemin_style_site =    PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.
671
                                $aso_valeurs['gs_ce_i18n'].GEN_SEP.GEN_DOSSIER_STYLE.GEN_SEP.GEN_FICHIER_STYLE;
672
        if (!copy($chemin_style_defaut, $chemin_style_site)) {
96 jpm 673
            $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de créer le fichier de style par défaut.<br />'.
75 jpm 674
                        'Fichier : '. $chemin_style_site .'<br />'.
72 jpm 675
                        'Ligne n° : '. __LINE__ .'<br />'.
676
                        'Fichier n° : '. __FILE__ .'<br /></p>';
6 jpm 677
            return $message;
72 jpm 678
        }
115 jpm 679
    } else if (GEN_FTP_UTILISE && $id_type_site == '101') {
72 jpm 680
        // Création d'une connection ftp avec Net_FTP de PEAR
681
        // voir http://pear.php.net/manual/fr/package.networking.net-ftp.php
682
 
683
        // création de l'objet pear ftp
684
        $objet_pear_ftp = new Net_FTP(PAP_FTP_SERVEUR, PAP_FTP_PORT);
685
        // création de la connexion
686
        $ftp_conn = $objet_pear_ftp->connect(PAP_FTP_SERVEUR, PAP_FTP_PORT);
687
        // identification
688
        $ftp_login_result = $objet_pear_ftp->login(PAP_FTP_UTILISATEUR, PAP_FTP_MOT_DE_PASSE);
689
        // Gestion des erreurs ftp
690
        if ((PEAR::isError($ftp_conn) || PEAR::isError($ftp_login_result))) {
691
            $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de se connecter par ftp.<br />'.
692
                        'Serveur : '. PAP_FTP_SERVEUR .'<br />'.
693
                        'Utilisateur : '. PAP_FTP_UTILISATEUR .'<br />'.
694
                        'Erreur connexion : '.$ftp_conn->getMessage().'<br />'.
695
                        'Erreur login : '.$ftp_login_result->getMessage().'<br />'.
696
                        'Ligne n° : '. __LINE__ .'<br />'.
697
                        'Fichier n° : '. __FILE__ .'<br /><p>';
6 jpm 698
            return $message;
72 jpm 699
        }
75 jpm 700
        foreach ($tab_rep_langue as $nom_rep_langue) {
701
            foreach ($tab_rep_site as $nom_rep_site) {
702
                $chemin_repertoire =    PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.
703
                                        $nom_rep_langue.GEN_SEP.$nom_rep_site.GEN_SEP;
704
                $resultat = $objet_pear_ftp->mkdir($chemin_repertoire, true) ;
705
                if (PEAR::isError($resultat)) {
706
                    $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de créer le répertoire par ftp.<br />'.
707
                                'Répertoire : '. $chemin_repertoire .'<br />'.
708
                                'Erreur origine : '. $resultat->getMessage() .'<br />'.
709
                                'Ligne n° : '. __LINE__ .'<br />'.
710
                                'Fichier n° : '. __FILE__ .'<br /></p>';
711
                    return $message;
712
                }
72 jpm 713
            }
714
        }
715
        $chemin_squelette_defaut =  PAP_CHEMIN_RACINE.GEN_CHEMIN_COMMUN.GEN_DOSSIER_GENERIQUE.GEN_SEP.
716
                                    GEN_DOSSIER_SQUELETTE.GEN_SEP.GEN_FICHIER_SQUELETTE;
717
        $chemin_squelette_site =    PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.
718
                                    $aso_valeurs['gs_ce_i18n'].GEN_SEP.GEN_DOSSIER_SQUELETTE.GEN_SEP.GEN_FICHIER_SQUELETTE;
719
        $resultat = $objet_pear_ftp->put($chemin_squelette_defaut, $chemin_squelette_site, true, FTP_BINARY);
720
        if (PEAR::isError($resultat)) {
721
            $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de copier le squelette defaut par ftp.<br />'.
722
                        'Fichier origine : '. $chemin_squelette_defaut .'<br />'.
723
                        'Fichier copié : '. $chemin_squelette_site .'<br />'.
724
                        'Erreur origine : '. $resultat->getMessage() .'<br />'.
725
                        'Ligne n° : '. __LINE__ .'<br />'.
726
                        'Fichier n° : '. __FILE__ .'<br /></p>';
727
                return $message;
728
        }
729
        $chemin_style_defaut =  PAP_CHEMIN_RACINE.GEN_CHEMIN_COMMUN.GEN_DOSSIER_GENERIQUE.GEN_SEP.
730
                                GEN_DOSSIER_STYLE.GEN_SEP.GEN_FICHIER_STYLE;
731
        $chemin_style_site =    PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.
732
                                $aso_valeurs['gs_ce_i18n'].GEN_SEP.GEN_DOSSIER_STYLE.GEN_SEP.GEN_FICHIER_STYLE;
733
        $resultat = $objet_pear_ftp->put($chemin_style_defaut, $chemin_style_site, true, FTP_BINARY);
734
        if (PEAR::isError($resultat)) {
735
            $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de copier les styles defaut par ftp.<br />'.
736
                        'Fichier origine : '. $chemin_style_defaut .'<br />'.
737
                        'Fichier copié : '. $chemin_style_site .'<br />'.
738
                        'Erreur origine : '. $resultat->getMessage() .'<br />'.
739
                        'Ligne n° : '. __LINE__ .'<br />'.
740
                        'Fichier n° : '. __FILE__ .'<br /></p>';
741
                return $message;
742
        }
743
        $objet_pear_ftp->disconnect();
6 jpm 744
    }
72 jpm 745
    $message = '<p class="pap_info">'.'Succés de l\'ajout du site.'.'</p>';
6 jpm 746
    return $message;
747
}
748
 
749
/** Fonction ADMIN_modifierSite() - Modifie un site de Papyrus.
750
*
751
* Cette fonction modifie un site géré par Papyrus.
752
* Il faudrait aussi pouvoir renomer le dossier du site si le code alpha change.
753
*
754
* @param  string   l'objet pear de connexion à la base de données.
755
* @param  string   le tableau contenant les valeurs du formulaire.
756
* @param  int      identifiant de l'administrateur réalisant cette modification.
757
* @return string retourne un message en cas de succès ou d'échec.
758
*/
759
function ADMIN_modifierSite($db, $aso_valeurs, $id_admin)
760
{
75 jpm 761
    // Récupération de l'ancien code alphanumérique
762
    $requete =  'SELECT gs_code_alpha '.
763
                'FROM gen_site '.
764
                'WHERE gs_id_site = '.$aso_valeurs['gs_id_site'];
765
    $ancien_code_alphnum = $db->getOne($requete);
766
    if (DB::isError($ancien_code_alphnum)) {
767
        die( BOG_afficherErreurSql(__FILE__, __LINE__, $ancien_code_alphnum->getMessage(), $requete) );
768
    }
115 jpm 769
 
770
    // Nous vérifions si nous avons à faire à un site externe.
771
    $id_type_site = '102';// par défaut on conscidére que c'est un site "principal"
772
    $requete_complement = ', gs_url = NULL';
773
    if ($aso_valeurs['externe'] == 1 && !empty($aso_valeurs['gs_url']) && $aso_valeurs['gs_url'] != 'http://') {
774
        $requete_complement = ', gs_url = "'.$aso_valeurs['gs_url'].'"';
775
        $id_type_site = '103';// c'est un site "externe"
776
    }
777
 
778
    // Si le code alphanumérique à changé et que nous n'avons pas à faire à un site externe.
779
    if ($aso_valeurs['gs_code_alpha'] != $ancien_code_alphnum && $id_type_site == 102) {
75 jpm 780
        if (!GEN_FTP_UTILISE) {
781
            $chemin_site_ancien = PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$ancien_code_alphnum.GEN_SEP;
782
            $chemin_site_nouveau = PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP;
783
            if (!rename($chemin_site_ancien, $chemin_site_nouveau)) {
784
                $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de changer le nom du dossier du site.<br />'.
785
                            'Ancien nom : '. $chemin_site_ancien .'<br />'.
786
                            'Nouveau nom : '. $chemin_site_nouveau .'<br />'.
787
                            'Ligne n° : '. __LINE__ .'<br />'.
788
                            'Fichier n° : '. __FILE__ .'<br /></p>';
789
                return $message;
790
            }
791
        } else {
792
            $chemin_site_ancien = PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$ancien_code_alphnum.GEN_SEP;
793
            $chemin_site_nouveau = PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP;
794
            // Création d'une connection ftp avec Net_FTP de PEAR
795
            // voir http://pear.php.net/manual/fr/package.networking.net-ftp.php
796
            // création de l'objet pear ftp
797
            $objet_pear_ftp = new Net_FTP(PAP_FTP_SERVEUR, PAP_FTP_PORT);
798
            // création de la connexion
799
            $ftp_conn = $objet_pear_ftp->connect(PAP_FTP_SERVEUR, PAP_FTP_PORT);
800
            // identification
801
            $ftp_login_result = $objet_pear_ftp->login(PAP_FTP_UTILISATEUR, PAP_FTP_MOT_DE_PASSE);
802
            // Gestion des erreurs ftp
803
            if ((PEAR::isError($ftp_conn) || PEAR::isError($ftp_login_result))) {
804
                $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de se connecter par ftp.<br />'.
805
                            'Serveur : '. PAP_FTP_SERVEUR .'<br />'.
806
                            'Utilisateur : '. PAP_FTP_UTILISATEUR .'<br />'.
807
                            'Erreur connexion : '.$ftp_conn->getMessage().'<br />'.
808
                            'Erreur login : '.$ftp_login_result->getMessage().'<br />'.
809
                            'Ligne n° : '. __LINE__ .'<br />'.
810
                            'Fichier n° : '. __FILE__ .'<br /><p>';
811
                return $message;
812
            }
813
            $resultat = $objet_pear_ftp->putRecursive($chemin_site_ancien, $chemin_site_nouveau, false, FTP_BINARY);
814
            if (PEAR::isError($resultat)) {
815
                $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de copier l\'ancien dossier du site.<br />'.
816
                            'Dossier site ancien : '. $chemin_site_ancien .'<br />'.
817
                            'Dossier site nouveau : '. $chemin_site_nouveau .'<br />'.
818
                            'Erreur origine : '. $resultat->getMessage() .'<br />'.
819
                            'Ligne n° : '. __LINE__ .'<br />'.
820
                            'Fichier n° : '. __FILE__ .'<br /></p>';
821
                    return $message;
822
            }
823
            // On utilise la racine FTP pour rm
824
            $chemin_site_ancien = PAP_FTP_RACINE.GEN_CHEMIN_SITES.$ancien_code_alphnum.GEN_SEP;
825
            // Changement du niveau d'erreur pour éviter les Notices PHP dues à Net_FTP
826
            error_reporting(E_PARSE);
827
            $resultat = $objet_pear_ftp->rm($chemin_site_ancien, true);
828
            if (PEAR::isError($resultat)) {
829
                $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de supprimer l\'ancien dossier du site.<br />'.
830
                            'Dossier site ancien : '. $chemin_site_ancien .'<br />'.
831
                            'Erreur origine : '. $resultat->getMessage() .'<br />'.
832
                            'Ligne n° : '. __LINE__ .'<br />'.
833
                            'Fichier n° : '. __FILE__ .'<br /></p>';
834
                    return $message;
835
            }
836
            // Retour au niveau d'erreur définit dans le fichier de config de Papyrus
837
            error_reporting(GEN_DEBOGAGE_NIVEAU);
838
            $objet_pear_ftp->disconnect();
839
        }
840
    }
115 jpm 841
 
6 jpm 842
    // Requete de mise à jour des infos d'un site dans gen_site
843
    $requete =  'UPDATE gen_site '.
844
                'SET gs_ce_i18n = "'.$aso_valeurs['gs_ce_i18n'].'", '.
845
                'gs_ce_auth = '.$aso_valeurs['gs_ce_auth'].', '.
846
                'gs_fichier_squelette = "'.$aso_valeurs['gs_fichier_squelette'].'", '.
847
                'gs_code_num = '.$aso_valeurs['gs_code_num'].', '.
848
                'gs_code_alpha = "'.$aso_valeurs['gs_code_alpha'].'", '.
849
                'gs_nom = "'.$aso_valeurs['gs_nom'].'", '.
850
                'gs_raccourci_clavier = "'.$aso_valeurs['gs_raccourci_clavier'].'", '.
851
                'gs_titre = "'.$aso_valeurs['gs_titre'].'", '.
852
                'gs_mots_cles = "'.$aso_valeurs['gs_mots_cles'].'", '.
853
                'gs_description = "'.$aso_valeurs['gs_description'].'", '.
854
                'gs_auteur = "'.$aso_valeurs['gs_auteur'].'", '.
855
                'gs_date_creation = "'.date('Y-m-d H:i:s').'", '.
856
                'gs_ce_admin = '.$id_admin.' '.
857
                'WHERE gs_id_site = '.$aso_valeurs['gs_id_site'];
858
    $resultat = $db->query($requete) ;
859
    if (DB::isError($resultat)) {
860
        die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
861
    }
115 jpm 862
    // Gestion du site externe
863
    if ($id_type_site == 103) {
864
        // Vérification pour voir si nous avons à faire à une transformation d'un site "principal" en site "externe"
865
        $requete =  'SELECT COUNT(gsr_id_site_01) AS nbre_relation '.
866
                    'FROM gen_site_relation '.
867
                    'WHERE gsr_id_site_01 = gsr_id_site_02 '.
868
                    'AND gsr_id_site_01 = '.$aso_valeurs['gs_id_site'].' '.
869
                    'AND gsr_id_valeur = 102 ';// 102 = site "principal"
870
        $nbre_relation = $db->getOne($requete);
871
        if (DB::isError($nbre_relation)) {
872
            die( BOG_afficherErreurSql(__FILE__, __LINE__, $nbre_relation->getMessage(), $requete) );
873
        }
874
 
875
        // Nous supprimons l'ancienne relation si nécessaire
876
        if ($nbre_relation >= 1) {
877
            $requete_supr_ext = 'DELETE FROM gen_site_relation '.
878
                                'WHERE gsr_id_site_01 = gsr_id_site_02 '.
879
                                'AND gsr_id_site_01 = '.$aso_valeurs['gs_id_site'].' '.
880
                                'AND gsr_id_valeur = 102 ';// 102 = site "principal"
881
            $resultat_supr_ext = $db->query($requete_supr_ext);
882
            if (DB::isError($resultat_supr_ext)) {
883
                die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_supr_ext->getMessage(), $requete_supr_ext));
884
            }
885
            $message_complement =   'Le site "principal" a été transformé en site "externe". Si nécessaire, veuillez '.
886
                                    'supprimer manuellement par FTP, le dossier contenant les fichiers de ce site sur '.
887
                                    'le serveur!';
888
        }
889
 
890
        // Requete d'insertion de la relations site "externe"
891
        $requete =  'INSERT INTO gen_site_relation '.
892
                    'SET gsr_id_site_01 = '.$id_site.', '.
893
                    'gsr_id_site_02 = '.$id_site.', '.
894
                    'gsr_id_valeur = '.$id_type_site.', '.
895
                    'gsr_ordre = NULL ';
896
        $resultat = $db->query($requete);
897
        if (DB::isError($resultat)) {
898
            die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));
899
        }
900
    }
6 jpm 901
 
115 jpm 902
    // Gestion du site par défaut
6 jpm 903
    if (isset($aso_valeurs['defaut']) && $aso_valeurs['defaut'] == 1) {
904
        $requete_supr_defaut =  'DELETE FROM gen_site_relation '.
905
                                'WHERE gsr_id_site_01 = gsr_id_site_02 '.
906
                                'AND gsr_id_valeur = 101 ';// 101 = site par "defaut"
907
        $resultat_supr_defaut = $db->query($requete_supr_defaut);
908
        if (DB::isError($resultat_supr_defaut)) {
909
            die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_supr_defaut->getMessage(), $requete_supr_defaut));
910
        }
911
 
912
        // Requete d'insertion de la relations site par défaut
913
        $requete =  'INSERT INTO gen_site_relation '.
914
                    'SET gsr_id_site_01 = '.$aso_valeurs['gs_id_site'].', '.
915
                    'gsr_id_site_02 = '.$aso_valeurs['gs_id_site'].', '.
916
                    'gsr_id_valeur = 101, '.
917
                    'gsr_ordre = NULL ';
918
        $resultat = $db->query($requete);
919
        if (DB::isError($resultat)) {
920
            die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));
921
        }
922
    }
115 jpm 923
 
924
    $message = '<p class="pap_info">'.'Succés de la modification du site.'.'</p>';
925
    $message .= '<p class="pap_info">'.$message_complement.'</p>';
6 jpm 926
    return $message;
927
}
928
 
929
/** Fonction ADMIN_supprimerSite() - Ajoute un site à Papyrus.
930
*
931
* Cette fonction ajoute le site à Papyrus, c'est à dire :
932
* - 1. Création des répertoire du projet en fonction du nom et des sous-répertoires.
933
* - 2. Insertion d'une ligne dans la table "gen_site".
934
* - 3. Insertion d'une ligne dans la table "gen_site_auth" et ses tables liées si nécessaire.
935
*
936
* @param  string   l'objet pear de connexion à la base de données.
937
* @param  string   le tableau contenant les valeurs du formulaire.
938
* @param  int      identifiant de l'administrateur réalisant cette création.
939
* @return string retourne un message en cas de succès ou d'échec.
940
*/
941
function ADMIN_supprimerSite($db, $aso_valeurs)
942
{
943
    // Recherche du coda alpha du site principal afin de pouvoir détruire ses répertoires
944
    $requete =  'SELECT gs_code_alpha '.
945
                'FROM gen_site '.
946
                'WHERE gs_id_site = '.$aso_valeurs['form_sites_id_site'];
947
    $code_alpha_site_principal = $db->getOne($requete);
948
    if (DB::isError($code_alpha_site_principal)) {
949
        die(BOG_afficherErreurSql(__FILE__, __LINE__, $code_alpha_site_principal->getMessage(), $requete));
950
    }
951
 
75 jpm 952
    // Nous vérifions que le site n'a pas le code alphanum correspondant au site par défaut d'administration (admin).
953
    if ($code_alpha_site_principal == GEN_SITE_DEFAUT) {
954
        $message =  '<p class="pap_erreur">Si vous voulez vraiment supprimer le site d\'administration par défaut de '.
955
                    'Papyrus, veuillez commencer par changer la valeur de son code alphanumérique. Vous pourrez '.
956
                    'ensuite le supprimer via cette interface.</p>';
957
        return $message;
958
    }
959
 
6 jpm 960
    // Recherche des différents sites liés à celui que l'on veut détruire
961
    // Cela comprend le site à détruire lui méme car il posséde la relations
962
    // sur lui meme "site principale".
963
    $requete =  'SELECT gs_id_site '.
964
                'FROM gen_site, gen_site_relation '.
965
                'WHERE gsr_id_site_01 = '.$aso_valeurs['form_sites_id_site'].' '.
966
                'AND gsr_id_site_02 = gs_id_site ';
967
    $resultat = $db->query($requete);
968
    if (DB::isError($resultat)) {
969
        die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));
970
    }
971
 
972
    while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
973
        // Requete de suppression des sites liés dans gen_site
974
        $requete_supr_site =    'DELETE FROM gen_site '.
975
                                'WHERE gs_id_site = '.$ligne->gs_id_site;
976
        $resultat_supr_site = $db->query($requete_supr_site);
977
        if (DB::isError($resultat_supr_site)) {
978
            die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_supr_site->getMessage(), $requete_supr_site));
979
        }
980
 
981
        // Requete de suppression des relations des sites à détruire
982
        $requete_supr_site_relation =   'DELETE FROM gen_site_relation '.
983
                                        'WHERE gsr_id_site_01 = '.$ligne->gs_id_site;
984
        $resultat_supr_site_relation = $db->query($requete_supr_site_relation);
985
        if (DB::isError($resultat_supr_site_relation)) {
986
            die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_supr_site_relation->getMessage(), $requete_supr_site_relation));
987
        }
988
 
989
        // Recherche des différents menus liés au site à détruire
990
        $requete_menu = 'SELECT gm_id_menu '.
991
                        'FROM gen_menu '.
992
                        'WHERE gm_ce_site = '.$ligne->gs_id_site;
993
        $resultat_menu = $db->query($requete_menu) ;
994
        if (DB::isError($resultat_menu)) {
995
            die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_menu->getMessage(), $requete_menu));
996
        }
997
        while ($ligne_menu = $resultat_menu->fetchRow(DB_FETCHMODE_OBJECT)) {
998
            // Requete de suppression des des menus
999
            $requete_supr_menu =   'DELETE FROM gen_menu '.
1000
                                            'WHERE gm_id_menu = '.$ligne_menu->gm_id_menu;
1001
            $resultat_supr_menu = $db->query($requete_supr_menu);
1002
            if (DB::isError($resultat_supr_menu)) {
1003
                die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_supr_menu->getMessage(), $requete_supr_menu));
1004
            }
1005
            // Requete de suppression des relations des menus
1006
            $requete_supr_menu_relation =   'DELETE FROM gen_menu_relation '.
1007
                                            'WHERE gmr_id_menu_01 = '.$ligne_menu->gm_id_menu;
1008
            $resultat_supr_menu_relation = $db->query($requete_supr_menu_relation);
1009
            if (DB::isError($resultat_supr_menu_relation)) {
1010
                die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_supr_menu_relation->getMessage(), $requete_supr_menu_relation));
1011
            }
1012
 
1013
            // Requete de suppression des contenus des menus
1014
            $requete_supr_menu_contenu =   'DELETE FROM gen_menu_contenu '.
1015
                                            'WHERE gmc_ce_menu = '.$ligne_menu->gm_id_menu;
1016
            $resultat_supr_menu_contenu = $db->query($requete_supr_menu_contenu);
1017
            if (DB::isError($resultat_supr_menu_contenu)) {
1018
                die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_supr_menu_contenu->getMessage(), $requete_supr_menu_contenu));
1019
            }
1020
 
1021
            // Requete de suppression des ulr alternatives des menus
1022
            $requete_supr_menu_url_alt =   'DELETE FROM gen_menu_url_alternative '.
1023
                                            'WHERE gmua_ce_menu = '.$ligne_menu->gm_id_menu;
1024
            $resultat_supr_menu_url_alt = $db->query($requete_supr_menu_url_alt);
1025
            if (DB::isError($resultat_supr_menu_url_alt)) {
1026
                die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_supr_menu_url_alt->getMessage(), $requete_supr_menu_url_alt));
1027
            }
1028
        }
1029
        $resultat_menu->free();
1030
    }
1031
    $resultat->free();
1032
 
1033
    // Suppression des répertoires du site
75 jpm 1034
    if (!GEN_FTP_UTILISE) {
72 jpm 1035
        $chemin_repertoire = PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$code_alpha_site_principal;
1036
        $resultat = supprimerDossier($chemin_repertoire, GEN_SEP);
1037
        if (!$resultat) {
1038
            $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de supprimer le répertoire.<br />'.
1039
                        'Répertoire : '. $chemin_repertoire .'<br />'.
1040
                        'Ligne n° : '. __LINE__ .'<br />'.
1041
                        'Fichier n° : '. __FILE__ .'<br /></p>';
1042
            return $message;
1043
        }
1044
    } else {
1045
        // Création d'une connection ftp avec Net_FTP de PEAR
1046
        // voir http://pear.php.net/manual/fr/package.networking.net-ftp.php
1047
 
1048
        // création de l'objet pear ftp
1049
        $objet_pear_ftp = new Net_FTP(PAP_FTP_SERVEUR, PAP_FTP_PORT);
1050
        // création de la connexion
1051
        $ftp_conn = $objet_pear_ftp->connect(PAP_FTP_SERVEUR, PAP_FTP_PORT);
1052
        // identification
75 jpm 1053
        $ftp_login_result = $objet_pear_ftp->login(PAP_FTP_UTILISATEUR, PAP_FTP_MOT_DE_PASSE);
72 jpm 1054
        // Gestion des erreurs ftp
1055
        if ((PEAR::isError($ftp_conn) || PEAR::isError($ftp_login_result))) {
1056
            $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de se connecter par ftp.<br />'.
1057
                        'Erreur connexion : '.$ftp_conn->getMessage().'<br />'.
1058
                        'Erreur login : '.$ftp_login_result->getMessage().'<br />'.
1059
                        'Serveur : '. PAP_FTP_SERVEUR .'<br />'.
1060
                        'Utilisateur : '. PAP_FTP_UTILISATEUR .'<br />'.
1061
                        'Ligne n° : '. __LINE__ .'<br />'.
1062
                        'Fichier n° : '. __FILE__ .'<br /><p>';
1063
            return $message;
1064
        }
1065
        // Changement du niveau d'erreur pour éviter les Notices PHP dues à  Net_FTP
1066
        error_reporting(E_PARSE);
1067
        $chemin_repertoire = PAP_FTP_RACINE.GEN_CHEMIN_SITES.$code_alpha_site_principal.'/';
1068
        $resultat = $objet_pear_ftp->rm($chemin_repertoire, true);
1069
        if (PEAR::isError($resultat)) {
1070
            $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de supprimer le répertoire par ftp.<br />'.
1071
                        'Erreur ftp : '.$resultat->getMessage().'<br />'.
1072
                        'Répertoire : '. $chemin_repertoire .'<br />'.
1073
                        'Ligne n° : '. __LINE__ .'<br />'.
1074
                        'Fichier n° : '. __FILE__ .'<br /></p>';
1075
            return $message;
1076
        }
1077
        $objet_pear_ftp->disconnect();
1078
        // Retour au niveau d'erreur définit dans le fichier de config de Papyrus
1079
        error_reporting(GEN_DEBOGAGE_NIVEAU);
6 jpm 1080
    }
72 jpm 1081
    $message = '<p class="pap_info">Succés de la suppression du site.</p>';
6 jpm 1082
    return $message;
1083
}
1084
 
1085
// +- Fin du code source  --------------------------------------------------------------------------------+
1086
/*
1087
* $Log: not supported by cvs2svn $
190 jpm 1088
* Revision 1.9  2004/11/26 13:13:51  jpm
1089
* Mise en commentaire de variable passée dans un message d'erreur car elles semblent provoquer un bogue et ne sont pas obligatoire.
1090
*
183 jpm 1091
* Revision 1.8  2004/11/03 17:59:59  jpm
1092
* Corrections bogues erreurs variable inconnue.
1093
*
123 jpm 1094
* Revision 1.7  2004/10/26 18:41:28  jpm
1095
* Gestion des sites externes à Papyrus.
1096
*
115 jpm 1097
* Revision 1.6  2004/10/22 17:25:31  jpm
1098
* Changement du nom de la class CSS d'erreur.
1099
*
96 jpm 1100
* Revision 1.5  2004/10/19 15:57:55  jpm
1101
* Amélioration de la gestion des fichiers sur le serveur.
1102
* Ajout d'une contrainte pour éviter la suppression par erreur du site par défaut.
1103
*
75 jpm 1104
* Revision 1.4  2004/10/18 18:27:41  jpm
1105
* Correction problèmes FTP et manipulation de fichiers.
1106
*
72 jpm 1107
* Revision 1.3  2004/09/23 16:51:27  jpm
1108
* Ajout d'informations supplémentaires sur les messages d'erreur.
1109
*
55 jpm 1110
* Revision 1.2  2004/07/06 17:08:01  jpm
1111
* Modification de la documentation pour une mailleur analyse par PhpDocumentor.
1112
*
25 jpm 1113
* Revision 1.1  2004/06/16 14:28:46  jpm
1114
* Changement de nom de Génésia en Papyrus.
1115
* Changement de l'arborescence.
1116
*
6 jpm 1117
* Revision 1.20  2004/05/10 14:32:14  jpm
1118
* Changement du titre.
1119
*
1120
* Revision 1.19  2004/05/10 12:23:39  jpm
1121
* Modification formulaire.
1122
*
1123
* Revision 1.18  2004/05/07 16:33:53  jpm
1124
* Amélioration des formulaires.
1125
*
1126
* Revision 1.17  2004/05/07 07:22:51  jpm
1127
* Ajout de la gestion des modification et suppression de site.
1128
* Amélioration de la création des sites.
1129
*
1130
* Revision 1.16  2004/04/30 16:22:53  jpm
1131
* Poursuite de l'administration des sites.
1132
*
1133
* Revision 1.14  2004/04/02 15:58:39  jpm
1134
* Modification fonction liste des projets.
1135
*
1136
* Revision 1.13  2004/04/01 11:21:41  jpm
1137
* Ajout et modification de commentaires pour PhpDocumentor.
1138
*
1139
* Revision 1.12  2004/03/24 20:01:02  jpm
1140
* Traduction, mise en forme, ajout de commentaire pour les fonctions listProjects() et updateProject().
1141
*
1142
* Revision 1.11  2004/03/24 10:06:01  jpm
1143
* Ajout des commentaires d'entête.
1144
* Début mise en conformité avec la convention de codage.
1145
* Début traitement de la fonction listant les projets.
1146
*
1147
*
1148
*/
1149
?>