. */ namespace SP\Modules\Web\Controllers\Items; use Klein\Klein; use SP\Core\Acl\Acl; use SP\Core\Application; use SP\Core\PhpExtensionChecker; use SP\Core\UI\ThemeInterface; use SP\DataModel\NotificationData; use SP\Domain\Notification\NotificationServiceInterface; use SP\Html\Html; use SP\Http\Json; use SP\Http\JsonResponse; use SP\Http\RequestInterface; use SP\Modules\Web\Controllers\SimpleControllerBase; /** * Class NotificationsController */ final class NotificationsController extends SimpleControllerBase { private NotificationServiceInterface $notificationService; public function __construct( Application $application, ThemeInterface $theme, Klein $router, Acl $acl, RequestInterface $request, PhpExtensionChecker $extensionChecker, NotificationServiceInterface $notificationService ) { parent::__construct($application, $theme, $router, $acl, $request, $extensionChecker); $this->checks(); $this->notificationService = $notificationService; } /** * @throws \JsonException * @throws \SP\Core\Exceptions\ConstraintException * @throws \SP\Core\Exceptions\QueryException */ public function notificationsAction(): void { $notifications = array_map( static function ($notification) { /** @@var $notification NotificationData */ return sprintf( '(%s) - %s', $notification->getComponent(), Html::truncate(Html::stripTags($notification->getDescription()), 30) ); }, $this->notificationService->getAllActiveForUserId($this->session->getUserData()->getId()) ); $count = count($notifications); $jsonResponse = new JsonResponse(); $jsonResponse->setStatus(0); $jsonResponse->setData([ 'message' => __('There aren\'t any pending notifications'), 'message_has' => sprintf(__('There are pending notifications: %d'), $count), 'count' => $count, 'notifications' => $notifications, 'hash' => sha1(implode('', $notifications)), ]); Json::factory($this->router->response())->returnJson($jsonResponse); } }