Subversion Repositories Applications.papyrus

Rev

Rev 546 | 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) 2004 Tela Botanica (accueil@tela-botanica.org)                                         |
7
// +------------------------------------------------------------------------------------------------------+
8
// | This library is free software; you can redistribute it and/or                                        |
9
// | modify it under the terms of the GNU Lesser General Public                                           |
10
// | License as published by the Free Software Foundation; either                                         |
11
// | version 2.1 of the License, or (at your option) any later version.                                   |
12
// |                                                                                                      |
13
// | This library is distributed in the hope that it will be useful,                                      |
14
// | but WITHOUT ANY WARRANTY; without even the implied warranty of                                       |
15
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU                                    |
16
// | Lesser General Public License for more details.                                                      |
17
// |                                                                                                      |
18
// | You should have received a copy of the GNU Lesser General Public                                     |
19
// | License along with this library; if not, write to the Free Software                                  |
20
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                            |
21
// +------------------------------------------------------------------------------------------------------+
754 ddelon 22
// CVS : $Id: adsi_site.fonct.php,v 1.26 2006-03-02 10:49:49 ddelon Exp $
6 jpm 23
/**
24
* Bibliothèque de fonctions d'admininistration des projets
25
*
26
* Contient un ensemble de fonctions permettant à l'application Administrateur de Papyrus, de modifier des informations
27
* sur les projets (=sites gérés par Papyrus).
28
*
25 jpm 29
*@package Admin_site
6 jpm 30
*@subpackage Fonctions
31
//Auteur original :
282 jpm 32
*@author        Jean-Pascal MILCENT <jpm@tela-botanica.org>
6 jpm 33
//Autres auteurs :
34
*@author        Alexandre GRANIER <alexandre@tela-botanica.org>
285 jpm 35
*@author        Laurent COUDOUNEAU <lc@gsite.org>
6 jpm 36
*@copyright     Tela-Botanica 2000-2004
754 ddelon 37
*@version       $Revision: 1.26 $ $Date: 2006-03-02 10:49:49 $
6 jpm 38
// +------------------------------------------------------------------------------------------------------+
39
*/
40
 
41
// +------------------------------------------------------------------------------------------------------+
42
// |                                            ENTÊTE du PROGRAMME                                       |
43
// +------------------------------------------------------------------------------------------------------+
75 jpm 44
if (GEN_FTP_UTILISE) {
72 jpm 45
    /** Inclusion bibliothèque de PEAR gérant le FTP.*/
46
    require_once ADSI_CHEMIN_BIBLIOTHEQUE_PEAR.'Net/FTP.php';
47
}
6 jpm 48
 
49
// +------------------------------------------------------------------------------------------------------+
50
// |                                            CORPS du PROGRAMME                                        |
51
// +------------------------------------------------------------------------------------------------------+
52
/** Fonction ADMIN_afficherListeSites()- Génére le xhtml permettant de choisir un site parmis une liste.
53
*
54
* Cette fonction fournie une liste des sites principaux gérés par Génésia.
55
*
56
* @param  string   l'objet Pear DB.
57
* @param  string   l'url de la page à laquelle renvoyer le formulaire.
58
* @param  string   un message important à destination de l'utilisateur.
59
* return  string   le code XHTML à retourner.
60
*/
327 jpm 61
function ADMIN_afficherFormListeSites(&$db, $url, $message = '')
6 jpm 62
{
754 ddelon 63
 
64
	$id_langue = $GLOBALS['_GEN_commun']['i18n']; //identifiant de la langue choisie
65
 
66
	// Langue en cours : langue choisie ou langue par defaut (principale)
67
 
68
	if (isset($id_langue) && ($id_langue!='')) {
69
		$langue_test=$id_langue;
70
	} else {
71
		$langue_test=GEN_I18N_ID_DEFAUT;
72
	}
73
 
74
    // Liste des sites principaux :
75
    // Recherche de tous les sites langue en cours
76
 
6 jpm 77
    $requete =  'SELECT * '.
78
                'FROM gen_site, gen_site_relation '.
79
                'WHERE gsr_id_site_01 = gsr_id_site_02 '.
80
                'AND gsr_id_site_01 = gs_id_site '.
115 jpm 81
                'AND gsr_id_valeur IN (102, 103) '.
754 ddelon 82
                'AND gs_ce_i18n = "'.$langue_test.'" '.
6 jpm 83
                'ORDER BY gsr_ordre';
754 ddelon 84
 
6 jpm 85
 
86
    $resultat = $db->query($requete);
87
    (DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;
88
 
754 ddelon 89
    $liste_site=array();
90
    while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
91
 
92
    		if ($langue_test == GEN_I18N_ID_DEFAUT) {
93
 
94
    		  $requete_est_traduction =   'SELECT gsr_id_site_01 '.
95
	                       'FROM  gen_site_relation '.
96
	                       'WHERE '.$ligne->gs_id_site.' = gsr_id_site_02 ' .
97
	                  	   'AND  gsr_id_site_01 <> gsr_id_site_02 ' .
98
	                       'AND gsr_id_valeur = 1 ';// 1 = "avoir traduction"
99
 
100
 
101
	            $resultat_est_traduction = $db->query($requete_est_traduction);
102
	            (DB::isError($resultat_est_traduction))
103
	                ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_est_traduction->getMessage(), $requete_est_traduction))
104
	                : '';
105
 
106
	   			if ( $resultat_est_traduction->numRows() == 0 ) {
107
    	 			$liste_site[]=$ligne;
108
	            }
109
    		}
110
    		else {
111
    			   $liste_site[]=$ligne;
112
    		}
113
    }
114
    $resultat->free();
115
 
116
    // Si la langue en cours n'est pas la langue par défaut, recherche des sites ayant comme langue
117
    // la langue par defaut, non traduits dans la langue en cours et n'etant pas des traductions
118
 
119
 
120
	if ($langue_test != GEN_I18N_ID_DEFAUT) {
121
 
122
 
123
	    $requete =  'SELECT * '.
124
	                'FROM gen_site, gen_site_relation '.
125
	                'WHERE gsr_id_site_01 = gsr_id_site_02 '.
126
	                'AND gs_id_site = gsr_id_site_01 '.
127
	                'AND gsr_id_valeur IN (102, 103) '.
128
	                'AND gs_ce_i18n = "'.GEN_I18N_ID_DEFAUT.'" '.
129
	                'ORDER BY gs_code_num ASC';// 102 = site "principal" et 103 = site "externe"
130
 
131
	    $resultat = $db->query($requete);
132
	    (DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
133
 
134
 
135
 
136
 
137
	    // Recherche de tous les sites de la langue principale  qui ne sont pas traduits dans la langue en cours
138
 
139
	    while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
140
 
141
	    		$requete_est_traduction =   'SELECT gsr_id_site_01 '.
142
	                                'FROM  gen_site_relation '.
143
	                                'WHERE '.$ligne->gs_id_site.' = gsr_id_site_02 ' .
144
	                                'AND  gsr_id_site_01 <> gsr_id_site_02 ' .
145
	                                'AND gsr_id_valeur = 1 ';// 1 = "avoir traduction"
146
 
147
 
148
	            $resultat_est_traduction = $db->query($requete_est_traduction);
149
	            (DB::isError($resultat_est_traduction))
150
	                ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_est_traduction->getMessage(), $requete_est_traduction))
151
	                : '';
152
 
153
	            if ( $resultat_est_traduction->numRows() == 0 ) {
154
 
155
 
156
					if (isset($id_langue) && ($id_langue!='')) {
157
						$langue_test=$id_langue;
158
					} else {
159
						$langue_test=GEN_I18N_ID_DEFAUT;
160
					}
161
 
162
		    		$requete_traduction =   'SELECT gsr_id_site_01 '.
163
		                                    'FROM  gen_site_relation, gen_site '.
164
		                                    'WHERE '.$ligne->gs_id_site.' = gsr_id_site_01 ' .
165
		                                    'AND gsr_id_site_02 = gs_id_site '.
166
		                                    'AND gs_ce_i18n = "'.$langue_test.'" '.
167
		                                    'AND gsr_id_valeur = 1 ';// 1 = "avoir traduction"
168
 
169
		            $resultat_traduction = $db->query($requete_traduction);
170
		            (DB::isError($resultat_traduction))
171
		                ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_traduction->getMessage(), $requete_traduction))
172
		                : '';
173
 
174
		            if ( $resultat_traduction->numRows() == 0 ) {
175
		            	$liste_site []=$ligne;
176
		            }
177
 
178
		            $resultat_traduction->free();
179
 
180
	            }
181
	               $resultat_est_traduction->free();
182
 
183
	    }
184
	    $resultat->free();
185
	}
186
 
187
 
188
 
6 jpm 189
    //----------------------------------------------------------------------------
190
    // Création du formulaire
327 jpm 191
    $form =& new HTML_QuickForm('form_sites', 'post', str_replace('&amp;', '&', $url));
6 jpm 192
    $tab_index = 1000;
193
    $squelette =& $form->defaultRenderer();
194
    $squelette->setFormTemplate("\n".'<form{attributes}>'."\n".'{content}'."\n".'</form>'."\n");
195
    $squelette->setElementTemplate( '<li>'."\n".'{label}'."\n".'{element}'."\n".
196
                                    '<!-- BEGIN required --><span class="symbole_obligatoire">*</span><!-- END required -->'."\n".
197
                                    '<!-- BEGIN error --><span class="erreur">{error}</span><!-- END error -->'."\n".
198
                                    '</li>'."\n");
199
    $squelette->setRequiredNoteTemplate("\n".'<p>'."\n".'<span class="symbole_obligatoire">*</span> {requiredNote}'."\n".'</p>'."\n");
200
 
201
    $partie_site_debut =    '<fieldset>'."\n".
202
                            '<legend>Listes des sites</legend>'."\n".
203
                            '<ul>'."\n";
204
    $form->addElement('html', $partie_site_debut);
205
 
206
    $aso_options = array();
754 ddelon 207
    foreach ($liste_site as $ligne ) {
6 jpm 208
        $aso_options[$ligne->gs_id_site] = htmlentities($ligne->gs_nom.' ('.$ligne->gs_code_alpha.')');
754 ddelon 209
 
210
        // Affichage des traductions
211
        $requete_traduction =   'SELECT * '.
212
	                            'FROM  gen_site_relation, gen_site '.
213
	                            'WHERE '.$ligne->gs_id_site.' = gsr_id_site_01 ' .
214
	                            'AND gsr_id_site_02 <> gsr_id_site_01 '.
215
	                            'AND gsr_id_site_02 = gs_id_site '.
216
	                            'AND gsr_id_valeur = 1 ';// 1 = "avoir traduction"
217
	    $resultat_traduction = $db->query($requete_traduction);
218
        (DB::isError($resultat_traduction))
219
            ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_traduction->getMessage(), $requete_traduction))
220
            : '';
221
 
222
        while ($ligne_traduction = $resultat_traduction->fetchRow(DB_FETCHMODE_OBJECT)) {
223
        	$aso_options[$ligne_traduction->gs_id_site] = '&nbsp;&nbsp;&nbsp;'.$ligne_traduction->gs_ce_i18n.":&nbsp;".htmlentities($ligne_traduction->gs_nom.' ('.$ligne_traduction->gs_code_alpha.')');
224
        }
225
        $resultat_traduction->free();
226
 
6 jpm 227
    }
228
    $resultat->free();
198 jpm 229
 
6 jpm 230
    $id = 'form_sites_id_site';
231
    $aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++);
232
    $label = '<label for="'.$id.'">'.'Listes des sites : '.'</label>';
233
    $form->addElement('select', $id, $label, $aso_options, $aso_attributs);
234
 
235
    $partie_site_fin =  '</ul>'."\n".
236
                        '</fieldset>'."\n";
237
    $form->addElement('html', $partie_site_fin);
238
 
239
    $liste_bouton_debut = '<ul class="liste_bouton">'."\n";
240
    $form->addElement('html', $liste_bouton_debut);
241
 
198 jpm 242
    $id = 'form_sites_ajouter';
243
    $aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++);
244
    $label = 'Ajouter';
245
    $form->addElement('submit', $id, $label, $aso_attributs);
6 jpm 246
 
198 jpm 247
    $id = 'form_sites_modifier';
248
    $aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++);
249
    $label = 'Modifier';
250
    $form->addElement('submit', $id, $label, $aso_attributs);
754 ddelon 251
 
252
    $id = 'form_sites_traduire';
253
    $aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++);
254
    $label = 'Traduire';
255
    $form->addElement('submit', $id, $label, $aso_attributs);
198 jpm 256
 
257
    $id = 'form_sites_supprimer';
258
    $aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'onclick' => 'javascript:return confirm(\''.'Êtes vous sûr de vouloir supprimer ce site ?'.'\');');
259
    $label = 'Supprimer';
260
    $form->addElement('submit', $id, $label, $aso_attributs);
261
 
6 jpm 262
    $liste_bouton_fin = '</ul>'."\n";
263
    $form->addElement('html', $liste_bouton_fin);
264
 
265
    $sortie = $form->toHTML()."\n";
266
 
267
    // Titre de la page:
268
    $titre = 'Configuration des sites';
269
 
270
    // Construction de la page.
271
    return ADMIN_contruirePage($titre, $sortie, $message);
