Subversion Repositories Applications.papyrus

Rev

Rev 190 | 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
// +------------------------------------------------------------------------------------------------------+
195 jpm 23
// CVS : $Id: adsi_site.fonct.php,v 1.11 2004-11-30 16:43:51 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
195 jpm 38
*@version       $Revision: 1.11 $ $Date: 2004-11-30 16:43:51 $
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
{
195 jpm 761
    // Initialisation de variables
762
    $message_complement = '';
763
 
75 jpm 764
    // Récupération de l'ancien code alphanumérique
765
    $requete =  'SELECT gs_code_alpha '.
766
                'FROM gen_site '.
767
                'WHERE gs_id_site = '.$aso_valeurs['gs_id_site'];
768
    $ancien_code_alphnum = $db->getOne($requete);
769
    if (DB::isError($ancien_code_alphnum)) {
770
        die( BOG_afficherErreurSql(__FILE__, __LINE__, $ancien_code_alphnum->getMessage(), $requete) );
771
    }
115 jpm 772
 
773
    // Nous vérifions si nous avons à faire à un site externe.
774
    $id_type_site = '102';// par défaut on conscidére que c'est un site "principal"
775
    $requete_complement = ', gs_url = NULL';
195 jpm 776
    if (isset($aso_valeurs['externe']) && $aso_valeurs['externe'] == 1 && !empty($aso_valeurs['gs_url']) && $aso_valeurs['gs_url'] != 'http://') {
115 jpm 777
        $requete_complement = ', gs_url = "'.$aso_valeurs['gs_url'].'"';
778
        $id_type_site = '103';// c'est un site "externe"
779
    }
780
 
781
    // Si le code alphanumérique à changé et que nous n'avons pas à faire à un site externe.
782
    if ($aso_valeurs['gs_code_alpha'] != $ancien_code_alphnum && $id_type_site == 102) {
75 jpm 783
        if (!GEN_FTP_UTILISE) {
784
            $chemin_site_ancien = PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$ancien_code_alphnum.GEN_SEP;
785
            $chemin_site_nouveau = PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP;
786
            if (!rename($chemin_site_ancien, $chemin_site_nouveau)) {
787
                $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de changer le nom du dossier du site.<br />'.
788
                            'Ancien nom : '. $chemin_site_ancien .'<br />'.
789
                            'Nouveau nom : '. $chemin_site_nouveau .'<br />'.
790
                            'Ligne n° : '. __LINE__ .'<br />'.
791
                            'Fichier n° : '. __FILE__ .'<br /></p>';
792
                return $message;
793
            }
794
        } else {
795
            $chemin_site_ancien = PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$ancien_code_alphnum.GEN_SEP;
796
            $chemin_site_nouveau = PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP;
797
            // Création d'une connection ftp avec Net_FTP de PEAR
798
            // voir http://pear.php.net/manual/fr/package.networking.net-ftp.php
799
            // création de l'objet pear ftp
800
            $objet_pear_ftp = new Net_FTP(PAP_FTP_SERVEUR, PAP_FTP_PORT);
801
            // création de la connexion
802
            $ftp_conn = $objet_pear_ftp->connect(PAP_FTP_SERVEUR, PAP_FTP_PORT);
803
            // identification
804
            $ftp_login_result = $objet_pear_ftp->login(PAP_FTP_UTILISATEUR, PAP_FTP_MOT_DE_PASSE);
805
            // Gestion des erreurs ftp
806
            if ((PEAR::isError($ftp_conn) || PEAR::isError($ftp_login_result))) {
807
                $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de se connecter par ftp.<br />'.
808
                            'Serveur : '. PAP_FTP_SERVEUR .'<br />'.
809
                            'Utilisateur : '. PAP_FTP_UTILISATEUR .'<br />'.
810
                            'Erreur connexion : '.$ftp_conn->getMessage().'<br />'.
811
                            'Erreur login : '.$ftp_login_result->getMessage().'<br />'.
812
                            'Ligne n° : '. __LINE__ .'<br />'.
813
                            'Fichier n° : '. __FILE__ .'<br /><p>';
814
                return $message;
815
            }
816
            $resultat = $objet_pear_ftp->putRecursive($chemin_site_ancien, $chemin_site_nouveau, false, FTP_BINARY);
817
            if (PEAR::isError($resultat)) {
818
                $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de copier l\'ancien dossier du site.<br />'.
819
                            'Dossier site ancien : '. $chemin_site_ancien .'<br />'.
820
                            'Dossier site nouveau : '. $chemin_site_nouveau .'<br />'.
821
                            'Erreur origine : '. $resultat->getMessage() .'<br />'.
822
                            'Ligne n° : '. __LINE__ .'<br />'.
823
                            'Fichier n° : '. __FILE__ .'<br /></p>';
824
                    return $message;
825
            }
826
            // On utilise la racine FTP pour rm
827
            $chemin_site_ancien = PAP_FTP_RACINE.GEN_CHEMIN_SITES.$ancien_code_alphnum.GEN_SEP;
828
            // Changement du niveau d'erreur pour éviter les Notices PHP dues à Net_FTP
829
            error_reporting(E_PARSE);
830
            $resultat = $objet_pear_ftp->rm($chemin_site_ancien, true);
831
            if (PEAR::isError($resultat)) {
832
                $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de supprimer l\'ancien dossier du site.<br />'.
833
                            'Dossier site ancien : '. $chemin_site_ancien .'<br />'.
834
                            'Erreur origine : '. $resultat->getMessage() .'<br />'.
835
                            'Ligne n° : '. __LINE__ .'<br />'.
836
                            'Fichier n° : '. __FILE__ .'<br /></p>';
837
                    return $message;
838
            }
839
            // Retour au niveau d'erreur définit dans le fichier de config de Papyrus
840
            error_reporting(GEN_DEBOGAGE_NIVEAU);
841
            $objet_pear_ftp->disconnect();
842
        }
843
    }
115 jpm 844
 
6 jpm 845
    // Requete de mise à jour des infos d'un site dans gen_site
846
    $requete =  'UPDATE gen_site '.
847
                'SET gs_ce_i18n = "'.$aso_valeurs['gs_ce_i18n'].'", '.
848
                'gs_ce_auth = '.$aso_valeurs['gs_ce_auth'].', '.
849
                'gs_fichier_squelette = "'.$aso_valeurs['gs_fichier_squelette'].'", '.
850
                'gs_code_num = '.$aso_valeurs['gs_code_num'].', '.
851
                'gs_code_alpha = "'.$aso_valeurs['gs_code_alpha'].'", '.
852
                'gs_nom = "'.$aso_valeurs['gs_nom'].'", '.
853
                'gs_raccourci_clavier = "'.$aso_valeurs['gs_raccourci_clavier'].'", '.
854
                'gs_titre = "'.$aso_valeurs['gs_titre'].'", '.
855
                'gs_mots_cles = "'.$aso_valeurs['gs_mots_cles'].'", '.
856
                'gs_description = "'.$aso_valeurs['gs_description'].'", '.
857
                'gs_auteur = "'.$aso_valeurs['gs_auteur'].'", '.
858
                'gs_date_creation = "'.date('Y-m-d H:i:s').'", '.
859
                'gs_ce_admin = '.$id_admin.' '.
860
                'WHERE gs_id_site = '.$aso_valeurs['gs_id_site'];
861
    $resultat = $db->query($requete) ;
862
    if (DB::isError($resultat)) {
863
        die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
864
    }
115 jpm 865
    // Gestion du site externe
866
    if ($id_type_site == 103) {
867
        // Vérification pour voir si nous avons à faire à une transformation d'un site "principal" en site "externe"
868
        $requete =  'SELECT COUNT(gsr_id_site_01) AS nbre_relation '.
869
                    'FROM gen_site_relation '.
870
                    'WHERE gsr_id_site_01 = gsr_id_site_02 '.
871
                    'AND gsr_id_site_01 = '.$aso_valeurs['gs_id_site'].' '.
872
                    'AND gsr_id_valeur = 102 ';// 102 = site "principal"
873
        $nbre_relation = $db->getOne($requete);
874
        if (DB::isError($nbre_relation)) {
875
            die( BOG_afficherErreurSql(__FILE__, __LINE__, $nbre_relation->getMessage(), $requete) );
876
        }
877
 
878
        // Nous supprimons l'ancienne relation si nécessaire
879
        if ($nbre_relation >= 1) {
880
            $requete_supr_ext = 'DELETE FROM gen_site_relation '.
881
                                'WHERE gsr_id_site_01 = gsr_id_site_02 '.
882
                                'AND gsr_id_site_01 = '.$aso_valeurs['gs_id_site'].' '.
883
                                'AND gsr_id_valeur = 102 ';// 102 = site "principal"
884
            $resultat_supr_ext = $db->query($requete_supr_ext);
885
            if (DB::isError($resultat_supr_ext)) {
886
                die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_supr_ext->getMessage(), $requete_supr_ext));
887
            }
888
            $message_complement =   'Le site "principal" a été transformé en site "externe". Si nécessaire, veuillez '.
889
                                    'supprimer manuellement par FTP, le dossier contenant les fichiers de ce site sur '.
890
                                    'le serveur!';
891
        }
