Subversion Repositories Applications.papyrus

Rev

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