272
}
273
 
274
/** Fonction ADMIN_validerFormListesSites() - Valide les données issues du formulaire de liste de sites.
275
*
276
* Cette fonction valide les données du formulaire de liste de site.
277
*
278
* @param  string   l'objet pear de connexion à la base de données.
279
* @param  string   le tableau contenant les valeurs du formulaire.
280
* @return string   retourne les messages d'erreurs sinon rien.
281
*/
327 jpm 282
function ADMIN_validerFormListesSites(&$db, $aso_valeurs)
6 jpm 283
{
284
    $message = '';
285
 
286
    // Validation des données du formulaire
287
    if (empty($aso_valeurs['form_sites_id_site'])) {
96 jpm 288
        $message .= '<p class="pap_erreur">Vous devez d\'abord sélectionner un site.</p>';
6 jpm 289
    }
290
 
291
    return $message;
292
}
293
 
294
/** Fonction ADMIN_afficherFormSite()- Génére un formulaire pour gen_site.
295
*
296
* Cette fonction retourne un formulaire pour modification ou pour ajout.
297
*
298
* @param  string   l'objet pear de connexion à la base de données.
299
* @param  string   l'url à laquelle renvoyer le formulaire.
300
* @param  string   le tableau contenant les valeurs du formulaire.
301
* @param  string   un message à destination de l'utilisateur.
302
* return  string   le code XHTML à retourner.
303
*/
327 jpm 304
function ADMIN_afficherFormSite(&$db, $url, $aso_valeurs = array(), $message = '')
6 jpm 305
{
386 jpm 306
    // Initialisation des valeurs
307
    $sortie = '';
257 florian 308
    $aso_valeurs['modification'] = false;
754 ddelon 309
    $aso_valeurs['traduction'] = false;
257 florian 310
    $aso_valeurs['defaut'] = false;
311
    $aso_valeurs['type_site_externe'] = 0;
6 jpm 312
    // Nous cherchons à savoir si nous somme en modification
754 ddelon 313
    if ((isset($aso_valeurs['form_sites_modifier']))  || (isset($aso_valeurs['form_sites_traduire'])))  {
314
    	if ((isset($aso_valeurs['form_sites_modifier']))) {
315
        	$as_val['modification'] = true;
316
    	}
317
        else {
318
        	$as_val['traduction'] = true;
319
        };
190 jpm 320
 
754 ddelon 321
        if ($as_val['traduction']) {
322
	        // Traduction d'un site principal uniquement :
323
 
324
	        $requete =  'SELECT * '.
325
	                    'FROM gen_site_relation '.
326
	                    'WHERE gsr_id_site_02 = '.$aso_valeurs['form_sites_id_site'].' '.
327
	                    'AND gsr_id_valeur =1  '; // 1 = "avoir traduction"
328
 
329
	        $resultat = $db->query($requete);
330
 
331
	        if (DB::isError($resultat)) {
332
	            die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
333
	        }
334
 
335
	        if ( $resultat->numRows() == 0 ) {
336
	        	$site_id = $aso_valeurs['form_sites_id_site'];
337
	        }
338
	        else {
339
	        	$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
340
		        $site_id = $ligne->gsr_id_site_01;
341
	        }
342
	        $resultat->free();
343
       		 }
344
        else {
345
          	$site_id = $aso_valeurs['form_sites_id_site'];
346
      	 }
347
 
348
	        // Requete pour récupérer les informations sur le site à modifier
349
	        $requete =  'SELECT * '.
350
	                    'FROM gen_site '.
351
	                    'WHERE gs_id_site = '.$site_id;
352
	        $resultat = $db->query($requete);
353
	        if (DB::isError($resultat)) {
354
	            die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
355
	        }
356
	        $aso_valeurs = $resultat->fetchRow(DB_FETCHMODE_ASSOC);
357
	        $site_ligne = $aso_valeurs;
358
	        $resultat->free();
359
 
190 jpm 360
        // Requete pour récupérer les informations issues des relations du site à modifier
205 jpm 361
        $requete =  'SELECT * '.
362
                    'FROM gen_site_relation '.
363
                    'WHERE gsr_id_site_01 = '.$site_id.' '.
364
                    'AND gsr_id_site_01 = gsr_id_site_02';
190 jpm 365
        $resultat = $db->query($requete);
366
        if (DB::isError($resultat)) {
367
            die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
368
        }
257 florian 369
 
205 jpm 370
        $tab_type = GEN_retournerTableauTypeSiteExterne($db);
190 jpm 371
        while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT) ) {
372
            if ($ligne->gsr_id_valeur == 101) {// 101 = site par défaut
373
                $aso_valeurs['defaut'] = true;
374
            }
205 jpm 375
            foreach ($tab_type as $cle => $val) {
376
                if ($ligne->gsr_id_valeur == $val['id']) {// 20x = type de site externe à Papyrus
377
                    $aso_valeurs['type_site_externe'] = $val['id'];
378
                }
190 jpm 379
            }
380
        }
381
        $resultat->free();
382
 
754 ddelon 383
        if (($as_val['modification'])) {
384
        	$aso_valeurs['modification'] = true;
385
        }
386
        else {
387
        	$aso_valeurs['traduction'] = true;
388
        };
389
 
390
 
391
 
6 jpm 392
    } else if (isset($aso_valeurs['gs_id_site'])) {
393
        $aso_valeurs['modification'] = true;
394
    }
190 jpm 395
    // Débogage :
396
    //$GLOBALS['_DEBOGAGE_'] .= '<pre>'.print_r($aso_valeurs, true).'</pre>';
386 jpm 397
    //-------------------------------------------------------------------------------------------------------------------
398
    // Information précédent le formulaire (en modification)
754 ddelon 399
    if ((isset($aso_valeurs['modification'])||isset($aso_valeurs['traduction']))&&isset($aso_valeurs['gs_id_site'])) {
386 jpm 400
        $sortie .= '<p>'.'Identifiant de ce site : '.'<span id="adsi_site_id">'.$aso_valeurs['gs_id_site'].'</span></p>'."\n";
401
    }
402
    //-------------------------------------------------------------------------------------------------------------------
6 jpm 403
    // Création du formulaire
327 jpm 404
    $form =& new HTML_QuickForm('site', 'post', str_replace('&amp;', '&', $url));
6 jpm 405
    $tab_index = 1000;
406
    $squelette =& $form->defaultRenderer();
407
    $squelette->setFormTemplate("\n".'<form{attributes}>'."\n".'{content}'."\n".'</form>'."\n");
408
    $squelette->setElementTemplate(  '<li>'."\n".
409
                                    '{label}'."\n".
410
                                    '{element}'."\n".
411
                                    '<!-- BEGIN required --><span class="symbole_obligatoire">*</span><!-- END required -->'."\n".
412
                                    '<!-- BEGIN error --><span class="erreur">{error}</span><!-- END error -->'."\n".
413
                                    '</li>'."\n");
115 jpm 414
    $squelette->setGroupElementTemplate('{label}'."\n".
415
                                        '{element}'."\n".
416
                                        '<!-- BEGIN required --><span class="symbole_obligatoire">*</span><!-- END required -->'."\n".
417
                                        '&nbsp;'."\n"
418
                                        , 'double');
6 jpm 419
    $squelette->setRequiredNoteTemplate("\n".'<p><span class="symbole_obligatoire">*</span> {requiredNote}</p>'."\n");
420
 
421
    $partie_site_debut = '<fieldset>'."\n".'<legend>Configuration du site</legend>'."\n".'<ul>'."\n";
422
    $form->addElement('html', $partie_site_debut);
423
 
754 ddelon 424
    if ($aso_valeurs['modification'] || $aso_valeurs['traduction']) {
6 jpm 425
        $form->addElement('hidden', 'gs_id_site');
754 ddelon 426
        $form->addElement('hidden', 'modification');
427
        $form->addElement('hidden', 'traduction');
6 jpm 428
    }
429
 
430
    $id = 'gs_nom';
431
    $aso_attributs = array('id'=>$id, 'tabindex' => $tab_index++, 'size' => 45, 'maxlength' => 100, 'value' => 'nom du site');
432
    $label = '<label for="'.$id.'">'.'Nom du site : '.'</label>';
433
    $form->addElement('text', $id, $label, $aso_attributs);
434
    $form->addRule($id, 'Un nom est requis pour le site !', 'required', '', 'client');
435
 
436
    $id = 'gs_code_alpha';
437
    $aso_attributs = array('id'=>$id, 'tabindex' => $tab_index++, 'size' => 20, 'maxlength' => 20, 'value' => 'site_01');
438
    $label = '<label for="'.$id.'">'.'Code alphanumérique : '.'</label>';
439
    $form->addElement('text', $id, $label, $aso_attributs);
440
    $form->addRule('gs_code_alpha', 'Un code alphanumérique est requis pour le site !', 'required', '', 'client');
441
 
442
    $id = 'gs_code_num';
443
    $aso_attributs = array('id'=>$id, 'tabindex' => $tab_index++, 'size' => 20, 'maxlength' => 20, 'value' => 1);
444
    $label = '<label for="'.$id.'">'.'Code numérique : '.'</label>';
445
    $form->addElement('text', $id, $label, $aso_attributs);
446
    $form->addRule('gs_code_num', 'Un code numérique est requis pour le site !', 'required', '', 'client');
447
 
448
    $id = 'gs_raccourci_clavier';
449
    $aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'size' => 1, 'maxlength' => 1, 'value' => 'Z');
450
    $label = '<label for="'.$id.'">'.'Raccourci clavier : '.'</label>';
451
    $form->addElement('text', $id, $label, $aso_attributs);
452
 
453
    // Requete pour connaitre les identifications dispo
454
    $requete =  'SELECT * '.
455
                'FROM gen_site_auth '.
456
                'WHERE gsa_id_auth != 0';
457
    $resultat = $db->query($requete) ;
458
    if (DB::isError($resultat)) {
459
        die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
460
    }
461
    $aso_options = array();
462
    while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT) ) {
463
        // Test pour connaître le type d'authentification.
464
        $type = '';
465
        if ($ligne->gsa_ce_type_auth == '1' ) {
466
            $type = 'Base de données';
467
        } else if ($ligne->gsa_ce_type_auth == '2' ) {
468
            $type = 'LDAP';
469
        }
470
        $aso_options[$ligne->gsa_id_auth] = $ligne->gsa_nom.' ('.$type.')';
471
    }
472
    $resultat->free();
473
    $id = 'gs_ce_auth';
474
    $aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++);
475
    $label = '<label for="'.$id.'">'.'Identification : '.'</label>';
476
    $form->addElement('select', $id, $label, $aso_options, $aso_attributs);
477
 
754 ddelon 478
    // En modification nous affichons la liste des squelettes disponibles dans
6 jpm 479
    // le dossier du site.
754 ddelon 480
    if ($aso_valeurs['modification'] || $aso_valeurs['traduction']) {
6 jpm 481
        $aso_options = array();
75 jpm 482
        if (!GEN_FTP_UTILISE) {
72 jpm 483
            $chemin_squelettes =    PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.
484
                                    $aso_valeurs['gs_ce_i18n'].GEN_SEP.GEN_DOSSIER_SQUELETTE.GEN_SEP;
485
            $dossier = opendir($chemin_squelettes);
486
            while(($fichier = readdir($dossier)) !== false) {
487
                if ($fichier != '.' && $fichier != '..') {
488
                    $chemin_type = $chemin_squelettes.GEN_SEP.$fichier;
489
                    if (filetype($chemin_type) != 'dir') {
490
                        $aso_options[$fichier] = $fichier;
491
                    }
492
                }
6 jpm 493
            }
72 jpm 494
        } else {
495
            // ouverture des squelettes présent dans le dossier du site
496
            // création de l'objet pear ftp
497
            $objet_pear_ftp = new Net_FTP(PAP_FTP_SERVEUR, PAP_FTP_PORT);
498
            // création de la connexion
499
            $ftp_conn = $objet_pear_ftp->connect(PAP_FTP_SERVEUR, PAP_FTP_PORT);
500
            // identification
501
            $ftp_login_result = $objet_pear_ftp->login(PAP_FTP_UTILISATEUR, PAP_FTP_MOT_DE_PASSE);
502
            // Gestion des erreurs ftp
503
            if ((PEAR::isError($ftp_conn) || PEAR::isError($ftp_login_result))) {
190 jpm 504
                die('ERREUR Papyrus admin : impossible de se connecter par ftp.<br />'.
72 jpm 505
                    'Serveur : '. GEN_FTP_SERVEUR .'<br />'.
506
                    'Utilisateur : '. GEN_FTP_UTILISATEUR .'<br />'.
507
                    'Ligne n° : '. __LINE__ .'<br />'.
183 jpm 508
                    'Fichier n° : '. __FILE__ .'<br />');
509
                    //'Message erreur de connection : '.$ftp_conn->getMessage().'<br />'.
510
                    //'Message erreur de login : '.$ftp_login_result->getMessage());
72 jpm 511
            }
512
            $chemin_squelettes =    PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.
513
                                    $aso_valeurs['gs_ce_i18n'].GEN_SEP.GEN_DOSSIER_SQUELETTE.GEN_SEP;
514
            $tab_squelettes = $objet_pear_ftp->ls($chemin_squelettes);
515
            $aso_options = array();
516
            for ($i = 0; $i < count($tab_squelettes) ; $i++) {
517
                if ($tab_squelettes[$i]['is_dir'] == false) {
518
                    $aso_options[$tab_squelettes[$i]['name']] = $tab_squelettes[$i]['name'];
519
                }
520
            }
521
            $objet_pear_ftp->disconnect();
6 jpm 522
        }
201 jpm 523
 
524
        // Vérification de la présence de squelettes
525
        if (count($aso_options) == 0) {
526
            $aso_options['Aucun squelette'] = 'Aucun squelette';
527
        }
528
 
6 jpm 529
        $id = 'gs_fichier_squelette';
530
        $aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++);
