Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

Customising the CMS /

Combine Akismet spam checking with comment email notifications


Reply


819 Views

Avatar
sophiedennis

Community Member, 2 Posts

21 November 2012 at 7:05am

Edited: 21/11/2012 7:06am

I thought I'd post this in case it helps anyone else, as it took us a bit of head-scratching to get right.

We're using Marijn Kampf's code* for emailing the site admin whenever a new comment is posted. However, the site was - inevitably - getting a lot of spam comments. Akismet proved great for marking these comments as spam in the CMS, but the site admin was still getting an email for each one.

The site is running SS 2.4.

So we added an extra line to Marijn's code to check whether the comment had been marked as spam before creating the email.

File: mysite/code/PageCommentEmailNotification.php

class PageCommentEmailNotification extends DataObjectDecorator {
function onAfterWrite() {
   parent::onAfterWrite();
   if ($this->owner->SpamClass() != 'spam') {
      $email = new Email();
      $email->setTemplate('NewComment');
      $email->setTo(Email::getAdminEmail());
      $email->addCustomHeader('Reply-To', Member::currentUser()->Email);
      $email->setSubject('New Comment on "' . $this->owner->Parent()->Title . '"');
      $email->populateTemplate(array(
            'URL' => Director::absoluteBaseURL() . $this->owner->Parent()->URLSegment,
            'PageTitle' => $this->owner->Parent()->Title,
            'Comment' => $this->owner->Comment,
            'Name' => $this->owner->Name,
            'CommenterURL' => $this->owner->CommenterURL,
      ));
      $email->send();
      }
   }
}

We've also changed Marijn's email template a bit, partly because the site doesn't require people to be logged in or members to comment. We now pass the commenters given name and website URL to the template as well. Here's our email template:

File: themes/yourtheme/templates/email/NewComment.ss

<!DOCTYPE html>
<html>
   <head>
<style>
      body {
         font-size: .8em;
         max-width: 45em;
      }
   </style>
   </head>
   <body>
      <p>You have had a new comment on the blog post '$PageTitle'<br>
<a href="{$URL}">$URL</a>
</p>
<hr>
      <p><strong>$Name</strong> (<a href="$CommenterURL.ATT">$CommenterURL.ATT</a>) wrote:</p>

      <p><% if bbCodeEnabled %>
       $ParsedBBCode   
<% else %>
$Comment.XML   
<% end_if %>
</p>
<hr>   
      <p>Click here to <a href="{$BaseHref}admin/comments/">approve or reject this comment</a>.</p>
   
   </body>
</html>

* You'll need to set an admin email address and enable the extension as per Marijn's original blog post here [url]http://www.exadium.com/tools/silverstripe/silverstripe-page-comment-email-notification/[/url]

The version I actually used is this one on github [url]https://github.com/gordonbanderson/Silverstripe-Comment-Email-Notification-Module[/url]