<?php
#=
/*
Copyright 2002, Daniel Deycard, Jacques Messines, Stéphanie Roussel, Jean-Marie Treins


This file is part of GiBii/Melia.
GiBii/Melia is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

GiBii/Melia is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with GiBii/Melia; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

****************************************************************************/



function getlogo($img) {
//recherche du chemin des logos des pages d'accueil 
//cherche d'abord dans images/perso et sinon balance images
$chem0="../images/".$img;
$chem="../images/perso/".$img;
if  (file_exists($chem)) return $chem;
else return $chem0;
}


function verif_version() {
//Vérifie la cohérence entre la version du B2i et la version du référentiel
//Ce qui est correct : si version de GiBii au moins 5.0, alors référentiel 2006 !
global $MODULE, $VERSION_GIBII, $VERSION_B2I;
if ($MODULE!='GiBii') return true;
elseif ((strcmp($VERSION_GIBII,'5.0')>=0) AND ($VERSION_B2I=='2000')) return false;
else return true;
}



function authentifier($loginsso, $ta=1) {
    global $etab_id, $MODULE;     //Pour login SSO, on connaît déjà l'étab...
    //print_r($_POST);print"<br>ta=$ta<br>";exit();
    switch ($ta) {
        case 1 : 
            //Réservé au login par GiBii
            $login=mysql_real_escape_string($_POST['s_login']);
            $mdpsecure=mysql_real_escape_string($_POST['s_secure']);

            //Stockage etab_id
            $etab_id=0;
            if (isset($_GET['etab_id'])) $etab_id=(int) $_GET['etab_id'];
            elseif (isset($_POST['etab_id'])) $etab_id=(int) $_POST['etab_id'];
            elseif (isset($_COOKIE['getab'])) $etab_id=(int) $_COOKIE['getab'];
            else {
                session_puts('etab_id');   //nécessaire pour le programme appelant authentifier
                garder(0,0,'ETB',$login);
                return 'Etablissement inconnu.';
            }
            break;
        case 2 :
            global $ldap_server, $ldap_port, $ldap_basedn;
            $login = $_POST['s_login'];
            $passwd = $_POST['s_passwd'];
            // connexion ldap
            $ds = ldap_connect($ldap_server,$ldap_port);
            // récupération du dn utilisateur
            $sr = ldap_search($ds, $ldap_basedn, "(uid=$login)");
            $info = ldap_get_entries($ds,$sr);
            // tentative de bind
            if (! ( ($passwd) and ($info[count]>0) and (ldap_bind($ds,$info[0]["dn"],$passwd)==1)) ) {
                if (isset($info[0]["dn"])) return 'Mauvais mot de passe.';
                else return "Compte inexistant.";
            }
            include("../include/login_eole.php");
                break;
            // C'est BON !
            // ...
        case 3 :
            $login=$loginsso;
            break;  
    }  //Fin du switch
    
  
    $res=query("SELECT * FROM comptes WHERE login='$login' AND etab_id=$etab_id");
    if (!$row=mysql_fetch_array($res)) {
        garder($etab_id,0,'LOG',$login);
        return "Compte inexistant.";
        }
    $compte_id=$row['compte_id'];
    $stat=$row['statut'];

    if (!isset($_SESSION['gds'])) {
        garder($etab_id,$compte_id,'GDS',$login);
        return "Session perdue (temps épuisé).";
        }

    //Validation mdp à la mode GiBii
    if ($ta==1) {
        $codebase=md5($row['mdp'].(string) $_SESSION['gds']);
        $_SESSION['gds']=''; //on le jette : on n'en a plus besoin et il ne pourra plus reservir
        unset($_SESSION['gds']);
        if ($mdpsecure!=$codebase) {
            garder($etab_id,$compte_id,'MDP',$login);
            return 'Mauvais mot de passe.';
            }
    }

    //Ejecter les anciens élèves-profs !!
    if (($stat=="Eleve")OR ($stat=="Prof")) {
        if ($stat=="Eleve") $tbl="eleves"; else $tbl="profs";
      $resan=query("SELECT annee FROM $tbl WHERE etab_id=$etab_id AND compte_id=$compte_id");
      $rowan=mysql_fetch_array($resan);
      $an=$rowan['annee'];
      /*
      print "query=SELECT annee FROM $tbl WHERE etab_id=$etab_id AND compte_id=$compte_id<br>
	  		an=$an, ascol()=".ascol();exit();
      */
	  if ($an!=ascol()) return "Vous n'êtes pas encore inscrit cette année, votre dernière inscription remonte à $an !";
    }


    //table compte en session, sauf etab_id déjà en session avec getparams_etab
    //--------------------------------------------------------------------------
    foreach(array('compte_id','login','statut','theme','actif','precdate','nbsessions',
                    'ip','machinecliente') as $champ) {
        $valeur=$row[$champ];
        $variable='sess_'.$champ;
        global $$variable;
        $$variable=$valeur;
        $_SESSION[$variable]=$valeur;
        }
    @setlocale(LC_TIME, "fr_FR", "FRA", 'france', 'french');
    $_SESSION['sess_precdate']=strftime('%A %d %B %Y à %H:%M:%S',$_SESSION['sess_precdate']);
    if (isset($_SESSION['sess_ip'])) $_SESSION['sess_ip']=long2ip($_SESSION['sess_ip']);
    else $_SESSION['sess_ip']="";
   if (($_SESSION['sess_theme']!='') && ($_SESSION['etab_chgt_theme'] ==1))  $_SESSION['etab_theme']=$_SESSION['sess_theme'] ;

    //
    //Récup params pour l'etab
    getparams($etab_id);

    //----------------------    TRADUCTIONS   -------------------------------
    //Répertoire pour les traductions
    $_SESSION['sess_cheminLangues']=realpath('..')."/langues/$sess_statut.fr.php";
    //pour Melia, il faudra déplacer cette affectation de façon à rajouter
    //la langue étudiée et non pas fr systématiquement.
    //pour GiBii, il faudra un paramètre dans les comptes si on veut
    //que l'utilisateur puisse choisir sa langue d'interface.
    //Et il faudra supprimer les boutons-images

    if ($_SESSION['MODULE']=='Melia') {
        //récupérer les disciplines une fois pour toutes pour éviter les requêtes (utile partout)
        $res3=query("SELECT libelle,code_langue FROM disciplines ORDER BY disc_id");
        for ($i=0; list($sess_tablang[$i],$sess_tabcodelang[$i])=mysql_fetch_array($res3) ; $i++);
        //On les met en session
        $_SESSION['sess_tabcodelang']=$sess_tabcodelang;
        $_SESSION['sess_tablang']=$sess_tablang;
        }
        //Reste à voir pour sess_langues et sess_choixlv ?


    //table eleves ou profs en session (sauf admin, gestion, sadmin)
    //--------------------------------------------------------------
    switch ($sess_statut) {
            case 'Prof':
                    $res=query("SELECT * FROM profs WHERE prof_id=".$row['prof_id']);
                    $rowu=mysql_fetch_array($res);
                    $_SESSION['sess_mec_id']=$rowu["prof_id"];
                    $_SESSION['sess_nom']=$rowu["nom"];
                    $_SESSION['sess_prenom']=$rowu["prenom"];
                    $_SESSION['sess_dnaiss']=$rowu["dnaiss"];
                    $_SESSION['sess_civil']=$rowu["civil"];
                    $_SESSION['disc_id']=$rowu["disc_id"];
                    $_SESSION['sess_statut_prof']=$rowu["admin"];
                    $_SESSION['sess_opt_dem1an']=$rowu["opt_dem1an"];
                    //alert($_SESSION['sess_opt_dem1an']);
                    break;
            case 'Eleve':
                    $res=query("SELECT * FROM eleves WHERE eleve_id=".$row['eleve_id']);
                    $rowu=mysql_fetch_array($res);
                    $_SESSION['sess_mec_id']=$rowu["eleve_id"];
                    $_SESSION['sess_nom']=$rowu["nom"];
                    $_SESSION['sess_prenom']=$rowu["prenom"];
                    $_SESSION['sess_dnaiss']=$rowu["dnaiss"];
                    $_SESSION['sess_civil']=$rowu["civil"];
                    $_SESSION['sess_classe_id']=(int) $rowu["classe_id"];
                    $resc = query("SELECT * FROM classes WHERE classe_id=".$_SESSION['sess_classe_id']);
                    $rowc=mysql_fetch_array($resc);
                    $_SESSION['sess_classe']=$rowc["divcod"];

                    //récupérer les langues vivantes pratiquées par l'élève (Melia)
                    $sess_lvchoix=getlvchoix($_SESSION['sess_mec_id']);
                    if ($_SESSION['MODULE']=='Melia') {
                        if (isset($sess_lvchoix[1]) && !isset($row['lastdisc'])) { //c'est en principe dû à un premier login
                            $disc_id=$sess_lvchoix[1]; //par défaut sa LV1
                            $_SESSION['disc_id']=$disc_id;
                            query("UPDATE eleves SET lastdisc=".seci($disc_id )." WHERE eleve_id=".$_SESSION['sess_mec_id']);
                            }
                        else $_SESSION['disc_id']=$row['lastdisc'];
                        }
                    else $_SESSION['disc_id']=-1;
                    break;
            }
    return '';
}