531
        $label = '<label for="'.$id.'">'.'Squelette : '.'</label>';
532
        $form->addElement('select', $id, $label, $aso_options, $aso_attributs);
533
    }
534
 
535
    // Requete pour connaitre les internationalisation dispo
754 ddelon 536
 
537
    if (!$aso_valeurs['modification'] && !$aso_valeurs['traduction']) {
538
    	$requete =  'SELECT * '.
539
        	        'FROM gen_i18n ';
540
    }
541
    	else  {
542
 
543
 
544
    		if ($aso_valeurs['traduction']) {
545
 
546
    		// Recherche liste des sites deja traduits
547
 
548
	    		 $requete =  'SELECT distinct gs_ce_i18n  '.
549
                'FROM gen_site_relation, gen_site '.
550
                'WHERE gsr_id_site_01 = ' .$site_ligne['gs_id_site'] .' '.
551
                'AND gs_id_site = gsr_id_site_02  '.
552
                'AND gsr_id_valeur =1  '; // 1 = "avoir traduction"
553
 
554
			    $resultat = $db->query($requete) ;
555
			    if (DB::isError($resultat)) {
556
			        die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
557
			    }
558
			    $not_in_langue='';
559
			    if ( $resultat->numRows() == 0 ) {
560
					$not_in_langue="gi_id_i18n not in('".$site_ligne['gs_ce_i18n']."')";
561
			    }
562
			    else {
563
			    	    while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
564
    	 					$not_in_langue="'".$ligne->gs_ce_i18n."'".",".$not_in_langue;
565
    	 					$end="'".$ligne->gs_ce_i18n."'";
566
    					}
567
			    		$not_in_langue=' gi_id_i18n not in('.$not_in_langue.$end.')';
568
			    }
569
				$resultat->free();
570
 
571
	    		$requete =  "SELECT * FROM gen_i18n where ".$not_in_langue;
572
    		}
573
    		else
574
    		{
575
    			$requete =  "SELECT * FROM gen_i18n where  gi_id_i18n =('".$site_ligne['gs_ce_i18n']."')";
576
    		}
577
    }
6 jpm 578
    $resultat = $db->query($requete) ;
579
    if (DB::isError($resultat)) {
580
        die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
581
    }
582
    $aso_options = array();
583
    while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT) ) {
584
        $aso_options[$ligne->gi_id_i18n] = $ligne->gi_id_i18n;
585
    }
586
    $resultat->free();
587
    $id = 'gs_ce_i18n';
201 jpm 588
    $aso_attributs = array('id' => $id, 'tabindex' => $tab_index++);
6 jpm 589
    $label = '<label for="'.$id.'">'.'Langue : '.'</label>';
590
    $form->addElement('select', $id, $label, $aso_options, $aso_attributs);
591
 
115 jpm 592
    $id = 'defaut';
201 jpm 593
    $aso_attributs = array('id' => $id, 'tabindex' => $tab_index++);
386 jpm 594
    if (isset($aso_valeurs[$id]) && $aso_valeurs[$id] === true) {
190 jpm 595
        $aso_attributs['checked'] = 'checked';
596
    }
115 jpm 597
    $label = '<label for="'.$id.'">'.'En faire le site par défaut : '.'</label>';
201 jpm 598
    $form->addElement('checkbox', $id, $label, null, $aso_attributs);
115 jpm 599
 
600
    // Groupe site externe
205 jpm 601
    $tab_type = GEN_retournerTableauTypeSiteExterne($db);
602
    $aso_options = array('0' => 'Aucun');
603
    foreach ($tab_type as $cle => $val) {
604
        $aso_options[$val['id']] = $val['intitule'];
190 jpm 605
    }
460 florian 606
 
205 jpm 607
    $id = 'type_site_externe';
608
    $aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++);
460 florian 609
    $label = '<label>'.'Type de site externe : '.'</label>';
610
    $form->addElement('select', $id, $label, $aso_options, $aso_attributs);
115 jpm 611
 
612
    $id = 'gs_url';
201 jpm 613
    $aso_attributs = array('id' => $id, 'tabindex' => $tab_index++,'size' => 45, 'maxlength' => 255, 'value' => 'http://');
460 florian 614
    $label = '<label>'.'URL du site externe : '.'</label>';
615
    $form->addElement('text', $id, $label, $aso_attributs);
115 jpm 616
 
6 jpm 617
    $partie_site_fin = '</ul>'."\n".'</fieldset>'."\n";
618
    $form->addElement('html', $partie_site_fin);
619
 
620
    $partie_entete_debut = '<fieldset>'."\n".'<legend>Entête par défaut des pages du site</legend>'."\n".'<ul>'."\n";
621
    $form->addElement('html', $partie_entete_debut);
622
 
623
    $id = 'gs_titre';
754 ddelon 624
    $aso_attributs = array('id'=>$id, 'tabindex' => $tab_index++, 'size' => 45, 'maxlength' => 255, 'value' => ADSI_TITRE_SITE);
625
    $label = '<label for="'.$id.'">'.ADSI_TITRE_SITE.' : '.'</label>';
6 jpm 626
    $form->addElement('text', $id, $label, $aso_attributs);
627
    $form->addRule('gs_titre', 'Un titre est requis pour le site !', 'required', '', 'client');
628
 
629
    $id = 'gs_mots_cles';
630
    $aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'rows' => 3, 'cols' => 45);
631
    $label = '<label for="'.$id.'">'.'Mots-clés : '.'</label>';
632
    $zone_mots_cles = $form->createElement('textarea', $id, $label, $aso_attributs);
633
    $zone_mots_cles->setValue('mots-clés du site');
634
    $form->addElement($zone_mots_cles);
635
    $form->addRule($id, 'Des mots clés sont requis pour le site !', 'required', '', 'client');
636
 
637
    $id = 'gs_description';
638
    $aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'rows' => 3, 'cols' => 45);
639
    $label = '<label for="'.$id.'">'.'Description du contenu : '.'</label>';
640
    $zone = $form->createElement('textarea', $id, $label, $aso_attributs);
641
    $zone->setValue('description du site');
642
    $form->addElement($zone);
643
    $form->addRule($id, 'Une description est requise pour le site !', 'required', '', 'client');
644
 
645
    $id = 'gs_auteur';
646
    $aso_attributs = array('id'=>$id, 'tabindex' => $tab_index++, 'size' => 45, 'maxlength' => 255, 'value' => 'auteur du site');
647
    $label = '<label for="'.$id.'">'.'Auteur du site : '.'</label>';
648
    $form->addElement('text', $id, $label, $aso_attributs);
649
    $form->addRule('gs_auteur', 'Un auteur est requis pour le site !', 'required', '', 'client');
650
 
651
    $partie_entete_fin = '</ul>'."\n".'</fieldset>'."\n";
652
    $form->addElement('html', $partie_entete_fin);
653
 
754 ddelon 654
    if ($aso_valeurs['modification'] ||  $aso_valeurs['traduction']) {
6 jpm 655
        // Requete pour connaitre les informations sur l'administrateur ayant fait la dernière modif
656
        $requete_admin =    'SELECT * '.
657
                            'FROM gen_annuaire '.
658
                            'WHERE ga_id_administrateur = '.$aso_valeurs['gs_ce_admin'];
659
        $resultat_admin = $db->query($requete_admin);
660
        if (DB::isError($resultat_admin)) {
661
            die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_admin->getMessage(), $requete_admin));
662
        }
663
        $ligne_admin = $resultat_admin->fetchRow(DB_FETCHMODE_OBJECT);
443 ddelon 664
        if (isset($ligne_admin)) {
546 jp_milcent 665
        	$info_admin =   '<p class="info">Site créé le '.$aso_valeurs['gs_date_creation'].'. Dernière modification par '.
386 jpm 666
                        $ligne_admin->ga_prenom.' '.$ligne_admin->ga_nom.'.'.'</p>';
443 ddelon 667
        	$form->addElement('html', $info_admin);
668
        	$form->addElement('hidden', 'gs_ce_admin');
669
        	$form->addElement('hidden', 'gs_date_creation');
670
        }
6 jpm 671
 
672
        // Titre de la page:
754 ddelon 673
        if ($aso_valeurs['modification']) {
674
        	$titre = 'Modifier un site';
675
        	$bouton_validation = '<input type="submit" id="site_modifier" name="site_modifier" value="Enregistrer" />';
676
        }
677
        else {
678
        	$titre = 'Traduire un site';
679
        	$bouton_validation = '<input type="submit" id="site_traduire" name="site_traduire" value="Enregistrer" />';
680
        }
681
 
6 jpm 682
    } else {
683
        // Titre de la page:
684
        $titre = 'Ajouter un site';
685
        // Bouton validant le formulaire
686
        $bouton_validation = '<input type="submit" id="site_enregistrer" name="site_enregistrer" value="Enregistrer" />';
687
    }
688
    $bouton_annuler =   '<input type="submit" id="form_annuler" name="form_annuler" value="Annuler" />';
689
    $bouton_effacer =   '<input type="reset" id="effacer" name="effacer" value="Effacer" />';
690
    $boutons =  '<p>'."\n".
691
                $bouton_validation."\n".
692
                $bouton_annuler."\n".
693
                $bouton_effacer."\n".
694
                '</p>'."\n";
695
    $form->addElement('html', $boutons);
696
 
697
    // Instanciation des valeurs par défaut du formulaire
698
    $form->setDefaults($aso_valeurs);
699
 
700
    // Javascript pour la validation côté client
701
    $regles_javascript = $form->getValidationScript();
702
    // Suppression des balises déjà créées par GEN_stockerCodeScript()
205 jpm 703
    // Le code ci-dessous devrait être utilisé si on arrive à empécher Quickform de l'ajouter lui-même!
704
    /*
6 jpm 705
    $regles_javascript = ereg_replace ( '<script type="text\/javascript">', '', $regles_javascript);
706
    $regles_javascript = ereg_replace ( '<!--', '', $regles_javascript);
707
    $regles_javascript = ereg_replace ( '\/\/-->', '', $regles_javascript);
708
    $regles_javascript = ereg_replace ( '<\/script>', '', $regles_javascript);
709
    GEN_stockerCodeScript($regles_javascript);
205 jpm 710
    */
6 jpm 711
 
712
    // Note de fin de formulaire
713
    $form->setRequiredNote('Indique les champs obligatoires');
386 jpm 714
    $sortie .= $form->toHTML()."\n";
6 jpm 715
 
716
    // Construction de la page.
717
    return ADMIN_contruirePage($titre, $sortie, $message);
718
}
719
 
720
/** Fonction ADMIN_validerFormAjouterSite() - Valide les données issues du formulaire pour gen_site.
721
*
722
* Cette fonction valide les données à ajouter dans la table gen_site.
723
*
724
* @param  string   l'objet pear de connexion à la base de données.
725
* @param  string   le tableau contenant les valeurs du formulaire.
726
* @return string   retourne les messages d'erreurs sinon rien.
727
*/
327 jpm 728
function ADMIN_validerFormSite(&$db, $aso_valeurs)
6 jpm 729
{
730
    $message = '';
731
 
732
    // Validation des données du formulaire
733
    if (empty($aso_valeurs['gs_nom'])) {
96 jpm 734
        $message .= '<p class="pap_erreur">Le champ "Nom" ne doit pas être vide.</p>';
6 jpm 735
    }
736
    if (empty($aso_valeurs['gs_code_alpha'])) {
96 jpm 737
        $message .= '<p class="pap_erreur">Le champ "Code alphanumérique" ne doit pas être vide.</p>';
6 jpm 738
    }
75 jpm 739
    if ($aso_valeurs['gs_code_num'] == '') {
740
        // Note: ne pas utilisez empty() car si on veut saisir 0, cela est conscidéré comme vide!
96 jpm 741
        $message .= '<p class="pap_erreur">Le champ "Code numérique" ne doit pas être vide.</p>';
6 jpm 742
    }
743
    if (preg_match('/^[0-9]+$/',$aso_valeurs['gs_code_num']) == 0) {
96 jpm 744
        $message .= '<p class="pap_erreur">Le champ "Code numérique" doit contenir un nombre.</p>';
6 jpm 745
    }
746
 
754 ddelon 747
    // Requete pour vérifier l'absence du code numérique et alphanumérique de la table gen_site
748
    // en mode creation uniquement !
6 jpm 749
 
754 ddelon 750
    if (!$aso_valeurs['site_modifier'] && !$aso_valeurs['site_traduire'] ) {
751
 
752
	    $requete =  'SELECT gs_code_alpha, gs_code_num '.
753
	                'FROM gen_site, gen_site_relation '.
754
	                'WHERE gsr_id_site_01 = gsr_id_site_02 '.
755
	                'AND gsr_id_site_01 = gs_id_site '.
756
	                'AND gsr_id_valeur IN (102, 103) ';// 102 = site "principal" et 103 = site "externe"
757
	    $requete .= (isset($aso_valeurs['gs_id_site'])) ? 'AND gs_id_site != '.$aso_valeurs['gs_id_site'] : '';
758
 
759
 
760
	    $resultat = $db->query($requete);
761
	    if (DB::isError($resultat)) {
762
	        die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
763
	    }
764
 
765
	    while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT) ) {
766
	        if ($ligne->gs_code_num == $aso_valeurs['gs_code_num']) {
767
	            $message .= '<p class="pap_erreur">La valeur "'.$aso_valeurs['gs_code_num'].'" pour le champ "Code numérique" existe déjà.</p>';
768
	        }
769
	        if ($ligne->gs_code_alpha == $aso_valeurs['gs_code_alpha']) {
770
	            $message .= '<p class="pap_erreur">La valeur "'.$aso_valeurs['gs_code_alpha'].'" pour le champ "Code alphanumérique" existe déjà.</p>';
771
	        }
772
	    }
