2020-01-22 22:18:14 +00:00
< ? php
2020-02-09 14:45:36 +00:00
/**
2021-03-29 06:40:20 +00:00
* @ copyright Copyright ( C ) 2010 - 2021 , the Friendica project
2020-02-09 14:45:36 +00: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 />.
*
*/
2020-01-22 22:18:14 +00:00
namespace Friendica\Module\Notifications ;
2021-11-17 20:32:57 +00:00
use Friendica\App\Arguments ;
use Friendica\App\Mode ;
2020-01-22 22:18:14 +00:00
use Friendica\Content\ContactSelector ;
use Friendica\Content\Nav ;
2020-11-16 23:18:11 +00:00
use Friendica\Content\Text\BBCode ;
2021-11-17 20:32:57 +00:00
use Friendica\Core\L10n ;
2020-01-22 22:18:14 +00:00
use Friendica\Core\Protocol ;
use Friendica\Core\Renderer ;
2020-09-28 21:33:40 +00:00
use Friendica\Model\User ;
2020-01-22 22:18:14 +00:00
use Friendica\Module\BaseNotifications ;
2021-11-17 20:32:57 +00:00
use Friendica\Navigation\Notifications\Factory\Introduction as IntroductionFactory ;
2021-09-18 03:41:02 +00:00
use Friendica\Navigation\Notifications\ValueObject\Introduction ;
2020-01-22 22:18:14 +00:00
2020-01-22 22:31:00 +00:00
/**
* Prints notifications about introduction
*/
2020-01-22 22:18:14 +00:00
class Introductions extends BaseNotifications
{
2021-11-17 20:32:57 +00:00
/** @var IntroductionFactory */
protected $notificationIntro ;
/** @var Mode */
protected $mode ;
public function __construct ( Mode $mode , IntroductionFactory $notificationIntro , Arguments $args , L10n $l10n , array $parameters = [])
{
parent :: __construct ( $args , $l10n , $parameters );
$this -> notificationIntro = $notificationIntro ;
$this -> mode = $mode ;
}
2020-01-22 22:18:14 +00:00
/**
* @ inheritDoc
*/
2021-11-17 20:32:57 +00:00
public function getNotifications ()
2020-01-22 22:18:14 +00:00
{
2021-11-17 20:32:57 +00:00
$id = ( int ) $this -> args -> get ( 2 , 0 );
$all = $this -> args -> get ( 2 ) == 'all' ;
2020-01-22 22:18:14 +00:00
2020-01-25 01:01:49 +00:00
$notifications = [
2020-01-25 19:00:58 +00:00
'ident' => 'introductions' ,
2021-11-17 20:32:57 +00:00
'notifications' => $this -> notificationIntro -> getList ( $all , $this -> firstItemNum , self :: ITEMS_PER_PAGE , $id ),
2020-01-25 01:01:49 +00:00
];
2020-01-22 22:18:14 +00:00
return [
2021-11-18 20:33:05 +00:00
'header' => $this -> t ( 'Notifications' ),
2020-01-24 17:32:38 +00:00
'notifications' => $notifications ,
2020-01-22 22:18:14 +00:00
];
}
2021-11-14 22:13:47 +00:00
public function content () : string
2020-01-22 22:18:14 +00:00
{
Nav :: setSelected ( 'introductions' );
2021-11-17 20:32:57 +00:00
$all = $this -> args -> get ( 2 ) == 'all' ;
2020-01-22 22:18:14 +00:00
2020-01-24 17:32:38 +00:00
$notificationContent = [];
$notificationNoContent = '' ;
2020-01-22 22:18:14 +00:00
2021-11-17 20:32:57 +00:00
$notificationResult = $this -> getNotifications ();
2020-01-24 17:32:38 +00:00
$notifications = $notificationResult [ 'notifications' ] ? ? [];
$notificationHeader = $notificationResult [ 'header' ] ? ? '' ;
2020-01-22 22:18:14 +00:00
2020-01-24 17:32:38 +00:00
$notificationSuggestions = Renderer :: getMarkupTemplate ( 'notifications/suggestions.tpl' );
$notificationTemplate = Renderer :: getMarkupTemplate ( 'notifications/intros.tpl' );
2020-01-22 22:18:14 +00:00
// The link to switch between ignored and normal connection requests
2020-01-24 17:32:38 +00:00
$notificationShowLink = [
2020-01-22 22:18:14 +00:00
'href' => ( ! $all ? 'notifications/intros/all' : 'notifications/intros' ),
2021-11-18 20:33:05 +00:00
'text' => ( ! $all ? $this -> t ( 'Show Ignored Requests' ) : $this -> t ( 'Hide Ignored Requests' )),
2020-01-22 22:18:14 +00:00
];
2020-09-28 21:33:40 +00:00
$owner = User :: getOwnerDataById ( local_user ());
2020-01-22 22:18:14 +00:00
// Loop through all introduction notifications.This creates an array with the output html for each
// introduction
2021-09-18 03:41:02 +00:00
/** @var Introduction $Introduction */
foreach ( $notifications [ 'notifications' ] as $Introduction ) {
2020-01-22 22:18:14 +00:00
// There are two kind of introduction. Contacts suggested by other contacts and normal connection requests.
// We have to distinguish between these two because they use different data.
2021-09-18 03:41:02 +00:00
switch ( $Introduction -> getLabel ()) {
2020-01-22 22:18:14 +00:00
case 'friend_suggestion' :
2020-01-24 17:32:38 +00:00
$notificationContent [] = Renderer :: replaceMacros ( $notificationSuggestions , [
2021-09-18 03:41:02 +00:00
'$type' => $Introduction -> getLabel (),
2021-11-18 20:33:05 +00:00
'$str_notification_type' => $this -> t ( 'Notification type:' ),
2021-09-18 03:41:02 +00:00
'$str_type' => $Introduction -> getType (),
'$intro_id' => $Introduction -> getIntroId (),
2021-11-18 20:33:05 +00:00
'$lbl_madeby' => $this -> t ( 'Suggested by:' ),
2021-09-18 03:41:02 +00:00
'$madeby' => $Introduction -> getMadeBy (),
'$madeby_url' => $Introduction -> getMadeByUrl (),
'$madeby_zrl' => $Introduction -> getMadeByZrl (),
'$madeby_addr' => $Introduction -> getMadeByAddr (),
'$contact_id' => $Introduction -> getContactId (),
'$photo' => $Introduction -> getPhoto (),
'$fullname' => $Introduction -> getName (),
2020-09-28 21:33:40 +00:00
'$dfrn_url' => $owner [ 'url' ],
2021-09-18 03:41:02 +00:00
'$url' => $Introduction -> getUrl (),
'$zrl' => $Introduction -> getZrl (),
2021-11-18 20:33:05 +00:00
'$lbl_url' => $this -> t ( 'Profile URL' ),
2021-09-18 03:41:02 +00:00
'$addr' => $Introduction -> getAddr (),
2020-09-28 21:33:40 +00:00
'$action' => 'follow' ,
2021-11-18 20:33:05 +00:00
'$approve' => $this -> t ( 'Approve' ),
2021-09-18 03:41:02 +00:00
'$note' => $Introduction -> getNote (),
2021-11-18 20:33:05 +00:00
'$ignore' => $this -> t ( 'Ignore' ),
'$discard' => $this -> t ( 'Discard' ),
2021-11-17 20:32:57 +00:00
'$is_mobile' => $this -> mode -> isMobile (),
2020-01-22 22:18:14 +00:00
]);
break ;
// Normal connection requests
default :
2021-09-18 03:41:02 +00:00
if ( $Introduction -> getNetwork () === Protocol :: DFRN ) {
2021-11-18 20:33:05 +00:00
$lbl_knowyou = $this -> t ( 'Claims to be known to you: ' );
$knowyou = ( $Introduction -> getKnowYou () ? $this -> t ( 'Yes' ) : $this -> t ( 'No' ));
2020-02-05 21:40:35 +00:00
} else {
$lbl_knowyou = '' ;
$knowyou = '' ;
2020-01-22 22:18:14 +00:00
}
2021-09-18 03:41:02 +00:00
$convertedName = BBCode :: convert ( $Introduction -> getName ());
2020-11-16 23:18:11 +00:00
2021-11-18 20:33:05 +00:00
$helptext = $this -> t ( 'Shall your connection be bidirectional or not?' );
$helptext2 = $this -> t ( 'Accepting %s as a friend allows %s to subscribe to your posts, and you will also receive updates from them in your news feed.' , $convertedName , $convertedName );
$helptext3 = $this -> t ( 'Accepting %s as a subscriber allows them to subscribe to your posts, but you will not receive updates from them in your news feed.' , $convertedName );
2020-09-28 21:33:40 +00:00
2021-11-18 20:33:05 +00:00
$friend = [ 'duplex' , $this -> t ( 'Friend' ), '1' , $helptext2 , true ];
$follower = [ 'duplex' , $this -> t ( 'Subscriber' ), '0' , $helptext3 , false ];
2020-09-28 21:33:40 +00:00
2021-07-15 13:28:32 +00:00
$action = 'follow_confirm' ;
2020-01-22 22:18:14 +00:00
2021-09-18 03:41:02 +00:00
$header = $Introduction -> getName ();
2020-01-22 22:18:14 +00:00
2021-09-18 03:41:02 +00:00
if ( $Introduction -> getAddr () != '' ) {
$header .= ' <' . $Introduction -> getAddr () . '>' ;
2020-01-22 22:18:14 +00:00
}
2021-09-18 03:41:02 +00:00
$header .= ' (' . ContactSelector :: networkToName ( $Introduction -> getNetwork (), $Introduction -> getUrl ()) . ')' ;
2020-01-22 22:18:14 +00:00
2021-09-18 03:41:02 +00:00
if ( $Introduction -> getNetwork () != Protocol :: DIASPORA ) {
2021-11-18 20:33:05 +00:00
$discard = $this -> t ( 'Discard' );
2020-01-22 22:18:14 +00:00
} else {
$discard = '' ;
}
2020-01-24 17:32:38 +00:00
$notificationContent [] = Renderer :: replaceMacros ( $notificationTemplate , [
2021-09-18 03:41:02 +00:00
'$type' => $Introduction -> getLabel (),
2020-01-25 19:00:58 +00:00
'$header' => $header ,
2021-11-18 20:33:05 +00:00
'$str_notification_type' => $this -> t ( 'Notification type:' ),
2021-09-18 03:41:02 +00:00
'$str_type' => $Introduction -> getType (),
'$dfrn_id' => $Introduction -> getDfrnId (),
'$uid' => $Introduction -> getUid (),
'$intro_id' => $Introduction -> getIntroId (),
'$contact_id' => $Introduction -> getContactId (),
'$photo' => $Introduction -> getPhoto (),
'$fullname' => $Introduction -> getName (),
'$location' => $Introduction -> getLocation (),
2021-11-18 20:33:05 +00:00
'$lbl_location' => $this -> t ( 'Location:' ),
2021-09-18 03:41:02 +00:00
'$about' => $Introduction -> getAbout (),
2021-11-18 20:33:05 +00:00
'$lbl_about' => $this -> t ( 'About:' ),
2021-09-18 03:41:02 +00:00
'$keywords' => $Introduction -> getKeywords (),
2021-11-18 20:33:05 +00:00
'$lbl_keywords' => $this -> t ( 'Tags:' ),
'$hidden' => [ 'hidden' , $this -> t ( 'Hide this contact from others' ), $Introduction -> isHidden (), '' ],
2020-02-05 16:14:04 +00:00
'$lbl_connection_type' => $helptext ,
'$friend' => $friend ,
'$follower' => $follower ,
2021-09-18 03:41:02 +00:00
'$url' => $Introduction -> getUrl (),
'$zrl' => $Introduction -> getZrl (),
2021-11-18 20:33:05 +00:00
'$lbl_url' => $this -> t ( 'Profile URL' ),
2021-09-18 03:41:02 +00:00
'$addr' => $Introduction -> getAddr (),
2020-01-25 19:00:58 +00:00
'$lbl_knowyou' => $lbl_knowyou ,
2021-11-18 20:33:05 +00:00
'$lbl_network' => $this -> t ( 'Network:' ),
2021-09-18 03:41:02 +00:00
'$network' => ContactSelector :: networkToName ( $Introduction -> getNetwork (), $Introduction -> getUrl ()),
2020-01-25 19:00:58 +00:00
'$knowyou' => $knowyou ,
2021-11-18 20:33:05 +00:00
'$approve' => $this -> t ( 'Approve' ),
2021-09-18 03:41:02 +00:00
'$note' => $Introduction -> getNote (),
2021-11-18 20:33:05 +00:00
'$ignore' => $this -> t ( 'Ignore' ),
2020-01-25 19:00:58 +00:00
'$discard' => $discard ,
'$action' => $action ,
2021-11-17 20:32:57 +00:00
'$is_mobile' => $this -> mode -> isMobile (),
2020-01-22 22:18:14 +00:00
]);
break ;
}
}
2020-01-24 17:32:38 +00:00
if ( count ( $notifications [ 'notifications' ]) == 0 ) {
2021-11-18 20:33:05 +00:00
notice ( $this -> t ( 'No introductions.' ));
$notificationNoContent = $this -> t ( 'No more %s notifications.' , $notifications [ 'ident' ]);
2020-01-22 22:18:14 +00:00
}
2021-11-17 20:32:57 +00:00
return $this -> printContent ( $notificationHeader , $notificationContent , $notificationNoContent , $notificationShowLink );
2020-01-22 22:18:14 +00:00
}
}