Rev 211 | Rev 322 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php/*vim: set expandtab tabstop=4 shiftwidth=4: */// +------------------------------------------------------------------------------------------------------+// | PHP version 4.1 |// +------------------------------------------------------------------------------------------------------+// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |// +------------------------------------------------------------------------------------------------------+// | This library is free software; you can redistribute it and/or |// | modify it under the terms of the GNU Lesser General Public |// | License as published by the Free Software Foundation; either |// | version 2.1 of the License, or (at your option) any later version. |// | |// | This library is distributed in the hope that it will be useful, |// | but WITHOUT ANY WARRANTY; without even the implied warranty of |// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |// | Lesser General Public License for more details. |// | |// | You should have received a copy of the GNU Lesser General Public |// | License along with this library; if not, write to the Free Software |// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |// +------------------------------------------------------------------------------------------------------+// CVS : $Id: pap_menu.fonct.php,v 1.11 2004-12-06 19:49:35 jpm Exp $/*** Bibliothèque de fonction sur le rendu.** Cette bibliothèque contient des fonctions utilisé par le rendu des pages de Papyrus.**@package Papyrus*@subpackage Fonctions//Auteur original :*@author Laurent COUDOUNEAU <laurent.coudouneau@ema.fr>//Autres auteurs :*@author Alexandre GRANIER <alexadandre@tela-botanica.org>*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>*@copyright Tela-Botanica 2000-2004*@version $Revision: 1.11 $ $Date: 2004-12-06 19:49:35 $// +------------------------------------------------------------------------------------------------------+*/// +------------------------------------------------------------------------------------------------------+// | LISTE des FONCTIONS |// +------------------------------------------------------------------------------------------------------+/** Fonction GEN_donnerProfondeurMax() - Renvoie le nombre de niveau de menu.** Cette fonction calcule, pour un menu donné, le nombre de niveau de menu fils complétant* l'arbre des menus jusqu'au feuilles.* Ici on l'utilise en passant l'argument égal à zéro c'est à dire* en partant du menu racine d'un site gmr_id_menu_02 = 0.* C'est une fonction récursive.* Noter que la variable $prof est statique.** @param integer identifiant du site sur lequel la profondeur est calculé.* @param integer identifiant du menu à partir delaquelle on souhaite calculer la profondeur.* @return integer le nombre de niveau de menu.*/function GEN_donnerProfondeurMax($id_site, $id_menu){global $db;static $prof = 0;// Requête sur les relations de type "avoir père" entre menus$requete = 'SELECT gmr_id_menu_01 '.'FROM gen_menu, gen_menu_relation '.'WHERE gmr_id_menu_02 = '.$id_menu.' '.'AND gmr_id_menu_01 = gm_id_menu '.'AND gm_ce_site = '.$id_site.' '.'AND gmr_id_valeur = 1 '.'ORDER BY gmr_ordre ASC';$resultat = $db->query($requete);(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';if ($resultat->numRows() == 0) {return $prof;}$prof++;while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {$prof = GEN_donnerProfondeurMax($id_site, $ligne->gmr_id_menu_01);}return $prof;}/** Fonction GEN_donnerDernierFreres() - Renvoie l'id du dernier menu frère.** Cette fonction regarde si un menu donné possède au moins un frère dans l'arbre* des menus. Elle retourne l'id du dernier menu frére en utilisant gmr_ordre.* Cette fonction fait appel à la fonction : GEN_lireIdentifiantMenuPere().** @param integer identifiant du menu.* @return boolean renvoi l'id du dernier menu frère sinon faux.*/function GEN_donnerDernierFreres($id_menu){// Initialisation des variables.global $db;$requete = 'SELECT gmr_id_menu_01 '.'FROM gen_menu_relation '.'WHERE gmr_id_menu_02 = '.GEN_lireIdentifiantMenuPere($id_menu).' '.'AND gmr_id_valeur = 1 '.'AND gmr_id_menu_01 <> '.$id_menu.' '.'ORDER BY gmr_ordre DESC';$resultat = $db->query($requete);(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);if ($resultat->numRows() > 0) {return $ligne->gmr_id_menu_01;} else {return false;}}/** Fonction GEN_etreFreres() - Renvoie vrai si les menus ont le même père.** Cette fonction regarde si deux menus donnés sont frères dans l'arbre* des menus. Nous regardons si les menus ont le même identifiant comme père.** @param integer identifiant du premier menu.* @param integer identifiant du seconde menu.* @return boolean renvoi vrai si les deux menus sont frères sinon faux.*/function GEN_etreFreres($id_menu_1, $id_menu_2){// Initialisation des variables.global $db;$requete = 'SELECT gmr_id_menu_02 '.'FROM gen_menu_relation '.'WHERE gmr_id_menu_01 = '.$id_menu_1.' '.'AND gmr_id_valeur = 1 ';$resultat = $db->query($requete);(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);$id_pere_1 = $ligne->gmr_id_menu_02;$resultat->free();$requete = 'SELECT gmr_id_menu_02 '.'FROM gen_menu_relation '.'WHERE gmr_id_menu_01 = '.$id_menu_2.' '.'AND gmr_id_valeur = 1 ';$resultat = $db->query($requete);(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);$id_pere_2 = $ligne->gmr_id_menu_02;$resultat->free();return ($id_pere_1 == $id_pere_2);}/** Fonction GEN_etreAncetre() - Renvoie vrai si le premier argument (identifiant de menu) est un ancètre du second.** Nous récupérons l'identifiant du père du menu passé en argument numéro 2. Puis,* nous le comparons à l'argument 1. Si c'est les même on retourne faux. Sinon on rapelle* la fonction avec l'identifiant du père trouvé pour l'argument 2. Ainsi de suite jusqu'a* renvoyé vrai où tomber sur un menu racine (idetifiant du père = 0).* Si les variable sont null nous retournons false.* C'est une fonction récursive.** @param integer identifiant d'un menu numéro 1.* @param integer identifiant d'un menu numéro 2.* @return boolean vrai si le menu numéro 1 est ancètre du second.*/function GEN_etreAncetre($id_menu_1, $id_menu_2){//Test erreurif (is_null($id_menu_1) || is_null($id_menu_2)) {return false;}// Initialisation des variables.global $db;$requete = 'SELECT gmr_id_menu_02 '.'FROM gen_menu_relation '.'WHERE gmr_id_menu_01 = '.$id_menu_2.' '.'AND gmr_id_valeur = 1 ';$resultat = $db->query($requete);(DB::isError($resultat)) ? die (BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);$resultat->free();if ($ligne->gmr_id_menu_02 == 0) {return false;} else if ($ligne->gmr_id_menu_02 == $id_menu_1) {return true;} else {return GEN_etreAncetre($id_menu_1, $ligne->gmr_id_menu_02);}}/** Fonction GEN_lireIdentifiantMenuAncetre() - Renvoie l'identifiant du menu ancètre du menu passé en paramètre.** Cette fonction parcours la table gen_menu_relation et retourne l'identifiant du* menu dont le père est le menu racine (identifiant = 0) pour le menu passé en paramètre.** @global mixed objet Pear DB de connexion à la base de données..* @param int identifiant du menu dont il faut rechercher le père.* @return int identifiant du menu ancètre du menu passé en paramètre.*/function GEN_lireIdentifiantMenuAncetre($id_menu){global $db;// On teste si on est au niveau d'un menu racine i.e GM_ID_PERE=0$requete = 'SELECT gmr_id_menu_02 '.'FROM gen_menu_relation '.'WHERE gmr_id_menu_01 = '.$id_menu.' '.'AND gmr_id_valeur = 1 ';// 1 = avoir "père"$resultat = $db->query($requete);(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);$resultat->free();// Dans le cas où le menu en paramètre est un menu racineif ($ligne->gmr_id_menu_02 == 0) {return $id_menu;}return GEN_lireIdentifiantMenuAncetre($ligne->gmr_id_menu_02);}/** Fonction GEN_lireIdentifiantMenuPere() - Renvoie l'identifiant du père du menu passé en paramètre.** Cette fonction parcours la table gen_menu_relation et retourne l'identifiant du* menu père du menu passé en paramètre.** @global mixed objet Pear DB de connexion à la base de données..* @param int l'identifiant du fils* @return mixed l'identifiant du père,ou false en cas d'erreur.*/function GEN_lireIdentifiantMenuPere($id_menu){global $db;$requete = 'SELECT gmr_id_menu_02 '.'FROM gen_menu_relation '.'WHERE gmr_id_menu_01 = '.$id_menu.' '.'AND gmr_id_valeur = 1 ';// 1 = avoir "père"$resultat = $db->getOne($requete) ;(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';return $resultat;}/** Fonction GEN_lireInfoMenu() - Renvoie un objet ou un tableau contenant une ligne de la table gen_menu** Retourne la ligne de la table gen_menu concernant le menu ayant pour identifiant la valeur* passée en paramètre.* Ancien nom : getLevel()** @param mixed une instance de la classse Pear DB.* @param int l'identifiant d'un menu.* @param string le mode dans Pear DB dans lequel on veut recevoir les infos du menu.* @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.*/function GEN_lireInfoMenu($db, $id_menu, $mode = DB_FETCHMODE_OBJECT){//----------------------------------------------------------------------------// Gestion des erreurs//----------------------------------------------------------------------------// Recherche des informations sur le menu$requete = 'SELECT * '.'FROM gen_menu '.'WHERE gm_id_menu = '.$id_menu;$resultat = $db->query($requete);(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';if ($resultat->numRows() != 1) {return false;}//----------------------------------------------------------------------------// Récupération des infos$info_menu = $resultat->fetchRow($mode);$resultat->free();return $info_menu;}/** Fonction GEN_lireContenuMenu() - Renvoie un objet ou un tableau contenant une ligne de la table gen_menu_contenu** Retourne la ligne de la table gen_menu_contenu concernant le menu ayant pour identifiant la valeur* passée en paramètre.** @param mixed une instance de la classse Pear DB.* @param int l'identifiant d'un menu.* @param string le mode dans Pear DB dans lequel on veut recevoir les infos du menu.* @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.*/function GEN_lireContenuMenu($db, $id_menu, $mode = DB_FETCHMODE_OBJECT){//----------------------------------------------------------------------------// Gestion des erreurs//----------------------------------------------------------------------------// Recherche des informations sur le menu$requete = 'SELECT * '.'FROM gen_menu_contenu '.'WHERE gmc_ce_menu = '.$id_menu;$resultat = $db->query($requete);(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';if ($resultat->numRows() != 1) {return false;}//----------------------------------------------------------------------------// Récupération des infos$info_menu = $resultat->fetchRow($mode);$resultat->free();return $info_menu;}/** Fonction GEN_retournerMenus() - Renvoie un tableau contenant les id de l'ensemble des menus** Retourne un tableau contenant les id de l'ensemble des menus des différents sites de Papyrus.** @param mixed une instance de la classse Pear DB.* @return array tableau contenant les id de chaque menu.*/function GEN_retournerMenus($db){//----------------------------------------------------------------------------// Gestion des erreurs//----------------------------------------------------------------------------// Recherche des informations sur le menu$requete = 'SELECT gm_id_menu '.'FROM gen_menu ';$resultat = $db->query($requete);(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';//----------------------------------------------------------------------------// Récupération des infos$tab_retour = array();while ($info_menu = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {array_push($tab_retour, $info_menu->gm_id_menu);}$resultat->free();return $tab_retour;}/** Fonction GEN_lireInfoMenuRelation() - Renvoie un objet ou un tableau contenant une ligne de la table gen_menu_relation** Par défaut recherche une relation de type père.* Ancien nom : getMenuRelation().** @param mixed Une instance de la classse PEAR_DB* @param int l'identifiant d'un menu.* @param int l'identifiant d'une valeur de relation.* @param string le mode dans Pear DB dans lequel on veut recevoir les infos du menu.* @return mixed n objet ou tableau résultat Pear DB, ou false en cas d'erreur.*/function GEN_lireInfoMenuRelation($db, $menuid, $id_valeur = 1, $mode = DB_FETCHMODE_OBJECT){//----------------------------------------------------------------------------// Recherche des informations sur la relation de menu$requete = 'SELECT * '.'FROM gen_menu_relation '.'WHERE gmr_id_menu_01 = '.$menuid.' '.'AND gmr_id_valeur = '.$id_valeur;$result = $db->query($requete);(DB::isError($result)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $result->getMessage(), $requete)) : '';if ($result->numRows() != 1) {return false;}//----------------------------------------------------------------------------// Récupération des infos$info_menu_relation = $result->fetchRow($mode);$result->free();return $info_menu_relation;}/** Fonction GEN_verifierPresenceCodeMenu() - Vérifie l'existence d'un code de menu** Permet de vérifier dans la base de données si le code fournie (alphanumérique ou numérique) a déjà* été attribué à un menu ou pas!** @param mixed Une instance de la classse PEAR_DB* @param string le type du code (int ou string).* @param integer l'identifiant du menu courant.* @param mixed le code numérique ou alphanumérique.* @return mixed retourne l'identifiant du menu possédant le code sinon false.*/function GEN_verifierPresenceCodeMenu($db, $type, $id_menu, $code){// Gestion des erreursif ($code == '') {return true;}// Requete pour vérifier l'abscence du code numérique et alphanumérique de la table gen_menu$requete = 'SELECT gm_id_menu '.'FROM gen_menu '.'WHERE gm_id_menu <> '.$id_menu.' ';// Complément de requête en fonction du type de codeif ($type == 'int') {$requete .= 'AND gm_code_num = '.$code;} else {$requete .= 'AND gm_code_alpha = "'.$code.'"';}$resultat = $db->query($requete);if (DB::isError($resultat)) {die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );}$nombre_reponse = $resultat->numRows();if ($nombre_reponse >= 1) {return true;} else {return false;}}/* +--Fin du code ---------------------------------------------------------------------------------------+* $Log: not supported by cvs2svn $* Revision 1.10 2004/12/06 17:53:55 jpm* Ajout fonction GEN_retournerMenus().** Revision 1.9 2004/11/29 18:34:42 jpm* Correction bogue.** Revision 1.8 2004/11/10 17:25:51 jpm* Modification de fonction suite à des bogues.** Revision 1.7 2004/11/09 17:55:26 jpm* Suppresion de fonctions inutiles et mise en conformité.** Revision 1.6 2004/11/08 17:39:32 jpm* Suppression d'une fonction inutile.* GEN_etreFils() n'est pas utile. On peut utiliser GEN_etreAncetre() à la place.** Revision 1.5 2004/11/04 12:51:45 jpm* Suppression de message de débogage.** Revision 1.4 2004/11/04 12:23:50 jpm* Nouvelles fonctions sur les menus frères.** Revision 1.3 2004/10/25 14:16:21 jpm* Suppression de code commenté.** Revision 1.2 2004/10/21 18:15:21 jpm* Ajout de gestion d'erreur aux fonctions.** Revision 1.1 2004/06/15 15:11:37 jpm* Changement de nom et d'arborescence de Genesia en Papyrus.** Revision 1.43 2004/05/05 06:13:27 jpm* Extraction de la fonction générant le "vous êtes ici", transformée en applette.** Revision 1.42 2004/05/04 16:24:06 jpm* Amélioration de la fonction générant le "vous êtes ici".** Revision 1.41 2004/05/04 16:17:31 jpm* Ajout de la fonction générant le "vous êtes ici".** Revision 1.40 2004/05/03 11:18:17 jpm* Normalisation de deux fonctions issues du fichier fontctions.php.** Revision 1.39 2004/05/01 16:17:11 jpm* Suppression des fonctions liées à la création des listes de menu. Elles ont été transformées en applette.** Revision 1.38 2004/05/01 11:43:16 jpm* Suppression des fonction GEN_afficherMenuCommun() et GEN_afficherSelecteurSites() transformées en applette.** Revision 1.37 2004/04/30 16:18:41 jpm* Correction d'un bogue dans les fonctions de gestion des scripts.** Revision 1.36 2004/04/28 12:04:40 jpm* Changement du modèle de la base de données.** Revision 1.35 2004/04/09 16:23:41 jpm* Prise en compte des tables i18n.** Revision 1.34 2004/04/02 16:34:44 jpm* Extraction de variable globale des fonction, remplacé par un passage en paramètre.** Revision 1.33 2004/04/01 11:24:51 jpm* Ajout et modification de commentaires pour PhpDocumentor.** Revision 1.32 2004/03/31 16:52:30 jpm* Modification du code vis à vis du modèle revision 1.9 de Génésia.** Revision 1.31 2004/03/29 17:13:05 jpm* Suppression de fonction, passer en code classique.** Revision 1.30 2004/03/27 11:11:58 jpm* Début changement nom de variable dans fonction creerInfoPageEtApplication().** Revision 1.29 2004/03/26 12:52:25 jpm* Ajout des fonctions creerInfoPageEtApplication() et donnerIdPremiereApplicationLiee().** +-- Fin du code ----------------------------------------------------------------------------------------+*/?>