773
 
774
	    $resultat->free();
775
 
6 jpm 776
    }
777
 
754 ddelon 778
    else {
779
    // Refuser si plus de traduction disponible !
6 jpm 780
    }
781
 
782
    if (empty($aso_valeurs['gs_titre'])) {
96 jpm 783
        $message .= '<p class="pap_erreur">Le champ "Titre" ne doit pas être vide.</p>';
6 jpm 784
    }
785
    if (empty($aso_valeurs['gs_mots_cles'])) {
96 jpm 786
        $message .= '<p class="pap_erreur">Le champ "Mots clés" ne doit pas être vide.</p>';
6 jpm 787
    }
788
    if (empty($aso_valeurs['gs_description'])) {
96 jpm 789
        $message .= '<p class="pap_erreur">Le champ "Description" ne doit pas être vide.</p>';
6 jpm 790
    }
791
    if (empty($aso_valeurs['gs_auteur'])) {
96 jpm 792
        $message .= '<p class="pap_erreur">Le champ "Auteur" ne doit pas être vide.</p>';
6 jpm 793
    }
123 jpm 794
    if (isset($aso_valeurs['externe']) && $aso_valeurs['externe'] == 1 && (empty($aso_valeurs['gs_url']) || $aso_valeurs['gs_url'] == 'http://')) {
115 jpm 795
        $message .= '<p class="pap_erreur">'.'Vous avez désigné ce site comme étant externe. Il est nécessaire de saisir son URL!'.'</p>';
796
    }
123 jpm 797
    if (isset($aso_valeurs['externe']) && $aso_valeurs['externe'] == 0 && (!empty($aso_valeurs['gs_url']) && $aso_valeurs['gs_url'] != 'http://')) {
115 jpm 798
        $message .= '<p class="pap_erreur">'.'Vous avez saisie une l\'url : '.$aso_valeurs['gs_url'].'<br />'.
799
                    'Vous conscidérez donc ce site comme étant externe. Il est nécessaire de cocher la case "oui"!'.'</p>';
800
    }
6 jpm 801
    return $message;
802
}
803
 
804
/** Fonction ADMIN_enregistrerSite() - Ajoute un site à Papyrus.
805
*
806
* Cette fonction ajoute le site à Papyrus, c'est à dire :
807
* - 1. Création des répertoire du projet en fonction du nom et des sous-répertoires.
808
* - 2. Insertion d'une ligne dans la table "gen_site".
809
* - 3. Insertion d'une ligne dans la table "gen_site_auth" et ses tables liées si nécessaire.
810
*
811
* @param  string   l'objet pear de connexion à la base de données.
812
* @param  string   le tableau contenant les valeurs du formulaire.
813
* @param  int      identifiant de l'administrateur réalisant cette création.
814
* @return string retourne un message en cas de succès ou d'échec.
815
*/
327 jpm 816
function ADMIN_enregistrerSite(&$db, $aso_valeurs, $id_admin)
6 jpm 817
{
115 jpm 818
    // Nous vérifions si nous avons à faire à un site externe.
819
    $id_type_site = '102';// par défaut on conscidére que c'est un site "principal"
205 jpm 820
    if (isset($aso_valeurs['type_site_externe']) && $aso_valeurs['type_site_externe'] > 0 && !empty($aso_valeurs['gs_url']) && $aso_valeurs['gs_url'] != 'http://') {
115 jpm 821
        $id_type_site = '103';// c'est un site "externe"
822
    }
823
 
824
    // Ajout des répertoires des sites "principaux" soit par manipulation de fichier soit par FTP en fonction de la constante définie
825
    // par l'utilisateur dans le fichier de config avancée.
75 jpm 826
    $tab_rep_langue = array(GEN_DOSSIER_GENERIQUE, $aso_valeurs['gs_ce_i18n']);
827
    $tab_rep_site = array(  GEN_DOSSIER_IMAGE,
828
                            GEN_DOSSIER_STYLE,
829
                            GEN_DOSSIER_SCRIPT,
830
                            GEN_DOSSIER_SQUELETTE,
831
                            GEN_DOSSIER_DOC);
239 alex 832
    if (!GEN_FTP_UTILISE && $id_type_site != '103') {
75 jpm 833
        foreach ($tab_rep_langue as $nom_rep_langue) {
834
            foreach ($tab_rep_site as $nom_rep_site) {
835
                $chemin_repertoire =    PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.
836
                                        $nom_rep_langue.GEN_SEP.$nom_rep_site;
837
                $vieux_umask = umask(0);
239 alex 838
                $resultat = creerDossier($chemin_repertoire, 0777, GEN_SEP);
75 jpm 839
                umask($vieux_umask);
840
                if ($resultat == false) {
96 jpm 841
                    $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de créer le répertoire.<br />'.
75 jpm 842
                                'Répertoire : '. $chemin_repertoire .'<br />'.
843
                                'Ligne n° : '. __LINE__ .'<br />'.
844
                                'Fichier n° : '. __FILE__ .'<br /></p>';
845
                    return $message;
846
                }
72 jpm 847
            }
848
        }
849
        $chemin_squelette_defaut =  PAP_CHEMIN_RACINE.GEN_CHEMIN_COMMUN.GEN_DOSSIER_GENERIQUE.GEN_SEP.
850
                                    GEN_DOSSIER_SQUELETTE.GEN_SEP.GEN_FICHIER_SQUELETTE;
851
        $chemin_squelette_site =    PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.
852
                                    $aso_valeurs['gs_ce_i18n'].GEN_SEP.GEN_DOSSIER_SQUELETTE.GEN_SEP.GEN_FICHIER_SQUELETTE;
853
        if (!copy($chemin_squelette_defaut, $chemin_squelette_site)) {
96 jpm 854
            $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de créer le fichier de squellete par défaut.<br />'.
75 jpm 855
                        'Fichier : '. $chemin_squelette_site .'<br />'.
6 jpm 856
                        'Ligne n° : '. __LINE__ .'<br />'.
857
                        'Fichier n° : '. __FILE__ .'<br /></p>';
858
            return $message;
859
        }
72 jpm 860
        $chemin_style_defaut =  PAP_CHEMIN_RACINE.GEN_CHEMIN_COMMUN.GEN_DOSSIER_GENERIQUE.GEN_SEP.
861
                                GEN_DOSSIER_STYLE.GEN_SEP.GEN_FICHIER_STYLE;
862
        $chemin_style_site =    PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.
863
                                $aso_valeurs['gs_ce_i18n'].GEN_SEP.GEN_DOSSIER_STYLE.GEN_SEP.GEN_FICHIER_STYLE;
864
        if (!copy($chemin_style_defaut, $chemin_style_site)) {
96 jpm 865
            $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de créer le fichier de style par défaut.<br />'.
75 jpm 866
                        'Fichier : '. $chemin_style_site .'<br />'.
72 jpm 867
                        'Ligne n° : '. __LINE__ .'<br />'.
868
                        'Fichier n° : '. __FILE__ .'<br /></p>';
6 jpm 869
            return $message;
72 jpm 870
        }
239 alex 871
    } else if (GEN_FTP_UTILISE && $id_type_site != '103') {  // 103 est le type "site externe"
72 jpm 872
        // Création d'une connection ftp avec Net_FTP de PEAR
873
        // voir http://pear.php.net/manual/fr/package.networking.net-ftp.php
874
 
875
        // création de l'objet pear ftp
876
        $objet_pear_ftp = new Net_FTP(PAP_FTP_SERVEUR, PAP_FTP_PORT);
877
        // création de la connexion
878
        $ftp_conn = $objet_pear_ftp->connect(PAP_FTP_SERVEUR, PAP_FTP_PORT);
879
        // identification
880
        $ftp_login_result = $objet_pear_ftp->login(PAP_FTP_UTILISATEUR, PAP_FTP_MOT_DE_PASSE);
881
        // Gestion des erreurs ftp
882
        if ((PEAR::isError($ftp_conn) || PEAR::isError($ftp_login_result))) {
883
            $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de se connecter par ftp.<br />'.
884
                        'Serveur : '. PAP_FTP_SERVEUR .'<br />'.
885
                        'Utilisateur : '. PAP_FTP_UTILISATEUR .'<br />'.
886
                        'Erreur connexion : '.$ftp_conn->getMessage().'<br />'.
887
                        'Erreur login : '.$ftp_login_result->getMessage().'<br />'.
888
                        'Ligne n° : '. __LINE__ .'<br />'.
889
                        'Fichier n° : '. __FILE__ .'<br /><p>';
6 jpm 890
            return $message;
72 jpm 891
        }
239 alex 892
        $objet_pear_ftp->mkdir(PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha']) ;
893
 
894
        //$objet_pear_ftp->cd(PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha']) ;
75 jpm 895
        foreach ($tab_rep_langue as $nom_rep_langue) {
239 alex 896
            $objet_pear_ftp->mkdir(PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.$nom_rep_langue) ;
75 jpm 897
            foreach ($tab_rep_site as $nom_rep_site) {
239 alex 898
                $chemin_repertoire =    PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.$nom_rep_langue.GEN_SEP.$nom_rep_site;
899
 
900
                $resultat = $objet_pear_ftp->mkdir($chemin_repertoire) ;
75 jpm 901
                if (PEAR::isError($resultat)) {
902
                    $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de créer le répertoire par ftp.<br />'.
903
                                'Répertoire : '. $chemin_repertoire .'<br />'.
904
                                'Erreur origine : '. $resultat->getMessage() .'<br />'.
905
                                'Ligne n° : '. __LINE__ .'<br />'.
906
                                'Fichier n° : '. __FILE__ .'<br /></p>';
907
                    return $message;
908
                }
72 jpm 909
            }
910
        }
911
        $chemin_squelette_defaut =  PAP_CHEMIN_RACINE.GEN_CHEMIN_COMMUN.GEN_DOSSIER_GENERIQUE.GEN_SEP.
912
                                    GEN_DOSSIER_SQUELETTE.GEN_SEP.GEN_FICHIER_SQUELETTE;
913
        $chemin_squelette_site =    PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.
914
                                    $aso_valeurs['gs_ce_i18n'].GEN_SEP.GEN_DOSSIER_SQUELETTE.GEN_SEP.GEN_FICHIER_SQUELETTE;
915
        $resultat = $objet_pear_ftp->put($chemin_squelette_defaut, $chemin_squelette_site, true, FTP_BINARY);
916
        if (PEAR::isError($resultat)) {
917
            $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de copier le squelette defaut par ftp.<br />'.
918
                        'Fichier origine : '. $chemin_squelette_defaut .'<br />'.
919
                        'Fichier copié : '. $chemin_squelette_site .'<br />'.
920
                        'Erreur origine : '. $resultat->getMessage() .'<br />'.
921
                        'Ligne n° : '. __LINE__ .'<br />'.
922
                        'Fichier n° : '. __FILE__ .'<br /></p>';
923
                return $message;
924
        }
925
        $chemin_style_defaut =  PAP_CHEMIN_RACINE.GEN_CHEMIN_COMMUN.GEN_DOSSIER_GENERIQUE.GEN_SEP.
926
                                GEN_DOSSIER_STYLE.GEN_SEP.GEN_FICHIER_STYLE;
927
        $chemin_style_site =    PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.
928
                                $aso_valeurs['gs_ce_i18n'].GEN_SEP.GEN_DOSSIER_STYLE.GEN_SEP.GEN_FICHIER_STYLE;
929
        $resultat = $objet_pear_ftp->put($chemin_style_defaut, $chemin_style_site, true, FTP_BINARY);
930
        if (PEAR::isError($resultat)) {
931
            $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de copier les styles defaut par ftp.<br />'.
932
                        'Fichier origine : '. $chemin_style_defaut .'<br />'.
933
                        'Fichier copié : '. $chemin_style_site .'<br />'.
934
                        'Erreur origine : '. $resultat->getMessage() .'<br />'.
935
                        'Ligne n° : '. __LINE__ .'<br />'.
936
                        'Fichier n° : '. __FILE__ .'<br /></p>';
937
                return $message;
938
        }
939
        $objet_pear_ftp->disconnect();
6 jpm 940
    }
257 florian 941
 
942
    $id_site = SQL_obtenirNouveauId($db, 'gen_site','gs_id_site');
943
    if ($id_site == false) {
944
        $message = '<p class="erreur"> ERREUR Génésia admin : impossible de récupérer un identifiant pour la table gen_site.<br />'.
945
                    'Ligne n° : '. __LINE__ .'<br />'.
946
                    'Fichier n° : '. __FILE__ .'<br /></p>';
947
        return $message;
948
    }
949
 
950
    // Modification de la requete si nous avons à faire à un site externe.
951
    $requete_complement = ', gs_url = NULL';
952
    if (isset($aso_valeurs['type_site_externe']) && $aso_valeurs['type_site_externe'] > 0 && !empty($aso_valeurs['gs_url']) && $aso_valeurs['gs_url'] != 'http://') {
953
        $requete_complement = ', gs_url = "'.$aso_valeurs['gs_url'].'"';
954
    }
955
 
956
    // Requete d'insertion des infos d'un site dans gen_site
957
    $requete =  'INSERT INTO gen_site '.
958
                'SET gs_id_site = '.$id_site.', '.
959
                'gs_ce_i18n = "'.$aso_valeurs['gs_ce_i18n'].'", '.
960
                'gs_ce_auth = '.$aso_valeurs['gs_ce_auth'].', '.
961
                'gs_fichier_squelette = "defaut.html", '.
962
                'gs_code_num = '.$aso_valeurs['gs_code_num'].', '.
963
                'gs_code_alpha = "'.$aso_valeurs['gs_code_alpha'].'", '.
964
                'gs_nom = "'.$aso_valeurs['gs_nom'].'", '.
965
                'gs_raccourci_clavier = "'.$aso_valeurs['gs_raccourci_clavier'].'", '.
966
                'gs_titre = "'.$aso_valeurs['gs_titre'].'", '.
967
                'gs_mots_cles = "'.$aso_valeurs['gs_mots_cles'].'", '.
968
                'gs_description = "'.$aso_valeurs['gs_description'].'", '.
969
                'gs_auteur = "'.$aso_valeurs['gs_auteur'].'", '.
970
                'gs_date_creation = "'.date('Y-m-d H:i:s').'", '.
971
                'gs_ce_admin = '.$id_admin.
972
                $requete_complement;
973
    $resultat = $db->query($requete);
974
    if (DB::isError($resultat)) {
975
        die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
976
    }
977
 
978
    // Recherche du nouveau numéro d'ordre de ce site "principal" ou "externe"
979
    $requete =  'SELECT MAX(gsr_ordre) AS max_ordre '.
980
                'FROM gen_site_relation '.
981
                'WHERE gsr_id_site_01 = gsr_id_site_02 '.
982
                'AND gsr_id_valeur IN (102, 103) ';// 102 = site "principal" et 103 = site "externe"
983
    $resultat = $db->query($requete) ;
984
    if (DB::isError($resultat)) {
985
        die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
986
    }
987
    $ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
988
    $nouvel_ordre = $ligne->max_ordre + 1;
989
 
990
    // Requete d'insertion des relations dans gen_site_relation
991
    $requete =  'INSERT INTO gen_site_relation '.
992
                'SET gsr_id_site_01 = '.$id_site.', '.
993
                'gsr_id_site_02 = '.$id_site.', '.
994
                'gsr_id_valeur = '.$id_type_site.', '.
995
                'gsr_ordre = '.$nouvel_ordre;
996
    $resultat = $db->query($requete);
997
    if (DB::isError($resultat)) {
998
        die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));
999
    }
