<?php

if(session_status() != PHP_SESSION_ACTIVE)
{

if (isset($_SERVER['HTTPS']) &&
        ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) ||
        isset($_SERVER['HTTP_X_FORWARDED_PROTO']) &&
        $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
            session_set_cookie_params(["samesite" => "None", 'Secure' => true]);
           
    }
    
    session_name('__OxaProc-PHPSESSID');
    session_start();
}

if(!isset($_SESSION['redirect']))
{
    session_unset();
    session_destroy();
    
}

if (isset($_SERVER['HTTPS']) &&
    ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) ||
    isset($_SERVER['HTTP_X_FORWARDED_PROTO']) &&
    $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
        
    ini_set("session.cookie_secure", 1);
}

if(!isset($_SESSION['MESSAGE_ERREUR_CONNEXION']))
{
    session_unset();
}
if (isset($_GET['action']) && $_GET['action'] == 'deconnecte') {
    
    if (isset($_SERVER['HTTPS']) &&
    ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) ||
    isset($_SERVER['HTTP_X_FORWARDED_PROTO']) &&
    $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
        
        @ini_set("session.cookie_secure", 'on');
    }
    
    session_destroy();
    
    header('Location: index.php');
    exit();
}

// 26568

/*
 * $a = "A+b'\"&=";
 * //header('Cookie:OxaprocDeflangue=FR; LtpaToken=A B=; PHPSESSID=ljqbpu0l8c2g01obukkmbfp534;');
 * //setcookie('LtpaToken', $a, time() + 60 * 60 * 24 * 365 * 10);
 *
 * $LtpaToken = 'test <> ';
 *
 * //print_r(apache_request_headers());
 *
 * echo $_COOKIE['LtpaToken'];
 *
 * exit;
 */
require_once 'application/config/boot_init.php';



require_once 'application/helpers/Factory.php';
$search = new ParseConfigFile(BASE1);
$search->getConfigContents();


require_once 'application/class/class_panier.php';

$VersionProduit = getVersionProduit();

$date = date('dm');

// if(!Param::isUrlSso() && !getValue('acces') && ($_GET['action'] != 'force_old_connexion_'.$date && $_SESSION['_debug'] == 'true'))
if(!Param::isUrlSsoTMP())
{
    echo "<script type='text/javascript'>window.location.href='V2/index/connexion'</script>";
}

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
$obj_xml = new GenXslt(true);
$connecteur = new Connecteur();

if (! file_exists('php/include/source_control_' . $VersionProduit . '.oxa')) {
    echo "<script type='text/javascript'>window.location.href='Controle_integrite.php'</script>";
    $connecteur->disconnect();
    exit();
    // echo "CallUrl('webroot/Controle_integrite.php');";
}

// dossier 28777 : controle si les tables sont vides
$returnMessageConnexion = checkAll();
if($returnMessageConnexion != '')
{
    echo '<center>'.$returnMessageConnexion.'</center>';exit;
}
$txt_error = '';
if (! isset($_SESSION['initVarConnexion']) && array_key_exists('dbErrorMessage', $_SESSION)) {
    $txt_error = $_SESSION['dbErrorMessage'];
    unset($_SESSION['dbErrorMessage']);
}

$scriptName = $_SERVER['SCRIPT_NAME'];
$_SESSION['URL_PAGE_ACCUEIL'] = Param::getProtocolWeb() . '://' . $_SERVER['HTTP_HOST'] . $scriptName;

/**
 * Controle si via entree SSO
 *
 * SELON NORNE DEFINIR le script name est /<repertoire virtuel>sso<Numéro de l'environnement>/.....
 */
// Si la variable de session paramètres n'existe pas, on la créé

Param::AllParamsCheck();

if ((array_key_exists('user_is_logged', $_SESSION) && $_SESSION['user_is_logged'])) {
    echo "<script type='text/javascript'>window.location.href='session_ipad.php'</script>";
    $connecteur->disconnect();
    exit();
}

