From 0ed7e2b96a16cba5cb37c4c934f8831ee827dbcb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20D?= Date: Sat, 11 Jun 2022 22:57:35 +0200 Subject: [PATCH] refactor: [WIP] Migrate notification controller. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Rubén D --- .../Notification/CheckController.php | 78 +++ .../Notification/CreateController.php | 72 +++ .../Notification/DeleteController.php | 93 ++++ .../Notification/EditController.php | 76 +++ .../Notification/IndexController.php | 65 +++ .../Notification/NotificationSaveBase.php | 55 ++ .../Notification/NotificationViewBase.php | 100 ++++ .../Notification/SaveCreateController.php | 71 +++ .../Notification/SaveEditController.php | 78 +++ .../Notification/SearchController.php | 103 ++++ .../Notification/ViewController.php | 75 +++ .../Controllers/NotificationController.php | 522 ------------------ 12 files changed, 866 insertions(+), 522 deletions(-) create mode 100644 app/modules/web/Controllers/Notification/CheckController.php create mode 100644 app/modules/web/Controllers/Notification/CreateController.php create mode 100644 app/modules/web/Controllers/Notification/DeleteController.php create mode 100644 app/modules/web/Controllers/Notification/EditController.php create mode 100644 app/modules/web/Controllers/Notification/IndexController.php create mode 100644 app/modules/web/Controllers/Notification/NotificationSaveBase.php create mode 100644 app/modules/web/Controllers/Notification/NotificationViewBase.php create mode 100644 app/modules/web/Controllers/Notification/SaveCreateController.php create mode 100644 app/modules/web/Controllers/Notification/SaveEditController.php create mode 100644 app/modules/web/Controllers/Notification/SearchController.php create mode 100644 app/modules/web/Controllers/Notification/ViewController.php delete mode 100644 app/modules/web/Controllers/NotificationController.php diff --git a/app/modules/web/Controllers/Notification/CheckController.php b/app/modules/web/Controllers/Notification/CheckController.php new file mode 100644 index 00000000..0c164ee2 --- /dev/null +++ b/app/modules/web/Controllers/Notification/CheckController.php @@ -0,0 +1,78 @@ +. + */ + +namespace SP\Modules\Web\Controllers\Notification; + + +use Exception; +use SP\Core\Acl\ActionsInterface; +use SP\Core\Events\Event; +use SP\Core\Events\EventMessage; +use SP\Http\JsonResponse; +use SP\Modules\Web\Controllers\Traits\JsonTrait; + +final class CheckController extends NotificationSaveBase +{ + use JsonTrait; + + /** + * Check action + * + * @param int $id + * + * @return bool + * @throws \JsonException + */ + public function checkAction(int $id): bool + { + try { + if (!$this->acl->checkUserAccess(ActionsInterface::NOTIFICATION_CHECK)) { + return $this->returnJsonResponse( + JsonResponse::JSON_ERROR, + __u('You don\'t have permission to do this operation') + ); + } + + $this->notificationService->setCheckedById($id); + + $this->eventDispatcher->notifyEvent( + 'check.notification', + new Event( + $this, + EventMessage::factory() + ->addDescription(__u('Notification read')) + ->addDetail(__u('Notification'), $id) + ) + ); + + return $this->returnJsonResponse(JsonResponse::JSON_SUCCESS, __u('Notification read')); + } catch (Exception $e) { + processException($e); + + $this->eventDispatcher->notifyEvent('exception', new Event($e)); + + return $this->returnJsonResponseException($e); + } + } +} \ No newline at end of file diff --git a/app/modules/web/Controllers/Notification/CreateController.php b/app/modules/web/Controllers/Notification/CreateController.php new file mode 100644 index 00000000..25bea484 --- /dev/null +++ b/app/modules/web/Controllers/Notification/CreateController.php @@ -0,0 +1,72 @@ +. + */ + +namespace SP\Modules\Web\Controllers\Notification; + + +use Exception; +use SP\Core\Acl\ActionsInterface; +use SP\Core\Events\Event; +use SP\Http\JsonResponse; +use SP\Modules\Web\Controllers\Traits\JsonTrait; + +/** + * Class CreateController + */ +final class CreateController extends NotificationViewBase +{ + use JsonTrait; + + /** + * @return bool + * @throws \JsonException + */ + public function createAction(): bool + { + try { + if (!$this->acl->checkUserAccess(ActionsInterface::NOTIFICATION_CREATE)) { + return $this->returnJsonResponse( + JsonResponse::JSON_ERROR, + __u('You don\'t have permission to do this operation') + ); + } + + $this->view->assign('header', __('New Notification')); + $this->view->assign('isView', false); + $this->view->assign('route', 'notification/saveCreate'); + + $this->setViewData(); + + $this->eventDispatcher->notifyEvent('show.notification.create', new Event($this)); + + return $this->returnJsonResponseData(['html' => $this->render()]); + } catch (Exception $e) { + processException($e); + + $this->eventDispatcher->notifyEvent('exception', new Event($e)); + + return $this->returnJsonResponseException($e); + } + } +} \ No newline at end of file diff --git a/app/modules/web/Controllers/Notification/DeleteController.php b/app/modules/web/Controllers/Notification/DeleteController.php new file mode 100644 index 00000000..8214b266 --- /dev/null +++ b/app/modules/web/Controllers/Notification/DeleteController.php @@ -0,0 +1,93 @@ +. + */ + +namespace SP\Modules\Web\Controllers\Notification; + + +use Exception; +use SP\Core\Events\Event; +use SP\Core\Events\EventMessage; +use SP\Http\JsonResponse; +use SP\Modules\Web\Controllers\Traits\JsonTrait; +use SP\Mvc\Controller\ItemTrait; + +/** + * Class DeleteController + */ +final class DeleteController extends NotificationSaveBase +{ + use JsonTrait, ItemTrait; + + /** + * Delete action + * + * @param int|null $id + * + * @return bool + * @throws \JsonException + */ + public function deleteAction(?int $id = null): bool + { + try { + if ($id === null) { + if ($this->userData->getIsAdminApp()) { + $this->notificationService->deleteAdminBatch($this->getItemsIdFromRequest($this->request)); + } else { + $this->notificationService->deleteByIdBatch($this->getItemsIdFromRequest($this->request)); + } + + $this->eventDispatcher->notifyEvent( + 'delete.notification.selection', + new Event($this, EventMessage::factory()->addDescription(__u('Notifications deleted'))) + ); + + return $this->returnJsonResponse(JsonResponse::JSON_SUCCESS, __u('Notifications deleted')); + } + + if ($this->userData->getIsAdminApp()) { + $this->notificationService->deleteAdmin($id); + } else { + $this->notificationService->delete($id); + } + + $this->eventDispatcher->notifyEvent( + 'delete.notification', + new Event( + $this, + EventMessage::factory() + ->addDescription(__u('Notification deleted')) + ->addDetail(__u('Notification'), $id) + ) + ); + + return $this->returnJsonResponse(JsonResponse::JSON_SUCCESS, __u('Notification deleted')); + } catch (Exception $e) { + processException($e); + + $this->eventDispatcher->notifyEvent('exception', new Event($e)); + + return $this->returnJsonResponseException($e); + } + } +} \ No newline at end of file diff --git a/app/modules/web/Controllers/Notification/EditController.php b/app/modules/web/Controllers/Notification/EditController.php new file mode 100644 index 00000000..a57693a8 --- /dev/null +++ b/app/modules/web/Controllers/Notification/EditController.php @@ -0,0 +1,76 @@ +. + */ + +namespace SP\Modules\Web\Controllers\Notification; + + +use Exception; +use SP\Core\Acl\ActionsInterface; +use SP\Core\Events\Event; +use SP\Http\JsonResponse; +use SP\Modules\Web\Controllers\Traits\JsonTrait; + +/** + * Class EditController + */ +final class EditController extends NotificationViewBase +{ + use JsonTrait; + + /** + * Edit action + * + * @param int $id + * + * @return bool + * @throws \JsonException + */ + public function editAction(int $id): bool + { + try { + if (!$this->acl->checkUserAccess(ActionsInterface::NOTIFICATION_EDIT)) { + return $this->returnJsonResponse( + JsonResponse::JSON_ERROR, + __u('You don\'t have permission to do this operation') + ); + } + + $this->view->assign('header', __('Edit Notification')); + $this->view->assign('isView', false); + $this->view->assign('route', 'notification/saveEdit/'.$id); + + $this->setViewData($id); + + $this->eventDispatcher->notifyEvent('show.notification.edit', new Event($this)); + + return $this->returnJsonResponseData(['html' => $this->render()]); + } catch (Exception $e) { + processException($e); + + $this->eventDispatcher->notifyEvent('exception', new Event($e)); + + return $this->returnJsonResponseException($e); + } + } +} \ No newline at end of file diff --git a/app/modules/web/Controllers/Notification/IndexController.php b/app/modules/web/Controllers/Notification/IndexController.php new file mode 100644 index 00000000..e4957316 --- /dev/null +++ b/app/modules/web/Controllers/Notification/IndexController.php @@ -0,0 +1,65 @@ +. + */ + +namespace SP\Modules\Web\Controllers\Notification; + +use DI\DependencyException; +use DI\NotFoundException; +use SP\Core\Acl\ActionsInterface; +use SP\Core\Exceptions\ConstraintException; +use SP\Core\Exceptions\QueryException; +use SP\Core\Exceptions\SPException; +use SP\Modules\Web\Controllers\ControllerBase; + +/** + * Class IndexController + * + * @package SP\Modules\Web\Controllers + */ +final class IndexController extends ControllerBase +{ + /** + * indexAction + * + * @throws DependencyException + * @throws NotFoundException + * @throws ConstraintException + * @throws QueryException + * @throws SPException + * + * TODO: remove? + */ + public function indexAction(): void + { + if (!$this->acl->checkUserAccess(ActionsInterface::NOTIFICATION)) { + return; + } + + $this->view->addTemplate('index'); + + $this->view->assign('data', $this->getSearchGrid()); + + $this->view(); + } +} \ No newline at end of file diff --git a/app/modules/web/Controllers/Notification/NotificationSaveBase.php b/app/modules/web/Controllers/Notification/NotificationSaveBase.php new file mode 100644 index 00000000..53a7aca7 --- /dev/null +++ b/app/modules/web/Controllers/Notification/NotificationSaveBase.php @@ -0,0 +1,55 @@ +. + */ + +namespace SP\Modules\Web\Controllers\Notification; + + +use SP\Core\Application; +use SP\Domain\Notification\NotificationServiceInterface; +use SP\Modules\Web\Controllers\ControllerBase; +use SP\Modules\Web\Forms\NotificationForm; +use SP\Mvc\Controller\WebControllerHelper; + +/** + * Class NotificationSaveBase + */ +abstract class NotificationSaveBase extends ControllerBase +{ + protected NotificationServiceInterface $notificationService; + protected NotificationForm $form; + + public function __construct( + Application $application, + WebControllerHelper $webControllerHelper, + NotificationServiceInterface $notificationService + ) { + parent::__construct($application, $webControllerHelper); + + $this->checkLoggedIn(); + + $this->notificationService = $notificationService; + $this->form = new NotificationForm($application, $this->request); + } + +} \ No newline at end of file diff --git a/app/modules/web/Controllers/Notification/NotificationViewBase.php b/app/modules/web/Controllers/Notification/NotificationViewBase.php new file mode 100644 index 00000000..e664fb93 --- /dev/null +++ b/app/modules/web/Controllers/Notification/NotificationViewBase.php @@ -0,0 +1,100 @@ +. + */ + +namespace SP\Modules\Web\Controllers\Notification; + + +use SP\Core\Acl\Acl; +use SP\Core\Acl\ActionsInterface; +use SP\Core\Application; +use SP\Core\Exceptions\ConstraintException; +use SP\Core\Exceptions\QueryException; +use SP\DataModel\NotificationData; +use SP\Domain\Notification\NotificationServiceInterface; +use SP\Domain\User\UserServiceInterface; +use SP\Infrastructure\Common\Repositories\NoSuchItemException; +use SP\Modules\Web\Controllers\ControllerBase; +use SP\Mvc\Controller\WebControllerHelper; +use SP\Mvc\View\Components\SelectItemAdapter; + +/** + * Class NotificationViewBase + */ +abstract class NotificationViewBase extends ControllerBase +{ + private NotificationServiceInterface $notificationService; + private UserServiceInterface $userService; + + public function __construct( + Application $application, + WebControllerHelper $webControllerHelper, + NotificationServiceInterface $notificationService, + UserServiceInterface $userService + ) { + parent::__construct($application, $webControllerHelper); + + $this->checkLoggedIn(); + + $this->notificationService = $notificationService; + $this->userService = $userService; + } + + /** + * Sets view data for displaying notification's data + * + * @param int|null $notificationId + * + * @throws ConstraintException + * @throws QueryException + * @throws NoSuchItemException + */ + protected function setViewData(?int $notificationId = null): void + { + $this->view->addTemplate('notification'); + + $notification = $notificationId + ? $this->notificationService->getById($notificationId) + : new NotificationData(); + + $this->view->assign('notification', $notification); + + if ($this->userData->getIsAdminApp()) { + $this->view->assign( + 'users', + SelectItemAdapter::factory($this->userService->getAllBasic()) + ->getItemsFromModelSelected([$notification->userId]) + ); + } + + $this->view->assign('nextAction', Acl::getActionRoute(ActionsInterface::NOTIFICATION)); + + if ($this->view->isView === true) { + $this->view->assign('disabled', 'disabled'); + $this->view->assign('readonly', 'readonly'); + } else { + $this->view->assign('disabled', false); + $this->view->assign('readonly', false); + } + } +} \ No newline at end of file diff --git a/app/modules/web/Controllers/Notification/SaveCreateController.php b/app/modules/web/Controllers/Notification/SaveCreateController.php new file mode 100644 index 00000000..af67f75f --- /dev/null +++ b/app/modules/web/Controllers/Notification/SaveCreateController.php @@ -0,0 +1,71 @@ +. + */ + +namespace SP\Modules\Web\Controllers\Notification; + + +use Exception; +use SP\Core\Acl\ActionsInterface; +use SP\Core\Events\Event; +use SP\Core\Events\EventMessage; +use SP\Http\JsonResponse; +use SP\Modules\Web\Controllers\Traits\JsonTrait; + +final class SaveCreateController extends NotificationSaveBase +{ + use JsonTrait; + + /** + * @return bool + * @throws \JsonException + */ + public function saveCreateAction(): bool + { + try { + if (!$this->acl->checkUserAccess(ActionsInterface::NOTIFICATION_CREATE)) { + return $this->returnJsonResponse( + JsonResponse::JSON_ERROR, + __u('You don\'t have permission to do this operation') + ); + } + + $this->form->validateFor(ActionsInterface::NOTIFICATION_CREATE); + + $this->notificationService->create($this->form->getItemData()); + + $this->eventDispatcher->notifyEvent( + 'create.notification', + new Event($this, EventMessage::factory()->addDescription(__u('Notification created'))) + ); + + return $this->returnJsonResponse(JsonResponse::JSON_SUCCESS, __u('Notification created')); + } catch (Exception $e) { + processException($e); + + $this->eventDispatcher->notifyEvent('exception', new Event($e)); + + return $this->returnJsonResponseException($e); + } + } +} \ No newline at end of file diff --git a/app/modules/web/Controllers/Notification/SaveEditController.php b/app/modules/web/Controllers/Notification/SaveEditController.php new file mode 100644 index 00000000..57e9dcbe --- /dev/null +++ b/app/modules/web/Controllers/Notification/SaveEditController.php @@ -0,0 +1,78 @@ +. + */ + +namespace SP\Modules\Web\Controllers\Notification; + + +use Exception; +use SP\Core\Acl\ActionsInterface; +use SP\Core\Events\Event; +use SP\Core\Events\EventMessage; +use SP\Http\JsonResponse; +use SP\Modules\Web\Controllers\Traits\JsonTrait; + +/** + * Class SaveEditController + */ +final class SaveEditController extends NotificationSaveBase +{ + use JsonTrait; + + /** + * Saves edit action + * + * @param int $id + * + * @return bool + * @throws \JsonException + */ + public function saveEditAction(int $id): bool + { + try { + if (!$this->acl->checkUserAccess(ActionsInterface::NOTIFICATION_EDIT)) { + return $this->returnJsonResponse( + JsonResponse::JSON_ERROR, + __u('You don\'t have permission to do this operation') + ); + } + + $this->form->validateFor(ActionsInterface::NOTIFICATION_EDIT, $id); + + $this->notificationService->update($this->form->getItemData()); + + $this->eventDispatcher->notifyEvent( + 'edit.notification', + new Event($this, EventMessage::factory()->addDescription(__u('Notification updated'))) + ); + + return $this->returnJsonResponse(JsonResponse::JSON_SUCCESS, __u('Notification updated')); + } catch (Exception $e) { + processException($e); + + $this->eventDispatcher->notifyEvent('exception', new Event($e)); + + return $this->returnJsonResponseException($e); + } + } +} \ No newline at end of file diff --git a/app/modules/web/Controllers/Notification/SearchController.php b/app/modules/web/Controllers/Notification/SearchController.php new file mode 100644 index 00000000..d0086b7b --- /dev/null +++ b/app/modules/web/Controllers/Notification/SearchController.php @@ -0,0 +1,103 @@ +. + */ + +namespace SP\Modules\Web\Controllers\Notification; + + +use SP\Core\Acl\ActionsInterface; +use SP\Core\Application; +use SP\Domain\Notification\NotificationServiceInterface; +use SP\Html\DataGrid\DataGridInterface; +use SP\Http\JsonResponse; +use SP\Modules\Web\Controllers\ControllerBase; +use SP\Modules\Web\Controllers\Helpers\Grid\NotificationGrid; +use SP\Modules\Web\Controllers\Traits\JsonTrait; +use SP\Mvc\Controller\ItemTrait; +use SP\Mvc\Controller\WebControllerHelper; + +/** + * Class SearchController + */ +final class SearchController extends ControllerBase +{ + use JsonTrait, ItemTrait; + + private NotificationServiceInterface $notificationService; + private NotificationGrid $notificationGrid; + + public function __construct( + Application $application, + WebControllerHelper $webControllerHelper, + NotificationServiceInterface $notificationService, + NotificationGrid $notificationGrid + ) { + parent::__construct($application, $webControllerHelper); + + $this->checkLoggedIn(); + + $this->notificationService = $notificationService; + $this->notificationGrid = $notificationGrid; + } + + /** + * @return bool + * @throws \JsonException + * @throws \SP\Core\Exceptions\ConstraintException + * @throws \SP\Core\Exceptions\QueryException + */ + public function searchAction(): bool + { + if (!$this->acl->checkUserAccess(ActionsInterface::NOTIFICATION_SEARCH)) { + return $this->returnJsonResponse( + JsonResponse::JSON_ERROR, + __u('You don\'t have permission to do this operation') + ); + } + + $this->view->addTemplate('datagrid-table', 'grid'); + $this->view->assign('data', $this->getSearchGrid()); + + return $this->returnJsonResponseData(['html' => $this->render()]); + } + + /** + * getSearchGrid + * + * @return \SP\Html\DataGrid\DataGridInterface + * @throws \SP\Core\Exceptions\ConstraintException + * @throws \SP\Core\Exceptions\QueryException + */ + protected function getSearchGrid(): DataGridInterface + { + $itemSearchData = $this->getSearchData( + $this->configData->getAccountCount(), + $this->request + ); + + return $this->notificationGrid->updatePager( + $this->notificationGrid->getGrid($this->notificationService->search($itemSearchData)), + $itemSearchData + ); + } +} \ No newline at end of file diff --git a/app/modules/web/Controllers/Notification/ViewController.php b/app/modules/web/Controllers/Notification/ViewController.php new file mode 100644 index 00000000..f2dc814f --- /dev/null +++ b/app/modules/web/Controllers/Notification/ViewController.php @@ -0,0 +1,75 @@ +. + */ + +namespace SP\Modules\Web\Controllers\Notification; + + +use Exception; +use SP\Core\Acl\ActionsInterface; +use SP\Core\Events\Event; +use SP\Http\JsonResponse; +use SP\Modules\Web\Controllers\Traits\JsonTrait; + +/** + * Class ViewController + */ +final class ViewController extends NotificationViewBase +{ + use JsonTrait; + + /** + * View action + * + * @param int $id + * + * @return bool + * @throws \JsonException + */ + public function viewAction(int $id): bool + { + try { + if (!$this->acl->checkUserAccess(ActionsInterface::NOTIFICATION_VIEW)) { + return $this->returnJsonResponse( + JsonResponse::JSON_ERROR, + __u('You don\'t have permission to do this operation') + ); + } + + $this->view->assign('header', __('View Notification')); + $this->view->assign('isView', true); + + $this->setViewData($id); + + $this->eventDispatcher->notifyEvent('show.notification', new Event($this)); + + return $this->returnJsonResponseData(['html' => $this->render()]); + } catch (Exception $e) { + processException($e); + + $this->eventDispatcher->notifyEvent('exception', new Event($e)); + + return $this->returnJsonResponseException($e); + } + } +} \ No newline at end of file diff --git a/app/modules/web/Controllers/NotificationController.php b/app/modules/web/Controllers/NotificationController.php deleted file mode 100644 index 70da905a..00000000 --- a/app/modules/web/Controllers/NotificationController.php +++ /dev/null @@ -1,522 +0,0 @@ -. - */ - -namespace SP\Modules\Web\Controllers; - -use DI\DependencyException; -use DI\NotFoundException; -use Exception; -use SP\Core\Acl\Acl; -use SP\Core\Acl\ActionsInterface; -use SP\Core\Events\Event; -use SP\Core\Events\EventMessage; -use SP\Core\Exceptions\ConstraintException; -use SP\Core\Exceptions\QueryException; -use SP\Core\Exceptions\SessionTimeout; -use SP\Core\Exceptions\SPException; -use SP\DataModel\NotificationData; -use SP\Domain\Auth\Services\AuthException; -use SP\Domain\Notification\Services\NotificationService; -use SP\Domain\User\Services\UserService; -use SP\Html\DataGrid\DataGridInterface; -use SP\Http\JsonResponse; -use SP\Infrastructure\Common\Repositories\NoSuchItemException; -use SP\Modules\Web\Controllers\Helpers\Grid\NotificationGrid; -use SP\Modules\Web\Controllers\Traits\JsonTrait; -use SP\Modules\Web\Forms\NotificationForm; -use SP\Mvc\Controller\CrudControllerInterface; -use SP\Mvc\Controller\ItemTrait; -use SP\Mvc\View\Components\SelectItemAdapter; - -/** - * Class NotificationController - * - * @package SP\Modules\Web\Controllers - */ -final class NotificationController extends ControllerBase implements CrudControllerInterface -{ - use JsonTrait, ItemTrait; - - protected ?NotificationService $notificationService = null; - - /** - * indexAction - * - * @throws DependencyException - * @throws NotFoundException - * @throws ConstraintException - * @throws QueryException - * @throws SPException - */ - public function indexAction(): void - { - if (!$this->acl->checkUserAccess(ActionsInterface::NOTIFICATION)) { - return; - } - - $this->view->addTemplate('index'); - - $this->view->assign('data', $this->getSearchGrid()); - - $this->view(); - } - - /** - * getSearchGrid - * - * @throws DependencyException - * @throws NotFoundException - * @throws ConstraintException - * @throws QueryException - */ - protected function getSearchGrid(): DataGridInterface - { - $itemSearchData = $this->getSearchData( - $this->configData->getAccountCount(), - $this->request - ); - - $notificationGrid = $this->dic->get(NotificationGrid::class); - - return $notificationGrid->updatePager( - $notificationGrid->getGrid($this->notificationService->search($itemSearchData)), - $itemSearchData - ); - } - - /** - * View action - * - * @param int $id - * - * @return bool - * @throws \DI\DependencyException - * @throws \DI\NotFoundException - * @throws \JsonException - */ - public function viewAction(int $id): bool - { - try { - if (!$this->acl->checkUserAccess(ActionsInterface::NOTIFICATION_VIEW)) { - return $this->returnJsonResponse( - JsonResponse::JSON_ERROR, - __u('You don\'t have permission to do this operation') - ); - } - - $this->view->assign('header', __('View Notification')); - $this->view->assign('isView', true); - - $this->setViewData($id); - - $this->eventDispatcher->notifyEvent( - 'show.notification', - new Event($this) - ); - - return $this->returnJsonResponseData(['html' => $this->render()]); - } catch (Exception $e) { - processException($e); - - $this->eventDispatcher->notifyEvent( - 'exception', - new Event($e) - ); - - return $this->returnJsonResponseException($e); - } - } - - /** - * Sets view data for displaying notification's data - * - * @param int|null $notificationId - * - * @throws ConstraintException - * @throws QueryException - * @throws NoSuchItemException - */ - protected function setViewData(?int $notificationId = null): void - { - $this->view->addTemplate('notification'); - - $notification = $notificationId - ? $this->notificationService->getById($notificationId) - : new NotificationData(); - - $this->view->assign('notification', $notification); - - if ($this->userData->getIsAdminApp()) { - $this->view->assign( - 'users', - SelectItemAdapter::factory(UserService::getItemsBasic()) - ->getItemsFromModelSelected([$notification->userId]) - ); - } - - $this->view->assign( - 'nextAction', - Acl::getActionRoute(ActionsInterface::NOTIFICATION) - ); - - if ($this->view->isView === true) { - $this->view->assign('disabled', 'disabled'); - $this->view->assign('readonly', 'readonly'); - } else { - $this->view->assign('disabled', false); - $this->view->assign('readonly', false); - } - } - - /** - * @return bool - * @throws \DI\DependencyException - * @throws \DI\NotFoundException - * @throws \JsonException - * @throws \SP\Core\Exceptions\ConstraintException - * @throws \SP\Core\Exceptions\QueryException - */ - public function searchAction(): bool - { - if (!$this->acl->checkUserAccess(ActionsInterface::NOTIFICATION_SEARCH)) { - return $this->returnJsonResponse( - JsonResponse::JSON_ERROR, - __u('You don\'t have permission to do this operation') - ); - } - - $this->view->addTemplate('datagrid-table', 'grid'); - $this->view->assign('data', $this->getSearchGrid()); - - return $this->returnJsonResponseData(['html' => $this->render()]); - } - - /** - * @return bool - * @throws \DI\DependencyException - * @throws \DI\NotFoundException - * @throws \JsonException - */ - public function createAction(): bool - { - try { - if (!$this->acl->checkUserAccess(ActionsInterface::NOTIFICATION_CREATE)) { - return $this->returnJsonResponse( - JsonResponse::JSON_ERROR, - __u('You don\'t have permission to do this operation') - ); - } - - $this->view->assign('header', __('New Notification')); - $this->view->assign('isView', false); - $this->view->assign('route', 'notification/saveCreate'); - - $this->setViewData(); - - $this->eventDispatcher->notifyEvent( - 'show.notification.create', - new Event($this) - ); - - return $this->returnJsonResponseData(['html' => $this->render()]); - } catch (Exception $e) { - processException($e); - - $this->eventDispatcher->notifyEvent( - 'exception', - new Event($e) - ); - - return $this->returnJsonResponseException($e); - } - } - - /** - * Edit action - * - * @param int $id - * - * @return bool - * @throws \DI\DependencyException - * @throws \DI\NotFoundException - * @throws \JsonException - */ - public function editAction(int $id): bool - { - try { - if (!$this->acl->checkUserAccess(ActionsInterface::NOTIFICATION_EDIT)) { - return $this->returnJsonResponse( - JsonResponse::JSON_ERROR, - __u('You don\'t have permission to do this operation') - ); - } - - $this->view->assign('header', __('Edit Notification')); - $this->view->assign('isView', false); - $this->view->assign('route', 'notification/saveEdit/' . $id); - - $this->setViewData($id); - - $this->eventDispatcher->notifyEvent( - 'show.notification.edit', - new Event($this) - ); - - return $this->returnJsonResponseData(['html' => $this->render()]); - } catch (Exception $e) { - processException($e); - - $this->eventDispatcher->notifyEvent( - 'exception', - new Event($e) - ); - - return $this->returnJsonResponseException($e); - } - } - - /** - * Delete action - * - * @param int|null $id - * - * @return bool - * @throws \DI\DependencyException - * @throws \DI\NotFoundException - * @throws \JsonException - */ - public function deleteAction(?int $id = null): bool - { - try { - if ($id === null) { - if ($this->userData->getIsAdminApp()) { - $this->notificationService->deleteAdminBatch($this->getItemsIdFromRequest($this->request)); - } else { - $this->notificationService->deleteByIdBatch($this->getItemsIdFromRequest($this->request)); - } - - $this->eventDispatcher->notifyEvent( - 'delete.notification.selection', - new Event( - $this, - EventMessage::factory() - ->addDescription(__u('Notifications deleted')) - ) - ); - - return $this->returnJsonResponse( - JsonResponse::JSON_SUCCESS, - __u('Notifications deleted') - ); - } - - if ($this->userData->getIsAdminApp()) { - $this->notificationService->deleteAdmin($id); - } else { - $this->notificationService->delete($id); - } - - $this->eventDispatcher->notifyEvent( - 'delete.notification', - new Event( - $this, - EventMessage::factory() - ->addDescription(__u('Notification deleted')) - ->addDetail(__u('Notification'), $id) - ) - ); - - return $this->returnJsonResponse( - JsonResponse::JSON_SUCCESS, - __u('Notification deleted') - ); - } catch (Exception $e) { - processException($e); - - $this->eventDispatcher->notifyEvent( - 'exception', - new Event($e) - ); - - return $this->returnJsonResponseException($e); - } - } - - /** - * Check action - * - * @param int $id - * - * @return bool - * @throws \DI\DependencyException - * @throws \DI\NotFoundException - * @throws \JsonException - */ - public function checkAction(int $id): bool - { - try { - if (!$this->acl->checkUserAccess(ActionsInterface::NOTIFICATION_CHECK)) { - return $this->returnJsonResponse( - JsonResponse::JSON_ERROR, - __u('You don\'t have permission to do this operation') - ); - } - - $this->notificationService->setCheckedById($id); - - $this->eventDispatcher->notifyEvent( - 'check.notification', - new Event( - $this, - EventMessage::factory() - ->addDescription(__u('Notification read')) - ->addDetail(__u('Notification'), $id) - ) - ); - - return $this->returnJsonResponse( - JsonResponse::JSON_SUCCESS, - __u('Notification read') - ); - } catch (Exception $e) { - processException($e); - - $this->eventDispatcher->notifyEvent( - 'exception', - new Event($e) - ); - - return $this->returnJsonResponseException($e); - } - } - - /** - * @return bool - * @throws \DI\DependencyException - * @throws \DI\NotFoundException - * @throws \JsonException - */ - public function saveCreateAction(): bool - { - try { - if (!$this->acl->checkUserAccess(ActionsInterface::NOTIFICATION_CREATE)) { - return $this->returnJsonResponse( - JsonResponse::JSON_ERROR, - __u('You don\'t have permission to do this operation') - ); - } - - $form = new NotificationForm($this->dic); - $form->validateFor(ActionsInterface::NOTIFICATION_CREATE, null); - - $this->notificationService->create($form->getItemData()); - - $this->eventDispatcher->notifyEvent( - 'create.notification', - new Event( - $this, - EventMessage::factory() - ->addDescription(__u('Notification created')) - ) - ); - - return $this->returnJsonResponse( - JsonResponse::JSON_SUCCESS, - __u('Notification created') - ); - } catch (Exception $e) { - processException($e); - - $this->eventDispatcher->notifyEvent( - 'exception', - new Event($e) - ); - - return $this->returnJsonResponseException($e); - } - } - - /** - * Saves edit action - * - * @param int $id - * - * @return bool - * @throws \DI\DependencyException - * @throws \DI\NotFoundException - * @throws \JsonException - */ - public function saveEditAction(int $id): bool - { - try { - if (!$this->acl->checkUserAccess(ActionsInterface::NOTIFICATION_EDIT)) { - return $this->returnJsonResponse( - JsonResponse::JSON_ERROR, - __u('You don\'t have permission to do this operation') - ); - } - - $form = new NotificationForm($this->dic, $id); - $form->validateFor(ActionsInterface::NOTIFICATION_EDIT, null); - - $this->notificationService->update($form->getItemData()); - - $this->eventDispatcher->notifyEvent( - 'edit.notification', - new Event( - $this, - EventMessage::factory() - ->addDescription(__u('Notification updated')) - ) - ); - - return $this->returnJsonResponse( - JsonResponse::JSON_SUCCESS, - __u('Notification updated') - ); - } catch (Exception $e) { - processException($e); - - $this->eventDispatcher->notifyEvent( - 'exception', - new Event($e) - ); - - return $this->returnJsonResponseException($e); - } - } - - /** - * @throws AuthException - * @throws DependencyException - * @throws NotFoundException - * @throws SessionTimeout - */ - protected function initialize(): void - { - $this->checkLoggedIn(); - - $this->notificationService = $this->dic->get(NotificationService::class); - } -} \ No newline at end of file