1000
 
1001
    // Gestion du site par défaut
1002
    if (isset($aso_valeurs['defaut']) && $aso_valeurs['defaut'] == 1) {
1003
        $requete_supr_defaut =  'DELETE FROM gen_site_relation '.
1004
                                'WHERE gsr_id_site_01 = gsr_id_site_02 '.
1005
                                'AND gsr_id_valeur = 101 ';// 101 = site par "defaut"
1006
        $resultat_supr_defaut = $db->query($requete_supr_defaut);
1007
        if (DB::isError($resultat_supr_defaut)) {
1008
            die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_supr_defaut->getMessage(), $requete_supr_defaut));
1009
        }
1010
 
1011
        // Requete d'insertion de la relations site par défaut
1012
        $requete =  'INSERT INTO gen_site_relation '.
1013
                    'SET gsr_id_site_01 = '.$id_site.', '.
1014
                    'gsr_id_site_02 = '.$id_site.', '.
1015
                    'gsr_id_valeur = 101, '.
1016
                    'gsr_ordre = NULL ';
1017
        $resultat = $db->query($requete);
1018
        if (DB::isError($resultat)) {
1019
            die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));
1020
        }
1021
    }
1022
 
1023
    // Gestion des sites externes
1024
    if ($id_type_site == '103') {
1025
        // Requete d'insertion des relations dans gen_site_relation
1026
        $requete =  'INSERT INTO gen_site_relation '.
1027
                    'SET gsr_id_site_01 = '.$id_site.', '.
1028
                    'gsr_id_site_02 = '.$id_site.', '.
1029
                    'gsr_id_valeur = '.$aso_valeurs['type_site_externe'].', '.
1030
                    'gsr_ordre = NULL ';
1031
        $resultat = $db->query($requete);
1032
        if (DB::isError($resultat)) {
1033
            die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));
1034
        }
1035
    }
1036
 
72 jpm 1037
    $message = '<p class="pap_info">'.'Succés de l\'ajout du site.'.'</p>';
6 jpm 1038
    return $message;
1039
}
1040
 
754 ddelon 1041
/** Fonction ADMIN_traduireSite() - Traduire un site papyrus
1042
*
1043
* Cette fonction traduit un site à Papyrus, c'est à dire :
1044
* - 1. Création des répertoire du projet en fonction du nom et des sous-répertoires.
1045
* - 2. Insertion d'une ligne dans la table "gen_site".
1046
* - 3. Insertion d'une ligne dans la table "gen_site_auth" et ses tables liées si nécessaire.
1047
*
1048
* @param  string   l'objet pear de connexion à la base de données.
1049
* @param  string   le tableau contenant les valeurs du formulaire.
1050
* @param  int      identifiant de l'administrateur réalisant cette création.
1051
* @return string retourne un message en cas de succès ou d'échec.
1052
*/
1053
function ADMIN_traduireSite(&$db, $aso_valeurs, $id_admin)
1054
{
1055
    // Nous vérifions si nous avons à faire à un site externe.
1056
    $id_type_site = '102';// par défaut on considére que c'est un site "principal"
1057
    if (isset($aso_valeurs['type_site_externe']) && $aso_valeurs['type_site_externe'] > 0 && !empty($aso_valeurs['gs_url']) && $aso_valeurs['gs_url'] != 'http://') {
1058
        $id_type_site = '103';// c'est un site "externe"
1059
    }
1060
 
1061
    // Ajout des répertoires des sites "principaux" soit par manipulation de fichier soit par FTP en fonction de la constante définie
1062
    // par l'utilisateur dans le fichier de config avancée.
1063
    $tab_rep_langue = array(GEN_DOSSIER_GENERIQUE, $aso_valeurs['gs_ce_i18n']);
1064
    $tab_rep_site = array(  GEN_DOSSIER_IMAGE,
1065
                            GEN_DOSSIER_STYLE,
1066
                            GEN_DOSSIER_SCRIPT,
1067
                            GEN_DOSSIER_SQUELETTE,
1068
                            GEN_DOSSIER_DOC);
1069
    if (!GEN_FTP_UTILISE && $id_type_site != '103') {
1070
        foreach ($tab_rep_langue as $nom_rep_langue) {
1071
            foreach ($tab_rep_site as $nom_rep_site) {
1072
                $chemin_repertoire =    PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.
1073
                                        $nom_rep_langue.GEN_SEP.$nom_rep_site;
1074
                $vieux_umask = umask(0);
1075
                $resultat = creerDossier($chemin_repertoire, 0777, GEN_SEP);
1076
                umask($vieux_umask);
1077
                if ($resultat == false) {
1078
                    $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de créer le répertoire.<br />'.
1079
                                'Répertoire : '. $chemin_repertoire .'<br />'.
1080
                                'Ligne n° : '. __LINE__ .'<br />'.
1081
                                'Fichier n° : '. __FILE__ .'<br /></p>';
1082
                    return $message;
1083
                }
1084
            }
1085
        }
1086
        $chemin_squelette_defaut =  PAP_CHEMIN_RACINE.GEN_CHEMIN_COMMUN.GEN_DOSSIER_GENERIQUE.GEN_SEP.
1087
                                    GEN_DOSSIER_SQUELETTE.GEN_SEP.GEN_FICHIER_SQUELETTE;
1088
        $chemin_squelette_site =    PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.
1089
                                    $aso_valeurs['gs_ce_i18n'].GEN_SEP.GEN_DOSSIER_SQUELETTE.GEN_SEP.GEN_FICHIER_SQUELETTE;
1090
        if (!copy($chemin_squelette_defaut, $chemin_squelette_site)) {
1091
            $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de créer le fichier de squellete par défaut.<br />'.
1092
                        'Fichier : '. $chemin_squelette_site .'<br />'.
1093
                        'Ligne n° : '. __LINE__ .'<br />'.
1094
                        'Fichier n° : '. __FILE__ .'<br /></p>';
1095
            return $message;
1096
        }
1097
        $chemin_style_defaut =  PAP_CHEMIN_RACINE.GEN_CHEMIN_COMMUN.GEN_DOSSIER_GENERIQUE.GEN_SEP.
1098
                                GEN_DOSSIER_STYLE.GEN_SEP.GEN_FICHIER_STYLE;
1099
        $chemin_style_site =    PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.
1100
                                $aso_valeurs['gs_ce_i18n'].GEN_SEP.GEN_DOSSIER_STYLE.GEN_SEP.GEN_FICHIER_STYLE;
1101
        if (!copy($chemin_style_defaut, $chemin_style_site)) {
1102
            $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de créer le fichier de style par défaut.<br />'.
1103
                        'Fichier : '. $chemin_style_site .'<br />'.
1104
                        'Ligne n° : '. __LINE__ .'<br />'.
1105
                        'Fichier n° : '. __FILE__ .'<br /></p>';
1106
            return $message;
1107
        }
1108
    } else if (GEN_FTP_UTILISE && $id_type_site != '103') {  // 103 est le type "site externe"
1109
        // Création d'une connection ftp avec Net_FTP de PEAR
1110
        // voir http://pear.php.net/manual/fr/package.networking.net-ftp.php
1111
 
1112
        // création de l'objet pear ftp
1113
        $objet_pear_ftp = new Net_FTP(PAP_FTP_SERVEUR, PAP_FTP_PORT);
1114
        // création de la connexion
1115
        $ftp_conn = $objet_pear_ftp->connect(PAP_FTP_SERVEUR, PAP_FTP_PORT);
1116
        // identification
1117
        $ftp_login_result = $objet_pear_ftp->login(PAP_FTP_UTILISATEUR, PAP_FTP_MOT_DE_PASSE);
1118
        // Gestion des erreurs ftp
1119
        if ((PEAR::isError($ftp_conn) || PEAR::isError($ftp_login_result))) {
1120
            $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de se connecter par ftp.<br />'.
1121
                        'Serveur : '. PAP_FTP_SERVEUR .'<br />'.
1122
                        'Utilisateur : '. PAP_FTP_UTILISATEUR .'<br />'.
1123
                        'Erreur connexion : '.$ftp_conn->getMessage().'<br />'.
1124
                        'Erreur login : '.$ftp_login_result->getMessage().'<br />'.
1125
                        'Ligne n° : '. __LINE__ .'<br />'.
1126
                        'Fichier n° : '. __FILE__ .'<br /><p>';
1127
            return $message;
1128
        }
1129
        $objet_pear_ftp->mkdir(PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha']) ;
1130
 
1131
        //$objet_pear_ftp->cd(PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha']) ;
1132
        foreach ($tab_rep_langue as $nom_rep_langue) {
1133
            $objet_pear_ftp->mkdir(PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.$nom_rep_langue) ;
1134
            foreach ($tab_rep_site as $nom_rep_site) {
1135
                $chemin_repertoire =    PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.$nom_rep_langue.GEN_SEP.$nom_rep_site;
1136
 
1137
                $resultat = $objet_pear_ftp->mkdir($chemin_repertoire) ;
1138
                if (PEAR::isError($resultat)) {
1139
                    $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de créer le répertoire par ftp.<br />'.
1140
                                'Répertoire : '. $chemin_repertoire .'<br />'.
1141
                                'Erreur origine : '. $resultat->getMessage() .'<br />'.
1142
                                'Ligne n° : '. __LINE__ .'<br />'.
1143
                                'Fichier n° : '. __FILE__ .'<br /></p>';
1144
                    return $message;
1145
                }
1146
            }
1147
        }
1148
        $chemin_squelette_defaut =  PAP_CHEMIN_RACINE.GEN_CHEMIN_COMMUN.GEN_DOSSIER_GENERIQUE.GEN_SEP.
1149
                                    GEN_DOSSIER_SQUELETTE.GEN_SEP.GEN_FICHIER_SQUELETTE;
1150
        $chemin_squelette_site =    PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.
1151
                                    $aso_valeurs['gs_ce_i18n'].GEN_SEP.GEN_DOSSIER_SQUELETTE.GEN_SEP.GEN_FICHIER_SQUELETTE;
1152
        $resultat = $objet_pear_ftp->put($chemin_squelette_defaut, $chemin_squelette_site, true, FTP_BINARY);
1153
        if (PEAR::isError($resultat)) {
1154
            $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de copier le squelette defaut par ftp.<br />'.
1155
                        'Fichier origine : '. $chemin_squelette_defaut .'<br />'.
1156
                        'Fichier copié : '. $chemin_squelette_site .'<br />'.
1157
                        'Erreur origine : '. $resultat->getMessage() .'<br />'.
1158
                        'Ligne n° : '. __LINE__ .'<br />'.
1159
                        'Fichier n° : '. __FILE__ .'<br /></p>';
1160
                return $message;
1161
        }
1162
        $chemin_style_defaut =  PAP_CHEMIN_RACINE.GEN_CHEMIN_COMMUN.GEN_DOSSIER_GENERIQUE.GEN_SEP.
1163
                                GEN_DOSSIER_STYLE.GEN_SEP.GEN_FICHIER_STYLE;
1164
        $chemin_style_site =    PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.
1165
                                $aso_valeurs['gs_ce_i18n'].GEN_SEP.GEN_DOSSIER_STYLE.GEN_SEP.GEN_FICHIER_STYLE;
1166
        $resultat = $objet_pear_ftp->put($chemin_style_defaut, $chemin_style_site, true, FTP_BINARY);
1167
        if (PEAR::isError($resultat)) {
1168
            $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de copier les styles defaut par ftp.<br />'.
1169
                        'Fichier origine : '. $chemin_style_defaut .'<br />'.
1170
                        'Fichier copié : '. $chemin_style_site .'<br />'.
1171
                        'Erreur origine : '. $resultat->getMessage() .'<br />'.
1172
                        'Ligne n° : '. __LINE__ .'<br />'.
1173
                        'Fichier n° : '. __FILE__ .'<br /></p>';
1174
                return $message;
1175
        }
1176
        $objet_pear_ftp->disconnect();
1177
    }
1178
 
1179
    $id_site = SQL_obtenirNouveauId($db, 'gen_site','gs_id_site');
1180
 
1181
    if ($id_site == false) {
1182
        $message = '<p class="erreur"> ERREUR Génésia admin : impossible de récupérer un identifiant pour la table gen_site.<br />'.
1183
                    'Ligne n° : '. __LINE__ .'<br />'.
1184
                    'Fichier n° : '. __FILE__ .'<br /></p>';
1185
        return $message;
1186
    }
1187
 
1188
    // Modification de la requete si nous avons à faire à un site externe.
1189
    $requete_complement = ', gs_url = NULL';
1190
    if (isset($aso_valeurs['type_site_externe']) && $aso_valeurs['type_site_externe'] > 0 && !empty($aso_valeurs['gs_url']) && $aso_valeurs['gs_url'] != 'http://') {
1191
        $requete_complement = ', gs_url = "'.$aso_valeurs['gs_url'].'"';
1192
    }
1193
 
1194
    // Requete d'insertion des infos d'un site dans gen_site
1195
    $requete =  'INSERT INTO gen_site '.
1196
                'SET gs_id_site = '.$id_site.', '.
1197
                'gs_ce_i18n = "'.$aso_valeurs['gs_ce_i18n'].'", '.
1198
                'gs_ce_auth = '.$aso_valeurs['gs_ce_auth'].', '.
1199
                'gs_fichier_squelette = "defaut.html", '.
1200
                'gs_code_num = '.$aso_valeurs['gs_code_num'].', '.
1201
                'gs_code_alpha = "'.$aso_valeurs['gs_code_alpha'].'", '.
1202
                'gs_nom = "'.$aso_valeurs['gs_nom'].'", '.
1203
                'gs_raccourci_clavier = "'.$aso_valeurs['gs_raccourci_clavier'].'", '.
1204
                'gs_titre = "'.$aso_valeurs['gs_titre'].'", '.
1205
                'gs_mots_cles = "'.$aso_valeurs['gs_mots_cles'].'", '.
1206
                'gs_description = "'.$aso_valeurs['gs_description'].'", '.
1207
                'gs_auteur = "'.$aso_valeurs['gs_auteur'].'", '.
1208
                'gs_date_creation = "'.date('Y-m-d H:i:s').'", '.
1209
                'gs_ce_admin = '.$id_admin.
1210
                $requete_complement;
1211
    $resultat = $db->query($requete);
1212
    if (DB::isError($resultat)) {
1213
        die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
1214
    }
1215
 
1216
    // Recherche du nouveau numéro d'ordre de ce site "principal" ou "externe"
1217
    $requete =  'SELECT MAX(gsr_ordre) AS max_ordre '.
1218
                'FROM gen_site_relation '.
1219
                'WHERE gsr_id_site_01 = gsr_id_site_02 '.
1220
                'AND gsr_id_valeur IN (102, 103) ';// 102 = site "principal" et 103 = site "externe"
1221
    $resultat = $db->query($requete) ;
1222
    if (DB::isError($resultat)) {
1223
        die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
1224
    }
1225
    $ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
1226
    $nouvel_ordre = $ligne->max_ordre + 1;
1227
 
1228
    // Requete d'insertion des relations dans gen_site_relation
1229
 
1230
    $requete =  'INSERT INTO gen_site_relation '.
1231
                'SET gsr_id_site_01 = '.$id_site.', '.
1232
                'gsr_id_site_02 = '.$id_site.', '.
1233
                'gsr_id_valeur = '.$id_type_site.', '.
1234
                'gsr_ordre = '.$nouvel_ordre;
1235
    $resultat = $db->query($requete);
1236
    if (DB::isError($resultat)) {
1237
        die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));
1238
    }