function createSession($etab_id) {
//on connaît le numéro de l'étab et une connexion a été créée
//fonction appelée seulement par la page proposant le login
    aneantir_session(); //détruit toutes les variables de session, même etab_id
    @session_start();   //pas de réglage cache, cookie pour la page de login
    //récupère la table _params_globaux en vars globales ET vars de session
    getparams();
    //garder($etab,$compte,$code) ????
    if ($etab_id>0) getparams_etab($etab_id);  //idem pour la table etablissements
    else {
        $_SESSION['etab_id']=-1;  //cas de sadmin avec etab_id=0
        //on fixe le time-out de la session pour le sadmin
        if (isset($_SESSION['SESS_TIMEOUT_MIN']))
            $_SESSION['etab_sess_timeout']=$_SESSION['SESS_TIMEOUT_MIN'];
        else $_SESSION['etab_sess_timeout']=7200; //cas d'une mise à jour (l'enregistrement SESS_TIMEOUT_MIN n'est pas encore défini).
        }
    //les champs de la table comptes seront stockés dans authentifier()
    $_SESSION['secure']=vosPapiers();
    $_SESSION['gds']=mt_rand();
    $_SESSION['last_access']=time();
    $_SESSION['sess_ascol']=ascol();

//print "<br>fin createSession : ";print_r($_SESSION);print "<br>";
}

