2011-12-08 10:28:27 +01:00
< ? php
2017-11-20 21:37:30 +01:00
/**
* @ file include / enotify . php
*/
2018-01-25 03:08:45 +01:00
2018-02-15 03:33:55 +01:00
use Friendica\Content\Text\BBCode ;
2018-01-17 19:42:40 +01:00
use Friendica\Core\Addon ;
2017-11-07 03:22:52 +01:00
use Friendica\Core\Config ;
2018-01-21 17:38:01 +01:00
use Friendica\Core\L10n ;
2017-08-26 08:04:21 +02:00
use Friendica\Core\System ;
2017-11-08 04:57:46 +01:00
use Friendica\Database\DBM ;
2018-01-27 03:38:34 +01:00
use Friendica\Util\DateTimeFormat ;
2017-11-20 21:37:30 +01:00
use Friendica\Util\Emailer ;
2017-04-30 06:07:00 +02:00
2016-05-21 13:19:30 +02:00
/**
* @ brief Creates a notification entry and possibly sends a mail
*
* @ param array $params Array with the elements :
2018-03-19 10:15:09 +01:00
* uid , item , parent , type , otype , verb , event ,
* link , subject , body , to_name , to_email , source_name ,
* source_link , activity , preamble , notify_flags ,
* language , show_in_notification_page
2016-05-21 13:19:30 +02:00
*/
2018-01-04 03:12:19 +01:00
function notification ( $params )
{
2011-12-08 10:28:27 +01:00
$a = get_app ();
2012-03-26 10:43:26 +02:00
// from here on everything is in the recipients language
2018-01-21 17:38:01 +01:00
L10n :: pushLang ( $params [ 'language' ]);
2012-03-26 10:43:26 +02:00
2018-01-21 19:33:59 +01:00
$banner = L10n :: t ( 'Friendica Notification' );
2014-09-06 18:15:18 +02:00
$product = FRIENDICA_PLATFORM ;
2017-08-26 09:32:10 +02:00
$siteurl = System :: baseUrl ( true );
2018-01-21 19:33:59 +01:00
$thanks = L10n :: t ( 'Thank You,' );
2014-09-06 18:15:18 +02:00
$sitename = $a -> config [ 'sitename' ];
2018-01-04 03:12:19 +01:00
if ( ! x ( $a -> config [ 'admin_name' ])) {
2018-01-24 03:59:16 +01:00
$site_admin = L10n :: t ( '%s Administrator' , $sitename );
2018-01-04 03:12:19 +01:00
} else {
2018-01-24 03:59:16 +01:00
$site_admin = L10n :: t ( '%1$s, %2$s Administrator' , $a -> config [ 'admin_name' ], $sitename );
2018-01-04 03:12:19 +01:00
}
2014-09-06 18:15:18 +02:00
2015-01-31 18:44:30 +01:00
$sender_name = $sitename ;
2014-09-06 18:15:18 +02:00
$hostname = $a -> get_hostname ();
2018-01-04 03:12:19 +01:00
if ( strpos ( $hostname , ':' )) {
2016-05-21 13:19:30 +02:00
$hostname = substr ( $hostname , 0 , strpos ( $hostname , ':' ));
2018-01-04 03:12:19 +01:00
}
2015-04-16 07:18:06 +02:00
2018-04-07 03:47:42 +02:00
$sender_email = $a -> getSenderEmailAddress ();
2014-09-06 18:15:18 +02:00
2017-09-08 17:14:33 +02:00
if ( $params [ 'type' ] != SYSTEM_EMAIL ) {
2018-01-10 19:04:00 +01:00
$user = dba :: selectFirst ( 'user' , [ 'nickname' , 'page-flags' ],
[ 'uid' => $params [ 'uid' ]]);
2017-08-12 07:08:45 +02:00
2017-09-08 17:14:33 +02:00
// There is no need to create notifications for forum accounts
2018-01-15 14:05:12 +01:00
if ( ! DBM :: is_result ( $user ) || in_array ( $user [ " page-flags " ], [ PAGE_COMMUNITY , PAGE_PRVGROUP ])) {
2017-09-08 17:14:33 +02:00
return ;
}
2017-08-12 07:08:45 +02:00
}
$nickname = $user [ " nickname " ];
2014-12-23 00:55:36 +01:00
2014-09-06 18:15:18 +02: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
2016-09-30 14:57:16 +02:00
$show_in_notification_page = (( x ( $params , 'show_in_notification_page' )) ? $params [ 'show_in_notification_page' ] : true );
2014-09-06 18:15:18 +02:00
$additional_mail_header = " " ;
$additional_mail_header .= " Precedence: list \n " ;
$additional_mail_header .= " X-Friendica-Host: " . $hostname . " \n " ;
2014-12-23 00:55:36 +01:00
$additional_mail_header .= " X-Friendica-Account: < " . $nickname . " @ " . $hostname . " > \n " ;
2014-09-06 18:15:18 +02: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 " ;
2017-08-26 09:32:10 +02:00
$additional_mail_header .= " List-Archive: < " . System :: baseUrl () . " /notifications/system> \n " ;
2014-09-06 18:15:18 +02:00
2016-05-21 13:19:30 +02:00
if ( array_key_exists ( 'item' , $params )) {
2011-12-27 00:47:40 +01:00
$title = $params [ 'item' ][ 'title' ];
$body = $params [ 'item' ][ 'body' ];
2018-01-04 03:12:19 +01:00
} else {
2011-12-27 00:47:40 +01:00
$title = $body = '' ;
2018-01-04 03:12:19 +01:00
}
2011-12-24 08:07:05 +01:00
2018-01-04 03:12:19 +01:00
if ( isset ( $params [ 'item' ][ 'id' ])) {
2015-04-16 07:18:06 +02:00
$item_id = $params [ 'item' ][ 'id' ];
2018-01-04 03:12:19 +01:00
} else {
2015-04-16 07:18:06 +02:00
$item_id = 0 ;
2018-01-04 03:12:19 +01:00
}
2015-04-16 07:18:06 +02:00
2018-01-04 03:12:19 +01:00
if ( isset ( $params [ 'parent' ])) {
2015-04-14 06:54:41 +02:00
$parent_id = $params [ 'parent' ];
2018-01-04 03:12:19 +01:00
} else {
2015-04-14 06:54:41 +02:00
$parent_id = 0 ;
2018-01-04 03:12:19 +01:00
}
2015-04-14 06:54:41 +02:00
2016-05-21 13:19:30 +02:00
if ( $params [ 'type' ] == NOTIFY_MAIL ) {
2018-01-24 03:59:16 +01:00
$subject = L10n :: t ( '[Friendica:Notify] New mail received at %s' , $sitename );
2011-12-24 08:07:05 +01:00
2018-01-24 03:59:16 +01:00
$preamble = L10n :: t ( '%1$s sent you a new private message at %2$s.' , $params [ 'source_name' ], $sitename );
$epreamble = L10n :: t ( '%1$s sent you %2$s.' , '[url=' . $params [ 'source_link' ] . ']' . $params [ 'source_name' ] . '[/url]' , '[url=$itemlink]' . L10n :: t ( 'a private message' ) . '[/url]' );
2011-12-24 08:07:05 +01:00
2018-01-21 19:33:59 +01:00
$sitelink = L10n :: t ( 'Please visit %s to view and/or reply to your private messages.' );
2016-05-21 13:19:30 +02: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 23:16:25 +01:00
}
2016-05-21 13:19:30 +02:00
if ( $params [ 'type' ] == NOTIFY_COMMENT ) {
2018-01-11 09:26:30 +01:00
$thread = dba :: selectFirst ( 'thread' , [ 'ignored' ], [ 'iid' => $parent_id ]);
if ( DBM :: is_result ( $thread ) && $thread [ " ignored " ]) {
2014-09-04 00:58:52 +02:00
logger ( " Thread " . $parent_id . " will be ignored " , LOGGER_DEBUG );
return ;
}
2013-01-24 02:46:46 +01:00
// Check to see if there was already a tag notify or comment notify for this post.
2012-07-04 06:40:13 +02:00
// If so don't create a second notification
2017-01-05 00:12:28 +01:00
$p = q ( " SELECT `id` FROM `notify` WHERE `type` IN (%d, %d, %d) AND `link` = '%s' AND `uid` = %d LIMIT 1 " ,
2012-07-04 06:40:13 +02:00
intval ( NOTIFY_TAGSELF ),
2013-01-24 02:46:46 +01:00
intval ( NOTIFY_COMMENT ),
2014-01-05 16:10:02 +01:00
intval ( NOTIFY_SHARE ),
2012-07-04 06:40:13 +02:00
dbesc ( $params [ 'link' ]),
intval ( $params [ 'uid' ])
);
2017-06-09 03:03:44 +02:00
if ( $p && count ( $p )) {
2018-01-21 17:38:01 +01:00
L10n :: popLang ();
2012-07-04 06:40:13 +02:00
return ;
}
2014-01-05 16:10:02 +01:00
2012-03-01 03:19:08 +01:00
// if it's a post figure out who's post it is.
2018-01-11 09:26:30 +01:00
$item = null ;
2012-03-01 03:19:08 +01:00
2016-05-21 13:19:30 +02:00
if ( $params [ 'otype' ] === 'item' && $parent_id ) {
2018-01-11 09:26:30 +01:00
$item = dba :: selectFirst ( 'item' , [], [ 'id' => $parent_id ]);
2012-03-01 03:19:08 +01:00
}
2018-01-11 09:26:30 +01:00
$item_post_type = item_post_type ( $item );
2012-03-01 04:23:01 +01:00
// "a post"
2018-01-24 03:59:16 +01:00
$dest_str = L10n :: 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-03-01 04:23:01 +01:00
// "George Bull's post"
2018-01-11 09:26:30 +01:00
if ( $item ) {
2018-01-24 03:59:16 +01:00
$dest_str = L10n :: t ( '%1$s commented on [url=%2$s]%3$s\'s %4$s[/url]' ,
'[url=' . $params [ 'source_link' ] . ']' . $params [ 'source_name' ] . '[/url]' ,
$itemlink ,
$item [ 'author-name' ],
$item_post_type
);
2018-01-04 03:12:19 +01:00
}
2014-01-05 16:10:02 +01:00
2012-03-01 04:23:01 +01:00
// "your post"
2018-01-11 09:26:30 +01:00
if ( DBM :: is_result ( $item ) && $item [ 'owner-name' ] == $item [ 'author-name' ] && $item [ 'wall' ]) {
2018-01-24 03:59:16 +01:00
$dest_str = L10n :: t ( '%1$s commented on [url=%2$s]your %3$s[/url]' ,
'[url=' . $params [ 'source_link' ] . ']' . $params [ 'source_name' ] . '[/url]' ,
$itemlink ,
$item_post_type
);
2018-01-04 03:12:19 +01:00
}
2012-03-01 03:19:08 +01:00
2012-02-26 01:56:14 +01:00
// Some mail softwares relies on subject field for threading.
// So, we cannot have different subjects for notifications of the same thread.
2014-09-04 00:58:52 +02:00
// Before this we have the name of the replier on the subject rendering
2012-02-26 01:56:14 +01:00
// differents subjects for messages on the same thread.
2012-02-28 02:18:19 +01:00
2018-01-24 03:59:16 +01:00
$subject = L10n :: t ( '[Friendica:Notify] Comment to conversation #%1$d by %2$s' , $parent_id , $params [ 'source_name' ]);
2016-05-21 13:19:30 +02:00
2018-01-24 03:59:16 +01:00
$preamble = L10n :: t ( '%s commented on an item/conversation you have been following.' , $params [ 'source_name' ]);
2014-01-05 16:10:02 +01:00
$epreamble = $dest_str ;
2012-02-18 12:18:20 +01:00
2018-01-21 19:33:59 +01:00
$sitelink = L10n :: t ( 'Please visit %s to view and/or reply to the conversation.' );
2016-05-21 13:19:30 +02:00
$tsitelink = sprintf ( $sitelink , $siteurl );
$hsitelink = sprintf ( $sitelink , '<a href="' . $siteurl . '">' . $sitename . '</a>' );
2011-12-26 23:16:25 +01:00
$itemlink = $params [ 'link' ];
}
2016-05-21 13:19:30 +02:00
if ( $params [ 'type' ] == NOTIFY_WALL ) {
2018-01-24 03:59:16 +01:00
$subject = L10n :: t ( '[Friendica:Notify] %s posted to your profile wall' , $params [ 'source_name' ]);
2014-01-05 16:10:02 +01:00
2018-01-24 03:59:16 +01:00
$preamble = L10n :: t ( '%1$s posted to your profile wall at %2$s' , $params [ 'source_name' ], $sitename );
$epreamble = L10n :: t ( '%1$s posted to [url=%2$s]your wall[/url]' ,
'[url=' . $params [ 'source_link' ] . ']' . $params [ 'source_name' ] . '[/url]' ,
$params [ 'link' ]
);
2014-01-05 16:10:02 +01:00
2018-01-21 19:33:59 +01:00
$sitelink = L10n :: t ( 'Please visit %s to view and/or reply to the conversation.' );
2016-05-21 13:19:30 +02:00
$tsitelink = sprintf ( $sitelink , $siteurl );
$hsitelink = sprintf ( $sitelink , '<a href="' . $siteurl . '">' . $sitename . '</a>' );
2011-12-26 23:16:25 +01:00
$itemlink = $params [ 'link' ];
2011-12-08 10:28:27 +01:00
}
2016-05-21 13:19:30 +02:00
if ( $params [ 'type' ] == NOTIFY_TAGSELF ) {
2018-01-24 03:59:16 +01:00
$subject = L10n :: t ( '[Friendica:Notify] %s tagged you' , $params [ 'source_name' ]);
2016-05-21 13:19:30 +02:00
2018-01-24 03:59:16 +01:00
$preamble = L10n :: t ( '%1$s tagged you at %2$s' , $params [ 'source_name' ], $sitename );
$epreamble = L10n :: t ( '%1$s [url=%2$s]tagged you[/url].' ,
'[url=' . $params [ 'source_link' ] . ']' . $params [ 'source_name' ] . '[/url]' ,
$params [ 'link' ]
);
2014-01-05 16:10:02 +01:00
2018-01-21 19:33:59 +01:00
$sitelink = L10n :: t ( 'Please visit %s to view and/or reply to the conversation.' );
2016-05-21 13:19:30 +02:00
$tsitelink = sprintf ( $sitelink , $siteurl );
$hsitelink = sprintf ( $sitelink , '<a href="' . $siteurl . '">' . $sitename . '</a>' );
2014-01-05 16:10:02 +01:00
$itemlink = $params [ 'link' ];
}
2016-05-21 13:19:30 +02:00
if ( $params [ 'type' ] == NOTIFY_SHARE ) {
2018-01-24 03:59:16 +01:00
$subject = L10n :: t ( '[Friendica:Notify] %s shared a new post' , $params [ 'source_name' ]);
2016-05-21 13:19:30 +02:00
2018-01-24 03:59:16 +01:00
$preamble = L10n :: t ( '%1$s shared a new post at %2$s' , $params [ 'source_name' ], $sitename );
$epreamble = L10n :: t ( '%1$s [url=%2$s]shared a post[/url].' ,
'[url=' . $params [ 'source_link' ] . ']' . $params [ 'source_name' ] . '[/url]' ,
$params [ 'link' ]
);
2012-02-09 23:06:17 +01:00
2018-01-21 19:33:59 +01:00
$sitelink = L10n :: t ( 'Please visit %s to view and/or reply to the conversation.' );
2016-05-21 13:19:30 +02:00
$tsitelink = sprintf ( $sitelink , $siteurl );
$hsitelink = sprintf ( $sitelink , '<a href="' . $siteurl . '">' . $sitename . '</a>' );
2012-07-20 05:13:40 +02:00
$itemlink = $params [ 'link' ];
}
2016-05-21 13:19:30 +02:00
if ( $params [ 'type' ] == NOTIFY_POKE ) {
2018-01-24 03:59:16 +01:00
$subject = L10n :: t ( '[Friendica:Notify] %1$s poked you' , $params [ 'source_name' ]);
2012-07-20 05:13:40 +02:00
2018-01-24 03:59:16 +01:00
$preamble = L10n :: t ( '%1$s poked you at %2$s' , $params [ 'source_name' ], $sitename );
$epreamble = L10n :: t ( '%1$s [url=%2$s]poked you[/url].' ,
'[url=' . $params [ 'source_link' ] . ']' . $params [ 'source_name' ] . '[/url]' ,
$params [ 'link' ]
);
2012-07-20 05:13:40 +02:00
2018-01-21 19:33:59 +01:00
$subject = str_replace ( 'poked' , L10n :: t ( $params [ 'activity' ]), $subject );
$preamble = str_replace ( 'poked' , L10n :: t ( $params [ 'activity' ]), $preamble );
$epreamble = str_replace ( 'poked' , L10n :: t ( $params [ 'activity' ]), $epreamble );
2012-07-20 05:13:40 +02:00
2018-01-21 19:33:59 +01:00
$sitelink = L10n :: t ( 'Please visit %s to view and/or reply to the conversation.' );
2016-05-21 13:19:30 +02:00
$tsitelink = sprintf ( $sitelink , $siteurl );
$hsitelink = sprintf ( $sitelink , '<a href="' . $siteurl . '">' . $sitename . '</a>' );
2012-02-09 23:06:17 +01:00
$itemlink = $params [ 'link' ];
}
2016-05-21 13:19:30 +02:00
if ( $params [ 'type' ] == NOTIFY_TAGSHARE ) {
2018-01-24 03:59:16 +01:00
$subject = L10n :: t ( '[Friendica:Notify] %s tagged your post' , $params [ 'source_name' ]);
2016-05-21 13:19:30 +02:00
2018-01-24 03:59:16 +01:00
$preamble = L10n :: t ( '%1$s tagged your post at %2$s' , $params [ 'source_name' ], $sitename );
$epreamble = L10n :: t ( '%1$s tagged [url=%2$s]your post[/url]' ,
'[url=' . $params [ 'source_link' ] . ']' . $params [ 'source_name' ] . '[/url]' ,
$itemlink
);
2012-02-09 23:06:17 +01:00
2018-01-21 19:33:59 +01:00
$sitelink = L10n :: t ( 'Please visit %s to view and/or reply to the conversation.' );
2016-05-21 13:19:30 +02:00
$tsitelink = sprintf ( $sitelink , $siteurl );
$hsitelink = sprintf ( $sitelink , '<a href="' . $siteurl . '">' . $sitename . '</a>' );
2012-02-09 23:06:17 +01:00
$itemlink = $params [ 'link' ];
}
2016-05-21 13:19:30 +02:00
if ( $params [ 'type' ] == NOTIFY_INTRO ) {
2018-01-24 03:59:16 +01:00
$subject = L10n :: t ( '[Friendica:Notify] Introduction received' );
2016-05-21 13:19:30 +02:00
2018-01-24 03:59:16 +01:00
$preamble = L10n :: t ( 'You\'ve received an introduction from \'%1$s\' at %2$s' , $params [ 'source_name' ], $sitename );
$epreamble = L10n :: t ( 'You\'ve received [url=%1$s]an introduction[/url] from %2$s.' ,
$itemlink ,
'[url=' . $params [ 'source_link' ] . ']' . $params [ 'source_name' ] . '[/url]'
);
2016-05-21 13:19:30 +02:00
2018-01-24 03:59:16 +01:00
$body = L10n :: t ( 'You may visit their profile at %s' , $params [ 'source_link' ]);
2011-12-27 00:47:40 +01:00
2018-01-21 19:33:59 +01:00
$sitelink = L10n :: t ( 'Please visit %s to approve or reject the introduction.' );
2016-05-21 13:19:30 +02:00
$tsitelink = sprintf ( $sitelink , $siteurl );
$hsitelink = sprintf ( $sitelink , '<a href="' . $siteurl . '">' . $sitename . '</a>' );
2011-12-27 00:47:40 +01:00
$itemlink = $params [ 'link' ];
2014-09-06 18:15:18 +02:00
switch ( $params [ 'verb' ]) {
case ACTIVITY_FRIEND :
// someone started to share with user (mostly OStatus)
2018-01-24 03:59:16 +01:00
$subject = L10n :: t ( '[Friendica:Notify] A new person is sharing with you' );
2016-05-21 13:19:30 +02:00
2018-01-24 03:59:16 +01:00
$preamble = L10n :: t ( '%1$s is sharing with you at %2$s' , $params [ 'source_name' ], $sitename );
$epreamble = L10n :: t ( '%1$s is sharing with you at %2$s' ,
'[url=' . $params [ 'source_link' ] . ']' . $params [ 'source_name' ] . '[/url]' ,
$sitename
);
2014-09-06 18:15:18 +02:00
break ;
case ACTIVITY_FOLLOW :
// someone started to follow the user (mostly OStatus)
2018-01-24 03:59:16 +01:00
$subject = L10n :: t ( '[Friendica:Notify] You have a new follower' );
2016-05-21 13:19:30 +02:00
2018-01-24 03:59:16 +01:00
$preamble = L10n :: t ( 'You have a new follower at %2$s : %1$s' , $params [ 'source_name' ], $sitename );
$epreamble = L10n :: t ( 'You have a new follower at %2$s : %1$s' ,
'[url=' . $params [ 'source_link' ] . ']' . $params [ 'source_name' ] . '[/url]' ,
$sitename
);
2014-09-06 18:15:18 +02:00
break ;
default :
2014-09-07 10:27:39 +02:00
// ACTIVITY_REQ_FRIEND is default activity for notifications
2014-09-06 18:15:18 +02:00
break ;
}
2011-12-27 00:47:40 +01:00
}
2016-05-21 13:19:30 +02:00
if ( $params [ 'type' ] == NOTIFY_SUGGEST ) {
2018-01-24 03:59:16 +01:00
$subject = L10n :: t ( '[Friendica:Notify] Friend suggestion received' );
2016-05-21 13:19:30 +02:00
2018-01-24 03:59:16 +01:00
$preamble = L10n :: t ( 'You\'ve received a friend suggestion from \'%1$s\' at %2$s' , $params [ 'source_name' ], $sitename );
$epreamble = L10n :: 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]' ,
'[url=' . $params [ 'source_link' ] . ']' . $params [ 'source_name' ] . '[/url]'
);
2014-08-21 00:53:01 +02:00
2018-01-21 19:33:59 +01:00
$body = L10n :: t ( 'Name:' ) . ' ' . $params [ 'item' ][ 'name' ] . " \n " ;
$body .= L10n :: t ( 'Photo:' ) . ' ' . $params [ 'item' ][ 'photo' ] . " \n " ;
2018-01-24 03:59:16 +01:00
$body .= L10n :: t ( 'You may visit their profile at %s' , $params [ 'item' ][ 'url' ]);
2012-01-04 02:29:07 +01:00
2018-01-21 19:33:59 +01:00
$sitelink = L10n :: t ( 'Please visit %s to approve or reject the suggestion.' );
2016-05-21 13:19:30 +02:00
$tsitelink = sprintf ( $sitelink , $siteurl );
$hsitelink = sprintf ( $sitelink , '<a href="' . $siteurl . '">' . $sitename . '</a>' );
2012-01-04 02:29:07 +01:00
$itemlink = $params [ 'link' ];
}
2016-05-21 13:19:30 +02:00
if ( $params [ 'type' ] == NOTIFY_CONFIRM ) {
if ( $params [ 'verb' ] == ACTIVITY_FRIEND ) { // mutual connection
2018-01-24 03:59:16 +01:00
$subject = L10n :: t ( '[Friendica:Notify] Connection accepted' );
2014-09-06 18:15:18 +02:00
2018-01-24 03:59:16 +01:00
$preamble = L10n :: t ( '\'%1$s\' has accepted your connection request at %2$s' , $params [ 'source_name' ], $sitename );
$epreamble = L10n :: t ( '%2$s has accepted your [url=%1$s]connection request[/url].' ,
$itemlink ,
'[url=' . $params [ 'source_link' ] . ']' . $params [ 'source_name' ] . '[/url]'
);
2016-05-21 13:19:30 +02:00
2018-01-21 19:33:59 +01:00
$body = L10n :: t ( 'You are now mutual friends and may exchange status updates, photos, and email without restriction.' );
2016-05-21 13:19:30 +02:00
2018-01-21 19:33:59 +01:00
$sitelink = L10n :: t ( 'Please visit %s if you wish to make any changes to this relationship.' );
2016-05-21 13:19:30 +02:00
$tsitelink = sprintf ( $sitelink , $siteurl );
$hsitelink = sprintf ( $sitelink , '<a href="' . $siteurl . '">' . $sitename . '</a>' );
2014-09-06 18:15:18 +02:00
$itemlink = $params [ 'link' ];
} else { // ACTIVITY_FOLLOW
2018-01-24 03:59:16 +01:00
$subject = L10n :: t ( '[Friendica:Notify] Connection accepted' );
2016-05-21 13:19:30 +02:00
2018-01-24 03:59:16 +01:00
$preamble = L10n :: t ( '\'%1$s\' has accepted your connection request at %2$s' , $params [ 'source_name' ], $sitename );
$epreamble = L10n :: t ( '%2$s has accepted your [url=%1$s]connection request[/url].' ,
$itemlink ,
'[url=' . $params [ 'source_link' ] . ']' . $params [ 'source_name' ] . '[/url]'
);
2016-05-21 13:19:30 +02:00
2018-01-24 22:51:32 +01:00
$body = L10n :: 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' ]);
2014-09-06 18:15:18 +02:00
$body .= " \n \n " ;
2018-01-24 03:59:16 +01:00
$body .= L10n :: t ( '\'%1$s\' may choose to extend this into a two-way or more permissive relationship in the future.' , $params [ 'source_name' ]);
2014-09-06 18:15:18 +02:00
2018-01-21 19:33:59 +01:00
$sitelink = L10n :: t ( 'Please visit %s if you wish to make any changes to this relationship.' );
2016-05-21 13:19:30 +02:00
$tsitelink = sprintf ( $sitelink , $siteurl );
$hsitelink = sprintf ( $sitelink , '<a href="' . $siteurl . '">' . $sitename . '</a>' );
2014-09-06 18:15:18 +02:00
$itemlink = $params [ 'link' ];
}
2012-03-25 13:37:09 +02:00
}
2016-05-21 13:19:30 +02:00
if ( $params [ 'type' ] == NOTIFY_SYSTEM ) {
2014-09-07 13:55:02 +02:00
switch ( $params [ 'event' ]) {
case " SYSTEM_REGISTER_REQUEST " :
2018-04-15 11:39:05 +02:00
$subject = L10n :: t ( '[Friendica System Notify]' ) . ' ' . L10n :: t ( 'registration request' );
2016-05-21 13:19:30 +02:00
2018-01-24 03:59:16 +01:00
$preamble = L10n :: t ( 'You\'ve received a registration request from \'%1$s\' at %2$s' , $params [ 'source_name' ], $sitename );
$epreamble = L10n :: t ( 'You\'ve received a [url=%1$s]registration request[/url] from %2$s.' ,
$itemlink ,
'[url=' . $params [ 'source_link' ] . ']' . $params [ 'source_name' ] . '[/url]'
);
2018-03-19 10:15:09 +01:00
$body = L10n :: t ( 'Full Name: %1$s\nSite Location: %2$s\nLogin Name: %3$s ' . " \x28 " . '%4$s' . " \x29 " ,
2018-01-24 03:59:16 +01:00
$params [ 'source_name' ],
$siteurl , $params [ 'source_mail' ],
$params [ 'source_nick' ]
);
2014-09-07 13:55:02 +02:00
2018-01-21 19:33:59 +01:00
$sitelink = L10n :: t ( 'Please visit %s to approve or reject the request.' );
2016-05-21 13:19:30 +02:00
$tsitelink = sprintf ( $sitelink , $params [ 'link' ]);
$hsitelink = sprintf ( $sitelink , '<a href="' . $params [ 'link' ] . '">' . $sitename . '</a><br><br>' );
2014-09-07 13:55:02 +02:00
$itemlink = $params [ 'link' ];
break ;
case " SYSTEM_DB_UPDATE_FAIL " :
break ;
}
2014-09-07 10:27:39 +02:00
}
2017-09-08 17:14:33 +02:00
if ( $params [ 'type' ] == SYSTEM_EMAIL ) {
2014-09-07 10:27:39 +02:00
// 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)
2016-05-21 13:19:30 +02:00
$subject = $params [ 'subject' ];
$preamble = $params [ 'preamble' ];
$body = $params [ 'body' ];
$sitelink = " " ;
$tsitelink = " " ;
$hsitelink = " " ;
$itemlink = " " ;
$show_in_notification_page = false ;
2011-12-27 00:47:40 +01:00
}
2014-12-23 00:55:36 +01:00
$subject .= " ( " . $nickname . " @ " . $hostname . " ) " ;
2014-09-06 15:52:53 +02:00
2018-01-15 14:05:12 +01:00
$h = [
2014-09-04 00:58:52 +02:00
'params' => $params ,
2012-03-25 14:06:11 +02:00
'subject' => $subject ,
2014-09-04 00:58:52 +02:00
'preamble' => $preamble ,
'epreamble' => $epreamble ,
'body' => $body ,
2012-03-25 14:06:11 +02:00
'sitelink' => $sitelink ,
'tsitelink' => $tsitelink ,
'hsitelink' => $hsitelink ,
'itemlink' => $itemlink
2018-01-15 14:05:12 +01:00
];
2014-08-21 00:53:01 +02:00
2018-01-17 19:42:40 +01:00
Addon :: callHooks ( 'enotify' , $h );
2012-03-25 14:06:11 +02:00
$subject = $h [ 'subject' ];
2016-05-21 13:19:30 +02:00
2012-03-25 14:06:11 +02:00
$preamble = $h [ 'preamble' ];
$epreamble = $h [ 'epreamble' ];
2016-05-21 13:19:30 +02:00
2012-03-25 14:06:11 +02:00
$body = $h [ 'body' ];
2016-05-21 13:19:30 +02:00
2012-03-25 14:06:11 +02:00
$tsitelink = $h [ 'tsitelink' ];
$hsitelink = $h [ 'hsitelink' ];
2014-03-11 23:52:32 +01:00
$itemlink = $h [ 'itemlink' ];
2012-03-25 14:06:11 +02:00
2014-09-07 10:27:39 +02:00
if ( $show_in_notification_page ) {
2014-09-07 13:55:02 +02:00
logger ( " adding notification entry " , LOGGER_DEBUG );
2014-09-06 18:15:18 +02:00
do {
$dups = false ;
$hash = random_string ();
$r = q ( " SELECT `id` FROM `notify` WHERE `hash` = '%s' LIMIT 1 " ,
dbesc ( $hash ));
2017-11-08 04:57:46 +01:00
if ( DBM :: is_result ( $r )) {
2014-09-06 18:15:18 +02:00
$dups = true ;
2017-04-04 19:47:32 +02:00
}
} while ( $dups == true );
2012-02-18 11:57:42 +01:00
2017-04-04 19:47:32 +02:00
/// @TODO One statement is enough
2018-01-15 14:05:12 +01:00
$datarray = [];
2014-09-06 18:15:18 +02:00
$datarray [ 'hash' ] = $hash ;
$datarray [ 'name' ] = $params [ 'source_name' ];
2018-02-15 03:33:55 +01:00
$datarray [ 'name_cache' ] = strip_tags ( BBCode :: convert ( $params [ 'source_name' ]));
2014-09-06 18:15:18 +02:00
$datarray [ 'url' ] = $params [ 'source_link' ];
$datarray [ 'photo' ] = $params [ 'source_photo' ];
2018-01-27 03:38:34 +01:00
$datarray [ 'date' ] = DateTimeFormat :: utcNow ();
2014-09-06 18:15:18 +02:00
$datarray [ 'uid' ] = $params [ 'uid' ];
$datarray [ 'link' ] = $itemlink ;
2015-04-16 07:18:06 +02:00
$datarray [ 'iid' ] = $item_id ;
2014-09-06 18:15:18 +02:00
$datarray [ 'parent' ] = $parent_id ;
$datarray [ 'type' ] = $params [ 'type' ];
$datarray [ 'verb' ] = $params [ 'verb' ];
$datarray [ 'otype' ] = $params [ 'otype' ];
$datarray [ 'abort' ] = false ;
2012-02-21 04:50:05 +01:00
2018-01-17 19:42:40 +01:00
Addon :: callHooks ( 'enotify_store' , $datarray );
2013-02-08 08:43:55 +01:00
2016-05-21 13:19:30 +02:00
if ( $datarray [ 'abort' ]) {
2018-01-21 17:38:01 +01:00
L10n :: popLang ();
2014-09-06 18:15:18 +02:00
return False ;
2013-02-08 08:43:55 +01:00
}
2014-09-06 18:15:18 +02:00
// create notification entry in DB
2018-01-04 03:12:19 +01:00
q ( " INSERT INTO `notify` (`hash`, `name`, `url`, `photo`, `date`, `uid`, `link`, `iid`, `parent`, `type`, `verb`, `otype`, `name_cache`)
2016-11-03 14:00:20 +01:00
values ( '%s' , '%s' , '%s' , '%s' , '%s' , % d , '%s' , % d , % d , % d , '%s' , '%s' , '%s' ) " ,
2014-09-06 18:15:18 +02: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 07:18:06 +02:00
intval ( $datarray [ 'iid' ]),
2014-09-06 18:15:18 +02:00
intval ( $datarray [ 'parent' ]),
intval ( $datarray [ 'type' ]),
dbesc ( $datarray [ 'verb' ]),
2016-10-28 12:28:16 +02:00
dbesc ( $datarray [ 'otype' ]),
dbesc ( $datarray [ " name_cache " ])
2014-09-06 18:15:18 +02:00
);
2013-02-08 08:43:55 +01:00
2016-05-21 13:19:30 +02:00
$r = q ( " SELECT `id` FROM `notify` WHERE `hash` = '%s' AND `uid` = %d LIMIT 1 " ,
2014-09-06 18:15:18 +02:00
dbesc ( $hash ),
intval ( $params [ 'uid' ])
);
2018-01-04 03:12:19 +01:00
if ( $r ) {
2014-09-06 18:15:18 +02:00
$notify_id = $r [ 0 ][ 'id' ];
2018-01-04 03:12:19 +01:00
} else {
2018-01-21 17:38:01 +01:00
L10n :: popLang ();
2014-09-06 15:52:53 +02:00
return False ;
2013-02-08 08:43:55 +01:00
}
2014-09-06 18:15:18 +02: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
2017-01-05 00:12:28 +01:00
$p = q ( " SELECT `id` FROM `notify` WHERE `type` IN (%d, %d) AND `link` = '%s' AND `uid` = %d ORDER BY `id` " ,
2014-09-06 18:15:18 +02:00
intval ( NOTIFY_TAGSELF ),
intval ( NOTIFY_COMMENT ),
dbesc ( $params [ 'link' ]),
intval ( $params [ 'uid' ])
);
2016-05-21 13:19:30 +02:00
if ( $p && ( count ( $p ) > 1 )) {
2014-09-06 18:15:18 +02:00
for ( $d = 1 ; $d < count ( $p ); $d ++ ) {
2018-01-15 14:05:12 +01:00
dba :: delete ( 'notify' , [ 'id' => $p [ $d ][ 'id' ]]);
2014-09-06 18:15:18 +02:00
}
// only continue on if we stored the first one
2016-05-21 13:19:30 +02:00
if ( $notify_id != $p [ 0 ][ 'id' ]) {
2018-01-21 17:38:01 +01:00
L10n :: popLang ();
return false ;
2014-09-06 18:15:18 +02:00
}
}
2014-03-11 23:52:32 +01:00
2017-08-26 09:32:10 +02:00
$itemlink = System :: baseUrl () . '/notify/view/' . $notify_id ;
2018-01-15 14:05:12 +01:00
$msg = replace_macros ( $epreamble , [ '$itemlink' => $itemlink ]);
2018-02-15 03:33:55 +01:00
$msg_cache = format_notification_message ( $datarray [ 'name_cache' ], strip_tags ( BBCode :: convert ( $msg )));
2018-01-04 15:51:05 +01:00
q ( " UPDATE `notify` SET `msg` = '%s', `msg_cache` = '%s' WHERE `id` = %d AND `uid` = %d " ,
2014-09-06 18:15:18 +02:00
dbesc ( $msg ),
2016-10-28 12:28:16 +02:00
dbesc ( $msg_cache ),
2014-09-06 18:15:18 +02:00
intval ( $notify_id ),
intval ( $params [ 'uid' ])
);
}
// send email notification if notification preferences permit
2016-05-21 13:19:30 +02:00
if (( intval ( $params [ 'notify_flags' ]) & intval ( $params [ 'type' ]))
2014-09-07 10:27:39 +02:00
|| $params [ 'type' ] == NOTIFY_SYSTEM
2017-09-08 17:14:33 +02:00
|| $params [ 'type' ] == SYSTEM_EMAIL ) {
2011-12-24 08:07:05 +01:00
2014-09-07 10:27:39 +02:00
logger ( 'sending notification email' );
2011-12-24 08:07:05 +01:00
2017-06-08 04:00:59 +02:00
if ( isset ( $params [ 'parent' ]) && ( intval ( $params [ 'parent' ]) != 0 )) {
2014-08-21 00:53:01 +02:00
$id_for_parent = $params [ 'parent' ] . " @ " . $hostname ;
2012-02-26 01:56:14 +01:00
2014-08-21 00:53:01 +02:00
// Is this the first email notification for this parent item and user?
2012-02-26 01:56:14 +01:00
2016-05-21 13:19:30 +02:00
$r = q ( " SELECT `id` FROM `notify-threads` WHERE `master-parent-item` = %d AND `receiver-uid` = %d LIMIT 1 " ,
2012-02-26 01:56:14 +01:00
intval ( $params [ 'parent' ]),
2016-05-21 13:19:30 +02:00
intval ( $params [ 'uid' ]));
2014-08-21 00:53:01 +02:00
// If so, create the record of it and use a message-id smtp header.
2016-05-21 13:19:30 +02:00
if ( ! $r ) {
2014-08-21 00:53:01 +02:00
logger ( " notify_id: " . intval ( $notify_id ) . " , parent: " . intval ( $params [ 'parent' ]) . " uid: " . intval ( $params [ 'uid' ]), LOGGER_DEBUG );
2018-01-04 03:12:19 +01:00
q ( " INSERT INTO `notify-threads` (`notify-id`, `master-parent-item`, `receiver-uid`, `parent-item`)
2016-05-21 13:19:30 +02:00
values ( % d , % d , % d , % d ) " ,
2014-08-21 00:53:01 +02:00
intval ( $notify_id ),
intval ( $params [ 'parent' ]),
2014-09-04 00:58:52 +02:00
intval ( $params [ 'uid' ]),
2016-05-21 13:19:30 +02:00
0 );
2014-08-21 00:53:01 +02:00
$additional_mail_header .= " Message-ID: < ${ id_for_parent } > \n " ;
2016-05-21 13:19:30 +02:00
$log_msg = " include/enotify: No previous notification found for this parent: \n " .
" parent: ${ params['parent'] } \n " . " uid : ${ params['uid'] } \n " ;
2014-08-21 00:53:01 +02:00
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 " ;
2016-05-21 13:19:30 +02:00
logger ( " There's already a notification for this parent: \n " . print_r ( $r , true ), LOGGER_DEBUG );
2014-08-21 00:53:01 +02:00
}
2012-02-26 01:56:14 +01:00
}
2014-09-07 10:27:39 +02:00
// textversion keeps linebreaks