<?php
/* Corrige un bug des versions antérieures à la 4.5.0
Lorsque le prof ou l'admin changeait son login ou son mot de passe, il faisait
involontairement le même changement pour tous ceux ayant le même login.
Ce script corrige les conséquences néfastes de ce bug en réparant les logins
au mieux et en remettant les mots de passe à leur valeur par défat (jj/mm).
De plus, il avertit les admins par une page préliminaire affichant la liste
des modifications.
*/
include("../include/vars_adm.php");
include("../include/util.inc.php");
include("../include/utiljs.php");
include("../include/get.inc.php");
include("../include/creerlogin.inc.php");


function getmodele($etab_id,$statut) {
static $mp,$me=array();
if (count($mp)==0) {
    $reset=query("SELECT etab_id,modele_login_e,modele_login_p FROM etablissements");
    while (list($etab,$modelee,$modelep)=mysql_fetch_array($reset)) {
        $mp[$etab]=$modelep; $me[$etab]=$modelee;
        }
    }
if ($statut=='Prof') $m=&$mp; else $m=&$me;
if (isset($m[$etab_id])) return $m[$etab_id];
else return 'pppp.nnnn';
}


function unique($oldlogin,$loginbase,$etab_id) {      // par exemple, $login="jd"
    $login=deponctuer(strtolower($loginbase));
    $loginnew=$login;
    $suffixe=0;
    //recherche du premier login possible commençant par jd
    do {
       $logintest=$loginnew;        //pour la requête
       $logintestquot=addslashes($logintest);
       $suffixe++;
       $loginnew=$login.$suffixe;   //pour le prochain passage
       //recherche lourde pour éviter tout souci... même parmi les disparus
       $result=query("SELECT compte_id FROM comptes WHERE login='$logintestquot' AND etab_id=$etab_id");
       $nb=mysql_num_rows($result);
       mysql_free_result($result);
       }
    while (($nb>1) || ($nb==1 && $logintest!=$oldlogin));
    return $logintest;
}


function feu() {
global $trows,$tnewetab,$modifie;
global $total,$deja_connectes,$logins_changes,$deja_connectes_change;
for($i=0;$i<count($trows);$i++) {
    $row=$trows[$i];
    $newetab=$tnewetab[$i];

    $etab_id=(int) $row['etab_id'];
    $compte_id=(int) $row['compte_id'];
    $oldlogin=stripslashes($row['login']);
    $nbsessions=(int) $row['nbsessions'];
    $statut=$row['statut'];
    if ($statut=='Prof')
        $sqlu="SELECT  prof_id,nom,prenom,dnaiss,annee,ident_nat,disc_id
                 FROM profs WHERE compte_id=$compte_id";
    else
        $sqlu="SELECT  eleve_id,nom,prenom,dnaiss,annee,ident_nat,classe_id
                 FROM eleves WHERE compte_id=$compte_id";
    $resu=query($sqlu);
    if (!list($id,$nom,$prenom,$dnaiss,$annee,$ident_nat,$d)=mysql_fetch_array($resu)) {
        //l'individu a un compte mais n'existe pas dans la table (eleves ou profs)
        //on en profite pour le supprimer sans état d'âme
        query("DELETE FROM comptes WHERE compte_id=$compte_id");
        continue;
        }

    $nom=stripslashes($nom);
    $prenom=stripslashes($prenom);

    if ($newetab) {
        //c'est le premier d'un nouvel établissement : on lui garde son login (prime à l'assiduité)
        //s'il n'est pas trop éloigné du modèle
        $modele=getmodele($etab_id,$statut);
        $loginbasecalc=Login($modele,$nom,$prenom,$d.'_',$dnaiss,$ident_nat);
        $temp=split('[0123456789]',$oldlogin);
        $oldloginbase=$temp[0];
        if ($oldloginbase<>$loginbasecalc)
            $newlogin=unique($oldlogin,$loginbasecalc,$etab_id);
        else
            $newlogin=$oldlogin;
        }
    else {
        $modele=getmodele($etab_id,$statut);
        $loginbase=Login($modele,$nom,$prenom,$d.'_',$dnaiss,$ident_nat);
        $newlogin=unique($oldlogin,$loginbase,$etab_id);
        }

    if ($newlogin!=$oldlogin) {
        $g='<b><font color="red">';
        $fing='</font></b>';
        $logins_changes++;
        }
    else {
        $g=$fing=$sqllogin="";
        }
    if (!isset($dnaiss) || $dnaiss==NULL) $dnaiss='';
    $sql="UPDATE comptes SET mdp=MD5('$dnaiss'), login='".secs($login)."'
            WHERE compte_id=".seci($compte_id);
    $total++;
    if ($modifie) query($sql);

    //on ne sait pas quand a eu lieu le chgt de login par rapport à la dernière
    //sessionoù les doublons se sont logés. On ne peut donc en tenir compte
    //ci-dessus pour décider qui doit changer de login.
    if ($nbsessions==0) $deja="&nbsp";
    else {
        $deja=" déjà connecté ";
        $deja_connectes++;
        if ($newlogin!=$oldlogin) $deja_connectes_change++;
        }
    print "<tr>\n";
    print "<td> $oldlogin </td><td> $g$newlogin$fing </td><td> $modele </td>
            <td> $etab_id </td><td> $g$statut$fing </td><td> $nom </td>
            <td> $prenom </td><td> $dnaiss </td><td> $deja </td>";
    print "</tr>\n";
    } //for
} //function


