<?php
#=
/****************************************************************************
Copyright 2002, Daniel Deycard, Jacques Messines, Stéphanie Roussel, Jean-Marie Treins
(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

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

/* Codes d'erreurs logins
ETB : étab inconnu
LOG : login inconnu dans l'étab
GDS : session perdue (temps épuisé)
MDP : mauvais mdp
PAG : accès anormal à cette page (pas de session) ou n°étab incorrect
PER : session détruite par PHP (durée limite dépassée) ou cookie périmé
XSS : problème d'en-tête du navigateur ou tentative de XSS
TMO : durée accordée par GiBii dépassée
STA : statut incorrect
EXP : session expirée ou invalide
*/


function completeTableErreurs() {
$res=query("SELECT * FROM erreurs_logins WHERE complet=0 ORDER BY etab_id,compte_id");
$oldetab_id=-2; //-1 et 0 sont des valeurs de la table
$oldcompte_id=-1;
$oldlogin=$oldnom=$oldprenom=$oldstatut='';
/*
if ($res) {
    $nb=mysql_num_rows($res);
    $s=pluriel($nb);
    print "$nb erreur$s enregistrée$s supplémentaire$s.<br />";
    }
else {
    alert("Accès à la table erreurs_logins impossible.");
    die("</body></html>");
    }
*/
while (list($erid,$quand,$compte_id,$etab_id,$ip,$code,$login)=mysql_fetch_array($res)) {
    $etcp=$etville=$etnom='';
    $nom=$prenom=$statut='';
    switch ($etab_id) {
        case 0          : $statut='';
                          break;
        case -1         : $statut='Sadmin';
                          break;
        case $oldetab_id: $etcp=$oldetcp;$etville=$oldetville;$etnom=$oldetnom;
                          break;
        default         : //nouvel étab
                          $resetab=query("SELECT nom,ville,codepostal FROM etablissements
                                          WHERE etab_id=$etab_id");
                          if (list($etnom,$etville,$etcp)=mysql_fetch_array($resetab)) {
                              $oldetnom=$etnom;$oldetville=$etville;$oldetcp=$etcp;
                              }
        }
    if ($etab_id && $compte_id) {
        if ($compte_id==$oldcompte_id) {
            $login=$oldlogin;
            $nom=$oldnom;
            $prenom=$oldprenom;
            $statut=$oldstatut;
            }
        else { //individu à déterminer
            $resu=query("SELECT eleves.nom,eleves.prenom,comptes.login,comptes.statut
                         FROM comptes LEFT JOIN eleves
                         ON comptes.eleve_id=eleves.eleve_id
                         WHERE comptes.compte_id=$compte_id");
            if ($resu) {
                list($nom,$prenom,$login,$statut)=mysql_fetch_array($resu);
                if ($nom==NULL) $nom='';
                if ($prenom==NULL) $prenom='';
                }
            else {
                $nom=$prenom=$login=$statut='';
                }
            $oldcompte_id=$compte_id;
            $oldlogin=$login;
            $oldnom=$nom;
            $oldprenom=$prenom;
            $oldstatut=$statut;
            }  //if ($compte_id==$oldcompte_id)
        }  //if ($etab_id && $compte_id)

    query("UPDATE erreurs_logins
           SET login    = '"    .secs($login)    ."',
               nom      = '"    .secs($nom)      ."',
               prenom   = '"    .secs($prenom)   ."',
               statut   = '"    .secs($statut)   ."',
               etnom    = '"    .secs($etnom)    ."',
               etville  = '"    .secs($etville)  ."',
               etcp     = '"    .secs($etcp)     ."',
               complet  = 1
           WHERE erid=".seci($erid));
    //print "sql($compte_id) = $sql<br><br>";
    } //while
} //function

function tradIP($nip) { return long2ip($nip); }

//==============  Programme principal  ====================

include ("../include/vars_adm.php");
include("../include/util.inc.php");
include("../include/utiljs.php");
include("../include/trifiltre.class.php");
connecte($host,$user,$mdp,$db);
opensession('Sadmin');
if ($sess_login=='admstats') {
	aneantir_session();
	goto("./index.php");
	}
set_time_limit(0);

$reinit=(isset($_GET['action']) && $_GET['action']=='refresh');

$tf=new triFiltre('monlabel',$reinit);
?><!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>Erreurs de logins</title>
<script language="JavaScript">
</script>
<link rel="stylesheet" type="text/css" href="../include/trifiltre.css">
<link rel="stylesheet" href="../include/general.css" />
</head>
<body class="arial_sadmin">

<form name="form1" action="#" method="post">
<table>
<tr>
    <td>Supprimer les logs affichés</td>
    <td><input type="submit" name="supprimerAFF" value="Exécuter"></td>
</tr>
<tr>
    <td>Supprimer les logs NON affichés</td>
    <td><input type="submit" name="supprimerNONAFF" value="Exécuter"></td>
</tr>
</table>
</form>

<?php
if (!$tf->existait) {
    //passage 1
    completeTableErreurs();
    $tf->setRequete("SELECT quand,login,CONCAT(nom,' ',prenom),statut,
                            code,etnom,CONCAT(etcp,' - ',etville),ip
                     FROM erreurs_logins
                     WHERE complet=1"); //au cas où nouveaux enregistrements après maj
    $tf->creerCol(0,"Date",13);$tf->setTri(0,'quand');$tf->setFiltreSta(0,50);  //seul filtre statique
        $tf->appendFiltreSta(0,'tous',' 1 ');
        $tf->appendFiltreSta(0,'aujourd\'hui','TO_DAYS(NOW())-TO_DAYS(quand)<=1');
        $tf->appendFiltreSta(0,'moins de 8 jours','TO_DAYS(NOW())-TO_DAYS(quand)<8');
        $tf->appendFiltreSta(0,'moins de 15 jours','TO_DAYS(NOW())-TO_DAYS(quand)<15');
        $tf->appendFiltreSta(0,'moins d\'un mois','TO_DAYS(NOW())-TO_DAYS(quand)<30');
        $tf->appendFiltreSta(0,'moins d\'un trimestre','TO_DAYS(NOW())-TO_DAYS(quand)<90');
        $tf->appendFiltreSta(0,'plus d\'un mois','TO_DAYS(NOW())-TO_DAYS(quand)>30');
        $tf->appendFiltreSta(0,'plus de 2 mois','TO_DAYS(NOW())-TO_DAYS(quand)>60');
        $tf->appendFiltreSta(0,'plus de 3 mois','TO_DAYS(NOW())-TO_DAYS(quand)>90');
        $tf->appendFiltreSta(0,'plus d\'un semestre','TO_DAYS(NOW())-TO_DAYS(quand)>180');

  		$tf->Tvaleurselect[0]=2;

    $tf->creerCol(1,"Login",8);$tf->setTri(1,'login');          $tf->setFiltreDyn(1,'login',6);
    $tf->creerCol(2,"Nom - Prénom",15);$tf->setTri(2,'nom');    $tf->setFiltreDyn(2,'nom',15);
    $tf->creerCol(3,"Statut",5);$tf->setTri(3,'statut');      	$tf->setFiltreDyn(3,'statut',6);
    $tf->creerCol(4,"Erreur",5);$tf->setTri(4,'code');        	$tf->setFiltreDyn(4,'code',5);
    $tf->creerCol(5,"Etablissement",20);$tf->setTri(5,'etnom');	$tf->setFiltreDyn(5,'etnom',20);
    $tf->creerCol(6,"CP - Ville",20);$tf->setTri(6,'etcp');     $tf->setFiltreDyn(6,'etcp',5);
    $tf->creerCol(7,"IP",8);                                 	$tf->setFiltreDyn(7,'ip',15);
    $tf->setCallback(7,"tradIP",12); // tradIP met l'adresse IP sous sa forme xxx.yyy.zzz.ttt

    //print_r($tf->Tfiltrage);
    //print_r($tf->Tvalcombo[0]);

    }
elseif (isset($supprimerAFF)) {
    $sql="DELETE FROM erreurs_logins WHERE complet=1 AND ".$tf->whereFiltres;
    query($sql);
    }
elseif (isset($supprimerNONAFF)) {
    $sql="DELETE FROM erreurs_logins WHERE NOT (".$tf->whereFiltres.")";
    query($sql);
    }

$tf->afficherTableau();

?>
</body></html>