Rev 92 | Rev 159 | 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_rendu.inc.php,v 1.4 2004-10-25 16:28:47 jpm Exp $/*** Rendu : programme traitant l'url demandée et retournant la page compressé au navigateur.** Ce programme contient la partie collectant les informations sur la page demandée par le navigateur client.* Elle vérifie que la page ne soit pas déjà présente en cache et la renvoie si elle est disponible.* Elle recherche ensuite l'application liée à la page demandée. Elle exécute cette application et récupère le* contenu XHTML à afficher, le stocke en cache, le compresse et le renvoi au navigateur client.**@package Papyrus//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.4 $ $Date: 2004-10-25 16:28:47 $// +------------------------------------------------------------------------------------------------------+*/// +------------------------------------------------------------------------------------------------------+// | ENTÊTE du PROGRAMME |// +------------------------------------------------------------------------------------------------------+/** <BR> Inclusion de la bibliothèque de fonctions servant à l'insertion de meta informations pour une page donnée.*/include_once GEN_CHEMIN_BIBLIO.'pap_meta.fonct.php';/** <BR> Inclusion de la bibliothèque de fonctions servant à l'insertion de styles pour une page donnée.*/include_once GEN_CHEMIN_BIBLIO.'pap_style.fonct.php';/** <BR> Inclusion de la bibliothèque de fonctions servant à l'insertion de scripts pour une page donnée.*/include_once GEN_CHEMIN_BIBLIO.'pap_script.fonct.php';// +------------------------------------------------------------------------------------------------------+// | CORPS du PROGRAMME |// +------------------------------------------------------------------------------------------------------+// +------------------------------------------------------------------------------------------------------+// Recherche du squelette de la page demandée.// Ouverture du squeletteif (empty($_GEN_commun['info_menu']->gm_fichier_squelette)) {if (isset($_GEN_commun['traduction_info_site'])) {$chemin_squelette = $_GEN_commun['traduction_info_site']->gs_fichier_squelette;} else {$chemin_squelette = $_GEN_commun['info_site']->gs_fichier_squelette;}} else {if (isset($_GEN_commun['traduction_info_menu'])) {$chemin_squelette = $_GEN_commun['traduction_info_menu']->gs_fichier_squelette;} else {$chemin_squelette = $_GEN_commun['info_menu']->gm_fichier_squelette;}}// Si l'information concernant le chemin est réellement un cheminif (! file_exists($chemin_squelette)) {//Si ce n'est qu'un nom de fichier squelette$chemin_test = GEN_CHEMIN_SITES.$_GEN_commun['info_site']->gs_code_alpha.'/'.$_GEN_commun['i18n'].'/'.GEN_DOSSIER_SQUELETTE.'/'.$chemin_squelette;if (! file_exists($chemin_test)) {die('ERREUR Génésia : Impossible de trouver de fichier de squelette. <br />'.'Chemin fichier squelette : '.$chemin_squelette.' <br />'.'Ligne n° : '. __LINE__ .'<br />'.'Fichier : '. __FILE__ );} else {$chemin_squelette = $chemin_test;}}// +------------------------------------------------------------------------------------------------------+// Récupération du contenu du fichier de squelette de la page demandée.// Lecture du fichier de squelette XHTML en PHP 4.1.2$tab_fichier_squelette = file($chemin_squelette);$contenu_squelette = '';for ($i = 0; $i < count($tab_fichier_squelette); $i++) {$contenu_squelette .= $tab_fichier_squelette[$i];}/*// Lecture du fichier de squelette XHTML en PHP 4.3// $contenu_squelette = file_get_contents ($squelette);*/// +------------------------------------------------------------------------------------------------------+// Recherche des informations pour la complétion de l'entête du squelette de la page demandée.// Construction du titre.if (! empty($_GEN_commun['info_menu']->gm_titre)) {$titre = htmlentities($_GEN_commun['info_menu']->gm_titre);} else if (! empty($_GEN_commun['info_menu']->gm_titre_alternatif)) {$titre = htmlentities($_GEN_commun['info_menu']->gm_titre_alternatif);} else {$titre = htmlentities($_GEN_commun['info_menu']->gm_nom);}// Construction des infos sur le site$nom_site = htmlentities($_GEN_commun['info_site']->gs_nom);$langue_site = htmlentities($_GEN_commun['i18n']);$code_alpha_site = htmlentities($_GEN_commun['info_site']->gs_code_alpha);// Construction des Meta "http-equiv".$_GEN_commun['meta_http_equiv'] = array();$jeu_de_caracteres = htmlentities($_GEN_commun['info_i18n']->gi_jeu_de_caracteres);$langue = htmlentities($_GEN_commun['info_i18n_langue']->gil_id_langue);GEN_stockerMetaHttpEquiv('Content-Type', 'text/html; charset='.$jeu_de_caracteres);GEN_stockerMetaHttpEquiv('Content-style-type', 'text/css');GEN_stockerMetaHttpEquiv('Content-script-type', 'text/javascript');GEN_stockerMetaHttpEquiv('Content-language', $langue);// Construction des Meta "name".$_GEN_commun['meta_name'] = array();$robot = htmlentities($_GEN_commun['info_menu']->gm_robot);$auteur = htmlentities($_GEN_commun['info_menu']->gm_auteur);if (empty($auteur)) {$auteur = htmlentities($_GEN_commun['info_site']->gs_auteur);}$mots_cles = htmlentities($_GEN_commun['info_menu']->gm_mots_cles);if (empty($mots_cles)) {$auteur = htmlentities($_GEN_commun['info_site']->gs_mots_cles);}$description_libre = htmlentities($_GEN_commun['info_menu']->gm_description_libre);if (empty($description_libre)) {$description_libre = htmlentities($_GEN_commun['info_site']->gs_description);}GEN_stockerMetaName('revisit-after', '15 days');GEN_stockerMetaName('robots', $robot);GEN_stockerMetaName('author', $auteur);GEN_stockerMetaName('keywords', $mots_cles);GEN_stockerMetaName('description', $description_libre);// Construction des Meta Meta "name" du Dublin Core.$titre_alternatif = htmlentities($_GEN_commun['info_menu']->gm_titre_alternatif);$auteur = htmlentities($_GEN_commun['info_menu']->gm_auteur);$description_resume = htmlentities($_GEN_commun['info_menu']->gm_description_resume);$description_table_matieres = htmlentities($_GEN_commun['info_menu']->gm_description_table_matieres);$publieur = htmlentities($_GEN_commun['info_menu']->gm_editeur);$contributeur = htmlentities($_GEN_commun['info_menu']->gm_contributeur);$date_creation = htmlentities($_GEN_commun['info_menu']->gm_date_creation);$date_soumission = htmlentities($_GEN_commun['info_menu']->gm_date_soumission);$date_acceptation = htmlentities($_GEN_commun['info_menu']->gm_date_acceptation);$periode_validite = htmlentities($_GEN_commun['info_menu']->gm_date_debut_validite);$date_copyright = htmlentities($_GEN_commun['info_menu']->gm_date_copyright);$source = htmlentities($_GEN_commun['info_menu']->gm_source);$langue_rfc_3066 = $langue.'-'.htmlentities($_GEN_commun['info_i18n_pays']->gip_id_pays);$type_portee_spatiale = htmlentities($_GEN_commun['info_menu']->gm_ce_type_portee_spatiale);$portee_spatiale = htmlentities($_GEN_commun['info_menu']->gm_portee_spatiale);$type_portee_temporelle = htmlentities($_GEN_commun['info_menu']->gm_ce_type_portee_temporelle);$portee_temporelle = htmlentities($_GEN_commun['info_menu']->gm_portee_temporelle);$licence = htmlentities($_GEN_commun['info_menu']->gm_licence);$public = htmlentities($_GEN_commun['info_menu']->gm_public);$public_niveau = htmlentities($_GEN_commun['info_menu']->gm_public_niveau);GEN_stockerMetaNameDC('DC.Title', $titre, $langue);GEN_stockerMetaNameDC('DC.Title.alternative', $titre_alternatif, $langue);GEN_stockerMetaNameDC('DC.Creator', $auteur);GEN_stockerMetaNameDC('DC.Subject', $mots_cles, $langue);GEN_stockerMetaNameDC('DC.Description', $description_libre, $langue);GEN_stockerMetaNameDC('DC.Description.abstract', $description_resume, $langue);GEN_stockerMetaNameDC('DC.Description.tableOfContents', $description_table_matieres, $langue);GEN_stockerMetaNameDC('DC.Publisher', $publieur);GEN_stockerMetaNameDC('DC.Contributor', $contributeur);GEN_stockerMetaNameDC('DC.Date.created', $date_creation, '', 'W3CDTF');GEN_stockerMetaNameDC('DC.Date.valid', $periode_validite, '', 'W3CDTF');//Ajouter la gestion des dates valid et available en utilisant les dates de la table gen_page_contenu.GEN_stockerMetaNameDC('DC.Date.dateSubmitted', $date_soumission, '', 'W3CDTF');GEN_stockerMetaNameDC('DC.Date.dateCopyrighted', $date_copyright, '', 'W3CDTF');GEN_stockerMetaNameDC('DC.Date.dateAccepted', $date_acceptation, '', 'W3CDTF');GEN_stockerMetaNameDC('DC.Source', $source, '', 'URI');GEN_stockerMetaNameDC('DC.Language', $langue_rfc_3066, '', 'RFC3066');GEN_stockerMetaNameDC('DC.Coverage.spatial', $portee_spatiale, '', $type_portee_spatiale);GEN_stockerMetaNameDC('DC.Coverage.temporal', $portee_temporelle, '', $type_portee_temporelle);GEN_stockerMetaNameDC('DC.Rights', $licence, '', 'URI');GEN_stockerMetaNameDC('DC.Audience', $public);GEN_stockerMetaNameDC('DC.Audience.educationLevel', $public_niveau);// Construction des CSS// Déclaration des constantes contenant les CSS à afficher sur la page.$_GEN_commun['style_type'] = 'text/css';$_GEN_commun['style_integree'] = '';$_GEN_commun['style_externe'] = array();if (GEN_DEBOGAGE) {GEN_stockerStyleExterne('Débogage', GEN_CHEMIN_PAP.'presentations/css/debogage.css');}// Construction du Javascript// Déclaration des constantes contenant le Javascript à afficher sur la page.$_GEN_commun['script_type'] = 'text/javascript';$_GEN_commun['script_code'] = '';$_GEN_commun['script_fonction'] = array();$_GEN_commun['script_fichier'] = array();// +------------------------------------------------------------------------------------------------------+// Gestion des inclusions des fichiers d'applettesfor ($i = 0; $i < count($_GEN_commun['info_applette']); $i++) {// Nous vérifions que le chemin vers l'applette existe.if (file_exists($_GEN_commun['info_applette'][$i]->gap_chemin)) {include_once($_GEN_commun['info_applette'][$i]->gap_chemin);// Nous récupérons l'expression régulière de la balise pour l'utiliser lors de l'appel// de la fonction de l'applette. L'appel des fonctions des applettes à lieu aprés l'appel// de l'application pour permettre à l'appli de modifier certains paramêtres (identification, ordre des menus).$_GEN_commun['info_applette'][$i]->applette_balise = $_GEN_commun['info_applette_balise'];$_GEN_commun['info_applette'][$i]->applette_fonction = $_GEN_commun['info_applette_nom_fonction'];} else {// Ne devrait pas arréter le programme! Mais instancier le gestionnaire de déboguage.die('ERREUR Génésia : Impossible de trouver le fichier de l\'applette. <br />'.'Nom applette : '.$_GEN_commun['info_applette'][$i]->gap_nom.' <br />'.'Chemin fichier applette : '.$_GEN_commun['info_applette'][$i]->gap_chemin.' <br />'.'Ligne n° : '. __LINE__ .'<br />'.'Fichier : '. __FILE__ );}}// +------------------------------------------------------------------------------------------------------+// Gestion de l'intégration de l'application liée au menu// Une fois les applettes appelées est executées nous appelons l'application qui peut avoir// besoins des infos des applettes (c'est le cas, pour l'applette IDENTIFICATION).$application_chemin = '';if (isset($_GEN_commun['info_application']->gap_chemin)) {$application_chemin = $_GEN_commun['info_application']->gap_chemin;}// $application_chemin contient le chemin de l'application// Si $application_chemin est vide, on défini putFrame comme ne retournant rien.if (empty($application_chemin) ) {function afficherContenuCorps(){return '<p class="pap_erreur">'.'Pas d\'application.'.'</p>';}} else {if (file_exists($application_chemin)) {include_once($application_chemin);} else {die('ERREUR Génésia : application impossible à charger. <br />'.'Chemin application : '.$application_chemin.' <br />'.'Ligne n° : '. __LINE__ .'<br />'.'Fichier : '. __FILE__ );}}// +------------------------------------------------------------------------------------------------------+// Recherche des informations provenant de l'application pour la complétion du squelette// Tableau associatif contenant les différentes parties du contenu à afficher$aso_zone_contenu = array();// Contenu tête// Appel de la fonction afficherContenuTete() si elle existe.$aso_zone_contenu['contenu_tete'] = (function_exists('afficherContenuTete') ? afficherContenuTete() : str_repeat(' ', 12).' ');// Contenu corps// Appel de la fonction afficherContenuCorps().if (function_exists('afficherContenuCorps') ) {$aso_zone_contenu['contenu_corps'] = afficherContenuCorps();} else {$aso_zone_contenu['contenu_corps'] ='ERREUR Génésia : fonction afficherContenuCorps() introuvable dans l\'application demandée. <br />'.'Ligne n° : '. __LINE__ .'<br />'.'Fichier : '. __FILE__;}// Contenu pied// Appel de la fonction afficherContenuPied() si elle existe.$aso_zone_contenu['contenu_pied'] = (function_exists('afficherContenuPied') ? afficherContenuPied() : str_repeat(' ', 12).' ');// +------------------------------------------------------------------------------------------------------+// Gestion des appels des fonctions d'applettesfor ($i = 0; $i < count($_GEN_commun['info_applette']); $i++) {// Recherche du nombre de balise d'une applette donnée présentes dans le squelette$nbr_balise = preg_match_all( '/<!-- ('.$_GEN_commun['info_applette'][$i]->applette_balise.') -->/',$contenu_squelette,$tab_applet_arguments,PREG_SET_ORDER);// Si on trouve au moins une balise, on lance la boucle pour les remplacerfor ($j = 0; $j <= ($nbr_balise - 1); $j++) {// Nous vérifions que le nom de la fonction principale de l'applette existe.if (function_exists($_GEN_commun['info_applette'][$i]->applette_fonction)) {$contenu_applette = call_user_func($_GEN_commun['info_applette'][$i]->applette_fonction, $tab_applet_arguments[$j], $_GEN_commun);} else {$contenu_applette = '<!-- '."\n".$tab_applet_arguments[$j][1].' : '.'fonction de l\'applette "'.$_GEN_commun['info_applette'][$i]->gap_nom.'" introuvable! '."\n".'Fonction : '.$_GEN_commun['info_applette'][$i]->applette_fonction."\n".' -->';}// Remplacement des balises d'applette de Génésia dans le squelette$contenu_squelette = str_replace('<!-- '.$tab_applet_arguments[$j][1].' -->', $contenu_applette, $contenu_squelette);}}// +------------------------------------------------------------------------------------------------------+// Continuation recherche d'info provenant de Génésia pour la complétion du squelette// Une fois l'application appelé est executé nous affichons le contenu de l'entête qui a pu// être modifié par l'application.$meta_http_equiv = GEN_afficherMeta('http-equiv');$meta_name = GEN_afficherMeta('name');$meta_name_dc = GEN_afficherMeta('dc');// Nous récupérons tout les styles CSS pour l'afficher dans l'entête de la page.$styles = GEN_afficherStyle();// Nous récupérons tout le Javascript pour l'afficher dans l'entête de la page.$scripts = GEN_afficherScript();// +------------------------------------------------------------------------------------------------------+// Remplacement des balises Génésia dans le squelette// Balise de l'entête (head) de la page xhtml$contenu_squelette = str_replace('<!-- TITRE_PAGE -->', $titre, $contenu_squelette);$contenu_squelette = str_replace('<!-- META_HTTP_EQUIV -->', $meta_http_equiv, $contenu_squelette);$contenu_squelette = str_replace('<!-- META_NAME -->', $meta_name, $contenu_squelette);$contenu_squelette = str_replace('<!-- META_NAME_DC -->', $meta_name_dc, $contenu_squelette);$contenu_squelette = str_replace('<!-- STYLES -->', $styles, $contenu_squelette);$contenu_squelette = str_replace('<!-- SCRIPTS -->', $scripts, $contenu_squelette);// Balise du corps (body) de la page xhtml$contenu_squelette = str_replace('<!-- NOM_SITE -->', $nom_site, $contenu_squelette);$contenu_squelette = str_replace('<!-- SITE_LANGUE -->', $langue_site, $contenu_squelette);$contenu_squelette = str_replace('<!-- SITE_CODE_ALPHA -->', $code_alpha_site, $contenu_squelette);$contenu_squelette = str_replace('<!-- CONTENU_TETE -->', $aso_zone_contenu['contenu_tete'], $contenu_squelette);$contenu_squelette = str_replace('<!-- CONTENU_CORPS -->', $aso_zone_contenu['contenu_corps'], $contenu_squelette);$contenu_squelette = str_replace('<!-- CONTENU_PIED -->', $aso_zone_contenu['contenu_pied'], $contenu_squelette);// +------------------------------------------------------------------------------------------------------+// Stokage du squelette dans un variable globale aprés avoir remplacer les balises Papyrus.$_GEN_commun['sortie'] = $contenu_squelette;/* +--Fin du code ---------------------------------------------------------------------------------------+** $Log: not supported by cvs2svn $* Revision 1.3 2004/10/22 17:23:35 jpm* Amélioration de la gestion de l'erreur si pas d'appli.** Revision 1.2 2004/06/17 08:04:44 jpm* Changement de constante pour les chemin d'accès à la biblio de code de Papyrus.** Revision 1.1 2004/06/16 08:13:58 jpm* Changement de nom de Génésia en Papyrus.* Changement de l'arborescence.** Revision 1.32 2004/05/10 12:24:55 jpm* Amélioration de la recherche des fichiers de squelette.** Revision 1.31 2004/05/05 10:42:35 jpm* Amélioration de la gestion de l'internationalisation.** Revision 1.30 2004/05/05 08:25:37 jpm* Modification de la façon d'ajouter la feuille de style de débogage pour qu'elle soit prise en compte par défaut.** Revision 1.29 2004/05/03 14:12:04 jpm* Suppression du fichier bibliothèquie de fonctions sur gen_menu.** Revision 1.28 2004/05/03 11:21:58 jpm* Fin de la gestion des applettes et suppression de l'info_menu_hierarchie de _GEN_commun.** Revision 1.27 2004/05/01 17:22:55 jpm* Appel de la bibliothèque de fonctions concernant les menus.** Revision 1.26 2004/05/01 16:19:36 jpm* Suppression du code ayant pu être transformé en applettes (menu multi-niveaux, menu unique, menu commun, identification, sélecteur de sites).** Revision 1.25 2004/05/01 11:39:38 jpm* Déplacement du code gérant les applettes et du code de récupération du contenu du fichier squelette.** Revision 1.24 2004/04/28 12:04:31 jpm* Changement du modèle de la base de données.** Revision 1.23 2004/04/22 08:30:47 jpm* Transformation de $GS_GLOBAL en $_GEN_commun.** Revision 1.22 2004/04/21 07:55:02 jpm* Ajout de la feuille de style de débogage si le débogage de Génésia est activé.** Revision 1.19 2004/04/09 16:20:54 jpm* Extraction de la gestion du cache et de l'envoi.* Gestion des tables i18n.** Revision 1.18 2004/04/08 12:29:48 jpm* Début amélioration de la gestion du cache et de la compression des pages de Génésia.** Revision 1.17 2004/04/05 16:38:04 jpm* Utilisation des nouvelles fonctions gérant l'insertion du Javascript.** Revision 1.16 2004/04/02 16:30:56 jpm* Gestion de la balise Génésia IDENTIFICATION permettant l'envoie d'un formulaire de login.** Revision 1.15 2004/04/01 11:27:13 jpm* Ajout et modification de commentaires pour PhpDocumentor.** Revision 1.14 2004/03/31 16:50:10 jpm* Prise en compte du nouveau modèle de Génésia révision 1.9.** Revision 1.13 2004/03/27 11:07:45 jpm* Modification des commentaires vis à vis du nouveau modèle.* Mise en conformité avec la convention de codage.* Amélioration du code.** Revision 1.12 2004/03/23 17:06:44 jpm* Ajout de commentaire dans l'entête.* Mise en conformité avec la convention de codage.** +-- Fin du code ----------------------------------------------------------------------------------------+*/?>