accordéon CMS et sfSimpleForumPlugin

En attendant la publication de la première version stable d’accordéon CMS (c’est pour bientôt), voici un petit trace back de l’intégration de sfSimpleForumPlugin.
Une fois l’installation du plugin proprement dit voici ce que j’ai dû modifier:

Hacking et correction de Bug

Le seul fichier que j’ai du hacker dans le plugin est le schéma de sfSimpleForum dans plugins/sfSimpleForumPlugin/config/schema.yml. En effet sfCms (le cms symfony qui constitue la base d’accrodéon CMS) n’utilise pas sfGuardPlugin.
sfSimpleForum prévoit que les utilisateurs puissent être géré par un autre module de gestion d’utilisateur … ça tombe bien.
Ce qui est assez mal fait (mais je n’ai pas réfléchi s’il y avait mieux à faire) c’est que les références aux champs de bases de données de sfGuard sont écrits en dur dans le schema.yml. Il m’a donc fallu remplacer dans ce fichier, toutes les occurrences de sf_guard_user par sf_cms_user qui est le module de gestion d’utilisateur de sfCms, avant de reconstruire entièrement le projet

php symfony propel-build-all

L’ autre Hack du plugin, mais qui lui est temporaire, se situe au niveau du fichier plugins/lib/sfSimpleForumTools.class.php. En effet il y a incohérence entre les variables à « copier / coller » dans le fichier app.yml et la référence qui y est faite dans cette classe statique (méthode getUserByUsername). Il faut donc modifier

$method_name = sfConfig::get('app_sfSimpleForumPlugin_user_retrieve_by_name_method', 'retrieveByUsername');

par

$method_name = sfConfig::get('app_sfSimpleForumPlugin_retrieve_by_name_method', 'retrieveByUsername');

A toutes fins utiles, j’ai déjà pris la peine d’ouvrir un ticket.

surcharge au niveau de l’application

A ce niveau là, le sale boulot est maintenant fini. Dans toute la suite on va pouvoir surcharger sans toucher au code du plugin.
Dans le app.yml on spécifie donc le module de gestion des utilisateurs et la méthode permettant des les retrouver. Dans sfCms l’idée est plus d’appeler un utilisateur par son nom prénom que par son nom d’utilisateur. Or par défaut, c’est ce que propose sfSimpleForum …
il va falloir ruser!
La méthode charnière est précisément la méthode où se trouve le bug cité plus haut : getUserByUsername.
Au niveau de l’affichage c’est bien le prénom nom qui s’affiche (en réalité ce que renvoie la méthode __toString() de la classe SfCmsUser), En revanche c’est la même chose qui est passé en paramètre de sfSimpleForumTools::getUserByUsername() …
Les homonymies vont donc poser problème.
En explorant un peu la classe de base d’un post (BasesfSimpleForumPost.php) on s’aperçoit qu’elle peut renvoyer le nom de l’auteur (ça on savait déjà) via getAuthorName(), mais aussi l’identifiant du l’utilisateur associé … et s’il y a bien une méthode fiable poru retrouver un objet propel dans symfony c’est retrieveByPk!
Donc

all:
sfSimpleForumPlugin:
user_class:              SfCmsUser     # name of the class used to manage users
retrieve_by_name_method:  retrieveByPk  # name of the static method used to retrieve a user by its username

Et maintenant il n’y a plus qu’à surcharger tous les templates ou partial qui mentionnent un lien vers l’utilisateur afin de remplacer le paramètre username=’.$post->getAuthorName() par username=’.$post->getUserId().
Il y a 3 partials à « copier / coller » puis à modifier dans l’ (les) application(s) qui intègre(nt) sfSimpleForumPlugin

  • apps/myapp/sfSimpleForumPlugin/templates/_post.php
  • apps/myapp/sfSimpleForumPlugin/templates/_latestPost.php
  • apps/myapp/sfSimpleForumPlugin/templates/_forum.php

Il reste ensuite à traduire en français, voici le fichier à copier dans /plugins/sfSimpleForumPlugin/modules/sfSimpleForum/i18n/sfSimpleForum.fr.xml