892
 
893
        // Requete d'insertion de la relations site "externe"
894
        $requete =  'INSERT INTO gen_site_relation '.
895
                    'SET gsr_id_site_01 = '.$id_site.', '.
896
                    'gsr_id_site_02 = '.$id_site.', '.
897
                    'gsr_id_valeur = '.$id_type_site.', '.
898
                    'gsr_ordre = NULL ';
899
        $resultat = $db->query($requete);
900
        if (DB::isError($resultat)) {
901
            die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));
902
        }
903
    }
6 jpm 904
 
115 jpm 905
    // Gestion du site par défaut
6 jpm 906
    if (isset($aso_valeurs['defaut']) && $aso_valeurs['defaut'] == 1) {
907
        $requete_supr_defaut =  'DELETE FROM gen_site_relation '.
908
                                'WHERE gsr_id_site_01 = gsr_id_site_02 '.
909
                                'AND gsr_id_valeur = 101 ';// 101 = site par "defaut"
910
        $resultat_supr_defaut = $db->query($requete_supr_defaut);
911
        if (DB::isError($resultat_supr_defaut)) {
912
            die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_supr_defaut->getMessage(), $requete_supr_defaut));
913
        }
914
 
915
        // Requete d'insertion de la relations site par défaut
916
        $requete =  'INSERT INTO gen_site_relation '.
