Tutoriels

Installation du framework Premiers pas Mises à jour du framework Gérer les utilisateurs Gestion des textes et des langues Gestion des erreurs Créer ses classes & librairies

Classes & librairies

DSM.class.php DSMUser.class.php DSMMessage.class.php Libraire LJ Librairies internes

Gérer les utilisateurs

introduction L'objet User Enregistrer un utilisateur Récupérer un utilisateur

Gérer les utilisateurs

Introduction

La gestion d'utilisateurs est l'une des principales fonctionnalitées du DSM. Cette gestion est très puissante, car personnalisable, tout en restant d'une simplicité déconcertante. Ce tutoriel va vous permettre de l'utiliser correctement !

L'objet User

L'objet User est le principal objet de ce système de gestion d'utilisateur. La classe hérite directement de DSMUser (qui elle-même hérite de DSMGroups et de DSMRights).

L'un des avantages de la gestion d'utilisateurs du DSM, c'est qu'elle est personnalisable. En effet, vous pouvez modifier la classe User afin d'y ajouter des propriétés, des méthodes, etc. C'est pour cela que la classe User est vide.

L'objet User (qui hérite de DSMUser) définit à la fois un utilisateur, mais aussi son gestionnaire. C'est à dire que l'objet possède des méthodes afin de s'ajouter dans la base de donnée, de se modifier, de s'identifier soit même. Mais commençons par les bases : l'objet User est avant tout un utilisateur.

Création d'un objet User

$user = new User($dsm);

L'objet User prend au moins un paramètre : l'instance de l'objet DSM du moteur. Cela lui permet de d'utiliser la connexion à la base de donnée et de nombreux autres paramètres.

L'objet User peut être construit de différentes manières, je vous invite à aller voir la documentation de la classe DSMUser ici.

Afin de définir les informations de base de l'utilisateur (pseudo, email, mot de passe, etc), il suffit d'utiliser les "setters". Il y a plusieurs façons de faire :

$user = new User($dsm);
				
//Soit via le setter spécifique :
$user -> setNickname("Kimi");
//Soit par la méthode générique "set" :
$user -> set(DSMUser::NICKNAME, "Kimi");

Pour connaître l'utilisation de la méthode générique set, ainsi que les différentes propriétés contenues dans la classe DSMUser, consultez la doc de DSMUser.

C'est le même principe pour les accesseurs :

//Soit via le getter spécifique :
$user -> getNickname();
//Soit par la méthode générique "get" :
$user -> get(DSMUser::NICKNAME);

Enregistrer un utilisateur

Une fois l'objet User instancié, on veut peut-être le sauvegardé dans la base de donnée non ? Afin qu'il fasse bel et bien partie de la liste des utilisateurs du site.

Pour cela, il existe deux méthodes d'ajout d'utilisateur :

  • add
  • subscribe

La méthode barbare : add

Dans un premier temps nous allons nous intéresser à la méthode add. Elle permet d'ajouter l'utilisateur dans la base de donnée.

$user -> add();

Néanmoins cette méthode n'est pas très sécurisée : elle ne permet pas d'empêcher les doublons d'utilisateurs.
Pour éviter cela, pensez à utiliser la méthode exist :

if (!$user -> exist()) {
	$user -> set(DSMUser::SUBSCRIBED, time());
	$user -> add()
}

