Subversion Repositories Applications.papyrus

Rev

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