917
                    'SET gsr_id_site_01 = '.$aso_valeurs['gs_id_site'].', '.
918
                    'gsr_id_site_02 = '.$aso_valeurs['gs_id_site'].', '.
919
                    'gsr_id_valeur = 101, '.
920
                    'gsr_ordre = NULL ';
921
        $resultat = $db->query($requete);
922
        if (DB::isError($resultat)) {
923
            die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));
924
        }
925
    }
115 jpm 926
 
927
    $message = '<p class="pap_info">'.'Succés de la modification du site.'.'</p>';
928
    $message .= '<p class="pap_info">'.$message_complement.'</p>';
6 jpm 929
    return $message;
930
}
931
 
932
/** Fonction ADMIN_supprimerSite() - Ajoute un site à Papyrus.
933
*
934
* Cette fonction ajoute le site à Papyrus, c'est à dire :
935
* - 1. Création des répertoire du projet en fonction du nom et des sous-répertoires.
936
* - 2. Insertion d'une ligne dans la table "gen_site".
937
* - 3. Insertion d'une ligne dans la table "gen_site_auth" et ses tables liées si nécessaire.
938
*
939
* @param  string   l'objet pear de connexion à la base de données.
940
* @param  string   le tableau contenant les valeurs du formulaire.
941
* @param  int      identifiant de l'administrateur réalisant cette création.
942
* @return string retourne un message en cas de succès ou d'échec.
943
*/
944
function ADMIN_supprimerSite($db, $aso_valeurs)
945
{
946
    // Recherche du coda alpha du site principal afin de pouvoir détruire ses répertoires
947
    $requete =  'SELECT gs_code_alpha '.
948
                'FROM gen_site '.
949
                'WHERE gs_id_site = '.$aso_valeurs['form_sites_id_site'];
950
    $code_alpha_site_principal = $db->getOne($requete);
951
    if (DB::isError($code_alpha_site_principal)) {
952
        die(BOG_afficherErreurSql(__FILE__, __LINE__, $code_alpha_site_principal->getMessage(), $requete));
953
    }
954
 
75 jpm 955
    // Nous vérifions que le site n'a pas le code alphanum correspondant au site par défaut d'administration (admin).
956
    if ($code_alpha_site_principal == GEN_SITE_DEFAUT) {
957
        $message =  '<p class="pap_erreur">Si vous voulez vraiment supprimer le site d\'administration par défaut de '.
958
                    'Papyrus, veuillez commencer par changer la valeur de son code alphanumérique. Vous pourrez '.
959
                    'ensuite le supprimer via cette interface.</p>';
960
        return $message;
961
    }
962
 
6 jpm 963
    // Recherche des différents sites liés à celui que l'on veut détruire
964
    // Cela comprend le site à détruire lui méme car il posséde la relations
965
    // sur lui meme "site principale".
966
    $requete =  'SELECT gs_id_site '.
967
                'FROM gen_site, gen_site_relation '.
968
                'WHERE gsr_id_site_01 = '.$aso_valeurs['form_sites_id_site'].' '.
969
                'AND gsr_id_site_02 = gs_id_site ';
970
    $resultat = $db->query($requete);
971
    if (DB::isError($resultat)) {
972
        die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));
