2011-12-08 04:28:27 -05:00
< ? php
2014-09-06 09:52:53 -04:00
require_once ( 'include/Emailer.php' );
2012-08-15 20:14:29 -04:00
require_once ( 'include/email.php' );
2014-09-06 09:52:53 -04:00
require_once ( 'include/bbcode.php' );
require_once ( 'include/html2bbcode.php' );
2012-08-15 20:14:29 -04:00
2011-12-24 02:07:05 -05:00
function notification ( $params ) {
2011-12-08 04:28:27 -05:00
2014-09-06 09:52:53 -04:00
#logger('notification()', LOGGER_DEBUG);
2011-12-26 02:00:19 -05:00
2011-12-08 04:28:27 -05:00
$a = get_app ();
2012-03-26 04:43:26 -04:00
// from here on everything is in the recipients language
push_lang ( $params [ 'language' ]);
2014-09-06 12:15:18 -04:00
$banner = t ( 'Friendica Notification' );
$product = FRIENDICA_PLATFORM ;
$siteurl = $a -> get_baseurl ( true );
$thanks = t ( 'Thank You,' );
$sitename = $a -> config [ 'sitename' ];
2015-10-07 00:22:15 -04:00
if ( ! x ( $a -> config [ 'admin_name' ])) {
$site_admin = sprintf ( t ( '%s Administrator' ), $sitename );
} else {
$site_admin = sprintf ( t ( '%1$s, %2$s Administrator' ), $a -> config [ 'admin_name' ], $sitename );
}
2014-12-22 18:55:36 -05:00
$nickname = " " ;
2014-09-06 12:15:18 -04:00
2015-01-31 12:44:30 -05:00
$sender_name = $sitename ;
2014-09-06 12:15:18 -04:00
$hostname = $a -> get_hostname ();
if ( strpos ( $hostname , ':' ))
$hostname = substr ( $hostname , 0 , strpos ( $hostname , ':' ));
2015-04-16 01:18:06 -04:00
2015-01-31 02:46:05 -05:00
$sender_email = $a -> config [ 'sender_email' ];
if ( empty ( $sender_email )) {
$sender_email = t ( 'noreply' ) . '@' . $hostname ;
}
2014-09-06 12:15:18 -04:00
2014-12-22 18:55:36 -05:00
$user = q ( " SELECT `nickname` FROM `user` WHERE `uid` = %d " , intval ( $params [ 'uid' ]));
if ( $user )
$nickname = $user [ 0 ][ " nickname " ];
2014-09-06 12:15:18 -04:00
// with $params['show_in_notification_page'] == false, the notification isn't inserted into
// the database, and an email is sent if applicable.
// default, if not specified: true
$show_in_notification_page = (( x ( $params , 'show_in_notification_page' )) ? $params [ 'show_in_notification_page' ] : True );
$additional_mail_header = " " ;
$additional_mail_header .= " Precedence: list \n " ;
$additional_mail_header .= " X-Friendica-Host: " . $hostname . " \n " ;
2014-12-22 18:55:36 -05:00
$additional_mail_header .= " X-Friendica-Account: < " . $nickname . " @ " . $hostname . " > \n " ;
2014-09-06 12:15:18 -04:00
$additional_mail_header .= " X-Friendica-Platform: " . FRIENDICA_PLATFORM . " \n " ;
$additional_mail_header .= " X-Friendica-Version: " . FRIENDICA_VERSION . " \n " ;
$additional_mail_header .= " List-ID: <notification. " . $hostname . " > \n " ;
$additional_mail_header .= " List-Archive: < " . $a -> get_baseurl () . " /notifications/system> \n " ;
2014-08-20 18:53:01 -04:00
2011-12-27 17:26:44 -05:00
if ( array_key_exists ( 'item' , $params )) {
2011-12-26 18:47:40 -05:00
$title = $params [ 'item' ][ 'title' ];
$body = $params [ 'item' ][ 'body' ];
}
else {
$title = $body = '' ;
}
2011-12-24 02:07:05 -05:00
2012-02-29 22:23:01 -05:00
// e.g. "your post", "David's photo", etc.
$possess_desc = t ( '%s <!item_type!>' );
2012-02-29 21:19:08 -05:00
2015-04-16 01:18:06 -04:00
if ( isset ( $params [ 'item' ][ 'id' ]))
$item_id = $params [ 'item' ][ 'id' ];
else
$item_id = 0 ;
2015-04-14 00:54:41 -04:00
if ( isset ( $params [ 'parent' ]))
$parent_id = $params [ 'parent' ];
else
$parent_id = 0 ;
2011-12-24 02:07:05 -05:00
if ( $params [ 'type' ] == NOTIFY_MAIL ) {
2012-02-27 20:18:19 -05:00
$subject = sprintf ( t ( '[Friendica:Notify] New mail received at %s' ), $sitename );
2011-12-24 02:07:05 -05:00
2012-06-13 11:55:21 -04:00
$preamble = sprintf ( t ( '%1$s sent you a new private message at %2$s.' ), $params [ 'source_name' ], $sitename );
$epreamble = sprintf ( t ( '%1$s sent you %2$s.' ), '[url=' . $params [ 'source_link' ] . ']' . $params [ 'source_name' ] . '[/url]' , '[url=$itemlink]' . t ( 'a private message' ) . '[/url]' );
2011-12-26 02:00:19 -05:00
$sitelink = t ( 'Please visit %s to view and/or reply to your private messages.' );
2012-02-21 21:10:15 -05:00
$tsitelink = sprintf ( $sitelink , $siteurl . '/message/' . $params [ 'item' ][ 'id' ] );
$hsitelink = sprintf ( $sitelink , '<a href="' . $siteurl . '/message/' . $params [ 'item' ][ 'id' ] . '">' . $sitename . '</a>' );
$itemlink = $siteurl . '/message/' . $params [ 'item' ][ 'id' ];
2011-12-26 17:16:25 -05:00
}
if ( $params [ 'type' ] == NOTIFY_COMMENT ) {
2012-02-27 20:18:19 -05:00
// logger("notification: params = " . print_r($params, true), LOGGER_DEBUG);
2011-12-26 17:16:25 -05:00
2015-04-14 00:54:41 -04:00
//$parent_id = $params['parent'];
2012-02-29 21:19:08 -05:00
2014-09-03 18:58:52 -04:00
$p = q ( " SELECT `ignored` FROM `thread` WHERE `iid` = %d AND `uid` = %d LIMIT 1 " ,
intval ( $parent_id ),
intval ( $params [ 'uid' ])
);
if ( $p AND count ( $p ) AND ( $p [ 0 ][ " ignored " ])) {
logger ( " Thread " . $parent_id . " will be ignored " , LOGGER_DEBUG );
return ;
}
2013-01-23 20:46:46 -05:00
// Check to see if there was already a tag notify or comment notify for this post.
2012-07-04 00:40:13 -04:00
// If so don't create a second notification
2014-01-05 10:10:02 -05:00
2012-07-04 00:40:13 -04:00
$p = null ;
2014-01-05 10:10:02 -05:00
$p = q ( " select id from notify where (type = %d or type = %d or type = %d) and link = '%s' and uid = %d limit 1 " ,
2012-07-04 00:40:13 -04:00
intval ( NOTIFY_TAGSELF ),
2013-01-23 20:46:46 -05:00
intval ( NOTIFY_COMMENT ),
2014-01-05 10:10:02 -05:00
intval ( NOTIFY_SHARE ),
2012-07-04 00:40:13 -04:00
dbesc ( $params [ 'link' ]),
intval ( $params [ 'uid' ])
);
if ( $p and count ( $p )) {
pop_lang ();
return ;
}
2014-01-05 10:10:02 -05:00
2012-02-29 21:19:08 -05: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 ),
intval ( $params [ 'uid' ])
);
}
2012-06-13 11:55:21 -04:00
$item_post_type = item_post_type ( $p [ 0 ]);
//$possess_desc = str_replace('<!item_type!>',$possess_desc);
2012-02-29 22:23:01 -05:00
// "a post"
2012-06-13 11:55:21 -04:00
$dest_str = sprintf ( t ( '%1$s commented on [url=%2$s]a %3$s[/url]' ),
'[url=' . $params [ 'source_link' ] . ']' . $params [ 'source_name' ] . '[/url]' ,
$itemlink ,
$item_post_type );
2012-02-29 22:23:01 -05:00
// "George Bull's post"
2012-02-29 21:19:08 -05:00
if ( $p )
2012-06-13 11:55:21 -04:00
$dest_str = sprintf ( t ( '%1$s commented on [url=%2$s]%3$s\'s %4$s[/url]' ),
'[url=' . $params [ 'source_link' ] . ']' . $params [ 'source_name' ] . '[/url]' ,
$itemlink ,
2012-06-13 12:08:34 -04:00
$p [ 0 ][ 'author-name' ],
2012-06-13 11:55:21 -04:00
$item_post_type );
2014-01-05 10:10:02 -05:00
2012-02-29 22:23:01 -05:00
// "your post"
2012-02-29 21:19:08 -05:00
if ( $p [ 0 ][ 'owner-name' ] == $p [ 0 ][ 'author-name' ] && $p [ 0 ][ 'wall' ])
2012-06-13 11:55:21 -04:00
$dest_str = sprintf ( t ( '%1$s commented on [url=%2$s]your %3$s[/url]' ),
'[url=' . $params [ 'source_link' ] . ']' . $params [ 'source_name' ] . '[/url]' ,
$itemlink ,
$item_post_type );
2012-02-29 21:19:08 -05:00
2012-02-25 19:56:14 -05:00
// Some mail softwares relies on subject field for threading.
// So, we cannot have different subjects for notifications of the same thread.
2014-09-03 18:58:52 -04:00
// Before this we have the name of the replier on the subject rendering
2012-02-25 19:56:14 -05:00
// differents subjects for messages on the same thread.
2012-02-27 20:18:19 -05:00
2012-06-13 23:03:18 -04:00
$subject = sprintf ( t ( '[Friendica:Notify] Comment to conversation #%1$d by %2$s' ), $parent_id , $params [ 'source_name' ]);
2014-09-03 18:58:52 -04:00
$preamble = sprintf ( t ( '%s commented on an item/conversation you have been following.' ), $params [ 'source_name' ]);
2014-01-05 10:10:02 -05:00
$epreamble = $dest_str ;
2012-02-18 06:18:20 -05:00
2011-12-26 17:16:25 -05: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 ) {
2012-02-27 20:18:19 -05:00
$subject = sprintf ( t ( '[Friendica:Notify] %s posted to your profile wall' ) , $params [ 'source_name' ]);
2012-06-13 23:03:18 -04:00
$preamble = sprintf ( t ( '%1$s posted to your profile wall at %2$s' ) , $params [ 'source_name' ], $sitename );
2014-01-05 10:10:02 -05:00
$epreamble = sprintf ( t ( '%1$s posted to [url=%2$s]your wall[/url]' ) ,
2012-06-13 11:55:21 -04:00
'[url=' . $params [ 'source_link' ] . ']' . $params [ 'source_name' ] . '[/url]' ,
2014-01-05 10:10:02 -05:00
$params [ 'link' ]);
2011-12-26 17:16:25 -05: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 04:28:27 -05:00
}
2012-02-09 17:06:17 -05:00
if ( $params [ 'type' ] == NOTIFY_TAGSELF ) {
2012-02-27 20:18:19 -05:00
$subject = sprintf ( t ( '[Friendica:Notify] %s tagged you' ) , $params [ 'source_name' ]);
2012-06-13 11:55:21 -04:00
$preamble = sprintf ( t ( '%1$s tagged you at %2$s' ) , $params [ 'source_name' ], $sitename );
2014-01-05 10:10:02 -05:00
$epreamble = sprintf ( t ( '%1$s [url=%2$s]tagged you[/url].' ) ,
2012-06-13 11:55:21 -04:00
'[url=' . $params [ 'source_link' ] . ']' . $params [ 'source_name' ] . '[/url]' ,
2014-01-05 10:10:02 -05:00
$params [ 'link' ]);
$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_SHARE ) {
$subject = sprintf ( t ( '[Friendica:Notify] %s shared a new post' ) , $params [ 'source_name' ]);
$preamble = sprintf ( t ( '%1$s shared a new post at %2$s' ) , $params [ 'source_name' ], $sitename );
$epreamble = sprintf ( t ( '%1$s [url=%2$s]shared a post[/url].' ) ,
'[url=' . $params [ 'source_link' ] . ']' . $params [ 'source_name' ] . '[/url]' ,
$params [ 'link' ]);
2012-02-09 17:06:17 -05:00
$sitelink = t ( 'Please visit %s to view and/or reply to the conversation.' );
2012-07-19 23:13:40 -04:00
$tsitelink = sprintf ( $sitelink , $siteurl );
$hsitelink = sprintf ( $sitelink , '<a href="' . $siteurl . '">' . $sitename . '</a>' );
$itemlink = $params [ 'link' ];
}
if ( $params [ 'type' ] == NOTIFY_POKE ) {
$subject = sprintf ( t ( '[Friendica:Notify] %1$s poked you' ) , $params [ 'source_name' ]);
$preamble = sprintf ( t ( '%1$s poked you at %2$s' ) , $params [ 'source_name' ], $sitename );
2014-09-03 18:58:52 -04:00
$epreamble = sprintf ( t ( '%1$s [url=%2$s]poked you[/url].' ) ,
2012-07-19 23:13:40 -04:00
'[url=' . $params [ 'source_link' ] . ']' . $params [ 'source_name' ] . '[/url]' ,
2014-09-03 18:58:52 -04:00
$params [ 'link' ]);
2012-07-19 23:13:40 -04: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 17:06:17 -05:00
$tsitelink = sprintf ( $sitelink , $siteurl );
$hsitelink = sprintf ( $sitelink , '<a href="' . $siteurl . '">' . $sitename . '</a>' );
$itemlink = $params [ 'link' ];
}
if ( $params [ 'type' ] == NOTIFY_TAGSHARE ) {
2012-02-27 20:18:19 -05:00
$subject = sprintf ( t ( '[Friendica:Notify] %s tagged your post' ) , $params [ 'source_name' ]);
2012-06-13 11:55:21 -04:00
$preamble = sprintf ( t ( '%1$s tagged your post at %2$s' ) , $params [ 'source_name' ], $sitename );
$epreamble = sprintf ( t ( '%1$s tagged [url=%2$s]your post[/url]' ) ,
'[url=' . $params [ 'source_link' ] . ']' . $params [ 'source_name' ] . '[/url]' ,
2014-09-03 18:58:52 -04:00
$itemlink );
2012-02-09 17:06:17 -05: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 18:47:40 -05:00
if ( $params [ 'type' ] == NOTIFY_INTRO ) {
2012-02-27 20:18:19 -05:00
$subject = sprintf ( t ( '[Friendica:Notify] Introduction received' ));
2014-09-03 18:58:52 -04:00
$preamble = sprintf ( t ( 'You\'ve received an introduction from \'%1$s\' at %2$s' ), $params [ 'source_name' ], $sitename );
2012-06-13 11:55:21 -04:00
$epreamble = sprintf ( t ( 'You\'ve received [url=%1$s]an introduction[/url] from %2$s.' ),
$itemlink ,
2014-09-03 18:58:52 -04:00
'[url=' . $params [ 'source_link' ] . ']' . $params [ 'source_name' ] . '[/url]' );
2011-12-26 18:47:40 -05:00
$body = sprintf ( t ( 'You may visit their profile at %s' ), $params [ 'source_link' ]);
$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' ];
2014-09-06 12:15:18 -04:00
switch ( $params [ 'verb' ]) {
case ACTIVITY_FRIEND :
// someone started to share with user (mostly OStatus)
$subject = sprintf ( t ( '[Friendica:Notify] A new person is sharing with you' ));
$preamble = sprintf ( t ( '%1$s is sharing with you at %2$s' ), $params [ 'source_name' ], $sitename );
$epreamble = sprintf ( t ( '%1$s is sharing with you at %2$s' ),
'[url=' . $params [ 'source_link' ] . ']' . $params [ 'source_name' ] . '[/url]' ,
$sitename );
break ;
case ACTIVITY_FOLLOW :
// someone started to follow the user (mostly OStatus)
$subject = sprintf ( t ( '[Friendica:Notify] You have a new follower' ));
$preamble = sprintf ( t ( 'You have a new follower at %2$s : %1$s' ), $params [ 'source_name' ], $sitename );
$epreamble = sprintf ( t ( 'You have a new follower at %2$s : %1$s' ),
'[url=' . $params [ 'source_link' ] . ']' . $params [ 'source_name' ] . '[/url]' ,
$sitename );
break ;
default :
2014-09-07 04:27:39 -04:00
// ACTIVITY_REQ_FRIEND is default activity for notifications
2014-09-06 12:15:18 -04:00
break ;
}
2011-12-26 18:47:40 -05:00
}
2012-01-03 20:29:07 -05:00
if ( $params [ 'type' ] == NOTIFY_SUGGEST ) {
2012-02-27 20:18:19 -05:00
$subject = sprintf ( t ( '[Friendica:Notify] Friend suggestion received' ));
2014-09-03 18:58:52 -04:00
$preamble = sprintf ( t ( 'You\'ve received a friend suggestion from \'%1$s\' at %2$s' ), $params [ 'source_name' ], $sitename );
2012-06-13 11:55:21 -04:00
$epreamble = sprintf ( t ( 'You\'ve received [url=%1$s]a friend suggestion[/url] for %2$s from %3$s.' ),
$itemlink ,
'[url=' . $params [ 'item' ][ 'url' ] . ']' . $params [ 'item' ][ 'name' ] . '[/url]' ,
2014-09-03 18:58:52 -04:00
'[url=' . $params [ 'source_link' ] . ']' . $params [ 'source_name' ] . '[/url]' );
2014-08-20 18:53:01 -04:00
2012-01-03 20:29:07 -05: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 18:47:40 -05:00
if ( $params [ 'type' ] == NOTIFY_CONFIRM ) {
2014-09-06 12:15:18 -04:00
if ( $params [ 'verb' ] == ACTIVITY_FRIEND ){ // mutual connection
$subject = sprintf ( t ( '[Friendica:Notify] Connection accepted' ));
2015-06-26 06:03:32 -04:00
$preamble = sprintf ( t ( '\'%1$s\' has accepted your connection request at %2$s' ), $params [ 'source_name' ], $sitename );
2014-09-06 12:15:18 -04:00
$epreamble = sprintf ( t ( '%2$s has accepted your [url=%1$s]connection request[/url].' ),
$itemlink ,
'[url=' . $params [ 'source_link' ] . ']' . $params [ 'source_name' ] . '[/url]' );
$body = t ( ' You are now mutual friends and may exchange status updates , photos , and email
without restriction . ' );
$sitelink = t ( 'Please visit %s if you wish to make any changes to this relationship.' );
$tsitelink = sprintf ( $sitelink , $siteurl );
$hsitelink = sprintf ( $sitelink , '<a href="' . $siteurl . '">' . $sitename . '</a>' );
$itemlink = $params [ 'link' ];
} else { // ACTIVITY_FOLLOW
$subject = sprintf ( t ( '[Friendica:Notify] Connection accepted' ));
2015-06-26 06:03:32 -04:00
$preamble = sprintf ( t ( '\'%1$s\' has accepted your connection request at %2$s' ), $params [ 'source_name' ], $sitename );
2014-09-06 12:15:18 -04:00
$epreamble = sprintf ( t ( '%2$s has accepted your [url=%1$s]connection request[/url].' ),
$itemlink ,
'[url=' . $params [ 'source_link' ] . ']' . $params [ 'source_name' ] . '[/url]' );
$body = sprintf ( t ( '\'%1$s\' has chosen to accept you a "fan", which restricts some forms of communication - such as private messaging and some profile interactions. If this is a celebrity or community page, these settings were applied automatically.' ), $params [ 'source_name' ]);
$body .= " \n \n " ;
$body .= sprintf ( t ( '\'%1$s\' may choose to extend this into a two-way or more permissive relationship in the future. ' ), $params [ 'source_name' ]);
$sitelink = t ( 'Please visit %s if you wish to make any changes to this relationship.' );
$tsitelink = sprintf ( $sitelink , $siteurl );
$hsitelink = sprintf ( $sitelink , '<a href="' . $siteurl . '">' . $sitename . '</a>' );
$itemlink = $params [ 'link' ];
}
2012-03-25 07:37:09 -04:00
}
if ( $params [ 'type' ] == NOTIFY_SYSTEM ) {
2014-09-07 07:55:02 -04:00
switch ( $params [ 'event' ]) {
case " SYSTEM_REGISTER_REQUEST " :
$subject = sprintf ( t ( '[Friendica System:Notify] registration request' ));
$preamble = sprintf ( t ( 'You\'ve received a registration request from \'%1$s\' at %2$s' ), $params [ 'source_name' ], $sitename );
2014-09-07 08:23:03 -04:00
$epreamble = sprintf ( t ( 'You\'ve received a [url=%1$s]registration request[/url] from %2$s.' ),
2014-09-07 07:55:02 -04:00
$itemlink ,
'[url=' . $params [ 'source_link' ] . ']' . $params [ 'source_name' ] . '[/url]' );
$body = sprintf ( t ( 'Full Name: %1$s\nSite Location: %2$s\nLogin Name: %3$s (%4$s)' ),
$params [ 'source_name' ], $siteurl , $params [ 'source_mail' ], $params [ 'source_nick' ]);
$sitelink = t ( 'Please visit %s to approve or reject the request.' );
$tsitelink = sprintf ( $sitelink , $params [ 'link' ] );
2014-09-09 16:07:47 -04:00
$hsitelink = sprintf ( $sitelink , '<a href="' . $params [ 'link' ] . '">' . $sitename . '</a><br><br>' );
2014-09-07 07:55:02 -04:00
$itemlink = $params [ 'link' ];
break ;
case " SYSTEM_DB_UPDATE_FAIL " :
break ;
}
2014-09-07 04:27:39 -04:00
}
if ( $params [ 'type' ] == " SYSTEM_EMAIL " ){
// not part of the notifications.
// it just send a mail to the user.
// It will be used by the system to send emails to users (like
// password reset, invitations and so) using one look (but without
// add a notification to the user, with could be inexistent)
2014-09-06 12:15:18 -04:00
$subject = $params [ 'subject' ];
$preamble = $params [ 'preamble' ];
$body = $params [ 'body' ];
$sitelink = " " ;
$tsitelink = " " ;
$hsitelink = " " ;
$itemlink = " " ;
2014-09-07 04:27:39 -04:00
$show_in_notification_page = false ;
2011-12-26 18:47:40 -05:00
}
2014-12-22 18:55:36 -05:00
$subject .= " ( " . $nickname . " @ " . $hostname . " ) " ;
2014-09-06 09:52:53 -04:00
2012-03-25 08:06:11 -04:00
$h = array (
2014-09-03 18:58:52 -04:00
'params' => $params ,
2012-03-25 08:06:11 -04:00
'subject' => $subject ,
2014-09-03 18:58:52 -04:00
'preamble' => $preamble ,
'epreamble' => $epreamble ,
'body' => $body ,
2012-03-25 08:06:11 -04:00
'sitelink' => $sitelink ,
'tsitelink' => $tsitelink ,
'hsitelink' => $hsitelink ,
'itemlink' => $itemlink
);
2014-08-20 18:53:01 -04:00
2012-03-25 08:06:11 -04:00
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' ];
2014-03-11 18:52:32 -04:00
$itemlink = $h [ 'itemlink' ];
2012-03-25 08:06:11 -04:00
2011-12-26 18:47:40 -05:00
2012-02-18 05:57:42 -05:00
2014-09-07 04:27:39 -04:00
if ( $show_in_notification_page ) {
2014-09-07 07:55:02 -04:00
logger ( " adding notification entry " , LOGGER_DEBUG );
2014-09-06 12:15:18 -04: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-18 05:57:42 -05:00
2011-12-08 04:28:27 -05:00
2014-09-06 12:15:18 -04:00
$datarray = array ();
$datarray [ 'hash' ] = $hash ;
$datarray [ 'name' ] = $params [ 'source_name' ];
$datarray [ 'url' ] = $params [ 'source_link' ];
$datarray [ 'photo' ] = $params [ 'source_photo' ];
$datarray [ 'date' ] = datetime_convert ();
$datarray [ 'uid' ] = $params [ 'uid' ];
$datarray [ 'link' ] = $itemlink ;
2015-04-16 01:18:06 -04:00
$datarray [ 'iid' ] = $item_id ;
2014-09-06 12:15:18 -04:00
$datarray [ 'parent' ] = $parent_id ;
$datarray [ 'type' ] = $params [ 'type' ];
$datarray [ 'verb' ] = $params [ 'verb' ];
$datarray [ 'otype' ] = $params [ 'otype' ];
$datarray [ 'abort' ] = false ;
2012-02-20 22:50:05 -05:00
2014-09-06 12:15:18 -04:00
call_hooks ( 'enotify_store' , $datarray );
2013-02-08 02:43:55 -05:00
2014-09-06 12:15:18 -04:00
if ( $datarray [ 'abort' ]) {
pop_lang ();
return False ;
2013-02-08 02:43:55 -05:00
}
2014-09-06 12:15:18 -04:00
// create notification entry in DB
2015-04-16 01:18:06 -04:00
$r = q ( " insert into notify (hash,name,url,photo,date,uid,link,iid,parent,type,verb,otype)
values ( '%s' , '%s' , '%s' , '%s' , '%s' , % d , '%s' , % d , % d , % d , '%s' , '%s' ) " ,
2014-09-06 12:15:18 -04:00
dbesc ( $datarray [ 'hash' ]),
dbesc ( $datarray [ 'name' ]),
dbesc ( $datarray [ 'url' ]),
dbesc ( $datarray [ 'photo' ]),
dbesc ( $datarray [ 'date' ]),
intval ( $datarray [ 'uid' ]),
dbesc ( $datarray [ 'link' ]),
2015-04-16 01:18:06 -04:00
intval ( $datarray [ 'iid' ]),
2014-09-06 12:15:18 -04:00
intval ( $datarray [ 'parent' ]),
intval ( $datarray [ 'type' ]),
dbesc ( $datarray [ 'verb' ]),
dbesc ( $datarray [ 'otype' ])
);
2013-02-08 02:43:55 -05:00
2014-09-06 12:15:18 -04:00
$r = q ( " select id from notify where hash = '%s' and uid = %d limit 1 " ,
dbesc ( $hash ),
intval ( $params [ 'uid' ])
);
if ( $r )
$notify_id = $r [ 0 ][ 'id' ];
else {
2013-02-08 02:43:55 -05:00
pop_lang ();
2014-09-06 09:52:53 -04:00
return False ;
2013-02-08 02:43:55 -05:00
}
2014-09-06 12:15:18 -04:00
// we seem to have a lot of duplicate comment notifications due to race conditions, mostly from forums
// After we've stored everything, look again to see if there are any duplicates and if so remove them
2013-02-08 02:43:55 -05:00
2014-09-06 12:15:18 -04:00
$p = null ;
$p = q ( " select id from notify where ( type = %d or type = %d ) and link = '%s' and uid = %d order by id " ,
intval ( NOTIFY_TAGSELF ),
intval ( NOTIFY_COMMENT ),
dbesc ( $params [ 'link' ]),
intval ( $params [ 'uid' ])
);
if ( $p && ( count ( $p ) > 1 )) {
for ( $d = 1 ; $d < count ( $p ); $d ++ ) {
q ( " delete from notify where id = %d " ,
intval ( $p [ $d ][ 'id' ])
);
}
// only continue on if we stored the first one
if ( $notify_id != $p [ 0 ][ 'id' ]) {
pop_lang ();
return False ;
}
}
2014-03-11 18:52:32 -04:00
2012-02-21 03:02:42 -05:00
2014-09-06 12:15:18 -04:00
$itemlink = $a -> get_baseurl () . '/notify/view/' . $notify_id ;
$msg = replace_macros ( $epreamble , array ( '$itemlink' => $itemlink ));
$r = q ( " update notify set msg = '%s' where id = %d and uid = %d " ,
dbesc ( $msg ),
intval ( $notify_id ),
intval ( $params [ 'uid' ])
);
2011-12-24 02:07:05 -05:00
2014-09-06 12:15:18 -04:00
}
// send email notification if notification preferences permit
2014-09-07 04:27:39 -04:00
if (( intval ( $params [ 'notify_flags' ]) & intval ( $params [ 'type' ]))
|| $params [ 'type' ] == NOTIFY_SYSTEM
|| $params [ 'type' ] == " SYSTEM_EMAIL " ) {
2011-12-24 02:07:05 -05:00
2014-09-07 04:27:39 -04:00
logger ( 'sending notification email' );
2011-12-24 02:07:05 -05:00
2014-08-20 18:53:01 -04:00
if ( isset ( $params [ 'parent' ]) AND ( intval ( $params [ 'parent' ]) != 0 )) {
$id_for_parent = $params [ 'parent' ] . " @ " . $hostname ;
2012-02-25 19:56:14 -05:00
2014-08-20 18:53:01 -04:00
// Is this the first email notification for this parent item and user?
2012-02-25 19:56:14 -05:00
2014-08-20 18:53:01 -04:00
$r = q ( " select `id` from `notify-threads` where `master-parent-item` = %d and `receiver-uid` = %d limit 1 " ,
2012-02-25 19:56:14 -05:00
intval ( $params [ 'parent' ]),
2014-08-20 18:53:01 -04:00
intval ( $params [ 'uid' ]) );
// If so, create the record of it and use a message-id smtp header.
if ( ! $r ) {
logger ( " notify_id: " . intval ( $notify_id ) . " , parent: " . intval ( $params [ 'parent' ]) . " uid: " . intval ( $params [ 'uid' ]), LOGGER_DEBUG );
$r = q ( " insert into `notify-threads` (`notify-id`, `master-parent-item`, `receiver-uid`, `parent-item`)
values ( % d , % d , % d , % d ) " ,
intval ( $notify_id ),
intval ( $params [ 'parent' ]),
2014-09-03 18:58:52 -04:00
intval ( $params [ 'uid' ]),
2014-08-20 18:53:01 -04:00
0 );
$additional_mail_header .= " Message-ID: < ${ id_for_parent } > \n " ;
2014-09-03 18:58:52 -04:00
$log_msg = " include/enotify: No previous notification found for this parent: \n " .
2014-08-20 18:53:01 -04:00
" parent: ${ params['parent'] } \n " . " uid : ${ params['uid'] } \n " ;
logger ( $log_msg , LOGGER_DEBUG );
} else {
// If not, just "follow" the thread.
$additional_mail_header .= " References: < ${ id_for_parent } > \n In-Reply-To: < ${ id_for_parent } > \n " ;
2014-09-06 09:52:53 -04:00
logger ( " There's already a notification for this parent: \n " . print_r ( $r , true ), LOGGER_DEBUG );
2014-08-20 18:53:01 -04:00
}
2012-02-25 19:56:14 -05:00
}
2011-12-24 02:07:05 -05:00
2014-09-07 04:27:39 -04:00
// textversion keeps linebreaks
$textversion = strip_tags ( str_replace ( " <br> " , " \n " , html_entity_decode ( bbcode ( stripslashes ( str_replace ( array ( " \\ r \\ n " , " \\ r " , " \\ n " ), " \n " ,
$body ))), ENT_QUOTES , 'UTF-8' )));
2014-08-07 02:00:53 -04:00
$htmlversion = html_entity_decode ( bbcode ( stripslashes ( str_replace ( array ( " \\ r \\ n " , " \\ r " , " \\ n \\ n " , " \\ n " ),
" <br /> \n " , $body ))), ENT_QUOTES , 'UTF-8' );
2011-12-24 02:07:05 -05:00
2014-09-07 04:27:39 -04:00
2012-02-27 02:54:04 -05:00
$datarray = array ();
$datarray [ 'banner' ] = $banner ;
$datarray [ 'product' ] = $product ;
$datarray [ 'preamble' ] = $preamble ;
$datarray [ 'sitename' ] = $sitename ;
$datarray [ 'siteurl' ] = $siteurl ;
2012-02-27 20:18:19 -05:00
$datarray [ 'type' ] = $params [ 'type' ];
$datarray [ 'parent' ] = $params [ 'parent' ];
2012-02-27 02:54:04 -05:00
$datarray [ 'source_name' ] = $params [ 'source_name' ];
$datarray [ 'source_link' ] = $params [ 'source_link' ];
$datarray [ 'source_photo' ] = $params [ 'source_photo' ];
2012-02-27 20:18:19 -05:00
$datarray [ 'uid' ] = $params [ 'uid' ];
2012-02-27 02:54:04 -05:00
$datarray [ 'username' ] = $params [ 'to_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 ;
call_hooks ( 'enotify_mail' , $datarray );
2013-02-23 11:31:34 -05:00
// check whether sending post content in email notifications is allowed
2014-09-10 12:30:30 -04:00
// always true for "SYSTEM_EMAIL"
$content_allowed = (( ! get_config ( 'system' , 'enotify_no_content' )) || ( $params [ 'type' ] == " SYSTEM_EMAIL " ));
2013-02-23 11:31:34 -05:00
2011-12-24 02:07:05 -05:00
// load the template for private message notifications
2011-12-26 02:00:19 -05:00
$tpl = get_markup_template ( 'email_notify_html.tpl' );
$email_html_body = replace_macros ( $tpl , array (
2012-02-27 02:54:04 -05:00
'$banner' => $datarray [ 'banner' ],
'$product' => $datarray [ 'product' ],
2014-09-09 16:07:47 -04:00
'$preamble' => str_replace ( " \n " , " <br> \n " , $datarray [ 'preamble' ]),
2012-02-27 02:54:04 -05:00
'$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' ],
2013-02-23 11:31:34 -05:00
'$htmlversion' => $datarray [ 'htmlversion' ],
'$content_allowed' => $content_allowed ,
2011-12-24 02:07:05 -05:00
));
2014-09-03 18:58:52 -04:00
2011-12-24 02:07:05 -05:00
// load the template for private message notifications
2011-12-26 02:00:19 -05:00
$tpl = get_markup_template ( 'email_notify_text.tpl' );
$email_text_body = replace_macros ( $tpl , array (
2012-02-27 02:54:04 -05: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' ],
2014-09-03 18:58:52 -04:00
'$textversion' => $datarray [ 'textversion' ],
2013-02-23 11:31:34 -05:00
'$content_allowed' => $content_allowed ,
2011-12-24 02:07:05 -05:00
));
2011-12-27 17:26:44 -05:00
// logger('text: ' . $email_text_body);
2011-12-26 02:00:19 -05:00
2014-09-06 09:52:53 -04:00
// use the Emailer class to send the message
2011-12-26 02:00:19 -05:00
2014-09-07 11:46:31 -04:00
return Emailer :: send ( array (
2014-12-29 10:04:51 -05:00
'uid' => $params [ 'uid' ],
2011-12-26 02:00:19 -05:00
'fromName' => $sender_name ,
'fromEmail' => $sender_email ,
'replyTo' => $sender_email ,
'toEmail' => $params [ 'to_email' ],
2012-02-27 02:54:04 -05:00
'messageSubject' => $datarray [ 'subject' ],
2011-12-26 02:00:19 -05:00
'htmlVersion' => $email_html_body ,
2012-02-25 19:56:14 -05:00
'textVersion' => $email_text_body ,
2012-02-27 02:54:04 -05:00
'additionalMailHeader' => $datarray [ 'headers' ],
2011-12-26 02:00:19 -05:00
));
2011-12-24 02:07:05 -05:00
}
2012-02-18 05:57:42 -05:00
2014-09-06 09:52:53 -04:00
return False ;
2012-02-18 05:57:42 -05:00
2011-12-24 02:07:05 -05:00
}
2011-12-08 04:28:27 -05:00
2016-01-28 16:58:05 -05:00
/**
* @ brief Checks for item related notifications and sends them
*
* @ param int $itemid ID of the item for which the check should be done
* @ param int $uid User ID
* @ param str $profile ( Optional ) Can be used for connector post . Otherwise empty .
*/
function check_item_notification ( $itemid , $uid , $profile = " " , $defaulttype = " " ) {
$user = q ( " SELECT `notify-flags`, `language`, `username`, `email` FROM `user` WHERE `uid` = %d " , intval ( $uid ));
if ( ! $user )
return false ;
$owner = q ( " SELECT `id`, `url` FROM `contact` WHERE `self` AND `uid` = %d LIMIT 1 " , intval ( $uid ));
if ( ! $owner )
return false ;
$local_profile = $owner [ 0 ][ " url " ];
if ( $profile == " " )
$profile = $local_profile ;
2016-01-28 19:18:18 -05:00
$profile = normalise_link ( $profile );
$profile_ssl = str_replace ( " http:// " , " https:// " , normalise_link ( $profile ));
2016-01-28 16:58:05 -05:00
// Only act if it is a "real" post
// We need the additional check for the "local_profile" because of mixed situations on connector networks
$item = q ( " SELECT `id`, `mention`, `tag`,`parent`, `title`, `body`, `author-name`, `author-link`, `author-avatar`, `guid`,
`parent-uri` , `uri` , `contact-id`
FROM `item` WHERE `id` = % d AND `verb` IN ( '%s' , '' ) AND `type` != 'activity' AND
2016-01-28 19:18:18 -05:00
NOT ( `author-link` IN ( '%s' , '%s' , '%s' )) LIMIT 1 " ,
intval ( $itemid ), dbesc ( ACTIVITY_POST ), dbesc ( $profile ), dbesc ( $profile_ssl ), dbesc ( $local_profile ));
2016-01-28 16:58:05 -05:00
if ( ! $item )
return false ;
// Generate the notification array
$params = array ();
$params [ " uid " ] = $uid ;
$params [ " notify_flags " ] = $user [ 0 ][ " notify-flags " ];
$params [ " language " ] = $user [ 0 ][ " language " ];
$params [ " to_name " ] = $user [ 0 ][ " username " ];
$params [ " to_email " ] = $user [ 0 ][ " email " ];
$params [ " item " ] = $item [ 0 ];
$params [ " parent " ] = $item [ 0 ][ " parent " ];
$params [ " link " ] = App :: get_baseurl () . '/display/' . urlencode ( $item [ 0 ][ " guid " ]);
$params [ " otype " ] = 'item' ;
$params [ " source_name " ] = $item [ 0 ][ " author-name " ];
$params [ " source_link " ] = $item [ 0 ][ " author-link " ];
$params [ " source_photo " ] = $item [ 0 ][ " author-avatar " ];
if ( $item [ 0 ][ " parent-uri " ] === $item [ 0 ][ " uri " ]) {
// Send a notification for every new post?
$r = q ( " SELECT `notify_new_posts` FROM `contact` WHERE `id` = %d AND `uid` = %d AND `notify_new_posts` LIMIT 1 " ,
intval ( $item [ 0 ][ 'contact-id' ]),
intval ( $uid )
);
$send_notification = count ( $r );
if ( ! $send_notification ) {
$tags = q ( " SELECT `url` FROM `term` WHERE `otype` = %d AND `oid` = %d AND `type` = %d AND `uid` = %d " ,
intval ( TERM_OBJ_POST ), intval ( $itemid ), intval ( TERM_MENTION ), intval ( $uid ));
if ( count ( $tags )) {
foreach ( $tags AS $tag ) {
$r = q ( " SELECT `id` FROM `contact` WHERE `nurl` = '%s' AND `uid` = %d AND `notify_new_posts` " ,
normalise_link ( $tag [ " url " ]), intval ( $uid ));
if ( count ( $r ))
$send_notification = true ;
}
}
}
if ( $send_notification ) {
$params [ " type " ] = NOTIFY_SHARE ;
$params [ " verb " ] = ACTIVITY_TAG ;
}
}
// Is the user mentioned in this post?
2016-01-28 19:18:18 -05:00
if ( $item [ 0 ][ " mention " ] OR strpos ( $item [ 0 ][ " tag " ], " = " . $profile . " ] " ) OR strpos ( $item [ 0 ][ " tag " ], " = " . $profile_ssl . " ] " ) OR
strpos ( $item [ 0 ][ " tag " ], " = " . $local_profile . " ] " ) OR ( $defaulttype == NOTIFY_TAGSELF )) {
2016-01-28 16:58:05 -05:00
$params [ " type " ] = NOTIFY_TAGSELF ;
$params [ " verb " ] = ACTIVITY_TAG ;
}
// Is it a post that the user had started or where he interacted?
$parent = q ( " SELECT `thread`.`iid` FROM `thread` INNER JOIN `item` ON `item`.`parent` = `thread`.`iid`
WHERE `thread` . `iid` = % d AND `thread` . `uid` = % d AND NOT `thread` . `ignored` AND
2016-01-28 19:18:18 -05:00
( `thread` . `mention` OR `item` . `author-link` IN ( '%s' , '%s' , '%s' ))
2016-01-28 16:58:05 -05:00
LIMIT 1 " ,
2016-01-28 19:18:18 -05:00
intval ( $item [ 0 ][ " parent " ]), intval ( $uid ),
dbesc ( $profile ), dbesc ( $profile_ssl ), dbesc ( $local_profile ));
2016-01-28 16:58:05 -05:00
if ( $parent AND ! isset ( $params [ " type " ])) {
$params [ " type " ] = NOTIFY_COMMENT ;
$params [ " verb " ] = ACTIVITY_POST ;
}
if ( isset ( $params [ " type " ]))
notification ( $params );
}
2012-02-25 19:56:14 -05:00
?>