Steve Frécinaux

Dotclear : commentaires modérés

Tristan si tu me lis, cette petite astuce t’est dédicacée. Ça consiste à masquer les commentaires par défaut, et à ne les afficher que si le propriétaire du carnet en a envie, c’est à dire s’ils apportent un réel plus au débat. Idéal pour éviter les trolls intempestifs et guère compliqué à mettre en œuvre.

Il suffit en effet d’une toute petite modification dans le fichier inc/classes/class.blog.php dans votre installation de DotClear. Cherchez la méthode addComment() (chez moi en ligne 1436) et, dedans, cherchez les lignes qui génèrent la requête SQL :

$insReq = 'INSERT INTO '.$this->t_comment.' '.
          '(post_id,comment_dt,comment_upddt,comment_auteur,comment_email,'.
          'comment_site,comment_content,comment_ip,comment_pub,'.
          'comment_trackback) VALUES '.
          '(\''.$this->con->escapeStr($post_id).'\', '.
          'SYSDATE(),SYSDATE(), '.
          '\''.$this->con->escapeStr($auteur).'\', '.
          '\''.$this->con->escapeStr($email).'\', '.
          '\''.$this->con->escapeStr($site).'\', '.
          '\''.$this->con->escapeStr($content).'\', '.
          '\''.$this->con->escapeStr(@$_SERVER['REMOTE_ADDR']).'\', '.
          '1, '. // état du commentaire (publié / masqué)
          (integer) $trackback.') ';

En analysant ceci, on remarque que l’avant dernière valeur (le 1) définit l’état du commentaire ou du pisteur, soit publié (1), soit masqué (0). C’est donc en modifiant cette unique valeur que l’on forcera les commentaires à passer par la case modération. On pourrait donc tout simplement remplacer le 1 par un 0, mais ceci a pour inconvénient qu’alors, les trackbacks non plus ne s’afficheront plus directement. Je propose donc cette solution :

$insReq = 'INSERT INTO '.$this->t_comment.' '.
          '(post_id,comment_dt,comment_upddt,comment_auteur,comment_email,'.
          'comment_site,comment_content,comment_ip,comment_pub,'.
          'comment_trackback) VALUES '.
          '(\''.$this->con->escapeStr($post_id).'\', '.
          'SYSDATE(),SYSDATE(), '.
          '\''.$this->con->escapeStr($auteur).'\', '.
          '\''.$this->con->escapeStr($email).'\', '.
          '\''.$this->con->escapeStr($site).'\', '.
          '\''.$this->con->escapeStr($content).'\', '.
          '\''.$this->con->escapeStr(@$_SERVER['REMOTE_ADDR']).'\', '.
          (integer) $trackback.', '. // c'est cette ligne que l'on modifie
          (integer) $trackback.') ';

Ceci aura pour effet de définir à 1, soit à publié, l’état du commentaire s’il s’agit d’un pisteur, et à masqué sinon. À savoir que la notification par e-mail fonctionnera toujours comme avant. Les billets pour lesquels les commentaires seront autorisés afficheront le formulaire d’ajout de commentaire, mais ceux-ci ne seront donc pas affichés avant validation.

Bien qu’elle introduise un certain ralentissement des débats (a fortiori si le temps à consacrer à la modération est réduit), je pense que ça réduira aussi considérablement le nombre de commentaires postés, que ça permettra donc aux commentateurs ayant une réelle brique à apporter à l’édifice à commenter plus ou moins normalement, sans les obliger à passer par la case e-mail ou pistage, tandis que ma naïveté me force à croire que les trolleurs et autres commentateurs de la pire espèce se décourageront vite de savoir que leurs réactions ne seront de toute façon pas publiées…