Une page « Profil » pour le visiteur

Ceci est une ARCHIVE, peut-être périmée. Vérifiez bien les compatibilités !

Nouveau Formulaire : [(#FORMULAIRE_AUTEUR_EDIT)].
Voici un code a adapter pour le rendre le plus générique possible qui permet déjà de proposer une page « Profil » à un visiteur authentifié (inclus dans la contribution spipBB 0.9 CSS).

Cet article fait suite à la description de la mise en place de l’avatar. Vous devriez l’avoir lu avant de poursuivre.

Le profil

Je ne vais pas m’étendre sur le code ici, je vais me contenter de décrire ce que j’ai fait.

Je me suis largement inspiré... Bon, ok, j’ai lâchement “pillé” le code de la page ecrire/auteur_infos.php3 en le simplifiant vu que je n’ai pas besoin de toutes les fonctions présentes dans le code initial.

Tant qu’à proposer une page profile, j’en ai donc profité pour laisser la possibilité au visiteur de changer quelques unes de ses infos, à savoir :
-  possibilité de changer le nom
-  possibilité d’ajouter une bio
-  possibilité d’ajouter un lien vers un site
-  possibilité de se définir un avatar (objet de cette contrib’)
-  possibilité de changer son passe !

Pour ce dernier point, on entre dans une partie qui touche à la sécurité de votre site, donc un peu plus délicat. Je ne suis pas un pro de la sécurité, je me suis donc basé sur ce que propose Spip pour faire cette page, espérant ne pas avoir créer trop de trous.

Par contre, j’empêche toujours la possibilité de changer le login.

Ce sont mes choix, par contre, vous pouvez changer ça comme vous le voulez, c’est commenté dans le code (ligne 229 et 230 de profile.html).

Tiens, puisque l’on en est à parler de sécurité, voici ce que fait la page à ce niveau :
-  si le visiteur n’est pas loggé : la page affiche #login-public, le formulaire qui permet de se logger.
-  on passe la variable id_auteur en paramère dans l’URL, on en a besoin pour la suite (pour la boucle auteur). La page teste par contre si elle correspond à l’id_auteur du visiteur qui est loggé. Si elle ne correspond pas, la page se recharge avec le bon id_auteur en URL. Celà devrait éviter que des p’tits malins éditent les infos d’autres visiteurs.

Donc, si vous êtes loggés et que vous arrivez sur cette page profil, elle vous propose un formulaire qui permet de remplir les différents champs (nom, bio, url de l’avatar et formulaire de changement de mot de passe si vous l’avez autorisé)...
Image du formulaire
Pour que cette page marche, j’ai eu besoin de deux nouvelles fonctions :

<?php 
/*
 *   +----------------------------------+
 *    Nom du Filtre :    get_auteur_infos
 *   +----------------------------------+
 *    Date : lundi 23 février 2004
 *    Auteur :  Nikau (luchier@nerim.fr)
 *   +-------------------------------------+
 *    Fonctions de ce filtre :
 *    Cette fonction permet d'obtenir toutes les infos 
 *    d'un auteur avec son nom ou son id_auteur
 *    ATTENTION !! cette fonction ne s'utilise pas de       
 *    façon classique !! voir explication dans la contrib'
 *    Fonction utilisée également dans la fonction
 *    'afficher_avatar'
 *   +-------------------------------------+ 
 *  
 * Pour toute suggestion, remarque, proposition d'ajout
 * reportez-vous au forum de l'article :
 * http://www.uzine.net/spip_contrib/article.php3?id_article=412
*/
function get_auteur_infos($id='', $nom='') {
if ($id) $query = "SELECT * FROM spip_auteurs WHERE id_auteur=$id";
if ($nom) $query = "SELECT * FROM spip_auteurs WHERE nom='$nom'";
$result = spip_query($query);

if ($row = spip_fetch_array($result)) {
$row=serialize($row);
}
return $row;
}


/*
 *   +----------------------------------+
 *    Nom du Filtre :    afficher_avatar
 *   +----------------------------------+
 *    Date : lundi 23 février 2004
 *    Auteur :  Nikau (luchier@nerim.fr)
 *   +-------------------------------------+
 *    Fonctions de ce filtre :
 *    Cette fonction permet d'afficher 
 *    l'avatar d'un auteur.
 *    On peut passer une classe CSS pour régler        
 *    l'affichage
 *    EXEMPLE :
 *    [(#NOM|afficher_avatar{''})] ou
 *     [(#NOM|afficher_avatar{'nom_de_la_classe'})]
 *   +-------------------------------------+ 
 *  
 * Pour toute suggestion, remarque, proposition d'ajout
 * reportez-vous au forum de l'article :
 * http://www.uzine.net/spip_contrib/article.php3?id_article=412
*/
function afficher_avatar($nom, $classe='') {
if ($classe!='') $insert=" class=\"$classe\""; else $insert="";

$infos=unserialize(get_auteur_infos('', $nom));

if ($infos['statut']=="0minirezo" OR $infos[statut]=="1comite") {
  $racine="auton$infos[id_auteur]";
	if (file_exists("IMG/$racine.gif")) {
		$fichier = "$racine.gif";
		}
		else if (file_exists("IMG/$racine.jpg")) {
				 $fichier = "$racine.jpg";
				 }
		else if (file_exists("IMG/$racine.png")) {
				 $fichier = "$racine.png";
		}
	$retour="<img".$insert." src=\"IMG/$fichier\" alt=\"avatar de $nom\">";
	}
	else {
	if ($infos['statut']=="6forum") {
	$infos=unserialize(get_auteur_infos('', $nom));
$source=unserialize($infos[extra]);
$source_extra=$source[avatar];
$retour="<img".$insert."  src=\"".$source_extra."\" alt=\"Avatar de $nom\">";
}
}
return $retour;
}
?>

-  get_auteur_infos(id_auteur, nom) : cette fonction permet, en transmettant l’id_auteur OU le nom d’un auteur, de récupérer toutes les infos que Spip garde sur cet auteur. Cette fonction est un peu particulière dans le sens où elle n’est pas appelée de façon habituelle. Voir un peu plus bas pour les explications.
-  afficher_avatar(nom, classe) : cette fonction permet d’afficher l’avatar. Elle permet de transmettre la classe CSS avec laquelle vous voulez afficher cette image. Par exemple, dans cette page profile, j’ai créé la classe .image_gauche qui permet de placer l’image en float sur la gauche. Pour afficher l’avatar, il suffit, dans une boucle AUTEUR de placer [(#NOM|afficher_avatar{'image_gauche'})] où je veux afficher l’avatar, ET VOILA ! comme on dit chez les anglais... Vous remarquerez que j’ai contourné la syntaxe habituelle de l’utilisation d’un champ extra. Outre que cette fonction vous permet de créer tout de code de l’image, elle permet surtout de différencier un visiteur, d’un rédacteur/administrateur et d’afficher soit le champ extra, soit le logo. Le simple affichage du champ extra n’est donc pas suffisant.

Mais revenons à notre première fonction get_auteur_infos(id_auteur, nom). Cette fonction n’est pas appelée en tant que filtre Spip, mais bel et bien en tant que fonction php brute. Cela pose un problème. En effet, pour fonctionner, celà implique que le fichier “mes_fonctions.php3” soit présent. Or, il ne l’est que lorsque la page “profile” est calculée par Spip mais pas lorsqu’elle est dans le CACHE !! Le fonctionnement de cette page est donc incompatible avec une mise en cache trop longue. C’est pourquoi j’ai réglé le délai sur 1 dans profile.php3.

Après tout, cette page n’est pas destinée à être mise en cache, donc, notre problème n’en est pas vraiment un. Rappelez-vous simplement que vous devez régler la variable delai de profile.php3 sur un temps très court. Par contre, cela limite l’utilité de la fonction en dehors de celle pour laquelle je l’ai écrite...

En résumé

Pour faire bref, pour que cette page profile fonctionne, il vous faut :
-  profile.php3 et profile.html joint à cette contrib’
-  le fichier ecrire/mes_options.php3 pour définier les champs extras
-  le fichier mes_fonctions.php3 où il faut mettre les deux fonctions nécessaires au fonctionnement de la page.

Ce qui reste à faire

-  J’ai essayé de coder de façon la plus "clean" possible mais les optimisations sont sans doute possible, notamment au niveau du fonctionnement de la fonction get_auteur_infos
-  proposer une galerie d’avatars prédéfinis et l’intégrer aux champs extra
-  Ce qui vous passe par la tête...

Application

La version 0.6 du forum phpBB vs Spip contient l’affichage de l’avatar et la page profil, voir l’article correspondant pour le squelette profile.html et profile.php3.

Discussion

2 discussions

Ajouter un commentaire

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom

Dernière modification de cette page le 15 juin 2005