Subversion Repositories Applications.papyrus

Rev

Rev 466 | Rev 767 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 466 Rev 754
Line 17... Line 17...
17
// |                                                                                                      |
17
// |                                                                                                      |
18
// | You should have received a copy of the GNU Lesser General Public                                     |
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                                  |
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                            |
20
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                            |
21
// +------------------------------------------------------------------------------------------------------+
21
// +------------------------------------------------------------------------------------------------------+
22
// CVS : $Id: menu.php,v 1.22 2005-09-27 08:42:49 ddelon Exp $
22
// CVS : $Id: menu.php,v 1.23 2006-03-02 10:49:49 ddelon Exp $
23
/**
23
/**
24
* Applette : menu
24
* Applette : menu
25
*
25
*
26
* Génère une liste de listes comportant tous les niveaux des menus "classiques" d'un site.
26
* Génère une liste de listes comportant tous les niveaux des menus "classiques" d'un site.
27
* Nécessite :
27
* Nécessite :
Line 36... Line 36...
36
//Auteur original :
36
//Auteur original :
37
*@author        Jean-Pascal MILCENT <jpm@tela-botanica.org>
37
*@author        Jean-Pascal MILCENT <jpm@tela-botanica.org>
38
//Autres auteurs :
38
//Autres auteurs :
39
*@author        Aucun
39
*@author        Aucun
40
*@copyright     Tela-Botanica 2000-2004
40
*@copyright     Tela-Botanica 2000-2004
41
*@version       $Revision: 1.22 $ $Date: 2005-09-27 08:42:49 $
41
*@version       $Revision: 1.23 $ $Date: 2006-03-02 10:49:49 $
42
// +------------------------------------------------------------------------------------------------------+
42
// +------------------------------------------------------------------------------------------------------+
43
*/
43
*/
Line 44... Line 44...
44
 
44
 
45
// +------------------------------------------------------------------------------------------------------+
45
// +------------------------------------------------------------------------------------------------------+
Line 77... Line 77...
77
    $id_site = $_GEN_commun['info_site']->gs_id_site;
77
    $id_site = $_GEN_commun['info_site']->gs_id_site;
78
    if (isset($_GEN_commun['info_menu'])) {
78
    if (isset($_GEN_commun['info_menu'])) {
79
    	$id_menu = $_GEN_commun['info_menu']->gm_id_menu;
79
    	$id_menu = $_GEN_commun['info_menu']->gm_id_menu;
80
    }
80
    }
81
    $num_menu = $GLOBALS['_PAPYRUS_']['applette']['comptage'][$GLOBALS['_MENU_']['nom_fonction']];
81
    $num_menu = $GLOBALS['_PAPYRUS_']['applette']['comptage'][$GLOBALS['_MENU_']['nom_fonction']];
82
    $id_langue = $_GEN_commun['i18n'];
-
 
83
    $i18n_url = '';// Evite d'écrire l'i18n dans l'url demandée.
-
 
84
    if (!empty($_GEN_commun['url_i18n'])) {
-
 
85
        // L'écriture de l'i18n dans les urls des menus est demandée.
-
 
86
        $i18n_url = $_GEN_commun['url_i18n'];
-
 
87
    }
82
    
88
    $indent_origine = 12;// Indentation de départ en nombre d'espace
83
    $indent_origine = 12;// Indentation de départ en nombre d'espace
89
    $indent_pas     = 4;// Pas d'indentation en nombre d'espace
84
    $indent_pas     = 4;// Pas d'indentation en nombre d'espace
90
    $niveau_depart    = 1;
85
    $niveau_depart    = 1;
Line 91... Line 86...
91
    
86
    
Line 182... Line 177...
182
    // Initialisation des variables
177
    // Initialisation des variables
183
    static $niveau_actuel = 1;
178
    static $niveau_actuel = 1;
184
    $retour = '';
179
    $retour = '';
185
    $tete = '';
180
    $tete = '';
186
    $corps = '';
181
    $corps = '';
187
    $pied = '';
182
    $pied = '';
-
 
