From f5271b64295524171e84a23f722e488c4089f42d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20D?= Date: Sun, 12 Jun 2022 11:15:47 +0200 Subject: [PATCH] refactor: [WIP] Migrate track controller. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Rubén D --- .../web/Controllers/Track/ClearController.php | 69 ++++++ .../Controllers/Track/SearchController.php | 105 ++++++++++ .../web/Controllers/Track/TrackBase.php | 52 +++++ .../Controllers/Track/UnlockController.php | 72 +++++++ .../web/Controllers/TrackController.php | 196 ------------------ 5 files changed, 298 insertions(+), 196 deletions(-) create mode 100644 app/modules/web/Controllers/Track/ClearController.php create mode 100644 app/modules/web/Controllers/Track/SearchController.php create mode 100644 app/modules/web/Controllers/Track/TrackBase.php create mode 100644 app/modules/web/Controllers/Track/UnlockController.php delete mode 100644 app/modules/web/Controllers/TrackController.php diff --git a/app/modules/web/Controllers/Track/ClearController.php b/app/modules/web/Controllers/Track/ClearController.php new file mode 100644 index 00000000..358f1f14 --- /dev/null +++ b/app/modules/web/Controllers/Track/ClearController.php @@ -0,0 +1,69 @@ +. + */ + +namespace SP\Modules\Web\Controllers\Track; + + +use Exception; +use SP\Core\Acl\ActionsInterface; +use SP\Core\Acl\UnauthorizedActionException; +use SP\Core\Events\Event; +use SP\Core\Exceptions\SPException; +use SP\Http\JsonResponse; +use SP\Modules\Web\Controllers\Traits\JsonTrait; + +/** + * Class ClearController + */ +final class ClearController extends TrackBase +{ + use JsonTrait; + + /** + * Clears tracks + * + * @return bool + * @throws \JsonException + */ + public function clearAction(): bool + { + try { + if (!$this->acl->checkUserAccess(ActionsInterface::TRACK_CLEAR)) { + throw new UnauthorizedActionException(SPException::ERROR); + } + + $this->trackService->clear(); + + $this->eventDispatcher->notifyEvent('clear.track', new Event($this)); + + return $this->returnJsonResponse(JsonResponse::JSON_SUCCESS, __u('Tracks cleared out')); + } 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/Track/SearchController.php b/app/modules/web/Controllers/Track/SearchController.php new file mode 100644 index 00000000..e64ebdb7 --- /dev/null +++ b/app/modules/web/Controllers/Track/SearchController.php @@ -0,0 +1,105 @@ +. + */ + +namespace SP\Modules\Web\Controllers\Track; + + +use SP\Core\Acl\ActionsInterface; +use SP\Core\Acl\UnauthorizedActionException; +use SP\Core\Application; +use SP\Core\Exceptions\SPException; +use SP\Domain\Security\TrackServiceInterface; +use SP\Html\DataGrid\DataGridInterface; +use SP\Modules\Web\Controllers\ControllerBase; +use SP\Modules\Web\Controllers\Helpers\Grid\TrackGrid; +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 TrackServiceInterface $trackService; + private TrackGrid $trackGrid; + + public function __construct( + Application $application, + WebControllerHelper $webControllerHelper, + TrackServiceInterface $trackService, + TrackGrid $trackGrid + ) { + parent::__construct($application, $webControllerHelper); + + $this->checkLoggedIn(); + + $this->trackService = $trackService; + $this->trackGrid = $trackGrid; + } + + /** + * Search action + * + * @return bool + * @throws \JsonException + * @throws \SP\Core\Acl\UnauthorizedActionException + * @throws \SP\Core\Exceptions\ConstraintException + * @throws \SP\Core\Exceptions\QueryException + */ + public function searchAction(): bool + { + if (!$this->acl->checkUserAccess(ActionsInterface::TRACK_SEARCH)) { + throw new UnauthorizedActionException(SPException::ERROR); + } + + $this->view->addTemplate('datagrid-table', 'grid'); + $this->view->assign('index', $this->request->analyzeInt('activetab', 0)); + $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->trackGrid->updatePager( + $this->trackGrid->getGrid($this->trackService->search($itemSearchData)), + $itemSearchData + ); + } +} \ No newline at end of file diff --git a/app/modules/web/Controllers/Track/TrackBase.php b/app/modules/web/Controllers/Track/TrackBase.php new file mode 100644 index 00000000..1c42b4e0 --- /dev/null +++ b/app/modules/web/Controllers/Track/TrackBase.php @@ -0,0 +1,52 @@ +. + */ + +namespace SP\Modules\Web\Controllers\Track; + + +use SP\Core\Application; +use SP\Domain\Security\TrackServiceInterface; +use SP\Modules\Web\Controllers\ControllerBase; +use SP\Mvc\Controller\WebControllerHelper; + +/** + * Class TrackBase + */ +abstract class TrackBase extends ControllerBase +{ + protected TrackServiceInterface $trackService; + + public function __construct( + Application $application, + WebControllerHelper $webControllerHelper, + TrackServiceInterface $trackService + ) { + parent::__construct($application, $webControllerHelper); + + $this->checkLoggedIn(); + + $this->trackService = $trackService; + } + +} \ No newline at end of file diff --git a/app/modules/web/Controllers/Track/UnlockController.php b/app/modules/web/Controllers/Track/UnlockController.php new file mode 100644 index 00000000..f90fead9 --- /dev/null +++ b/app/modules/web/Controllers/Track/UnlockController.php @@ -0,0 +1,72 @@ +. + */ + +namespace SP\Modules\Web\Controllers\Track; + +use Exception; +use SP\Core\Acl\ActionsInterface; +use SP\Core\Acl\UnauthorizedActionException; +use SP\Core\Events\Event; +use SP\Core\Exceptions\SPException; +use SP\Http\JsonResponse; +use SP\Modules\Web\Controllers\Traits\JsonTrait; + +/** + * Class UnlockController + * + * @package SP\Modules\Web\Controllers + */ +final class UnlockController extends TrackBase +{ + use JsonTrait; + + /** + * Unlocks a track + * + * @param int $id + * + * @return bool + * @throws \JsonException + */ + public function unlockAction(int $id): ?bool + { + try { + if (!$this->acl->checkUserAccess(ActionsInterface::TRACK_UNLOCK)) { + throw new UnauthorizedActionException(SPException::ERROR); + } + + $this->trackService->unlock($id); + + $this->eventDispatcher->notifyEvent('unlock.track', new Event($this)); + + return $this->returnJsonResponse(JsonResponse::JSON_SUCCESS, __u('Track unlocked')); + } 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/TrackController.php b/app/modules/web/Controllers/TrackController.php deleted file mode 100644 index 7231fc0f..00000000 --- a/app/modules/web/Controllers/TrackController.php +++ /dev/null @@ -1,196 +0,0 @@ -. - */ - -namespace SP\Modules\Web\Controllers; - -use DI\DependencyException; -use DI\NotFoundException; -use Exception; -use SP\Core\Acl\ActionsInterface; -use SP\Core\Acl\UnauthorizedActionException; -use SP\Core\Events\Event; -use SP\Core\Exceptions\ConstraintException; -use SP\Core\Exceptions\QueryException; -use SP\Core\Exceptions\SessionTimeout; -use SP\Core\Exceptions\SPException; -use SP\Domain\Auth\Services\AuthException; -use SP\Domain\Security\Services\TrackService; -use SP\Html\DataGrid\DataGridInterface; -use SP\Http\JsonResponse; -use SP\Modules\Web\Controllers\Helpers\Grid\TrackGrid; -use SP\Modules\Web\Controllers\Traits\JsonTrait; -use SP\Mvc\Controller\ItemTrait; - -/** - * Class TrackController - * - * @package SP\Modules\Web\Controllers - */ -final class TrackController extends ControllerBase -{ - use JsonTrait, ItemTrait; - - protected ?TrackService $trackService = null; - - /** - * Search action - * - * @return bool - * @throws DependencyException - * @throws NotFoundException - * @throws ConstraintException - * @throws QueryException - * @throws UnauthorizedActionException - * @throws SPException - */ - public function searchAction(): bool - { - if (!$this->acl->checkUserAccess(ActionsInterface::TRACK_SEARCH)) { - throw new UnauthorizedActionException(SPException::ERROR); - } - - $this->view->addTemplate('datagrid-table', 'grid'); - $this->view->assign( - 'index', - $this->request->analyzeInt('activetab', 0) - ); - $this->view->assign('data', $this->getSearchGrid()); - - return $this->returnJsonResponseData(['html' => $this->render()]); - } - - /** - * getSearchGrid - * - * @throws DependencyException - * @throws NotFoundException - * @throws ConstraintException - * @throws QueryException - */ - protected function getSearchGrid(): DataGridInterface - { - $itemSearchData = $this->getSearchData( - $this->configData->getAccountCount(), - $this->request - ); - - $itemsGridHelper = $this->dic->get(TrackGrid::class); - - return $itemsGridHelper->updatePager( - $itemsGridHelper->getGrid($this->trackService->search($itemSearchData)), - $itemSearchData - ); - } - - /** - * Unlocks a track - * - * @param int $id - * - * @return bool - * @throws \DI\DependencyException - * @throws \DI\NotFoundException - * @throws \JsonException - */ - public function unlockAction(int $id): ?bool - { - try { - if (!$this->acl->checkUserAccess(ActionsInterface::TRACK_UNLOCK)) { - throw new UnauthorizedActionException(SPException::ERROR); - } - - $this->trackService->unlock($id); - - $this->eventDispatcher->notifyEvent( - 'unlock.track', - new Event($this) - ); - - return $this->returnJsonResponse( - JsonResponse::JSON_SUCCESS, - __u('Track unlocked') - ); - } catch (Exception $e) { - processException($e); - - $this->eventDispatcher->notifyEvent( - 'exception', - new Event($e) - ); - - return $this->returnJsonResponseException($e); - } - } - - /** - * Clears tracks - * - * @return bool - * @throws \DI\DependencyException - * @throws \DI\NotFoundException - * @throws \JsonException - */ - public function clearAction(): bool - { - try { - if (!$this->acl->checkUserAccess(ActionsInterface::TRACK_CLEAR)) { - throw new UnauthorizedActionException(SPException::ERROR); - } - - $this->trackService->clear(); - - $this->eventDispatcher->notifyEvent( - 'clear.track', - new Event($this) - ); - - return $this->returnJsonResponse( - JsonResponse::JSON_SUCCESS, - __u('Tracks cleared out') - ); - } 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->trackService = $this->dic->get(TrackService::class); - } -} \ No newline at end of file