1239
 
1240
    // Traduction : Requete d'insertion des relations dans gen_site_relation
1241
 
1242
    $requete =  'SELECT MAX(gsr_ordre) AS max_ordre '.
1243
                'FROM gen_site_relation '.
1244
                'WHERE gsr_id_site_01 = ' .$aso_valeurs['gs_id_site'] .' '.
1245
                'AND gsr_id_valeur =1  '; // 1 = "avoir traduction"
1246
    $resultat = $db->query($requete) ;
1247
    if (DB::isError($resultat)) {
1248
        die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
1249
    }
1250
    if ( $resultat->numRows() == 0 ) {
1251
	      $nouvel_ordre = 1;
1252
    }
1253
    else {
1254
    	$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
1255
    	$nouvel_ordre = $ligne->max_ordre + 1;
1256
    }
1257
 
1258
    // 1 : insertion information traduction pere (si inexistant)
1259
 
1260
    $requete =  'SELECT * '.
1261
                'FROM gen_site_relation '.
1262
                'WHERE gsr_id_site_01 = ' .$aso_valeurs['gs_id_site'] .' '.
1263
                'AND gsr_id_site_01 = gsr_id_site_02 '.
1264
                'AND gsr_id_valeur =1  '; // 1 = "avoir traduction"
1265
 
1266
    $resultat = $db->query($requete) ;
1267
    if (DB::isError($resultat)) {
1268
        die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
1269
    }
1270
    if ( $resultat->numRows() == 0 ) {
1271
 
1272
		$requete =  'INSERT INTO gen_site_relation '.
1273
		            'SET gsr_id_site_01 = '. $aso_valeurs['gs_id_site'].', '.
1274
		            'gsr_id_site_02 = '.$aso_valeurs['gs_id_site'].', '.
1275
		            'gsr_id_valeur = 1, '. // 1 = "avoir traduction"
1276
		            'gsr_ordre = 1 ';
1277
		$resultat = $db->query($requete);
1278
		if (DB::isError($resultat)) {
1279
		    die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));
1280
		}
1281
		$nouvel_ordre = 2;
1282
    }
1283
 
1284
 
1285
    // 2 : insertion information traduction site en cours (si inexistant ?) (et la mise a jour, c'est ailleurs
1286
    // dans les mises à jour
1287
 
1288
    $requete =  'INSERT INTO gen_site_relation '.
1289
                'SET gsr_id_site_01 = '. $aso_valeurs['gs_id_site'].', '.
1290
                'gsr_id_site_02 = '.$id_site.', '.
1291
                'gsr_id_valeur = 1, '. // 1 = "avoir traduction"
1292
                'gsr_ordre = '.$nouvel_ordre;
1293
    $resultat = $db->query($requete);
1294
    if (DB::isError($resultat)) {
1295
        die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));
1296
    }
1297
 
1298
 
1299
    // Gestion du site par défaut
1300
    if (isset($aso_valeurs['defaut']) && $aso_valeurs['defaut'] == 1) {
1301
        $requete_supr_defaut =  'DELETE FROM gen_site_relation '.
1302
                                'WHERE gsr_id_site_01 = gsr_id_site_02 '.
1303
                                'AND gsr_id_valeur = 101 ';// 101 = site par "defaut"
1304
        $resultat_supr_defaut = $db->query($requete_supr_defaut);
1305
        if (DB::isError($resultat_supr_defaut)) {
1306
            die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_supr_defaut->getMessage(), $requete_supr_defaut));
1307
        }
1308
 
1309
        // Requete d'insertion de la relations site par défaut
1310
        $requete =  'INSERT INTO gen_site_relation '.
1311
                    'SET gsr_id_site_01 = '.$id_site.', '.
1312
                    'gsr_id_site_02 = '.$id_site.', '.
1313
                    'gsr_id_valeur = 101, '.
1314
                    'gsr_ordre = NULL ';
1315
        $resultat = $db->query($requete);
1316
        if (DB::isError($resultat)) {
1317
            die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));
1318
        }
1319
    }
1320
 
1321
    // Gestion des sites externes
1322
    if ($id_type_site == '103') {
1323
        // Requete d'insertion des relations dans gen_site_relation
1324
        $requete =  'INSERT INTO gen_site_relation '.
1325
                    'SET gsr_id_site_01 = '.$id_site.', '.
1326
                    'gsr_id_site_02 = '.$id_site.', '.
1327
                    'gsr_id_valeur = '.$aso_valeurs['type_site_externe'].', '.
1328
                    'gsr_ordre = NULL ';
1329
        $resultat = $db->query($requete);
1330
        if (DB::isError($resultat)) {
1331
            die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));
1332
        }
1333
    }
1334
 
1335
    $message = '<p class="pap_info">'.'Succés de l\'ajout du site.'.'</p>';
1336
    return $message;
1337
}
1338
 
1339
 
