/*! \file index.php
\brief Fichier principal du site de l'AAE
Ce fichier est le point d'entrée du site de l'AAE. Une fonction main joue le rôle
de ce point d'entrée.
*/
require_once("./includes/class.FastTemplate.php3"); // Contient la classe FastTemplate
require_once("./includes/databaseNames.php");
require_once("./includes/Actions.php"); // Définit les fonctions onActionXyz traitant les requêtes d'actions
require_once("./includes/Pages.php"); // Définit les fonctions relatives aux pages de contenu
require_once("./includes/Authentification.php"); // Définit les fonctions d'authentification et de gestion de session
require_once("./includes/Menu.php"); // Définit les fonctions relatives au Menu
require_once("./includes/Time.php"); // Définit les fonctions de mesure du temps d'exécution du script
$start_time = get_microtime(); ///< Le temps au départ du script
$tpl = new FastTemplate("./content"); ///< L'objet FastTemplate chargé de stocker et résoudre la définition des templates
$isUserAuthentified = false; ///< Permet de savoir si l'utilisateur s'est authentifié ou non
$page = "accueil"; ///< Page demandée
$pages = Array();
$measure = false;
$connected = false;
$dbh = null;
//! Fonction principale du site de l'AAE. Point d'entrée.
/** Il s'agit ici de la fonction d'entrée du site de l'association
des Anciens Elèves de l'ENSPS. Cette fonction se sert des templates
pour former la page affichée, en fonction de l'adresse passée
(variables de la commande GET)
Les entrées de ce script sont :
Les variables GET :
- page="nom de la page"
Les variables POST :
- action="nom de l'action"
Les valeurs possibles pour la variable GET "page"
sont toutes les pages listées dans le fichier pages.xml
Les valeurs possibles pour la variable action ne sont pas répertoriées pour
l'instant dans un document à part entière, mais la rêgle est la suivante :
l'action "xyz" donnera lieu à l'appel de la fonction onActionXyz($array)
ou le paramètre $array est en fait le tableau des variables POST
Le menu affiché est totalement créé à partir du fichier menu.xml
*/
function main()
{
global $tpl;
global $isUserAuthentified;
global $pages;
global $page;
global $HTTP_GET_VARS;
global $HTTP_POST_VARS;
global $start_time;
global $measure;
ob_start();
$tpl->strict();
// if ($measure) echo ("Global definitions : ".(get_microtime()-$start_time)."
");
// Récupération de la variable "page"
// La variable $page sélectionne la page demandée
// La page réllement affichée dépend de plusieurs choses :
// - les droits associés à cette page
// - l'existence de la page
// - la réusite de la création de la page demandée
// - etc ...
if ( (isset($HTTP_GET_VARS)) and (isset($HTTP_GET_VARS["page"])) )
{
$page = $HTTP_GET_VARS["page"];
}
// if ($measure) echo ("Getting the page variable : ".(get_microtime()-$start_time)."
");
// Templates utilitaires
$tpl->define(
array
(
'mainPage' => "mainPage.tpl",
'login' => "login.tpl",
'loginFailed' => "loginFailed.tpl",
'loginInfo' => "loginInfo.tpl",
'menuItem' => "menuItem.tpl",
'menuCategory' => "menuCategory.tpl",
'restrictedAccess' => "restrictedAccess.tpl",
'pageNotFound' => "pageNotFound.tpl"
)
);
// if ($measure) echo ("Defining page templates : ".(get_microtime()-$start_time)."
");
// L'appel à la fonction definePages() permet de définir les templates de pages
// (contenu) et de récupérer les droits d'accès pour chaque page ("PUBLIC ou PRIVATE")
$pages = getPages();
// if ($measure) echo ("Getting pages : ".(get_microtime()-$start_time)."
");
foreach($pages as $pageName=>$pageDescription)
{
$tpl->define( array($pageName => $pageDescription["target"]) );
}
// if ($measure) echo ("Assigning page templates : ".(get_microtime()-$start_time)."
");
// On regarde si l'utilisateur s'est autentifié (s'il s'est connecté grâce à son login/mot de passe)
$login = getLogin();
$password = getPassword();
$isUserAuthentified = auth($login, $password);
global $donneeAutentifiee;
// if ($measure) echo ("Get login info : ".(get_microtime()-$start_time)."
");
// Création de la page de login en fonction de l'état de connexion
if ($isUserAuthentified)
{
// L'auteur est actuellement logué
// On vérifie s'il ne serait pas en train d'essayer de se déloguer
if (isset($HTTP_POST_VARS) and isset($HTTP_POST_VARS["action"]) and ($HTTP_POST_VARS["action"]=="logout"))
{
// S'il se délogue on détruit la session
session_destroy();
$tpl->parse('TEMPLATE_LOGIN', "login");
$page = "accueil";
}
else
{
// Sinon on affiche les données de sa connection en cours
$tpl->assign('USER_LOGIN', $donneeAutentifiee["login"]);
$tpl->assign('TEMPLATE_PERMISSIONS', $donneeAutentifiee["typeCompte"]);
$tpl->parse('TEMPLATE_LOGIN', "loginInfo");
}
}
else
{
if (($login != "") or ($password != ""))
{
// On affiche le formulaire de connection (avec indiquation d'une erreur)
$tpl->parse('TEMPLATE_LOGIN', "loginFailed");
}
else
{
// On affiche le formulaire de connection
$tpl->parse('TEMPLATE_LOGIN', "login");
}
}
// Assignation par défaut du template de scripts à vide. Ce template est peut etre
// reassigne plus tard, en fonction du contexte
$tpl->assign('TEMPLATE_SCRIPTS', '');
// if ($measure) echo ("Creating login tab : ".(get_microtime()-$start_time)."
");
// On execute les actions demandées, s'il y en a, car elles peuvent
// conditioner le contenu qui va être affiché. L'action logout
// est traitée séparément
// Attention, la variable $page peut elle même être modifiée
// à la suite d'une action, donc il vaut mieux ne pas manuellement
// positionner la variable $page s'il n'existe pas de $HTTP_GET_VARS["page"]
// (c'est probablement fait exprès, pour que la page dépende directement du résultat de l'action)
processActions();
// if ($measure) echo ("Processing actions : ".(get_microtime()-$start_time)."
");
// Création du menu
createMenu($page);
// if ($measure) echo ("Creating menu : ".(get_microtime()-$start_time)."
");
// Création de la page de contenu, en fonction
// des droits d'accès de l'utilisateur
if (isset($pages[$page]))
{
$accessGranted = false;
// L'accès à la page peut être permis si :
// - la page est publique
// - le compte de l'utilisateur donne droit à l'accès à cette page
// (pour le dernier cas, il faut que $donneeAutentifiee[TYPE_ACCES]
// soit égal à 1, où TYPE_ACCES est le type d'accès nécessité pour la page.
// Le type d'accès est définit individuellement pour chaque page)
if ($pages[$page]["access"]=="PUBLIC")
{
// Car la page était publique
$accessGranted = true;
}
elseif (isUserAuthorised($pages[$page]["access"]))
{
// Car la page était accessible à partir du compte de l'utilisateur
$accessGranted = true;
}
if ($accessGranted == true)
{
// Création de la page
// Il s'agit de la gestion du contenu
// dynamique d'une page, si la page en contient
createPage($page);
// On assemble le contenu final de la page
$tpl->parse('TEMPLATE_MAIN_CONTENT', $page);
}
else
{
$tpl->assign(array('TEMPLATE_TARGET_PAGE' => $page));
$tpl->parse('TEMPLATE_MAIN_CONTENT', "restrictedAccess");
}
}
else
{
// La page ne semble pas exister.
// On affiche le template pageNotFound comme contenu
$tpl->parse('TEMPLATE_MAIN_CONTENT', "pageNotFound");
}
// if ($measure) echo ("Creating content : ".(get_microtime()-$start_time)."
");
// La page ciblée par le login sera la page qui a été demandée précédemment (avec toutes les variables GET)
$targetpage = "$page";
foreach ($HTTP_GET_VARS as $variable=>$value)
{
$targetpage = $targetpage ."&$variable=$value";
}
$tpl->assign('TEMPLATE_TARGET_PAGE', $targetpage);
// Calcul du temps d'exécution du script
/// \todo trouver une méthode pour que ce temps inclus l'exécution de la commande parse et FastPrint des templates
$tpl->assign('TEMPLATE_SCRIPT_EXECUTION_TIME', get_microtime()-$start_time);
// Assemblage final qui donne la totalite de la page web affichée
// contenant :
// - le menu
// - le formulaire de login
// - la page de contenu
$tpl->parse('MAIN_PAGE', "mainPage");
// On affiche la page sur le browser
$tpl->FastPrint();
// Et c'est tout.
}
// Appel de la fonction principale du site
main();
// fin
exit;
?>