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

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

****************************************************************************/
include("../include/vars_adm.php");
include("../include/util.inc.php");
include("../include/get.inc.php");
include("../include/creerlogin.inc.php");

$statut=$_REQUEST['statut'];
//print_r($_REQUEST);
opensession($statut,false);

?>
<?php
    print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n";
?>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
 <title>Changement des login</title>
 <BASE TARGET="_self">
 <link rel="stylesheet" href="<?php echo "../themes/".$etab_theme."/b2i.css" ?>">
 <script language="javascript">
    function verifmodele(nommodele) {
        permis="npdb#.-_"; //caractères autorisés dans le modèle
        m=eval("document.formmodeles."+nommodele+".value");
        //alert(m+' '+m.length);
        if (m.length==0) {
            alert("Le modèle doit au moins comporter un des caractères n,p,d,b,#.");
            return false;
        }
        for (i=0; i<m.length; i++) {
            if (permis.indexOf(m.charAt(i))==-1) {
                alert("Le caractère '"+m.charAt(i)+"' n\'est pas autorisé dans les modèles.");
                return false;
            }
        }
        return true;
    }
 </script>
</head>
<body class="arialadmin" onload="if (document.formmodeles==undefined) ; else document.formmodeles.nouveau_eleve.focus();">

<?php

set_time_limit(6000); //100 minutes !


function Loginunique_table($newlog) {
global $tlogin;
$newlog=normernom($newlog);
$logintest=$newlog;
$suffixe=0;
while (in_array($logintest,$tlogin)) {
//recherche du premier login possible à partir de la "base" contenue dans $newlog
//(par exemple, $newlog contient initialement bm ou ben.mar)
   $suffixe++;
   $logintest=$newlog.$suffixe;
   }
return $logintest;
}