if ((is_null(getValue('action')) || getValue('action') != 'deconnexion') && Param::isUrlSsoTMP()) {
    
    $okConnect = false;
    if (Param::isMultiLanguages()) {
        
        // Si l'utilisateur a choisi une langue dans la liste de sélection
        if ('changeLangue' == getValue('action')) {
            $_SESSION['changeLangueSSO'] = true;
            // Alors on met à  jour la variable de session ainsi que le cookie
            $_SESSION['Session_Langue'] = (Param::isMultiLanguages() ? getValue('langue') : '');
            setcookie('OxaprocDeflangue', $_SESSION['Session_Langue'], time() + 60 * 60 * 24 * 365 * 10);
        }
    }
    
    
    if (array_key_exists('AUTH_SSO', $_SESSION) && $_SESSION['AUTH_SSO'] == true) {
        // rien
    } 
    else {
        
        $parseUrl = Param::getUrlBaseOxaprocParseTMP();
        
        // Le dernier element contient le nom de l'utilisateur
        if ($parseUrl['user'] != '') {
            
            if ($result = & SqlUsers::rqGetInfoUser($parseUrl['user'])->Trouve1()) {
                
                $_SESSION['AUTH_SSO'] = true;
                $_POST['login_sso'] = $parseUrl['user'];
                $_POST['login'] = $parseUrl['user'];
                $_POST['operation'] = 'connexion';
                $info_user_oxaproc = & SqlUsers::rqInfoUserByLogin($userAcontrole)->Trouve1();
                $_POST['societe'] = $result['CODE_STE'];
                
                // test sur la version en mode SSO
                $initControl = FactorySection::load('initControl');
                $rapportVersion = $initControl->controlVersion($VersionProduit);
                $_SESSION['LOGIN_TMP']['versionBddBloquant'] = $rapportVersion['bloquant'];
                
                if (array_key_exists('user_is_logged', $_SESSION))
                    unset($_SESSION['user_is_logged']);
                    
                require_once '../../application/webroot/session_ipad.php';
                
                exit();
            }
        }
    }
    
    /**
     * Dans tous les cas où la connexion SSO impossible alors accès url standard
     */
    if (! $okConnect) {
        $_SESSION['AUTH_SSO'] = false;
        $arrayParse = Param::getUrlBaseOxaprocParseTMP();
        
        $_SESSION['URL_PAGE_ACCUEIL'] = $arrayParse['urlSansSso'];
        header('location:' . $_SESSION['URL_PAGE_ACCUEIL']);
        exit();
    }
    
    
    
} else {
    
    // // debug : on va forcer l'accès à session_ipad.php
    // if (!((array_key_exists('user_is_logged', $_SESSION) && $_SESSION['user_is_logged']))) {
    // echo "<script type='text/javascript'>window.location.href='session_ipad.php?operation=connexion&login=ami&passwd=&langue=FR&societe=001'</script>";
    // $connecteur->disconnect();
    // exit();
    // }
    // Si l'utilisateur revient sur la page d'accueil alors qu'il possède une session en coours
    // Alors on le renvoie vers la page principale de l'application.
    // Cela permet de neutraliser les actions du type "Page Précédente" de l'utilisateur ainsi que les tentatives de plusieurs connexion simultanées sur le même login ou avec des logins différents
    
    // Gestion du SSO
    // On enregistre dans une variable de session si la tentative de connexion est SSO
    if (array_key_exists('TENTATIVE_SSO', $_SESSION) && $_SESSION['TENTATIVE_SSO']) {
        // NE RIEN FAIRE CAR SINON LE MODE NORMAL JAVA NE MARCHERA PLUS
    } else
        $_SESSION['connexionModeSSO'] = Param::ISActiveSSO();
    
    if (array_key_exists('connexionModeSSO', $_SESSION) && $_SESSION['connexionModeSSO'] || Param::isUrlSsoTMP())
        if (getValue('action') == 'deconnexion' || (array_key_exists('abort_sso', $_SESSION) && $_SESSION['abort_sso'] == 1)) {
            $array['mode_reconnect'] = '1';
            $_SESSION['abort_sso'] = 0;
        } else {
            $sso = new SsoConnect();
            if ($sso->isConnect())
                exit();
        }
    
    // SSO partie 2
    // Ce flag permet dans la XSL de charger ou non l'applet permettant la connexion SSO
    $array['IS_SSO_GLOBAL_ACTIVE'] = array(
        '!value' => $_SESSION['connexionModeSSO'] || Param::isUrlSsoTMP()
    );
    
    // Si le SSO global est actif
    if (1 == $_SESSION['connexionModeSSO'] || Param::isUrlSsoTMP())
        // Flag permettant de géré l'affichage du champ 'Mot de passe' si 1 alors non affiché si 0 alors affiché
        $array['IS_SSO_USER_ACTIF'] = array(
            '!value' => 1
        );
    else
        // Flag permettant de géré l'affichage du champ 'Mot de passe' si 1 alors non affiché si 0 alors affiché
        $array['IS_SSO_USER_ACTIF'] = array(
            '!value' => 0
        );
    
    // Si la page est appellé suite à  une tentative de connexion de l'utilisateur et non en mode SSO
    if (array_key_exists('TENTATIVE_SSO', $_SESSION) && $_SESSION['TENTATIVE_SSO']) {
        // On indique que la connexion ne se fait pas en mode SSO
        $_SESSION['connexionModeSSO'] = 0;
        
        // On indique que l'applet de connexion SSO ne sera pas chargée
        $array['IS_SSO_GLOBAL_ACTIVE'] = array(
            '!value' => 0
        );
        
        // On affiche le champ mot de passe
        $array['IS_SSO_USER_ACTIF'] = array(
            '!value' => 0
        );
    }
    // Fin SSO partie 2
    // SSO partie 3
    // Si le mode SSO global est activé alors on conservera dans un champ hidden le login SSO
    // afin de pouvoir le comparer par la suite avec le login saisi par l'utilisateur.
    if (array_key_exists('login_sso', $_SESSION))
        $array['login_sso'] = array(
            '!value' => $_SESSION['login_sso']
        );
    if (($_SESSION['connexionModeSSO'] || Param::isUrlSso()) && getValue('action') == 'deconnexion')
        $array['mode_reconnect'] = '1';
    // Fin SSO partie 3
    
    if (Param::isUrlSsoTMP()) {
        $parseUrl = Param::getUrlBaseOxaprocParseTMP();
        $array['viewer']['fiche_ident']['login'] = array(
            '!texte' => $parseUrl['user'],
            '!flg_affiche' => 1,
            'flg_input' => 0
        );
        
        $array['viewer']['urlSansSso'] = $parseUrl['urlSansSso'];
    } else
        $array['viewer']['fiche_ident']['login'] = array(
            '!texte' => array_key_exists('login_sso', $_SESSION) ? $_SESSION['login_sso'] : '',
            '!flg_affiche' => 1,
            'flg_input' => 1
        );
    
    $array['viewer']['fiche_ident']['passwd'] = array(
        '!texte' => getValue('passwd'),
        '!flg_affiche' => Param::isUrlSsoTMP() ? 0 : 1,
        'flg_input' => 1
    );
    $array['viewer']['fiche_ident']['bas_debit'] = array(
        '!texte' => (getValue('bas_debit') == 'on' ? 1 : 0),
        '!flg_affiche' => 1,
        'flg_input' => 1
    );
    
    /**
     * Section gérant les accès à  l'application via des liens mail
     */
    // Si connexion depuis un lien mail
    if (getValue('acces') == 'mail') {
        $_SESSION['REDIRECTION'] = true;
        $_SESSION['ID_TMP'] = $_GET['id'];
        $_SESSION['PROFIL_TMP'] = $_GET['profil'];
        $_SESSION['MENU_TMP'] = $_GET['menu'];
        
        switch ($_GET['profil']) { // Ses informations permettront une redirection suite à  l'authentification de l'user
            case 'SupHier':
                // Permet de passer le champ imput login à  display: none
                $array['viewer']['fiche_ident']['accesExt'] = array(
                    '!display' => 'none'
                );
                // Permet de présenter le login en dur dans un TD
                // $array['viewer']['fiche_ident']['login'] = array('!texte' => $_GET['id'],'!flg_affiche' => 1, 'flg_input' => 1);
                $array['viewer']['fiche_ident']['login']['!texte'] = $_GET['id'];
                
                break;
            case 'Dem':
                // On redirige le demandeur vers la page suivi d'activation de compte
                print "<script language='javascript'> document.location.href ='suivi_compte.php';</script>";
                $connecteur->disconnect();
                exit();
                break;
        }
    } else {
        // On supprime les infos de redirections si connexion directe
        unset($_SESSION['REDIRECTION']);
        unset($_SESSION['ID_TMP']);
        unset($_SESSION['PROFIL_TMP']);
        unset($_SESSION['MENU_TMP']);
    }
    
    // Fin de gestion du SSO
    //
    //
    //
    // On initialise le skin d'affichage de l'utilisateur
    // Affichage::initSkin();
    
    if ($_SERVER['REQUEST_METHOD'] == 'GET')
        Track::logAudit('LOGIN', 'ENTREE', 'acces index');
    
    if (array_key_exists('ERREUR_WEBSERVICE', $_SESSION) && $_SESSION['ERREUR_WEBSERVICE']) {
        $array['MESSAGE_ERREUR_CONNEXION'] = array(
            '!value' => $_SESSION['MESSAGE_ERREUR_WEBSERVICE']
        );
        unset($_SESSION['ERREUR_WEBSERVICE']);
    } else if (array_key_exists('MESSAGE_ERREUR_CONNEXION', $_SESSION)) {
        $array['MESSAGE_ERREUR_CONNEXION'] = array(
            '!value' => $_SESSION['MESSAGE_ERREUR_CONNEXION']
        );
        
        unset($_SESSION['MESSAGE_ERREUR_CONNEXION']);
    } else
        $array['MESSAGE_ERREUR_CONNEXION'] = array(
            '!value' => checkAll()
        );
    
    $array['APPLICATION_OUVERTE'] = Param::isHaplusOpen();
    
    if (! $array['APPLICATION_OUVERTE'])
        $array['MESSAGE_APPLICATION_OUVERTE'] = trad('APPLICATION FERMEE');
    // Récupération du paramétrage d'affichage des messages flash grâce au cookie
    if (in_array('OxaprocMessageFlash', $_COOKIE) && $_COOKIE['OxaprocMessageFlash'])
        $_SESSION['SESSION_MESSAGE_FLASH'] = $_COOKIE['OxaprocMessageFlash'];
    // Si le cookie n'existe pas alors on défini les messages flash comme désactivé
    else
        $_SESSION['SESSION_MESSAGE_FLASH'] = '';
    
    if (Param::isMultiLanguages()) {
        if(Param::isUrlSsoTMP()){
            // Si l'utilisateur a choisi une langue dans la liste de sélection
            if ('changeLangue' == getValue('action')) {
                // Alors on met à  jour la variable de session ainsi que le cookie
                $_SESSION['Session_Langue'] = (Param::isMultiLanguages() ? getValue('langue') : '');
                setcookie('OxaprocDeflangue', $_SESSION['Session_Langue'], time() + 60 * 60 * 24 * 365 * 10);
                $array['viewer']['fiche_ident']['login']['!texte'] = '';
            } else 
            // Si un cookie existe sur le poste de l'utilisateur et qu'il contient le code langue utilisé précédemment
            if (array_key_exists('OxaprocDeflangue', $_COOKIE) && $_COOKIE['OxaprocDeflangue'])
                $_SESSION['Session_Langue'] = (Param::isMultiLanguages() ? $_COOKIE['OxaprocDeflangue'] : '');
            // Si le cookie n'existe pas
            else {
                // On récupère la langue par défaut
                $_SESSION['Session_Langue'] = (Param::isMultiLanguages() ? Param::getLangueDefautHaplus() : '');
                // On enregistre la langue dans un cookie
                setcookie('OxaprocDeflangue', $_SESSION['Session_Langue'], time() + 60 * 60 * 24 * 365 * 10);
            }
        }else{
            if (array_key_exists('OxaprocDeflangue', $_COOKIE) && $_COOKIE['OxaprocDeflangue']){
                $_SESSION['Session_Langue'] = $_COOKIE['OxaprocDeflangue'];
            }else{
                $_SESSION['Session_Langue'] = (Param::isMultiLanguages() ? Param::getLangueDefautHaplus() : '');
            }
        }
        
        // On transmet la langue à  la xsl        
        $array['viewer']['fiche_ident']['multilangue'] = Param::GetNoeudXMLFavoris();
        $array['viewer']['fiche_ident']['multilangue']['!deflangue'] = $_SESSION['Session_Langue'];
        if (!Param::isUrlSsoTMP())
        {
            $array['viewer']['fiche_ident']['changeLangue'] = array('!value' => "window.location.href = '" . $_SESSION['URL_PAGE_ACCUEIL'] . "?action=changeLangue&langue='+this.value+'&login='+this.form.login.value");
        }
        $array['viewer']['fiche_ident']['multilangue']['!flag'] = 1;
        
        $langues = SqlUsers::rqLangues()->TrouveTous();
        
        foreach ($langues as &$value)
            $array['viewer']['fiche_ident']['langue'][] = array(
                '!id' => $value['COD_LNG'],
                '!valeur' => $value['LIBELLE']
            );
    } elseif(!Param::isMultiLanguages()) {
        $_SESSION['Session_Langue'] = '';
        $array['viewer']['fiche_ident']['multilangue']['!appelle_favoris'] = './favoris.php?langue=';
    }
    
    // On initialise l'url de la page actualité
    $url_actualite = Param::getActualite($_SESSION['Session_Langue']);
    if ('' != $url_actualite)
        $array['viewer']['fiche_ident']['!actu'] = $url_actualite;
    
    $array['pageCenter'] = '1';
    $array['pageMenu'] = '1';
    $array['pageMenuIndex'] = '1';
    $array['autodeclaration'] = Param::getParamActionNouveauCompte();
    $array['messageNavigateur'] = Navigateur::MessageNavigateurNonSupporte();
    
    $initControl = Factory::load('initControl');
    $rapportVersion = $initControl->controlVersion($VersionProduit);
    $_SESSION['LOGIN_TMP']['versionBddBloquant'] = $rapportVersion['bloquant'];
    
    
    if (! $rapportVersion['trueOrFalse']) {
        $array['MESSAGE_ERREUR_CONNEXION'] = array(
            '!value' => trad('La version de vos programmes a changé. Des opérations de mise à niveau de la base de données sont nécessaires. Veuillez contacter votre administrateur.')
        );
    }

    $array[isSSO]=0;
    if (Param::isUrlSsoTMP())
    {
        $array[isSSO]=1;
    }


    if(getValue('APIChargedocument'))
    {
        $array['APIChargedocument'] = '?APIChargedocument=1&idDoc='.getValue('idDoc').'&typeDoc='.getValue('typeDoc');
    }else
    {
        $array['APIChargedocument'] = '';
    }
    echo $obj_xml->XslHtml('xsl/ecran_connexion.xsl', $array);
    
    
    if (Param::isUrlSsoTMP())
    {
        echo"
            <script>
                jQuery('#buttonConnexion').click(function(){
                    jQuery('#buttonConnexion').unbind('click');
                    jQuery('#buttonConnexion').removeAttr('id');
                    var user    = jQuery('#login').val();
                    var langue  = jQuery('#langue').val();
                    window.location.href = '".$_SESSION['URL_PAGE_ACCUEIL']."?action=changeLangue&langue='+langue+'&login='+user;
                });
            </script>";
    }
    
    // if($array['Matomo'] = $_SESSION['Matomo'] = SqlParam::rqGetAllParamdico('MATOMO')->trouve1())
    // {
    //     echo "<script>
        
    //     var _paq = _paq || [];
    //     _paq.push([function() {
    //         var self = this;
    //         function getOriginalVisitorCookieTimeout() {
    //             var now = new Date(),
    //             nowTs = Math.round(now.getTime() / 1000),
    //             visitorInfo = self.getVisitorInfo();
    //             var createTs = parseInt(visitorInfo[2]);
    //             var cookieTimeout = 33696000; // 13 mois en secondes
    //             var originalTimeout = createTs + cookieTimeout - nowTs;
    //             return originalTimeout;
    //         }
    //         this.setVisitorCookieTimeout( getOriginalVisitorCookieTimeout() );
    //     }]);
        
    //     _paq.push(['trackPageView']);
    //     _paq.push(['enableLinkTracking']);
    //     (function() {
    //         var u='//".$_SESSION['Matomo']['ALPHA1']."/';      
    //         _paq.push(['setTrackerUrl', u+'piwik.php']);
    //         _paq.push(['setSiteId', '".$_SESSION['Matomo']['ALPHA2']."']);
    //         var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
    //         g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s);
    //     })();
    //     </script>";
    // }
}
