Subversion Repositories Applications.papyrus

Rev

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