Subversion Repositories Applications.papyrus

Rev

Rev 193 | Rev 216 | 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
// +------------------------------------------------------------------------------------------------------+
211 jpm 22
// CVS : $Id: pap_menu.fonct.php,v 1.10 2004-12-06 17:53:55 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
211 jpm 36
*@version       $Revision: 1.10 $ $Date: 2004-12-06 17:53:55 $
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
 
124 jpm 84
/** Fonction GEN_donnerDernierFreres() - Renvoie l'id du dernier menu frère.
85
*
86
* Cette fonction regarde si un menu donné possède au moins un frère dans l'arbre
87
* des menus. Elle retourne l'id du dernier menu frére en utilisant gmr_ordre.
88
* Cette fonction fait appel à la fonction : GEN_lireIdentifiantMenuPere().
89
*
90
* @param integer identifiant du menu.
91
* @return boolean renvoi l'id du dernier menu frère sinon faux.
92
*/
93
function GEN_donnerDernierFreres($id_menu)
94
{
95
    // Initialisation des variables.
96
    global $db;
97
 
98
    $requete =  'SELECT gmr_id_menu_01 '.
99
                'FROM gen_menu_relation '.
100
                'WHERE gmr_id_menu_02 = '.GEN_lireIdentifiantMenuPere($id_menu).' '.
101
                'AND gmr_id_valeur = 1 '.
102
                'AND gmr_id_menu_01 <> '.$id_menu.' '.
103
                'ORDER BY gmr_ordre DESC';
104
 
105
    $resultat = $db->query($requete);
106
    (DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
107
 
108
    $ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
109
    if ($resultat->numRows() > 0) {
110
        return $ligne->gmr_id_menu_01;
111
    } else {
112
        return false;
113
    }
114
}
115
 
4 jpm 116
/** Fonction GEN_etreFreres() - Renvoie vrai si les menus ont le même père.
117
*
118
* Cette fonction regarde si deux menus donnés sont frères dans l'arbre
119
* des menus. Nous regardons si les menus ont le même identifiant comme père.
120
*
121
* @param integer identifiant du premier menu.
122
* @param integer identifiant du seconde menu.
123
* @return boolean renvoi vrai si les deux menus sont frères sinon faux.
124
*/
125
function GEN_etreFreres($id_menu_1, $id_menu_2)
126
{
127
    // Initialisation des variables.
128
    global $db;
129
 
130
    $requete =  'SELECT gmr_id_menu_02 '.
131
                'FROM gen_menu_relation '.
132
                'WHERE gmr_id_menu_01 = '.$id_menu_1.' '.
133
                'AND gmr_id_valeur = 1 ';
134
 
135
    $resultat = $db->query($requete);
136
    (DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
137
 
138
    $ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
139
    $id_pere_1 = $ligne->gmr_id_menu_02;
140
    $resultat->free();
141
 
142
    $requete =  'SELECT gmr_id_menu_02 '.
143
                'FROM gen_menu_relation '.
144
                'WHERE gmr_id_menu_01 = '.$id_menu_2.' '.
145
                'AND gmr_id_valeur = 1 ';
146
 
147
    $resultat = $db->query($requete);
148
    (DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
149
 
150
    $ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
151
    $id_pere_2 = $ligne->gmr_id_menu_02;
152
    $resultat->free();
153
 
154
    return ($id_pere_1 == $id_pere_2);
155
}
156
 
157
/** Fonction GEN_etreAncetre() - Renvoie vrai si le premier argument (identifiant de menu) est un ancètre du second.
158
*
159
* Nous récupérons l'identifiant du père du menu passé en argument numéro 2. Puis,
160
* nous le comparons à l'argument 1. Si c'est les même on retourne faux. Sinon on rapelle
161
* la fonction avec l'identifiant du père trouvé pour l'argument 2. Ainsi de suite jusqu'a
162
* renvoyé vrai où tomber sur un menu racine (idetifiant du père = 0).
84 jpm 163
* Si les variable sont null nous retournons false.
4 jpm 164
* C'est une fonction récursive.
165
*
166
* @param integer identifiant d'un menu numéro 1.
167
* @param integer identifiant d'un menu numéro 2.
168
* @return boolean vrai si le menu numéro 1 est ancètre du second.
169
*/
170
function GEN_etreAncetre($id_menu_1, $id_menu_2)
171
{
84 jpm 172
    //Test erreur
173
    if (is_null($id_menu_1) || is_null($id_menu_2)) {
174
        return false;
175
    }
176
 
4 jpm 177
    // Initialisation des variables.
178
    global $db;
179
 
180
    $requete =  'SELECT gmr_id_menu_02 '.
181
                'FROM gen_menu_relation '.
182
                'WHERE gmr_id_menu_01 = '.$id_menu_2.' '.
183
                'AND gmr_id_valeur = 1 ';
184
 
185
    $resultat = $db->query($requete);
186
    (DB::isError($resultat)) ? die (BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
187
 
188
    $ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
189
    $resultat->free();
190
    if ($ligne->gmr_id_menu_02 == 0) {
191
        return false;
124 jpm 192
    } else if ($ligne->gmr_id_menu_02 == $id_menu_1) {
4 jpm 193
        return true;
194
    } else {
195
        return GEN_etreAncetre($id_menu_1, $ligne->gmr_id_menu_02);
196
    }
197
}
198
 
199
/** Fonction GEN_lireIdentifiantMenuAncetre() - Renvoie l'identifiant du menu ancètre du menu passé en paramètre.
200
*
201
*   Cette fonction parcours la table gen_menu_relation et retourne l'identifiant du
202
*   menu dont le père est le menu racine (identifiant = 0) pour le menu passé en paramètre.
203
*
204
*   @global mixed   objet Pear DB de connexion à la base de données..
205
*   @param  int     identifiant du menu dont il faut rechercher le père.
206
*   @return int     identifiant du menu ancètre du menu passé en paramètre.
207
*/
208
function GEN_lireIdentifiantMenuAncetre($id_menu)
209
{
210
    global $db;
211
    // On teste si on est au niveau d'un menu racine i.e GM_ID_PERE=0
212
    $requete =  'SELECT gmr_id_menu_02 '.
213
                'FROM gen_menu_relation '.
214
                'WHERE gmr_id_menu_01 = '.$id_menu.' '.
215
                'AND gmr_id_valeur = 1 ';// 1 = avoir "père"
216
 
217
    $resultat = $db->query($requete);
218
    (DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
219
 
220
    $ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
221
    $resultat->free();
222
 
223
    // Dans le cas où le menu en paramètre est un menu racine
224
    if ($ligne->gmr_id_menu_02 == 0) {
225
        return $id_menu;
226
    }
227
 
228
    return GEN_lireIdentifiantMenuAncetre($ligne->gmr_id_menu_02);
229
}
230
 
231
/** Fonction GEN_lireIdentifiantMenuPere() - Renvoie l'identifiant du père du menu passé en paramètre.
232
*
233
*   Cette fonction parcours la table gen_menu_relation et retourne l'identifiant du
234
*   menu père du menu passé en paramètre.
235
*
236
*   @global mixed   objet Pear DB de connexion à la base de données..
237
*   @param  int     l'identifiant du fils
238
*   @return mixed   l'identifiant du père,ou false en cas d'erreur.
239
*/
240
function GEN_lireIdentifiantMenuPere($id_menu)
241
{
242
    global $db;
243
 
244
    $requete =  'SELECT gmr_id_menu_02 '.
245
                'FROM gen_menu_relation '.
246
                'WHERE gmr_id_menu_01 = '.$id_menu.' '.
247
                'AND gmr_id_valeur = 1 ';// 1 = avoir "père"
248
 
103 jpm 249
    $resultat = $db->getOne($requete) ;
4 jpm 250
    (DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
251
 
103 jpm 252
    return $resultat;
4 jpm 253
}
254
 
255
/** Fonction GEN_lireInfoMenu() - Renvoie un objet ou un tableau contenant une ligne de la table gen_menu
256
*
257
* Retourne la ligne de la table gen_menu concernant le menu ayant pour identifiant la valeur
258
* passée en paramètre.
259
* Ancien nom : getLevel()
260
*
261
* @param  mixed     une instance de la classse Pear DB.
262
* @param  int       l'identifiant d'un menu.
263
* @param  string    le mode dans Pear DB dans lequel on veut recevoir les infos du menu.
264
* @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.
265
*/
146 jpm 266
function GEN_lireInfoMenu($db, $id_menu, $mode = DB_FETCHMODE_OBJECT)
4 jpm 267
{
268
    //----------------------------------------------------------------------------
149 jpm 269
    // Gestion des erreurs
270
 
271
    //----------------------------------------------------------------------------
4 jpm 272
    // Recherche des informations sur le menu
273
    $requete =  'SELECT * '.
274
                'FROM gen_menu '.
146 jpm 275
                'WHERE gm_id_menu = '.$id_menu;
4 jpm 276
 
277
    $resultat = $db->query($requete);
278
    (DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
279
 
280
    if ($resultat->numRows() != 1) {
281
        return false;
282
    }
283
 
284
    //----------------------------------------------------------------------------
285
    // Récupération des infos
286
    $info_menu = $resultat->fetchRow($mode);
287
    $resultat->free();
288
 
289
    return $info_menu;
290
}
291
 
211 jpm 292
/** Fonction GEN_retournerMenus() - Renvoie un tableau contenant les id de l'ensemble des menus
293
*
294
* Retourne un tableau contenant les id de l'ensemble des menus des différents sites de Papyrus.
295
*
296
* @param  mixed     une instance de la classse Pear DB.
297
* @return array    tableau contenant les id de chaque menu.
298
*/
299
function GEN_retournerMenus($db)
300
{
301
    //----------------------------------------------------------------------------
302
    // Gestion des erreurs
303
 
304
    //----------------------------------------------------------------------------
305
    // Recherche des informations sur le menu
306
    $requete =  'SELECT gm_id_menu '.
307
                'FROM gen_menu ';
308
 
309
    $resultat = $db->query($requete);
310
    (DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
311
 
312
    //----------------------------------------------------------------------------
313
    // Récupération des infos
314
    $tab_retour = array();
315
    while ($info_menu = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
316
        array_push($tab_retour, $info_menu->gm_id_menu);
317
    }
318
    $resultat->free();
319
 
320
    return $tab_retour;
321
}
322
 
4 jpm 323
/** Fonction GEN_lireInfoMenuRelation() - Renvoie un objet ou un tableau contenant une ligne de la table gen_menu_relation
324
*
124 jpm 325
* Par défaut recherche une relation de type père.
4 jpm 326
* Ancien nom : getMenuRelation().
327
*
328
* @param  mixed   Une instance de la classse PEAR_DB
329
* @param  int  l'identifiant d'un menu.
330
* @param  int  l'identifiant d'une valeur de relation.
331
* @param  string  le mode dans Pear DB dans lequel on veut recevoir les infos du menu.
332
* @return  mixed   n objet ou tableau résultat Pear DB, ou false en cas d'erreur.
333
*/
193 jpm 334
function GEN_lireInfoMenuRelation($db, $menuid, $id_valeur = 1, $mode = DB_FETCHMODE_OBJECT)
4 jpm 335
{
336
    //----------------------------------------------------------------------------
337
    // Recherche des informations sur la relation de menu
338
    $requete =  'SELECT * '.
339
                'FROM gen_menu_relation '.
340
                'WHERE gmr_id_menu_01 = '.$menuid.' '.
341
                'AND gmr_id_valeur = '.$id_valeur;
342
 
343
    $result = $db->query($requete);
344
    (DB::isError($result)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $result->getMessage(), $requete)) : '';
345
 
346
    if ($result->numRows() != 1) {
347
        return false;
348
    }
349
 
350
    //----------------------------------------------------------------------------
351
    // Récupération des infos
352
    $info_menu_relation = $result->fetchRow($mode);
353
    $result->free();
354
 
355
    return $info_menu_relation;
356
}
357
 
124 jpm 358
/** Fonction GEN_verifierPresenceCodeMenu() - Vérifie l'existence d'un code de menu
359
*
360
* Permet de vérifier dans la base de données si le code fournie (alphanumérique ou numérique) a déjà
361
* été attribué à un menu ou pas!
362
*
363
* @param  mixed   Une instance de la classse PEAR_DB
364
* @param  string  le type du code (int ou string).
149 jpm 365
* @param  integer l'identifiant du menu courant.
124 jpm 366
* @param  mixed   le code numérique ou alphanumérique.
367
* @return mixed   retourne l'identifiant du menu possédant le code sinon false.
368
*/
149 jpm 369
function GEN_verifierPresenceCodeMenu($db, $type, $id_menu, $code)
124 jpm 370
{
149 jpm 371
    // Gestion des erreurs
372
    if ($code == '') {
373
        return true;
374
    }
375
 
124 jpm 376
    // Requete pour vérifier l'abscence du code numérique et alphanumérique de la table gen_menu
377
    $requete =  'SELECT gm_id_menu '.
149 jpm 378
                'FROM gen_menu '.
379
                'WHERE gm_id_menu <> '.$id_menu.' ';
380
 
124 jpm 381
    // Complément de requête en fonction du type de code
382
    if ($type == 'int') {
149 jpm 383
        $requete .= 'AND gm_code_num = '.$code;
124 jpm 384
    } else {
149 jpm 385
        $requete .= 'AND gm_code_alpha = "'.$code.'"';
124 jpm 386
    }
149 jpm 387
    $resultat = $db->query($requete);
388
    if (DB::isError($resultat)) {
389
            die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
124 jpm 390
    }
149 jpm 391
    $nombre_reponse = $resultat->numRows();
392
    if ($nombre_reponse >= 1) {
393
        return true;
124 jpm 394
    } else {
395
        return false;
396
    }
397
}
398
 
4 jpm 399
/* +--Fin du code ---------------------------------------------------------------------------------------+
400
* $Log: not supported by cvs2svn $
211 jpm 401
* Revision 1.9  2004/11/29 18:34:42  jpm
402
* Correction bogue.
403
*
193 jpm 404
* Revision 1.8  2004/11/10 17:25:51  jpm
405
* Modification de fonction suite à des bogues.
406
*
149 jpm 407
* Revision 1.7  2004/11/09 17:55:26  jpm
408
* Suppresion de fonctions inutiles et mise en conformité.
409
*
146 jpm 410
* Revision 1.6  2004/11/08 17:39:32  jpm
411
* Suppression d'une fonction inutile.
412
* GEN_etreFils() n'est pas utile. On peut utiliser GEN_etreAncetre() à la place.
413
*
129 jpm 414
* Revision 1.5  2004/11/04 12:51:45  jpm
415
* Suppression de message de débogage.
416
*
127 jpm 417
* Revision 1.4  2004/11/04 12:23:50  jpm
418
* Nouvelles fonctions sur les menus frères.
419
*
124 jpm 420
* Revision 1.3  2004/10/25 14:16:21  jpm
421
* Suppression de code commenté.
422
*
103 jpm 423
* Revision 1.2  2004/10/21 18:15:21  jpm
424
* Ajout de gestion d'erreur aux fonctions.
425
*
84 jpm 426
* Revision 1.1  2004/06/15 15:11:37  jpm
427
* Changement de nom et d'arborescence de Genesia en Papyrus.
428
*
4 jpm 429
* Revision 1.43  2004/05/05 06:13:27  jpm
430
* Extraction de la fonction générant le "vous êtes ici", transformée en applette.
431
*
432
* Revision 1.42  2004/05/04 16:24:06  jpm
433
* Amélioration de la fonction générant le "vous êtes ici".
434
*
435
* Revision 1.41  2004/05/04 16:17:31  jpm
436
* Ajout de la fonction générant le "vous êtes ici".
437
*
438
* Revision 1.40  2004/05/03 11:18:17  jpm
439
* Normalisation de deux fonctions issues du fichier fontctions.php.
440
*
441
* Revision 1.39  2004/05/01 16:17:11  jpm
442
* Suppression des fonctions liées à la création des listes de menu. Elles ont été transformées en applette.
443
*
444
* Revision 1.38  2004/05/01 11:43:16  jpm
445
* Suppression des fonction GEN_afficherMenuCommun() et GEN_afficherSelecteurSites() transformées en applette.
446
*
447
* Revision 1.37  2004/04/30 16:18:41  jpm
448
* Correction d'un bogue dans les fonctions de gestion des scripts.
449
*
450
* Revision 1.36  2004/04/28 12:04:40  jpm
451
* Changement du modèle de la base de données.
452
*
453
* Revision 1.35  2004/04/09 16:23:41  jpm
454
* Prise en compte des tables i18n.
455
*
456
* Revision 1.34  2004/04/02 16:34:44  jpm
457
* Extraction de variable globale des fonction, remplacé par un passage en paramètre.
458
*
459
* Revision 1.33  2004/04/01 11:24:51  jpm
460
* Ajout et modification de commentaires pour PhpDocumentor.
461
*
462
* Revision 1.32  2004/03/31 16:52:30  jpm
463
* Modification du code vis à vis du modèle revision 1.9 de Génésia.
464
*
465
* Revision 1.31  2004/03/29 17:13:05  jpm
466
* Suppression de fonction, passer en code classique.
467
*
468
* Revision 1.30  2004/03/27 11:11:58  jpm
469
* Début changement nom de variable dans fonction creerInfoPageEtApplication().
470
*
471
* Revision 1.29  2004/03/26 12:52:25  jpm
472
* Ajout des fonctions creerInfoPageEtApplication() et donnerIdPremiereApplicationLiee().
473
*
474
* +-- Fin du code ----------------------------------------------------------------------------------------+
475
*/
476
?>