New file |
0,0 → 1,421 |
<?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.1 2004-06-15 15:11:37 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.1 $ $Date: 2004-06-15 15:11:37 $ |
// +------------------------------------------------------------------------------------------------------+ |
*/ |
|
// +------------------------------------------------------------------------------------------------------+ |
// | 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_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). |
* 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) |
{ |
// 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; |
} |
elseif ($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 racine |
if ($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->query($requete) ; |
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : ''; |
|
//if ($resultat->numRows() != 1) { |
// return false; |
//} |
|
$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT); |
$resultat->free(); |
|
return $ligne->gmr_id_menu_02; |
} |
|
/** 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, $menuid, $mode = DB_FETCHMODE_OBJECT) |
{ |
//---------------------------------------------------------------------------- |
// Recherche des informations sur le menu |
$requete = 'SELECT * '. |
'FROM gen_menu '. |
'WHERE gm_id_menu = '.$menuid; |
|
$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_lireInfoMenuRelation() - Renvoie un objet ou un tableau contenant une ligne de la table gen_menu_relation |
* |
* Par défaut recherch 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; |
} |
|
// +------------------------------------------------------------------------------------------------------+ |
// A NORMALISER !!! |
// +------------------------------------------------------------------------------------------------------+ |
|
/** Fonction niveau_menu() - Renvoie le niveau d'un menu. |
* |
* Fournit le niveau d'un menu dans l'arbre des menus d'un site |
* donné. |
* C'est une fonction récursive. |
* |
* @param integer l'identifiant du site du menu. |
* @param integer l'identifiant de la langue du site du menu. |
* @param integer l'identifiant d'un menu. |
* @return integer le niveau d'un menu. |
*/ |
function niveau_menu($id_site, $id_langue, $id_menu) |
{ |
global $db ; |
static $niveau = 1; |
|
$requete = 'SELECT gm_ce_menu_pere '. |
'FROM gen_menu '. |
'WHERE gm_id_menu = '.$id_menu.' '. |
'AND gm_id_i18n = "'.$id_langue.'" '. |
'AND gm_id_site = '.$id_site; |
|
$resultat = $db->query($requete); |
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : ''; |
|
if ($resultat->numRows() == 0) { |
return $niveau; |
} |
$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT); |
|
if ($ligne->gm_ce_menu_pere == 0) { |
|
$niveau++; |
$niveau = niveau_menu($id_site, $id_langue, $ligne->gm_ce_menu_pere); |
} |
|
return $niveau; |
} |
|
/** Fonction id_ancetre_niveau() - Renvoie l'identifiant de l'ancetre de niveau $niveau |
* |
* Renvoie l'identifiant de l'ancetre de niveau $niveau. |
* C'est une fonction récursive. |
* |
* @param integer identifiant du site du menu dont on cherche l'ancètre. |
* @param integer identifiant de la langue du site du menu dont on cherche l'ancètre. |
* @param integer identifiant du menu dont on cherche l'ancètre. |
* @param integer niveau souhaité. |
* @return integer identifiant de l'ancètre cherché. |
*/ |
function id_ancetre_niveau($id_site, $id_langue, $id_menu, $niveau) |
{ |
global $db; |
static $id_et_niveau = array(); |
|
$requete = 'SELECT gp_ce_page_pere '. |
'FROM gen_page '. |
'WHERE gp_id_page = '.$id_page; |
|
$resultat = $db->query($requete); |
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : ''; |
|
$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT); |
|
if ($ligne->gm_ce_menu_pere != 0) { |
array_push ($id_et_niveau, $ligne->gm_ce_menu_pere); |
} else { |
return array_pop($id_et_niveau); |
} |
$resultat->free(); |
|
return id_ancetre_niveau($id_site, $id_langue, $ligne->gm_ce_menu_pere, $niveau); |
} |
|
/* +--Fin du code ---------------------------------------------------------------------------------------+ |
* $Log: not supported by cvs2svn $ |
* 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 ----------------------------------------------------------------------------------------+ |
*/ |
?> |