function mod_login_eleves($modele) {
global $db,$etab_modele_login_e,
       $tlogin, $tsuff, $etab_id;

//recherche de la table des login existants
$tlogin=array();
$reslog=query("SELECT login
                 FROM comptes
                WHERE (statut<>'Eleve' or login='00000')
                  and etab_id=$etab_id;");
while (list($login)=mysql_fetch_row($reslog)) {
    $tlogin[]=$login;
}


if ($etab_modele_login_e!=$modele)     {
    query("UPDATE etablissements SET modele_login_e='".secs($modele)."' WHERE etab_id=$etab_id;");
    $etab_modele_login_e=$modele;
    session_puts('etab_modele_login_e');    
    }

//on récupère les eleves et leurs comptes (sauf Test)
$res=query("SELECT comptes.compte_id, nom, prenom, classe_id, dnaiss, ident_nat
              FROM comptes, eleves
             WHERE comptes.compte_id=eleves.compte_id
               and statut='Eleve'
               and login<>'00000'
               and comptes.etab_id=$etab_id
               and eleves.etab_id=$etab_id;");
while (list($compte_id,$nom,$prenom,$classe_id,$dnaiss,$ident_nat)=mysql_fetch_array($res)) {
    //créer un nouveau login
    $classe=getclasse($classe_id);
    $newlog=Login($modele,$nom,$prenom,$classe,$dnaiss,substr($ident_nat,0,5));
    $newlog=Loginunique_table($newlog);
    $tlogin[]=$newlog;
    print "$nom, $prenom, dnaiss=$dnaiss, $classe_id, etab_id=$etab_id,
           classe_id=$classe_id, classe=$classe, nouveau login=$newlog<br>";
    query("UPDATE comptes SET login='".secs($newlog)."' WHERE compte_id=".seci($compte_id));
}
}

function mod_login_profs($modele) {
global $db,$etab_modele_login_p,
       $tlogin, $tsuff, $etab_id;
//rajouter les logins des "non profs" pour éviter de doublonner avec eux
$tlogin=array();
$reslog=query("SELECT login
                 FROM comptes
                WHERE (statut<>'Prof' or login='proftest')
                  and etab_id=$etab_id;");
while (list($login)=mysql_fetch_row($reslog)) {
    $tlogin[]=$login;
}
if ($etab_modele_login_p!=$modele) {
    query("UPDATE etablissements SET modele_login_p='".secs($modele)."' WHERE etab_id=$etab_id;");
    $etab_modele_login_p=$modele;
    session_puts('etab_modele_login_p');
    }

$res=query("SELECT comptes.compte_id, nom, prenom, disc_id, dnaiss, ident_nat
              FROM comptes, profs
             WHERE comptes.compte_id=profs.compte_id
               and statut='Prof'
               and login<>'proftest'
               and comptes.etab_id=$etab_id
               and profs.etab_id=$etab_id;");
while (list($compte_id,$nom,$prenom,$disc_id,$dnaiss,$ident_nat)=mysql_fetch_array($res)) {
    //créer un nouveau login
    $disc=getdisc($disc_id);
    $newlog=Login($modele,$nom,$prenom,$disc,$dnaiss,$ident_nat);
    $newlog=Loginunique_table($newlog); //on se réfère au nouveau champ pour l'unicité
    $tlogin[]=$newlog;
    print "$nom, $prenom, dnaiss=$dnaiss, disc_id=$disc_id, etab_id=$etab_id,
           nouveau login=$newlog<br>";
    query("UPDATE comptes SET login='".secs($newlog)."' WHERE compte_id=".seci($compte_id));
}
}

function formulaire() {
global $etab_modele_login_e,$etab_modele_login_p, $statut,$MODULE;
print "<p class='sous_titre' align='center'>Modification des logins actuels</p><hr>\n";
print "<p class=\"sous_sous_titre\">Rappel sur les caractères autorisés dans les modèles de logins</p>\n";
print "<div align=\"center\"> <table border=\"0\" width=\"85%\">";
print "<tr ><td colspan='3'>Les modèles ci-dessous permettent de coder la forme du login,
       en utilisant les conventions suivantes :<br/></td></tr>\n";
print "<tr>\n";
print "<td width=\"50%\">";
print "<ul>
       <li>n &nbsp;&nbsp;&nbsp;: nom</li>
       <li>p &nbsp;&nbsp;&nbsp;: prénom</li>
       <li>b &nbsp;&nbsp;&nbsp;: date de naissance</li>
       <li>d &nbsp;&nbsp;&nbsp;: division (pour l'élève) ou discipline (pour le prof)</li>
       <li># &nbsp;&nbsp;&nbsp;: numéro unique (par exemple GEP, s'il a été fourni)</li>
       </ul></td>\n";
print "<td>";
print "<p class='attention avis5'><Span class=\"warning\"><u>Attention</u></span> : le changement des logins s'applique à
<Span class=\"warning\">tous les utilisateurs</span> actuels de $MODULE
qu'il vous faudra donc prévenir. Toutefois, c'est le seul moyen d'<Span class=\"warning\">
uniformiser les&nbsp;logins </span> si vous avez enregistré plusieurs vagues de profs
ou d'élèves avec des modèles différents.</p>";

print "</td>\n";
print "</tr>\n";
print "<tr ><td colspan='3'>Les séparateurs suivants sont autorisés : _ (souligné), . (point), - (tiret).</td></tr>\n";
print "</table></div>";
print "<form name=\"formmodeles\" method=\"post\"><font face=\"Arial\">&nbsp;</font>\n";
print "<input type=\"hidden\" name=statut value=\"$statut\">"; //pour le 2è passage
print "<div  align=\"center\"> <table border=\"1\" width=\"80%\">\n";
print "<tr class='rubrique'>\n";
print "<td width=\"30%\">\n";
print "    <p align=\"center\"><font face=\"Arial\">Ancien modèle de login</font></p></td>\n";
print "<td width=\"29%\">\n";
print "    <p align=\"center\"><font face=\"Arial\">Nouveau modèle de login</font></p></td>\n";
print "<td >\n";
print "    <p align=\"center\"><font face=\"Arial\">&nbsp;</font></p></td>\n";
print "</tr>\n";

print "<tr>\n";
print "<td><p align=\"center\"><font face=\"Arial\">
           <input class='admin' type=\"text\" name=\"ancien_eleve\" value=\"$etab_modele_login_e\" readonly style=\"font-family:Courier;\">
           </font></p></td>\n";
print "<td><p align=\"center\"><font face=\"Arial\">
           <input class='adminblue' type=\"text\" name=\"nouveau_eleve\"  size=21 maxlength=20    style=\"font-family:Courier;\">
           </font></p></td>\n";
print "<td ><p align=\"center\"><font face=\"Arial\">
           <input type=\"submit\" class=\"coul\" name=\"btneleve\" value=\"Changer les login des élèves\" onclick=\"return verifmodele('nouveau_eleve')\">
           </font></p></td>\n";
print "</tr>\n";

print "<tr>\n";
print "<td><p align=\"center\"><font face=\"Arial\">\n";
print "    <input class='admin' type=\"text\" name=\"ancien_prof\" value=\"$etab_modele_login_p\" readonly style=\"font-family:Courier;\">\n";
print "    </font></p></td>\n";
print "<td><p align=\"center\"><font face=\"Arial\">\n";
print "    <input class='adminblue' type=\"text\" name=\"nouveau_prof\"  size=21 maxlength=20  style=\"font-family:Courier;\">\n";
print "    </font></p></td>\n";
print "<td><p align=\"center\"><font face=\"Arial\">\n";
print "    <input type=\"submit\" class=\"coul\" name=\"btnprof\" value=\" Changer les login des profs \" onclick=\"return verifmodele('nouveau_prof')\">\n";
print "    </font></p></td>\n";
print "</tr>\n";
print "</table></div>\n";
print "</form>\n";
}

function sortie() {
 print "<p>Travail terminé, pensez à prévenir les utilisateurs...<br>\n";
 print "Vous pouvez revoir les résultats ci-dessus depuis le menu Admin (partie gauche).</p>\n";
 print "<p align='center'><form name=\"retour\" method=\"post\" action=\"../admin/admin_bas.php?statut=Admin\">\n";
 print "<input type=\"submit\" class=\"coul\" name=\"fin\" value=\"Retour\" >\n";
 print "</form></p>";
}


//=============PROG PRINCIPAL

if (isset($btneleve))  {
    connecte($host,$user,$mdp,$db);
    mod_login_eleves($nouveau_eleve);
    sortie();
}
elseif (isset($btnprof)) {
    connecte($host,$user,$mdp,$db);
    mod_login_profs($nouveau_prof);
    sortie();
}
else formulaire();

print "</body></html>\n";

?>