Subversion Repositories Applications.papyrus

Rev

Rev 435 | Rev 597 | 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
// +------------------------------------------------------------------------------------------------------+
443 ddelon 22
// CVS : $Id: pap_menu.fonct.php,v 1.24 2005-09-20 17:01:22 ddelon 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 :
285 jpm 31
*@author        Jean-Pascal MILCENT <jpm@tela-botanica.org>
4 jpm 32
//Autres auteurs :
33
*@author        Alexandre GRANIER <alexadandre@tela-botanica.org>
285 jpm 34
*@author        Laurent COUDOUNEAU <laurent.coudouneau@ema.fr>
4 jpm 35
*@copyright     Tela-Botanica 2000-2004
443 ddelon 36
*@version       $Revision: 1.24 $ $Date: 2005-09-20 17:01:22 $
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();
443 ddelon 190
    if (isset($ligne)) {
191
	    if  ($ligne->gmr_id_menu_02 == 0) {
192
	        return false;
193
	    } else if ($ligne->gmr_id_menu_02 == $id_menu_1) {
194
	        return true;
195
	    } else {
196
	        return GEN_etreAncetre($id_menu_1, $ligne->gmr_id_menu_02);
197
	    }
4 jpm 198
    }
199
}
200
 
201
/** Fonction GEN_lireIdentifiantMenuAncetre() - Renvoie l'identifiant du menu ancètre du menu passé en paramètre.
202
*
203
*   Cette fonction parcours la table gen_menu_relation et retourne l'identifiant du
204
*   menu dont le père est le menu racine (identifiant = 0) pour le menu passé en paramètre.
205
*
206
*   @global mixed   objet Pear DB de connexion à la base de données..
207
*   @param  int     identifiant du menu dont il faut rechercher le père.
208
*   @return int     identifiant du menu ancètre du menu passé en paramètre.
209
*/
210
function GEN_lireIdentifiantMenuAncetre($id_menu)
211
{
212
    global $db;
213
    // On teste si on est au niveau d'un menu racine i.e GM_ID_PERE=0
214
    $requete =  'SELECT gmr_id_menu_02 '.
215
                'FROM gen_menu_relation '.
216
                'WHERE gmr_id_menu_01 = '.$id_menu.' '.
217
                'AND gmr_id_valeur = 1 ';// 1 = avoir "père"
218
 
219
    $resultat = $db->query($requete);
220
    (DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
221
 
222
    $ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
223
    $resultat->free();
224
 
225
    // Dans le cas où le menu en paramètre est un menu racine
226
    if ($ligne->gmr_id_menu_02 == 0) {
227
        return $id_menu;
228
    }
229
 
230
    return GEN_lireIdentifiantMenuAncetre($ligne->gmr_id_menu_02);
231
}
232
 
233
/** Fonction GEN_lireIdentifiantMenuPere() - Renvoie l'identifiant du père du menu passé en paramètre.
234
*
334 jpm 235
* Cette fonction parcours la table gen_menu_relation et retourne l'identifiant du
236
* menu père du menu passé en paramètre.
4 jpm 237
*
334 jpm 238
* @global mixed   objet Pear DB de connexion à la base de données..
239
* @param  int     l'identifiant du fils
240
* @param  mixed     une instance de la classse Pear DB.
241
* @return mixed   l'identifiant du père,ou false en cas d'erreur.
4 jpm 242
*/
334 jpm 243
function GEN_lireIdentifiantMenuPere($id_menu, $db = null)
4 jpm 244
{
334 jpm 245
    if (is_null($db)) {
246
        $db =& $GLOBALS['_GEN_commun']['pear_db'];
247
    }
4 jpm 248
 
249
    $requete =  'SELECT gmr_id_menu_02 '.
250
                'FROM gen_menu_relation '.
251
                'WHERE gmr_id_menu_01 = '.$id_menu.' '.
252
                'AND gmr_id_valeur = 1 ';// 1 = avoir "père"
253
 
103 jpm 254
    $resultat = $db->getOne($requete) ;
4 jpm 255
    (DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
256
 
103 jpm 257
    return $resultat;
4 jpm 258
}
259
 
260
/** Fonction GEN_lireInfoMenu() - Renvoie un objet ou un tableau contenant une ligne de la table gen_menu
261
*
262
* Retourne la ligne de la table gen_menu concernant le menu ayant pour identifiant la valeur
263
* passée en paramètre.
264
* Ancien nom : getLevel()
265
*
266
* @param  mixed     une instance de la classse Pear DB.
267
* @param  int       l'identifiant d'un menu.
268
* @param  string    le mode dans Pear DB dans lequel on veut recevoir les infos du menu.
269
* @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.
270
*/
350 jpm 271
function GEN_lireInfoMenu(&$db, $id_menu, $mode = DB_FETCHMODE_OBJECT)
4 jpm 272
{
407 alexandre_ 273
 
4 jpm 274
    //----------------------------------------------------------------------------
275
    // Recherche des informations sur le menu
276
    $requete =  'SELECT * '.
277
                'FROM gen_menu '.
146 jpm 278
                'WHERE gm_id_menu = '.$id_menu;
4 jpm 279
 
280
    $resultat = $db->query($requete);
281
    (DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
282
 
283
    if ($resultat->numRows() != 1) {
284
        return false;
285
    }
286
 
287
    //----------------------------------------------------------------------------
288
    // Récupération des infos
289
    $info_menu = $resultat->fetchRow($mode);
290
    $resultat->free();
291
 
292
    return $info_menu;
293
}
322 jpm 294
/** Fonction GEN_retournerMenuCodeNum() - Renvoie le code num d'un menu en fonction du code Alphanumérique
295
*
296
* Retourne le code numérique d'un menu en fonction du code alphanumérique.
297
*
298
* @param  mixed  une instance de la classse Pear DB.
299
* @param  string le code alphanumérique d'un menu.
300
* @return mixed le code numérique du menu sinon false.
301
*/
350 jpm 302
function GEN_retournerMenuCodeNum(&$db, $code_alphanum)
322 jpm 303
{
304
    //----------------------------------------------------------------------------
305
    // Recherche des informations sur le menu
306
    $requete =  'SELECT gm_code_num '.
307
                'FROM gen_menu '.
308
                'WHERE gm_code_alpha = "'.$code_alphanum.'"';
309
 
310
    $resultat = $db->query($requete);
311
    (DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
312
 
313
    if ($resultat->numRows() != 1) {
314
        return false;
315
    }
316
 
317
    //----------------------------------------------------------------------------
318
    // Récupération des infos
319
    $info_menu = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
320
    $code_num = $info_menu->gm_code_num;
321
    $resultat->free();
322
 
323
    return $code_num;
324
}
4 jpm 325
 
322 jpm 326
/** Fonction GEN_retournerMenuCodeAlpha() - Renvoie le code alphanumérique d'un menu en fonction du code numérique
327
*
328
* Retourne le code alphanumérique d'un menu en fonction du code numérique.
329
*
330
* @param  mixed  une instance de la classse Pear DB.
331
* @param  string le code numérique d'un menu.
332
* @return mixed le code alphanumérique du menu sinon false.
333
*/
350 jpm 334
function GEN_retournerMenuCodeAlpha(&$db, $code_num)
322 jpm 335
{
336
    //----------------------------------------------------------------------------
337
    // Recherche des informations sur le menu
338
    $requete =  'SELECT gm_code_alpha '.
339
                'FROM gen_menu '.
340
                'WHERE gm_code_num = '.$code_num;
341
 
342
    $resultat = $db->query($requete);
343
    (DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
344
 
345
    if ($resultat->numRows() != 1) {
346
        return false;
347
    }
348
 
349
    //----------------------------------------------------------------------------
350
    // Récupération des infos
351
    $info_menu = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
352
    $code_alphanum = $info_menu->gm_code_alpha;
353
    $resultat->free();
354
 
355
    return $code_alphanum;
356
}
357
 
216 jpm 358
/** Fonction GEN_lireContenuMenu() - Renvoie un objet ou un tableau contenant une ligne de la table gen_menu_contenu
359
*
360
* Retourne la ligne de la table gen_menu_contenu concernant le menu ayant pour identifiant la valeur
372 jpm 361
* passée en paramètre. Seul la dernière version du contenu du menu est retourné.
216 jpm 362
*
363
* @param  mixed     une instance de la classse Pear DB.
364
* @param  int       l'identifiant d'un menu.
365
* @param  string    le mode dans Pear DB dans lequel on veut recevoir les infos du menu.
366
* @return  mixed    un objet ou tableau résultat de Pear DB contenant une ligne de la table gen_menu_contenu, ou false en cas d'erreur.
367
*/
350 jpm 368
function GEN_lireContenuMenu(&$db, $id_menu, $mode = DB_FETCHMODE_OBJECT)
216 jpm 369
{
370
    //----------------------------------------------------------------------------
371
    // Gestion des erreurs
372
 
373
    //----------------------------------------------------------------------------
374
    // Recherche des informations sur le menu
375
    $requete =  'SELECT * '.
376
                'FROM gen_menu_contenu '.
372 jpm 377
                'WHERE gmc_ce_menu = '.$id_menu.' '.
378
                'AND gmc_bool_dernier = 1';
216 jpm 379
 
380
    $resultat = $db->query($requete);
381
    (DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
382
 
383
    if ($resultat->numRows() != 1) {
384
        return false;
385
    }
386
 
387
    //----------------------------------------------------------------------------
388
    // Récupération des infos
389
    $info_menu = $resultat->fetchRow($mode);
390
    $resultat->free();
391
 
392
    return $info_menu;
393
}
394
 
211 jpm 395
/** Fonction GEN_retournerMenus() - Renvoie un tableau contenant les id de l'ensemble des menus
396
*
397
* Retourne un tableau contenant les id de l'ensemble des menus des différents sites de Papyrus.
398
*
399
* @param  mixed     une instance de la classse Pear DB.
400
* @return array    tableau contenant les id de chaque menu.
401
*/
350 jpm 402
function GEN_retournerMenus(&$db)
211 jpm 403
{
404
    //----------------------------------------------------------------------------
405
    // Gestion des erreurs
406
 
407
    //----------------------------------------------------------------------------
408
    // Recherche des informations sur le menu
409
    $requete =  'SELECT gm_id_menu '.
410
                'FROM gen_menu ';
411
 
412
    $resultat = $db->query($requete);
413
    (DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
414
 
415
    //----------------------------------------------------------------------------
416
    // Récupération des infos
417
    $tab_retour = array();
418
    while ($info_menu = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
419
        array_push($tab_retour, $info_menu->gm_id_menu);
420
    }
421
    $resultat->free();
422
 
423
    return $tab_retour;
424
}
425
 
4 jpm 426
/** Fonction GEN_lireInfoMenuRelation() - Renvoie un objet ou un tableau contenant une ligne de la table gen_menu_relation
427
*
124 jpm 428
* Par défaut recherche une relation de type père.
4 jpm 429
* Ancien nom : getMenuRelation().
430
*
431
* @param  mixed   Une instance de la classse PEAR_DB
432
* @param  int  l'identifiant d'un menu.
433
* @param  int  l'identifiant d'une valeur de relation.
434
* @param  string  le mode dans Pear DB dans lequel on veut recevoir les infos du menu.
330 jpm 435
* @return  mixed  un objet ou tableau résultat Pear DB, ou false en cas d'erreur.
4 jpm 436
*/
350 jpm 437
function GEN_lireInfoMenuRelation(&$db, $menuid, $id_valeur = 1, $mode = DB_FETCHMODE_OBJECT)
4 jpm 438
{
439
    //----------------------------------------------------------------------------
440
    // Recherche des informations sur la relation de menu
441
    $requete =  'SELECT * '.
442
                'FROM gen_menu_relation '.
443
                'WHERE gmr_id_menu_01 = '.$menuid.' '.
444
                'AND gmr_id_valeur = '.$id_valeur;
445
 
446
    $result = $db->query($requete);
447
    (DB::isError($result)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $result->getMessage(), $requete)) : '';
448
 
449
    if ($result->numRows() != 1) {
450
        return false;
451
    }
452
 
453
    //----------------------------------------------------------------------------
454
    // Récupération des infos
455
    $info_menu_relation = $result->fetchRow($mode);
456
    $result->free();
457
 
458
    return $info_menu_relation;
459
}
460
 
124 jpm 461
/** Fonction GEN_verifierPresenceCodeMenu() - Vérifie l'existence d'un code de menu
462
*
463
* Permet de vérifier dans la base de données si le code fournie (alphanumérique ou numérique) a déjà
464
* été attribué à un menu ou pas!
465
*
466
* @param  mixed   Une instance de la classse PEAR_DB
467
* @param  string  le type du code (int ou string).
149 jpm 468
* @param  integer l'identifiant du menu courant.
124 jpm 469
* @param  mixed   le code numérique ou alphanumérique.
470
* @return mixed   retourne l'identifiant du menu possédant le code sinon false.
471
*/
350 jpm 472
function GEN_verifierPresenceCodeMenu(&$db, $type, $id_menu, $code)
124 jpm 473
{
149 jpm 474
    // Gestion des erreurs
475
    if ($code == '') {
476
        return true;
477
    }
478
 
124 jpm 479
    // Requete pour vérifier l'abscence du code numérique et alphanumérique de la table gen_menu
480
    $requete =  'SELECT gm_id_menu '.
149 jpm 481
                'FROM gen_menu '.
482
                'WHERE gm_id_menu <> '.$id_menu.' ';
483
 
124 jpm 484
    // Complément de requête en fonction du type de code
485
    if ($type == 'int') {
149 jpm 486
        $requete .= 'AND gm_code_num = '.$code;
124 jpm 487
    } else {
149 jpm 488
        $requete .= 'AND gm_code_alpha = "'.$code.'"';
124 jpm 489
    }
149 jpm 490
    $resultat = $db->query($requete);
491
    if (DB::isError($resultat)) {
492
            die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
124 jpm 493
    }
149 jpm 494
    $nombre_reponse = $resultat->numRows();
495
    if ($nombre_reponse >= 1) {
496
        return true;
124 jpm 497
    } else {
498
        return false;
499
    }
500
}
330 jpm 501
/** Fonction GEN_lireInfoMenuMotsCles() - Renvoie un objet ou un tableau contenant des lignes de la table gen_menu
502
*
503
* Renvoie un objet ou un tableau contenant une ligne de la table gen_menu en fonction des mots clés présents dans
504
* la table gen_menu.
505
*
506
* @param  mixed   Une instance de la classse PEAR_DB
507
* @param  array  un tableau de mots clés.
396 jpm 508
* @param  string  la condition séparant chaque rechercher de mots-clés (AND ou OR).
509
* @param  string  l'ordre d'affichage des Menus (ASC ou DESC).
330 jpm 510
* @param  string  le mode dans Pear DB dans lequel on veut recevoir les infos du menu.
511
* @param  boolean  true pour grouper les résultats (voir Pear DB : getAssoc() ) sinon false.
512
* @return  mixed   un objet ou tableau résultat Pear DB, ou false en cas d'erreur.
513
*/
396 jpm 514
function GEN_lireInfoMenuMotsCles(&$db, $tab_mots, $condition = 'OR', $ordre = 'ASC', $mode = DB_FETCHMODE_OBJECT, $groupe = false)
330 jpm 515
{
516
    //----------------------------------------------------------------------------
517
    // Recherche des informations sur les menus en fonctions des mots clés
518
    $requete =  'SELECT DISTINCT * '.
519
                'FROM gen_menu '.
520
                'WHERE ';
521
    for ($i = 0; $i < count($tab_mots); $i++) {
522
        if ($i == 0) {
523
            $requete .= 'gm_mots_cles LIKE "%'.$tab_mots[$i].'%" ';
524
        } else {
396 jpm 525
            $requete .= $condition.' gm_mots_cles LIKE "%'.$tab_mots[$i].'%" ';
330 jpm 526
        }
527
    }
396 jpm 528
    $requete .= 'ORDER BY gm_date_creation '.$ordre;
330 jpm 529
    $aso_info =& $db->getAssoc($requete, false, array(), $mode, $groupe);
530
    (PEAR::isError($aso_info)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $aso_info->getMessage(), $requete)) : '';
531
 
532
    return $aso_info;
533
}
407 alexandre_ 534
 
535
/** Fonction GEN_lireInfoMenuMeta() - Renvoie un objet ou un tableau contenant des lignes de la table gen_menu
536
*
537
* Renvoie un objet ou un tableau contenant une ligne de la table gen_menu en fonction des mots clés,
538
* catégories, id_menu,
539
* la table gen_menu.
540
*
541
* @param  mixed   Une instance de la classse PEAR_DB
542
* @param  array  un tableau de mots clés.
543
* @param  string  la condition séparant chaque rechercher de mots-clés (AND ou OR).
544
* @param  string  l'ordre d'affichage des Menus (ASC ou DESC).
545
* @param  string  le mode dans Pear DB dans lequel on veut recevoir les infos du menu.
546
* @param  boolean  true pour grouper les résultats (voir Pear DB : getAssoc() ) sinon false.
547
* @return  mixed   un objet ou tableau résultat Pear DB, ou false en cas d'erreur.
548
*/
549
function GEN_lireInfoMenuMeta(&$db, $tab_mots, $tab_cat, $condition = 'OR', $condition2="OR", $ordre = 'ASC', $mode = DB_FETCHMODE_OBJECT, $groupe = false)
550
{
551
    //----------------------------------------------------------------------------
552
    // Recherche des informations sur les menus en fonctions des mots clés
553
    $requete =  'SELECT DISTINCT * '.
554
                'FROM gen_menu '.
555
                'WHERE ';
556
    for ($i = 0; $i < count($tab_mots); $i++) {
557
        if ($i == 0) {
558
            $requete .= 'gm_mots_cles LIKE "%'.$tab_mots[$i].'%" ';
559
        } else {
560
            $requete .= $condition.' gm_mots_cles LIKE "%'.$tab_mots[$i].'%" ';
561
        }
562
    }
563
    if (count($tab_mots) != 0) $requete .= 'AND ' ;
564
    for ($i = 0; $i < count($tab_cat); $i++) {
565
        if ($i == 0) {
566
            $requete .= 'gm_categorie LIKE "%'.$tab_cat[$i].'%" ';
567
        } else {
568
            $requete .= $condition2.' gm_categorie LIKE "%'.$tab_cat[$i].'%" ';
569
        }
570
    }
571
    $requete .= 'ORDER BY gm_date_creation '.$ordre;
572
    $aso_info =& $db->getAssoc($requete, false, array(), $mode, $groupe);
573
    (PEAR::isError($aso_info)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $aso_info->getMessage(), $requete)) : '';
574
 
575
    return $aso_info;
576
}
330 jpm 577
/** Fonction GEN_lireInfoMenuCategorie() - Renvoie un objet ou un tableau contenant des lignes de la table gen_menu
578
*
579
* Renvoie un objet ou un tableau contenant une ligne de la table gen_menu en fonction des catégories présentes dans
580
* la table gen_menu.
581
*
582
* @param  mixed   Une instance de la classse PEAR_DB
583
* @param  array  un tableau de catégorie(s).
584
* @param  string  le mode dans Pear DB dans lequel on veut recevoir les infos du menu.
585
* @param  boolean  true pour grouper les résultats (voir Pear DB : getAssoc() ) sinon false.
586
* @return  mixed   un objet ou tableau résultat Pear DB, ou false en cas d'erreur.
587
*/
350 jpm 588
function GEN_lireInfoMenuCategorie(&$db, $tab_categories, $mode = DB_FETCHMODE_OBJECT, $groupe = false)
330 jpm 589
{
590
    //----------------------------------------------------------------------------
591
    // Recherche des informations sur les menus en fonctions des mots clés
592
    $requete =  'SELECT DISTINCT * '.
593
                'FROM gen_menu '.
594
                'WHERE ';
595
    for ($i = 0; $i < count($tab_categories); $i++) {
596
        if ($i == 0) {
597
            $requete .= 'gm_categorie LIKE "%'.$tab_categories[$i].'%" ';
598
        } else {
599
            $requete .= 'OR gm_categorie LIKE "%'.$tab_categories[$i].'%" ';
600
        }
601
    }
602
    $aso_info =& $db->getAssoc($requete, false, array(), $mode, $groupe);
603
    (PEAR::isError($aso_info)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $aso_info->getMessage(), $requete)) : '';
604
 
605
    return $aso_info;
606
}
607
/** Fonction GEN_lireInfoMenuContenuDate() - Renvoie un objet ou un tableau contenant des lignes de la table gen_menu
608
*
609
* Renvoie un objet ou un tableau contenant une ligne de la table gen_menu en fonction des catégories présentes dans
610
* la table gen_menu.
611
*
612
* @param  mixed   Une instance de la classse PEAR_DB
340 jpm 613
* @param  array  le type de modification.
614
* @param  array  le code alphanumérique du site ou de plusieurs sites séparés par des virgules.
330 jpm 615
* @param  string  le mode dans Pear DB dans lequel on veut recevoir les infos du menu.
616
* @param  boolean  true pour grouper les résultats (voir Pear DB : getAssoc() ) sinon false.
617
* @return  mixed   un objet ou tableau résultat Pear DB, ou false en cas d'erreur.
618
*/
407 alexandre_ 619
function GEN_lireInfoMenuContenuDate(&$db, $type_modif = '', $site = '', $categorie='', $mode = DB_FETCHMODE_OBJECT, $groupe = false)
330 jpm 620
{
340 jpm 621
    $type_modif_sql = 'AND gmc_ce_type_modification IN (%s) ';
622
    if (!empty($type_modif)) {
623
        $type_modif = sprintf($type_modif_sql, $type_modif);
624
    } else {
625
        $type_modif = sprintf($type_modif_sql, '1, 2');
626
    }
627
    $site_sql = 'AND gs_code_alpha IN (%s) ';
628
    if (!empty($site)) {
629
        $site = sprintf($site_sql, '"'.implode('", "', array_map('trim', explode(',', $site))).'"');
630
    } else {
631
        $site = '';
632
    }
407 alexandre_ 633
 
634
    if (!empty($categorie)) {
635
        $categorie = 'AND gm_categorie like "%'.$categorie.'%"' ;
636
    } else {
637
        $categorie = '';
638
    }
330 jpm 639
    // Recherche des informations sur les menus en fonctions des mots clés
340 jpm 640
    $requete =  'SELECT DISTINCT gen_menu.*, gs_code_alpha, gmc_date_modification, gmc_resume_modification, gmc_ce_type_modification '.
641
                'FROM gen_site, gen_menu, gen_menu_contenu '.
642
                'WHERE gmc_date_modification <= "'.date('Y-m-d H:i:s', time()).'" '.
643
                'AND gm_ce_site = gs_id_site '.
330 jpm 644
                'AND gm_id_menu = gmc_ce_menu '.
645
                'AND gmc_bool_dernier = 1 '.
340 jpm 646
                $site.
647
                $type_modif.
407 alexandre_ 648
                $categorie.
330 jpm 649
                'ORDER BY gmc_date_modification DESC';
340 jpm 650
 
435 ddelon 651
    $aso_info =& $db->getAssoc($requete, false, array(), $mode, $groupe);
330 jpm 652
    (PEAR::isError($aso_info)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $aso_info->getMessage(), $requete)) : '';
653
 
654
    return $aso_info;
655
}
344 jpm 656
/** Fonction GEN_retournerTableauMenusSiteCodeAlpha() - Renvoie un tableau de tableau contenant des lignes de la table gen_menu
657
*
658
* Renvoie un tableau de tableau contenant les lignes de la table gen_menu pour un site donné. Les tableaux sont imbriquées
659
* pour reproduire l'arborescence des menus.
660
*
661
* @param  mixed  Une instance de la classse PEAR_DB
662
* @param  string le code alphanumérique du site.
663
* @return  array   un tableau de tableau contenant des lignes de la table gen_menu.
664
*/
665
function GEN_retournerTableauMenusSiteCodeAlpha(&$db, $site, $id_pere = 0, $aso_site_menus = array())
666
{
667
 
668
    $requete =  'SELECT gen_menu.* '.
669
                'FROM gen_site, gen_menu, gen_menu_relation AS GMR01, gen_menu_relation AS GMR02 '.
670
                'WHERE GMR01.gmr_id_menu_02 = '.$id_pere.' '.
671
                'AND GMR01.gmr_id_menu_01 = gm_id_menu '.
672
                'AND gs_code_alpha = "'.$site.'" '.
673
                'AND gm_ce_site = gs_id_site '.
674
                'AND GMR01.gmr_id_valeur = 1 '.// 1 = avoir "père"
675
                'AND GMR02.gmr_id_menu_02 = gm_id_menu '.
676
                'AND GMR02.gmr_id_menu_01 = GMR02.gmr_id_menu_02 '.
677
                'AND GMR02.gmr_id_valeur = 100 '.// 100 = type "menu classique"
678
                'ORDER BY GMR01.gmr_ordre ASC';
679
    $resultat = $db->query($requete);
680
    if (DB::isError($resultat)) {
681
        die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));
682
    }
683
 
684
    if ($resultat->numRows() > 0) {
376 jpm 685
        while ($ligne = $resultat->fetchRow(DB_FETCHMODE_ASSOC)) {
344 jpm 686
            $aso_site_menus[$ligne['gm_id_menu']] = $ligne;
376 jpm 687
            $aso_site_menus[$ligne['gm_id_menu']]['sous_menus'] = GEN_retournerTableauMenusSiteCodeAlpha($db, $site, $ligne['gm_id_menu']);
344 jpm 688
        }
689
    }
690
    return $aso_site_menus;
691
}
4 jpm 692
/* +--Fin du code ---------------------------------------------------------------------------------------+
693
* $Log: not supported by cvs2svn $
443 ddelon 694
* Revision 1.23  2005/08/29 09:05:12  ddelon
695
* Suppression message debug
696
*
435 ddelon 697
* Revision 1.22  2005/07/08 15:16:37  alexandre_tb
698
* ajout de la fonction GEN_lireInfoMenuMeta() qui permet de sélectionner des menus en fonction de leur mot clé et leur catégorie
699
*
407 alexandre_ 700
* Revision 1.21  2005/06/08 19:11:43  jpm
701
* Ajout de ordre et condition pour la fonction de lecture des infos sur les menus.
702
*
396 jpm 703
* Revision 1.20  2005/05/26 08:00:51  jpm
704
* Correction dans la fonction GEN_retournerTableauMenusSiteCodeAlpha().
705
*
376 jpm 706
* Revision 1.19  2005/05/25 13:46:58  jpm
707
* Changement du sql de la fonction GEN_lireContenuMenu().
708
*
372 jpm 709
* Revision 1.18  2005/04/19 17:21:19  jpm
710
* Utilisation des références d'objets.
711
*
350 jpm 712
* Revision 1.17  2005/04/18 16:41:25  jpm
713
* Ajout d'une fonction pour récupérer tous les menus d'un site avec son code alphanumérique.
714
*
344 jpm 715
* Revision 1.16  2005/04/14 17:40:31  jpm
716
* Modification fonction pour les actions.
717
*
340 jpm 718
* Revision 1.15  2005/04/14 13:56:53  jpm
719
* Modification d'une ancienne fonction.
720
*
334 jpm 721
* Revision 1.14  2005/04/12 16:13:50  jpm
722
* Ajout de fonction renvoyant des infos sur un menu en fonction des mots clés, catégories ou date de modification du contenu.
723
*
330 jpm 724
* Revision 1.13  2005/03/30 08:53:59  jpm
725
* Ajout de fonctions permettant de récupérer les codes alphanumériques ou numériques en fonction de l'un ou de l'autre.
726
*
322 jpm 727
* Revision 1.12  2005/02/28 11:12:03  jpm
728
* Modification des auteurs.
729
*
285 jpm 730
* Revision 1.11  2004/12/06 19:49:35  jpm
731
* Ajout d'une fonction permettant de récupérer le contenu d'un menu.
732
*
216 jpm 733
* Revision 1.10  2004/12/06 17:53:55  jpm
734
* Ajout fonction GEN_retournerMenus().
735
*
211 jpm 736
* Revision 1.9  2004/11/29 18:34:42  jpm
737
* Correction bogue.
738
*
193 jpm 739
* Revision 1.8  2004/11/10 17:25:51  jpm
740
* Modification de fonction suite à des bogues.
741
*
149 jpm 742
* Revision 1.7  2004/11/09 17:55:26  jpm
743
* Suppresion de fonctions inutiles et mise en conformité.
744
*
146 jpm 745
* Revision 1.6  2004/11/08 17:39:32  jpm
746
* Suppression d'une fonction inutile.
747
* GEN_etreFils() n'est pas utile. On peut utiliser GEN_etreAncetre() à la place.
748
*
129 jpm 749
* Revision 1.5  2004/11/04 12:51:45  jpm
750
* Suppression de message de débogage.
751
*
127 jpm 752
* Revision 1.4  2004/11/04 12:23:50  jpm
753
* Nouvelles fonctions sur les menus frères.
754
*
124 jpm 755
* Revision 1.3  2004/10/25 14:16:21  jpm
756
* Suppression de code commenté.
757
*
103 jpm 758
* Revision 1.2  2004/10/21 18:15:21  jpm
759
* Ajout de gestion d'erreur aux fonctions.
760
*
84 jpm 761
* Revision 1.1  2004/06/15 15:11:37  jpm
762
* Changement de nom et d'arborescence de Genesia en Papyrus.
763
*
4 jpm 764
* Revision 1.43  2004/05/05 06:13:27  jpm
765
* Extraction de la fonction générant le "vous êtes ici", transformée en applette.
766
*
767
* Revision 1.42  2004/05/04 16:24:06  jpm
768
* Amélioration de la fonction générant le "vous êtes ici".
769
*
770
* Revision 1.41  2004/05/04 16:17:31  jpm
771
* Ajout de la fonction générant le "vous êtes ici".
772
*
773
* Revision 1.40  2004/05/03 11:18:17  jpm
774
* Normalisation de deux fonctions issues du fichier fontctions.php.
775
*
776
* Revision 1.39  2004/05/01 16:17:11  jpm
777
* Suppression des fonctions liées à la création des listes de menu. Elles ont été transformées en applette.
778
*
779
* Revision 1.38  2004/05/01 11:43:16  jpm
780
* Suppression des fonction GEN_afficherMenuCommun() et GEN_afficherSelecteurSites() transformées en applette.
781
*
782
* Revision 1.37  2004/04/30 16:18:41  jpm
783
* Correction d'un bogue dans les fonctions de gestion des scripts.
784
*
785
* Revision 1.36  2004/04/28 12:04:40  jpm
786
* Changement du modèle de la base de données.
787
*
788
* Revision 1.35  2004/04/09 16:23:41  jpm
789
* Prise en compte des tables i18n.
790
*
791
* Revision 1.34  2004/04/02 16:34:44  jpm
792
* Extraction de variable globale des fonction, remplacé par un passage en paramètre.
793
*
794
* Revision 1.33  2004/04/01 11:24:51  jpm
795
* Ajout et modification de commentaires pour PhpDocumentor.
796
*
797
* Revision 1.32  2004/03/31 16:52:30  jpm
798
* Modification du code vis à vis du modèle revision 1.9 de Génésia.
799
*
800
* Revision 1.31  2004/03/29 17:13:05  jpm
801
* Suppression de fonction, passer en code classique.
802
*
803
* Revision 1.30  2004/03/27 11:11:58  jpm
804
* Début changement nom de variable dans fonction creerInfoPageEtApplication().
805
*
806
* Revision 1.29  2004/03/26 12:52:25  jpm
807
* Ajout des fonctions creerInfoPageEtApplication() et donnerIdPremiereApplicationLiee().
808
*
809
* +-- Fin du code ----------------------------------------------------------------------------------------+
810
*/
811
?>