Subversion Repositories Applications.papyrus

Rev

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

Rev 338 Rev 346
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.15 2005-04-14 16:37:48 jpm Exp $
22
// CVS : $Id: menu.php,v 1.16 2005-04-19 16:47:24 jpm 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.15 $ $Date: 2005-04-14 16:37:48 $
41
*@version       $Revision: 1.16 $ $Date: 2005-04-19 16:47:24 $
42
// +------------------------------------------------------------------------------------------------------+
42
// +------------------------------------------------------------------------------------------------------+
43
*/
43
*/
Line 44... Line 44...
44
 
44
 
45
// +------------------------------------------------------------------------------------------------------+
45
// +------------------------------------------------------------------------------------------------------+
Line 171... Line 171...
171
* @param  integer niveau de départ.
171
* @param  integer niveau de départ.
172
* @param  integer niveau d'arrivée (profondeur max demandée).
172
* @param  integer niveau d'arrivée (profondeur max demandée).
173
* @param  integer identifiant d'un menu pére.
173
* @param  integer identifiant d'un menu pére.
174
* @return  string  les listes de menus au format XHTML.
174
* @return  string  les listes de menus au format XHTML.
175
*/
175
*/
176
function afficherListeNiveauMultiple( $objet_pear_db, $id_site, $id_langue, $i18n_url, $niveau_depart, $profondeur, 
176
function afficherListeNiveauMultiple( &$objet_pear_db, $id_site, $id_langue, $i18n_url, $niveau_depart, $profondeur, 
177
                                        $id_pere_menu_a_deployer, $position, $menu_type, $indent_origine = 12, 
177
                                        $id_pere_menu_a_deployer, $position, $menu_type, $indent_origine = 12, 
178
                                        $indent_pas = 4, $_GEN_commun, $num_menu)
178
                                        $indent_pas = 4, $_GEN_commun, $num_menu)
