Communauté  • Livre d'or
Chats noirs.jpg Actualités, astuces, interview... Venez lire la gazette de ce printemps de Vikidia ! DessinInterview.png

Vikidia:Achille/sources/user.php

Aller à la navigation Aller à la recherche
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;
}
?>