<?php

class ManageSession
{

    /**
     * Attributs
     */
    const ACCUEIL = 'index.php';
 // Nom de la page d'accueil
    
    /**
     * Consctructeur
     */
    public function __construct()
    {}

    /**
     * Méthodes
     */
    
    /**
     * Fonction permettant de déterminer si la session est expirée ou non
     *
     * @return boolean : renvoie vrai si la session est expirée sinon faux
     */
    public static function isSessionExpired()
    {
        
        // On récupère le paramétrage du php.ini indiquant la durée d'une sesison
        $session_expire = session_get_cookie_params();
        $session_expire = $session_expire['lifetime'];
        
        // Si cette durée est différente de 0 c'est à dire limitée
        if (0 !== $session_expire) {
            // Alors on récupère le cookie crée à l'ouverture de la session qui contient l'heure du démarrage de la session
            $cookie_start = $_COOKIE['start_session'];
            
            // Si le cookie a pu être ouvert
            if (null != $cookie_start) {
                // On récupère l'heure de démarrage de la session
                $start_session = explode('start_session=', $cookie_start);
                $start_session = $start_session[1];
                
                // On détermine l'heure curante
                $current_time = microtime(false);
                $current_time = explode(' ', $current_time);
                $current_time = $current_time[1];
                
                // On teste si l'heure courante est supérieure ou égale à l'heure de démarrage + le délai d'expiration
                // On applique une marge de 3 minutes
                return ($current_time >= ($start_session + $session_expire) - 180);
            }            // Si le cookie n'a pu être ouvert alors on vérifie si la session est toujours existante
            // en testant l'existence de la varia=bale de session : user_is_logged
            else
                return (! array_key_exists('user_is_logged', $_SESSION) || ! $_SESSION['user_is_logged']);
        }        // Si la valeur est 0 dans le php.ini cela signifie que la session dure jusqu'à la fermeture du navigateur
        elseif (0 == $session_expire)
            return false;
        // Si la valeur dans le php.ini n'est pas 0 et que le cookie a expiré alors l'utilisateur doit se reconnecter
        else
            return true;
    }

    /**
     * Fonction permettant de gérer l'expiration des session et de le cas échéant de
     * rediriger l'utilisateur vers la page d'accueil lorsque la sesison est expirée
     */
    public static function manageSession()
    {
        
        // Si la session est expirée
        if (ManageSession::isSessionExpired() || ! array_key_exists('user_is_logged', $_SESSION) || ! $_SESSION['user_is_logged']) {
            // Nous avons besoin de la base de données, on relit le boot.ini
            require_once 'application/config/boot_init.php';
            $search = new ParseConfigFile(BASE1);
            $search->getConfigContents();
            global $connecteur;
            $connecteur = new Connecteur();
            // On enregistre la fin de la session utilisateur
            if (array_key_exists('Session_Login', $_SESSION))
                Track::trackConnexionOut($_SESSION['Session_Login']);
            else
                Track::trackConnexionOut($_SERVER['REMOTE_ADDR']);
            
            // On détermine si on est dans un mode ajax ou non
            if (array_key_exists('THROUGH',getValueAll()) && 'TRUE' === getValue('THROUGH')) // Mode ajax
                echo "Oxa_getDevice().location='", ManageSession::ACCUEIL, "?action=deconnecte';";
            else // Mode normal
                echo '<html><head><script src="js/oxalys/Gwindow.js"></script><script>Oxa_getDevice().location="', ManageSession::ACCUEIL . '?action=deconnecte";</script></head></html>';
            
            $connecteur->disconnect();
            exit();
        }
    }

    public static function ctrlDataSession()
    {
        if($_SESSION['Session_Login'] == 'OXAUSER')
        {
            return true;
        }
        
        global $connecteur;
        // Si la société de l'utilisateur n'est pas définie
        if (! array_key_exists('Session_SocUsr', $_SESSION) || '' === $_SESSION['Session_SocUsr']) {
            $message = trad('Votre société n\'est pas définie pour la session en cours, veuillez le renseigner');
            
            if ('TRUE' === getValue('THROUGH')) // Mode ajax
                echo 'CallUrl("profil_user.php?action=initialisation"); window.alert("', JsValue($message), '");';
            else
                echo "<script type='text/javascript' charset='UTF-8'>CallUrl('profil_user.php?action=initialisation'); window.alert(\"", JsValue($message), '"); </script>';
            
            $connecteur->disconnect();
            exit();
        }        // Si le centre émetteur de l'utilisateur n'est pas défini
        else if (! array_key_exists('Session_CodeCtrEmetteur', $_SESSION) || '' === $_SESSION['Session_CodeCtrEmetteur']) {
            if ($_SESSION['DA_ToutCentreEmet'] == 1 && $_SESSION['DA_ToutCentreLivr']) {

                $message = trad('Votre centre émetteur n\'est pas défini pour la session en cours, veuillez le renseigner');
                
                if ('TRUE' === getValue('THROUGH')){
                    echo 'document.location.href=\'V2/utilisateur/maSession/user\';window.alert("', JsValue($message), '");';
                }
                else {
                    echo "<script type='text/javascript'>", "document.location.href='V2/utilisateur/maSession/user'", 'window.alert("', JsValue($message) . '");', "</script>";
                }
            } else {
                $message = trad('Votre compte n’est pas paramétré pour cette société, veuillez contacter votre administrateur.');
                if ('TRUE' === getValue('THROUGH')) // Mode ajax
                    echo 'document.location.href=\'V2/utilisateur/maSession/user\'; window.alert("', JsValue($message), '");';
                else
                    echo "<script type='text/javascript' charset='UTF-8'>document.location.href='V2/utilisateur/maSession/user'; window.alert(\"", JsValue($message), '"); </script>';
            }
            $connecteur->disconnect();
            exit();
        }        // Si le centre de livraison de l'utilisateur n'est pas défini
        elseif (! array_key_exists('Session_CodeCtrLivraison', $_SESSION) || '' === $_SESSION['Session_CodeCtrLivraison']) {
            $message = trad('Votre centre de livraison n\'est pas défini pour la session en cours, veuillez le renseigner');
            
            if ('TRUE' === getValue('THROUGH')) // Mode ajax
                echo 'document.location.href=\'V2/utilisateur/maSession/user\'; window.alert("', JsValue($message), '");';
            else
                echo "<script type='text/javascript' charset='UTF-8'>document.location.href='V2/utilisateur/maSession/user'; window.alert(\"", JsValue($message), "\"); </script>";
            
            $connecteur->disconnect();
            exit();
        }
    }
}
