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.

We've moved the forum!

Please use forum.silverstripe.org for any new questions (announcement).
The forum archive will stick around, but will be read only.

You can also use our Slack channel or StackOverflow to ask for help.
Check out our community overview for more options to contribute.

All other Modules /

Discuss all other Modules here.

Moderators: martimiz, Sean, Ed, biapar, Willr, Ingo, swaiba

Comment Moderation - Notifications?


Go to End


17 Posts   7464 Views

Avatar
Garrett

Community Member, 245 Posts

20 January 2010 at 3:56am

Hi,

I've done about a dozen SilverStripe implementations and all of my clients are complaining about the lack of email notifications for comment moderation. I agree with them that the lack of this feature is sort of unacceptable, because if you don't enable moderation, your blog will get spammed to Death, and you don't want to have to go into the admin panel every single day just to Check if there are any new comments. I want to be Notified when I have a comment to moderate.

Am I missing something, or is this feature simply just not available? Could anyone offer me any advice on how I could Add it?

Thanks,
Garrett

Avatar
Willr

Forum Moderator, 5523 Posts

20 January 2010 at 6:24pm

You could decorate the PageComment object, in the decorator override the onAfterWrite() function to do something like

$email = new Email();
$email->setTo('email@email.com');
$email->setSubject('New Comment');
// .. all the other options
$email->send();

So after writing the comment it will trigger the onAfterWrite() when sends that email. You could also do some more fancy things like check page comments are moderatable

Avatar
Garrett

Community Member, 245 Posts

21 January 2010 at 3:00am

Thanks for your reply, @willr, though I'm afraid I don't know enough about the core code to fill in the missing details myself here. Where/what is the decorator override, and where is the onAfterWrite() function?

//Garrett

Avatar
Willr

Forum Moderator, 5523 Posts

21 January 2010 at 9:01am

I haven't tested it but it would be something like this - http://pastie.org/787023. Once you get that code working you could easily extend the Email functionality - eg set a custom template, add the comment to the email or a link to it at least.

You would then add it to page comments like DataObject::add_extension('PageComment', 'CustomPageComment');

Docs

http://doc.silverstripe.org/doku.php?id=dataobjectdecorator

Avatar
Garrett

Community Member, 245 Posts

21 January 2010 at 9:20am

GREAT! Thanks for the fleshing-out, @willr! I will definitely try this out.

//Garrett

Avatar
MarijnKampf

Community Member, 176 Posts

22 January 2010 at 10:58pm

I've implemented the code and tried to extend it with code form http://doc.silverstripe.org/doku.php?id=email. I would like to include a link to the page the comment has been made on in the email.

How can I include the page url information in the email?

mysite/code/PageCommentEmailNotification.php

<?php

class PageCommentEmailNotification extends DataObjectDecorator {
  function onAfterWrite() {
			$email = new Email();
			$email->setTemplate('NewComment');
			$email->setTo('email@ddre.ss');
			$email->setSubject('New Comment ' . str_replace(array("http://", "https://"), array("", ""), Director::absoluteBaseURL()));
			$email->populateTemplate(Member::currentUser());
			$email->populateTemplate(array(
				'Comment' => $this->owner->Comment,
			));
			$email->send();
  }
}

?>

themes/mytheme/templates/email/NewComment.ss

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
	<head>
		<style>
			p{
				font-size: 1.2em;
				color: #444;
			}
			p.comments{
				font-size: 1.4em;
				color: #222;
				padding: 20px;
			}
		</style>
	</head>
	<body>
// How can the page url and title be inserted here?
		<p>At $Created, $Name posted a new comment on the page <a href="$Page.URL">$Page.Title</a>.</p>

		<p>Their comment:<br/>
		$Comment</p>
	
		<p>You can <a href="{$BaseHref}admin/comments/">administrate the comment</a>.</p>
	
	</body>
</html>

Avatar
Juanitou

Community Member, 323 Posts

12 February 2010 at 12:48am

Hi!

Can’t you use 'Page' => $this->owner->Parent()->Link() in the PopulateTemplate() array?

Hope it helps,
Juan

Avatar
MarijnKampf

Community Member, 176 Posts

23 February 2010 at 5:17am

Thanks Juanitou, don't know why I didn't think of using $this->owner->Parent()->... myself. I ended up using:

			$email->populateTemplate(array(
				'URL' => Director::absoluteBaseURL() . $this->owner->Parent()->URLSegment,
				'PageTitle' => $this->owner->Parent()->Title,
				'Comment' => $this->owner->Comment,
			));

Go to Top