Subversion Repositories Applications.papyrus

Rev

Rev 4 | Rev 103 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
4 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
// +------------------------------------------------------------------------------------------------------+
84 jpm 22
// CVS : $Id: pap_menu.fonct.php,v 1.2 2004-10-21 18:15:21 jpm Exp $
4 jpm 23
/**
24
* Bibliothèque de fonction sur le rendu.
25
*
26
* Cette bibliothèque contient des fonctions utilisé par le rendu des pages de Papyrus.
27
*
28
*@package Papyrus
29
*@subpackage Fonctions
30
//Auteur original :
31
*@author        Laurent COUDOUNEAU <laurent.coudouneau@ema.fr>
32
//Autres auteurs :
33
*@author        Alexandre GRANIER <alexadandre@tela-botanica.org>
34
*@author        Jean-Pascal MILCENT <jpm@tela-botanica.org>
35
*@copyright     Tela-Botanica 2000-2004
84 jpm 36
*@version       $Revision: 1.2 $ $Date: 2004-10-21 18:15:21 $
4 jpm 37
// +------------------------------------------------------------------------------------------------------+
38
*/
39
 
40
// +------------------------------------------------------------------------------------------------------+
41
// |                                            LISTE des FONCTIONS                                       |
42
// +------------------------------------------------------------------------------------------------------+
43
 
44
/** Fonction GEN_donnerProfondeurMax() - Renvoie le nombre de niveau de menu.
45
*
46
* Cette fonction calcule, pour un menu donné, le nombre de niveau de menu fils complétant
47
* l'arbre des menus jusqu'au feuilles.
48
* Ici on l'utilise en passant l'argument égal à zéro c'est à dire
49
* en partant du menu racine d'un site gmr_id_menu_02 = 0.
50
* C'est une fonction récursive.
51
* Noter que la variable $prof est statique.
52
*
53
* @param integer identifiant du site sur lequel la profondeur est calculé.
54
* @param integer identifiant du menu à partir delaquelle on souhaite calculer la profondeur.
55
* @return integer le nombre de niveau de menu.
56
*/
57
function GEN_donnerProfondeurMax($id_site, $id_menu)
58
{
59
    global $db;
60
    static $prof = 0;
61
 
62
    // Requête sur les relations de type "avoir père" entre menus
63
    $requete =  'SELECT gmr_id_menu_01 '.
64
                'FROM gen_menu, gen_menu_relation '.
65
                'WHERE gmr_id_menu_02 = '.$id_menu.' '.
66
                'AND gmr_id_menu_01 = gm_id_menu '.
67
                'AND gm_ce_site = '.$id_site.' '.
68
                'AND gmr_id_valeur = 1 '.
69
                'ORDER BY gmr_ordre ASC';
70
 
71
    $resultat = $db->query($requete);
72
    (DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
73
 
74
    if ($resultat->numRows() == 0) {
75
        return $prof;
76
    }
77
    $prof++;
78
    while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
79
        $prof = GEN_donnerProfondeurMax($id_site, $ligne->gmr_id_menu_01);
80
    }
81
    return $prof;
82
}
83
 
