Date de publication: le samedi 22 décembre 2007 à 03h07
Dernière modification: par Pascal BOYER le samedi 4 septembre 2010 à 02h36
« Article précédent: eZ Publish : eZ Multiupload - multitéléchargement d'objets
» Article suivant: ezstats : popularité des articles
Objectifs de l'extension
Cette extension propose d'afficher au bas de votre formulaire de rédaction de commentaire une suite de 7 caractères (composée de lettres et/ou de chiffres) que le visiteur devra reproduire dans un champ spécifique avant de pouvoir envoyer son commentaire. Ceci afin d'éviter que des robots (logiciels) utilisent abusivement (et de façon autonome) votre formulaire et envahissent votre site de messages-spam.
Le contenu de cet article est en grande partie tiré des informations disponibles en ligne sur la page de présentation de l'extension: Peter's Random Anti-Spam Image mais se base également sur mon expérience de la mise en oeuvre de cette extension sur une version 3.9.4 de eZ Publish
:
Cette extension propose également l'écoute audio de la lecture de la suite de caractères générée automatiquement. Ceci est très pratique pour les personnes malvoyantes.
Par ailleurs il semble que l'auteur de l'extension ait pensé aux utilisateurs de Mac OS X puisque l'archive contient un répertoire __MACOSX (je n'ai pas inspecté le contenu de ce répertoire)
Télécharger l'extension
Télécharger l'archive de l'extension sur cette page: Peter's Random Anti-Spam Image
wget http://ez.no/content/download/179550/1223108/file/customantispam_ez1.1.zip
Installer l'extension
Extraire le contenu de l'archive dans le répertoire extension/ situé à la racine du répertoire d'installation de eZ Publish:
unzip customantispam_ez1.1.zip -d /usr/local/www/extension/
Un nouveau répertoire est créé:
extension/customantispam/
Pensez éventuellement à modifier les propriétaires des fichiers et répertoire de l'extension:
chown -R www-data:www-data extension/customantispam/
Activer l'extension
Pour activer cette extension pour l'ensemble des siteaccess, ajoutez cette ligne au fichier settings/override/ site.ini.append.php:
[ExtensionSettings] ActiveExtensions[]=customantispam
Pour n'activer l'extension que pour un siteaccess particulier, c'est le fichier settings/siteaccess/< siteaccess_public>/ site.ini.append.php dans lequel il faut ajouter cette fois-ci:
[ExtensionSettings] ActiveAccessExtensions[]=customantispam
Dans les deux cas videz les caches pour que l'extension soit prise en compte par le système.
Créer les nouvelles tables dans la base de données
A la racine du répertoire de l'extension se trouve le fichier customantispamtables.sql qui va servir à créer les deux nouvelles tables suivantes:
customantispam customanticount
Voici la commande permettant d'appliquer les requêtes contenues dans ce fichier:
mysql -u xxx -p -D maBaseDeDonnees < extension/customantispam/customantispamtables.sql
Enter password: <mot de passe de l'admin de la base de données>
...où xxx est le nom de l'administrateur de la base de données de eZ Publish.
Ajouter une politique de sécurité
Il est nécessaire d'ajouter une politique de droits au rôle Anonymous qui par défaut contient le groupe d'utilisateurs Anonymous Users contenant à son tour l'utilisateur Anonymous User.
Donc, cliquez sur l'onglet Comptes utilisateurs de l'interface d'administration puis sur le lien Rôles et droits dans le menu de gauche:
Fig. 1: Ajouter une politique de droits au rôle Anonymous
Cliquez ensuite sur l'icône d'édition (icône représentant un crayon) correspondant au rôle Anonymous:
Fig. 2: Interface d'édition des politiques de sécurité du rôle Anonymous
Cliquez sur le bouton Nouvelle politique de sécurité puis sélectionnez l'option Customantispam dans la liste déroulante du champ Module:
Fig. 3: Sélection du module Customantispam et application des droits sans limite
Le module Customantispam sélectionné, appliquez l'option Accorder l'accès à toutes les fonctions:
Fig. 4: La nouvelle politiques de sécurité du rôle Anonymous apparaît au bas de la liste de toutes les politiques du rôle
Validez la nouvelle politique en cliquant sur le bouton OK.
Créer le workflow antispam
Cliquez sur l'onglet Administration de l'interface d'administration puis sur le lien Workflows dans le menu de gauche:
Fig. 5: Liste des groupes de wokflows présents par défaut dans le système
Puis cliquez sur le bouton Nouveau groupe de workflow et donnez n'importe quel nom à votre nouveau groupe:
Fig. 6: Nom du nouveau groupe de wokflows
Validez le nom avec le bouton OK puis cliquez sur le nom de votre groupe afin d'afficher ce cadre:
Fig. 7: Créer un wokflow dans le nouveau nouveau groupe de workflows
Poursuivez en cliquant sur Nouveau processus de workflow:
Fig. 8: Nommer le wokflow et sélectionner l'événement
...puis nommez comme bon vous semble le workflow, sélectionnez l'événement Custom anti-spam et cliquez sur Ajouter un événement:
Fig. 9: Ajout de l'événement Custom anti-spam au nouveau workflow
Terminez en validant avec le bouton OK:
Fig. 10: Fin de création du workflow
Créer le déclencheur
La dernière étape consiste à créer le déclencheur (trigger) du nouveau workflow.
Dans l'onglet Administration cliquez dans le menu de gauche sur le lien Déclencheurs:
Fig. 11: Associer le workflow au déclencheur Content/publish/before
Terminez en cliquant sur Appliquer les changements.
Le template d'édition comment.tpl
Au tout début du template d'édition des commentaires, par défaut il s'agit du template design/base/override/templates/edit/ comment.tpl, il faut ajouter cette ligne:
{set-block scope=root variable=cache_ttl}0{/set-block}
Celle-ci indique au système de ne jamais mettre en cache le contenu de la compilation de ce template.
Pour plus d'informations sur le système de mise en cache, consultez la documentation: Système de cache des vues
Toujours dans le même template, et avant la balise de fermeture </form>, insérez le bloc de lignes 47 à 55:
39 <div class="blockMessage"> 40 {let attribute=$object.data_map.message} 41 <label>{$attribute.contentclass_attribute.name}</label><div class="labelbreak"></div> 42 <input type="hidden" name="ContentObjectAttribute_id[]" value="{$attribute.id}" /> 43 <textarea class="box" cols="70" rows="10" name="ContentObjectAttribute_data_text_{$attribute.id}"></textarea> 44 {/let} 45 </div> 46 {* MISE EN PLACE DU SYSTEME ANTI-SPAM *} 47 <div class="block"> 48 {def $antispam = custom_anti_spam()} 49 <label>Anti-spam word</label> 50 <div class="labelbreak"></div> 51 <input type="hidden" name="matchthis" value="{$antispam}" /> 52 <a href={concat("/customantispam/audio/(audio)/",$antispam)|ezurl("double")}> <img src={concat("/customantispam/image/(image)/",$antispam)|ezurl("double")} style="border: 1px solid black" alt="Cliquez pour écouter la version audio du mot anti-spam"/></a> 53 <div class="labelbreak"></div> 54 <input type="text" name="securitycode" size="10" /> 55 </div> 56 57 <div class="buttonblock"> 58 <input class="defaultbutton" type="submit" name="PublishButton" value="Envoyer" /> 59 <input class="button" type="submit" name="DiscardButton" value="Annuler" /> 60 <input type="hidden" name="MainNodeID" value="{$main_node_id }" /> 61 <input type="hidden" name="DiscardConfirm" value="0" /> 62 </div> 63 </div>{* logoCommentaire *} 64 </div>{* class-article-comment *} 65 </div>{* edit *} 66 </form>
Videz les caches et testez votre extension en rédigeant un commentaire au bas de l'une de vos pages de votre site public.
Résultat
Si tout est correctement configuré, voici ce que vous devez voir lors de l'édition du formulaire de rédaction d'un commentaire:
Si vous ne remplissez pas correctement les champs du formulaire, le système de contrôle liée au formulaire étant prioritaire il affichera ses messages d'erreurs et ceci, quand bien même il y aurait une erreur dans le champ anti-spam.
Par contre, si tous les champs du formulaire sont bien remplis et que ne subsiste qu'une erreur au niveau du champ Anti-spam, alors toute tentative d'envoi du commentaire produira ce message d'erreur:
:
En cliquant sur le mot généré aléatoirement le système vous propose d'écouter la lecture du mot.
Les fichiers audio sont présents dans le répertoire extension/customantispam/sounds/
Chaque lettre et chiffre faisant l'objet d'un fichier audio au format MP3, il est très facile avec audacity de franciser la lecture du mot.
Longueur du mot généré
La longueur du mot généré est définie par la variable $random_word ligne 53 du fichier:
extension/customantispam/customantispam.php
Il vous suffit donc de modifier la valeur par défaut (7) comme ceci:
53 $random_word = $this->random_text(12);
...pour augmenter (ou diminuer) le nombre de caractères composant le mot.
Francisation
Le message d'erreur ci-dessus est contenu dans le template suivant:
extension/customantispam/design/standard/templates/workflow/eventtype/result/event_customantispam.tpl
Le nom du champ Anti-spam word peut être modifié directement à partir de la ligne 49 donnée en exemple plus haut.
Coupler le workflow Custom anti-spam avec un autre workflow
Il est possible que vous souhaitiez, par exemple, coupler le fonctionnement de cette extension avec un workflow permettant de modérer les sommentaires à priori. Auquel cas, je vous renvoie à cet article qui détaille la procédure à suivre.














