X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FModule%2FBaseNotifications.php;h=d7319fa4ea37681c1e4fcc135f79bf87a7541669;hb=6dbbd081795fa1c8fe57db2248ac162efeeada88;hp=be2ad16b2bb678e95753ffc98aff33d05b869db4;hpb=fa6c33d3ac7d3d8f8bd2cdfc341217cd88a6a557;p=friendica.git diff --git a/src/Module/BaseNotifications.php b/src/Module/BaseNotifications.php index be2ad16b2b..d7319fa4ea 100644 --- a/src/Module/BaseNotifications.php +++ b/src/Module/BaseNotifications.php @@ -1,120 +1,156 @@ . + * + */ namespace Friendica\Module; use Exception; +use Friendica\App; +use Friendica\App\Arguments; use Friendica\BaseModule; use Friendica\Content\Pager; +use Friendica\Core\L10n; use Friendica\Core\Renderer; use Friendica\Core\System; -use Friendica\DI; -use Friendica\Model\Notify; +use Friendica\Navigation\Notifications\ValueObject\FormattedNotification; use Friendica\Network\HTTPException\ForbiddenException; - +use Friendica\Util\Profiler; +use Psr\Log\LoggerInterface; + +/** + * Base Module for each tab of the notification display + * + * General possibility to print it as JSON as well + */ abstract class BaseNotifications extends BaseModule { /** @var array Array of URL parameters */ const URL_TYPES = [ - Notify::NETWORK => 'network', - Notify::SYSTEM => 'system', - Notify::HOME => 'home', - Notify::PERSONAL => 'personal', - Notify::INTRO => 'intros', + FormattedNotification::NETWORK => 'network', + FormattedNotification::SYSTEM => 'system', + FormattedNotification::HOME => 'home', + FormattedNotification::PERSONAL => 'personal', + FormattedNotification::INTRO => 'intros', ]; - /** @var array Array of the allowed notifies and their printable name */ + /** @var array Array of the allowed notifications and their printable name */ const PRINT_TYPES = [ - Notify::NETWORK => 'Network', - Notify::SYSTEM => 'System', - Notify::HOME => 'Home', - Notify::PERSONAL => 'Personal', - Notify::INTRO => 'Introductions', + FormattedNotification::NETWORK => 'Network', + FormattedNotification::SYSTEM => 'System', + FormattedNotification::HOME => 'Home', + FormattedNotification::PERSONAL => 'Personal', + FormattedNotification::INTRO => 'Introductions', ]; - /** @var array The array of access keys for notify pages */ + /** @var array The array of access keys for notification pages */ const ACCESS_KEYS = [ - Notify::NETWORK => 'w', - Notify::SYSTEM => 'y', - Notify::HOME => 'h', - Notify::PERSONAL => 'r', - Notify::INTRO => 'i', + FormattedNotification::NETWORK => 'w', + FormattedNotification::SYSTEM => 'y', + FormattedNotification::HOME => 'h', + FormattedNotification::PERSONAL => 'r', + FormattedNotification::INTRO => 'i', ]; - const PER_PAGE = 20; + /** @var int The default count of items per page */ + const ITEMS_PER_PAGE = 20; + /** @var int The default limit of notifications per page */ + const DEFAULT_PAGE_LIMIT = 80; + + /** @var boolean True, if ALL entries should get shown */ + protected $showAll; + /** @var int The determined start item of the current page */ + protected $firstItemNum; - protected static $show; - protected static $start; + /** @var Arguments */ + protected $args; /** - * Collects all notifies from the backend + * Collects all notifications from the backend * * @return array The determined notification array - * ['header', 'notifs'] + * ['header', 'notifications'] */ - abstract public static function getNotifies(); + abstract public function getNotifications(); - public static function init(array $parameters = []) + public function __construct(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); + if (!local_user()) { - throw new ForbiddenException(DI::l10n()->t('Permission denied.')); + throw new ForbiddenException($this->t('Permission denied.')); } $page = ($_REQUEST['page'] ?? 0) ?: 1; - self::$start = ($page * self::PER_PAGE) - self::PER_PAGE; - self::$show = ($_REQUEST['show'] ?? '') === 'all'; + $this->firstItemNum = ($page * self::ITEMS_PER_PAGE) - self::ITEMS_PER_PAGE; + $this->showAll = ($_REQUEST['show'] ?? '') === 'all'; } - public static function post(array $parameters = []) + protected function rawContent(array $request = []) { - $request_id = DI::args()->get(1); - - if ($request_id === 'all') { + // If the last argument of the query is NOT json, return + if ($this->args->get($this->args->getArgc() - 1) !== 'json') { return; } - if ($request_id) { - $intro = DI::intro()->selectFirst(['id' => $request_id, 'uid' => local_user()]); + // Set the pager + $pager = new Pager($this->l10n, $this->args->getQueryString(), self::ITEMS_PER_PAGE); - switch ($_POST['submit']) { - case DI::l10n()->t('Discard'): - $intro->discard(); - break; - case DI::l10n()->t('Ignore'): - $intro->ignore(); - break; - } + // Add additional informations (needed for json output) + $notifications = [ + 'notifications' => $this->getNotifications(), + 'items_page' => $pager->getItemsPerPage(), + 'page' => $pager->getPage(), + ]; - DI::baseUrl()->redirect('notifications/intros'); - } + System::jsonExit($notifications); } - public static function rawContent(array $parameters = []) - { - // If the last argument of the query is NOT json, return - if (DI::args()->get(DI::args()->getArgc() - 1) !== 'json') { - return; - } - - System::jsonExit(static::getNotifies()['notifs'] ?? []); - } - - public static function printContent(string $notif_header, array $notif_content, string $notif_nocontent, array $notif_show_lnk) + /** + * Shows the printable result of notifications for a specific tab + * + * @param string $header The notification header + * @param array $notifications The array with the notifications + * @param string $noContent The string in case there are no notifications + * @param array $showLink The possible links at the top + * + * @return string The rendered output + * + * @throws \Friendica\Network\HTTPException\InternalServerErrorException + */ + protected function printContent(string $header, array $notifications, string $noContent, array $showLink) { // Get the nav tabs for the notification pages - $tabs = self::getTabs(); + $tabs = $this->getTabs(); // Set the pager - $pager = new Pager(DI::args()->getQueryString(), self::PER_PAGE); + $pager = new Pager($this->l10n, $this->args->getQueryString(), self::ITEMS_PER_PAGE); - $notif_tpl = Renderer::getMarkupTemplate('notifications.tpl'); + $notif_tpl = Renderer::getMarkupTemplate('notifications/notifications.tpl'); return Renderer::replaceMacros($notif_tpl, [ - '$notif_header' => $notif_header ?? DI::l10n()->t('Notifications'), - '$tabs' => $tabs, - '$notif_content' => $notif_content, - '$notif_nocontent' => $notif_nocontent, - '$notif_show_lnk' => $notif_show_lnk, - '$notif_paginate' => $pager->renderMinimal(count($notif_content)) + '$header' => $header ?? $this->t('Notifications'), + '$tabs' => $tabs, + '$notifications' => $notifications, + '$noContent' => $noContent, + '$showLink' => $showLink, + '$paginate' => $pager->renderMinimal(count($notifications)) ]); } @@ -124,15 +160,15 @@ abstract class BaseNotifications extends BaseModule * @return array with with notifications TabBar data * @throws Exception */ - private static function getTabs() + private function getTabs() { - $selected = DI::args()->get(1, ''); + $selected = $this->args->get(1, ''); $tabs = []; foreach (self::URL_TYPES as $type => $url) { $tabs[] = [ - 'label' => DI::l10n()->t(self::PRINT_TYPES[$type]), + 'label' => $this->t(self::PRINT_TYPES[$type]), 'url' => 'notifications/' . $url, 'sel' => (($selected == $url) ? 'active' : ''), 'id' => $type . '-tab',