//----------------------------------- PPAL ------------------------------------
set_time_limit(300);
opensession('Sadmin',false);
if ($sess_login=='admstats') {
	aneantir_session();
	goto("./index.php");
	}
connecte($host,$user,$mdp,$db);
$oldlogin='';
$oldetab=0;
$nbhom=0;
$yaprof=false;
$modifie= (isset($_GET['vazygoto']) && $_GET['vazygoto']==1);
$total=$deja_connectes=$logins_changes=$deja_connectes_change=0;    //stats
$res=query("SELECT * FROM comptes
            WHERE   (statut='Prof' OR statut='Eleve')
            AND     login<>'proftest' AND login<>'00000'
            ORDER BY login, etab_id, nbsessions DESC");
print "<table border=\"1\">\n";
print "<tr>\n";
print "<th> oldlogin </th><th> newlogin </th><th> modèle </th><th> etab_id </th>
        <th> statut </th><th> nom </th><th> prenom </th><th> dnaiss </th><th> obs </th>";
print "</tr>\n";
while ($row=mysql_fetch_array($res)) {
    $login=stripslashes($row['login']);
    $etab_id=(int) $row['etab_id'];
    if ($login==$oldlogin) {
        $nbhom++;
        //si égalité des étab, il y a des doublons de login dans le même étab
        $trows[]=$row;
        $tnewetab[]=$etab_id!=$oldetab;
        }
    else { //changement de "classe" de logins
        if ($nbhom>1 && $yaprof) { //si pas de prof alors pas de modif de login
            //fin d'une série du même login.
            feu();
            }
        $nbhom=1;
        $oldlogin=$login;
        $trows=$tnewetab=array();
        $trows[]=$row;
        $tnewetab[]=true;
        }
    $yaprof=$row['statut']=='Prof'; ;
    $oldetab=$etab_id;
    }

if ($nbhom>1 && $yaprof) feu();
print "</table>";

print '<table>';
print "<tr><td>Nombre total de changements (au moins le mdp) : </td><td>$total</td></tr>";
print "<tr><td>Nombre d'utilisateurs qui se sont déjà connectés : </td><td>$deja_connectes</td></tr>";
print "<tr><td>Nombre de logins modifiés par le script : </td><td>$logins_changes</td></tr>";
print "<tr><td>Nombre de logins modifiés <b>et</b> déjà connectés : </td><td>$deja_connectes_change</td></tr>";

?>