Subversion Repositories Applications.papyrus

Rev

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