Subversion Repositories Applications.papyrus

Compare Revisions

Ignore whitespace Rev 1091 → Rev 1092

/trunk/papyrus/pap_rendu.inc.php
32,7 → 32,7
// pris connaissance de la licence CeCILL, et que vous en avez accepté les
// termes.
// ----
// CVS : $Id: pap_rendu.inc.php,v 1.29 2006-04-20 09:45:30 alexandre_tb Exp $
// CVS : $Id: pap_rendu.inc.php,v 1.30 2006-12-01 16:41:04 florian Exp $
/**
* Rendu : programme traitant l'url demandée et retournant la page compressé au navigateur.
*
48,7 → 48,7
*@author Alexandre GRANIER <alexandre@tela-botanica.org>
*@author Laurent COUDOUNEAU <laurent.coudouneau@ema.fr>
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.29 $ $Date: 2006-04-20 09:45:30 $
*@version $Revision: 1.30 $ $Date: 2006-12-01 16:41:04 $
// +------------------------------------------------------------------------------------------------------+
*/
 
67,6 → 67,9
/** 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';
 
/** Inclusion de la classe servant au rendu de Papyrus.*/
include_once GEN_CHEMIN_BIBLIO_CLASSE.'pap_rendu.class.php';
 
/** Inclusion de la bibliothèque PEAR Text_Wiki.*/
include_once PAP_CHEMIN_API_PEAR.'Text/Wiki.php';
 
124,8 → 127,6
// Lecture du fichier de squelette XHTML en PHP 4.3
$GLOBALS['_PAPYRUS_']['general']['contenu_squelette'] = file_get_contents($GLOBALS['_PAPYRUS_']['general']['chemin_squelette']);
 
 
 
// +------------------------------------------------------------------------------------------------------+
// Recherche des informations pour la complétion de l'entête du squelette de la page demandée.
 
156,7 → 157,7
$GLOBALS['_PAPYRUS_']['rendu']['SITE_CODE_ALPHA'] = $GLOBALS['_PAPYRUS_']['page']['code_alpha_site'];
 
//Construction des infos sur le contexte d'affichage de la page
$une_url =new Net_URL();
$une_url = new Net_URL();
$une_url->addQueryString("site",$_GEN_commun['url_site']);
$une_url->removeQueryString("langue");
$GLOBALS['_PAPYRUS_']['rendu']['PAGE_URL'] = $une_url->getUrl();
300,28 → 301,15
$GLOBALS['_GEN_commun']['script_fichier'] = array();
 
// +------------------------------------------------------------------------------------------------------+
// Gestion des inclusions des fichiers d'applettes
// PERF : on inclus des applettes meme s'il elle ne sont pas utilisées, les initialisations peuvent etre
// longue et c'est source de bug ...
// Gestion de l'espace de nom pour les balise Papyrus
$GLOBALS['_GEN_commun']['balise_prefixe'] = 'PAPYRUS_';
$GLOBALS['_GEN_commun']['balise_prefixe_client'] = 'CLIENT_';
 
for ($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).
$GLOBALS['_GEN_commun']['info_applette'][$i]->applette_balise = $GLOBALS['_GEN_commun']['info_applette_balise'];
$GLOBALS['_GEN_commun']['info_applette'][$i]->applette_fonction = $GLOBALS['_GEN_commun']['info_applette_nom_fonction'];
} else {
// Ne devrait pas arréter le programme! Mais instancier le gestionnaire de déboguage.
echo('ERREUR Papyrus : Impossible de trouver le fichier de l\'applette. <br />'.
'Nom applette : '.$GLOBALS['_GEN_commun']['info_applette'][$i]->gap_nom.' <br />'.
'Chemin fichier applette : '.$GLOBALS['_GEN_commun']['info_applette'][$i]->gap_chemin.' <br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier : '. __FILE__ );
}
}
// +------------------------------------------------------------------------------------------------------+
// Gestion des inclusions des fichiers d'applettes présentes dans le squelette
// TODO : Supprimer des fichiers du coeur de Papyrus, précédent ce fichier, la variable : $_GEN_commun['info_applette']
$GLOBALS['_PAPYRUS_']['info_applette'] = array();
Pap_Rendu::parserBaliseApplette($GLOBALS['_PAPYRUS_']['general']['contenu_squelette']);
 
// +------------------------------------------------------------------------------------------------------+
// Gestion de l'intégration de l'application liée au menu
335,7 → 323,7
 
// Affichage contenu si identifié (parametre : lecture = + )
 