973
    }
974
 
975
    while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
976
        // Requete de suppression des sites liés dans gen_site
977
        $requete_supr_site =    'DELETE FROM gen_site '.
978
                                'WHERE gs_id_site = '.$ligne->gs_id_site;
979
        $resultat_supr_site = $db->query($requete_supr_site);
980
        if (DB::isError($resultat_supr_site)) {
981
            die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_supr_site->getMessage(), $requete_supr_site));
982
        }
983
 
984
        // Requete de suppression des relations des sites à détruire
985
        $requete_supr_site_relation =   'DELETE FROM gen_site_relation '.
986
                                        'WHERE gsr_id_site_01 = '.$ligne->gs_id_site;
987
        $resultat_supr_site_relation = $db->query($requete_supr_site_relation);
988
        if (DB::isError($resultat_supr_site_relation)) {
989
            die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_supr_site_relation->getMessage(), $requete_supr_site_relation));
990
        }
991
 
992
        // Recherche des différents menus liés au site à détruire
993
        $requete_menu = 'SELECT gm_id_menu '.
994
                        'FROM gen_menu '.
995
                        'WHERE gm_ce_site = '.$ligne->gs_id_site;
996
        $resultat_menu = $db->query($requete_menu) ;
997
        if (DB::isError($resultat_menu)) {
998
            die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_menu->getMessage(), $requete_menu));
999
        }
1000
        while ($ligne_menu = $resultat_menu->fetchRow(DB_FETCHMODE_OBJECT)) {
1001
            // Requete de suppression des des menus
1002
            $requete_supr_menu =   'DELETE FROM gen_menu '.
1003
                                            'WHERE gm_id_menu = '.$ligne_menu->gm_id_menu;
1004
            $resultat_supr_menu = $db->query($requete_supr_menu);
1005
            if (DB::isError($resultat_supr_menu)) {
1006
                die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_supr_menu->getMessage(), $requete_supr_menu));
1007
            }
1008
            // Requete de suppression des relations des menus
1009
            $requete_supr_menu_relation =   'DELETE FROM gen_menu_relation '.
1010
                                            'WHERE gmr_id_menu_01 = '.$ligne_menu->gm_id_menu;
1011
            $resultat_supr_menu_relation = $db->query($requete_supr_menu_relation);
1012
            if (DB::isError($resultat_supr_menu_relation)) {
1013
                die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_supr_menu_relation->getMessage(), $requete_supr_menu_relation));
