Subversion Repositories Applications.papyrus

Rev

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