1 lwiedemann Jul 24, 2008 17:09
3 lwiedemann Sep 23, 2008 19:14
Great thank you for your reply. Any idea where I can edit the comment notifications?
Thanks again!!
Luis
4 lwiedemann Oct 06, 2008 19:06
Anyone have any ideas where I can edit the same for comment notifications?
TIA!
Luis
5 lwiedemann Nov 08, 2008 16:17
bump ^^
6 yabba Nov 08, 2008 16:23
inc/comments/model/_comment.class.php
/**
* Send email notifications to subscribed users:
*
* @todo fp> SEPARATE MODERATION notifications from SUBSCRIPTION notifications
* @todo shall we notify suscribers of blog were this is in extra-cat?
* @todo cache message by locale like {@link Item::send_email_notifications()}
* @todo dh> Indicator in url to see where the user came from (&from=subnote ["subscription notification"]) - Problem: too long urls.
* @todo dh> "Beautify" like {@link Item::send_email_notifications()} ? fp > sure
* @todo Should include "visibility status" in the mail to the Item's Author
*/
function send_email_notifications()
{
global $DB, $admin_url, $debug, $Debuglog;
$edited_Item = & $this->get_Item();
$edited_Blog = & $edited_Item->get_Blog();
$notify_array = array();
if( $edited_Blog->get_setting( 'allow_subscriptions' ) )
{ // Get list of users who want to be notfied:
// TODO: also use extra cats/blogs??
// So far you get notifications for everything. We'll need a setting to decide if you want to received unmoderated (aka unpublished) comments or not.
// Note: users receive comments on their own posts. This is done on purpose. Otherwise they think it's broken when they test the app.
$sql = 'SELECT DISTINCT user_email, user_locale
FROM T_subscriptions INNER JOIN T_users ON sub_user_ID = user_ID
WHERE sub_coll_ID = '.$this->Item->blog_ID.'
AND sub_comments <> 0
AND LENGTH(TRIM(user_email)) > 0';
$notify_list = $DB->get_results( $sql );
// Preprocess list:
foreach( $notify_list as $notification )
{
$notify_array[$notification->user_email] = $notification->user_locale;
}
}
// Check if we need to include the author:
$item_author_User = & $edited_Item->get_creator_User();
if( $item_author_User->notify
&& ( ! empty( $item_author_User->email ) ) )
{ // Author wants to be notified...
if( ! ($this->get_author_User() // comment is from registered user
&& $item_author_User->login == $this->author_User->login) ) // comment is from same user as post
{ // Author is not commenting on his own post...
$notify_array[$item_author_User->email] = $item_author_User->locale;
}
}
if( ! count($notify_array) )
{ // No-one to notify:
return false;
}
/*
* We have a list of email addresses to notify:
*/
// TODO: dh> this reveals the comments author's email address to all subscribers!!
// $notify_from should get used by default, unless the user has opted in to be the sender!
// fp>If the subscriber has permission to moderate the comments, he SHOULD receive the email address.
if( $this->get_author_User() )
{ // Comment from a registered user:
$mail_from = '"'.$this->author_User->get('preferredname').'" <'.$this->author_User->get('email').'>';
}
elseif( ! empty( $this->author_email ) )
{ // non-member, but with email address:
$mail_from = "\"$this->author\" <$this->author_email>";
}
else
{ // Fallback (we have no email address): fp>TODO: or the subscriber is not allowed to view it.
global $notify_from;
$mail_from = $notify_from;
}
// Send emails:
foreach( $notify_array as $notify_email => $notify_locale )
{
locale_temp_switch($notify_locale);
switch( $this->type )
{
case 'trackback':
/* TRANS: Subject of the mail to send on new trackbacks. First %s is the blog's shortname, the second %s is the item's title. */
$subject = T_('[%s] New trackback on "%s"');
break;
default:
/* TRANS: Subject of the mail to send on new comments. First %s is the blog's shortname, the second %s is the item's title. */
$subject = T_('[%s] New comment on "%s"');
}
$subject = sprintf( $subject, $edited_Blog->get('shortname'), $edited_Item->get('title') );
$notify_message = T_('Blog').': '.$edited_Blog->get('shortname')."\n"
// Mail bloat: .' ( '.str_replace('&', '&', $edited_Blog->gen_blogurl())." )\n"
.T_('Post').': '.$edited_Item->get('title')."\n";
// Mail bloat: .' ( '.str_replace('&', '&', $edited_Item->get_permanent_url())." )\n";
// TODO: fp> We MAY want to force short URL and avoid it to wrap on a new line in the mail which may prevent people from clicking
switch( $this->type )
{
case 'trackback':
$user_domain = gethostbyaddr($this->author_IP);
$notify_message .= T_('Website').": $this->author (IP: $this->author_IP, $user_domain)\n";
$notify_message .= T_('Url').": $this->author_url\n";
break;
default:
if( $this->get_author_User() )
{ // Comment from a registered user:
$notify_message .= T_('Author').': '.$this->author_User->get('preferredname').' ('.$this->author_User->get('login').")\n";
}
else
{ // Comment from visitor:
$user_domain = gethostbyaddr($this->author_IP);
$notify_message .= T_('Author').": $this->author (IP: $this->author_IP, $user_domain)\n";
$notify_message .= T_('Email').": $this->author_email\n";
$notify_message .= T_('Url').": $this->author_url\n";
}
}
$notify_message .=
T_('Comment').': '.str_replace('&', '&', $this->get_permanent_url())."\n"
// TODO: fp> We MAY want to force a short URL and avoid it to wrap on a new line in the mail which may prevent people from clicking
.$this->get('content')."\n\n"
.T_('Edit/Delete').': '.$admin_url.'?ctrl=items&blog='.$edited_Blog->ID.'&p='.$edited_Item->ID.'&c=1#c'.$this->ID."\n\n"
.T_('Edit your subscriptions/notifications').': '.str_replace('&', '&', url_add_param( $edited_Blog->gen_blogurl(), 'disp=subs' ) )."\n";
if( $debug )
{
$mail_dump = "Sending notification to $notify_email:<pre>Subject: $subject\n$notify_message</pre>";
if( $debug >= 2 )
{ // output mail content - NOTE: this will kill sending of headers.
echo "<p>$mail_dump</p>";
}
$Debuglog->add( $mail_dump, 'notification' );
}
send_mail( $notify_email, $subject, $notify_message, $mail_from );
locale_restore_previous();
}
}
¥
Hi Iweidemann,
Ive just done some work on mine:
.../inc/items/model/_item.class.php (starts at line 3106)
Enjoy :)