Hi All!
I'm trying to build a plugin that will notify all users that comment on any post, I attempt to do this by creating a new metadata called commenters, commenters will be an array of GUIDs of users who hv added a comment and then notify them all using the notify_user() function.
The concept worked but however whenever a new user joins the comment stream, older users start getting DOUBLE notifications i.e there GUIDs are inserted twice, below is code for my modified actions/comments/add.php
<?php
/**
* Elgg add comment action
*
* @package Elgg
* @author Curverider <curverider.co.uk>
* @link http://elgg.org/
*/
// Make sure we're logged in; forward to the front page if not
gatekeeper();
// Get input
$entity_guid = (int) get_input('entity_guid');
$comment_text = get_input('generic_comment');
// make sure comment is not empty
if (empty($comment_text)) {
register_error(elgg_echo("generic_comment:blank"));
forward($_SERVER['HTTP_REFERER']);
}
// Let's see if we can get an entity with the specified GUID
$entity = get_entity($entity_guid);
if (!$entity) {
register_error(elgg_echo("generic_comment:notfound"));
forward($_SERVER['HTTP_REFERER']);
}
$user = get_loggedin_user();
$annotation = create_annotation($entity->guid,
'generic_comment',
$comment_text,
"",
$user->guid,
$entity->access_id);
// tell user annotation posted
if (!$annotation) {
register_error(elgg_echo("generic_comment:failure"));
forward($_SERVER['HTTP_REFERER']);
}
//Notify everybody!
//create metadata to do that!
if (!$entity->commenters || !is_array($entity->commenters)){
if ($entity->owner_guid != $user->guid) {
$commenters = array();
//add owner_guid
$commenters[] = $entity->owner_guid;
//add poster's guid
$commenters[] = $user->guid;
$entity->commenters = $commenters;
}
}else{
//check if guid is inside, else add it!
if (!in_array($user->guid,$entity->commenters)){
$commenters = array();
$commenters = $entity->commenters;
$commenters[] = $user->guid;
//clean up first
//remove_metadata($entity->guid, commenters);
$entity->commenters = $commenters;
}
}
notify_user($entity->commenters,
$user->guid,
elgg_echo('generic_comment:email:subject'),
sprintf(
elgg_echo('generic_comment:email:body'),
$entity->title,
$user->name,
$comment_text,
$entity->getURL(),
$user->name,
$user->getURL()
)
);
system_message(elgg_echo("generic_comment:posted"));
//add to river
add_to_river('annotation/annotate','comment',$user->guid,$entity->guid, "", 0, $annotation);
// Forward to the entity page
forward($entity->getURL());
I'm planning to release it as a full plugin and would appreciate any help.
info@elgg.org
Security issues should be reported to security@elgg.org!
©2014 the Elgg Foundation
Elgg is a registered trademark of Thematic Networks.
Cover image by Raül Utrera is used under Creative Commons license.
Icons by Flaticon and FontAwesome.
Good for you Mr Stuart.. you seem to be taking the correct steps to become a fully fledged PHP, Elgg API Developer one of these days ;-P
Thanks Peter. I work as a System Adimn so coding is new to me. I'm reading as much as I can on PHP. I know a little ASP.NET and I must say I like PHP more. I'm also really happy with ELGG and their community.
delete.php for notification ??????????
delete.php for notification ??????????
delete.php for notification ??????????
- Previous
- 1
- 2
- 3
- 4
- Next
You must log in to post replies.