1014
            }
1015
 
1016
            // Requete de suppression des contenus des menus
1017
            $requete_supr_menu_contenu =   'DELETE FROM gen_menu_contenu '.
1018
                                            'WHERE gmc_ce_menu = '.$ligne_menu->gm_id_menu;
1019
            $resultat_supr_menu_contenu = $db->query($requete_supr_menu_contenu);
1020
            if (DB::isError($resultat_supr_menu_contenu)) {
1021
                die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_supr_menu_contenu->getMessage(), $requete_supr_menu_contenu));
1022
            }
1023
 
1024
            // Requete de suppression des ulr alternatives des menus
1025
            $requete_supr_menu_url_alt =   'DELETE FROM gen_menu_url_alternative '.
1026
                                            'WHERE gmua_ce_menu = '.$ligne_menu->gm_id_menu;
1027
            $resultat_supr_menu_url_alt = $db->query($requete_supr_menu_url_alt);
1028
            if (DB::isError($resultat_supr_menu_url_alt)) {
1029
                die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_supr_menu_url_alt->getMessage(), $requete_supr_menu_url_alt));
1030
            }
1031
        }
1032
        $resultat_menu->free();
1033
    }
1034
    $resultat->free();
1035
 
1036
    // Suppression des répertoires du site
75 jpm 1037
    if (!GEN_FTP_UTILISE) {
72 jpm 1038
        $chemin_repertoire = PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$code_alpha_site_principal;
1039
        $resultat = supprimerDossier($chemin_repertoire, GEN_SEP);
1040
        if (!$resultat) {
1041
            $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de supprimer le répertoire.<br />'.
1042
                        'Répertoire : '. $chemin_repertoire .'<br />'.
1043
                        'Ligne n° : '. __LINE__ .'<br />'.
1044
                        'Fichier n° : '. __FILE__ .'<br /></p>';
1045
            return $message;
1046
        }
1047
    } else {
1048
        // Création d'une connection ftp avec Net_FTP de PEAR
1049
        // voir http://pear.php.net/manual/fr/package.networking.net-ftp.php
1050
 
1051
        // création de l'objet pear ftp
1052
        $objet_pear_ftp = new Net_FTP(PAP_FTP_SERVEUR, PAP_FTP_PORT);
1053
        // création de la connexion
1054
        $ftp_conn = $objet_pear_ftp->connect(PAP_FTP_SERVEUR, PAP_FTP_PORT);
1055
        // identification
75 jpm 1056
        $ftp_login_result = $objet_pear_ftp->login(PAP_FTP_UTILISATEUR, PAP_FTP_MOT_DE_PASSE);
72 jpm 1057
        // Gestion des erreurs ftp
1058
        if ((PEAR::isError($ftp_conn) || PEAR::isError($ftp_login_result))) {
1059
            $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de se connecter par ftp.<br />'.
1060
                        'Erreur connexion : '.$ftp_conn->getMessage().'<br />'.
1061
                        'Erreur login : '.$ftp_login_result->getMessage().'<br />'.
1062
                        'Serveur : '. PAP_FTP_SERVEUR .'<br />'.
1063
                        'Utilisateur : '. PAP_FTP_UTILISATEUR .'<br />'.
1064
                        'Ligne n° : '. __LINE__ .'<br />'.
1065
                        'Fichier n° : '. __FILE__ .'<br /><p>';
1066
            return $message;
1067
        }
1068
        // Changement du niveau d'erreur pour éviter les Notices PHP dues à  Net_FTP
1069
        error_reporting(E_PARSE);
1070
        $chemin_repertoire = PAP_FTP_RACINE.GEN_CHEMIN_SITES.$code_alpha_site_principal.'/';
1071
        $resultat = $objet_pear_ftp->rm($chemin_repertoire, true);
1072
        if (PEAR::isError($resultat)) {
1073
            $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de supprimer le répertoire par ftp.<br />'.
1074
                        'Erreur ftp : '.$resultat->getMessage().'<br />'.
1075
                        'Répertoire : '. $chemin_repertoire .'<br />'.
1076
                        'Ligne n° : '. __LINE__ .'<br />'.
1077
                        'Fichier n° : '. __FILE__ .'<br /></p>';
1078
            return $message;
1079
        }
1080
        $objet_pear_ftp->disconnect();
1081
        // Retour au niveau d'erreur définit dans le fichier de config de Papyrus
1082
        error_reporting(GEN_DEBOGAGE_NIVEAU);
6 jpm 1083
    }