<?xml version="1.0" ?>
<xliff version="1.0">
<file orginal="global" source-language="en_US" datatype="plaintext">
<body>
<trans-unit id="1">
<source>Latest messages from %forums%</source>
<target>Noveaux messages de %forums%</target>
</trans-unit>
<trans-unit id="2">
<source>Forums</source>
<target>Forums</target>
</trans-unit>
<trans-unit id="3">
<source>New topic</source>
<target>Nouveau sujet</target>
</trans-unit>
<trans-unit id="4">
<source>[0]No topic yet|[1]One topic|(1,+Inf]%topics% topics</source>
<target>[0]Aucun sujet|[1]Un sujet|(1,+Inf]%topics% sujets</target>
</trans-unit>
<trans-unit id="5">
<source>[0]No message|[1]One message|(1,+Inf]%posts% messages</source>
<target>[0]Aucun message|[1]Un message|(1,+Inf]%posts% messages</target>
</trans-unit>
<trans-unit id="6">
<source>Forum</source>
<target>Forum</target>
</trans-unit>
<trans-unit id="7">
<source>Topics</source>
<target>Sujets</target>
</trans-unit>
<trans-unit id="8">
<source>Messages</source>
<target>Messages</target>
</trans-unit>
<trans-unit id="9">
<source>Last Message</source>
<target>Dernier message</target>
</trans-unit>
<trans-unit id="10">
<source>1 day</source>
<target>1 jour</target>
</trans-unit>
<trans-unit id="11">
<source>%date% ago by %author%</source>
<target>depuis %date% par %author%</target>
</trans-unit>
<trans-unit id="12">
<source>Replies</source>
<target>Réponse</target>
</trans-unit>
<trans-unit id="13">
<source>Views</source>
<target>lus</target>
</trans-unit>
<trans-unit id="14">
<source>Posted</source>
<target>Posté</target>
</trans-unit>
<trans-unit id="15">
<source>view</source>
<target>lu</target>
</trans-unit>
<trans-unit id="16">
<source>Last reply</source>
<target>Dernière réponse</target>
</trans-unit>
<trans-unit id="17">
<source>Topic</source>
<target>Sujet</target>
</trans-unit>
<trans-unit id="18">
<source>Post a reply</source>
<target>écrire une réponse</target>
</trans-unit>
<trans-unit id="19">
<source>Latest messages from %forums% » %forum% » %topic%</source>
<target>Derniers messages dans %forums% » %forum% » %topic%</target>
</trans-unit>
<trans-unit id="20">
<source>[1]1 message, no reply|(1,+Inf]%posts% messages</source>
<target>[1]1 message, pas de réponses|(1,+Inf]%posts% messages</target>
</trans-unit>
<trans-unit id="21">
<source>[0,1]1 view|(1,+Inf]%views% views</source>
<target>[0,1]1 lu|(1,+Inf]%views% lus</target>
</trans-unit>
<trans-unit id="22">
<source>Messages by %user%</source>
<target>Messages de %user%</target>
</trans-unit>
<trans-unit id="23">
<source>Latest messages from %forums% by %username%</source>
<target>Derniers messages de %username% dans %forums%</target>
</trans-unit>
<trans-unit id="24">
<source>Topics by %user%</source>
<target>Sujets de %user%</target>
</trans-unit>
<trans-unit id="25">
<source>Forums</source>
<target>Forums</target>
</trans-unit>
<trans-unit id="26">
<source>Create a new topic</source>
<target>Créer un nouveau sujet</target>
</trans-unit>
<trans-unit id="27">
<source>Title</source>
<target>Titre</target>
</trans-unit>
<trans-unit id="28">
<source>Body</source>
<target>Message</target>
</trans-unit>
<trans-unit id="29">
<source>Post</source>
<target>Valider</target>
</trans-unit>
<trans-unit id="30">
<source>Delete</source>
<target>Supprimer</target>
</trans-unit>
<trans-unit id="31">
<source>Are you sure you want to delete this topic?</source>
<target>Êtes vous sûr de vouloir supprimer ce sujet?</target>
</trans-unit>
<trans-unit id="32">
<source>Stick</source>
<target>Epingler</target>
</trans-unit>
<trans-unit id="33">
<source>Lock</source>
<target>Verrouiller</target>
</trans-unit>
<trans-unit id="34">
<source>Are you sure you want to delete this post?</source>
<target>Êtes vous sûr de vouloir supprimer ce message?</target>
</trans-unit>
<trans-unit id="35">
<source>Moderator</source>
<target>Moderateur</target>
</trans-unit>
<trans-unit id="36">
<source>Latest topics</source>
<target>Derniers sujets</target>
</trans-unit>
<trans-unit id="37">
<source>Sticked topic</source>
<target>Sujet épinglé</target>
</trans-unit>
<trans-unit id="38">
<source>Latest messages</source>
<target>Derniers messages</target>
</trans-unit>
<trans-unit id="39">
<source>Next</source>
<target>Suivant</target>
</trans-unit>
<trans-unit id="40">
<source>Previous</source>
<target>Précédent</target>
</trans-unit>
<trans-unit id="41">
<source>[1]1 message|(1,+Inf] %1% messages</source>
<target>[1]1 message|(1,+Inf] %1% messages</target>
</trans-unit>
</body>
</file>
</xliff>

A noter qu’il manque un > à la ligne 148 de sfSimpleForum.es.xml sfSimpleForum.de.xml

Posted by: mazenovi on 18 mars 2008 @ 11 h 55 min
Filed under: Non classé

Pas de commentaire »

Pas encore de commentaire.

Flux RSS des commentaires de cet article. TrackBack URL

Laisser un commentaire