6 jpm 1340
/** Fonction ADMIN_modifierSite() - Modifie un site de Papyrus.
1341
*
1342
* Cette fonction modifie un site géré par Papyrus.
1343
* Il faudrait aussi pouvoir renomer le dossier du site si le code alpha change.
1344
*
1345
* @param  string   l'objet pear de connexion à la base de données.
1346
* @param  string   le tableau contenant les valeurs du formulaire.
1347
* @param  int      identifiant de l'administrateur réalisant cette modification.
1348
* @return string retourne un message en cas de succès ou d'échec.
1349
*/
327 jpm 1350
function ADMIN_modifierSite(&$db, $aso_valeurs, $id_admin)
6 jpm 1351
{
195 jpm 1352
    // Initialisation de variables
1353
    $message_complement = '';
1354
 
75 jpm 1355
    // Récupération de l'ancien code alphanumérique
1356
    $requete =  'SELECT gs_code_alpha '.
1357
                'FROM gen_site '.
1358
                'WHERE gs_id_site = '.$aso_valeurs['gs_id_site'];
1359
    $ancien_code_alphnum = $db->getOne($requete);
1360
    if (DB::isError($ancien_code_alphnum)) {
1361
        die( BOG_afficherErreurSql(__FILE__, __LINE__, $ancien_code_alphnum->getMessage(), $requete) );
1362
    }
115 jpm 1363
 
1364
    // Nous vérifions si nous avons à faire à un site externe.
1365
    $id_type_site = '102';// par défaut on conscidére que c'est un site "principal"
201 jpm 1366
    $requete_complement = ', gs_url = NULL ';
205 jpm 1367
    if (isset($aso_valeurs['type_site_externe']) && $aso_valeurs['type_site_externe'] > 0 && !empty($aso_valeurs['gs_url']) && $aso_valeurs['gs_url'] != 'http://') {
201 jpm 1368
        $requete_complement = ', gs_url = "'.$aso_valeurs['gs_url'].'" ';
115 jpm 1369
        $id_type_site = '103';// c'est un site "externe"
1370
    }
1371
 
1372
    // Si le code alphanumérique à changé et que nous n'avons pas à faire à un site externe.
239 alex 1373
    if ($aso_valeurs['gs_code_alpha'] != $ancien_code_alphnum && $id_type_site != 103) {
75 jpm 1374
        if (!GEN_FTP_UTILISE) {
1375
            $chemin_site_ancien = PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$ancien_code_alphnum.GEN_SEP;
1376
            $chemin_site_nouveau = PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP;
1377
            if (!rename($chemin_site_ancien, $chemin_site_nouveau)) {
1378
                $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de changer le nom du dossier du site.<br />'.
1379
                            'Ancien nom : '. $chemin_site_ancien .'<br />'.
1380
                            'Nouveau nom : '. $chemin_site_nouveau .'<br />'.
1381
                            'Ligne n° : '. __LINE__ .'<br />'.
1382
                            'Fichier n° : '. __FILE__ .'<br /></p>';
1383
                return $message;
1384
            }
1385
        } else {
1386
            $chemin_site_ancien = PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$ancien_code_alphnum.GEN_SEP;
1387
            $chemin_site_nouveau = PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP;
1388
            // Création d'une connection ftp avec Net_FTP de PEAR
1389
            // voir http://pear.php.net/manual/fr/package.networking.net-ftp.php
1390
            // création de l'objet pear ftp
1391
            $objet_pear_ftp = new Net_FTP(PAP_FTP_SERVEUR, PAP_FTP_PORT);
1392
            // création de la connexion
1393
            $ftp_conn = $objet_pear_ftp->connect(PAP_FTP_SERVEUR, PAP_FTP_PORT);
1394
            // identification
1395
            $ftp_login_result = $objet_pear_ftp->login(PAP_FTP_UTILISATEUR, PAP_FTP_MOT_DE_PASSE);
1396
            // Gestion des erreurs ftp
1397
            if ((PEAR::isError($ftp_conn) || PEAR::isError($ftp_login_result))) {
1398
                $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de se connecter par ftp.<br />'.
1399
                            'Serveur : '. PAP_FTP_SERVEUR .'<br />'.
1400
                            'Utilisateur : '. PAP_FTP_UTILISATEUR .'<br />'.
1401
                            'Erreur connexion : '.$ftp_conn->getMessage().'<br />'.
1402
                            'Erreur login : '.$ftp_login_result->getMessage().'<br />'.
1403
                            'Ligne n° : '. __LINE__ .'<br />'.
1404
                            'Fichier n° : '. __FILE__ .'<br /><p>';
1405
                return $message;
1406
            }
1407
            $resultat = $objet_pear_ftp->putRecursive($chemin_site_ancien, $chemin_site_nouveau, false, FTP_BINARY);
1408
            if (PEAR::isError($resultat)) {
1409
                $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de copier l\'ancien dossier du site.<br />'.
1410
                            'Dossier site ancien : '. $chemin_site_ancien .'<br />'.
1411
                            'Dossier site nouveau : '. $chemin_site_nouveau .'<br />'.
1412
                            'Erreur origine : '. $resultat->getMessage() .'<br />'.
1413
                            'Ligne n° : '. __LINE__ .'<br />'.
1414
                            'Fichier n° : '. __FILE__ .'<br /></p>';
1415
                    return $message;
1416
            }
1417
            // On utilise la racine FTP pour rm
1418
            $chemin_site_ancien = PAP_FTP_RACINE.GEN_CHEMIN_SITES.$ancien_code_alphnum.GEN_SEP;
1419
            // Changement du niveau d'erreur pour éviter les Notices PHP dues à Net_FTP
1420
            error_reporting(E_PARSE);
1421
            $resultat = $objet_pear_ftp->rm($chemin_site_ancien, true);
1422
            if (PEAR::isError($resultat)) {
1423
                $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de supprimer l\'ancien dossier du site.<br />'.
1424
                            'Dossier site ancien : '. $chemin_site_ancien .'<br />'.
1425
                            'Erreur origine : '. $resultat->getMessage() .'<br />'.
1426
                            'Ligne n° : '. __LINE__ .'<br />'.
1427
                            'Fichier n° : '. __FILE__ .'<br /></p>';
1428
                    return $message;
1429
            }
1430
            // Retour au niveau d'erreur définit dans le fichier de config de Papyrus
1431
            error_reporting(GEN_DEBOGAGE_NIVEAU);
1432
            $objet_pear_ftp->disconnect();
1433
        }
1434
    }
115 jpm 1435
 
6 jpm 1436
    // Requete de mise à jour des infos d'un site dans gen_site
1437
    $requete =  'UPDATE gen_site '.
1438
                'SET gs_ce_i18n = "'.$aso_valeurs['gs_ce_i18n'].'", '.
1439
                'gs_ce_auth = '.$aso_valeurs['gs_ce_auth'].', '.
1440
                'gs_fichier_squelette = "'.$aso_valeurs['gs_fichier_squelette'].'", '.
1441
                'gs_code_num = '.$aso_valeurs['gs_code_num'].', '.
1442
                'gs_code_alpha = "'.$aso_valeurs['gs_code_alpha'].'", '.
1443
                'gs_nom = "'.$aso_valeurs['gs_nom'].'", '.
1444
                'gs_raccourci_clavier = "'.$aso_valeurs['gs_raccourci_clavier'].'", '.
1445
                'gs_titre = "'.$aso_valeurs['gs_titre'].'", '.
1446
                'gs_mots_cles = "'.$aso_valeurs['gs_mots_cles'].'", '.
1447
                'gs_description = "'.$aso_valeurs['gs_description'].'", '.
1448
                'gs_auteur = "'.$aso_valeurs['gs_auteur'].'", '.
386 jpm 1449
                'gs_date_creation = "'.$aso_valeurs['gs_date_creation'].'", '.
6 jpm 1450
                'gs_ce_admin = '.$id_admin.' '.
201 jpm 1451
                $requete_complement.
6 jpm 1452
                'WHERE gs_id_site = '.$aso_valeurs['gs_id_site'];
1453
    $resultat = $db->query($requete) ;
1454
    if (DB::isError($resultat)) {
1455
        die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
1456
    }
115 jpm 1457
    // Gestion du site externe
1458
    if ($id_type_site == 103) {
1459
        // Vérification pour voir si nous avons à faire à une transformation d'un site "principal" en site "externe"
1460
        $requete =  'SELECT COUNT(gsr_id_site_01) AS nbre_relation '.
1461
                    'FROM gen_site_relation '.
1462
                    'WHERE gsr_id_site_01 = gsr_id_site_02 '.
1463
                    'AND gsr_id_site_01 = '.$aso_valeurs['gs_id_site'].' '.
1464
                    'AND gsr_id_valeur = 102 ';// 102 = site "principal"
1465
        $nbre_relation = $db->getOne($requete);
1466
        if (DB::isError($nbre_relation)) {
1467
            die( BOG_afficherErreurSql(__FILE__, __LINE__, $nbre_relation->getMessage(), $requete) );
1468
        }
1469
 
1470
        // Nous supprimons l'ancienne relation si nécessaire
1471
        if ($nbre_relation >= 1) {
1472
            $requete_supr_ext = 'DELETE FROM gen_site_relation '.
1473
                                'WHERE gsr_id_site_01 = gsr_id_site_02 '.
1474
                                'AND gsr_id_site_01 = '.$aso_valeurs['gs_id_site'].' '.
1475
                                'AND gsr_id_valeur = 102 ';// 102 = site "principal"
1476
            $resultat_supr_ext = $db->query($requete_supr_ext);
1477
            if (DB::isError($resultat_supr_ext)) {
1478
                die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_supr_ext->getMessage(), $requete_supr_ext));
1479
            }
1480
            $message_complement =   'Le site "principal" a été transformé en site "externe". Si nécessaire, veuillez '.
1481
                                    'supprimer manuellement par FTP, le dossier contenant les fichiers de ce site sur '.
1482
                                    'le serveur!';
1483
        }
1484
 
201 jpm 1485
        // Vérification pour voir si le site est déjà "externe"
1486
        $requete =  'SELECT COUNT(gsr_id_site_01) AS nbre_relation '.
1487
                    'FROM gen_site_relation '.
1488
                    'WHERE gsr_id_site_01 = gsr_id_site_02 '.
1489
                    'AND gsr_id_site_01 = '.$aso_valeurs['gs_id_site'].' '.
1490
                    'AND gsr_id_valeur = 103 ';// 103 = site "externe"
1491
        $nbre_relation = $db->getOne($requete);
1492
        if (DB::isError($nbre_relation)) {
1493
            die( BOG_afficherErreurSql(__FILE__, __LINE__, $nbre_relation->getMessage(), $requete) );
115 jpm 1494
        }
201 jpm 1495
        if ($nbre_relation == 0) {
1496
            // Requete d'insertion de la relations site "externe"
1497
            $requete =  'INSERT INTO gen_site_relation '.
1498
                        'SET gsr_id_site_01 = '.$aso_valeurs['gs_id_site'].', '.
1499
                        'gsr_id_site_02 = '.$aso_valeurs['gs_id_site'].', '.
1500
                        'gsr_id_valeur = '.$id_type_site.', '.
1501
                        'gsr_ordre = NULL ';
1502
            $resultat = $db->query($requete);
1503
            if (DB::isError($resultat)) {
1504
                die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));
1505
            }
1506
        }
205 jpm 1507
 
1508
        // Ajout du type de site externe
1509
        $requete =  'INSERT INTO gen_site_relation '.
1510
                    'SET gsr_id_site_01 = '.$aso_valeurs['gs_id_site'].', '.
1511
                    'gsr_id_site_02 = '.$aso_valeurs['gs_id_site'].', '.
1512
                    'gsr_id_valeur = '.$aso_valeurs['type_site_externe'].', '.
1513
                    'gsr_ordre = NULL ';
1514
        $resultat = $db->query($requete);
1515
        if (DB::isError($resultat)) {
1516
            die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));
1517
        }
1518
 
115 jpm 1519
    }
6 jpm 1520
 
115 jpm 1521
    // Gestion du site par défaut
6 jpm 1522
    if (isset($aso_valeurs['defaut']) && $aso_valeurs['defaut'] == 1) {
1523
        $requete_supr_defaut =  'DELETE FROM gen_site_relation '.
1524
                                'WHERE gsr_id_site_01 = gsr_id_site_02 '.
1525
                                'AND gsr_id_valeur = 101 ';// 101 = site par "defaut"
1526
        $resultat_supr_defaut = $db->query($requete_supr_defaut);
1527
        if (DB::isError($resultat_supr_defaut)) {
1528
            die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_supr_defaut->getMessage(), $requete_supr_defaut));
1529
        }
1530
 
1531
        // Requete d'insertion de la relations site par défaut
1532
        $requete =  'INSERT INTO gen_site_relation '.
1533
                    'SET gsr_id_site_01 = '.$aso_valeurs['gs_id_site'].', '.
1534
                    'gsr_id_site_02 = '.$aso_valeurs['gs_id_site'].', '.
1535
                    'gsr_id_valeur = 101, '.
1536
                    'gsr_ordre = NULL ';
1537
        $resultat = $db->query($requete);
1538
        if (DB::isError($resultat)) {
1539
            die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));
1540
        }
1541
    }
115 jpm 1542
 
1543
    $message = '<p class="pap_info">'.'Succés de la modification du site.'.'</p>';
1544
    $message .= '<p class="pap_info">'.$message_complement.'</p>';
6 jpm 1545
    return $message;
1546
}
1547
 
1548
/** Fonction ADMIN_supprimerSite() - Ajoute un site à Papyrus.
1549
*
1550
* Cette fonction ajoute le site à Papyrus, c'est à dire :
1551
* - 1. Création des répertoire du projet en fonction du nom et des sous-répertoires.
1552
* - 2. Insertion d'une ligne dans la table "gen_site".
1553
* - 3. Insertion d'une ligne dans la table "gen_site_auth" et ses tables liées si nécessaire.
1554
*
1555
* @param  string   l'objet pear de connexion à la base de données.
1556
* @param  string   le tableau contenant les valeurs du formulaire.
1557
* @param  int      identifiant de l'administrateur réalisant cette création.
1558
* @return string retourne un message en cas de succès ou d'échec.
1559
*/
327 jpm 1560
function ADMIN_supprimerSite(&$db, $aso_valeurs)
6 jpm 1561
{
1562
    // Recherche du coda alpha du site principal afin de pouvoir détruire ses répertoires
1563
    $requete =  'SELECT gs_code_alpha '.
1564
                'FROM gen_site '.
1565
                'WHERE gs_id_site = '.$aso_valeurs['form_sites_id_site'];
1566
    $code_alpha_site_principal = $db->getOne($requete);
1567
    if (DB::isError($code_alpha_site_principal)) {
1568
        die(BOG_afficherErreurSql(__FILE__, __LINE__, $code_alpha_site_principal->getMessage(), $requete));
1569
    }
1570
 
75 jpm 1571
    // Nous vérifions que le site n'a pas le code alphanum correspondant au site par défaut d'administration (admin).
1572
    if ($code_alpha_site_principal == GEN_SITE_DEFAUT) {
1573
        $message =  '<p class="pap_erreur">Si vous voulez vraiment supprimer le site d\'administration par défaut de '.
1574
                    'Papyrus, veuillez commencer par changer la valeur de son code alphanumérique. Vous pourrez '.
1575
                    'ensuite le supprimer via cette interface.</p>';
1576
        return $message;
1577
    }
1578
 
6 jpm 1579
    // Recherche des différents sites liés à celui que l'on veut détruire
1580
    // Cela comprend le site à détruire lui méme car il posséde la relations
1581
    // sur lui meme "site principale".
1582
    $requete =  'SELECT gs_id_site '.
1583
                'FROM gen_site, gen_site_relation '.
1584
                'WHERE gsr_id_site_01 = '.$aso_valeurs['form_sites_id_site'].' '.
1585
                'AND gsr_id_site_02 = gs_id_site ';
1586
    $resultat = $db->query($requete);
1587
    if (DB::isError($resultat)) {
1588
        die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));
