Vikidia:Achille/sources/user.php
| Version 0.1.5 (c) Ces pages sont données pour consultation. Si vous souhaitez utiliser Achille, téléchargez de préférence les sources au format zip |
<?php
/*
Achille/user.php
GPL v3
Thomas Pimmel 2008
*/
//Ajouter utilisateur
function us_adduser_mdp($user,$pass1,$pass2,$statx)
{
if ($pass1!=$pass2)
{
message ("Vos deux mots de passe doivent être identiques !",0);
return false;
}
if (strlen($pass1)<6)
{
message ("Votre mot de passe doit comporter au moins six lettres !",0);
return false;
}
if ($pass1==$user)
{
message ("Votre mot de passe doit être différent de votre nom d'utilisateur !",0);
return false;
}
switch ($statx)
{
case "Administrateur":
$stat=2;
break;
case "Utilisateur":
$stat=1;
break;
case "Démonstration":
$stat=3;
break;
default:
$stat=0;
}
return us_adduser($user,$pass1,$stat);
}
//compter le nombre d'utilisateurs (hors root)
function us_comptage ()
{
$liste=us_read();
if (!$liste) return false;
$n=0;
while (isset($liste[$n+1])) $n++;
return $n;
}
//----------- Bas-niveau-------------//
// lire la base
function us_read()
{
// ouverture fichier
$liste=file_get_contents("users/utilisateurs.txt");
if (!$liste)
{
message ("La liste des utilisateurs est introuvable",1);
return false;
}
// mettre par ligne
$lignes=explode("\n",$liste);
// séparer les arguments
$n=0;
$idx=0;
while (isset($lignes[$n]))
{
if ($lignes[$n] && $lignes[$n]!="\n")
{
$user[$idx]=explode("|",$lignes[$n]);
/*$tmp=$user[$idx][0];
print "$idx Arg0 : $tmp<br>";
$tmp=$user[$idx][1];
print "$idx Arg1 : $tmp<br>";*/
$idx++;
}
$n++;
}
return $user;
}
// trouver utilisateur et mot de passe
function us_control($user,$mdp)
{
$mdp=md5($mdp);
$liste=us_read();
if (!$liste) return 0;
$n=1;
while (isset($liste[$n]))
{
if ($user==$liste[$n][USUSER] && $mdp==$liste[$n][USMDP])
{
if ($liste[$n][USWARN]!=0) message ("Attention : vous devez changer votre mot de passe pour vous connecter à Vikidia");
return $liste[$n][USTAT];
}
$n++;
}
message ("Mot de passe ou utilisateur incorrect",1);
return 0;
}
// supprimer un utilisateur
function us_deluser($user)
{
$essai=2;
while ($essai)
{
$liste=us_read();
if (!$liste) return false;
$n=1;
$found=false;
while (isset($liste[$n]) && !$found)
{
if ($user==$liste[$n][USUSER]) $found=true;
else $n++;
}
if ($found)
{
us_delelem ($liste,$n);
$res=us_write($liste);
if ($res==2) return true;
if ($res==0) return false;
$essai--;
if (!$essai) message ("Fichier des utilisateurs bloqué !",1);
}
else
{
message ("Utilisateur $user non trouvé !",1);
return false;
}
}
return false;
}
// supprimer un élément de la chaîne
function us_delelem(&$liste,$n)
{
while (isset($liste[$n+1]))
{
$liste[$n]=$liste[$n+1];
$n++;
}
unset ($liste[$n]);
}
// ajouter un utilisateur
function us_adduser($user,$mdp,$stat="1")
{
$essai=2;
if ($stat=="1") $warn=1;
else $warn=0;
while ($essai)
{
$liste=us_read();
if (!$liste) return false;
$n=1;
$found=false;
while (isset($liste[$n]) && !$found)
{
if ($user==$liste[$n][USUSER]) $found=true;
$n++;
}
if (!$found)
{
$liste[$n]=array($user,md5($mdp),$stat,$warn,"0");
$res=us_write($liste);
if ($res==2) return true;
if ($res==0) return false;
$essai--;
if (!$essai) message ("Fichier des utilisateurs bloqué !",1);
}
else
{
message ("L'utilisateur $user existe déjà !",1);
return false;
}
}
return false;
}
// changer une valeur
// ajouter un utilisateur
function us_chguser($user,$idx,$new)
{
$essai=2;
while ($essai)
{
$liste=us_read();
if (!$liste) return false;
$n=1;
$found=false;
while (isset($liste[$n]) && !$found)
{
if ($user==$liste[$n][0]) $found=true;
else $n++;
}
if ($found)
{
if ($idx==USMDP) $liste[$n][$idx]=md5($new);
else $liste[$n][$idx]=$new;
$res=us_write($liste);
if ($res==2) return true;
if ($res==0) return false;
$essai--;
if (!$essai) message ("Fichier des utilisateurs bloqué !",1);
}
else
{
message ("L'utilisateur $user non-trouvé !",1);
return false;
}
}
return false;
}
// écrire le fichier
function us_write ($liste)
{
$fh=fopen ("users/utilisateurs.txt","a+");
if (!$fh) {message ("Erreur lors de l'ouverture de la liste des utilisateurs",1);return 0;}
fseek($fh,0);
$line=fgets($fh);
$line=explode("\n",$line);
if ($liste[0][0]!=$line[0])
{
message ("Le fichier a été modifié depuis sa lecture, nouvel essai",0);
fclose($fh);
return 1;
}
fseek($fh,0);
ftruncate($fh,0);
$liste[0][0]=time();
$new=us_string($liste);
fwrite($fh,$new);
fclose($fh);
return 2;
}
function us_string($liste)
{
$n=0;
while (isset($liste[$n]))
{
$ligne[$n]=implode("|",$liste[$n]);
$n++;
}
$user=implode("\n",$ligne);
//print ($user);
return $user;
}
?>
