Subversion Repositories Applications.papyrus

Rev

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