2013-02-26 01:09:40 +00:00
< ? php /** @file */
2011-12-08 09:28:27 +00:00
2011-12-24 07:07:05 +00:00
function notification ( $params ) {
2011-12-08 09:28:27 +00:00
2011-12-27 22:26:44 +00:00
logger ( 'notification: entry' , LOGGER_DEBUG );
2011-12-26 07:00:19 +00:00
2013-12-05 07:54:46 +00:00
// throw a small amount of entropy into the system to breakup duplicates arriving at the same precise instant.
usleep ( mt_rand ( 0 , 10000 ));
2011-12-08 09:28:27 +00:00
$a = get_app ();
2012-03-26 08:43:26 +00:00
2013-01-06 02:08:06 +00:00
if ( $params [ 'from_xchan' ]) {
$x = q ( " select * from xchan where xchan_hash = '%s' limit 1 " ,
dbesc ( $params [ 'from_xchan' ])
);
}
if ( $params [ 'to_xchan' ]) {
$y = q ( " select channel.*, account.* from channel left join account on channel_account_id = account_id
where channel_hash = '%s' limit 1 " ,
dbesc ( $params [ 'to_xchan' ])
);
}
if ( $x & $y ) {
$sender = $x [ 0 ];
$recip = $y [ 0 ];
}
2013-01-06 07:24:15 +00:00
else {
logger ( 'notification: no sender or recipient.' );
logger ( 'sender: ' . $params [ 'from_xchan' ]);
logger ( 'recip: ' . $params [ 'to_xchan' ]);
2013-01-06 02:08:06 +00:00
return ;
2013-01-06 07:24:15 +00:00
}
2013-01-06 02:08:06 +00:00
// from here on everything is in the recipients language
2012-03-26 08:43:26 +00:00
2013-01-06 02:08:06 +00:00
push_lang ( $recip [ 'account_language' ]); // should probably have a channel language
2012-03-26 08:43:26 +00:00
2013-07-31 09:32:41 +00:00
$banner = t ( 'Red Matrix Notification' );
2013-11-15 12:07:13 +00:00
$product = t ( 'redmatrix' ); // RED_PLATFORM;
2013-01-06 04:57:41 +00:00
$siteurl = $a -> get_baseurl ( true );
$thanks = t ( 'Thank You,' );
$sitename = get_config ( 'system' , 'sitename' );
2011-12-08 09:28:27 +00:00
$site_admin = sprintf ( t ( '%s Administrator' ), $sitename );
2011-12-27 22:26:44 +00:00
$sender_name = $product ;
2012-02-26 00:56:14 +00:00
$hostname = $a -> get_hostname ();
2012-06-03 01:23:54 +00:00
if ( strpos ( $hostname , ':' ))
$hostname = substr ( $hostname , 0 , strpos ( $hostname , ':' ));
2013-01-06 02:08:06 +00:00
// Do not translate 'noreply' as it must be a legal 7-bit email address
$sender_email = 'noreply' . '@' . $hostname ;
2012-02-26 00:56:14 +00:00
$additional_mail_header = " " ;
2011-12-08 09:28:27 +00:00
2011-12-27 22:26:44 +00:00
if ( array_key_exists ( 'item' , $params )) {
2013-09-25 02:43:28 +00:00
require_once ( 'include/conversation.php' );
2013-08-06 00:32:33 +00:00
// if it's a normal item...
if ( array_key_exists ( 'verb' , $params [ 'item' ])) {
// localize_item() alters the original item so make a copy first
$i = $params [ 'item' ];
2013-08-06 10:29:57 +00:00
logger ( 'calling localize' );
2013-08-06 00:32:33 +00:00
localize_item ( $i );
$title = $i [ 'title' ];
$body = $i [ 'body' ];
2013-11-05 00:53:42 +00:00
$private = $i [ 'item_private' ];
2013-08-06 00:32:33 +00:00
}
else {
$title = $params [ 'item' ][ 'title' ];
$body = $params [ 'item' ][ 'body' ];
}
2011-12-26 23:47:40 +00:00
}
else {
$title = $body = '' ;
}
2011-12-24 07:07:05 +00:00
2013-08-06 10:29:57 +00:00
2012-03-01 03:23:01 +00:00
// e.g. "your post", "David's photo", etc.
$possess_desc = t ( '%s <!item_type!>' );
2012-03-01 02:19:08 +00:00
2011-12-24 07:07:05 +00:00
if ( $params [ 'type' ] == NOTIFY_MAIL ) {
2013-01-06 07:24:15 +00:00
logger ( 'notification: mail' );
2012-11-13 22:37:02 +00:00
$subject = sprintf ( t ( '[Red:Notify] New mail received at %s' ), $sitename );
2011-12-24 07:07:05 +00:00
2013-11-22 04:40:31 +00:00
$preamble = sprintf ( t ( '%1$s, %2$s sent you a new private message at %3$s.' ), $recip [ 'channel_name' ], $sender [ 'xchan_name' ], $sitename );
2013-04-15 10:00:08 +00:00
$epreamble = sprintf ( t ( '%1$s sent you %2$s.' ), '[zrl=' . $sender [ 'xchan_url' ] . ']' . $sender [ 'xchan_name' ] . '[/zrl]' , '[zrl=$itemlink]' . t ( 'a private message' ) . '[/zrl]' );
2011-12-26 07:00:19 +00:00
$sitelink = t ( 'Please visit %s to view and/or reply to your private messages.' );
2013-12-22 07:47:44 +00:00
$tsitelink = sprintf ( $sitelink , $siteurl . '/mail/' . $params [ 'item' ][ 'id' ] );
$hsitelink = sprintf ( $sitelink , '<a href="' . $siteurl . '/mail/' . $params [ 'item' ][ 'id' ] . '">' . $sitename . '</a>' );
2012-02-22 02:10:15 +00:00
$itemlink = $siteurl . '/message/' . $params [ 'item' ][ 'id' ];
2011-12-26 22:16:25 +00:00
}
if ( $params [ 'type' ] == NOTIFY_COMMENT ) {
2012-02-28 01:18:19 +00:00
// logger("notification: params = " . print_r($params, true), LOGGER_DEBUG);
2011-12-26 22:16:25 +00:00
2013-09-25 02:43:28 +00:00
// ignore like/unlike activity on posts - they probably require a sepearate notification preference
if ( array_key_exists ( 'item' , $params ) && ( ! visible_activity ( $params [ 'item' ])))
return ;
2012-02-26 00:56:14 +00:00
$parent_id = $params [ 'parent' ];
2012-03-01 02:19:08 +00:00
2013-02-07 05:21:50 +00:00
// Check to see if there was already a notify for this post.
2012-07-04 04:40:13 +00:00
// If so don't create a second notification
$p = null ;
2013-02-07 05:21:50 +00:00
$p = q ( " select id from notify where link = '%s' and uid = %d limit 1 " ,
2012-07-04 04:40:13 +00:00
dbesc ( $params [ 'link' ]),
2013-02-07 05:21:50 +00:00
intval ( $recip [ 'channel_id' ])
2012-07-04 04:40:13 +00:00
);
2013-01-06 07:24:15 +00:00
if ( $p ) {
2013-07-31 09:32:41 +00:00
logger ( 'notification: comment already notified' );
2012-07-04 04:40:13 +00:00
pop_lang ();
return ;
}
2012-03-01 02:19:08 +00:00
// if it's a post figure out who's post it is.
$p = null ;
if ( $params [ 'otype' ] === 'item' && $parent_id ) {
$p = q ( " select * from item where id = %d and uid = %d limit 1 " ,
intval ( $parent_id ),
2013-02-07 05:21:50 +00:00
intval ( $recip [ 'channel_id' ])
2012-03-01 02:19:08 +00:00
);
}
2013-02-07 05:21:50 +00:00
xchan_query ( $p );
2012-06-13 15:55:21 +00:00
$item_post_type = item_post_type ( $p [ 0 ]);
2013-05-06 03:07:19 +00:00
$private = $p [ 0 ][ 'item_private' ];
2012-06-13 15:55:21 +00:00
//$possess_desc = str_replace('<!item_type!>',$possess_desc);
2012-03-01 03:23:01 +00:00
// "a post"
2013-11-24 22:39:29 +00:00
$dest_str = sprintf ( t ( '%1$s, %2$s commented on [zrl=%3$s]a %4$s[/zrl]' ),
$recip [ 'channel_name' ],
'[zrl=' . $sender [ 'xchan_url' ] . ']' . $sender [ 'xchan_name' ] . '[/zrl]' ,
$itemlink ,
$item_post_type );
2012-03-01 03:23:01 +00:00
// "George Bull's post"
2012-03-01 02:19:08 +00:00
if ( $p )
2013-11-24 22:39:29 +00:00
$dest_str = sprintf ( t ( '%1$s, %2$s commented on [zrl=%3$s]%4$s\'s %5$s[/zrl]' ),
$recip [ 'channel_name' ],
'[zrl=' . $sender [ 'xchan_url' ] . ']' . $sender [ 'xchan_name' ] . '[/zrl]' ,
$itemlink ,
$p [ 0 ][ 'author' ][ 'xchan_name' ],
$item_post_type );
2012-02-26 00:56:14 +00:00
2012-03-01 03:23:01 +00:00
// "your post"
2013-02-07 05:21:50 +00:00
if ( $p [ 0 ][ 'owner' ][ 'xchan_name' ] == $p [ 0 ][ 'author' ][ 'xchan_name' ] && ( $p [ 0 ][ 'item_flags' ] & ITEM_WALL ))
2013-11-24 22:39:29 +00:00
$dest_str = sprintf ( t ( '%1$s, %2$s commented on [zrl=%3$s]your %4$s[/zrl]' ),
$recip [ 'channel_name' ],
'[zrl=' . $sender [ 'xchan_url' ] . ']' . $sender [ 'xchan_name' ] . '[/zrl]' ,
$itemlink ,
$item_post_type );
2012-03-01 02:19:08 +00:00
2012-02-26 00:56:14 +00:00
// Some mail softwares relies on subject field for threading.
// So, we cannot have different subjects for notifications of the same thread.
// Before this we have the name of the replier on the subject rendering
// differents subjects for messages on the same thread.
2012-02-28 01:18:19 +00:00
2013-02-07 05:21:50 +00:00
$subject = sprintf ( t ( '[Red:Notify] Comment to conversation #%1$d by %2$s' ), $parent_id , $sender [ 'xchan_name' ]);
2013-11-24 22:39:29 +00:00
$preamble = sprintf ( t ( '%1$s, %2$s commented on an item/conversation you have been following.' ), $recip [ 'channel_name' ], $sender [ 'xchan_name' ]);
2012-06-13 15:55:21 +00:00
$epreamble = $dest_str ;
2012-02-18 11:18:20 +00:00
2011-12-26 22:16:25 +00:00
$sitelink = t ( 'Please visit %s to view and/or reply to the conversation.' );
$tsitelink = sprintf ( $sitelink , $siteurl );
$hsitelink = sprintf ( $sitelink , '<a href="' . $siteurl . '">' . $sitename . '</a>' );
$itemlink = $params [ 'link' ];
}
if ( $params [ 'type' ] == NOTIFY_WALL ) {
2013-02-07 05:21:50 +00:00
$subject = sprintf ( t ( '[Red:Notify] %s posted to your profile wall' ) , $sender [ 'xchan_name' ]);
2012-02-28 01:18:19 +00:00
2013-11-24 22:39:29 +00:00
$preamble = sprintf ( t ( '%1$s, %2$s posted to your profile wall at %3$s' ) , $recip [ 'channel_name' ], $sender [ 'xchan_name' ], $sitename );
2012-02-28 01:18:19 +00:00
2013-11-24 22:39:29 +00:00
$epreamble = sprintf ( t ( '%1$s, %2$s posted to [zrl=%3$s]your wall[/zrl]' ) ,
$recip [ 'channel_name' ],
'[zrl=' . $sender [ 'xchan_url' ] . ']' . $sender [ 'xchan_name' ] . '[/zrl]' ,
$params [ 'link' ]);
2012-02-18 11:18:20 +00:00
2011-12-26 22:16:25 +00:00
$sitelink = t ( 'Please visit %s to view and/or reply to the conversation.' );
$tsitelink = sprintf ( $sitelink , $siteurl );
$hsitelink = sprintf ( $sitelink , '<a href="' . $siteurl . '">' . $sitename . '</a>' );
$itemlink = $params [ 'link' ];
2011-12-08 09:28:27 +00:00
}
2012-02-09 22:06:17 +00:00
if ( $params [ 'type' ] == NOTIFY_TAGSELF ) {
2013-07-31 09:32:41 +00:00
$p = null ;
$p = q ( " select id from notify where link = '%s' and uid = %d limit 1 " ,
dbesc ( $params [ 'link' ]),
intval ( $recip [ 'channel_id' ])
);
if ( $p ) {
logger ( 'enotify: tag: already notified about this post' );
pop_lang ();
return ;
}
2013-02-07 05:21:50 +00:00
$subject = sprintf ( t ( '[Red:Notify] %s tagged you' ) , $sender [ 'xchan_name' ]);
2013-11-22 04:40:31 +00:00
$preamble = sprintf ( t ( '%1$s, %2$s tagged you at %3$s' ) , $recip [ 'channel_name' ], $sender [ 'xchan_name' ], $sitename );
2013-11-24 22:39:29 +00:00
$epreamble = sprintf ( t ( '%1$s, %2$s [zrl=%3$s]tagged you[/zrl].' ) ,
$recip [ 'channel_name' ],
'[zrl=' . $sender [ 'xchan_url' ] . ']' . $sender [ 'xchan_name' ] . '[/zrl]' ,
$params [ 'link' ]);
2012-02-09 22:06:17 +00:00
$sitelink = t ( 'Please visit %s to view and/or reply to the conversation.' );
2012-07-20 04:09:40 +00:00
$tsitelink = sprintf ( $sitelink , $siteurl );
$hsitelink = sprintf ( $sitelink , '<a href="' . $siteurl . '">' . $sitename . '</a>' );
$itemlink = $params [ 'link' ];
}
if ( $params [ 'type' ] == NOTIFY_POKE ) {
2013-02-07 05:21:50 +00:00
$subject = sprintf ( t ( '[Red:Notify] %1$s poked you' ) , $sender [ 'xchan_name' ]);
2013-11-22 04:40:31 +00:00
$preamble = sprintf ( t ( '%1$s, %2$s poked you at %3$s' ) , $recip [ 'channel_name' ], $sender [ 'xchan_name' ], $sitename );
2013-11-24 22:39:29 +00:00
$epreamble = sprintf ( t ( '%1$s, %2$s [zrl=%2$s]poked you[/zrl].' ) ,
$recip [ 'channel_name' ],
'[zrl=' . $sender [ 'xchan_url' ] . ']' . $sender [ 'xchan_name' ] . '[/zrl]' ,
$params [ 'link' ]);
2012-07-20 04:09:40 +00:00
$subject = str_replace ( 'poked' , t ( $params [ 'activity' ]), $subject );
$preamble = str_replace ( 'poked' , t ( $params [ 'activity' ]), $preamble );
$epreamble = str_replace ( 'poked' , t ( $params [ 'activity' ]), $epreamble );
$sitelink = t ( 'Please visit %s to view and/or reply to the conversation.' );
2012-02-09 22:06:17 +00:00
$tsitelink = sprintf ( $sitelink , $siteurl );
$hsitelink = sprintf ( $sitelink , '<a href="' . $siteurl . '">' . $sitename . '</a>' );
$itemlink = $params [ 'link' ];
}
if ( $params [ 'type' ] == NOTIFY_TAGSHARE ) {
2013-02-07 05:21:50 +00:00
$subject = sprintf ( t ( '[Red:Notify] %s tagged your post' ) , $sender [ 'xchan_name' ]);
2013-11-24 22:39:29 +00:00
$preamble = sprintf ( t ( '%1$s, %2$s tagged your post at %3$s' ) , $recip [ 'channel_name' ], $sender [ 'xchan_name' ], $sitename );
$epreamble = sprintf ( t ( '%1$s, %2$s tagged [zrl=%3$s]your post[/zrl]' ) ,
$recip [ 'channel_name' ],
'[zrl=' . $sender [ 'xchan_url' ] . ']' . $sender [ 'xchan_name' ] . '[/zrl]' ,
$itemlink );
2012-02-09 22:06:17 +00:00
$sitelink = t ( 'Please visit %s to view and/or reply to the conversation.' );
$tsitelink = sprintf ( $sitelink , $siteurl );
$hsitelink = sprintf ( $sitelink , '<a href="' . $siteurl . '">' . $sitename . '</a>' );
$itemlink = $params [ 'link' ];
}
2011-12-26 23:47:40 +00:00
if ( $params [ 'type' ] == NOTIFY_INTRO ) {
2012-11-13 22:37:02 +00:00
$subject = sprintf ( t ( '[Red:Notify] Introduction received' ));
2013-11-24 22:39:29 +00:00
$preamble = sprintf ( t ( '%1$s, you\'ve received an introduction from \'%2$s\' at %3$s' ), $recip [ 'channel_name' ], $sender [ 'xchan_name' ], $sitename );
$epreamble = sprintf ( t ( '%1$s, you\'ve received [zrl=%2$s]an introduction[/zrl] from %3$s.' ),
$recip [ 'channel_name' ],
$itemlink ,
'[zrl=' . $sender [ 'xchan_url' ] . ']' . $sender [ 'xchan_name' ] . '[/zrl]' );
2013-02-07 05:21:50 +00:00
$body = sprintf ( t ( 'You may visit their profile at %s' ), $sender [ 'xchan_url' ]);
2011-12-26 23:47:40 +00:00
$sitelink = t ( 'Please visit %s to approve or reject the introduction.' );
$tsitelink = sprintf ( $sitelink , $siteurl );
$hsitelink = sprintf ( $sitelink , '<a href="' . $siteurl . '">' . $sitename . '</a>' );
$itemlink = $params [ 'link' ];
}
2012-01-04 01:29:07 +00:00
if ( $params [ 'type' ] == NOTIFY_SUGGEST ) {
2012-11-13 22:37:02 +00:00
$subject = sprintf ( t ( '[Red:Notify] Friend suggestion received' ));
2013-11-24 22:39:29 +00:00
$preamble = sprintf ( t ( '%1$s, you\'ve received a friend suggestion from \'%2$s\' at %3$s' ), $recip [ 'channel_name' ], $sender [ 'xchan_name' ], $sitename );
$epreamble = sprintf ( t ( '%1$s, you\'ve received [zrl=%2$s]a friend suggestion[/zrl] for %3$s from %4$s.' ),
$recip [ 'channel_name' ],
$itemlink ,
'[zrl=' . $params [ 'item' ][ 'url' ] . ']' . $params [ 'item' ][ 'name' ] . '[/zrl]' ,
'[zrl=' . $sender [ 'xchan_url' ] . ']' . $sender [ 'xchan_name' ] . '[/zrl]' );
2012-06-13 15:55:21 +00:00
2012-01-04 01:29:07 +00:00
$body = t ( 'Name:' ) . ' ' . $params [ 'item' ][ 'name' ] . " \n " ;
$body .= t ( 'Photo:' ) . ' ' . $params [ 'item' ][ 'photo' ] . " \n " ;
$body .= sprintf ( t ( 'You may visit their profile at %s' ), $params [ 'item' ][ 'url' ]);
$sitelink = t ( 'Please visit %s to approve or reject the suggestion.' );
$tsitelink = sprintf ( $sitelink , $siteurl );
$hsitelink = sprintf ( $sitelink , '<a href="' . $siteurl . '">' . $sitename . '</a>' );
$itemlink = $params [ 'link' ];
}
2011-12-26 23:47:40 +00:00
if ( $params [ 'type' ] == NOTIFY_CONFIRM ) {
2012-03-25 11:37:09 +00:00
}
if ( $params [ 'type' ] == NOTIFY_SYSTEM ) {
2012-03-25 12:06:11 +00:00
2011-12-26 23:47:40 +00:00
}
2012-03-25 12:06:11 +00:00
$h = array (
'params' => $params ,
'subject' => $subject ,
'preamble' => $preamble ,
'epreamble' => $epreamble ,
'body' => $body ,
'sitelink' => $sitelink ,
'tsitelink' => $tsitelink ,
'hsitelink' => $hsitelink ,
'itemlink' => $itemlink
);
call_hooks ( 'enotify' , $h );
$subject = $h [ 'subject' ];
$preamble = $h [ 'preamble' ];
$epreamble = $h [ 'epreamble' ];
$body = $h [ 'body' ];
$sitelink = $h [ 'sitelink' ];
$tsitelink = $h [ 'tsitelink' ];
$hsitelink = $h [ 'hsitelink' ];
$itemlink = $h [ 'itemlink' ];
2011-12-26 23:47:40 +00:00
2012-02-18 10:57:42 +00:00
require_once ( 'include/html2bbcode.php' );
2012-02-21 03:50:05 +00:00
do {
$dups = false ;
$hash = random_string ();
$r = q ( " SELECT `id` FROM `notify` WHERE `hash` = '%s' LIMIT 1 " ,
dbesc ( $hash ));
if ( count ( $r ))
$dups = true ;
} while ( $dups == true );
2012-02-27 07:54:04 +00:00
$datarray = array ();
2013-01-06 02:08:06 +00:00
$datarray [ 'hash' ] = $hash ;
$datarray [ 'name' ] = $sender [ 'xchan_name' ];
$datarray [ 'url' ] = $sender [ 'xchan_url' ];
$datarray [ 'photo' ] = $sender [ 'xchan_photo_s' ];
$datarray [ 'date' ] = datetime_convert ();
2013-11-21 05:09:13 +00:00
$datarray [ 'aid' ] = $recip [ 'channel_account_id' ];
2013-01-06 04:57:41 +00:00
$datarray [ 'uid' ] = $recip [ 'channel_id' ];
2013-01-06 02:08:06 +00:00
$datarray [ 'link' ] = $itemlink ;
2012-03-01 02:19:08 +00:00
$datarray [ 'parent' ] = $parent_id ;
2013-01-06 02:08:06 +00:00
$datarray [ 'type' ] = $params [ 'type' ];
$datarray [ 'verb' ] = $params [ 'verb' ];
$datarray [ 'otype' ] = $params [ 'otype' ];
2013-05-10 01:08:00 +00:00
$datarray [ 'abort' ] = false ;
2012-02-27 07:54:04 +00:00
call_hooks ( 'enotify_store' , $datarray );
2013-05-10 01:08:00 +00:00
if ( $datarray [ 'abort' ]) {
pop_lang ();
return ;
}
2012-02-18 10:57:42 +00:00
// create notification entry in DB
2013-11-21 05:09:13 +00:00
$r = q ( " insert into notify (hash,name,url,photo,date,aid,uid,link,parent,type,verb,otype)
values ( '%s' , '%s' , '%s' , '%s' , '%s' , % d , % d , '%s' , % d , % d , '%s' , '%s' ) " ,
2012-02-27 07:54:04 +00:00
dbesc ( $datarray [ 'hash' ]),
dbesc ( $datarray [ 'name' ]),
dbesc ( $datarray [ 'url' ]),
dbesc ( $datarray [ 'photo' ]),
dbesc ( $datarray [ 'date' ]),
2013-11-21 05:09:13 +00:00
intval ( $datarray [ 'aid' ]),
2012-02-27 07:54:04 +00:00
intval ( $datarray [ 'uid' ]),
dbesc ( $datarray [ 'link' ]),
2012-03-01 02:19:08 +00:00
intval ( $datarray [ 'parent' ]),
2012-02-27 07:54:04 +00:00
intval ( $datarray [ 'type' ]),
dbesc ( $datarray [ 'verb' ]),
dbesc ( $datarray [ 'otype' ])
2012-02-18 10:57:42 +00:00
);
2011-12-08 09:28:27 +00:00
2012-02-21 03:50:05 +00:00
$r = q ( " select id from notify where hash = '%s' and uid = %d limit 1 " ,
dbesc ( $hash ),
2013-01-06 07:24:15 +00:00
intval ( $recip [ 'channel_id' ])
2012-02-21 03:50:05 +00:00
);
if ( $r )
$notify_id = $r [ 0 ][ 'id' ];
2012-03-26 08:43:26 +00:00
else {
2013-01-06 07:24:15 +00:00
logger ( 'notification not found.' );
2012-03-26 08:43:26 +00:00
pop_lang ();
2012-02-21 03:50:05 +00:00
return ;
2012-03-26 08:43:26 +00:00
}
2012-02-21 03:50:05 +00:00
$itemlink = $a -> get_baseurl () . '/notify/view/' . $notify_id ;
2013-01-08 10:49:08 +00:00
$msg = str_replace ( '$itemlink' , $itemlink , $epreamble );
2012-02-21 08:02:42 +00:00
$r = q ( " update notify set msg = '%s' where id = %d and uid = %d limit 1 " ,
dbesc ( $msg ),
intval ( $notify_id ),
2013-01-08 10:49:08 +00:00
intval ( $datarray [ 'uid' ])
2012-02-21 08:02:42 +00:00
);
2011-12-24 07:07:05 +00:00
// send email notification if notification preferences permit
require_once ( 'bbcode.php' );
2013-01-06 02:08:06 +00:00
if (( intval ( $recip [ 'channel_notifyflags' ]) & intval ( $params [ 'type' ])) || $params [ 'type' ] == NOTIFY_SYSTEM ) {
2011-12-24 07:07:05 +00:00
2011-12-27 22:26:44 +00:00
logger ( 'notification: sending notification email' );
2011-12-24 07:07:05 +00:00
2013-06-19 01:48:41 +00:00
2013-09-03 02:40:21 +00:00
$textversion = strip_tags ( html_entity_decode ( bbcode ( stripslashes ( str_replace ( array ( " \\ r " , " \\ n " ), array ( " " , " \n " ), $body ))), ENT_QUOTES , 'UTF-8' ));
2013-06-17 23:21:03 +00:00
2013-09-03 02:40:21 +00:00
$htmlversion = html_entity_decode ( bbcode ( stripslashes ( str_replace ( array ( " \\ r " , " \\ n " ), array ( " " , " <br /> \n " ), $body ))), ENT_QUOTES , 'UTF-8' );
2013-06-17 23:21:03 +00:00
// use $_SESSION['zid_override'] to force zid() to use
// the recipient address instead of the current observer
2013-06-18 00:19:05 +00:00
$_SESSION [ 'zid_override' ] = $recip [ 'channel_address' ] . '@' . get_app () -> get_hostname ();
2013-06-18 02:25:46 +00:00
$_SESSION [ 'zrl_override' ] = z_root () . '/channel/' . $recip [ 'channel_address' ];
2013-06-17 23:21:03 +00:00
$textversion = zidify_links ( $textversion );
$htmlversion = zidify_links ( $htmlversion );
// unset when done to revert to normal behaviour
unset ( $_SESSION [ 'zid_override' ]);
2013-06-18 02:25:46 +00:00
unset ( $_SESSION [ 'zrl_override' ]);
2011-12-24 07:07:05 +00:00
2013-05-06 03:07:19 +00:00
2012-02-27 07:54:04 +00:00
$datarray = array ();
2013-01-06 02:08:06 +00:00
$datarray [ 'banner' ] = $banner ;
$datarray [ 'product' ] = $product ;
$datarray [ 'preamble' ] = $preamble ;
$datarray [ 'sitename' ] = $sitename ;
$datarray [ 'siteurl' ] = $siteurl ;
$datarray [ 'type' ] = $params [ 'type' ];
$datarray [ 'parent' ] = $params [ 'parent' ];
$datarray [ 'source_name' ] = $sender [ 'xchan_name' ];
$datarray [ 'source_link' ] = $sender [ 'xchan_url' ];
$datarray [ 'source_photo' ] = $sender [ 'xchan_photo_s' ];
2013-01-06 04:57:41 +00:00
$datarray [ 'uid' ] = $recip [ 'channel_id' ];
2013-01-06 02:08:06 +00:00
$datarray [ 'username' ] = $recip [ 'channel_name' ];
$datarray [ 'hsitelink' ] = $hsitelink ;
$datarray [ 'tsitelink' ] = $tsitelink ;
$datarray [ 'hitemlink' ] = '<a href="' . $itemlink . '">' . $itemlink . '</a>' ;
$datarray [ 'titemlink' ] = $itemlink ;
$datarray [ 'thanks' ] = $thanks ;
$datarray [ 'site_admin' ] = $site_admin ;
$datarray [ 'title' ] = stripslashes ( $title );
$datarray [ 'htmlversion' ] = $htmlversion ;
$datarray [ 'textversion' ] = $textversion ;
$datarray [ 'subject' ] = $subject ;
$datarray [ 'headers' ] = $additional_mail_header ;
2013-05-06 03:07:19 +00:00
$datarray [ 'email_secure' ] = false ;
2012-02-27 07:54:04 +00:00
call_hooks ( 'enotify_mail' , $datarray );
2013-05-06 03:07:19 +00:00
// Default to private - don't disclose message contents over insecure channels (such as email)
// Might be interesting to use GPG,PGP,S/MIME encryption instead
// but we'll save that for a clever plugin developer to implement
if ( ! $datarray [ 'email_secure' ]) {
switch ( $params [ 'type' ]) {
case NOTIFY_WALL :
2013-12-19 21:52:23 +00:00
case NOTIFY_TAGSELF :
case NOTIFY_POKE :
2013-05-06 03:07:19 +00:00
case NOTIFY_COMMENT :
if ( ! $private )
break ;
case NOTIFY_MAIL :
2013-05-10 23:09:24 +00:00
$datarray [ 'textversion' ] = $datarray [ 'htmlversion' ] = $datarray [ 'title' ] = '' ;
2013-05-06 03:07:19 +00:00
break ;
default :
break ;
}
}
2011-12-24 07:07:05 +00:00
// load the template for private message notifications
2011-12-26 07:00:19 +00:00
$tpl = get_markup_template ( 'email_notify_html.tpl' );
$email_html_body = replace_macros ( $tpl , array (
2012-02-27 07:54:04 +00:00
'$banner' => $datarray [ 'banner' ],
'$product' => $datarray [ 'product' ],
'$preamble' => $datarray [ 'preamble' ],
'$sitename' => $datarray [ 'sitename' ],
'$siteurl' => $datarray [ 'siteurl' ],
'$source_name' => $datarray [ 'source_name' ],
'$source_link' => $datarray [ 'source_link' ],
'$source_photo' => $datarray [ 'source_photo' ],
'$username' => $datarray [ 'to_name' ],
'$hsitelink' => $datarray [ 'hsitelink' ],
'$hitemlink' => $datarray [ 'hitemlink' ],
'$thanks' => $datarray [ 'thanks' ],
'$site_admin' => $datarray [ 'site_admin' ],
'$title' => $datarray [ 'title' ],
'$htmlversion' => $datarray [ 'htmlversion' ],
2011-12-24 07:07:05 +00:00
));
// load the template for private message notifications
2011-12-26 07:00:19 +00:00
$tpl = get_markup_template ( 'email_notify_text.tpl' );
$email_text_body = replace_macros ( $tpl , array (
2012-02-27 07:54:04 +00:00
'$banner' => $datarray [ 'banner' ],
'$product' => $datarray [ 'product' ],
'$preamble' => $datarray [ 'preamble' ],
'$sitename' => $datarray [ 'sitename' ],
'$siteurl' => $datarray [ 'siteurl' ],
'$source_name' => $datarray [ 'source_name' ],
'$source_link' => $datarray [ 'source_link' ],
'$source_photo' => $datarray [ 'source_photo' ],
'$username' => $datarray [ 'to_name' ],
'$tsitelink' => $datarray [ 'tsitelink' ],
'$titemlink' => $datarray [ 'titemlink' ],
'$thanks' => $datarray [ 'thanks' ],
'$site_admin' => $datarray [ 'site_admin' ],
'$title' => $datarray [ 'title' ],
'$textversion' => $datarray [ 'textversion' ],
2011-12-24 07:07:05 +00:00
));
2011-12-27 22:26:44 +00:00
// logger('text: ' . $email_text_body);
2011-12-26 07:00:19 +00:00
2011-12-24 07:07:05 +00:00
// use the EmailNotification library to send the message
2011-12-26 07:00:19 +00:00
enotify :: send ( array (
2013-01-06 02:08:06 +00:00
'fromName' => $sender_name ,
'fromEmail' => $sender_email ,
'replyTo' => $sender_email ,
'toEmail' => $recip [ 'account_email' ],
'messageSubject' => $datarray [ 'subject' ],
'htmlVersion' => $email_html_body ,
'textVersion' => $email_text_body ,
2012-02-27 07:54:04 +00:00
'additionalMailHeader' => $datarray [ 'headers' ],
2011-12-26 07:00:19 +00:00
));
2011-12-24 07:07:05 +00:00
}
2012-02-18 10:57:42 +00:00
pop_lang ();
2011-12-24 07:07:05 +00:00
}
2011-12-08 09:28:27 +00:00
class enotify {
/**
* Send a multipart / alternative message with Text and HTML versions
*
* @ param fromName name of the sender
* @ param fromEmail email fo the sender
* @ param replyTo replyTo address to direct responses
* @ param toEmail destination email address
* @ param messageSubject subject of the message
* @ param htmlVersion html version of the message
* @ param textVersion text only version of the message
2012-02-26 00:56:14 +00:00
* @ param additionalMailHeader additions to the smtp mail header
2011-12-08 09:28:27 +00:00
*/
static public function send ( $params ) {
2011-12-26 07:00:19 +00:00
2012-05-01 22:49:22 +00:00
$fromName = email_header_encode ( html_entity_decode ( $params [ 'fromName' ], ENT_QUOTES , 'UTF-8' ), 'UTF-8' );
$messageSubject = email_header_encode ( html_entity_decode ( $params [ 'messageSubject' ], ENT_QUOTES , 'UTF-8' ), 'UTF-8' );
2011-12-08 09:28:27 +00:00
// generate a mime boundary
$mimeBoundary = rand ( 0 , 9 ) . " - "
. rand ( 10000000000 , 9999999999 ) . " - "
. rand ( 10000000000 , 9999999999 ) . " =: "
. rand ( 10000 , 99999 );
// generate a multipart/alternative message header
$messageHeader =
2012-02-26 00:56:14 +00:00
$params [ 'additionalMailHeader' ] .
2013-01-03 21:50:23 +00:00
" From: $fromName < { $params [ 'fromEmail' ] } > \n " .
" Reply-To: $fromName < { $params [ 'replyTo' ] } > \n " .
2011-12-08 09:28:27 +00:00
" MIME-Version: 1.0 \n " .
" Content-Type: multipart/alternative; boundary= \" { $mimeBoundary } \" " ;
// assemble the final multipart message body with the text and html types included
$textBody = chunk_split ( base64_encode ( $params [ 'textVersion' ]));
$htmlBody = chunk_split ( base64_encode ( $params [ 'htmlVersion' ]));
$multipartMessageBody =
" -- " . $mimeBoundary . " \n " . // plain text section
" Content-Type: text/plain; charset=UTF-8 \n " .
" Content-Transfer-Encoding: base64 \n \n " .
$textBody . " \n " .
" -- " . $mimeBoundary . " \n " . // text/html section
" Content-Type: text/html; charset=UTF-8 \n " .
" Content-Transfer-Encoding: base64 \n \n " .
$htmlBody . " \n " .
" -- " . $mimeBoundary . " -- \n " ; // message ending
// send the message
$res = mail (
2013-11-21 05:09:13 +00:00
$params [ 'toEmail' ], // send to address
2013-01-03 21:50:23 +00:00
$messageSubject , // subject
2011-12-08 09:28:27 +00:00
$multipartMessageBody , // message body
$messageHeader // message headers
);
2011-12-27 22:26:44 +00:00
logger ( " notification: enotify::send returns " . $res , LOGGER_DEBUG );
2011-12-08 09:28:27 +00:00
}
}
2013-01-06 07:24:15 +00:00