<?php
#=
/****************************************************************************
Copyright 2002, Daniel Deycard, Jacques Messines, Alain Pomirol
(CATICE Académie de Bordeaux)

This file is part of Gibii.

Gibii 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 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; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

****************************************************************************/
include("../include/vars_adm.php");
include("../include/util.inc.php");
include("../include/get.inc.php");
set_time_limit(600);
opensession('Sadmin',false);
if ($sess_login=='admstats') {
	aneantir_session();
	goto("./index.php");
	}
connecte($host, $user, $mdp,$db);
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<TITLE>Modification des logins doublons</TITLE>
<link rel="stylesheet" href="../include/general.css">
<!--<style type="text/css">

h3 {font: bold 10pt sans-serif;color: #B22222; }
fieldset {border-color:green;}
legend {color: green;}
a:hover {font-style: normal;
         font-weight: bold;
         color: #389D64;}

</style>-->
<script language="javascript">
  function okchange() {
    return confirm("Attention, cette décision de normalisation des logins \npeut vous valoir de gros reproches des admins !\nVoulez-vous quand-même continuer ?");
    }
</script>
</head>
<body class="arial_sadmin">

<?php

function coordonnees($cid,$statut,&$nom,&$prenom,&$annee) {
//retourne false en cas d'utilisateur anormal (id négatif ou supprimé)
global $comptes;
$annee=$nom=$prenom='&nbsp;';
if (!isset($comptes['id'][$cid])) return false;
$id=$comptes['id'][$cid];
if ($id<=0) return false;
if ($statut=='Eleve') $sql="eleves WHERE eleve_id"; else $sql="profs WHERE prof_id";
$resu=query("SELECT nom,prenom,annee FROM $sql=$id");
if (!$resu || mysql_num_rows($resu)==0) $ret=false;
else {
    list($nom,$prenom,$annee)=mysql_fetch_array($resu);
    $nom=stripslashes($nom);
    $prenom=stripslashes($prenom);
    $ret=true;
    }
mysql_free_result($resu);
return $ret;
}

function cherchenouveauxlogins($etid,$loginbase,&$listecids) {//calcul de nouveaux logins
global $comptes; //modifié par la fonction
//chercher qui mérite le login de base parmi tous les postulants de $listecids
$cidmax=0;$dtemax=null;
foreach($listecids as $cid) {
    if (isset($comptes['dte'][$cid]) && $comptes['dte'][$cid]>$dtemax) {
        $dtemax=$comptes['dte'][$cid];
        $cidmax=$cid;
        }
    }
if ($cidmax==0) $cidmax=max($listecids); //le plus récents dans la liste des comptes

$loginnew=$loginbase;
$suffixe=1;
foreach($listecids as $cid) {
    if ($cid==$cidmax) continue; //traité ensuite
    $logintest=$loginbase.$suffixe;
    while(mysql_num_rows(query("SELECT compte_id FROM comptes
                                WHERE LOWER(login)='$logintest'
                                AND   etab_id=$etid;"))) {
       $suffixe++;
       $logintest=$loginbase.$suffixe;   //pour le prochain passage
       }
    //logintest est bon
    $comptes['loginnew'][$cid]=$logintest;
    $suffixe++;
    }
$comptes['loginnew'][$cidmax]=$loginbase;
}


function gererdoublons($etid,&$listecids_etab) {
static $affiche_liens=true;
static $affiche_etab2=true;
global $comptes,$passage2;
$affiche_etab=!$passage2;   //vrai au passage 1
foreach($listecids_etab as $login => $listecids) {
    //traitement d'UN login qui va doublonner (ou doublonne déjà) dans le même établissement
    //$listecids est la liste des cid pour le login $login de l'étab $etid
    if (count($listecids)==1) {
        $cid=$listecids[0];
        if ($comptes['loginold'][$cid]==$login) continue;
        //un seul élément dans la classe d'équivalence mais login modifié
        }
    if ($affiche_liens) {
        if (!$passage2) {
            //on laisse faire le passage 1 en laissant un lien dont l'action
            //dépendra dela réponse à un confirm javascript
            //si la réponse au confirm est Annuler, le passage 2 ne se déroulera pas
            print "<a href=\"".basename($_SERVER['PHP_SELF'])."?traiter=1\" onclick=\"javascript:return okchange();\">Traiter les logins ci-dessous</a>\n";
            print "<i><font color='red' size='+1'>&nbsp;(Pour l'instant, aucune modification n'a eu lieu, vous pouvez évaluer ci-dessous le nombre de personnes à prévenir !)</i></font><br/>\n";
            }
        print "<a href=\"sadmin_bas.php\">Revenir au menu</a>\n";
        print "<br />\n";
        $affiche_liens=false;
        }
    if ($affiche_etab) { //on n'a encore rien affiché pour cet étab
        $tetab=get1etab($etid);
        $e="n°$etid - ".$tetab['rne'].' - '.$tetab['nom'].', '.
            $tetab['codepostal'].' - '.$tetab['ville'];
        print "<br /><h3>$e</h3>\n";
        $affiche_etab=false;
        }
    if (!$passage2) {
        print "<fieldset title='login : $login'>\n";
        print "<legend><b>$login</b></legend>\n";
        print "<table width=\"100%\">\n";
        print "<tr align=\"left\"><th width=\"12%\">ancien</th><th width=\"12%\">nouveau</th>
                    <th width=\"18%\">Nom</th><th width=\"17%\">Prénom</th>
                    <th width=\"7%\">Statut</th><th width=\"9%\">Année</th>
                    <th width=\"25%\">Connexion</th>
               </tr>\n";
        }
    elseif ($affiche_etab2) {
        $affiche_etab2=false;
        print "<table width=\"100%\">\n";
        print "<tr align=\"left\">
                    <th width=\"12%\">Etab</th>
                    <th width=\"10%\">ancien</th><th width=\"10%\">nouveau</th>
                    <th width=\"16%\">Nom</th><th width=\"15%\">Prénom</th>
                    <th width=\"7%\">Statut</th><th width=\"8%\">Année</th>
                    <th width=\"22%\">Connexion</th>
               </tr>\n";
        }
    cherchenouveauxlogins($etid,$login,$listecids);//calcul de nouveaux logins
    for($i=0;$i<count($listecids);$i++) {
        $cid=$listecids[$i];
        $statut=$comptes['statut'][$cid];
        if ($statut=='Eleve' || $statut=='Prof') {
            //oublier les comptes sans individu
            if (!coordonnees($cid,$statut,$nom,$prenom,$annee)) continue;
            }
        else {
            //cas des individus spéciaux (admin, gestion, sadmin)
            $nom=$prenom=$annee='&nbsp;';
            }
        $loginold=$comptes['loginold'][$cid];
        //$loginoldq=addslashes($loginold);
        $loginnew=$comptes['loginnew'][$cid];
        if ($dcnx=@$comptes['dte'][$cid]) $dcnxclair=strftime('%d/%m/%Y %H:%M:%S',$dcnx);
        else $dcnxclair='jamais connecté';
        if ($passage2) {
            query("UPDATE comptes SET login='".secs($loginnew)."' WHERE compte_id=".seci($cid));
            $dateconnexion=(isset($dcnx))? ", dateconnexion=".seci($dcnx):"";
            query("INSERT INTO changements_logins
                    SET etab_id=".seci($etid)." ,
                        loginold='".secs($loginold)."', loginnew='".secs($loginnew)."',
                        nom='".secs($nom)."',
                        prenom='".secs($prenom)."',
                        statut='".secs($statut)."', annee='".secs($annee)."'
                        $dateconnexion");
            print "<tr>";
            print "<td>$etid</td>";
            }
        else {
            print "<tr>";
            }
        print "<td>$loginold</td>";
        print "<td>$loginnew</td>";
        print "<td>$nom</td>";
        print "<td>$prenom</td>";
        print "<td>$statut</td>";
        print "<td>$annee</td>";
        print "<td>$dcnxclair</td>";
        print "</tr>\n";
        }
    if (!$passage2) {
        print "</table>\n";
        print "</fieldset>\n";
        }
    }
return !$affiche_liens;
}


//////////////////////  Programme principal   //////////////////////////////////

$passage2=(isset($_GET['traiter']) && $_GET['traiter']==1);

query("CREATE TABLE IF NOT EXISTS `changements_logins` (
        `etab_id` INT NOT NULL DEFAULT '0',
        `loginold` VARCHAR( 30 ),
        `loginnew` VARCHAR( 30 ),
        `nom` VARCHAR( 30 ),
        `prenom` VARCHAR( 30 ),
        `statut` VARCHAR( 10 ),
        `annee` INT ,
        `dateconnexion` INT ,
            INDEX ( `etab_id` )
        ) TYPE = MYISAM");
$resetab=query("SELECT * FROM etablissements ORDER BY rne");
$trouve=false;

if ($passage2) print "<table width=\"100%\">\n";

while ($rowetab=mysql_fetch_array($resetab)) {
    $etid=$rowetab['etab_id'];
    $res=query("SELECT compte_id, login, eleve_id, prof_id, statut, precdate
                FROM comptes WHERE etab_id=$etid");
    $oldlogin='';
    $listecids_etab=$comptes=array();
    while (list($cid,$logininitial,$eid,$pid,$statut,$dte)=mysql_fetch_array($res)) {
        //on empile tous les logins d'un même établissement
        $logininitial=stripslashes($logininitial);                  //actuel
        $login=normernom($logininitial); //nouveau
        $listecids_etab[$login][]=$cid;  //classe d'équivalence de $login
        if ($statut=='Prof') $comptes['id'][$cid]=$pid;
        elseif ($statut=='Eleve') $comptes['id'][$cid]=$eid;
        if (isset($dte) && !is_null($dte)) $comptes['dte'][$cid]=$dte;
        $comptes['statut'][$cid]=$statut;
        $comptes['loginold'][$cid]=$logininitial;
        $comptes['loginnew'][$cid]=''; //histoire que $comptes['loginnew'] soit un tableau
        }
    //fin de l'établissement : on traite puis on vide
    $trouve|=gererdoublons($etid,$listecids_etab);
    $listecids_etab=$comptes=array();
    }
if ($passage2) print "</table>";
if (!$trouve) {
    print "<h3>Pas de doublons dans les logins</h3>";
//    print "<a href=\"choix_verif.form.php\">Revenir aux vérifications</a>\n";
    retour("../sadmin/choix_verif.form.php");
    }


?>
</body></html>