1589
    }
1590
 
1591
    while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
1592
        // Requete de suppression des sites liés dans gen_site
1593
        $requete_supr_site =    'DELETE FROM gen_site '.
1594
                                'WHERE gs_id_site = '.$ligne->gs_id_site;
1595
        $resultat_supr_site = $db->query($requete_supr_site);
1596
        if (DB::isError($resultat_supr_site)) {
1597
            die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_supr_site->getMessage(), $requete_supr_site));
1598
        }
1599
 
1600
        // Requete de suppression des relations des sites à détruire
1601
        $requete_supr_site_relation =   'DELETE FROM gen_site_relation '.
1602
                                        'WHERE gsr_id_site_01 = '.$ligne->gs_id_site;
1603
        $resultat_supr_site_relation = $db->query($requete_supr_site_relation);
1604
        if (DB::isError($resultat_supr_site_relation)) {
1605
            die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_supr_site_relation->getMessage(), $requete_supr_site_relation));
1606
        }
1607
 
1608
        // Recherche des différents menus liés au site à détruire
1609
        $requete_menu = 'SELECT gm_id_menu '.
1610
                        'FROM gen_menu '.
1611
                        'WHERE gm_ce_site = '.$ligne->gs_id_site;
1612
        $resultat_menu = $db->query($requete_menu) ;
1613
        if (DB::isError($resultat_menu)) {
1614
            die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_menu->getMessage(), $requete_menu));
1615
        }
1616
        while ($ligne_menu = $resultat_menu->fetchRow(DB_FETCHMODE_OBJECT)) {
1617
            // Requete de suppression des des menus
1618
            $requete_supr_menu =   'DELETE FROM gen_menu '.
1619
                                            'WHERE gm_id_menu = '.$ligne_menu->gm_id_menu;
1620
            $resultat_supr_menu = $db->query($requete_supr_menu);
1621
            if (DB::isError($resultat_supr_menu)) {
1622
                die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_supr_menu->getMessage(), $requete_supr_menu));
1623
            }
1624
            // Requete de suppression des relations des menus
1625
            $requete_supr_menu_relation =   'DELETE FROM gen_menu_relation '.
1626
                                            'WHERE gmr_id_menu_01 = '.$ligne_menu->gm_id_menu;
1627
            $resultat_supr_menu_relation = $db->query($requete_supr_menu_relation);
1628
            if (DB::isError($resultat_supr_menu_relation)) {
1629
                die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_supr_menu_relation->getMessage(), $requete_supr_menu_relation));
1630
            }
1631
 
1632
            // Requete de suppression des contenus des menus
1633
            $requete_supr_menu_contenu =   'DELETE FROM gen_menu_contenu '.
1634
                                            'WHERE gmc_ce_menu = '.$ligne_menu->gm_id_menu;
1635
            $resultat_supr_menu_contenu = $db->query($requete_supr_menu_contenu);
1636
            if (DB::isError($resultat_supr_menu_contenu)) {
1637
                die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_supr_menu_contenu->getMessage(), $requete_supr_menu_contenu));
1638
            }
1639
 
1640
            // Requete de suppression des ulr alternatives des menus
1641
            $requete_supr_menu_url_alt =   'DELETE FROM gen_menu_url_alternative '.
1642
                                            'WHERE gmua_ce_menu = '.$ligne_menu->gm_id_menu;
1643
            $resultat_supr_menu_url_alt = $db->query($requete_supr_menu_url_alt);
1644
            if (DB::isError($resultat_supr_menu_url_alt)) {
1645
                die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_supr_menu_url_alt->getMessage(), $requete_supr_menu_url_alt));
1646
            }
1647
        }
1648
        $resultat_menu->free();
1649
    }
1650
    $resultat->free();
1651
 
1652
    // Suppression des répertoires du site
75 jpm 1653
    if (!GEN_FTP_UTILISE) {
72 jpm 1654
        $chemin_repertoire = PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$code_alpha_site_principal;
1655
        $resultat = supprimerDossier($chemin_repertoire, GEN_SEP);
1656
        if (!$resultat) {
1657
            $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de supprimer le répertoire.<br />'.
1658
                        'Répertoire : '. $chemin_repertoire .'<br />'.
1659
                        'Ligne n° : '. __LINE__ .'<br />'.
1660
                        'Fichier n° : '. __FILE__ .'<br /></p>';
1661
            return $message;
1662
        }
1663
    } else {
1664
        // Création d'une connection ftp avec Net_FTP de PEAR
1665
        // voir http://pear.php.net/manual/fr/package.networking.net-ftp.php
1666
 
1667
        // création de l'objet pear ftp
1668
        $objet_pear_ftp = new Net_FTP(PAP_FTP_SERVEUR, PAP_FTP_PORT);
1669
        // création de la connexion
1670
        $ftp_conn = $objet_pear_ftp->connect(PAP_FTP_SERVEUR, PAP_FTP_PORT);
1671
        // identification
75 jpm 1672
        $ftp_login_result = $objet_pear_ftp->login(PAP_FTP_UTILISATEUR, PAP_FTP_MOT_DE_PASSE);
72 jpm 1673
        // Gestion des erreurs ftp
1674
        if ((PEAR::isError($ftp_conn) || PEAR::isError($ftp_login_result))) {
1675
            $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de se connecter par ftp.<br />'.
1676
                        'Erreur connexion : '.$ftp_conn->getMessage().'<br />'.
1677
                        'Erreur login : '.$ftp_login_result->getMessage().'<br />'.
1678
                        'Serveur : '. PAP_FTP_SERVEUR .'<br />'.
1679
                        'Utilisateur : '. PAP_FTP_UTILISATEUR .'<br />'.
1680
                        'Ligne n° : '. __LINE__ .'<br />'.
1681
                        'Fichier n° : '. __FILE__ .'<br /><p>';
1682
            return $message;
1683
        }
1684
        // Changement du niveau d'erreur pour éviter les Notices PHP dues à  Net_FTP
1685
        error_reporting(E_PARSE);
1686
        $chemin_repertoire = PAP_FTP_RACINE.GEN_CHEMIN_SITES.$code_alpha_site_principal.'/';
1687
        $resultat = $objet_pear_ftp->rm($chemin_repertoire, true);
1688
        if (PEAR::isError($resultat)) {
1689
            $message =  '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de supprimer le répertoire par ftp.<br />'.
1690
                        'Erreur ftp : '.$resultat->getMessage().'<br />'.
1691
                        'Répertoire : '. $chemin_repertoire .'<br />'.
1692
                        'Ligne n° : '. __LINE__ .'<br />'.
1693
                        'Fichier n° : '. __FILE__ .'<br /></p>';
1694
            return $message;
1695
        }
1696
        $objet_pear_ftp->disconnect();
1697
        // Retour au niveau d'erreur définit dans le fichier de config de Papyrus
1698
        error_reporting(GEN_DEBOGAGE_NIVEAU);
6 jpm 1699
    }
72 jpm 1700
    $message = '<p class="pap_info">Succés de la suppression du site.</p>';
6 jpm 1701
    return $message;
1702
}
1703
 
1704
// +- Fin du code source  --------------------------------------------------------------------------------+
1705
/*
1706
* $Log: not supported by cvs2svn $
754 ddelon 1707
* Revision 1.25.2.2  2006/02/28 14:02:10  ddelon
1708
* Finition multilinguisme
1709
*
1710
* Revision 1.25.2.1  2006/01/19 21:26:20  ddelon
1711
* Multilinguisme site + bug ftp
1712
*
1713
* Revision 1.25  2005/10/17 13:48:59  jp_milcent
1714
* Ajout d'un espace après le texte "Dernière modification par".
1715
*
546 jp_milcent 1716
* Revision 1.24  2005/09/23 14:32:54  florian
1717
* compatibilité XHTML + correction interface
1718
*
460 florian 1719
* Revision 1.23  2005/09/20 17:01:22  ddelon
1720
* php5 et bugs divers
1721
*
443 ddelon 1722
* Revision 1.22  2005/05/27 16:06:16  jpm
1723
* Gestion des infos sur l'admin modifiant les infos.
1724
*
386 jpm 1725
* Revision 1.21  2005/04/08 13:29:04  jpm
1726
* Utiliation de références.
1727
* Correction du double &amp; dans les urls du formulaire.
1728
*
327 jpm 1729
* Revision 1.20  2005/03/08 11:17:47  jpm
1730
* Suppression de l'inclusion d'un fichier inutile.
1731
*
298 jpm 1732
* Revision 1.19  2005/02/28 11:07:00  jpm
1733
* Modification des auteurs.
1734
*
285 jpm 1735
* Revision 1.18  2005/02/28 10:59:07  jpm
1736
* Modification des commentaires et copyright.
1737
*
282 jpm 1738
* Revision 1.17  2005/02/17 17:51:11  florian
1739
* Correction bug FTP
1740
*
261 florian 1741
* Revision 1.16  2005/02/17 16:44:55  florian
1742
* correction du bug sur les sites par défaut
1743
*
257 florian 1744
* Revision 1.15  2005/01/04 19:52:50  alex
1745
* correction de bug de copie de répertoire récursif de PEAR.
1746
*
239 alex 1747
* Revision 1.14  2004/12/03 19:22:53  jpm
1748
* Gestion des types de sites externes gérés par Papyrus.
1749
*
205 jpm 1750
* Revision 1.13  2004/12/03 16:37:34  jpm
1751
* Correction d'un bogue qui empécher la mise à jour des url des sites externes.
1752
*
201 jpm 1753
* Revision 1.12  2004/12/01 17:22:58  jpm
1754
* Ajout d'une confirmation javascript pour la suppression d'un site.
1755
*
198 jpm 1756
* Revision 1.11  2004/11/30 16:43:51  jpm
1757
* Correction de bogues.
1758
*
195 jpm 1759
* Revision 1.10  2004/11/29 17:05:28  jpm
1760
* Correction d'un bogue concernat les cases à cocher.
1761
*
190 jpm 1762
* Revision 1.9  2004/11/26 13:13:51  jpm
1763
* Mise en commentaire de variable passée dans un message d'erreur car elles semblent provoquer un bogue et ne sont pas obligatoire.
1764
*
183 jpm 1765
* Revision 1.8  2004/11/03 17:59:59  jpm
1766
* Corrections bogues erreurs variable inconnue.
1767
*
123 jpm 1768
* Revision 1.7  2004/10/26 18:41:28  jpm
1769
* Gestion des sites externes à Papyrus.
1770
*
115 jpm 1771
* Revision 1.6  2004/10/22 17:25:31  jpm
1772
* Changement du nom de la class CSS d'erreur.
1773
*
96 jpm 1774
* Revision 1.5  2004/10/19 15:57:55  jpm
1775
* Amélioration de la gestion des fichiers sur le serveur.
1776
* Ajout d'une contrainte pour éviter la suppression par erreur du site par défaut.
1777
*
75 jpm 1778
* Revision 1.4  2004/10/18 18:27:41  jpm
1779
* Correction problèmes FTP et manipulation de fichiers.
1780
*
72 jpm 1781
* Revision 1.3  2004/09/23 16:51:27  jpm
1782
* Ajout d'informations supplémentaires sur les messages d'erreur.
1783
*
55 jpm 1784
* Revision 1.2  2004/07/06 17:08:01  jpm
1785
* Modification de la documentation pour une mailleur analyse par PhpDocumentor.
1786
*
25 jpm 1787
* Revision 1.1  2004/06/16 14:28:46  jpm
1788
* Changement de nom de Génésia en Papyrus.
1789
* Changement de l'arborescence.
1790
*
6 jpm 1791
* Revision 1.20  2004/05/10 14:32:14  jpm
1792
* Changement du titre.
1793
*
1794
* Revision 1.19  2004/05/10 12:23:39  jpm
1795
* Modification formulaire.
1796
*
1797
* Revision 1.18  2004/05/07 16:33:53  jpm
1798
* Amélioration des formulaires.
1799
*
1800
* Revision 1.17  2004/05/07 07:22:51  jpm
1801
* Ajout de la gestion des modification et suppression de site.
1802
* Amélioration de la création des sites.
1803
*
1804
* Revision 1.16  2004/04/30 16:22:53  jpm
1805
* Poursuite de l'administration des sites.
1806
*
1807
* Revision 1.14  2004/04/02 15:58:39  jpm
1808
* Modification fonction liste des projets.
1809
*
1810
* Revision 1.13  2004/04/01 11:21:41  jpm
1811
* Ajout et modification de commentaires pour PhpDocumentor.
1812
*
1813
* Revision 1.12  2004/03/24 20:01:02  jpm
1814
* Traduction, mise en forme, ajout de commentaire pour les fonctions listProjects() et updateProject().
1815
*
1816
* Revision 1.11  2004/03/24 10:06:01  jpm
1817
* Ajout des commentaires d'entête.
1818
* Début mise en conformité avec la convention de codage.
1819
* Début traitement de la fonction listant les projets.
1820
*
1821
*
1822
*/
1823
?>