2011-12-08 10:28:27 +01:00
< ? php
2017-11-20 21:37:30 +01:00
/**
2021-03-29 08:40:20 +02:00
* @ copyright Copyright ( C ) 2010 - 2021 , the Friendica project
2020-02-09 16:18:46 +01:00
*
* @ license GNU AGPL version 3 or any later version
*
* This program is free software : you can redistribute it and / or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation , either version 3 of the
* License , or ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU Affero General Public License for more details .
*
* You should have received a copy of the GNU Affero General Public License
* along with this program . If not , see < https :// www . gnu . org / licenses />.
*
2017-11-20 21:37:30 +01:00
*/
2018-01-25 03:08:45 +01:00
2018-02-15 03:33:55 +01:00
use Friendica\Content\Text\BBCode ;
2021-01-30 23:03:53 +01:00
use Friendica\Content\Text\Plaintext ;
2018-12-26 07:06:24 +01:00
use Friendica\Core\Hook ;
2018-10-29 22:20:46 +01:00
use Friendica\Core\Logger ;
2018-10-31 15:35:50 +01:00
use Friendica\Core\Renderer ;
2017-08-26 08:04:21 +02:00
use Friendica\Core\System ;
2018-07-20 14:19:26 +02:00
use Friendica\Database\DBA ;
2019-12-16 00:47:24 +01:00
use Friendica\DI ;
2020-11-25 20:56:39 +01:00
use Friendica\Model\Contact ;
2018-07-20 04:15:21 +02:00
use Friendica\Model\Item ;
2021-01-23 10:53:44 +01:00
use Friendica\Model\Notification ;
2021-01-16 05:11:28 +01:00
use Friendica\Model\Post ;
2019-01-21 17:38:01 +01:00
use Friendica\Model\User ;
2019-10-24 00:25:43 +02:00
use Friendica\Protocol\Activity ;
2017-04-30 06:07:00 +02:00
2016-05-21 13:19:30 +02:00
/**
2020-01-19 07:05:23 +01:00
* Creates a notification entry and possibly sends a mail
2016-05-21 13:19:30 +02:00
*
* @ param array $params Array with the elements :
2020-11-25 20:56:39 +01:00
* type , event , otype , activity , verb , uid , cid , origin_cid , item , link ,
* source_name , source_mail , source_nick , source_link , source_photo ,
* show_in_notification_page
2021-05-09 13:54:34 +02:00
*
2019-01-21 17:36:01 +01:00
* @ return bool
2019-01-07 16:24:06 +01:00
* @ throws \Friendica\Network\HTTPException\InternalServerErrorException
2016-05-21 13:19:30 +02:00
*/
2018-01-04 03:12:19 +01:00
function notification ( $params )
{
2020-02-04 22:30:34 +01:00
/** @var string the common prefix of a notification subject */
2020-02-05 22:22:12 +01:00
$subjectPrefix = DI :: l10n () -> t ( '[Friendica:Notify]' );
2020-02-04 22:30:34 +01:00
2018-08-02 07:21:01 +02:00
// Temporary logging for finding the origin
2019-02-23 05:00:16 +01:00
if ( ! isset ( $params [ 'uid' ])) {
Logger :: notice ( 'Missing parameters "uid".' , [ 'params' => $params , 'callstack' => System :: callstack ()]);
2018-08-02 07:21:01 +02:00
}
2018-08-23 10:00:25 +02:00
// Ensure that the important fields are set at any time
2020-11-25 20:56:39 +01:00
$fields = [ 'nickname' , 'page-flags' , 'notify-flags' , 'language' , 'username' , 'email' ];
2018-08-23 10:00:25 +02:00
$user = DBA :: selectFirst ( 'user' , $fields , [ 'uid' => $params [ 'uid' ]]);
if ( ! DBA :: isResult ( $user )) {
2019-02-23 05:00:16 +01:00
Logger :: error ( 'Unknown user' , [ 'uid' => $params [ 'uid' ]]);
2019-01-21 17:36:01 +01:00
return false ;
2018-08-23 10:00:25 +02:00
}
2020-11-25 20:56:39 +01:00
// There is no need to create notifications for forum accounts
if ( in_array ( $user [ 'page-flags' ], [ User :: PAGE_FLAGS_COMMUNITY , User :: PAGE_FLAGS_PRVGROUP ])) {
return false ;
}
$nickname = $user [ 'nickname' ];
$params [ 'notify_flags' ] = $user [ 'notify-flags' ];
$params [ 'language' ] = $user [ 'language' ];
$params [ 'to_name' ] = $user [ 'username' ];
$params [ 'to_email' ] = $user [ 'email' ];
2018-08-23 10:00:25 +02:00
2012-03-26 10:43:26 +02:00
// from here on everything is in the recipients language
2020-01-18 20:54:15 +01:00
$l10n = DI :: l10n () -> withLang ( $params [ 'language' ]);
2012-03-26 10:43:26 +02:00
2020-11-25 20:56:39 +01:00
if ( ! empty ( $params [ 'cid' ])) {
$contact = Contact :: getById ( $params [ 'cid' ], [ 'url' , 'name' , 'photo' ]);
if ( DBA :: isResult ( $contact )) {
$params [ 'source_link' ] = $contact [ 'url' ];
$params [ 'source_name' ] = $contact [ 'name' ];
$params [ 'source_photo' ] = $contact [ 'photo' ];
}
}
if ( ! empty ( $params [ 'origin_cid' ])) {
$contact = Contact :: getById ( $params [ 'origin_cid' ], [ 'url' , 'name' , 'photo' ]);
if ( DBA :: isResult ( $contact )) {
$params [ 'origin_link' ] = $contact [ 'url' ];
$params [ 'origin_name' ] = $contact [ 'name' ];
$params [ 'origin_photo' ] = $contact [ 'photo' ];
}
}
2019-12-30 23:02:20 +01:00
$siteurl = DI :: baseUrl () -> get ( true );
2020-01-19 21:21:13 +01:00
$sitename = DI :: config () -> get ( 'config' , 'sitename' );
2014-09-06 18:15:18 +02:00
2019-12-16 00:47:24 +01:00
$hostname = DI :: baseUrl () -> getHostname ();
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
2020-09-19 20:14:55 +02:00
// Creates a new email builder for the notification email
$emailBuilder = DI :: emailer () -> newNotifyMail ();
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
2018-10-14 17:30:39 +02:00
$show_in_notification_page = isset ( $params [ 'show_in_notification_page' ]) ? $params [ 'show_in_notification_page' ] : true ;
2014-09-06 18:15:18 +02:00
2020-09-19 20:14:55 +02:00
$emailBuilder -> setHeader ( 'X-Friendica-Account' , '<' . $nickname . '@' . $hostname . '>' );
2014-09-06 18:15:18 +02:00
2020-11-25 20:56:39 +01:00
$title = $params [ 'item' ][ 'title' ] ? ? '' ;
$body = $params [ 'item' ][ 'body' ] ? ? '' ;
2015-04-14 06:54:41 +02:00
2020-11-25 20:56:39 +01:00
$item_id = $params [ 'item' ][ 'id' ] ? ? 0 ;
$uri_id = $params [ 'item' ][ 'uri-id' ] ? ? 0 ;
$parent_id = $params [ 'item' ][ 'parent' ] ? ? 0 ;
$parent_uri_id = $params [ 'item' ][ 'parent-uri-id' ] ? ? 0 ;
2020-05-02 15:12:11 +02:00
2018-08-02 07:21:01 +02:00
$epreamble = '' ;
2019-01-07 18:51:48 +01:00
$preamble = '' ;
$subject = '' ;
$sitelink = '' ;
$tsitelink = '' ;
$hsitelink = '' ;
$itemlink = '' ;
2018-08-02 07:21:01 +02:00
2021-01-23 10:53:44 +01:00
if ( $params [ 'type' ] == Notification\Type :: MAIL ) {
2020-11-25 20:56:39 +01:00
$itemlink = $params [ 'link' ];
2018-07-10 14:27:56 +02:00
2020-02-09 22:42:51 +01:00
$subject = $l10n -> t ( '%s New mail received at %s' , $subjectPrefix , $sitename );
2011-12-24 08:07:05 +01:00
2019-12-28 23:12:01 +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
2019-12-28 23:12:01 +01:00
$sitelink = $l10n -> t ( 'Please visit %s to view and/or reply to your private messages.' );
2020-11-25 20:56:39 +01:00
$tsitelink = sprintf ( $sitelink , $itemlink );
$hsitelink = sprintf ( $sitelink , '<a href="' . $itemlink . '">' . $sitename . '</a>' );
// Mail notifications aren't using the "notify" table entry
$show_in_notification_page = false ;
2011-12-26 23:16:25 +01:00
}
2021-01-23 10:53:44 +01:00
if ( $params [ 'type' ] == Notification\Type :: COMMENT || $params [ 'type' ] == Notification\Type :: TAG_SELF ) {
2021-02-01 00:37:34 +01:00
if ( Post\ThreadUser :: getIgnored ( $parent_uri_id , $params [ 'uid' ])) {
Logger :: info ( 'Thread is ignored' , [ 'parent' => $parent_id , 'parent-uri-id' => $parent_uri_id ]);
2019-01-21 17:36:01 +01:00
return false ;
2014-09-04 00:58:52 +02:00
}
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
2020-01-08 22:48:59 +01:00
/// @todo In the future we should store the notification with the highest "value" and replace notifications
2021-01-23 10:53:44 +01:00
$condition = [ 'type' => [ Notification\Type :: TAG_SELF , Notification\Type :: COMMENT , Notification\Type :: SHARE ],
2018-08-19 14:46:11 +02:00
'link' => $params [ 'link' ], 'uid' => $params [ 'uid' ]];
if ( DBA :: exists ( 'notify' , $condition )) {
2019-01-21 17:36:01 +01:00
return false ;
2012-07-04 06:40:13 +02:00
}
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 ;
2021-01-23 10:53:44 +01:00
if ( $params [ 'otype' ] === Notification\ObjectType :: ITEM && $parent_id ) {
2021-01-16 23:37:27 +01:00
$item = Post :: selectFirstForUser ( $params [ 'uid' ], Item :: ITEM_FIELDLIST , [ 'id' => $parent_id , 'deleted' => false ]);
2012-03-01 03:19:08 +01:00
}
2020-01-08 22:48:59 +01:00
if ( empty ( $item )) {
return false ;
}
2021-03-07 08:39:13 +01:00
$item_post_type = Item :: postType ( $item , $l10n );
2012-03-01 04:23:01 +01:00
2021-01-30 23:03:53 +01:00
$content = Plaintext :: getPost ( $item , 70 );
2020-01-08 22:48:59 +01:00
if ( ! empty ( $content [ 'text' ])) {
$title = '"' . trim ( str_replace ( " \n " , " " , $content [ 'text' ])) . '"' ;
2019-01-06 02:25:05 +01:00
} else {
2020-01-08 22:48:59 +01:00
$title = '' ;
2019-01-06 02:25:05 +01:00
}
2020-01-08 22:48:59 +01:00
// First go for the general message
2019-01-06 02:25:05 +01:00
// "George Bull's post"
2020-01-08 23:36:31 +01:00
if ( $params [ 'activity' ][ 'origin_comment' ]) {
2020-03-21 12:48:20 +01:00
$message = $l10n -> t ( '%1$s replied to you on %2$s\'s %3$s %4$s' );
2020-01-08 23:36:31 +01:00
} elseif ( $params [ 'activity' ][ 'explicit_tagged' ]) {
2020-03-22 08:43:06 +01:00
$message = $l10n -> t ( '%1$s tagged you on %2$s\'s %3$s %4$s' );
2020-01-08 22:48:59 +01:00
} else {
2020-03-21 12:48:20 +01:00
$message = $l10n -> t ( '%1$s commented on %2$s\'s %3$s %4$s' );
2018-01-04 03:12:19 +01:00
}
2014-01-05 16:10:02 +01:00
2020-03-21 12:48:20 +01:00
$dest_str = sprintf ( $message , $params [ 'source_name' ], $item [ 'author-name' ], $item_post_type , $title );
2020-01-08 22:48:59 +01:00
// Then look for the special cases
2012-03-01 04:23:01 +01:00
// "your post"
2020-01-08 22:48:59 +01:00
if ( $params [ 'activity' ][ 'origin_thread' ]) {
2020-01-08 23:36:31 +01:00
if ( $params [ 'activity' ][ 'origin_comment' ]) {
2020-03-21 12:48:20 +01:00
$message = $l10n -> t ( '%1$s replied to you on your %2$s %3$s' );
2020-01-08 23:36:31 +01:00
} elseif ( $params [ 'activity' ][ 'explicit_tagged' ]) {
2020-03-21 12:48:20 +01:00
$message = $l10n -> t ( '%1$s tagged you on your %2$s %3$s' );
2019-01-06 02:25:05 +01:00
} else {
2020-03-21 12:48:20 +01:00
$message = $l10n -> t ( '%1$s commented on your %2$s %3$s' );
2019-01-06 02:25:05 +01:00
}
2020-03-21 12:48:20 +01:00
$dest_str = sprintf ( $message , $params [ 'source_name' ], $item_post_type , $title );
2019-01-06 02:25:05 +01:00
// "their post"
2020-01-08 22:48:59 +01:00
} elseif ( $item [ 'author-link' ] == $params [ 'source_link' ]) {
2020-01-08 23:36:31 +01:00
if ( $params [ 'activity' ][ 'origin_comment' ]) {
2020-03-21 12:48:20 +01:00
$message = $l10n -> t ( '%1$s replied to you on their %2$s %3$s' );
2020-01-08 23:36:31 +01:00
} elseif ( $params [ 'activity' ][ 'explicit_tagged' ]) {
2020-03-21 12:48:20 +01:00
$message = $l10n -> t ( '%1$s tagged you on their %2$s %3$s' );
2019-01-06 02:25:05 +01:00
} else {
2020-03-21 12:48:20 +01:00
$message = $l10n -> t ( '%1$s commented on their %2$s %3$s' );
2019-01-06 02:25:05 +01:00
}
2020-01-08 22:48:59 +01:00
2020-03-21 12:48:20 +01:00
$dest_str = sprintf ( $message , $params [ 'source_name' ], $item_post_type , $title );
2018-01-04 03:12:19 +01:00
}
2012-03-01 03:19:08 +01:00
2019-01-06 02:25:05 +01:00
// Some mail software relies on subject field for threading.
2012-02-26 01:56:14 +01:00
// 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
2019-01-06 02:25:05 +01:00
// different subjects for messages on the same thread.
2020-01-08 22:48:59 +01:00
if ( $params [ 'activity' ][ 'explicit_tagged' ]) {
2020-02-05 22:22:12 +01:00
$subject = $l10n -> t ( '%s %s tagged you' , $subjectPrefix , $params [ 'source_name' ]);
2012-02-28 02:18:19 +01:00
2019-12-28 23:12:01 +01:00
$preamble = $l10n -> t ( '%1$s tagged you at %2$s' , $params [ 'source_name' ], $sitename );
2019-01-06 02:25:05 +01:00
} else {
2020-02-09 22:42:51 +01:00
$subject = $l10n -> t ( '%1$s Comment to conversation #%2$d by %3$s' , $subjectPrefix , $parent_id , $params [ 'source_name' ]);
2019-01-06 02:25:05 +01:00
2019-12-28 23:12:01 +01:00
$preamble = $l10n -> t ( '%s commented on an item/conversation you have been following.' , $params [ 'source_name' ]);
2019-01-06 02:25:05 +01:00
}
2016-05-21 13:19:30 +02:00
2014-01-05 16:10:02 +01:00
$epreamble = $dest_str ;
2012-02-18 12:18:20 +01:00
2019-12-28 23:12:01 +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 );
2019-01-06 02:25:05 +01:00
$hsitelink = sprintf ( $sitelink , '<a href="' . $siteurl . '">' . $sitename . '</a>' );
2011-12-26 23:16:25 +01:00
$itemlink = $params [ 'link' ];
}
2021-01-23 10:53:44 +01:00
if ( $params [ 'type' ] == Notification\Type :: WALL ) {
2020-02-05 22:22:12 +01:00
$subject = $l10n -> t ( '%s %s posted to your profile wall' , $subjectPrefix , $params [ 'source_name' ]);
2014-01-05 16:10:02 +01:00
2019-12-28 23:12:01 +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]' ,
2018-01-24 03:59:16 +01:00
'[url=' . $params [ 'source_link' ] . ']' . $params [ 'source_name' ] . '[/url]' ,
$params [ 'link' ]
);
2014-01-05 16:10:02 +01:00
2019-12-28 23:12:01 +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' ];
}
2021-01-23 10:53:44 +01:00
if ( $params [ 'type' ] == Notification\Type :: SHARE ) {
2020-08-31 20:51:59 +02:00
if ( $params [ 'origin_link' ] == $params [ 'source_link' ]) {
$subject = $l10n -> t ( '%s %s shared a new post' , $subjectPrefix , $params [ 'source_name' ]);
2016-05-21 13:19:30 +02:00
2020-08-31 20:51:59 +02: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' ]
);
} else {
$subject = $l10n -> t ( '%s %s shared a post from %s' , $subjectPrefix , $params [ 'source_name' ], $params [ 'origin_name' ]);
$preamble = $l10n -> t ( '%1$s shared a post from %2$s at %3$s' , $params [ 'source_name' ], $params [ 'origin_name' ], $sitename );
$epreamble = $l10n -> t ( '%1$s [url=%2$s]shared a post[/url] from %3$s.' ,
'[url=' . $params [ 'source_link' ] . ']' . $params [ 'source_name' ] . '[/url]' ,
$params [ 'link' ], '[url=' . $params [ 'origin_link' ] . ']' . $params [ 'origin_name' ] . '[/url]'
2021-05-09 13:54:34 +02:00
);
2020-08-31 20:51:59 +02:00
}
2012-02-09 23:06:17 +01:00
2019-12-28 23:12:01 +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' ];
}
2021-01-23 10:53:44 +01:00
if ( $params [ 'type' ] == Notification\Type :: POKE ) {
2020-02-09 22:42:51 +01:00
$subject = $l10n -> t ( '%1$s %2$s poked you' , $subjectPrefix , $params [ 'source_name' ]);
2012-07-20 05:13:40 +02:00
2019-12-28 23:12:01 +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].' ,
2018-01-24 03:59:16 +01:00
'[url=' . $params [ 'source_link' ] . ']' . $params [ 'source_name' ] . '[/url]' ,
$params [ 'link' ]
);
2012-07-20 05:13:40 +02:00
2019-12-28 23:12:01 +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
2019-12-28 23:12:01 +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' ];
}
2021-01-23 10:53:44 +01:00
if ( $params [ 'type' ] == Notification\Type :: TAG_SHARE ) {
2018-07-10 14:27:56 +02:00
$itemlink = $params [ 'link' ];
2020-02-05 22:22:12 +01:00
$subject = $l10n -> t ( '%s %s tagged your post' , $subjectPrefix , $params [ 'source_name' ]);
2016-05-21 13:19:30 +02:00
2019-12-28 23:12:01 +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]' ,
2018-01-24 03:59:16 +01:00
'[url=' . $params [ 'source_link' ] . ']' . $params [ 'source_name' ] . '[/url]' ,
$itemlink
);
2012-02-09 23:06:17 +01:00
2019-12-28 23:12:01 +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
}
2021-01-23 10:53:44 +01:00
if ( $params [ 'type' ] == Notification\Type :: INTRO ) {
2018-07-10 14:27:56 +02:00
$itemlink = $params [ 'link' ];
2020-02-05 22:22:12 +01:00
$subject = $l10n -> t ( '%s Introduction received' , $subjectPrefix );
2016-05-21 13:19:30 +02:00
2019-12-28 23:12:01 +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.' ,
2018-01-24 03:59:16 +01:00
$itemlink ,
'[url=' . $params [ 'source_link' ] . ']' . $params [ 'source_name' ] . '[/url]'
);
2016-05-21 13:19:30 +02:00
2019-12-28 23:12:01 +01:00
$body = $l10n -> t ( 'You may visit their profile at %s' , $params [ 'source_link' ]);
2011-12-27 00:47:40 +01:00
2019-12-28 23:12:01 +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>' );
2014-09-06 18:15:18 +02:00
switch ( $params [ 'verb' ]) {
2019-10-24 00:25:43 +02:00
case Activity :: FRIEND :
2014-09-06 18:15:18 +02:00
// someone started to share with user (mostly OStatus)
2020-02-05 22:22:12 +01:00
$subject = $l10n -> t ( '%s A new person is sharing with you' , $subjectPrefix );
2016-05-21 13:19:30 +02:00
2019-12-28 23:12:01 +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' ,
2018-01-24 03:59:16 +01:00
'[url=' . $params [ 'source_link' ] . ']' . $params [ 'source_name' ] . '[/url]' ,
$sitename
);
2014-09-06 18:15:18 +02:00
break ;
2019-10-24 00:25:43 +02:00
case Activity :: FOLLOW :
2014-09-06 18:15:18 +02:00
// someone started to follow the user (mostly OStatus)
2020-02-05 22:22:12 +01:00
$subject = $l10n -> t ( '%s You have a new follower' , $subjectPrefix );
2016-05-21 13:19:30 +02:00
2019-12-28 23:12:01 +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' ,
2018-01-24 03:59:16 +01:00
'[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
}
2021-01-23 10:53:44 +01:00
if ( $params [ 'type' ] == Notification\Type :: SUGGEST ) {
2018-07-10 14:27:56 +02:00
$itemlink = $params [ 'link' ];
2020-02-05 22:22:12 +01:00
$subject = $l10n -> t ( '%s Friend suggestion received' , $subjectPrefix );
2016-05-21 13:19:30 +02:00
2019-12-28 23:12:01 +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.' ,
2018-01-24 03:59:16 +01:00
$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
2019-12-28 23:12:01 +01:00
$body = $l10n -> t ( 'Name:' ) . ' ' . $params [ 'item' ][ 'name' ] . " \n " ;
$body .= $l10n -> t ( 'Photo:' ) . ' ' . $params [ 'item' ][ 'photo' ] . " \n " ;
$body .= $l10n -> t ( 'You may visit their profile at %s' , $params [ 'item' ][ 'url' ]);
2012-01-04 02:29:07 +01:00
2019-12-28 23:12:01 +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
}
2021-01-23 10:53:44 +01:00
if ( $params [ 'type' ] == Notification\Type :: CONFIRM ) {
2019-10-24 00:25:43 +02:00
if ( $params [ 'verb' ] == Activity :: FRIEND ) { // mutual connection
2018-07-10 14:27:56 +02:00
$itemlink = $params [ 'link' ];
2020-02-05 22:22:12 +01:00
$subject = $l10n -> t ( '%s Connection accepted' , $subjectPrefix );
2014-09-06 18:15:18 +02:00
2019-12-28 23:12:01 +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].' ,
2018-01-24 03:59:16 +01:00
$itemlink ,
'[url=' . $params [ 'source_link' ] . ']' . $params [ 'source_name' ] . '[/url]'
);
2016-05-21 13:19:30 +02:00
2019-12-28 23:12:01 +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
2019-12-28 23:12:01 +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
} else { // ACTIVITY_FOLLOW
2018-07-10 14:27:56 +02:00
$itemlink = $params [ 'link' ];
2020-02-05 22:22:12 +01:00
$subject = $l10n -> t ( '%s Connection accepted' , $subjectPrefix );
2016-05-21 13:19:30 +02:00
2019-12-28 23:12:01 +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].' ,
2018-01-24 03:59:16 +01:00
$itemlink ,
'[url=' . $params [ 'source_link' ] . ']' . $params [ 'source_name' ] . '[/url]'
);
2016-05-21 13:19:30 +02:00
2019-12-28 23:12:01 +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 " ;
2019-12-28 23:12:01 +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
2019-12-28 23:12:01 +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
}
2012-03-25 13:37:09 +02:00
}
2021-01-23 10:53:44 +01:00
if ( $params [ 'type' ] == Notification\Type :: SYSTEM ) {
2014-09-07 13:55:02 +02:00
switch ( $params [ 'event' ]) {
case " SYSTEM_REGISTER_REQUEST " :
2018-07-10 14:27:56 +02:00
$itemlink = $params [ 'link' ];
2019-12-28 23:12:01 +01:00
$subject = $l10n -> t ( '[Friendica System Notify]' ) . ' ' . $l10n -> t ( 'registration request' );
2016-05-21 13:19:30 +02:00
2019-12-28 23:12:01 +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.' ,
2018-01-24 03:59:16 +01:00
$itemlink ,
'[url=' . $params [ 'source_link' ] . ']' . $params [ 'source_name' ] . '[/url]'
);
2019-12-28 23:12:01 +01:00
$body = $l10n -> t ( " Full Name: %s \n Site Location: %s \n Login Name: %s (%s) " ,
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
2019-12-28 23:12:01 +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
break ;
case " SYSTEM_DB_UPDATE_FAIL " :
break ;
}
2014-09-07 10:27:39 +02: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-12-26 07:06:24 +01:00
Hook :: callAll ( '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
2019-01-07 18:51:48 +01:00
$notify_id = 0 ;
2014-09-07 10:27:39 +02:00
if ( $show_in_notification_page ) {
2020-11-19 07:26:30 +01:00
$fields = [
2020-05-02 15:12:11 +02:00
'name' => $params [ 'source_name' ] ? ? '' ,
2020-06-09 01:15:08 +02:00
'name_cache' => substr ( strip_tags ( BBCode :: convert ( $params [ 'source_name' ])), 0 , 255 ),
2020-05-02 15:12:11 +02:00
'url' => $params [ 'source_link' ] ? ? '' ,
'photo' => $params [ 'source_photo' ] ? ? '' ,
'link' => $itemlink ? ? '' ,
'uid' => $params [ 'uid' ] ? ? 0 ,
'type' => $params [ 'type' ] ? ? '' ,
'verb' => $params [ 'verb' ] ? ? '' ,
'otype' => $params [ 'otype' ] ? ? '' ,
2020-11-19 07:26:30 +01:00
];
if ( ! empty ( $item_id )) {
$fields [ 'iid' ] = $item_id ;
}
if ( ! empty ( $uri_id )) {
$fields [ 'uri-id' ] = $uri_id ;
}
2020-11-25 20:56:39 +01:00
if ( ! empty ( $parent_id )) {
2020-11-19 07:26:30 +01:00
$fields [ 'parent' ] = $parent_id ;
}
2020-11-25 20:56:39 +01:00
if ( ! empty ( $parent_uri_id )) {
2020-11-19 07:26:30 +01:00
$fields [ 'parent-uri-id' ] = $parent_uri_id ;
}
$notification = DI :: notify () -> insert ( $fields );
2013-02-08 08:43:55 +01:00
2020-06-30 00:58:17 +02:00
// Notification insertion can be intercepted by an addon registering the 'enotify_store' hook
if ( ! $notification ) {
return false ;
}
2020-01-28 01:12:11 +01:00
$notification -> msg = Renderer :: replaceMacros ( $epreamble , [ '$itemlink' => $notification -> link ]);
2013-02-08 08:43:55 +01:00
2020-01-26 20:30:24 +01:00
DI :: notify () -> update ( $notification );
2018-08-19 14:46:11 +02:00
2020-01-28 23:21:24 +01:00
$itemlink = DI :: baseUrl () . '/notification/' . $notification -> id ;
2020-01-25 02:01:49 +01:00
$notify_id = $notification -> id ;
2014-09-06 18:15:18 +02:00
}
// send email notification if notification preferences permit
2018-08-23 10:00:25 +02:00
if (( intval ( $params [ 'notify_flags' ]) & intval ( $params [ 'type' ]))
2021-01-23 10:53:44 +01:00
|| $params [ 'type' ] == Notification\Type :: SYSTEM ) {
2011-12-24 08:07:05 +01:00
2018-10-29 22:20:46 +01:00
Logger :: log ( '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 )) {
2021-01-16 05:11:28 +01:00
$parent = Post :: selectFirst ([ 'guid' ], [ 'id' => $params [ 'parent' ]]);
2020-09-06 19:47:25 +02:00
$message_id = " < " . $parent [ 'guid' ] . " @ " . gethostname () . " > " ;
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?
2021-02-16 09:00:23 +01:00
if ( ! DBA :: exists ( 'notify-threads' , [ 'master-parent-uri-id' => $parent_uri_id , 'receiver-uid' => $params [ 'uid' ]])) {
2020-01-26 01:04:54 +01:00
Logger :: log ( " notify_id: " . intval ( $notify_id ) . " , parent: " . intval ( $params [ 'parent' ]) . " uid: " . intval ( $params [ 'uid' ]), Logger :: DEBUG );
2018-08-19 14:46:11 +02:00
2021-02-16 09:00:23 +01:00
$fields = [ 'notify-id' => $notify_id , 'master-parent-uri-id' => $parent_uri_id ,
2020-05-02 15:12:11 +02:00
'receiver-uid' => $params [ 'uid' ], 'parent-item' => 0 ];
2018-08-19 14:46:11 +02:00
DBA :: insert ( 'notify-threads' , $fields );
2014-08-21 00:53:01 +02:00
2020-09-19 20:14:55 +02:00
$emailBuilder -> setHeader ( 'Message-ID' , $message_id );
2020-01-26 01:04:54 +01:00
$log_msg = " include/enotify: No previous notification found for this parent: \n " .
" parent: ${ params['parent'] } \n " . " uid : ${ params['uid'] } \n " ;
2018-10-30 14:58:45 +01:00
Logger :: log ( $log_msg , Logger :: DEBUG );
2014-08-21 00:53:01 +02:00
} else {
// If not, just "follow" the thread.
2020-09-19 20:14:55 +02:00
$emailBuilder -> setHeader ( 'References' , $message_id );
$emailBuilder -> setHeader ( 'In-Reply-To' , $message_id );
2018-10-30 14:58:45 +01:00
Logger :: log ( " There's already a notification for this parent. " , Logger :: DEBUG );
2014-08-21 00:53:01 +02:00
}
2012-02-26 01:56:14 +01:00
}
2020-02-03 00:07:22 +01:00
$datarray = [
'preamble' => $preamble ,
'type' => $params [ 'type' ],
'parent' => $parent_id ,
'source_name' => $params [ 'source_name' ] ? ? null ,
'source_link' => $params [ 'source_link' ] ? ? null ,
'source_photo' => $params [ 'source_photo' ] ? ? null ,
'uid' => $params [ 'uid' ],
'hsitelink' => $hsitelink ,
'tsitelink' => $tsitelink ,
'itemlink' => $itemlink ,
'title' => $title ,
'body' => $body ,
'subject' => $subject ,
2020-09-21 17:07:34 +02:00
'headers' => $emailBuilder -> getHeaders (),
2020-02-03 00:07:22 +01:00
];
2012-02-27 08:54:04 +01:00
2018-12-26 07:06:24 +01:00
Hook :: callAll ( 'enotify_mail' , $datarray );
2012-02-27 08:54:04 +01:00
2020-09-21 17:07:34 +02:00
$emailBuilder
-> withHeaders ( $datarray [ 'headers' ])
2020-02-03 00:07:22 +01:00
-> withRecipient ( $params [ 'to_email' ])
2020-02-04 21:26:03 +01:00
-> forUser ([
'uid' => $datarray [ 'uid' ],
'language' => $params [ 'language' ],
])
2020-02-03 00:07:22 +01:00
-> withNotification ( $datarray [ 'subject' ], $datarray [ 'preamble' ], $datarray [ 'title' ], $datarray [ 'body' ])
-> withSiteLink ( $datarray [ 'tsitelink' ], $datarray [ 'hsitelink' ])
-> withItemLink ( $datarray [ 'itemlink' ]);
// If a photo is present, add it to the email
if ( ! empty ( $datarray [ 'source_photo' ])) {
2020-09-19 20:14:55 +02:00
$emailBuilder -> withPhoto (
2020-02-03 00:07:22 +01:00
$datarray [ 'source_photo' ],
$datarray [ 'source_link' ] ? ? $sitelink ,
$datarray [ 'source_name' ] ? ? $sitename );
}
2011-12-24 08:07:05 +01:00
2020-09-19 20:14:55 +02:00
$email = $emailBuilder -> build ();
2020-01-26 20:23:58 +01:00
// use the Emailer class to send the message
return DI :: emailer () -> send ( $email );
2011-12-24 08:07:05 +01:00
}
2012-02-18 11:57:42 +01:00
2017-11-20 21:37:30 +01:00
return false ;
2011-12-24 08:07:05 +01:00
}
2011-12-08 10:28:27 +01:00
2018-01-07 12:08:36 +01:00
/**
2020-01-19 07:05:23 +01:00
* Checks for users who should be notified
2018-01-07 12:08:36 +01:00
*
2021-02-02 06:45:57 +01:00
* @ param int $uri_id URI ID of the item for which the check should be done
* @ param int $uid User ID of the item
2019-01-07 16:24:06 +01:00
* @ throws \Friendica\Network\HTTPException\InternalServerErrorException
2018-01-07 12:08:36 +01:00
*/
2021-02-02 06:45:57 +01:00
function check_user_notification ( int $uri_id , int $uid ) {
$condition = [ 'uri-id' => $uri_id ];
// fetch all users with notifications on public posts
if ( $uid != 0 ) {
$condition [ 'uid' ] = $uid ;
}
$usernotifications = DBA :: select ( 'post-user-notification' , [ 'uri-id' , 'uid' , 'notification-type' ], $condition );
while ( $usernotification = DBA :: fetch ( $usernotifications )) {
2021-03-14 16:40:14 +01:00
check_item_notification ( $usernotification [ 'uri-id' ], $usernotification [ 'uid' ], $usernotification [ 'notification-type' ], $uid );
2018-01-07 12:08:36 +01:00
}
2021-02-02 06:45:57 +01:00
DBA :: close ( $usernotifications );
2018-01-07 12:08:36 +01:00
}
2016-01-28 22:58:05 +01:00
/**
2020-01-19 07:05:23 +01:00
* Checks for item related notifications and sends them
2016-01-28 22:58:05 +01:00
*
2021-02-02 06:45:57 +01:00
* @ param int $uri_id URI ID of the item for which the check should be done
2020-01-06 01:59:18 +01:00
* @ param int $uid User ID
* @ param int $notification_type Notification bits
2019-01-07 16:24:06 +01:00
* @ return bool
* @ throws \Friendica\Network\HTTPException\InternalServerErrorException
2016-01-28 22:58:05 +01:00
*/
2021-03-14 16:40:14 +01:00
function check_item_notification ( int $uri_id , int $uid , int $notification_type , $post_uid ) {
2020-08-31 20:51:59 +02:00
$fields = [ 'id' , 'uri-id' , 'mention' , 'parent' , 'parent-uri-id' , 'thr-parent-id' ,
'title' , 'body' , 'author-link' , 'author-name' , 'author-avatar' , 'author-id' ,
'gravity' , 'guid' , 'parent-uri' , 'uri' , 'contact-id' , 'network' ];
2021-03-14 16:40:14 +01:00
$condition = [ 'uri-id' => $uri_id , 'uid' => [ $uid , $post_uid ], 'deleted' => false ];
2021-01-16 23:37:27 +01:00
$item = Post :: selectFirstForUser ( $uid , $fields , $condition );
2020-01-06 01:59:18 +01:00
if ( ! DBA :: isResult ( $item )) {
2019-01-21 17:36:01 +01:00
return false ;
2018-06-16 00:30:49 +02:00
}
2018-06-09 18:56:37 +02:00
2021-01-24 14:49:23 +01:00
if ( ! DI :: pConfig () -> get ( local_user (), 'system' , 'notify_ignored' , true ) && Contact\User :: isIgnored ( $item [ 'author-id' ], $uid )) {
2021-01-24 12:40:09 +01:00
Logger :: info ( 'Author is ignored, dropping notification' , [ 'cid' => $item [ 'author-id' ], 'uid' => $uid ]);
return false ;
}
2016-01-28 22:58:05 +01:00
// Generate the notification array
2018-01-15 14:05:12 +01:00
$params = [];
2021-01-23 10:53:44 +01:00
$params [ 'otype' ] = Notification\ObjectType :: ITEM ;
2020-01-06 01:59:18 +01:00
$params [ 'uid' ] = $uid ;
2020-11-25 20:56:39 +01:00
$params [ 'origin_cid' ] = $params [ 'cid' ] = $item [ 'author-id' ];
2020-01-06 01:59:18 +01:00
$params [ 'item' ] = $item ;
$params [ 'link' ] = DI :: baseUrl () . '/display/' . urlencode ( $item [ 'guid' ]);
2020-01-08 22:48:59 +01:00
// Set the activity flags
2021-02-02 06:45:57 +01:00
$params [ 'activity' ][ 'explicit_tagged' ] = ( $notification_type & Post\UserNotification :: NOTIF_EXPLICIT_TAGGED );
$params [ 'activity' ][ 'implicit_tagged' ] = ( $notification_type & Post\UserNotification :: NOTIF_IMPLICIT_TAGGED );
$params [ 'activity' ][ 'origin_comment' ] = ( $notification_type & Post\UserNotification :: NOTIF_DIRECT_COMMENT );
$params [ 'activity' ][ 'origin_thread' ] = ( $notification_type & Post\UserNotification :: NOTIF_THREAD_COMMENT );
$params [ 'activity' ][ 'thread_comment' ] = ( $notification_type & Post\UserNotification :: NOTIF_COMMENT_PARTICIPATION );
$params [ 'activity' ][ 'thread_activity' ] = ( $notification_type & Post\UserNotification :: NOTIF_ACTIVITY_PARTICIPATION );
2020-01-08 22:48:59 +01:00
2020-01-09 18:53:17 +01:00
// Tagging a user in a direct post (first comment level) means a direct comment
2021-02-02 06:45:57 +01:00
if ( $params [ 'activity' ][ 'explicit_tagged' ] && ( $notification_type & Post\UserNotification :: NOTIF_DIRECT_THREAD_COMMENT )) {
2020-01-09 18:53:17 +01:00
$params [ 'activity' ][ 'origin_comment' ] = true ;
}
2021-02-02 06:45:57 +01:00
if ( $notification_type & Post\UserNotification :: NOTIF_SHARED ) {
2021-01-23 10:53:44 +01:00
$params [ 'type' ] = Notification\Type :: SHARE ;
2020-01-08 22:48:59 +01:00
$params [ 'verb' ] = Activity :: POST ;
2020-08-31 20:51:59 +02:00
// Special treatment for posts that had been shared via "announce"
if ( $item [ 'gravity' ] == GRAVITY_ACTIVITY ) {
2021-01-16 05:11:28 +01:00
$parent_item = Post :: selectFirst ( $fields , [ 'uri-id' => $item [ 'thr-parent-id' ], 'uid' => [ $uid , 0 ]]);
2020-08-31 20:51:59 +02:00
if ( DBA :: isResult ( $parent_item )) {
2020-08-31 21:27:50 +02:00
// Don't notify on own entries
if ( User :: getIdForURL ( $parent_item [ 'author-link' ]) == $uid ) {
return false ;
}
2020-11-25 20:56:39 +01:00
$params [ 'origin_cid' ] = $parent_item [ 'author-id' ];
2020-08-31 20:51:59 +02:00
$params [ 'item' ] = $parent_item ;
}
}
2021-02-02 06:45:57 +01:00
} elseif ( $notification_type & Post\UserNotification :: NOTIF_EXPLICIT_TAGGED ) {
2021-01-23 10:53:44 +01:00
$params [ 'type' ] = Notification\Type :: TAG_SELF ;
2020-01-06 01:59:18 +01:00
$params [ 'verb' ] = Activity :: TAG ;
2021-02-02 06:45:57 +01:00
} elseif ( $notification_type & Post\UserNotification :: NOTIF_IMPLICIT_TAGGED ) {
2021-01-23 10:53:44 +01:00
$params [ 'type' ] = Notification\Type :: COMMENT ;
2020-01-08 22:48:59 +01:00
$params [ 'verb' ] = Activity :: POST ;
2021-02-02 06:45:57 +01:00
} elseif ( $notification_type & Post\UserNotification :: NOTIF_THREAD_COMMENT ) {
2021-01-23 10:53:44 +01:00
$params [ 'type' ] = Notification\Type :: COMMENT ;
2020-01-06 01:59:18 +01:00
$params [ 'verb' ] = Activity :: POST ;
2021-02-02 06:45:57 +01:00
} elseif ( $notification_type & Post\UserNotification :: NOTIF_DIRECT_COMMENT ) {
2021-01-23 10:53:44 +01:00
$params [ 'type' ] = Notification\Type :: COMMENT ;
2020-01-06 01:59:18 +01:00
$params [ 'verb' ] = Activity :: POST ;
2021-02-02 06:45:57 +01:00
} elseif ( $notification_type & Post\UserNotification :: NOTIF_COMMENT_PARTICIPATION ) {
2021-01-23 10:53:44 +01:00
$params [ 'type' ] = Notification\Type :: COMMENT ;
2020-01-06 01:59:18 +01:00
$params [ 'verb' ] = Activity :: POST ;
2021-02-02 06:45:57 +01:00
} elseif ( $notification_type & Post\UserNotification :: NOTIF_ACTIVITY_PARTICIPATION ) {
2021-01-23 10:53:44 +01:00
$params [ 'type' ] = Notification\Type :: COMMENT ;
2020-01-06 01:59:18 +01:00
$params [ 'verb' ] = Activity :: POST ;
} else {
return false ;
2018-08-12 06:34:56 +02:00
}
2020-01-06 01:59:18 +01:00
notification ( $params );
2016-01-28 22:58:05 +01:00
}