84
/** Fonction GEN_etreFreres() - Renvoie vrai si les menus ont le même père.
85
*
86
* Cette fonction regarde si deux menus donnés sont frères dans l'arbre
87
* des menus. Nous regardons si les menus ont le même identifiant comme père.
88
*
89
* @param integer identifiant du premier menu.
90
* @param integer identifiant du seconde menu.
91
* @return boolean renvoi vrai si les deux menus sont frères sinon faux.
92
*/
93
function GEN_etreFreres($id_menu_1, $id_menu_2)
94
{
95
    // Initialisation des variables.
96
    global $db;
97
 
98
    $requete =  'SELECT gmr_id_menu_02 '.
99
                'FROM gen_menu_relation '.
100
                'WHERE gmr_id_menu_01 = '.$id_menu_1.' '.
101
                'AND gmr_id_valeur = 1 ';
102
 
103
    $resultat = $db->query($requete);
104
    (DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
105
 
106
    $ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
107
    $id_pere_1 = $ligne->gmr_id_menu_02;
108
    $resultat->free();
109
 
110
    $requete =  'SELECT gmr_id_menu_02 '.
111
                'FROM gen_menu_relation '.
112
                'WHERE gmr_id_menu_01 = '.$id_menu_2.' '.
113
                'AND gmr_id_valeur = 1 ';
114
 
115
    $resultat = $db->query($requete);
116
    (DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
117
 
118
    $ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
119
    $id_pere_2 = $ligne->gmr_id_menu_02;
120
    $resultat->free();
121
 
122
    return ($id_pere_1 == $id_pere_2);
123
}
124
 
125
/** Fonction GEN_etreAncetre() - Renvoie vrai si le premier argument (identifiant de menu) est un ancètre du second.
126
*
127
* Nous récupérons l'identifiant du père du menu passé en argument numéro 2. Puis,
128
* nous le comparons à l'argument 1. Si c'est les même on retourne faux. Sinon on rapelle
129
* la fonction avec l'identifiant du père trouvé pour l'argument 2. Ainsi de suite jusqu'a
130
* renvoyé vrai où tomber sur un menu racine (idetifiant du père = 0).
84 jpm 131
* Si les variable sont null nous retournons false.
4 jpm 132
* C'est une fonction récursive.
133
*
134
* @param integer identifiant d'un menu numéro 1.
135
* @param integer identifiant d'un menu numéro 2.
136
* @return boolean vrai si le menu numéro 1 est ancètre du second.
137
*/
138
function GEN_etreAncetre($id_menu_1, $id_menu_2)
139
{
84 jpm 140
    //Test erreur
141
    if (is_null($id_menu_1) || is_null($id_menu_2)) {
142
        return false;
143
    }
144
 
4 jpm 145
    // Initialisation des variables.
146
    global $db;
147
 
148
    $requete =  'SELECT gmr_id_menu_02 '.
149
                'FROM gen_menu_relation '.
150
                'WHERE gmr_id_menu_01 = '.$id_menu_2.' '.
151
                'AND gmr_id_valeur = 1 ';
152
 
153
    $resultat = $db->query($requete);
154
    (DB::isError($resultat)) ? die (BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
155
 
156
    $ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
157
    $resultat->free();
158
    if ($ligne->gmr_id_menu_02 == 0) {
159
        return false;
160
    }
161
    elseif ($ligne->gmr_id_menu_02 == $id_menu_1) {
162
        return true;
163
    } else {
164
        return GEN_etreAncetre($id_menu_1, $ligne->gmr_id_menu_02);
165
    }
166
}
167
 
168
/** Fonction GEN_lireIdentifiantMenuAncetre() - Renvoie l'identifiant du menu ancètre du menu passé en paramètre.
169
*
170
*   Cette fonction parcours la table gen_menu_relation et retourne l'identifiant du
171
*   menu dont le père est le menu racine (identifiant = 0) pour le menu passé en paramètre.
172
*
173
*   @global mixed   objet Pear DB de connexion à la base de données..
174
*   @param  int     identifiant du menu dont il faut rechercher le père.
175
*   @return int     identifiant du menu ancètre du menu passé en paramètre.
176
*/
177
function GEN_lireIdentifiantMenuAncetre($id_menu)
178
{
179
    global $db;
180
    // On teste si on est au niveau d'un menu racine i.e GM_ID_PERE=0
181
    $requete =  'SELECT gmr_id_menu_02 '.
182
                'FROM gen_menu_relation '.
183
                'WHERE gmr_id_menu_01 = '.$id_menu.' '.
184
                'AND gmr_id_valeur = 1 ';// 1 = avoir "père"
185
 
186
    $resultat = $db->query($requete);
187
    (DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
188
 
189
    $ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
190
    $resultat->free();
191
 
192
    // Dans le cas où le menu en paramètre est un menu racine
193
    if ($ligne->gmr_id_menu_02 == 0) {
194
        return $id_menu;
195
    }
196
 
197
    return GEN_lireIdentifiantMenuAncetre($ligne->gmr_id_menu_02);
198
}
199
 
200
/** Fonction GEN_lireIdentifiantMenuPere() - Renvoie l'identifiant du père du menu passé en paramètre.
201
*
202
*   Cette fonction parcours la table gen_menu_relation et retourne l'identifiant du
203
*   menu père du menu passé en paramètre.
204
*
205
*   @global mixed   objet Pear DB de connexion à la base de données..
206
*   @param  int     l'identifiant du fils
207
*   @return mixed   l'identifiant du père,ou false en cas d'erreur.
208
*/
209
function GEN_lireIdentifiantMenuPere($id_menu)
210
{
211
    global $db;
212
 
213
    $requete =  'SELECT gmr_id_menu_02 '.
214
                'FROM gen_menu_relation '.
215
                'WHERE gmr_id_menu_01 = '.$id_menu.' '.
216
                'AND gmr_id_valeur = 1 ';// 1 = avoir "père"
217
 
218
    $resultat = $db->query($requete) ;
219
    (DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
220
 
221
    //if ($resultat->numRows() != 1) {
222
    //    return false;
223
    //}
224
 
225
    $ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
226
    $resultat->free();
227
 
228
    return $ligne->gmr_id_menu_02;
229
}
230
 
231
/** Fonction GEN_lireInfoMenu() - Renvoie un objet ou un tableau contenant une ligne de la table gen_menu
232
*
233
* Retourne la ligne de la table gen_menu concernant le menu ayant pour identifiant la valeur
234
* passée en paramètre.
235
* Ancien nom : getLevel()
236
*
237
* @param  mixed     une instance de la classse Pear DB.
238
* @param  int       l'identifiant d'un menu.
239
* @param  string    le mode dans Pear DB dans lequel on veut recevoir les infos du menu.
240
* @return  mixed    un objet ou tableau résultat de Pear DB contenant une ligne de la table gen_menu, ou false en cas d'erreur.
241
*/
242
function GEN_lireInfoMenu($db, $menuid, $mode = DB_FETCHMODE_OBJECT)
243
{
244
    //----------------------------------------------------------------------------
245
    // Recherche des informations sur le menu
246
    $requete =  'SELECT * '.
247
                'FROM gen_menu '.
248
                'WHERE gm_id_menu = '.$menuid;
249
 
250
    $resultat = $db->query($requete);
251
    (DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
252
 
253
    if ($resultat->numRows() != 1) {
254
        return false;
255
    }
256
 
257
    //----------------------------------------------------------------------------
258
    // Récupération des infos
259
    $info_menu = $resultat->fetchRow($mode);
260
    $resultat->free();
261
 
262
    return $info_menu;
263
}
264
 
265
/** Fonction GEN_lireInfoMenuRelation() - Renvoie un objet ou un tableau contenant une ligne de la table gen_menu_relation
266
*
267
* Par défaut recherch une relation de type père.
268
* Ancien nom : getMenuRelation().
269
*
270
* @param  mixed   Une instance de la classse PEAR_DB
271
* @param  int  l'identifiant d'un menu.
272
* @param  int  l'identifiant d'une valeur de relation.
273
* @param  string  le mode dans Pear DB dans lequel on veut recevoir les infos du menu.
274
* @return  mixed   n objet ou tableau résultat Pear DB, ou false en cas d'erreur.
275
*/
276
function GEN_lireInfoMenuRelation($db, $menuid, $id_valeur = '1', $mode = DB_FETCHMODE_OBJECT)
277
{
278
    //----------------------------------------------------------------------------
279
    // Recherche des informations sur la relation de menu
280
    $requete =  'SELECT * '.
281
                'FROM gen_menu_relation '.
282
                'WHERE gmr_id_menu_01 = '.$menuid.' '.
283
                'AND gmr_id_valeur = '.$id_valeur;
284
 
285
    $result = $db->query($requete);
286
    (DB::isError($result)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $result->getMessage(), $requete)) : '';
287
 
288
    if ($result->numRows() != 1) {
289
        return false;
290
    }
291
 
292
    //----------------------------------------------------------------------------
293
    // Récupération des infos
294
    $info_menu_relation = $result->fetchRow($mode);
295
    $result->free();
296
 
297
    return $info_menu_relation;
298
}
299
 
300
// +------------------------------------------------------------------------------------------------------+
301
//                          A NORMALISER !!!
302
// +------------------------------------------------------------------------------------------------------+
303
 
304
/** Fonction niveau_menu() - Renvoie le niveau d'un menu.
305
*
306
* Fournit le niveau d'un menu dans l'arbre des menus d'un site
307
* donné.
308
* C'est une fonction récursive.
309
*
310
* @param  integer l'identifiant du site du menu.
311
* @param  integer l'identifiant de la langue du site du menu.
312
* @param  integer l'identifiant d'un menu.
313
* @return  integer le niveau d'un menu.
314
*/
315
function niveau_menu($id_site, $id_langue, $id_menu)
316
{
317
    global $db ;
318
    static $niveau = 1;
319
 
320
    $requete =  'SELECT gm_ce_menu_pere '.
321
                'FROM gen_menu '.
322
                'WHERE gm_id_menu = '.$id_menu.' '.
323
                'AND gm_id_i18n = "'.$id_langue.'" '.
324
                'AND gm_id_site = '.$id_site;
325
 
326
    $resultat = $db->query($requete);
327
    (DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
328
 
329
    if ($resultat->numRows() == 0) {
330
        return $niveau;
331
    }
332
    $ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
333
 
334
    if ($ligne->gm_ce_menu_pere == 0) {
335
 
336
    $niveau++;
337
    $niveau = niveau_menu($id_site, $id_langue, $ligne->gm_ce_menu_pere);
338
    }
339
 
340
    return $niveau;
341
}
342
 
343
/** Fonction id_ancetre_niveau() - Renvoie l'identifiant de l'ancetre de niveau $niveau
344
*
345
* Renvoie l'identifiant de l'ancetre de niveau $niveau.
346
* C'est une fonction récursive.
347
*
348
* @param  integer identifiant du site du menu dont on cherche l'ancètre.
349
* @param  integer identifiant de la langue du site du menu dont on cherche l'ancètre.
350
* @param  integer identifiant du menu dont on cherche l'ancètre.
351
* @param  integer niveau souhaité.
352
* @return  integer identifiant de l'ancètre cherché.
353
*/
354
function id_ancetre_niveau($id_site, $id_langue, $id_menu, $niveau)
355
{
356
    global $db;
357
    static $id_et_niveau = array();
358
 
359
    $requete =  'SELECT gp_ce_page_pere '.
360
                'FROM gen_page '.
361
                'WHERE gp_id_page = '.$id_page;
362
 
363
    $resultat = $db->query($requete);
364
    (DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
365
 
366
    $ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
367
 
368
    if ($ligne->gm_ce_menu_pere != 0) {
369
        array_push ($id_et_niveau, $ligne->gm_ce_menu_pere);
370
    } else {
371
        return array_pop($id_et_niveau);
372
    }
373
    $resultat->free();
374
 
375
    return id_ancetre_niveau($id_site, $id_langue, $ligne->gm_ce_menu_pere, $niveau);
376
}
377
 
378
/* +--Fin du code ---------------------------------------------------------------------------------------+
379
* $Log: not supported by cvs2svn $
84 jpm 380
* Revision 1.1  2004/06/15 15:11:37  jpm
381
* Changement de nom et d'arborescence de Genesia en Papyrus.
382
*
4 jpm 383
* Revision 1.43  2004/05/05 06:13:27  jpm
384
* Extraction de la fonction générant le "vous êtes ici", transformée en applette.
385
*
386
* Revision 1.42  2004/05/04 16:24:06  jpm
387
* Amélioration de la fonction générant le "vous êtes ici".
388
*
389
* Revision 1.41  2004/05/04 16:17:31  jpm
390
* Ajout de la fonction générant le "vous êtes ici".
391
*
392
* Revision 1.40  2004/05/03 11:18:17  jpm
393
* Normalisation de deux fonctions issues du fichier fontctions.php.
394
*
395
* Revision 1.39  2004/05/01 16:17:11  jpm
396
* Suppression des fonctions liées à la création des listes de menu. Elles ont été transformées en applette.
397
*
398
* Revision 1.38  2004/05/01 11:43:16  jpm
399
* Suppression des fonction GEN_afficherMenuCommun() et GEN_afficherSelecteurSites() transformées en applette.
400
*
401
* Revision 1.37  2004/04/30 16:18:41  jpm
402
* Correction d'un bogue dans les fonctions de gestion des scripts.
403
*
404
* Revision 1.36  2004/04/28 12:04:40  jpm
405
* Changement du modèle de la base de données.
406
*
407
* Revision 1.35  2004/04/09 16:23:41  jpm
408
* Prise en compte des tables i18n.
409
*
410
* Revision 1.34  2004/04/02 16:34:44  jpm
411
* Extraction de variable globale des fonction, remplacé par un passage en paramètre.
412
*
413
* Revision 1.33  2004/04/01 11:24:51  jpm
414
* Ajout et modification de commentaires pour PhpDocumentor.
415
*
416
* Revision 1.32  2004/03/31 16:52:30  jpm
417
* Modification du code vis à vis du modèle revision 1.9 de Génésia.
418
*
419
* Revision 1.31  2004/03/29 17:13:05  jpm
420
* Suppression de fonction, passer en code classique.
421
*
422
* Revision 1.30  2004/03/27 11:11:58  jpm
423
* Début changement nom de variable dans fonction creerInfoPageEtApplication().
424
*
425
* Revision 1.29  2004/03/26 12:52:25  jpm
426
* Ajout des fonctions creerInfoPageEtApplication() et donnerIdPremiereApplicationLiee().
427
*
428
* +-- Fin du code ----------------------------------------------------------------------------------------+
429
*/
430
?>