<?php

/**
 * Gestion des sessions
 * 
 * @author Olivier Arteau
 */

class Session { 
    private static $isSessionStart = false;
    private static $utilisateurCourrant;
    
    /**
     * Défini la valeur d'une variable session
     * 
     * @param (String) $nom
     * @param (String) $valeur
     */
    
    public static function setValeur($nom, $valeur) {
    	self::start_session();
    	$_SESSION[$nom] = $valeur;
    }
    
    /**
     * Retourne la valeur d'une variable session.
     * Si n'existe pas la valeur par défault est retourné.
     * 
     * @param (String) $nom
     * @return (String) Valeur
     */
    
    public static function getValeur($nom, $default = null) {
    	self::start_session();
    	if (!isset($_SESSION[$nom]))
    		return $default;
    	return $_SESSION[$nom];
    }
    
    /**
     * Détruit la session côté client et serveur
     */
    
    public static function detruire() {
    	self::start_session();
    	if (isset($_COOKIE[session_name()])) {
		    setcookie(session_name(), session_id(), 1);
		}
    	
    	session_destroy();
    	self::$isSessionStart = false;
    }
    
    /**
     * Retourne l'utilisateur courrant
     * 
     * @return (Utilisateur)
     */
    
    public static function getUtilisateurCourrant() {
    	if (!isset(self::$utilisateurCourrant)) {
    		$nom = self::getValeur('username');
    		$id = self::getValeur('id');
    		$lastping = self::getValeur('lastping');
    		
    		if ($nom == null || $lastping < (time() - PING_TIMEOUT)) {
    			self::$utilisateurCourrant = null; 
    		} else {
    			$user = new Utilisateur();
    			$user->setID($id);
    			self::$utilisateurCourrant = $user;
    		}
    	}
    	
    	return self::$utilisateurCourrant;
    }
    
    /**
     * S'assure que la session est démarré
     */
    
    private static function start_session() {
    	if (!self::$isSessionStart) {
    		session_start();
    		self::$isSessionStart = true;
    	}
    }
}
?>