Commentaires : notifier l'auteur de l'article par email lors d'une vérification #44

Closed
opened 2026-05-13 22:10:03 +00:00 by cedricAbonnel · 0 comments
Owner

Problème

Quand un visiteur soumet puis vérifie son commentaire, l'auteur de l'article n'est pas prévenu. Il faut aller manuellement dans /admin/comments pour le découvrir.

Comportement souhaité

Dès qu'un commentaire est vérifié (lien de confirmation cliqué par le visiteur), un email est envoyé à l'auteur de l'article avec :

  • le nom du commentateur
  • un extrait du commentaire
  • un lien direct vers l'article + l'ancre #comments
  • un lien vers /admin/comments pour le modérer

Analyse technique

Flux actuel (public/index.php, case 'verify_comment', ligne 1947)

  1. Le visiteur clique le lien de confirmation
  2. CommentManager::verify() marque le commentaire comme vérifié
  3. Redirect vers /post/slug?verified=1#comments
  4. Rien n'est envoyé à l'auteur

Ce qui est disponible

  • L'article a un champ author (email de l'auteur)
  • user_profiles contient le display_name lié à l'email
  • mailer.php / MailQueue sont opérationnels
  • Le commentaire contient : author_name, author_email, content, article_uuid

Implémentation

Dans index.php, après la vérification réussie (ligne ~1968, juste avant le header('Location: ...'))

// Récupérer l'auteur de l'article
$vcArticleData = $articles->getByUuid($result);
$vcAuthorEmail = $vcArticleData['author'] ?? null;

if ($vcAuthorEmail) {
    $vcCommentData = $cm->getByToken($vcToken); // méthode à ajouter ou données déjà disponibles
    $vcArticleUrl  = rtrim(APP_URL, '/') . '/post/' . rawurlencode($vcSlug) . '#comments';
    $vcAdminUrl    = rtrim(APP_URL, '/') . '/admin/comments';

    $vcSubject = '[' . siteTitle() . '] Nouveau commentaire sur « ' . ($vcArticleData['title'] ?? '') . ' »';
    $vcBody    = '<p>Bonjour,</p>'
        . '<p><strong>' . htmlspecialchars($vcCommentData['author_name']) . '</strong> '
        . 'a laissé un commentaire sur <em>' . htmlspecialchars($vcArticleData['title']) . '</em> :</p>'
        . '<blockquote>' . htmlspecialchars(mb_strimwidth($vcCommentData['content'], 0, 300, '…')) . '</blockquote>'
        . '<p><a href="' . htmlspecialchars($vcArticleUrl) . '">Voir le commentaire</a> · '
        . '<a href="' . htmlspecialchars($vcAdminUrl) . '">Modérer</a></p>';

    send_mail($vcAuthorEmail, $vcSubject, $vcBody); // via mailer.php ou MailQueue
}

Méthode à ajouter dans CommentManager

Si les données du commentaire ne sont pas encore disponibles après verify(), ajouter :

public function getByToken(string $token): ?array
{
    $stmt = $this->pdo->prepare(
        'SELECT author_name, author_email, content, article_uuid FROM comments WHERE verification_token = :t'
    );
    $stmt->execute([':t' => $token]);
    return $stmt->fetch(PDO::FETCH_ASSOC) ?: null;
}

Cas limites

  • Si l'article n'a pas d'auteur renseigné : ne pas envoyer (pas de crash)
  • Si l'auteur est le même que le commentateur (test sur soi-même) : ne pas envoyer
  • Anti-abus MailQueue déjà géré (5 min entre envois au même destinataire)

Fichiers concernés

  • public/index.phpcase 'verify_comment' : ajout de l'envoi email (~20 lignes)
  • src/CommentManager.php — ajout de getByToken() si nécessaire (~10 lignes)

Migré depuis varlog#59

## Problème Quand un visiteur soumet puis vérifie son commentaire, l'auteur de l'article n'est pas prévenu. Il faut aller manuellement dans `/admin/comments` pour le découvrir. ## Comportement souhaité Dès qu'un commentaire est vérifié (lien de confirmation cliqué par le visiteur), un email est envoyé à l'auteur de l'article avec : - le nom du commentateur - un extrait du commentaire - un lien direct vers l'article + l'ancre `#comments` - un lien vers `/admin/comments` pour le modérer --- ## Analyse technique ### Flux actuel (`public/index.php`, `case 'verify_comment'`, ligne 1947) 1. Le visiteur clique le lien de confirmation 2. `CommentManager::verify()` marque le commentaire comme vérifié 3. Redirect vers `/post/slug?verified=1#comments` 4. **Rien n'est envoyé à l'auteur** ### Ce qui est disponible - L'article a un champ `author` (email de l'auteur) - `user_profiles` contient le `display_name` lié à l'email - `mailer.php` / `MailQueue` sont opérationnels - Le commentaire contient : `author_name`, `author_email`, `content`, `article_uuid` ### Implémentation Dans `index.php`, après la vérification réussie (ligne ~1968, juste avant le `header('Location: ...')`) ```php // Récupérer l'auteur de l'article $vcArticleData = $articles->getByUuid($result); $vcAuthorEmail = $vcArticleData['author'] ?? null; if ($vcAuthorEmail) { $vcCommentData = $cm->getByToken($vcToken); // méthode à ajouter ou données déjà disponibles $vcArticleUrl = rtrim(APP_URL, '/') . '/post/' . rawurlencode($vcSlug) . '#comments'; $vcAdminUrl = rtrim(APP_URL, '/') . '/admin/comments'; $vcSubject = '[' . siteTitle() . '] Nouveau commentaire sur « ' . ($vcArticleData['title'] ?? '') . ' »'; $vcBody = '<p>Bonjour,</p>' . '<p><strong>' . htmlspecialchars($vcCommentData['author_name']) . '</strong> ' . 'a laissé un commentaire sur <em>' . htmlspecialchars($vcArticleData['title']) . '</em> :</p>' . '<blockquote>' . htmlspecialchars(mb_strimwidth($vcCommentData['content'], 0, 300, '…')) . '</blockquote>' . '<p><a href="' . htmlspecialchars($vcArticleUrl) . '">Voir le commentaire</a> · ' . '<a href="' . htmlspecialchars($vcAdminUrl) . '">Modérer</a></p>'; send_mail($vcAuthorEmail, $vcSubject, $vcBody); // via mailer.php ou MailQueue } ``` ### Méthode à ajouter dans `CommentManager` Si les données du commentaire ne sont pas encore disponibles après `verify()`, ajouter : ```php public function getByToken(string $token): ?array { $stmt = $this->pdo->prepare( 'SELECT author_name, author_email, content, article_uuid FROM comments WHERE verification_token = :t' ); $stmt->execute([':t' => $token]); return $stmt->fetch(PDO::FETCH_ASSOC) ?: null; } ``` ### Cas limites - Si l'article n'a pas d'auteur renseigné : ne pas envoyer (pas de crash) - Si l'auteur est le même que le commentateur (test sur soi-même) : ne pas envoyer - Anti-abus MailQueue déjà géré (5 min entre envois au même destinataire) --- ## Fichiers concernés - `public/index.php` — `case 'verify_comment'` : ajout de l'envoi email (~20 lignes) - `src/CommentManager.php` — ajout de `getByToken()` si nécessaire (~10 lignes) --- *Migré depuis [varlog#59](https://git.abonnel.fr/cedricAbonnel/varlog/issues/59)*
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: cedricAbonnel/folio#44