$lecture=0;
$lecture = 0;
if ((isset($GLOBALS['_GEN_commun']['info_application']->lecture)) && ($GLOBALS['_GEN_commun']['info_application']->lecture=="+")) {
if ($GLOBALS['_GEN_commun']['pear_auth']->getAuth()) {
$lecture=1;
410,95 → 398,14
// Appel de la fonction afficherContenuPied() si elle existe.
$GLOBALS['_PAPYRUS_']['rendu']['CONTENU_PIED'] = (function_exists('afficherContenuPied') ? afficherContenuPied() : '<!-- '.'Aucun contenu pied'.' -->');
 
// +------------------------------------------------------------------------------------------------------+
// Gestion de l'espace de nom pour les balise Papyrus
$GLOBALS['_GEN_commun']['balise_prefixe'] = 'PAPYRUS_';
// Compilation du contenu de l'application
$GLOBALS['_PAPYRUS_']['general']['contenu_application'] = $GLOBALS['_PAPYRUS_']['rendu']['CONTENU_NAVIGATION'].
$GLOBALS['_PAPYRUS_']['rendu']['CONTENU_TETE'].
$GLOBALS['_PAPYRUS_']['rendu']['CONTENU_CORPS'].
$GLOBALS['_PAPYRUS_']['rendu']['CONTENU_MENU'].
$GLOBALS['_PAPYRUS_']['rendu']['CONTENU_PIED'];
 
// +------------------------------------------------------------------------------------------------------+
// Gestion des appels des fonctions d'applettes de papyrus
 
for ($i = 0; $i < count($GLOBALS['_GEN_commun']['info_applette']); $i++) {
// Recherche du nombre de balise d'une applette donnée présentes dans le squelette
$GLOBALS['_PAPYRUS_']['applette']['nbr_balise'] = preg_match_all(
'/<!-- '.$GLOBALS['_GEN_commun']['balise_prefixe'].'('.$GLOBALS['_GEN_commun']['info_applette'][$i]->applette_balise.') -->/',
$GLOBALS['_PAPYRUS_']['general']['contenu_squelette'],
$GLOBALS['_PAPYRUS_']['applette']['applet_arguments'],
PREG_SET_ORDER);
// Si on trouve au moins une balise, on lance la boucle pour les remplacer
for ($j = 0; $j <= ($GLOBALS['_PAPYRUS_']['applette']['nbr_balise'] - 1); $j++) {
// Nous vérifions que le nom de la fonction principale de l'applette existe.
if (function_exists($GLOBALS['_GEN_commun']['info_applette'][$i]->applette_fonction)) {
// Nous comptabilisons le nombre d'utilisation des applettes dans un squelette:
if (!isset($GLOBALS['_PAPYRUS_']['applette']['comptage'][$GLOBALS['_GEN_commun']['info_applette'][$i]->applette_fonction])) {
$GLOBALS['_PAPYRUS_']['applette']['comptage'][$GLOBALS['_GEN_commun']['info_applette'][$i]->applette_fonction] = 1;
} else {
$GLOBALS['_PAPYRUS_']['applette']['comptage'][$GLOBALS['_GEN_commun']['info_applette'][$i]->applette_fonction]++;
}
$GLOBALS['_PAPYRUS_']['applette']['contenu_applette'] =
call_user_func( $GLOBALS['_GEN_commun']['info_applette'][$i]->applette_fonction,
$GLOBALS['_PAPYRUS_']['applette']['applet_arguments'][$j],
$GLOBALS['_GEN_commun']);
} else {
$GLOBALS['_PAPYRUS_']['applette']['contenu_applette'] =
'<!-- '."\n".
$GLOBALS['_PAPYRUS_']['applette']['applet_arguments'][$j][1].' : '.
'fonction de l\'applette "'.$GLOBALS['_GEN_commun']['info_applette'][$i]->gap_nom.'" introuvable! '."\n".
'Fonction : '.$GLOBALS['_GEN_commun']['info_applette'][$i]->applette_fonction."\n".
' -->';
}
// Remplacement des balises d'applette de Génésia dans le squelette
$GLOBALS['_PAPYRUS_']['general']['contenu_squelette'] =
str_replace( '<!-- '.$GLOBALS['_GEN_commun']['balise_prefixe'].$GLOBALS['_PAPYRUS_']['applette']['applet_arguments'][$j][1].' -->',
$GLOBALS['_PAPYRUS_']['applette']['contenu_applette'],
$GLOBALS['_PAPYRUS_']['general']['contenu_squelette']);
}
}
 
 
 
// +------------------------------------------------------------------------------------------------------+
// Gestion des appels des fonctions d'applettes des applications clientes de papyrus
 
$GLOBALS['_GEN_commun']['balise_prefixe_client'] = 'CLIENT_';
 
for ($i = 0; $i < count($GLOBALS['_GEN_commun']['info_applette']); $i++) {
// Recherche du nombre de balise d'une applette donnée présentes dans le squelette
$GLOBALS['_PAPYRUS_']['applette']['nbr_balise'] = preg_match_all(
'/<!-- '.$GLOBALS['_GEN_commun']['balise_prefixe_client'].'('.$GLOBALS['_GEN_commun']['info_applette'][$i]->applette_balise.') -->/',
$GLOBALS['_PAPYRUS_']['general']['contenu_squelette'],
$GLOBALS['_PAPYRUS_']['applette']['applet_arguments'],
PREG_SET_ORDER);
// Si on trouve au moins une balise, on lance la boucle pour les remplacer
for ($j = 0; $j <= ($GLOBALS['_PAPYRUS_']['applette']['nbr_balise'] - 1); $j++) {
// Nous vérifions que le nom de la fonction principale de l'applette existe.
if (function_exists($GLOBALS['_GEN_commun']['info_applette'][$i]->applette_fonction)) {
// Nous comptabilisons le nombre d'utilisation des applettes dans un squelette:
if (!isset($GLOBALS['_PAPYRUS_']['applette']['comptage'][$GLOBALS['_GEN_commun']['info_applette'][$i]->applette_fonction])) {
$GLOBALS['_PAPYRUS_']['applette']['comptage'][$GLOBALS['_GEN_commun']['info_applette'][$i]->applette_fonction] = 1;
} else {
$GLOBALS['_PAPYRUS_']['applette']['comptage'][$GLOBALS['_GEN_commun']['info_applette'][$i]->applette_fonction]++;
}
$GLOBALS['_PAPYRUS_']['applette']['contenu_applette'] =
call_user_func( $GLOBALS['_GEN_commun']['info_applette'][$i]->applette_fonction,
$GLOBALS['_PAPYRUS_']['applette']['applet_arguments'][$j],
$GLOBALS['_GEN_commun']);
} else {
$GLOBALS['_PAPYRUS_']['applette']['contenu_applette'] =
'<!-- '."\n".
$GLOBALS['_PAPYRUS_']['applette']['applet_arguments'][$j][1].' : '.
'fonction de l\'applette "'.$GLOBALS['_GEN_commun']['info_applette'][$i]->gap_nom.'" introuvable! '."\n".
'Fonction : '.$GLOBALS['_GEN_commun']['info_applette'][$i]->applette_fonction."\n".
' -->';
}
// Remplacement des balises d'applette de Génésia dans le squelette
$GLOBALS['_PAPYRUS_']['general']['contenu_squelette'] =
str_replace( '<!-- '.$GLOBALS['_GEN_commun']['balise_prefixe_client'].$GLOBALS['_PAPYRUS_']['applette']['applet_arguments'][$j][1].' -->',
$GLOBALS['_PAPYRUS_']['applette']['contenu_applette'],
$GLOBALS['_PAPYRUS_']['general']['contenu_squelette']);
}
}
 
// +------------------------------------------------------------------------------------------------------+
// Continuation recherche d'info provenant de Papyrus pour la complétion du squelette
 
// Une fois l'application appelé est executé nous affichons le contenu de l'entête qui a pu
519,7 → 426,51
$GLOBALS['_PAPYRUS_']['tmp']['val'],
$GLOBALS['_PAPYRUS_']['general']['contenu_squelette']);
}
 
