Ajout d’une page profil pour les membres

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

Ajout de la page ’profil’ au forum spip vs phpBB

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

A partir de la version 0.6, le 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

  • J’ai testé cette version sur la 1.8.2d et elle fonctionne très bien. Par contre elle ne marche plus sur la 1.8.2e. Qu’est ce qui est donc si different ?

    Répondre à ce message

  • La 1.8 est en béta, les champs extra sont en voie d’abandon.

    Il ne serait pas possible de refaire ces articles (avatar/profil) avec les modifications à effectuer pour une 1.8 ?

    càd : création des tables et des fichiers nécessaires :-)

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

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