Subversion Repositories Applications.papyrus

Rev

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