diff --git a/boot.php b/boot.php index 2756a59478..ea4f28b741 100644 --- a/boot.php +++ b/boot.php @@ -171,18 +171,11 @@ function remote_user() * @param string $s - Text of notice * * @return void + * @deprecated since version 2022.09, use \Friendica\Navigation\SystemMessages instead */ function notice(string $s) { - if (empty($_SESSION)) { - return; - } - - if (empty($_SESSION['sysmsg'])) { - $_SESSION['sysmsg'] = []; - } - - $_SESSION['sysmsg'][] = $s; + \Friendica\DI::sysmsg()->addNotice($s); } /** @@ -193,16 +186,9 @@ function notice(string $s) * @param string $s - Text of notice * * @return void + * @deprecated since version 2022.09, use \Friendica\Navigation\SystemMessages instead */ function info(string $s) { - if (empty($_SESSION)) { - return; - } - - if (empty($_SESSION['sysmsg_info'])) { - $_SESSION['sysmsg_info'] = []; - } - - $_SESSION['sysmsg_info'][] = $s; + \Friendica\DI::sysmsg()->addInfo($s); } diff --git a/src/App.php b/src/App.php index f59b15d1db..ceace228f5 100644 --- a/src/App.php +++ b/src/App.php @@ -648,10 +648,6 @@ class App header('X-Account-Management-Status: none'); } - $_SESSION['sysmsg'] = Core\Session::get('sysmsg', []); - $_SESSION['sysmsg_info'] = Core\Session::get('sysmsg_info', []); - $_SESSION['last_updated'] = Core\Session::get('last_updated', []); - /* * check_config() is responsible for running update scripts. These automatically * update the DB schema whenever we push a new one out. It also checks to see if diff --git a/src/DI.php b/src/DI.php index e8fa90eb9b..a28eb707a4 100644 --- a/src/DI.php +++ b/src/DI.php @@ -22,6 +22,7 @@ namespace Friendica; use Dice\Dice; +use Friendica\Navigation\SystemMessages; use Psr\Log\LoggerInterface; /** @@ -234,6 +235,14 @@ abstract class DI return self::$dice->create(Core\System::class); } + /** + * @return \Friendica\Navigation\SystemMessages + */ + public static function sysmsg() + { + return self::$dice->create(SystemMessages::class); + } + // // "LoggerInterface" instances // diff --git a/src/Module/Notifications/Ping.php b/src/Module/Notifications/Ping.php index c09d6d0cbe..57da97b4f7 100644 --- a/src/Module/Notifications/Ping.php +++ b/src/Module/Notifications/Ping.php @@ -42,6 +42,7 @@ use Friendica\Navigation\Notifications\Exception\NoMessageException; use Friendica\Navigation\Notifications\Factory; use Friendica\Navigation\Notifications\Repository; use Friendica\Navigation\Notifications\ValueObject; +use Friendica\Navigation\SystemMessages; use Friendica\Protocol\Activity; use Friendica\Util\DateTimeFormat; use Friendica\Util\Profiler; @@ -50,6 +51,8 @@ use Psr\Log\LoggerInterface; class Ping extends BaseModule { + /** @var SystemMessages */ + private $systemMessages; /** @var Repository\Notification */ private $notificationRepo; /** @var Introduction */ @@ -57,10 +60,11 @@ class Ping extends BaseModule /** @var Factory\FormattedNavNotification */ private $formattedNavNotification; - public function __construct(Repository\Notification $notificationRepo, Introduction $introductionRepo, Factory\FormattedNavNotification $formattedNavNotification, L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, Response $response, array $server, array $parameters = []) + public function __construct(SystemMessages $systemMessages, Repository\Notification $notificationRepo, Introduction $introductionRepo, Factory\FormattedNavNotification $formattedNavNotification, L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, Response $response, array $server, array $parameters = []) { parent::__construct($l10n, $baseUrl, $args, $logger, $profiler, $response, $server, $parameters); + $this->systemMessages = $systemMessages; $this->notificationRepo = $notificationRepo; $this->introductionRepo = $introductionRepo; $this->formattedNavNotification = $formattedNavNotification; @@ -256,19 +260,6 @@ class Ping extends BaseModule usort($navNotifications, $sort_function); } - $sysmsgs = []; - $sysmsgs_info = []; - - if (!empty($_SESSION['sysmsg'])) { - $sysmsgs = $_SESSION['sysmsg']; - unset($_SESSION['sysmsg']); - } - - if (!empty($_SESSION['sysmsg_info'])) { - $sysmsgs_info = $_SESSION['sysmsg_info']; - unset($_SESSION['sysmsg_info']); - } - $notification_count = $sysnotify_count + $intro_count + $register_count; $data = []; @@ -289,8 +280,8 @@ class Ping extends BaseModule $data['notifications'] = $navNotifications; $data['sysmsgs'] = [ - 'notice' => $sysmsgs, - 'info' => $sysmsgs_info + 'notice' => $this->systemMessages->flushNotices(), + 'info' => $this->systemMessages->flushInfos(), ]; if (isset($_GET['callback'])) { diff --git a/src/Navigation/SystemMessages.php b/src/Navigation/SystemMessages.php new file mode 100644 index 0000000000..0b00a5a496 --- /dev/null +++ b/src/Navigation/SystemMessages.php @@ -0,0 +1,87 @@ +. + * + * Friendica is a communications platform for integrated social communications + * utilising decentralised communications and linkage to several indie social + * projects - as well as popular mainstream providers. + * + * Our mission is to free our friends and families from the clutches of + * data-harvesting corporations, and pave the way to a future where social + * communications are free and open and flow between alternate providers as + * easily as email does today. + */ + +namespace Friendica\Navigation; + +use Friendica\Core\Session\Capability\IHandleSessions; + +class SystemMessages +{ + /** + * @var IHandleSessions + */ + private $session; + + public function __construct(IHandleSessions $session) + { + $this->session = $session; + } + + public function addNotice(string $message) + { + $sysmsg = $this->getNotices(); + + $sysmsg[] = $message; + + $this->session->set('sysmsg', $sysmsg); + } + + public function getNotices(): array + { + return $this->session->get('sysmsg', []); + } + + public function flushNotices(): array + { + $notices = $this->getNotices(); + $this->session->remove('sysmsg'); + return $notices; + } + + public function addInfo(string $message) + { + $sysmsg = $this->getNotices(); + + $sysmsg[] = $message; + + $this->session->set('sysmsg_info', $sysmsg); + } + + public function getInfos(): array + { + return $this->session->get('sysmsg_info', []); + } + + public function flushInfos(): array + { + $notices = $this->getInfos(); + $this->session->remove('sysmsg_info'); + return $notices; + } +}