Attention, add ne remplit pas automatiquement le champ subscribed (timestamp d'inscription).

La bonne méthode : subscribe

Mais la plupart du temps, on souhaite ajouter un utilisateur lors d'une inscription. Pour cela, il vaut mieux utiliser la méthode subscribe. Cette méthode vous permet de :

  • mettre la valeur de subscribed au timestamp actuel
  • de vérifier que le mot de passe et la confirmation du mot de passe sont identiques
  • de vérifier que l'email et la confirmation de l'email sont identiques
  • de tester l'existance de l'utilisateur dans la base de donnée (éviter qu'ils s'inscrivent plusieurs fois

Comment fonctionne-t-elle ? C'est très simple, vous pouvez lui donner en paramètre plusieurs flags permettant d'activer certaines des fonctionalités décrites ci-dessus. Voici un exemple :

$user -> subscribe(DSMUser::CONFIRM_PASSWORD, DSMUser::CONFIRM_EMAIL, DSMUser::EXIST_NICKNAME, DSMUser::EXIST_EMAIL);

Inscription sur formulaire

La plupart du temps, vous ajoutez un utilisateur lorsqu'il s'inscrit sur le site. Ca va de soit. Donc vous utilisez la méthode subscribe. Mais il y a une façon simple de traiter un formulaire pour l'inscription avec le framework.

La seule condition pour que ce soit simple, est de nommer vos champs HTML (balise name) avec la même syntaxe que le champ (la propriété) de l'utilisateur que vous souhaitez remplir. Par exemple pour le mot de passe, mettez password comme valeur de l'attribute name. De même, nickname pour le pseudo, email. Il ne vous reste plus qu'à envoyer le formulaire reçu directement en paramètre de la méthode subscribe :

if (isset($post)) {
	$newUser = new User($dsm, $post);
	$result = $newUser -> subscribe(DSMUser::CONFIRM_PASSWORD);
	if (is_array($result))
		//Erreur : $resultat contient tous les flags des tests échoués, voir la doc de subscribe 
	elseif ($resultat)
		echo "Success !";
	else
		echo "Subscribing failed...";
}

Afin de mieux identifier les champs correspondants à l'ajout de votre utilisateur, vous pouvez rajouter un mot clé au début de chaque valeur de l'attribut name. Par exemple, au lieu de mettre password ou nickname, vous pouvez mettre subscribe_password et subscribe_nickname. Vous pouvez ainsi récupérer uniquement les données qui vous intéresse pour l'inscription en utilisant la méthode statique treatDataForm :

if (isset($post)) {
	$subscribeForm = DSMUser::treatDataForm($post, "subscribe_");
	$newUser = new User($dsm, $subscribeForm);
	$result = $newUser -> subscribe(DSMUser::CONFIRM_PASSWORD);
	if (is_array($result))
		//Erreur : $resultat contient tous les flags des tests échoués, voir la doc de subscribe 
	elseif ($resultat)
		echo "Success !";
	else
		echo "Subscribing failed...";
}

Récupérer un utilisateur

Maintenant que vous savez comment instancier un User ainsi que le sauvegarder dans la base de donnée. Vous voudriez sûrement savoir comment instancer un User depuis les données sauvegardées dans la base de donnée non ?

Pour charger un User depuis la base de donnée, il y a 4 façons de faire :

  • En instanciant l'objet en lui précisant son id
  • En utilisant la méthode getById
  • En utilisant la méthode getByNickname
  • En utilisant les méthodes load et hydrate

La première méthode est très simple :

$user = new User($dsm, 12);

On hydrate l'objet avec les données de l'utilisateur d'id 12.

Ensuite il y a les méthodes getById et getByNickname :

$user1 = new User($dsm);
$user2 = new User($dsm);

$user1 -> getById(12);
$user2 -> getByNickname("Kimi");

Enfin, la méthode complexe, c'est de récupérer les données via la méthode load. Cette méthode renvoie un tableau associatif des propriétés et des valeurs de l'utilisateur.
Mais cela ne fait que renvoyer un tableau, et n'hydrate pas le User ! Il faut donc utiliser la méthode hydrate :

//Via l'identifiant :
$user1 = new User($dsm);
$array1 = $user1 -> load(12);
$user1 -> hydrate($array1);

//Via l'email (ou tout autre attribut) :
$user2 = new User($dsm);
$array2 = $user2 -> load(DSMUser::EMAIL, "dsm@laurentjerber.com");
$user2 -> hydrate($array2);

L'utilisation de cette dernière technique est déconseillée si vous souhaitez juste récupérer un utilisateur.

Gérer les connexions du visiteur

Un visiteur de votre site, une fois inscrit, va vouloir se connecter : c'est à dire que son profil soit retenu sur toutes les pages du site qu'il va visiter.

Dans votre code, cela va se traduire par le fait que vous souhaitez accéder au profil de ce joueur sur toutes les pages de votre site à l'aide d'une seule variable.

La meilleure façon d'apprendre passe par l'exemple. La première étape de la création d'une connexion à votre site web est d'identifier quelles informations sont nécessaires à la connexion. Pour cela, on va utiliser une méthode de connexion, il existe plusieurs :

  • DSMUser::CONNECT_SIMPLE :Pour effectuer la connexion, il suffit de fournir soit le nickname soit l'e-mail de l'utilisateur.
  • DSMUser::CONNECT_SIMPLE_NICKNAME :Pour effectuer la connexion, il suffit de fournir soit le nickname soit l'e-mail de l'utilisateur.
  • DSMUser::CONNECT_SIMPLE_EMAIL :Pour effectuer la connexion, il suffit de fournir soit le nickname soit l'e-mail de l'utilisateur.
  • DSMUser::CONNECT_CLASSIC :Pour effectuer la connexion, il faut fournir soit le nickname soit l'e-mail ainsi que le mot de passe de l'utilisateur.
  • DSMUser::CONNECT_CLASSIC_NICKNAME :Pour effectuer la connexion, il faut fournir le nickname ainsi que le mot de passe de l'utilisateur.
  • DSMUser::CONNECT_CLASSIC_EMAIL :Pour effectuer la connexion, il faut fournir l'e-mail ainsi que le mot de passe de l'utilisateur.

Dans notre cas, on va créer une connexion clssique via e-mail, c'est à dire qu'on va exiger l'e-mail et le mot de passe de l'utilisateur pour la connexion :