183
    $id_langue = $_GEN_commun['i18n'];//identifiant de la langue choisie
-
 
184
    
-
 
185
    if ($id_langue != GEN_I18N_ID_DEFAUT) {
-
 
186
    	$i18n_url=$id_langue;
-
 
187
    } 
-
 
188
    
-
 
189
    
-
 
190
	if (isset($id_langue) && ($id_langue!='')) {
-
 
191
		$langue_test=$id_langue;
-
 
192
	} else {
-
 
193
		$langue_test=GEN_I18N_ID_DEFAUT;
-
 
194
	}
-
 
195
    
-
 
196
    
188
    // Récupération des infos sur sur l'entrée du menu à afficher
197
    // Récupération des infos sur sur l'entrée du menu à afficher
189
    $menu_info = GEN_lireInfoMenu($objet_pear_db, $id_pere_menu_a_deployer, DB_FETCHMODE_ASSOC);
198
    $menu_info = GEN_lireInfoMenu($objet_pear_db, $id_pere_menu_a_deployer, DB_FETCHMODE_ASSOC);
190
    // Gestion des menus uniques
199
    // Gestion des menus uniques
191
    if ($menu_type == 'unique' && ($menu_info['gm_date_fin_validite'] == '0000-00-00 00:00:00' || strtotime($menu_info['gm_date_fin_validite']) > time() )) {
200
    if ($menu_type == 'unique' && ($menu_info['gm_date_fin_validite'] == '0000-00-00 00:00:00' || strtotime($menu_info['gm_date_fin_validite']) > time() )) {
192
        $retour .= afficherEntreeListeMenu( $objet_pear_db, $id_pere_menu_a_deployer, $i18n_url,
201
        $retour .= afficherEntreeListeMenu( $objet_pear_db, $id_pere_menu_a_deployer, $i18n_url,
Line 224... Line 233...
224
    $requete =  'SELECT gm_id_menu, gm_date_fin_validite, GMR01.gmr_ordre '.
233
    $requete =  'SELECT gm_id_menu, gm_date_fin_validite, GMR01.gmr_ordre '.
225
                'FROM gen_menu, gen_menu_relation AS GMR01, gen_menu_relation AS GMR02 '.
234
                'FROM gen_menu, gen_menu_relation AS GMR01, gen_menu_relation AS GMR02 '.
226
                'WHERE GMR01.gmr_id_menu_01 = gm_id_menu '.
235
                'WHERE GMR01.gmr_id_menu_01 = gm_id_menu '.
227
                'AND GMR01.gmr_id_valeur = 1 '.// 1 = "avoir père"
236
                'AND GMR01.gmr_id_valeur = 1 '.// 1 = "avoir père"
228
                'AND GMR02.gmr_id_menu_02 = gm_id_menu '.
237
                'AND GMR02.gmr_id_menu_02 = gm_id_menu '.
229
                'AND GMR02.gmr_id_menu_01 = GMR02.gmr_id_menu_02 ';
238
                'AND GMR02.gmr_id_menu_01 = GMR02.gmr_id_menu_02 '.
-
 
239
                'AND gm_ce_i18n  = "'.GEN_I18N_ID_DEFAUT.'" ';
230
    $requete .= 'AND GMR01.gmr_id_menu_02 = '.$id_pere_menu_a_deployer.' ';
240
    $requete .= 'AND GMR01.gmr_id_menu_02 = '.$id_pere_menu_a_deployer.' ';
Line 231... Line 241...
231
    
241
    
232
    if ($menu_type == 'classique' || $menu_type == 'deroulant') {
242
    if ($menu_type == 'classique' || $menu_type == 'deroulant') {
233
        $requete .= 'AND gm_ce_site = '.$id_site.' '.
243
        $requete .= 'AND gm_ce_site = '.$id_site.' '.
Line 241... Line 251...
241
    //$GLOBALS['_GEN_commun']['debogage_info'] .= $requete;
251
    //$GLOBALS['_GEN_commun']['debogage_info'] .= $requete;
Line 242... Line 252...
242
    
252
    
243
    $resultat = $objet_pear_db->query($requete);
253
    $resultat = $objet_pear_db->query($requete);
Line -... Line 254...
-
 
254
    (DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
-
 
255
    
-
 
256
        
-
 
257
    $liste_menu=array();
-
 
258
    
-
 
259
    
-
 
260
    // On ne retient pas les menus qui sont des traductions ...
-
 
261
     
-
 
262
     
244
    (DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
263
     
-
 
264
     
-
 
265
    while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
-
 
266
    	
-
 
267
    			if ($langue_test == GEN_I18N_ID_DEFAUT) {
-
 
268
    				
-
 
269
    				// Le menu n'est pas une traduction : on le traite
-
 
270
    				$requete_est_traduction =   'SELECT gmr_id_menu_01 '.
-
 
271
	                                    'FROM  gen_menu_relation '.
-
 
272
	                                    'WHERE '.$ligne->gm_id_menu.' = gmr_id_menu_02 ' .
-
 
273
	                                    'AND gmr_id_menu_01 <> gmr_id_menu_02  '.
-
 
274
	                                    'AND  gmr_id_valeur  = 2 ';// 2 = "avoir traduction"
-
 
275
		            $resultat_est_traduction = $objet_pear_db->query($requete_est_traduction);
-
 
276
		            (DB::isError($resultat_est_traduction))
-
 
277
		                ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_est_traduction->getMessage(), $requete_est_traduction))
-
 
278
		                : '';
-
 
279
		                
-
 
280
		   			if ( $resultat_est_traduction->numRows() == 0 ) {
-
 
281
	    	 			   $liste_menu[]=$ligne;
-
 
282
		            }
-
 
283
    			}
-
 
284
    			// Par defaut, on traite tous les menus trouvés
-
 
285
    			else {																    				
-
 
286
    				    $liste_menu[]=$ligne;
-
 
287
    			}
-
 
288
    
-
 
289
    }
-
 
290
       
-
 
291
	if (!function_exists(cmp)) {
-
 
292
		function cmp($a, $b) {
-
 
293
		    if ($a->gmr_ordre == $b->gmr_ordre) {
-
 
294
	   			return 0;
-
 
295
			}
-
 
296
			return ($a->gmr_ordre < $b->gmr_ordre) ? -1 : 1;
-
 
297
		}
-
 
298
	}
-
 
299
	
-
 
300
	usort ($liste_menu,"cmp");
-
 
301
	
245
    
302
    foreach ($liste_menu as $ligne) {
246
    while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
303
    //while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
247
        if ($ligne->gm_date_fin_validite == '' || $ligne->gm_date_fin_validite == '0000-00-00 00:00:00' || strtotime($ligne->gm_date_fin_validite) > time()) {
304
        if ($ligne->gm_date_fin_validite == '' || $ligne->gm_date_fin_validite == '0000-00-00 00:00:00' || strtotime($ligne->gm_date_fin_validite) > time()) {
248
            // On commence par regarder si le menu existe dans la langue demandée
-
 
249
            if ($niveau_actuel >= $niveau_depart && $niveau_actuel <= $profondeur) {
-
 
250
                $requete_i18n = 'SELECT gm_id_menu '.
-
 
251
                                'FROM gen_menu, gen_menu_relation '.
-
 
252
                                'WHERE gmr_id_menu_01 = '.$ligne->gm_id_menu.' '.
-
 
253
                                'AND gmr_id_menu_02 = gm_id_menu '.
-
 
254
                                'AND gmr_id_valeur = 2 '.// 2 = "avoir traduction"
-
 
255
                                'AND gm_ce_i18n = "'.$id_langue.'"';
-
 
256
                
-
 
Line 257... Line -...
257
                $resultat_i18n = $objet_pear_db->query($requete_i18n);
-
 
258
                (DB::isError($resultat_i18n)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_i18n->getMessage(), $requete_i18n)) : '';
-
 
259
                
-
 
260
                // Récupération de l'id du menu à afficher
-
 
261
                if ($resultat_i18n->numRows() != 0) {
-
 
262
                    $id_menu_i18n = $resultat_i18n->fetchRow(DB_FETCHMODE_OBJECT);
-
 
263
                    $id_menu_inf = $id_menu_i18n->gm_id_menu;
305
            // On commence par regarder si le menu existe dans la langue demandée
264
                    $resultat_i18n->free();
-
 
265
                } else {
306
            if ($niveau_actuel >= $niveau_depart && $niveau_actuel <= $profondeur) {
266
                    $id_menu_inf = $ligne->gm_id_menu;
307
                
267
                }
308
                $id_menu_inf = $ligne->gm_id_menu;
268
                $id_menu_selectionne = '';
309
                $id_menu_selectionne = '';
269
                if (isset($GLOBALS['_GEN_commun']['info_menu']->gm_id_menu)) {
310
                if (isset($GLOBALS['_GEN_commun']['info_menu']->gm_id_menu)) {
Line 320... Line 361...
320
            }
361
            }
Line 321... Line 362...
321
            
362
            
322
            $resultat_fils->free();
363
            $resultat_fils->free();
323
        }
364
        }
324
    }
-
 
Line 325... Line 365...
325
    $resultat->free();
365
    }
326
    
366
    
327
    if ($niveau_actuel >= $niveau_depart && $niveau_actuel <= $profondeur) {
367
    if ($niveau_actuel >= $niveau_depart && $niveau_actuel <= $profondeur) {
Line 351... Line 391...
351
* @param  mixed   objet Pear DB de connexion à la base de données.
391
* @param  mixed   objet Pear DB de connexion à la base de données.
352
* @param  integer niveau du menu.
392
* @param  integer niveau du menu.
353
* @param  integer ordre du menu dans le niveau.
393
* @param  integer ordre du menu dans le niveau.
354
* @return  string  liste représentant le menu duHTML
394
* @return  string  liste représentant le menu duHTML
355
*/
395
*/
356
function afficherEntreeListeMenu($db, $menu_id, $i18n_url, $niveau, $ordre, $position, $menu_type, $indent_origine = 12, $indent_pas = 4, $_GEN_commun, $num_menu)
396
function afficherEntreeListeMenu($db, $menu_id, $i18n, $niveau, $ordre, $position, $menu_type, $indent_origine = 12, $indent_pas = 4, $_GEN_commun, $num_menu)
357
{
397
{
-
 
398
	
-
 
399
	// GEN_I18N_ID_DEFAUT;
-
 
400
	
-
 
401
	
-
 
402
	$id_langue = $GLOBALS['_GEN_commun']['i18n'];
-
 
403
    
-
 
404
	if (isset($id_langue) && ($id_langue!='')) {
-
 
405
		$langue_test=$id_langue;
-
 
406
	} else {
-
 
407
		$langue_test=GEN_I18N_ID_DEFAUT;
-
 
408
	}
-
 
409
    
-
 
410
    $requete_traduction =   'SELECT gmr_id_menu_02,  gm_ce_i18n '.
-
 
411
                            'FROM  gen_menu_relation, gen_menu '.
-
 
412
                            'WHERE '.$menu_id.' = gmr_id_menu_01 ' .
-
 
413
                            'AND  gmr_id_menu_02  = gm_id_menu   '.
-
 
414
                            'AND  gmr_id_valeur  = 2 '.// 2 = "avoir traduction"
-
 
415
                            'AND gm_ce_i18n = "'.$langue_test.'" ';
-
 
416
	$resultat_traduction = $db->query($requete_traduction);
-
 
417
			        (DB::isError($resultat_traduction))             ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_traduction->getMessage(), $requete_traduction))
-
 
418
			                : '';
-
 
419
 
-
 
420
	if ($resultat_traduction->numRows() > 0) {
-
 
421
		$ligne_resultat_traduction=$resultat_traduction->fetchRow(DB_FETCHMODE_ASSOC);
-
 
422
		$menu_id=$ligne_resultat_traduction['gmr_id_menu_02'];
-
 
423
	}            
-
 
424
	
358
    // Récupération des infos sur sur l'entrée du menu à afficher
425
    // Récupération des infos sur sur l'entrée du menu à afficher
359
    $menu_info = GEN_lireInfoMenu($db, $menu_id, DB_FETCHMODE_ASSOC);
426
    $menu_info = GEN_lireInfoMenu($db, $menu_id, DB_FETCHMODE_ASSOC);
Line 360... Line 427...
360
    
427
    
361
    // Préparation d'une entrée dans la liste du menu
428
    // Préparation d'une entrée dans la liste du menu
362
    $menu_nom = htmlentities($menu_info['gm_nom']);
-
 
363
    $menu_hreflang = htmlentities($menu_info['gm_ce_i18n']);
429
    $menu_nom = htmlentities($menu_info['gm_nom']);
364
    $menu_accesskey = '';
430
    $menu_accesskey = '';
365
    $raccourci_txt = '';
431
    $raccourci_txt = '';
366
    if (($menu_accesskey = htmlentities($menu_info['gm_raccourci_clavier'])) != '') {
432
    if (($menu_accesskey = htmlentities($menu_info['gm_raccourci_clavier'])) != '') {
367
        $raccourci_txt = '[Raccourci : '.$menu_accesskey.' ] ';
433
        $raccourci_txt = '[Raccourci : '.$menu_accesskey.' ] ';
Line 373... Line 439...
373
    }
439
    }
Line 374... Line 440...
374
    
440
    
375
    // Préparation de l'url de l'entrée
441
    // Préparation de l'url de l'entrée
376
    $une_url =& new Pap_URL('http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']);
442
    $une_url =& new Pap_URL('http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']);
377
    $une_url->setId($menu_id);
443
    $une_url->setId($menu_id);
-
 
444
 
-
 
445
	if (isset($i18n) && ($i18n!='')) {
-
 
446
		$une_url->addQuerystring(GEN_URL_CLE_I18N,$i18n);
378
    
447
	}    
379
    //Création d'une entrée dans la liste du menu
448
    //Création d'une entrée dans la liste du menu
380
    $espaces = str_repeat(' ', $indent_origine + ($indent_pas * ($position + 2)));
449
    $espaces = str_repeat(' ', $indent_origine + ($indent_pas * ($position + 2)));
381
    $retour  =  $espaces.'<a id="menu_lien_'.$num_menu.'_'.$menu_id.'" href="'.$une_url->getURL().'" '.
-
 
382
                'hreflang="'.$menu_hreflang.'" '.$menu_texte_title.$menu_accesskey.'>'.$menu_nom.'</a>'."\n";
450
    $retour  =  $espaces.'<a id="menu_lien_'.$num_menu.'_'.$menu_id.'" href="'.$une_url->getURL().'"'.$menu_texte_title.$menu_accesskey.'>'.$menu_nom.'</a>'."\n";
383
    return $retour;
451
    return $retour;
Line 384... Line 452...
384
}
452
}
385
 
453
 
Line 389... Line 457...
389
 
457
 
390
 
458
 
391
/* +--Fin du code ----------------------------------------------------------------------------------------+
459
/* +--Fin du code ----------------------------------------------------------------------------------------+
-
 
460
*
-
 
461
* $Log: not supported by cvs2svn $
-
 
462
* Revision 1.22.2.2  2006/02/28 14:02:11  ddelon
-
 
463
* Finition multilinguisme
-
 
464
*
-
 
465
* Revision 1.22.2.1  2005/12/20 14:40:25  ddelon
-
 
466
* Fusion Head vers Livraison
-
 
467
*
-
 
468
* Revision 1.22  2005/09/27 08:42:49  ddelon
392
*
469
* Menu et Squelette
393
* $Log: not supported by cvs2svn $
470
*
394
* Revision 1.21  2005/09/22 14:02:49  ddelon
471
* Revision 1.21  2005/09/22 14:02:49  ddelon
395
* nettoyage annuaire et php5
472
* nettoyage annuaire et php5
396
*
473
*