// +------------------------------------------------------------------------------------------------------+
// Gestion des inclusions des fichiers d'applettes présentes dans le contenu généré par l'application
Pap_Rendu::parserBaliseApplette($GLOBALS['_PAPYRUS_']['general']['contenu_application']);
//echo '<pre>'.print_r($GLOBALS['_PAPYRUS_']['info_applette'], true).'</pre>';
 
// +------------------------------------------------------------------------------------------------------+
// Remplacement des balises des applettes de Papyrus et des Clients
foreach ($GLOBALS['_PAPYRUS_']['info_applette'] as $applette_id => $applette_val) {
// Si on trouve au moins une balise, on lance la boucle pour les remplacer
if (!isset($GLOBALS['_PAPYRUS_']['info_applette'][$applette_id]['balises'])) {
echo 'oc:'.$applette_id;
}
for ($j = 0; $j < count($GLOBALS['_PAPYRUS_']['info_applette'][$applette_id]['balises']); $j++) {
// TODO : supprimer cette particularité et utiliser la variable $GLOBALS['_PAPYRUS_']['info_applette']
// Nous comptabilisons le nombre d'utilisation des applettes dans un squelette pour l'applette Menu:
if (!isset($GLOBALS['_PAPYRUS_']['applette']['comptage'][$applette_val['applette_fonction']])) {
$GLOBALS['_PAPYRUS_']['applette']['comptage'][$applette_val['applette_fonction']] = 1;
} else {
$GLOBALS['_PAPYRUS_']['applette']['comptage'][$applette_val['applette_fonction']]++;
}
// Nous vérifions que le nom de la fonction principale de l'applette existe.
if (function_exists($GLOBALS['_PAPYRUS_']['info_applette'][$applette_id]['applette_fonction'])) {
$GLOBALS['_PAPYRUS_']['applette']['contenu_applette'] =
call_user_func( $GLOBALS['_PAPYRUS_']['info_applette'][$applette_id]['applette_fonction'],
$GLOBALS['_PAPYRUS_']['info_applette'][$applette_id]['balises'][$j],
$GLOBALS['_GEN_commun']);
} else {
$GLOBALS['_PAPYRUS_']['applette']['contenu_applette'] =
'<!-- '."\n".
$GLOBALS['_PAPYRUS_']['info_applette'][$applette_id]['balises'][$j][0].' : '.
'fonction de l\'applette "'.$applette_id.'" introuvable! '."\n".
'Fonction : '.$GLOBALS['_PAPYRUS_']['info_applette'][$applette_id]['applette_fonction']."\n".
' -->';
}
// Remplacement des balises d'applette de Papyrus dans le squelette
$GLOBALS['_PAPYRUS_']['general']['contenu_squelette'] =
preg_replace( '/'.$GLOBALS['_PAPYRUS_']['info_applette'][$applette_id]['balises'][$j][0].'/',
$GLOBALS['_PAPYRUS_']['applette']['contenu_applette'],
$GLOBALS['_PAPYRUS_']['general']['contenu_squelette']);
}
}
 
 
// +------------------------------------------------------------------------------------------------------+
// Remplacement des actions Papyrus dans le squelette
// Création d'un objet Text_Papyrus :
$papyrus =& new Text_Papyrus();
539,6 → 490,10
/* +--Fin du code ---------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.29 2006/04/20 09:45:30 alexandre_tb
* ligne 92, remplacement de gs_fichier_squelette par gm_fichier_squelette, car on appelle le squelette du menu (s'il existe) et non du site.
* Posait un pb lors de l'affichage de squelettes (de menu) des traductions de menu
*
* Revision 1.28 2006/03/13 21:00:20 ddelon
* Suppression messages d'erreur multilinguisme
*
/trunk/papyrus/bibliotheque/classes/pap_rendu.class.php
New file
0,0 → 1,119
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 5.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2006 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | Ce logiciel est un programme informatique servant à gérer du contenu et des applications web. | |
// | |
// | Ce logiciel est régi par la licence CeCILL soumise au droit français et respectant les principes de |
// | diffusion des logiciels libres. Vous pouvez utiliser, modifier et/ou redistribuer ce programme sous |
// | les conditions de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA sur le site |
// | "http://www.cecill.info". |
// | |
// | En contrepartie de l'accessibilité au code source et des droits de copie, de modification et de |
// | redistribution accordés par cette licence, il n'est offert aux utilisateurs qu'une garantie limitée. |
// | Pour les mêmes raisons, seule une responsabilité restreinte pèse sur l'auteur du programme, le |
// | titulaire des droits patrimoniaux et les concédants successifs. |
// | |
// | A cet égard l'attention de l'utilisateur est attirée sur les risques associés au chargement, à |
// | l'utilisation, à la modification et/ou au développement et à la reproduction du logiciel par |
// | l'utilisateur étant donné sa spécificité de logiciel libre, qui peut le rendre complexe à manipuler |
// | et qui le réserve donc à des développeurs et des professionnels avertis possédant des connaissances |
// | informatiques approfondies. Les utilisateurs sont donc invités à charger et tester l'adéquation |
// | du logiciel à leurs besoins dans des conditions permettant d'assurer la sécurité de leurs systèmes |
// | et ou de leurs données et, plus généralement, à l'utiliser et l'exploiter dans les mêmes conditions |
// | de sécurité. |
// | |
// | Le fait que vous puissiez accéder à cet en-tête signifie que vous avez pris connaissance de la |
// | licence CeCILL, et que vous en avez accepté les termes. |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: pap_rendu.class.php,v 1.1 2006-12-01 16:36:07 florian Exp $
/**
* Classe : pap_rendu
*
* Fournit des méthodes pour le rendu.
*
*@package Papyrus
*@subpackage Classes
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author Aucun
*@copyright Tela-Botanica 2000-2006
*@version $Revision: 1.1 $ $Date: 2006-12-01 16:36:07 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTÊTE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
class Pap_Rendu {
 
function pap_rendu()
{
}
function parserBaliseApplette($contenu)
{
$noms_applettes = 'IDENTIFICATION|MENU|MOTEUR_RECHERCHE|SELECTEUR_SITES|VOUS_ETES_ICI';// Compatibilité ancienne syntaxe
$GLOBALS['_PAPYRUS_']['applette']['nbr_balise'] = preg_match_all(
'/\{\{(\w+) ?[^}]+\}\}|<!-- (?:'.$GLOBALS['_GEN_commun']['balise_prefixe'].'|'.$GLOBALS['_GEN_commun']['balise_prefixe_client'].')('.$noms_applettes.')[^ ]* -->/',
$contenu,
$tab_decoupage,
PREG_SET_ORDER);
for ($i = 0; $i < $GLOBALS['_PAPYRUS_']['applette']['nbr_balise']; $i++) {
// Création du nom de l'applette.
$applette_nom = '';
if (!empty($tab_decoupage[$i][1])) {
$applette_nom = strtolower($tab_decoupage[$i][1]);
} else if (!empty($tab_decoupage[$i][2])) {
$applette_nom = strtolower($tab_decoupage[$i][2]);
}
if (!isset($GLOBALS['_PAPYRUS_']['info_applette'][$applette_nom])) {
$GLOBALS['_PAPYRUS_']['info_applette'][$applette_nom]['nom'] = $applette_nom;
// Recherche du fichier de l'applette
if (file_exists(GEN_CHEMIN_APPLETTE.$applette_nom.GEN_SEP.$applette_nom.'.php')) {
$GLOBALS['_PAPYRUS_']['info_applette'][$applette_nom]['chemin'] = GEN_CHEMIN_APPLETTE.$applette_nom.GEN_SEP.$applette_nom.'.php';
} else if (file_exists(GEN_CHEMIN_CLIENT.$applette_nom.GEN_SEP.$applette_nom.'.php')) {
$GLOBALS['_PAPYRUS_']['info_applette'][$applette_nom]['chemin'] = GEN_CHEMIN_CLIENT.$applette_nom.GEN_SEP.$applette_nom.'.php';
} else {
// On supprime l'applette de la liste
unset($GLOBALS['_PAPYRUS_']['info_applette'][$applette_nom]);
// Ne devrait pas arréter le programme! Mais instancier le gestionnaire de déboguage.
echo('ERREUR Papyrus : Impossible de trouver le fichier de l\'applette. <br />'.
'Nom applette : '.$GLOBALS['_PAPYRUS_']['info_applette'][$applette_nom]['nom'].' <br />'.
'Chemin fichier applette : '.$GLOBALS['_PAPYRUS_']['info_applette'][$applette_nom]['chemin'].' <br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier : '. __FILE__ );
}
// Nous incluons l'applette
if (file_exists($GLOBALS['_PAPYRUS_']['info_applette'][$applette_nom]['chemin'])) {
include_once($GLOBALS['_PAPYRUS_']['info_applette'][$applette_nom]['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).
$GLOBALS['_PAPYRUS_']['info_applette'][$applette_nom]['applette_balise'] = $GLOBALS['_GEN_commun']['info_applette_balise'];
$GLOBALS['_PAPYRUS_']['info_applette'][$applette_nom]['applette_fonction'] = $GLOBALS['_GEN_commun']['info_applette_nom_fonction'];
}
}
// Récupération des infos sur la balise courrante.
if (preg_match( '/'.$GLOBALS['_PAPYRUS_']['info_applette'][$applette_nom]['applette_balise'].'/', $tab_decoupage[$i][0], $applet_arguments)) {
$GLOBALS['_PAPYRUS_']['info_applette'][$applette_nom]['balises'][] = $applet_arguments;
} else {
$GLOBALS['_PAPYRUS_']['info_applette'][$applette_nom]['balises'][] = array();
echo('ERREUR Papyrus : Impossible de récupérer les arguments de l\'applette. <br />'.
'Nom applette : '.$GLOBALS['_PAPYRUS_']['info_applette'][$applette_nom]['nom'].' <br />'.
'Chemin fichier applette : '.$GLOBALS['_PAPYRUS_']['info_applette'][$applette_nom]['chemin'].' <br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier : '. __FILE__ );
}
}
}
}
?>