72 jpm 1084
    $message = '<p class="pap_info">Succés de la suppression du site.</p>';
6 jpm 1085
    return $message;
1086
}
1087
 
1088
// +- Fin du code source  --------------------------------------------------------------------------------+
1089
/*
1090
* $Log: not supported by cvs2svn $
195 jpm 1091
* Revision 1.10  2004/11/29 17:05:28  jpm
1092
* Correction d'un bogue concernat les cases à cocher.
1093
*
190 jpm 1094
* Revision 1.9  2004/11/26 13:13:51  jpm
1095
* Mise en commentaire de variable passée dans un message d'erreur car elles semblent provoquer un bogue et ne sont pas obligatoire.
1096
*
183 jpm 1097
* Revision 1.8  2004/11/03 17:59:59  jpm
1098
* Corrections bogues erreurs variable inconnue.
1099
*
123 jpm 1100
* Revision 1.7  2004/10/26 18:41:28  jpm
1101
* Gestion des sites externes à Papyrus.
1102
*
115 jpm 1103
* Revision 1.6  2004/10/22 17:25:31  jpm
1104
* Changement du nom de la class CSS d'erreur.
1105
*
96 jpm 1106
* Revision 1.5  2004/10/19 15:57:55  jpm
1107
* Amélioration de la gestion des fichiers sur le serveur.
1108
* Ajout d'une contrainte pour éviter la suppression par erreur du site par défaut.
1109
*
75 jpm 1110
* Revision 1.4  2004/10/18 18:27:41  jpm
1111
* Correction problèmes FTP et manipulation de fichiers.
1112
*
72 jpm 1113
* Revision 1.3  2004/09/23 16:51:27  jpm
1114
* Ajout d'informations supplémentaires sur les messages d'erreur.
1115
*
55 jpm 1116
* Revision 1.2  2004/07/06 17:08:01  jpm
1117
* Modification de la documentation pour une mailleur analyse par PhpDocumentor.
1118
*
25 jpm 1119
* Revision 1.1  2004/06/16 14:28:46  jpm
1120
* Changement de nom de Génésia en Papyrus.
1121
* Changement de l'arborescence.
1122
*
6 jpm 1123
* Revision 1.20  2004/05/10 14:32:14  jpm
1124
* Changement du titre.
1125
*
1126
* Revision 1.19  2004/05/10 12:23:39  jpm
1127
* Modification formulaire.
1128
*
1129
* Revision 1.18  2004/05/07 16:33:53  jpm
1130
* Amélioration des formulaires.
1131
*
1132
* Revision 1.17  2004/05/07 07:22:51  jpm
1133
* Ajout de la gestion des modification et suppression de site.
1134
* Amélioration de la création des sites.
1135
*
1136
* Revision 1.16  2004/04/30 16:22:53  jpm
1137
* Poursuite de l'administration des sites.
1138
*
1139
* Revision 1.14  2004/04/02 15:58:39  jpm
1140
* Modification fonction liste des projets.
1141
*
1142
* Revision 1.13  2004/04/01 11:21:41  jpm
1143
* Ajout et modification de commentaires pour PhpDocumentor.
1144
*
1145
* Revision 1.12  2004/03/24 20:01:02  jpm
1146
* Traduction, mise en forme, ajout de commentaire pour les fonctions listProjects() et updateProject().
1147
*
1148
* Revision 1.11  2004/03/24 10:06:01  jpm
1149
* Ajout des commentaires d'entête.
1150
* Début mise en conformité avec la convention de codage.
1151
* Début traitement de la fonction listant les projets.
1152
*
1153
*
1154
*/
1155
?>