179
{
179
{
180
    // Initialisation des variables
180
    // Initialisation des variables
181
    static $niveau_actuel = 1;
181
    static $niveau_actuel = 1;
182
    $retour = '';
182
    $retour = '';
183
    $tete = '';
183
    $tete = '';
184
    $corps = '';
184
    $corps = '';
185
    $pied = '';
185
    $pied = '';
-
 
186
    // Récupération des infos sur sur l'entrée du menu à afficher
-
 
187
    $menu_info = GEN_lireInfoMenu($objet_pear_db, $id_pere_menu_a_deployer, DB_FETCHMODE_ASSOC);
-
 
188
    if ($menu_info['gm_date_fin_validite'] != '0000-00-00 00:00:00' && $menu_info['gm_date_fin_validite'] < date('Y-m-d G:i:s', time())) {
-
 
189
        echo $menu_info['gm_nom'].' - ok - '.date('Y-m-d G:i:s', time());
186
    
190
    }
187
    // Gestion des menus uniques
191
    // Gestion des menus uniques
188
    if ($menu_type == 'unique') {
192
    if ($menu_type == 'unique' && ($menu_info['gm_date_fin_validite'] == '0000-00-00 00:00:00' || strtotime($menu_info['gm_date_fin_validite']) > time() )) {
189
        $retour .= afficherEntreeListeMenu( $objet_pear_db, $id_pere_menu_a_deployer, $i18n_url,
193
        $retour .= afficherEntreeListeMenu( $objet_pear_db, $id_pere_menu_a_deployer, $i18n_url,
190
                                            $niveau_actuel, 1, $position, $menu_type, $indent_origine, $indent_pas, $_GEN_commun, $num_menu);
194
                                            $niveau_actuel, 1, $position, $menu_type, $indent_origine, $indent_pas, $_GEN_commun, $num_menu);
191
        // Dans le cas, d'un menu unique, on retourne directement le résultat ici.
195
        // Dans le cas, d'un menu unique, on retourne directement le résultat ici.
192
        return $retour;
196
        return $retour;
193
    } 
197
    } 
Line 195... Line 199...
195
    if ($niveau_actuel > $profondeur) {
199
    if ($niveau_actuel > $profondeur) {
196
        return null;
200
        return null;
197
    }
201
    }
Line 198... Line 202...
198
    
202
    
199
    // Nous regardons si nous devons afficher un menu racine
203
    // Nous regardons si nous devons afficher un menu racine
200
    if ($id_pere_menu_a_deployer != 0 && $niveau_actuel == 1) {
204
    if ($id_pere_menu_a_deployer != 0 && $niveau_actuel == 1 && ($menu_info['gm_date_fin_validite'] == '0000-00-00 00:00:00' || strtotime($menu_info['gm_date_fin_validite']) > time() )) {
201
        $tete .=   str_repeat(' ', $indent_origine + ($indent_pas * $position)).
205
        $tete .=   str_repeat(' ', $indent_origine + ($indent_pas * $position)).
202
                    '<ul class="groupe_menu_'.$num_menu.'_'.$id_pere_menu_a_deployer.'" class="menu_'.$menu_type.'_'.'n'.$niveau_actuel.'">'."\n";
206
                    '<ul class="groupe_menu_'.$num_menu.'_'.$id_pere_menu_a_deployer.'" class="menu_'.$menu_type.'_'.'n'.$niveau_actuel.'">'."\n";
203
        $id_menu_selectionne = $GLOBALS['_GEN_commun']['info_menu']->gm_id_menu;
207
        $id_menu_selectionne = $GLOBALS['_GEN_commun']['info_menu']->gm_id_menu;
204
        if (!empty($id_menu_selectionne) && (GEN_etreAncetre($id_pere_menu_a_deployer, $id_menu_selectionne) || $id_pere_menu_a_deployer == $id_menu_selectionne) ) {
208
        if (!empty($id_menu_selectionne) && (GEN_etreAncetre($id_pere_menu_a_deployer, $id_menu_selectionne) || $id_pere_menu_a_deployer == $id_menu_selectionne) ) {
Line 216... Line 220...
216
    if ($niveau_actuel >= $niveau_depart && $niveau_actuel <= $profondeur) {
220
    if ($niveau_actuel >= $niveau_depart && $niveau_actuel <= $profondeur) {
217
        $tete .=   str_repeat(' ', $indent_origine + ($indent_pas * ($position + 1))).
221
        $tete .=   str_repeat(' ', $indent_origine + ($indent_pas * ($position + 1))).
218
                    '<ul id="groupe_menu_'.$num_menu.'_'.$id_pere_menu_a_deployer.'" class="menu_'.$menu_type.'_'.'n'.$niveau_actuel.'">'."\n";
222
                    '<ul id="groupe_menu_'.$num_menu.'_'.$id_pere_menu_a_deployer.'" class="menu_'.$menu_type.'_'.'n'.$niveau_actuel.'">'."\n";
219
    }
223
    }
Line 220... Line 224...
220
    
224
    
221
    $requete =  'SELECT gm_id_menu, GMR01.gmr_ordre '.
225
    $requete =  'SELECT gm_id_menu, gm_date_fin_validite, GMR01.gmr_ordre '.
222
                'FROM gen_menu, gen_menu_relation AS GMR01, gen_menu_relation AS GMR02 '.
226
                'FROM gen_menu, gen_menu_relation AS GMR01, gen_menu_relation AS GMR02 '.
223
                'WHERE GMR01.gmr_id_menu_01 = gm_id_menu '.
227
                'WHERE GMR01.gmr_id_menu_01 = gm_id_menu '.
224
                'AND GMR01.gmr_id_valeur = 1 '.// 1 = "avoir père"
228
                'AND GMR01.gmr_id_valeur = 1 '.// 1 = "avoir père"
225
                'AND GMR02.gmr_id_menu_02 = gm_id_menu '.
229
                'AND GMR02.gmr_id_menu_02 = gm_id_menu '.
Line 237... Line 241...
237
    }
241
    }
238
    //$GLOBALS['_GEN_commun']['debogage_info'] .= $requete;
242
    //$GLOBALS['_GEN_commun']['debogage_info'] .= $requete;
239
    $resultat = $objet_pear_db->query($requete);
243
    $resultat = $objet_pear_db->query($requete);
240
    (DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
244
    (DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
Line 241... Line 245...
241
    
245
    
-
 
246
    while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
242
    while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
247
        if ($ligne->gm_date_fin_validite == '0000-00-00 00:00:00' || strtotime($ligne->gm_date_fin_validite) > time()) {
243
        // On commence par regarder si le menu existe dans la langue demandée
248
            // On commence par regarder si le menu existe dans la langue demandée
244
        if ($niveau_actuel >= $niveau_depart && $niveau_actuel <= $profondeur) {
249
            if ($niveau_actuel >= $niveau_depart && $niveau_actuel <= $profondeur) {
245
            $requete_i18n = 'SELECT gm_id_menu '.
250
                $requete_i18n = 'SELECT gm_id_menu '.
246
                            'FROM gen_menu, gen_menu_relation '.
251
                                'FROM gen_menu, gen_menu_relation '.
247
                            'WHERE gmr_id_menu_01 = '.$ligne->gm_id_menu.' '.
252
                                'WHERE gmr_id_menu_01 = '.$ligne->gm_id_menu.' '.
248
                            'AND gmr_id_menu_02 = gm_id_menu '.
253
                                'AND gmr_id_menu_02 = gm_id_menu '.
249
                            'AND gmr_id_valeur = 2 '.// 2 = "avoir traduction"
254
                                'AND gmr_id_valeur = 2 '.// 2 = "avoir traduction"
-
 
255
                                'AND gm_ce_i18n = "'.$id_langue.'"';
-
 
256
                
-
 
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;
-
 
264
                    $resultat_i18n->free();
-
 
265
                } else {
-
 
266
                    $id_menu_inf = $ligne->gm_id_menu;
-
 
267
                }
-
 
268
                $id_menu_selectionne = '';
-
 
269
                if (isset($GLOBALS['_GEN_commun']['info_menu']->gm_id_menu)) {
-
 
270
                    $id_menu_selectionne = $GLOBALS['_GEN_commun']['info_menu']->gm_id_menu;
-
 
271
                }
-
 
272
                // On vérifie si le menu est le menu sélectionné
-
 
273
                if (!empty($id_menu_selectionne) && (GEN_etreAncetre($id_menu_inf, $id_menu_selectionne) || $id_menu_inf == $id_menu_selectionne) ) {
-
 
274
                    $classe = 'menu_actif';
-
 
275
                } else {
-
 
276
                    $classe = 'menu_inactif';
-
 
277
                }
-
 
278
                
-
 
279
                // Affichage du menu
-
 
280
                $corps .=   str_repeat(' ', $indent_origine + ($indent_pas * ($position + 2))).
-
 
281
                            '<li id="menu_'.$num_menu.'_'.$id_menu_inf.'" class="'.$classe.'">'."\n";
-
 
282
                $corps .= afficherEntreeListeMenu( $objet_pear_db, $id_menu_inf, $i18n_url, $niveau_actuel, 
-
 
283
                                                    $ligne->gmr_ordre, $position, $menu_type, $indent_origine, $indent_pas, $_GEN_commun, $num_menu);
-
 
284
            }
-
 
285
            // Pour chaque menu on regarde s'il y a des fils. Si oui, on les déploie.
-
 
286
            $requete_fils = 'SELECT gm_id_menu '.
-
 
287
                            'FROM gen_menu, gen_menu_relation AS GMR01, gen_menu_relation AS GMR02 '.
-
 
288
                            'WHERE GMR01.gmr_id_menu_02 = '.$ligne->gm_id_menu.' '.
-
 
289
                            'AND GMR01.gmr_id_menu_01 = gm_id_menu '.
-
 
290
                            'AND GMR01.gmr_id_valeur = 1 '.// 1 = "avoir père"
-
 
291
                            'AND GMR02.gmr_id_menu_02 = gm_id_menu '.
-
 
292
                            'AND GMR02.gmr_id_menu_01 = GMR02.gmr_id_menu_02 '.
-
 
293
                            'AND GMR02.gmr_id_valeur = 100 '.// 100 = type "menu classique"
-
 
294
                            'ORDER BY GMR01.gmr_ordre ASC '.
Line 250... Line 295...
250
                            'AND gm_ce_i18n = "'.$id_langue.'"';
295
                            'LIMIT 0,1';
251
            
-
 
252
            $resultat_i18n = $objet_pear_db->query($requete_i18n);
-
 
253
            (DB::isError($resultat_i18n)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_i18n->getMessage(), $requete_i18n)) : '';
-
 
254
            
296
            
255
            // Récupération de l'id du menu à afficher
297
            $resultat_fils = $objet_pear_db->query($requete_fils);
256
            if ($resultat_i18n->numRows() != 0) {
-
 
257
                $id_menu_i18n = $resultat_i18n->fetchRow(DB_FETCHMODE_OBJECT);
-
 
258
                $id_menu_inf = $id_menu_i18n->gm_id_menu;
298
            (DB::isError($resultat_fils))
259
                $resultat_i18n->free();
-
 
260
            } else {
299
                ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_fils->getMessage(), $requete_fils))
261
                $id_menu_inf = $ligne->gm_id_menu;
-
 
262
            }
300
                : '';
263
            $id_menu_selectionne = '';
301
            
264
            if (isset($GLOBALS['_GEN_commun']['info_menu']->gm_id_menu)) {
302
            if ($resultat_fils->numRows() != 0 && $ligne->gm_id_menu == $GLOBALS['_GEN_commun']['info_menu']->gm_id_menu 
265
                $id_menu_selectionne = $GLOBALS['_GEN_commun']['info_menu']->gm_id_menu;
303
                || GEN_etreAncetre($ligne->gm_id_menu, $GLOBALS['_GEN_commun']['info_menu']->gm_id_menu) || $menu_type == 'deroulant') {
266
            }
304
                $niveau_actuel++;
267
            // On vérifie si le menu est le menu sélectionné
305
                $corps .= afficherListeNiveauMultiple( $objet_pear_db, $id_site, $id_langue, $i18n_url, $niveau_depart, 
268
            if (!empty($id_menu_selectionne) && (GEN_etreAncetre($id_menu_inf, $id_menu_selectionne) || $id_menu_inf == $id_menu_selectionne) ) {
306
                                                            $profondeur, $ligne->gm_id_menu, ($position + 3), $menu_type, 
269
                $classe = 'menu_actif';
307
                                                            null, null, $_GEN_commun, $num_menu);
270
            } else {
308
                // On ramène $niveau_actuel un cran plus bas
Line -... Line 309...
-
 
309
                $niveau_actuel--;
271
                $classe = 'menu_inactif';
310
            }
272
            }
311
            
273
            
312
            
-
 
313
            if ($niveau_actuel >= $niveau_depart && $niveau_actuel <= $profondeur) {
274
            // Affichage du menu
314
                $corps .= str_repeat(' ', $indent_origine + ($indent_pas * ($position + 2))).'</li>'."\n";
275
            $corps .=   str_repeat(' ', $indent_origine + ($indent_pas * ($position + 2))).
-
 
276
                        '<li id="menu_'.$num_menu.'_'.$id_menu_inf.'" class="'.$classe.'">'."\n";
315
            }
277
            $corps .= afficherEntreeListeMenu( $objet_pear_db, $id_menu_inf, $i18n_url, $niveau_actuel, 
-
 
278
                                                $ligne->gmr_ordre, $position, $menu_type, $indent_origine, $indent_pas, $_GEN_commun, $num_menu);
-
 
279
        }
-
 
280
        // Pour chaque menu on regarde s'il y a des fils. Si oui, on les déploie.
-
 
281
        $requete_fils = 'SELECT gm_id_menu '.
-
 
282
                        'FROM gen_menu, gen_menu_relation AS GMR01, gen_menu_relation AS GMR02 '.
-
 
283
                        'WHERE GMR01.gmr_id_menu_02 = '.$ligne->gm_id_menu.' '.
-
 
284
                        'AND GMR01.gmr_id_menu_01 = gm_id_menu '.
-
 
285
                        'AND GMR01.gmr_id_valeur = 1 '.// 1 = "avoir père"
-
 
286
                        'AND GMR02.gmr_id_menu_02 = gm_id_menu '.
-
 
287
                        'AND GMR02.gmr_id_menu_01 = GMR02.gmr_id_menu_02 '.
-
 
288
                        'AND GMR02.gmr_id_valeur = 100 '.// 100 = type "menu classique"
-
 
289
                        'ORDER BY GMR01.gmr_ordre ASC '.
-
 
290
                        'LIMIT 0,1';
-
 
291
        
-
 
292
        $resultat_fils = $objet_pear_db->query($requete_fils);
-
 
293
        (DB::isError($resultat_fils))
-
 
294
            ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_fils->getMessage(), $requete_fils))
-
 
295
            : '';
-
 
296
        
-
 
297
        if ($resultat_fils->numRows() != 0 && $ligne->gm_id_menu == $GLOBALS['_GEN_commun']['info_menu']->gm_id_menu 
-
 
298
            || GEN_etreAncetre($ligne->gm_id_menu, $GLOBALS['_GEN_commun']['info_menu']->gm_id_menu) || $menu_type == 'deroulant') {
-
 
299
            $niveau_actuel++;
-
 
300
            $corps .= afficherListeNiveauMultiple( $objet_pear_db, $id_site, $id_langue, $i18n_url, $niveau_depart, 
-
 
301
                                                        $profondeur, $ligne->gm_id_menu, ($position + 3), $menu_type, 
-
 
302
                                                        null, null, $_GEN_commun, $num_menu);
-
 
303
            // On ramène $niveau_actuel un cran plus bas
-
 
304
            $niveau_actuel--;
-
 
305
        }
-
 
306
        
-
 
307
        
-
 
308
        if ($niveau_actuel >= $niveau_depart && $niveau_actuel <= $profondeur) {
-
 
309
            $corps .= str_repeat(' ', $indent_origine + ($indent_pas * ($position + 2))).'</li>'."\n";
-
 
310
        }
316
            
311
        
317
            $resultat_fils->free();
Line 312... Line 318...
312
        $resultat_fils->free();
318
        }
313
    }
319
    }
Line 378... Line 384...
378
 
384
 
379
 
385
 
380
/* +--Fin du code ----------------------------------------------------------------------------------------+
386
/* +--Fin du code ----------------------------------------------------------------------------------------+
-
 
387
*
-
 
388
* $Log: not supported by cvs2svn $
-
 
389
* Revision 1.15  2005/04/14 16:37:48  jpm
381
*
390
* Ajout de la gestion des URL avec la classe Pap_URL de Papyrus.
382
* $Log: not supported by cvs2svn $
391
*
383
* Revision 1.14  2005/03/02 11:02:33  jpm
392
* Revision 1.14  2005/03/02 11:02:33  jpm
384
* Suppression des espaces avant l'ouverture de la balise php.
393
* Suppression des espaces avant l'ouverture de la balise php.
385
*
394
*