function sadmin_authentifier() {
    //print "###";print_r($_SESSION);exit();
    $login=mysql_real_escape_string($_POST['s_login']);
    $mdpsecure=mysql_real_escape_string($_POST['s_secure']);
    $res=query("SELECT * FROM comptes WHERE login='$login' AND statut='Sadmin'");
    if (!$row=mysql_fetch_array($res)) {
        garder(-1,0,'LOG');
        return "Compte inexistant.";
        }
    $compte_id=$row['compte_id'];
    if (!isset($_SESSION['gds'])) {
        garder(-1,$compte_id,'GDS');
        return "Session perdue (temps épuisé).";
        }
    $codebase=md5($row['mdp'].(string) $_SESSION['gds']);
    $_SESSION['gds']=''; //on le jette : on n'en a plus besoin et il ne pourra plus reservir
    unset($_SESSION['gds']);
    if ($mdpsecure!=$codebase) {
        garder(-1,$compte_id,'MDP');
        return 'Mauvais mot de passe.';
        }
    //table compte en session, sauf etab_id déjà en session avec getparams_etab
    foreach(array('compte_id','login','statut','actif','precdate','nbsessions',
                    'ip','machinecliente') as $champ) {
        $_SESSION['sess_'.$champ]=$row[$champ];
        }
    @setlocale(LC_TIME, "fr_FR", "FRA", 'france', 'french');
    $_SESSION['sess_precdate']=strftime('%A %d %B %Y à %H:%M:%S',$_SESSION['sess_precdate']);
    if (isset($_SESSION['sess_ip'])) $_SESSION['sess_ip']=long2ip($_SESSION['sess_ip']);
    else $_SESSION['sess_ip']="";

    return '';
}

?>