diff --git a/app/config/actions.xml b/app/config/actions.xml index 1ba6d586..768a5b1d 100644 --- a/app/config/actions.xml +++ b/app/config/actions.xml @@ -791,7 +791,7 @@ 1315 ACCOUNTMGR_HISTORY_RESTORE Restaurar Cuenta - accountManager/restore + accountHistoryManager/restore 1403 diff --git a/app/modules/web/Controllers/AccessManagerController.php b/app/modules/web/Controllers/AccessManagerController.php index d4a13702..1bdcadaa 100644 --- a/app/modules/web/Controllers/AccessManagerController.php +++ b/app/modules/web/Controllers/AccessManagerController.php @@ -27,7 +27,11 @@ namespace SP\Modules\Web\Controllers; use SP\Core\Acl\Acl; use SP\Core\Events\Event; use SP\DataModel\ItemSearchData; -use SP\Modules\Web\Controllers\Helpers\ItemsGridHelper; +use SP\Modules\Web\Controllers\Helpers\Grid\AuthTokenGrid; +use SP\Modules\Web\Controllers\Helpers\Grid\PublicLinkGrid; +use SP\Modules\Web\Controllers\Helpers\Grid\UserGrid; +use SP\Modules\Web\Controllers\Helpers\Grid\UserGroupGrid; +use SP\Modules\Web\Controllers\Helpers\Grid\UserProfileGrid; use SP\Modules\Web\Controllers\Helpers\TabsGridHelper; use SP\Services\AuthToken\AuthTokenService; use SP\Services\PublicLink\PublicLinkService; @@ -46,10 +50,6 @@ final class AccessManagerController extends ControllerBase * @var ItemSearchData */ protected $itemSearchData; - /** - * @var ItemsGridHelper - */ - protected $itemsGridHelper; /** * @var TabsGridHelper */ @@ -75,11 +75,8 @@ final class AccessManagerController extends ControllerBase $this->itemSearchData = new ItemSearchData(); $this->itemSearchData->setLimitCount($this->configData->getAccountCount()); - $this->itemsGridHelper = $this->dic->get(ItemsGridHelper::class); $this->tabsGridHelper = $this->dic->get(TabsGridHelper::class); - $this->itemsGridHelper->setQueryTimeStart(microtime(true)); - if ($this->checkAccess(Acl::USER)) { $this->tabsGridHelper->addTab($this->getUsersList()); } @@ -117,7 +114,9 @@ final class AccessManagerController extends ControllerBase protected function getUsersList() { - return $this->itemsGridHelper->getUsersGrid($this->dic->get(UserService::class)->search($this->itemSearchData))->updatePager(); + return $this->dic->get(UserGrid::class) + ->getGrid($this->dic->get(UserService::class)->search($this->itemSearchData)) + ->updatePager(); } /** @@ -129,7 +128,9 @@ final class AccessManagerController extends ControllerBase */ protected function getUsersGroupList() { - return $this->itemsGridHelper->getUserGroupsGrid($this->dic->get(UserGroupService::class)->search($this->itemSearchData))->updatePager(); + return $this->dic->get(UserGroupGrid::class) + ->getGrid($this->dic->get(UserGroupService::class)->search($this->itemSearchData)) + ->updatePager(); } /** @@ -141,7 +142,9 @@ final class AccessManagerController extends ControllerBase */ protected function getUsersProfileList() { - return $this->itemsGridHelper->getUserProfilesGrid($this->dic->get(UserProfileService::class)->search($this->itemSearchData))->updatePager(); + return $this->dic->get(UserProfileGrid::class) + ->getGrid($this->dic->get(UserProfileService::class)->search($this->itemSearchData)) + ->updatePager(); } /** @@ -153,7 +156,9 @@ final class AccessManagerController extends ControllerBase */ protected function getApiTokensList() { - return $this->itemsGridHelper->getAuthTokensGrid($this->dic->get(AuthTokenService::class)->search($this->itemSearchData))->updatePager(); + return $this->dic->get(AuthTokenGrid::class) + ->getGrid($this->dic->get(AuthTokenService::class)->search($this->itemSearchData)) + ->updatePager(); } /** @@ -165,7 +170,9 @@ final class AccessManagerController extends ControllerBase */ protected function getPublicLinksList() { - return $this->itemsGridHelper->getPublicLinksGrid($this->dic->get(PublicLinkService::class)->search($this->itemSearchData))->updatePager(); + return $this->dic->get(PublicLinkGrid::class) + ->getGrid($this->dic->get(PublicLinkService::class)->search($this->itemSearchData)) + ->updatePager(); } /** diff --git a/app/modules/web/Controllers/AccountFileController.php b/app/modules/web/Controllers/AccountFileController.php index 7a8d3f62..45643e6e 100644 --- a/app/modules/web/Controllers/AccountFileController.php +++ b/app/modules/web/Controllers/AccountFileController.php @@ -31,7 +31,7 @@ use SP\Core\Exceptions\SPException; use SP\DataModel\FileData; use SP\Html\Html; use SP\Http\JsonResponse; -use SP\Modules\Web\Controllers\Helpers\ItemsGridHelper; +use SP\Modules\Web\Controllers\Helpers\Grid\FileGrid; use SP\Modules\Web\Controllers\Traits\ItemTrait; use SP\Modules\Web\Controllers\Traits\JsonTrait; use SP\Mvc\Controller\CrudControllerInterface; @@ -267,10 +267,11 @@ final class AccountFileController extends ControllerBase implements CrudControll */ protected function getSearchGrid() { - $itemsGridHelper = $this->dic->get(ItemsGridHelper::class); $itemSearchData = $this->getSearchData($this->configData->getAccountCount(), $this->request); - return $itemsGridHelper->updatePager($itemsGridHelper->getFilesGrid($this->accountFileService->search($itemSearchData)), $itemSearchData); + $fileGrid = $this->dic->get(FileGrid::class); + + return $fileGrid->updatePager($fileGrid->getGrid($this->accountFileService->search($itemSearchData)), $itemSearchData); } /** diff --git a/app/modules/web/Controllers/AccountHistoryManagerController.php b/app/modules/web/Controllers/AccountHistoryManagerController.php index 6f425fa0..6b5f3399 100644 --- a/app/modules/web/Controllers/AccountHistoryManagerController.php +++ b/app/modules/web/Controllers/AccountHistoryManagerController.php @@ -28,10 +28,11 @@ use SP\Core\Acl\Acl; use SP\Core\Events\Event; use SP\Core\Events\EventMessage; use SP\Http\JsonResponse; -use SP\Modules\Web\Controllers\Helpers\ItemsGridHelper; +use SP\Modules\Web\Controllers\Helpers\Grid\AccountHistoryGrid; use SP\Modules\Web\Controllers\Traits\ItemTrait; use SP\Modules\Web\Controllers\Traits\JsonTrait; use SP\Services\Account\AccountHistoryService; +use SP\Services\Account\AccountService; /** * Class AccountHistoryManagerController @@ -73,10 +74,11 @@ final class AccountHistoryManagerController extends ControllerBase */ protected function getSearchGrid() { - $itemsGridHelper = $this->dic->get(ItemsGridHelper::class); $itemSearchData = $this->getSearchData($this->configData->getAccountCount(), $this->request); - return $itemsGridHelper->updatePager($itemsGridHelper->getAccountsHistoryGrid($this->accountHistoryService->search($itemSearchData)), $itemSearchData); + $historyGrid = $this->dic->get(AccountHistoryGrid::class); + + return $historyGrid->updatePager($historyGrid->getGrid($this->accountHistoryService->search($itemSearchData)), $itemSearchData); } /** @@ -116,6 +118,39 @@ final class AccountHistoryManagerController extends ControllerBase } } + /** + * Saves restore action + * + * @param int $id Account's history ID + */ + public function restoreAction($id) + { + try { + $accountDetails = $this->accountHistoryService->getById($id); + + $accountService = $this->dic->get(AccountService::class); + + if ($accountDetails->isModify) { + $accountService->editRestore($id, $accountDetails->getAccountId()); + } else { + $accountService->createFromHistory($accountDetails); + } + + $this->eventDispatcher->notifyEvent('restore.accountHistory', + new Event($this, EventMessage::factory() + ->addDescription(__u('Cuenta restaurada')) + ->addDetail(__u('Cuenta'), $accountDetails->getName()) + ->addDetail(__u('Cliente'), $accountDetails->getClientName())) + ); + + $this->returnJsonResponse(JsonResponse::JSON_SUCCESS, __u('Cuenta restaurada')); + } catch (\Exception $e) { + processException($e); + + $this->returnJsonResponseException($e); + } + } + /** * Initialize class * diff --git a/app/modules/web/Controllers/AccountManagerController.php b/app/modules/web/Controllers/AccountManagerController.php index 18cf3c3d..8fba46d4 100644 --- a/app/modules/web/Controllers/AccountManagerController.php +++ b/app/modules/web/Controllers/AccountManagerController.php @@ -28,7 +28,7 @@ use SP\Core\Acl\Acl; use SP\Core\Events\Event; use SP\Core\Events\EventMessage; use SP\Http\JsonResponse; -use SP\Modules\Web\Controllers\Helpers\ItemsGridHelper; +use SP\Modules\Web\Controllers\Helpers\Grid\AccountGrid; use SP\Modules\Web\Controllers\Traits\ItemTrait; use SP\Modules\Web\Controllers\Traits\JsonTrait; use SP\Services\Account\AccountService; @@ -73,10 +73,11 @@ final class AccountManagerController extends ControllerBase */ protected function getSearchGrid() { - $itemsGridHelper = $this->dic->get(ItemsGridHelper::class); $itemSearchData = $this->getSearchData($this->configData->getAccountCount(), $this->request); - return $itemsGridHelper->updatePager($itemsGridHelper->getAccountsGrid($this->accountService->search($itemSearchData)), $itemSearchData); + $accountGrid = $this->dic->get(AccountGrid::class); + + return $accountGrid->updatePager($accountGrid->getGrid($this->accountService->search($itemSearchData)), $itemSearchData); } /** diff --git a/app/modules/web/Controllers/AuthTokenController.php b/app/modules/web/Controllers/AuthTokenController.php index cdd39d19..d2d0e3cf 100644 --- a/app/modules/web/Controllers/AuthTokenController.php +++ b/app/modules/web/Controllers/AuthTokenController.php @@ -30,7 +30,7 @@ use SP\Core\Events\EventMessage; use SP\Core\Exceptions\ValidationException; use SP\DataModel\AuthTokenData; use SP\Http\JsonResponse; -use SP\Modules\Web\Controllers\Helpers\ItemsGridHelper; +use SP\Modules\Web\Controllers\Helpers\Grid\AuthTokenGrid; use SP\Modules\Web\Controllers\Traits\ItemTrait; use SP\Modules\Web\Controllers\Traits\JsonTrait; use SP\Modules\Web\Forms\AuthTokenForm; @@ -81,10 +81,11 @@ final class AuthTokenController extends ControllerBase implements CrudController */ protected function getSearchGrid() { - $itemsGridHelper = $this->dic->get(ItemsGridHelper::class); $itemSearchData = $this->getSearchData($this->configData->getAccountCount(), $this->request); - return $itemsGridHelper->updatePager($itemsGridHelper->getAuthTokensGrid($this->authTokenService->search($itemSearchData)), $itemSearchData); + $authTokenGrid = $this->dic->get(AuthTokenGrid::class); + + return $authTokenGrid->updatePager($authTokenGrid->getGrid($this->authTokenService->search($itemSearchData)), $itemSearchData); } /** diff --git a/app/modules/web/Controllers/CategoryController.php b/app/modules/web/Controllers/CategoryController.php index a4cbc380..8acb0072 100644 --- a/app/modules/web/Controllers/CategoryController.php +++ b/app/modules/web/Controllers/CategoryController.php @@ -30,7 +30,7 @@ use SP\Core\Events\EventMessage; use SP\Core\Exceptions\ValidationException; use SP\DataModel\CategoryData; use SP\Http\JsonResponse; -use SP\Modules\Web\Controllers\Helpers\ItemsGridHelper; +use SP\Modules\Web\Controllers\Helpers\Grid\CategoryGrid; use SP\Modules\Web\Controllers\Traits\ItemTrait; use SP\Modules\Web\Controllers\Traits\JsonTrait; use SP\Modules\Web\Forms\CategoryForm; @@ -79,10 +79,11 @@ final class CategoryController extends ControllerBase implements CrudControllerI */ protected function getSearchGrid() { - $itemsGridHelper = $this->dic->get(ItemsGridHelper::class); $itemSearchData = $this->getSearchData($this->configData->getAccountCount(), $this->request); - return $itemsGridHelper->updatePager($itemsGridHelper->getCategoriesGrid($this->categoryService->search($itemSearchData)), $itemSearchData); + $itemsGridHelper = $this->dic->get(CategoryGrid::class); + + return $itemsGridHelper->updatePager($itemsGridHelper->getGrid($this->categoryService->search($itemSearchData)), $itemSearchData); } /** diff --git a/app/modules/web/Controllers/ClientController.php b/app/modules/web/Controllers/ClientController.php index ba085982..b61370ff 100644 --- a/app/modules/web/Controllers/ClientController.php +++ b/app/modules/web/Controllers/ClientController.php @@ -31,7 +31,7 @@ use SP\Core\Events\EventMessage; use SP\Core\Exceptions\ValidationException; use SP\DataModel\ClientData; use SP\Http\JsonResponse; -use SP\Modules\Web\Controllers\Helpers\ItemsGridHelper; +use SP\Modules\Web\Controllers\Helpers\Grid\ClientGrid; use SP\Modules\Web\Controllers\Traits\ItemTrait; use SP\Modules\Web\Controllers\Traits\JsonTrait; use SP\Modules\Web\Forms\ClientForm; @@ -80,10 +80,11 @@ final class ClientController extends ControllerBase implements CrudControllerInt */ protected function getSearchGrid() { - $itemsGridHelper = $this->dic->get(ItemsGridHelper::class); $itemSearchData = $this->getSearchData($this->configData->getAccountCount(), $this->request); - return $itemsGridHelper->updatePager($itemsGridHelper->getClientsGrid($this->clientService->search($itemSearchData)), $itemSearchData); + $clientGrid = $this->dic->get(ClientGrid::class); + + return $clientGrid->updatePager($clientGrid->getGrid($this->clientService->search($itemSearchData)), $itemSearchData); } /** diff --git a/app/modules/web/Controllers/CustomFieldController.php b/app/modules/web/Controllers/CustomFieldController.php index 49b613d3..70f68dc6 100644 --- a/app/modules/web/Controllers/CustomFieldController.php +++ b/app/modules/web/Controllers/CustomFieldController.php @@ -30,7 +30,7 @@ use SP\Core\Events\EventMessage; use SP\Core\Exceptions\ValidationException; use SP\DataModel\CustomFieldDefinitionData; use SP\Http\JsonResponse; -use SP\Modules\Web\Controllers\Helpers\ItemsGridHelper; +use SP\Modules\Web\Controllers\Helpers\Grid\CustomFieldGrid; use SP\Modules\Web\Controllers\Traits\ItemTrait; use SP\Modules\Web\Controllers\Traits\JsonTrait; use SP\Modules\Web\Forms\CustomFieldDefForm; @@ -81,10 +81,11 @@ final class CustomFieldController extends ControllerBase implements CrudControll */ protected function getSearchGrid() { - $itemsGridHelper = $this->dic->get(ItemsGridHelper::class); $itemSearchData = $this->getSearchData($this->configData->getAccountCount(), $this->request); - return $itemsGridHelper->updatePager($itemsGridHelper->getCustomFieldsGrid($this->customFieldService->search($itemSearchData)), $itemSearchData); + $customFieldGrid = $this->dic->get(CustomFieldGrid::class); + + return $customFieldGrid->updatePager($customFieldGrid->getGrid($this->customFieldService->search($itemSearchData)), $itemSearchData); } /** diff --git a/app/modules/web/Controllers/EventlogController.php b/app/modules/web/Controllers/EventlogController.php index 301f2a50..5523979b 100644 --- a/app/modules/web/Controllers/EventlogController.php +++ b/app/modules/web/Controllers/EventlogController.php @@ -28,7 +28,7 @@ use SP\Core\Acl\Acl; use SP\Core\Events\Event; use SP\Core\Events\EventMessage; use SP\Http\JsonResponse; -use SP\Modules\Web\Controllers\Helpers\ItemsGridHelper; +use SP\Modules\Web\Controllers\Helpers\Grid\EventlogGrid; use SP\Modules\Web\Controllers\Traits\ItemTrait; use SP\Modules\Web\Controllers\Traits\JsonTrait; use SP\Services\EventLog\EventlogService; @@ -75,12 +75,11 @@ final class EventlogController extends ControllerBase */ protected function getSearchGrid() { - $itemsGridHelper = $this->dic->get(ItemsGridHelper::class); - $itemsGridHelper->setQueryTimeStart(microtime(true)); - $itemSearchData = $this->getSearchData($this->configData->getAccountCount(), $this->request); - return $itemsGridHelper->updatePager($itemsGridHelper->getEventLogGrid($this->eventLogService->search($itemSearchData)), $itemSearchData); + $eventlogGrid = $this->dic->get(EventlogGrid::class); + + return $eventlogGrid->updatePager($eventlogGrid->getGrid($this->eventLogService->search($itemSearchData)), $itemSearchData); } /** diff --git a/app/modules/web/Controllers/Helpers/Grid/AccountGrid.php b/app/modules/web/Controllers/Helpers/Grid/AccountGrid.php new file mode 100644 index 00000000..830e2b8b --- /dev/null +++ b/app/modules/web/Controllers/Helpers/Grid/AccountGrid.php @@ -0,0 +1,155 @@ +. + */ + +namespace SP\Modules\Web\Controllers\Helpers\Grid; + +use SP\Core\Acl\Acl; +use SP\Core\Acl\ActionsInterface; +use SP\Html\DataGrid\DataGridAction; +use SP\Html\DataGrid\DataGridActionSearch; +use SP\Html\DataGrid\DataGridActionType; +use SP\Html\DataGrid\DataGridData; +use SP\Html\DataGrid\DataGridHeader; +use SP\Html\DataGrid\DataGridInterface; +use SP\Html\DataGrid\DataGridTab; +use SP\Storage\Database\QueryResult; + +/** + * Class AccountGrid + * + * @package SP\Modules\Web\Controllers\Helpers\Grid + */ +final class AccountGrid extends GridBase +{ + /** + * @var QueryResult + */ + private $queryResult; + + /** + * @param QueryResult $queryResult + * + * @return DataGridInterface + */ + public function getGrid(QueryResult $queryResult): DataGridInterface + { + $this->queryResult = $queryResult; + + $grid = $this->getGridLayout(); + + $searchAction = $this->getSearchAction(); + + $grid->setDataActions($this->getSearchAction()); + $grid->setPager($this->getPager($searchAction)); + + $deleteAction = $this->getDeleteAction(); + + $grid->setDataActions($deleteAction); + $grid->setDataActions($deleteAction, true); + + $grid->setTime(round(getElapsedTime($this->queryTimeStart), 5)); + + return $grid; + } + + /** + * @return DataGridInterface + */ + protected function getGridLayout(): DataGridInterface + { + // Grid + $gridTab = new DataGridTab($this->view->getTheme()); + $gridTab->setId('tblAccounts'); + $gridTab->setDataRowTemplate('datagrid-rows', 'grid'); + $gridTab->setDataPagerTemplate('datagrid-nav-full', 'grid'); + $gridTab->setHeader($this->getHeader()); + $gridTab->setData($this->getData()); + $gridTab->setTitle(__('Cuentas')); + + return $gridTab; + } + + /** + * @return DataGridHeader + */ + protected function getHeader(): DataGridHeader + { + // Grid Header + $gridHeader = new DataGridHeader(); + $gridHeader->addHeader(__('Nombre')); + $gridHeader->addHeader(__('Cliente')); + $gridHeader->addHeader(__('Categoría')); + + return $gridHeader; + } + + /** + * @return DataGridData + */ + protected function getData(): DataGridData + { + // Grid Data + $gridData = new DataGridData(); + $gridData->setDataRowSourceId('id'); + $gridData->addDataRowSource('name'); + $gridData->addDataRowSource('clientName'); + $gridData->addDataRowSource('categoryName'); + $gridData->setData($this->queryResult); + + return $gridData; + } + + /** + * @return DataGridActionSearch + */ + private function getSearchAction() + { + $gridActionSearch = new DataGridActionSearch(); + $gridActionSearch->setId(ActionsInterface::ACCOUNTMGR_SEARCH); + $gridActionSearch->setType(DataGridActionType::SEARCH_ITEM); + $gridActionSearch->setName('frmSearchAccount'); + $gridActionSearch->setTitle(__('Buscar Cuenta')); + $gridActionSearch->setOnSubmitFunction('appMgmt/search'); + $gridActionSearch->addData('action-route', Acl::getActionRoute(ActionsInterface::ACCOUNTMGR_SEARCH)); + + return $gridActionSearch; + } + + /** + * @return DataGridAction + */ + private function getDeleteAction() + { + $gridAction = new DataGridAction(); + $gridAction->setId(ActionsInterface::ACCOUNTMGR_DELETE); + $gridAction->setType(DataGridActionType::DELETE_ITEM); + $gridAction->setName(__('Eliminar Cuenta')); + $gridAction->setTitle(__('Eliminar Cuenta')); + $gridAction->setIcon($this->icons->getIconDelete()); + $gridAction->setOnClickFunction('appMgmt/delete'); + $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::ACCOUNTMGR_DELETE)); + + return $gridAction; + } +} \ No newline at end of file diff --git a/app/modules/web/Controllers/Helpers/Grid/AccountHistoryGrid.php b/app/modules/web/Controllers/Helpers/Grid/AccountHistoryGrid.php new file mode 100644 index 00000000..53d465f8 --- /dev/null +++ b/app/modules/web/Controllers/Helpers/Grid/AccountHistoryGrid.php @@ -0,0 +1,183 @@ +. + */ + +namespace SP\Modules\Web\Controllers\Helpers\Grid; + +use SP\Core\Acl\Acl; +use SP\Core\Acl\ActionsInterface; +use SP\Html\DataGrid\DataGridAction; +use SP\Html\DataGrid\DataGridActionSearch; +use SP\Html\DataGrid\DataGridActionType; +use SP\Html\DataGrid\DataGridData; +use SP\Html\DataGrid\DataGridHeader; +use SP\Html\DataGrid\DataGridInterface; +use SP\Html\DataGrid\DataGridTab; +use SP\Storage\Database\QueryResult; + +/** + * Class AccountHistoryGrid + * + * @package SP\Modules\Web\Controllers\Helpers\Grid + */ +final class AccountHistoryGrid extends GridBase +{ + /** + * @var QueryResult + */ + private $queryResult; + + /** + * @param QueryResult $queryResult + * + * @return DataGridInterface + */ + public function getGrid(QueryResult $queryResult): DataGridInterface + { + $this->queryResult = $queryResult; + + $grid = $this->getGridLayout(); + + $searchAction = $this->getSearchAction(); + + $grid->setDataActions($this->getSearchAction()); + $grid->setPager($this->getPager($searchAction)); + + $grid->setDataActions($this->getRestoreAction()); + + $deleteAction = $this->getDeleteAction(); + + $grid->setDataActions($deleteAction); + $grid->setDataActions($deleteAction, true); + + $grid->setTime(round(getElapsedTime($this->queryTimeStart), 5)); + + return $grid; + } + + /** + * @return DataGridInterface + */ + protected function getGridLayout(): DataGridInterface + { + // Grid + $gridTab = new DataGridTab($this->view->getTheme()); + $gridTab->setId('tblAccountsHistory'); + $gridTab->setDataRowTemplate('datagrid-rows', 'grid'); + $gridTab->setDataPagerTemplate('datagrid-nav-full', 'grid'); + $gridTab->setHeader($this->getHeader()); + $gridTab->setData($this->getData()); + $gridTab->setTitle(__('Cuentas (H)')); + + return $gridTab; + } + + /** + * @return DataGridHeader + */ + protected function getHeader(): DataGridHeader + { + // Grid Header + $gridHeader = new DataGridHeader(); + $gridHeader->addHeader(__('Nombre')); + $gridHeader->addHeader(__('Cliente')); + $gridHeader->addHeader(__('Categoría')); + $gridHeader->addHeader(__('Fecha')); + $gridHeader->addHeader(__('Estado')); + + return $gridHeader; + } + + /** + * @return DataGridData + */ + protected function getData(): DataGridData + { + // Grid Data + $iconEdit = clone $this->icons->getIconEdit(); + $iconDelete = clone $this->icons->getIconDelete(); + + // Grid Data + $gridData = new DataGridData(); + $gridData->setDataRowSourceId('id'); + $gridData->addDataRowSource('name'); + $gridData->addDataRowSource('clientName'); + $gridData->addDataRowSource('categoryName'); + $gridData->addDataRowSource('date'); + $gridData->addDataRowSourceWithIcon('isModify', $iconEdit->setTitle(__('Modificada'))->setClass('opacity50')); + $gridData->addDataRowSourceWithIcon('isDeleted', $iconDelete->setTitle(__('Eliminada'))->setClass('opacity50')); + $gridData->setData($this->queryResult); + + return $gridData; + } + + /** + * @return DataGridActionSearch + */ + private function getSearchAction() + { + $gridActionSearch = new DataGridActionSearch(); + $gridActionSearch->setId(ActionsInterface::ACCOUNTMGR_HISTORY_SEARCH); + $gridActionSearch->setType(DataGridActionType::SEARCH_ITEM); + $gridActionSearch->setName('frmSearchAccountHistory'); + $gridActionSearch->setTitle(__('Buscar Cuenta')); + $gridActionSearch->setOnSubmitFunction('appMgmt/search'); + $gridActionSearch->addData('action-route', Acl::getActionRoute(ActionsInterface::ACCOUNTMGR_HISTORY_SEARCH)); + + return $gridActionSearch; + } + + /** + * @return DataGridAction + */ + private function getRestoreAction() + { + $gridAction = new DataGridAction(); + $gridAction->setId(ActionsInterface::ACCOUNTMGR_HISTORY_RESTORE); + $gridAction->setType(DataGridActionType::EDIT_ITEM); + $gridAction->setName(__('Restaurar Cuenta')); + $gridAction->setTitle(__('Restaurar Cuenta')); + $gridAction->setIcon($this->icons->getIconRestore()); + $gridAction->setOnClickFunction('accountManager/restore'); + $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::ACCOUNTMGR_HISTORY_RESTORE)); + + return $gridAction; + } + + /** + * @return DataGridAction + */ + private function getDeleteAction() + { + $gridAction = new DataGridAction(); + $gridAction->setId(ActionsInterface::ACCOUNTMGR_HISTORY_DELETE); + $gridAction->setType(DataGridActionType::DELETE_ITEM); + $gridAction->setName(__('Eliminar Cuenta')); + $gridAction->setTitle(__('Eliminar Cuenta')); + $gridAction->setIcon($this->icons->getIconDelete()); + $gridAction->setOnClickFunction('appMgmt/delete'); + $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::ACCOUNTMGR_HISTORY_DELETE)); + + return $gridAction; + } +} \ No newline at end of file diff --git a/app/modules/web/Controllers/Helpers/Grid/AuthTokenGrid.php b/app/modules/web/Controllers/Helpers/Grid/AuthTokenGrid.php new file mode 100644 index 00000000..b25dc4db --- /dev/null +++ b/app/modules/web/Controllers/Helpers/Grid/AuthTokenGrid.php @@ -0,0 +1,213 @@ +. + */ + +namespace SP\Modules\Web\Controllers\Helpers\Grid; + + +use SP\Core\Acl\Acl; +use SP\Core\Acl\ActionsInterface; +use SP\Html\DataGrid\DataGridAction; +use SP\Html\DataGrid\DataGridActionSearch; +use SP\Html\DataGrid\DataGridActionType; +use SP\Html\DataGrid\DataGridData; +use SP\Html\DataGrid\DataGridHeader; +use SP\Html\DataGrid\DataGridInterface; +use SP\Html\DataGrid\DataGridTab; +use SP\Storage\Database\QueryResult; + +/** + * Class AuthTokenGrid + * + * @package SP\Modules\Web\Controllers\Helpers\Grid + */ +final class AuthTokenGrid extends GridBase +{ + /** + * @var QueryResult + */ + private $queryResult; + + /** + * @param QueryResult $queryResult + * + * @return DataGridInterface + */ + public function getGrid(QueryResult $queryResult): DataGridInterface + { + $this->queryResult = $queryResult; + + $grid = $this->getGridLayout(); + + $searchAction = $this->getSearchAction(); + + $grid->setDataActions($this->getSearchAction()); + $grid->setPager($this->getPager($searchAction)); + + $grid->setDataActions($this->getCreateAction()); + $grid->setDataActions($this->getViewAction()); + $grid->setDataActions($this->getEditAction()); + + $deleteAction = $this->getDeleteAction(); + + $grid->setDataActions($deleteAction); + $grid->setDataActions($deleteAction, true); + + $grid->setTime(round(getElapsedTime($this->queryTimeStart), 5)); + + return $grid; + } + + /** + * @return DataGridInterface + */ + protected function getGridLayout(): DataGridInterface + { + // Grid + $gridTab = new DataGridTab($this->view->getTheme()); + $gridTab->setId('tblTokens'); + $gridTab->setDataRowTemplate('datagrid-rows', 'grid'); + $gridTab->setDataPagerTemplate('datagrid-nav-full', 'grid'); + $gridTab->setHeader($this->getHeader()); + $gridTab->setData($this->getData()); + $gridTab->setTitle(__('Autorizaciones API')); + + return $gridTab; + } + + /** + * @return DataGridHeader + */ + protected function getHeader(): DataGridHeader + { + // Grid Header + $gridHeader = new DataGridHeader(); + $gridHeader->addHeader(__('Usuario')); + $gridHeader->addHeader(__('Acción')); + + return $gridHeader; + } + + /** + * @return DataGridData + */ + protected function getData(): DataGridData + { + // Grid Data + $gridData = new DataGridData(); + $gridData->setDataRowSourceId('id'); + $gridData->addDataRowSource('userLogin'); + $gridData->addDataRowSource('actionId', false, function ($value) { + return Acl::getActionInfo($value); + }); + $gridData->setData($this->queryResult); + + return $gridData; + } + + /** + * @return DataGridActionSearch + */ + private function getSearchAction() + { + // Grid Actions + $gridActionSearch = new DataGridActionSearch(); + $gridActionSearch->setId(ActionsInterface::AUTHTOKEN_SEARCH); + $gridActionSearch->setType(DataGridActionType::SEARCH_ITEM); + $gridActionSearch->setName('frmSearchToken'); + $gridActionSearch->setTitle(__('Buscar Token')); + $gridActionSearch->setOnSubmitFunction('appMgmt/search'); + $gridActionSearch->addData('action-route', Acl::getActionRoute(ActionsInterface::AUTHTOKEN_SEARCH)); + + return $gridActionSearch; + } + + /** + * @return DataGridAction + */ + private function getCreateAction() + { + $gridAction = new DataGridAction(); + $gridAction->setId(ActionsInterface::AUTHTOKEN_CREATE); + $gridAction->setType(DataGridActionType::MENUBAR_ITEM); + $gridAction->setName(__('Nueva Autorización')); + $gridAction->setTitle(__('Nueva Autorización')); + $gridAction->setIcon($this->icons->getIconAdd()); + $gridAction->setSkip(true); + $gridAction->setOnClickFunction('appMgmt/show'); + $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::AUTHTOKEN_CREATE)); + + return $gridAction; + } + + /** + * @return DataGridAction + */ + private function getViewAction() + { + $gridAction = new DataGridAction(); + $gridAction->setId(ActionsInterface::AUTHTOKEN_VIEW); + $gridAction->setType(DataGridActionType::VIEW_ITEM); + $gridAction->setName(__('Ver token de Autorización')); + $gridAction->setTitle(__('Ver token de Autorización')); + $gridAction->setIcon($this->icons->getIconView()); + $gridAction->setOnClickFunction('appMgmt/show'); + $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::AUTHTOKEN_VIEW)); + + return $gridAction; + } + + /** + * @return DataGridAction + */ + private function getEditAction() + { + $gridAction = new DataGridAction(); + $gridAction->setId(ActionsInterface::AUTHTOKEN_EDIT); + $gridAction->setType(DataGridActionType::EDIT_ITEM); + $gridAction->setName(__('Editar Autorización')); + $gridAction->setTitle(__('Editar Autorización')); + $gridAction->setIcon($this->icons->getIconEdit()); + $gridAction->setOnClickFunction('appMgmt/show'); + $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::AUTHTOKEN_EDIT)); + + return $gridAction; + } + + /** + * @return DataGridAction + */ + private function getDeleteAction() + { + $gridAction = new DataGridAction(); + $gridAction->setId(ActionsInterface::AUTHTOKEN_DELETE); + $gridAction->setType(DataGridActionType::DELETE_ITEM); + $gridAction->setName(__('Eliminar Autorización')); + $gridAction->setTitle(__('Eliminar Autorización')); + $gridAction->setIcon($this->icons->getIconDelete()); + $gridAction->setOnClickFunction('appMgmt/delete'); + $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::AUTHTOKEN_DELETE)); + + return $gridAction; + } +} \ No newline at end of file diff --git a/app/modules/web/Controllers/Helpers/Grid/CategoryGrid.php b/app/modules/web/Controllers/Helpers/Grid/CategoryGrid.php new file mode 100644 index 00000000..34b3dac0 --- /dev/null +++ b/app/modules/web/Controllers/Helpers/Grid/CategoryGrid.php @@ -0,0 +1,192 @@ +. + */ + +namespace SP\Modules\Web\Controllers\Helpers\Grid; + + +use SP\Core\Acl\Acl; +use SP\Core\Acl\ActionsInterface; +use SP\Html\DataGrid\DataGridAction; +use SP\Html\DataGrid\DataGridActionSearch; +use SP\Html\DataGrid\DataGridActionType; +use SP\Html\DataGrid\DataGridData; +use SP\Html\DataGrid\DataGridHeader; +use SP\Html\DataGrid\DataGridInterface; +use SP\Html\DataGrid\DataGridTab; +use SP\Storage\Database\QueryResult; + +/** + * Class CategoryGrid + * + * @package SP\Modules\Web\Controllers\Helpers\Grid + */ +final class CategoryGrid extends GridBase +{ + /** + * @var QueryResult + */ + private $queryResult; + + /** + * @param QueryResult $queryResult + * + * @return DataGridInterface + */ + public function getGrid(QueryResult $queryResult): DataGridInterface + { + $this->queryResult = $queryResult; + + $grid = $this->getGridLayout(); + + $searchAction = $this->getSearchAction(); + + $grid->setDataActions($this->getSearchAction()); + $grid->setPager($this->getPager($searchAction)); + $grid->setDataActions($this->getCreateAction()); + $grid->setDataActions($this->getEditAction()); + + $deleteAction = $this->getDeleteAction(); + + $grid->setDataActions($deleteAction); + $grid->setDataActions($deleteAction, true); + + $grid->setTime(round(getElapsedTime($this->queryTimeStart), 5)); + + return $grid; + } + + /** + * @return DataGridInterface + */ + protected function getGridLayout(): DataGridInterface + { + // Grid + $gridTab = new DataGridTab($this->view->getTheme()); + $gridTab->setId('tblCategories'); + $gridTab->setDataRowTemplate('datagrid-rows', 'grid'); + $gridTab->setDataPagerTemplate('datagrid-nav-full', 'grid'); + $gridTab->setHeader($this->getHeader()); + $gridTab->setData($this->getData()); + $gridTab->setTitle(__('Categorías')); + + return $gridTab; + } + + /** + * @return DataGridHeader + */ + protected function getHeader(): DataGridHeader + { + // Grid Header + $gridHeader = new DataGridHeader(); + $gridHeader->addHeader(__('Nombre')); + $gridHeader->addHeader(__('Descripción')); + + return $gridHeader; + } + + /** + * @return DataGridData + */ + protected function getData(): DataGridData + { + // Grid Data + $gridData = new DataGridData(); + $gridData->setDataRowSourceId('id'); + $gridData->addDataRowSource('name'); + $gridData->addDataRowSource('description'); + $gridData->setData($this->queryResult); + + return $gridData; + } + + /** + * @return DataGridActionSearch + */ + private function getSearchAction() + { + // Grid Actions + $gridActionSearch = new DataGridActionSearch(); + $gridActionSearch->setId(ActionsInterface::CATEGORY_SEARCH); + $gridActionSearch->setType(DataGridActionType::SEARCH_ITEM); + $gridActionSearch->setName('frmSearchCategory'); + $gridActionSearch->setTitle(__('Buscar Categoría')); + $gridActionSearch->setOnSubmitFunction('appMgmt/search'); + $gridActionSearch->addData('action-route', Acl::getActionRoute(ActionsInterface::CATEGORY_SEARCH)); + + return $gridActionSearch; + } + + /** + * @return DataGridAction + */ + private function getCreateAction() + { + $gridAction = new DataGridAction(); + $gridAction->setId(ActionsInterface::CATEGORY_CREATE); + $gridAction->setType(DataGridActionType::MENUBAR_ITEM); + $gridAction->setName(__('Nueva Categoría')); + $gridAction->setTitle(__('Nueva Categoría')); + $gridAction->setIcon($this->icons->getIconAdd()); + $gridAction->setSkip(true); + $gridAction->setOnClickFunction('appMgmt/show'); + $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::CATEGORY_CREATE)); + + return $gridAction; + } + + /** + * @return DataGridAction + */ + private function getEditAction() + { + $gridAction = new DataGridAction(); + $gridAction->setId(ActionsInterface::CATEGORY_EDIT); + $gridAction->setType(DataGridActionType::EDIT_ITEM); + $gridAction->setName(__('Editar Categoría')); + $gridAction->setTitle(__('Editar Categoría')); + $gridAction->setIcon($this->icons->getIconEdit()); + $gridAction->setOnClickFunction('appMgmt/show'); + $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::CATEGORY_EDIT)); + + return $gridAction; + } + + /** + * @return DataGridAction + */ + private function getDeleteAction() + { + $gridAction = new DataGridAction(); + $gridAction->setId(ActionsInterface::CATEGORY_DELETE); + $gridAction->setType(DataGridActionType::DELETE_ITEM); + $gridAction->setName(__('Eliminar Categoría')); + $gridAction->setTitle(__('Eliminar Categoría')); + $gridAction->setIcon($this->icons->getIconDelete()); + $gridAction->setOnClickFunction('appMgmt/delete'); + $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::CATEGORY_DELETE)); + + return $gridAction; + } +} \ No newline at end of file diff --git a/app/modules/web/Controllers/Helpers/Grid/ClientGrid.php b/app/modules/web/Controllers/Helpers/Grid/ClientGrid.php new file mode 100644 index 00000000..900d8fec --- /dev/null +++ b/app/modules/web/Controllers/Helpers/Grid/ClientGrid.php @@ -0,0 +1,195 @@ +. + */ + +namespace SP\Modules\Web\Controllers\Helpers\Grid; + +use SP\Core\Acl\Acl; +use SP\Core\Acl\ActionsInterface; +use SP\Html\DataGrid\DataGridAction; +use SP\Html\DataGrid\DataGridActionSearch; +use SP\Html\DataGrid\DataGridActionType; +use SP\Html\DataGrid\DataGridData; +use SP\Html\DataGrid\DataGridHeader; +use SP\Html\DataGrid\DataGridInterface; +use SP\Html\DataGrid\DataGridTab; +use SP\Storage\Database\QueryResult; + +/** + * Class ClientGrid + * + * @package SP\Modules\Web\Controllers\Helpers\Grid + */ +final class ClientGrid extends GridBase +{ + /** + * @var QueryResult + */ + private $queryResult; + + /** + * @param QueryResult $queryResult + * + * @return DataGridInterface + */ + public function getGrid(QueryResult $queryResult): DataGridInterface + { + $this->queryResult = $queryResult; + + $grid = $this->getGridLayout(); + + $searchAction = $this->getSearchAction(); + + $grid->setDataActions($this->getSearchAction()); + $grid->setPager($this->getPager($searchAction)); + $grid->setDataActions($this->getCreateAction()); + $grid->setDataActions($this->getEditAction()); + + $deleteAction = $this->getDeleteAction(); + + $grid->setDataActions($deleteAction); + $grid->setDataActions($deleteAction, true); + + $grid->setTime(round(getElapsedTime($this->queryTimeStart), 5)); + + return $grid; + } + + /** + * @return DataGridInterface + */ + protected function getGridLayout(): DataGridInterface + { + // Grid + $gridTab = new DataGridTab($this->view->getTheme()); + $gridTab->setId('tblCustomers'); + $gridTab->setDataRowTemplate('datagrid-rows', 'grid'); + $gridTab->setDataPagerTemplate('datagrid-nav-full', 'grid'); + $gridTab->setHeader($this->getHeader()); + $gridTab->setData($this->getData()); + $gridTab->setTitle(__('Clientes')); + + return $gridTab; + } + + /** + * @return DataGridHeader + */ + protected function getHeader(): DataGridHeader + { + // Grid Header + $gridHeader = new DataGridHeader(); + $gridHeader->addHeader(__('Nombre')); + $gridHeader->addHeader(__('Descripción')); + $gridHeader->addHeader(__('Global')); + + return $gridHeader; + } + + /** + * @return DataGridData + */ + protected function getData(): DataGridData + { + // Grid Data + $gridData = new DataGridData(); + $gridData->setDataRowSourceId('id'); + $gridData->addDataRowSource('name'); + $gridData->addDataRowSource('description'); + $gridData->addDataRowSource('isGlobal', false, function ($value) { + return $value ? __('SI') : __('NO'); + }); + $gridData->setData($this->queryResult); + + return $gridData; + } + + /** + * @return DataGridActionSearch + */ + private function getSearchAction() + { + // Grid Actions + $gridActionSearch = new DataGridActionSearch(); + $gridActionSearch->setId(ActionsInterface::CLIENT_SEARCH); + $gridActionSearch->setType(DataGridActionType::SEARCH_ITEM); + $gridActionSearch->setName('frmSearchCustomer'); + $gridActionSearch->setTitle(__('Buscar Cliente')); + $gridActionSearch->setOnSubmitFunction('appMgmt/search'); + $gridActionSearch->addData('action-route', Acl::getActionRoute(ActionsInterface::CLIENT_SEARCH)); + + return $gridActionSearch; + } + + /** + * @return DataGridAction + */ + private function getCreateAction() + { + $gridAction = new DataGridAction(); + $gridAction->setId(ActionsInterface::CLIENT_CREATE); + $gridAction->setType(DataGridActionType::MENUBAR_ITEM); + $gridAction->setName(__('Nuevo Cliente')); + $gridAction->setTitle(__('Nuevo Cliente')); + $gridAction->setIcon($this->icons->getIconAdd()); + $gridAction->setSkip(true); + $gridAction->setOnClickFunction('appMgmt/show'); + $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::CLIENT_CREATE)); + + return $gridAction; + } + + /** + * @return DataGridAction + */ + private function getEditAction() + { + $gridAction = new DataGridAction(); + $gridAction->setId(ActionsInterface::CLIENT_EDIT); + $gridAction->setType(DataGridActionType::EDIT_ITEM); + $gridAction->setName(__('Editar Cliente')); + $gridAction->setTitle(__('Editar Cliente')); + $gridAction->setIcon($this->icons->getIconEdit()); + $gridAction->setOnClickFunction('appMgmt/show'); + $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::CLIENT_EDIT)); + + return $gridAction; + } + + /** + * @return DataGridAction + */ + private function getDeleteAction() + { + $gridAction = new DataGridAction(); + $gridAction->setId(ActionsInterface::CLIENT_DELETE); + $gridAction->setType(DataGridActionType::DELETE_ITEM); + $gridAction->setName(__('Eliminar Cliente')); + $gridAction->setTitle(__('Eliminar Cliente')); + $gridAction->setIcon($this->icons->getIconDelete()); + $gridAction->setOnClickFunction('appMgmt/delete'); + $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::CLIENT_DELETE)); + + return $gridAction; + } +} \ No newline at end of file diff --git a/app/modules/web/Controllers/Helpers/Grid/CustomFieldGrid.php b/app/modules/web/Controllers/Helpers/Grid/CustomFieldGrid.php new file mode 100644 index 00000000..4c38c88d --- /dev/null +++ b/app/modules/web/Controllers/Helpers/Grid/CustomFieldGrid.php @@ -0,0 +1,198 @@ +. + */ + +namespace SP\Modules\Web\Controllers\Helpers\Grid; + +use SP\Core\Acl\Acl; +use SP\Core\Acl\ActionsInterface; +use SP\Html\DataGrid\DataGridAction; +use SP\Html\DataGrid\DataGridActionSearch; +use SP\Html\DataGrid\DataGridActionType; +use SP\Html\DataGrid\DataGridData; +use SP\Html\DataGrid\DataGridHeader; +use SP\Html\DataGrid\DataGridInterface; +use SP\Html\DataGrid\DataGridTab; +use SP\Services\CustomField\CustomFieldDefService; +use SP\Storage\Database\QueryResult; + +/** + * Class CustomFieldGrid + * + * @package SP\Modules\Web\Controllers\Helpers\Grid + */ +final class CustomFieldGrid extends GridBase +{ + /** + * @var QueryResult + */ + private $queryResult; + + /** + * @param QueryResult $queryResult + * + * @return DataGridInterface + */ + public function getGrid(QueryResult $queryResult): DataGridInterface + { + $this->queryResult = $queryResult; + + $grid = $this->getGridLayout(); + + $searchAction = $this->getSearchAction(); + + $grid->setDataActions($this->getSearchAction()); + $grid->setPager($this->getPager($searchAction)); + $grid->setDataActions($this->getCreateAction()); + $grid->setDataActions($this->getEditAction()); + + $deleteAction = $this->getDeleteAction(); + + $grid->setDataActions($deleteAction); + $grid->setDataActions($deleteAction, true); + + $grid->setTime(round(getElapsedTime($this->queryTimeStart), 5)); + + return $grid; + } + + /** + * @return DataGridInterface + */ + protected function getGridLayout(): DataGridInterface + { + // Grid + $gridTab = new DataGridTab($this->view->getTheme()); + $gridTab->setId('tblCustomFields'); + $gridTab->setDataRowTemplate('datagrid-rows', 'grid'); + $gridTab->setDataPagerTemplate('datagrid-nav-full', 'grid'); + $gridTab->setHeader($this->getHeader()); + $gridTab->setData($this->getData()); + $gridTab->setTitle(__('Campos Personalizados')); + + return $gridTab; + } + + /** + * @return DataGridHeader + */ + protected function getHeader(): DataGridHeader + { + // Grid Header + $gridHeader = new DataGridHeader(); + $gridHeader->addHeader(__('Nombre')); + $gridHeader->addHeader(__('Módulo')); + $gridHeader->addHeader(__('Tipo')); + $gridHeader->addHeader(__('Propiedades')); + + return $gridHeader; + } + + /** + * @return DataGridData + */ + protected function getData(): DataGridData + { + // Grid Data + $gridData = new DataGridData(); + $gridData->setDataRowSourceId('id'); + $gridData->addDataRowSource('name'); + $gridData->addDataRowSource('moduleId', false, function ($value) { + return CustomFieldDefService::getFieldModuleById($value); + }); + $gridData->addDataRowSource('typeName'); + $gridData->addDataRowSourceWithIcon('isEncrypted', $this->icons->getIconEditPass()->setTitle(__('Encriptado'))); + $gridData->setData($this->queryResult); + + return $gridData; + } + + /** + * @return DataGridActionSearch + */ + private function getSearchAction() + { + // Grid Actions + $gridActionSearch = new DataGridActionSearch(); + $gridActionSearch->setId(ActionsInterface::CUSTOMFIELD_SEARCH); + $gridActionSearch->setType(DataGridActionType::SEARCH_ITEM); + $gridActionSearch->setName('frmSearchCustomField'); + $gridActionSearch->setTitle(__('Buscar Campo')); + $gridActionSearch->setOnSubmitFunction('appMgmt/search'); + $gridActionSearch->addData('action-route', Acl::getActionRoute(ActionsInterface::CUSTOMFIELD_SEARCH)); + + return $gridActionSearch; + } + + /** + * @return DataGridAction + */ + private function getCreateAction() + { + $gridAction = new DataGridAction(); + $gridAction->setId(ActionsInterface::CUSTOMFIELD_CREATE); + $gridAction->setType(DataGridActionType::MENUBAR_ITEM); + $gridAction->setName(__('Nuevo Campo')); + $gridAction->setTitle(__('Nuevo Campo')); + $gridAction->setIcon($this->icons->getIconAdd()); + $gridAction->setSkip(true); + $gridAction->setOnClickFunction('appMgmt/show'); + $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::CUSTOMFIELD_CREATE)); + + return $gridAction; + } + + /** + * @return DataGridAction + */ + private function getEditAction() + { + $gridAction = new DataGridAction(); + $gridAction->setId(ActionsInterface::CUSTOMFIELD_EDIT); + $gridAction->setType(DataGridActionType::EDIT_ITEM); + $gridAction->setName(__('Editar Campo')); + $gridAction->setTitle(__('Editar Campo')); + $gridAction->setIcon($this->icons->getIconEdit()); + $gridAction->setOnClickFunction('appMgmt/show'); + $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::CUSTOMFIELD_EDIT)); + + return $gridAction; + } + + /** + * @return DataGridAction + */ + private function getDeleteAction() + { + $gridAction = new DataGridAction(); + $gridAction->setId(ActionsInterface::CUSTOMFIELD_DELETE); + $gridAction->setType(DataGridActionType::DELETE_ITEM); + $gridAction->setName(__('Eliminar Campo')); + $gridAction->setTitle(__('Eliminar Campo')); + $gridAction->setIcon($this->icons->getIconDelete()); + $gridAction->setOnClickFunction('appMgmt/delete'); + $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::CUSTOMFIELD_DELETE)); + + return $gridAction; + } +} \ No newline at end of file diff --git a/app/modules/web/Controllers/Helpers/Grid/EventlogGrid.php b/app/modules/web/Controllers/Helpers/Grid/EventlogGrid.php new file mode 100644 index 00000000..b65934ed --- /dev/null +++ b/app/modules/web/Controllers/Helpers/Grid/EventlogGrid.php @@ -0,0 +1,210 @@ +. + */ + +namespace SP\Modules\Web\Controllers\Helpers\Grid; + + +use SP\Core\Acl\Acl; +use SP\Core\Acl\ActionsInterface; +use SP\Html\DataGrid\DataGrid; +use SP\Html\DataGrid\DataGridAction; +use SP\Html\DataGrid\DataGridActionSearch; +use SP\Html\DataGrid\DataGridActionType; +use SP\Html\DataGrid\DataGridData; +use SP\Html\DataGrid\DataGridHeader; +use SP\Html\DataGrid\DataGridInterface; +use SP\Html\DataGrid\DataGridTab; +use SP\Storage\Database\QueryResult; + +/** + * Class EventlogGrid + * + * @package SP\Modules\Web\Controllers\Helpers\Grid + */ +final class EventlogGrid extends GridBase +{ + /** + * @var QueryResult + */ + private $queryResult; + + /** + * @param QueryResult $queryResult + * + * @return DataGridTab + */ + public function getGrid(QueryResult $queryResult): DataGridInterface + { + $this->queryResult = $queryResult; + + $grid = $this->getGridLayout(); + + $searchAction = $this->getSearchAction(); + + $grid->setDataActions($this->getSearchAction()); + $grid->setPager($this->getPager($searchAction)->setOnClickFunction('eventlog/nav')); + + $grid->setDataActions($this->getRefrestAction()); + $grid->setDataActions($this->getClearAction()); + + $grid->setTime(round(getElapsedTime($this->queryTimeStart), 5)); + + return $grid; + } + + /** + * @return DataGridInterface + */ + protected function getGridLayout(): DataGridInterface + { + // Grid + $dataGrid = new DataGrid($this->view->getTheme()); + $dataGrid->setId('tblEventLog'); + $dataGrid->setDataTableTemplate('datagrid-table-simple', 'grid'); + $dataGrid->setDataRowTemplate('datagrid-rows', $this->view->getBase()); + $dataGrid->setDataPagerTemplate('datagrid-nav-full', 'grid'); + $dataGrid->setHeader($this->getHeader()); + $dataGrid->setData($this->getData()); + $dataGrid->setTitle(__('Registro de Eventos')); + + return $dataGrid; + } + + /** + * @return DataGridHeader + */ + protected function getHeader(): DataGridHeader + { + // Grid Header + $gridHeader = new DataGridHeader(); + $gridHeader->addHeader(__('ID')); + $gridHeader->addHeader(__('Fecha / Hora')); + $gridHeader->addHeader(__('Nivel')); + $gridHeader->addHeader(__('Evento')); + $gridHeader->addHeader(__('Login')); + $gridHeader->addHeader(__('IP')); + $gridHeader->addHeader(__('Descripción')); + + return $gridHeader; + } + + /** + * @return DataGridData + */ + protected function getData(): DataGridData + { + // Grid Data + $isDemoMode = $this->configData->isDemoEnabled(); + + $gridData = new DataGridData(); + $gridData->setDataRowSourceId('id'); + $gridData->addDataRowSource('id'); + $gridData->addDataRowSource('date'); + $gridData->addDataRowSource('level'); + $gridData->addDataRowSource('action'); + $gridData->addDataRowSource('login'); + $gridData->addDataRowSource('ipAddress', false, + function ($value) use ($isDemoMode) { + return $isDemoMode ? preg_replace('#\d+#', '*', $value) : $value; + }); + $gridData->addDataRowSource('description', false, + function ($value) use ($isDemoMode) { + if ($isDemoMode) { + $value = preg_replace('/\\d+\\.\\d+\\.\\d+\\.\\d+/', "*.*.*.*", $value); + } + + $text = str_replace(';;', PHP_EOL, $value); + + if (preg_match('/^SQL.*/m', $text)) { + $text = preg_replace([ + '/([a-zA-Z_]+),/m', + '/(UPDATE|DELETE|TRUNCATE|INSERT|SELECT|WHERE|LEFT|ORDER|LIMIT|FROM)/m'], + ['\\1,
', '
\\1'], + $text); + } + +// if (strlen($text) >= 100) { +// $text = wordwrap($text, 100, PHP_EOL, true); +// } + + return str_replace(PHP_EOL, '
', $text); + }); + $gridData->setData($this->queryResult); + + return $gridData; + } + + /** + * @return DataGridActionSearch + */ + private function getSearchAction() + { + // Grid Actions + $gridActionSearch = new DataGridActionSearch(); + $gridActionSearch->setId(ActionsInterface::EVENTLOG_SEARCH); + $gridActionSearch->setType(DataGridActionType::SEARCH_ITEM); + $gridActionSearch->setName('frmSearchEvent'); + $gridActionSearch->setTitle(__('Buscar Evento')); + $gridActionSearch->setOnSubmitFunction('eventlog/search'); + $gridActionSearch->addData('action-route', Acl::getActionRoute(ActionsInterface::EVENTLOG_SEARCH)); + + return $gridActionSearch; + } + + /** + * @return DataGridAction + */ + private function getRefrestAction() + { + $gridAction = new DataGridAction(); + $gridAction->setId(ActionsInterface::EVENTLOG_SEARCH); + $gridAction->setType(DataGridActionType::MENUBAR_ITEM); + $gridAction->setName(__('Refrescar')); + $gridAction->setTitle(__('Refrescar')); + $gridAction->setIcon($this->icons->getIconRefresh()); + $gridAction->setOnClickFunction('eventlog/search'); + $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::EVENTLOG_SEARCH)); + $gridAction->addData('target', '#data-table-tblEventLog'); + + return $gridAction; + } + + /** + * @return DataGridAction + */ + private function getClearAction() + { + $gridAction = new DataGridAction(); + $gridAction->setId(ActionsInterface::EVENTLOG_CLEAR); + $gridAction->setType(DataGridActionType::MENUBAR_ITEM); + $gridAction->setName(__('Vaciar registro de eventos')); + $gridAction->setTitle(__('Vaciar registro de eventos')); + $gridAction->setIcon($this->icons->getIconClear()); + $gridAction->setOnClickFunction('eventlog/clear'); + $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::EVENTLOG_CLEAR)); + $gridAction->addData('nextaction', Acl::getActionRoute(ActionsInterface::EVENTLOG)); + + return $gridAction; + } +} \ No newline at end of file diff --git a/app/modules/web/Controllers/Helpers/Grid/FileGrid.php b/app/modules/web/Controllers/Helpers/Grid/FileGrid.php new file mode 100644 index 00000000..6ad14396 --- /dev/null +++ b/app/modules/web/Controllers/Helpers/Grid/FileGrid.php @@ -0,0 +1,198 @@ +. + */ + +namespace SP\Modules\Web\Controllers\Helpers\Grid; + +use SP\Core\Acl\Acl; +use SP\Core\Acl\ActionsInterface; +use SP\Html\DataGrid\DataGridAction; +use SP\Html\DataGrid\DataGridActionSearch; +use SP\Html\DataGrid\DataGridActionType; +use SP\Html\DataGrid\DataGridData; +use SP\Html\DataGrid\DataGridHeader; +use SP\Html\DataGrid\DataGridInterface; +use SP\Html\DataGrid\DataGridTab; +use SP\Storage\Database\QueryResult; + +/** + * Class FileGrid + * + * @package SP\Modules\Web\Controllers\Helpers\Grid + */ +final class FileGrid extends GridBase +{ + /** + * @var QueryResult + */ + private $queryResult; + + /** + * @param QueryResult $queryResult + * + * @return DataGridInterface + */ + public function getGrid(QueryResult $queryResult): DataGridInterface + { + $this->queryResult = $queryResult; + + $grid = $this->getGridLayout(); + + $searchAction = $this->getSearchAction(); + + $grid->setDataActions($this->getSearchAction()); + $grid->setPager($this->getPager($searchAction)); + $grid->setDataActions($this->getViewAction()); + $grid->setDataActions($this->getDownloadAction()); + + $deleteAction = $this->getDeleteAction(); + + $grid->setDataActions($deleteAction); + $grid->setDataActions($deleteAction, true); + + $grid->setTime(round(getElapsedTime($this->queryTimeStart), 5)); + + return $grid; + } + + /** + * @return DataGridInterface + */ + protected function getGridLayout(): DataGridInterface + { + // Grid + $gridTab = new DataGridTab($this->view->getTheme()); + $gridTab->setId('tblFiles'); + $gridTab->setDataRowTemplate('datagrid-rows', 'grid'); + $gridTab->setDataPagerTemplate('datagrid-nav-full', 'grid'); + $gridTab->setHeader($this->getHeader()); + $gridTab->setData($this->getData()); + $gridTab->setTitle(__('Archivos')); + + return $gridTab; + } + + /** + * @return DataGridHeader + */ + protected function getHeader(): DataGridHeader + { + // Grid Header + $gridHeader = new DataGridHeader(); + $gridHeader->addHeader(__('Cuenta')); + $gridHeader->addHeader(__('Cliente')); + $gridHeader->addHeader(__('Nombre')); + $gridHeader->addHeader(__('Tipo')); + $gridHeader->addHeader(__('Tamaño')); + + return $gridHeader; + } + + /** + * @return DataGridData + */ + protected function getData(): DataGridData + { + // Grid Data + $gridData = new DataGridData(); + $gridData->setDataRowSourceId('id'); + $gridData->addDataRowSource('accountName'); + $gridData->addDataRowSource('clientName'); + $gridData->addDataRowSource('name'); + $gridData->addDataRowSource('type'); + $gridData->addDataRowSource('size', false, function ($value) { + return sprintf('%.2f KB', $value / 1000); + }); + $gridData->setData($this->queryResult); + + return $gridData; + } + + /** + * @return DataGridActionSearch + */ + private function getSearchAction() + { + // Grid Actions + $gridActionSearch = new DataGridActionSearch(); + $gridActionSearch->setId(ActionsInterface::ACCOUNT_FILE_SEARCH); + $gridActionSearch->setType(DataGridActionType::SEARCH_ITEM); + $gridActionSearch->setName('frmSearchFile'); + $gridActionSearch->setTitle(__('Buscar Archivo')); + $gridActionSearch->setOnSubmitFunction('appMgmt/search'); + $gridActionSearch->addData('action-route', Acl::getActionRoute(ActionsInterface::ACCOUNT_FILE_SEARCH)); + + return $gridActionSearch; + } + + /** + * @return DataGridAction + */ + private function getViewAction() + { + $gridAction = new DataGridAction(); + $gridAction->setId(ActionsInterface::ACCOUNT_FILE_VIEW); + $gridAction->setType(DataGridActionType::VIEW_ITEM); + $gridAction->setName(__('Ver Archivo')); + $gridAction->setTitle(__('Ver Archivo')); + $gridAction->setIcon($this->icons->getIconView()); + $gridAction->setOnClickFunction('file/view'); + $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::ACCOUNT_FILE_VIEW)); + + return $gridAction; + } + + /** + * @return DataGridAction + */ + private function getDownloadAction() + { + $gridAction = new DataGridAction(); + $gridAction->setId(ActionsInterface::ACCOUNT_FILE_DOWNLOAD); + $gridAction->setType(DataGridActionType::VIEW_ITEM); + $gridAction->setName(__('Descargar Archivo')); + $gridAction->setTitle(__('Descargar Archivo')); + $gridAction->setIcon($this->icons->getIconDownload()); + $gridAction->setOnClickFunction('file/download'); + $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::ACCOUNT_FILE_DOWNLOAD)); + + return $gridAction; + } + + /** + * @return DataGridAction + */ + private function getDeleteAction() + { + $gridAction = new DataGridAction(); + $gridAction->setId(ActionsInterface::ACCOUNT_FILE_DELETE); + $gridAction->setType(DataGridActionType::DELETE_ITEM); + $gridAction->setName(__('Eliminar Archivo')); + $gridAction->setTitle(__('Eliminar Archivo')); + $gridAction->setIcon($this->icons->getIconDelete()); + $gridAction->setOnClickFunction('appMgmt/delete'); + $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::ACCOUNT_FILE_DELETE)); + + return $gridAction; + } +} \ No newline at end of file diff --git a/app/modules/web/Controllers/Helpers/Grid/GridBase.php b/app/modules/web/Controllers/Helpers/Grid/GridBase.php new file mode 100644 index 00000000..9d25183f --- /dev/null +++ b/app/modules/web/Controllers/Helpers/Grid/GridBase.php @@ -0,0 +1,124 @@ +. + */ + +namespace SP\Modules\Web\Controllers\Helpers\Grid; + +use SP\Core\Acl\Acl; +use SP\Core\UI\ThemeIcons; +use SP\DataModel\ItemSearchData; +use SP\Html\DataGrid\DataGridActionSearch; +use SP\Html\DataGrid\DataGridData; +use SP\Html\DataGrid\DataGridHeader; +use SP\Html\DataGrid\DataGridInterface; +use SP\Html\DataGrid\DataGridPager; +use SP\Modules\Web\Controllers\Helpers\HelperBase; + +/** + * Class GridBase + * + * @package SP\Modules\Web\Controllers\Helpers\Grid + */ +abstract class GridBase extends HelperBase implements GridInterface +{ + /** + * @var float + */ + protected $queryTimeStart; + /** + * @var ThemeIcons + */ + protected $icons; + /** + * @var \SP\Core\Acl\Acl + */ + protected $acl; + + /** + * Actualizar los datos del paginador + * + * @param DataGridInterface $dataGrid + * @param ItemSearchData $itemSearchData + * + * @return DataGridInterface + */ + public function updatePager(DataGridInterface $dataGrid, ItemSearchData $itemSearchData) + { + $dataGrid->getPager() + ->setLimitStart($itemSearchData->getLimitStart()) + ->setLimitCount($itemSearchData->getLimitCount()) + ->setFilterOn($itemSearchData->getSeachString() !== ''); + + $dataGrid->updatePager(); + + return $dataGrid; + } + + /** + * Devolver el paginador por defecto + * + * @param DataGridActionSearch $sourceAction + * + * @return DataGridPager + */ + protected function getPager(DataGridActionSearch $sourceAction) + { + $GridPager = new DataGridPager(); + $GridPager->setSourceAction($sourceAction); + $GridPager->setOnClickFunction('appMgmt/nav'); + $GridPager->setLimitStart(0); + $GridPager->setLimitCount($this->configData->getAccountCount()); + $GridPager->setIconPrev($this->icons->getIconNavPrev()); + $GridPager->setIconNext($this->icons->getIconNavNext()); + $GridPager->setIconFirst($this->icons->getIconNavFirst()); + $GridPager->setIconLast($this->icons->getIconNavLast()); + + return $GridPager; + } + + /** + * @throws \Psr\Container\ContainerExceptionInterface + * @throws \Psr\Container\NotFoundExceptionInterface + */ + protected function initialize() + { + $this->queryTimeStart = microtime(true); + $this->acl = $this->dic->get(Acl::class); + $this->icons = $this->view->getTheme()->getIcons(); + } + + /** + * @return DataGridInterface + */ + protected abstract function getGridLayout(): DataGridInterface; + + /** + * @return DataGridHeader + */ + protected abstract function getHeader(): DataGridHeader; + + /** + * @return DataGridData + */ + protected abstract function getData(): DataGridData; +} \ No newline at end of file diff --git a/app/modules/web/Controllers/Helpers/Grid/GridInterface.php b/app/modules/web/Controllers/Helpers/Grid/GridInterface.php new file mode 100644 index 00000000..d38320f1 --- /dev/null +++ b/app/modules/web/Controllers/Helpers/Grid/GridInterface.php @@ -0,0 +1,44 @@ +. + */ + +namespace SP\Modules\Web\Controllers\Helpers\Grid; + +use SP\Html\DataGrid\DataGridInterface; +use SP\Storage\Database\QueryResult; + + +/** + * Interface GridInterface + * + * @package SP\Modules\Web\Controllers\Helpers\Grid + */ +interface GridInterface +{ + /** + * @param QueryResult $queryResult + * + * @return DataGridInterface + */ + public function getGrid(QueryResult $queryResult): DataGridInterface; +} \ No newline at end of file diff --git a/app/modules/web/Controllers/Helpers/Grid/NotificationGrid.php b/app/modules/web/Controllers/Helpers/Grid/NotificationGrid.php new file mode 100644 index 00000000..815e530f --- /dev/null +++ b/app/modules/web/Controllers/Helpers/Grid/NotificationGrid.php @@ -0,0 +1,267 @@ +. + */ + +namespace SP\Modules\Web\Controllers\Helpers\Grid; + + +use SP\Core\Acl\Acl; +use SP\Core\Acl\ActionsInterface; +use SP\Html\DataGrid\DataGrid; +use SP\Html\DataGrid\DataGridAction; +use SP\Html\DataGrid\DataGridActionInterface; +use SP\Html\DataGrid\DataGridActionSearch; +use SP\Html\DataGrid\DataGridActionType; +use SP\Html\DataGrid\DataGridData; +use SP\Html\DataGrid\DataGridHeader; +use SP\Html\DataGrid\DataGridInterface; +use SP\Storage\Database\QueryResult; +use SP\Util\DateUtil; + +/** + * Class NotificationGrid + * + * @package SP\Modules\Web\Controllers\Helpers\Grid + */ +final class NotificationGrid extends GridBase +{ + /** + * @var QueryResult + */ + private $queryResult; + /** + * @var bool + */ + private $isAdminApp; + + /** + * @param QueryResult $queryResult + * + * @return DataGridInterface + */ + public function getGrid(QueryResult $queryResult): DataGridInterface + { + $this->queryResult = $queryResult; + + $grid = $this->getGridLayout(); + + $searchAction = $this->getSearchAction(); + + $grid->setDataActions($this->getSearchAction()); + $grid->setPager($this->getPager($searchAction)); + + $this->isAdminApp = $this->context->getUserData()->getIsAdminApp(); + + if ($this->isAdminApp) { + $grid->setDataActions($this->getCreateAction()); + } + + $grid->setDataActions($this->getViewAction()); + $grid->setDataActions($this->setNonAdminFilter($this->getCheckAction())); + $grid->setDataActions($this->setNonAdminFilter($this->getEditAction())); + + $deleteAction = $this->setNonAdminFilter($this->getDeleteAction()); + + $grid->setDataActions($deleteAction); + $grid->setDataActions($deleteAction, true); + + $grid->setTime(round(getElapsedTime($this->queryTimeStart), 5)); + + return $grid; + } + + /** + * @return DataGridInterface + */ + protected function getGridLayout(): DataGridInterface + { + // Grid + $dataGrid = new DataGrid($this->view->getTheme()); + $dataGrid->setId('tblNotifications'); + $dataGrid->setDataRowTemplate('datagrid-rows', 'grid'); + $dataGrid->setDataPagerTemplate('datagrid-nav-full', 'grid'); + $dataGrid->setHeader($this->getHeader()); + $dataGrid->setData($this->getData()); + $dataGrid->setTitle(__('Notificaciones')); + $dataGrid->setTime(round(getElapsedTime($this->queryTimeStart), 5)); + + return $dataGrid; + } + + /** + * @return DataGridHeader + */ + protected function getHeader(): DataGridHeader + { + // Grid Header + $gridHeader = new DataGridHeader(); + $gridHeader->addHeader(__('Fecha')); + $gridHeader->addHeader(__('Tipo')); + $gridHeader->addHeader(__('Componente')); + $gridHeader->addHeader(__('Descripción')); + $gridHeader->addHeader(__('Estado')); + + return $gridHeader; + } + + /** + * @return DataGridData + */ + protected function getData(): DataGridData + { + // Grid Data + $gridData = new DataGridData(); + $gridData->setDataRowSourceId('id'); + $gridData->addDataRowSource('date', false, + function ($value) { + return DateUtil::getDateFromUnix($value); + }); + $gridData->addDataRowSource('type'); + $gridData->addDataRowSource('component'); + $gridData->addDataRowSource('description'); + $gridData->addDataRowSourceWithIcon('checked', $this->icons->getIconEnabled()->setTitle(__('Leída'))); + $gridData->addDataRowSourceWithIcon('onlyAdmin', $this->icons->getIconAppAdmin()->setTitle(__('Sólo Admins'))); + $gridData->addDataRowSourceWithIcon('sticky', $this->icons->getIconGroup()->setTitle(__('Global'))); + $gridData->setData($this->queryResult); + + return $gridData; + } + + /** + * @return DataGridActionSearch + */ + private function getSearchAction() + { + // Grid Actions + $gridActionSearch = new DataGridActionSearch(); + $gridActionSearch->setId(ActionsInterface::NOTIFICATION_SEARCH); + $gridActionSearch->setType(DataGridActionType::SEARCH_ITEM); + $gridActionSearch->setName('frmSearchNotification'); + $gridActionSearch->setTitle(__('Buscar Notificación')); + $gridActionSearch->setOnSubmitFunction('notification/search'); + $gridActionSearch->addData('action-route', Acl::getActionRoute(ActionsInterface::NOTIFICATION_SEARCH)); + + return $gridActionSearch; + } + + /** + * @return DataGridAction + */ + private function getCreateAction() + { + $gridAction = new DataGridAction(); + $gridAction->setId(ActionsInterface::NOTIFICATION_CREATE); + $gridAction->setType(DataGridActionType::MENUBAR_ITEM); + $gridAction->setName(__('Nueva Notificación')); + $gridAction->setTitle(__('Nueva Notificación')); + $gridAction->setIcon($this->icons->getIconAdd()); + $gridAction->setSkip(true); + $gridAction->setOnClickFunction('notification/show'); + $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::NOTIFICATION_CREATE)); + + return $gridAction; + } + + /** + * @return DataGridAction + */ + private function getViewAction() + { + $gridAction = new DataGridAction(); + $gridAction->setId(ActionsInterface::NOTIFICATION_VIEW); + $gridAction->setType(DataGridActionType::VIEW_ITEM); + $gridAction->setName(__('Ver Notificación')); + $gridAction->setTitle(__('Ver Notificación')); + $gridAction->setIcon($this->icons->getIconView()); + $gridAction->setOnClickFunction('notification/show'); + $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::NOTIFICATION_VIEW)); + + return $gridAction; + } + + /** + * @param DataGridActionInterface $gridAction + * + * @return DataGridActionInterface + */ + private function setNonAdminFilter(DataGridActionInterface $gridAction) + { + if (!$this->isAdminApp) { + $gridAction->setFilterRowSource('sticky'); + } + + return $gridAction; + } + + /** + * @return DataGridAction + */ + private function getCheckAction() + { + $gridAction = new DataGridAction(); + $gridAction->setId(ActionsInterface::NOTIFICATION_CHECK); + $gridAction->setName(__('Marcar Notificación')); + $gridAction->setTitle(__('Marcar Notificación')); + $gridAction->setIcon($this->icons->getIconEnabled()); + $gridAction->setOnClickFunction('notification/check'); + $gridAction->setFilterRowSource('checked'); + $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::NOTIFICATION_CHECK)); + $gridAction->addData('nextaction', Acl::getActionRoute(ActionsInterface::NOTIFICATION)); + + return $gridAction; + } + + /** + * @return DataGridAction + */ + private function getEditAction() + { + $gridAction = new DataGridAction(); + $gridAction->setId(ActionsInterface::NOTIFICATION_EDIT); + $gridAction->setName(__('Editar Notificación')); + $gridAction->setTitle(__('Editar Notificación')); + $gridAction->setIcon($this->icons->getIconEdit()); + $gridAction->setOnClickFunction('notification/show'); + $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::NOTIFICATION_EDIT)); + + return $gridAction; + } + + /** + * @return DataGridAction + */ + private function getDeleteAction() + { + $gridAction = new DataGridAction(); + $gridAction->setId(ActionsInterface::NOTIFICATION_DELETE); + $gridAction->setType(DataGridActionType::DELETE_ITEM); + $gridAction->setName(__('Eliminar Notificación')); + $gridAction->setTitle(__('Eliminar Notificación')); + $gridAction->setIcon($this->icons->getIconDelete()); + $gridAction->setOnClickFunction('notification/delete'); + $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::NOTIFICATION_DELETE)); + $gridAction->addData('nextaction', Acl::getActionRoute(ActionsInterface::NOTIFICATION)); + + return $gridAction; + } +} \ No newline at end of file diff --git a/app/modules/web/Controllers/Helpers/Grid/PluginGrid.php b/app/modules/web/Controllers/Helpers/Grid/PluginGrid.php new file mode 100644 index 00000000..9290e08d --- /dev/null +++ b/app/modules/web/Controllers/Helpers/Grid/PluginGrid.php @@ -0,0 +1,214 @@ +. + */ + +namespace SP\Modules\Web\Controllers\Helpers\Grid; + + +use SP\Core\Acl\Acl; +use SP\Core\Acl\ActionsInterface; +use SP\Html\DataGrid\DataGridAction; +use SP\Html\DataGrid\DataGridActionSearch; +use SP\Html\DataGrid\DataGridActionType; +use SP\Html\DataGrid\DataGridData; +use SP\Html\DataGrid\DataGridHeader; +use SP\Html\DataGrid\DataGridInterface; +use SP\Html\DataGrid\DataGridTab; +use SP\Storage\Database\QueryResult; + +/** + * Class PluginGrid + * + * @package SP\Modules\Web\Controllers\Helpers\Grid + */ +final class PluginGrid extends GridBase +{ + /** + * @var QueryResult + */ + private $queryResult; + + /** + * @param QueryResult $queryResult + * + * @return DataGridInterface + */ + public function getGrid(QueryResult $queryResult): DataGridInterface + { + $this->queryResult = $queryResult; + + $grid = $this->getGridLayout(); + + $searchAction = $this->getSearchAction(); + + $grid->setDataActions($this->getSearchAction()); + $grid->setPager($this->getPager($searchAction)); + + $grid->setDataActions($this->getViewAction()); + $grid->setDataActions($this->getEnableAction()); + $grid->setDataActions($this->getDisableAction()); + $grid->setDataActions($this->getResetAction()); + + $grid->setTime(round(getElapsedTime($this->queryTimeStart), 5)); + + return $grid; + } + + /** + * @return DataGridInterface + */ + protected function getGridLayout(): DataGridInterface + { + // Grid + $gridTab = new DataGridTab($this->view->getTheme()); + $gridTab->setId('tblPlugins'); + $gridTab->setDataRowTemplate('datagrid-rows', 'grid'); + $gridTab->setDataPagerTemplate('datagrid-nav-full', 'grid'); + $gridTab->setHeader($this->getHeader()); + $gridTab->setData($this->getData()); + $gridTab->setTitle(__('Plugins')); + + return $gridTab; + } + + /** + * @return DataGridHeader + */ + protected function getHeader(): DataGridHeader + { + // Grid Header + $gridHeader = new DataGridHeader(); + $gridHeader->addHeader(__('Plugin')); + $gridHeader->addHeader(__('Estado')); + + return $gridHeader; + } + + /** + * @return DataGridData + */ + protected function getData(): DataGridData + { + // Grid Data + $gridData = new DataGridData(); + $gridData->setDataRowSourceId('id'); + $gridData->addDataRowSource('name'); + $gridData->addDataRowSourceWithIcon('enabled', $this->icons->getIconEnabled()); + $gridData->addDataRowSourceWithIcon('enabled', $this->icons->getIconDisabled(), 0); + $gridData->addDataRowSourceWithIcon('available', $this->icons->getIconDelete()->setTitle(__('No disponible')), 0); + $gridData->setData($this->queryResult); + + return $gridData; + } + + /** + * @return DataGridActionSearch + */ + private function getSearchAction() + { + // Grid Actions + $gridActionSearch = new DataGridActionSearch(); + $gridActionSearch->setId(ActionsInterface::PLUGIN_SEARCH); + $gridActionSearch->setType(DataGridActionType::SEARCH_ITEM); + $gridActionSearch->setName('frmSearchPlugin'); + $gridActionSearch->setTitle(__('Buscar Plugin')); + $gridActionSearch->setOnSubmitFunction('appMgmt/search'); + $gridActionSearch->addData('action-route', Acl::getActionRoute(ActionsInterface::PLUGIN_SEARCH)); + + return $gridActionSearch; + } + + /** + * @return DataGridAction + */ + private function getViewAction() + { + $gridAction = new DataGridAction(); + $gridAction->setId(ActionsInterface::PLUGIN_VIEW); + $gridAction->setType(DataGridActionType::VIEW_ITEM); + $gridAction->setName(__('Ver Plugin')); + $gridAction->setTitle(__('Ver Plugin')); + $gridAction->setIcon($this->icons->getIconView()); + $gridAction->setOnClickFunction('appMgmt/show'); + $gridAction->setFilterRowSource('available', 0); + $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::PLUGIN_VIEW)); + + return $gridAction; + } + + /** + * @return DataGridAction + */ + private function getEnableAction() + { + $gridAction = new DataGridAction(); + $gridAction->setId(ActionsInterface::PLUGIN_ENABLE); + $gridAction->setName(__('Habilitar')); + $gridAction->setTitle(__('Habilitar')); + $gridAction->setIcon($this->icons->getIconEnabled()); + $gridAction->setOnClickFunction('plugin/toggle'); + $gridAction->setFilterRowSource('enabled'); + $gridAction->setFilterRowSource('available', 0); + $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::PLUGIN_ENABLE)); + $gridAction->addData('action-method', 'get'); + + return $gridAction; + } + + /** + * @return DataGridAction + */ + private function getDisableAction() + { + $gridAction = new DataGridAction(); + $gridAction->setId(ActionsInterface::PLUGIN_DISABLE); + $gridAction->setName(__('Deshabilitar')); + $gridAction->setTitle(__('Deshabilitar')); + $gridAction->setIcon($this->icons->getIconDisabled()); + $gridAction->setOnClickFunction('plugin/toggle'); + $gridAction->setFilterRowSource('enabled', 0); + $gridAction->setFilterRowSource('available', 0); + $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::PLUGIN_DISABLE)); + $gridAction->addData('action-method', 'get'); + + return $gridAction; + } + + /** + * @return DataGridAction + */ + private function getResetAction() + { + $gridAction = new DataGridAction(); + $gridAction->setId(ActionsInterface::PLUGIN_RESET); + $gridAction->setName(__('Restablecer Datos')); + $gridAction->setTitle(__('Restablecer Datos')); + $gridAction->setIcon($this->icons->getIconRefresh()); + $gridAction->setOnClickFunction('plugin/reset'); + $gridAction->setFilterRowSource('available', 0); + $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::PLUGIN_RESET)); + $gridAction->addData('action-method', 'get'); + + return $gridAction; + } +} \ No newline at end of file diff --git a/app/modules/web/Controllers/Helpers/Grid/PublicLinkGrid.php b/app/modules/web/Controllers/Helpers/Grid/PublicLinkGrid.php new file mode 100644 index 00000000..343f94d0 --- /dev/null +++ b/app/modules/web/Controllers/Helpers/Grid/PublicLinkGrid.php @@ -0,0 +1,220 @@ +. + */ + +namespace SP\Modules\Web\Controllers\Helpers\Grid; + + +use SP\Core\Acl\Acl; +use SP\Core\Acl\ActionsInterface; +use SP\Html\DataGrid\DataGridAction; +use SP\Html\DataGrid\DataGridActionSearch; +use SP\Html\DataGrid\DataGridActionType; +use SP\Html\DataGrid\DataGridData; +use SP\Html\DataGrid\DataGridHeader; +use SP\Html\DataGrid\DataGridInterface; +use SP\Html\DataGrid\DataGridTab; +use SP\Storage\Database\QueryResult; + +/** + * Class PublicLinkGrid + * + * @package SP\Modules\Web\Controllers\Helpers\Grid + */ +final class PublicLinkGrid extends GridBase +{ + /** + * @var QueryResult + */ + private $queryResult; + + /** + * @param QueryResult $queryResult + * + * @return DataGridInterface + */ + public function getGrid(QueryResult $queryResult): DataGridInterface + { + $this->queryResult = $queryResult; + + $grid = $this->getGridLayout(); + + $searchAction = $this->getSearchAction(); + + $grid->setDataActions($this->getSearchAction()); + $grid->setPager($this->getPager($searchAction)); + + $grid->setDataActions($this->getCreateAction()); + $grid->setDataActions($this->getViewAction()); + $grid->setDataActions($this->getRefreshAction()); + + $deleteAction = $this->getDeleteAction(); + + $grid->setDataActions($deleteAction); + $grid->setDataActions($deleteAction, true); + + $grid->setTime(round(getElapsedTime($this->queryTimeStart), 5)); + + return $grid; + } + + /** + * @return DataGridInterface + */ + protected function getGridLayout(): DataGridInterface + { + // Grid + $gridTab = new DataGridTab($this->view->getTheme()); + $gridTab->setId('tblLinks'); + $gridTab->setDataRowTemplate('datagrid-rows', 'grid'); + $gridTab->setDataPagerTemplate('datagrid-nav-full', 'grid'); + $gridTab->setHeader($this->getHeader()); + $gridTab->setData($this->getData()); + $gridTab->setTitle(__('Enlaces')); + + return $gridTab; + } + + /** + * @return DataGridHeader + */ + protected function getHeader(): DataGridHeader + { + // Grid Header + $gridHeader = new DataGridHeader(); + $gridHeader->addHeader(__('Cuenta')); + $gridHeader->addHeader(__('Cliente')); + $gridHeader->addHeader(__('Fecha Creación')); + $gridHeader->addHeader(__('Fecha Caducidad')); + $gridHeader->addHeader(__('Usuario')); + $gridHeader->addHeader(__('Notificar')); + $gridHeader->addHeader(__('Visitas')); + + return $gridHeader; + } + + /** + * @return DataGridData + */ + protected function getData(): DataGridData + { + // Grid Data + $gridData = new DataGridData(); + $gridData->setDataRowSourceId('id'); + $gridData->addDataRowSource('accountName'); + $gridData->addDataRowSource('clientName'); + $gridData->addDataRowSource('getDateAddFormat', true); + $gridData->addDataRowSource('getDateExpireFormat', true); + $gridData->addDataRowSource('userLogin'); + $gridData->addDataRowSource('getNotifyString', true); + $gridData->addDataRowSource('getCountViewsString', true); + $gridData->setData($this->queryResult); + + return $gridData; + } + + /** + * @return DataGridActionSearch + */ + private function getSearchAction() + { + // Grid Actions + $gridActionSearch = new DataGridActionSearch(); + $gridActionSearch->setId(ActionsInterface::PUBLICLINK_SEARCH); + $gridActionSearch->setType(DataGridActionType::SEARCH_ITEM); + $gridActionSearch->setName('frmSearchLink'); + $gridActionSearch->setTitle(__('Buscar Enlace')); + $gridActionSearch->setOnSubmitFunction('appMgmt/search'); + $gridActionSearch->addData('action-route', Acl::getActionRoute(ActionsInterface::PUBLICLINK_SEARCH)); + + return $gridActionSearch; + } + + /** + * @return DataGridAction + */ + private function getCreateAction() + { + $gridAction = new DataGridAction(); + $gridAction->setId(ActionsInterface::PUBLICLINK_CREATE); + $gridAction->setType(DataGridActionType::MENUBAR_ITEM); + $gridAction->setName(__('Nuevo Enlace')); + $gridAction->setTitle(__('Nuevo Enlace')); + $gridAction->setIcon($this->icons->getIconAdd()); + $gridAction->setSkip(true); + $gridAction->setOnClickFunction('appMgmt/show'); + $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::PUBLICLINK_CREATE)); + + return $gridAction; + } + + /** + * @return DataGridAction + */ + private function getViewAction() + { + $gridAction = new DataGridAction(); + $gridAction->setId(ActionsInterface::PUBLICLINK_VIEW); + $gridAction->setType(DataGridActionType::VIEW_ITEM); + $gridAction->setName(__('Ver Enlace')); + $gridAction->setTitle(__('Ver Enlace')); + $gridAction->setIcon($this->icons->getIconView()); + $gridAction->setOnClickFunction('appMgmt/show'); + $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::PUBLICLINK_VIEW)); + + return $gridAction; + } + + /** + * @return DataGridAction + */ + private function getRefreshAction() + { + $gridAction = new DataGridAction(); + $gridAction->setId(ActionsInterface::PUBLICLINK_REFRESH); + $gridAction->setName(__('Renovar Enlace')); + $gridAction->setTitle(__('Renovar Enlace')); + $gridAction->setIcon($this->icons->getIconRefresh()); + $gridAction->setOnClickFunction('link/refresh'); + $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::PUBLICLINK_REFRESH)); + + return $gridAction; + } + + /** + * @return DataGridAction + */ + private function getDeleteAction() + { + $gridAction = new DataGridAction(); + $gridAction->setId(ActionsInterface::PUBLICLINK_DELETE); + $gridAction->setType(DataGridActionType::DELETE_ITEM); + $gridAction->setName(__('Eliminar Enlace')); + $gridAction->setTitle(__('Eliminar Enlace')); + $gridAction->setIcon($this->icons->getIconDelete()); + $gridAction->setOnClickFunction('appMgmt/delete'); + $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::PUBLICLINK_DELETE)); + + return $gridAction; + } +} \ No newline at end of file diff --git a/app/modules/web/Controllers/Helpers/Grid/TagGrid.php b/app/modules/web/Controllers/Helpers/Grid/TagGrid.php new file mode 100644 index 00000000..9cc2d97b --- /dev/null +++ b/app/modules/web/Controllers/Helpers/Grid/TagGrid.php @@ -0,0 +1,190 @@ +. + */ + +namespace SP\Modules\Web\Controllers\Helpers\Grid; + + +use SP\Core\Acl\Acl; +use SP\Core\Acl\ActionsInterface; +use SP\Html\DataGrid\DataGridAction; +use SP\Html\DataGrid\DataGridActionSearch; +use SP\Html\DataGrid\DataGridActionType; +use SP\Html\DataGrid\DataGridData; +use SP\Html\DataGrid\DataGridHeader; +use SP\Html\DataGrid\DataGridInterface; +use SP\Html\DataGrid\DataGridTab; +use SP\Storage\Database\QueryResult; + +/** + * Class TagGrid + * + * @package SP\Modules\Web\Controllers\Helpers\Grid + */ +final class TagGrid extends GridBase +{ + /** + * @var QueryResult + */ + private $queryResult; + + /** + * @param QueryResult $queryResult + * + * @return DataGridInterface + */ + public function getGrid(QueryResult $queryResult): DataGridInterface + { + $this->queryResult = $queryResult; + + $grid = $this->getGridLayout(); + + $searchAction = $this->getSearchAction(); + + $grid->setDataActions($this->getSearchAction()); + $grid->setPager($this->getPager($searchAction)); + $grid->setDataActions($this->getCreateAction()); + $grid->setDataActions($this->getEditAction()); + + $deleteAction = $this->getDeleteAction(); + + $grid->setDataActions($deleteAction); + $grid->setDataActions($deleteAction, true); + + $grid->setTime(round(getElapsedTime($this->queryTimeStart), 5)); + + return $grid; + } + + /** + * @return DataGridInterface + */ + protected function getGridLayout(): DataGridInterface + { + // Grid + $gridTab = new DataGridTab($this->view->getTheme()); + $gridTab->setId('tblTags'); + $gridTab->setDataRowTemplate('datagrid-rows', 'grid'); + $gridTab->setDataPagerTemplate('datagrid-nav-full', 'grid'); + $gridTab->setHeader($this->getHeader()); + $gridTab->setData($this->getData()); + $gridTab->setTitle(__('Etiquetas')); + + return $gridTab; + } + + /** + * @return DataGridHeader + */ + protected function getHeader(): DataGridHeader + { + // Grid Header + $gridHeader = new DataGridHeader(); + $gridHeader->addHeader(__('Nombre')); + + return $gridHeader; + } + + /** + * @return DataGridData + */ + protected function getData(): DataGridData + { + // Grid Data + $gridData = new DataGridData(); + $gridData->setDataRowSourceId('id'); + $gridData->addDataRowSource('name'); + $gridData->setData($this->queryResult); + + return $gridData; + } + + /** + * @return DataGridActionSearch + */ + private function getSearchAction() + { + // Grid Actions + $gridActionSearch = new DataGridActionSearch(); + $gridActionSearch->setId(ActionsInterface::TAG_SEARCH); + $gridActionSearch->setType(DataGridActionType::SEARCH_ITEM); + $gridActionSearch->setName('frmSearchTag'); + $gridActionSearch->setTitle(__('Buscar Etiqueta')); + $gridActionSearch->setOnSubmitFunction('appMgmt/search'); + $gridActionSearch->addData('action-route', Acl::getActionRoute(ActionsInterface::TAG_SEARCH)); + + return $gridActionSearch; + } + + /** + * @return DataGridAction + */ + private function getCreateAction() + { + $gridAction = new DataGridAction(); + $gridAction->setId(ActionsInterface::TAG_CREATE); + $gridAction->setType(DataGridActionType::MENUBAR_ITEM); + $gridAction->setName(__('Nueva Etiqueta')); + $gridAction->setTitle(__('Nueva Etiqueta')); + $gridAction->setIcon($this->icons->getIconAdd()); + $gridAction->setSkip(true); + $gridAction->setOnClickFunction('appMgmt/show'); + $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::TAG_CREATE)); + + return $gridAction; + } + + /** + * @return DataGridAction + */ + private function getEditAction() + { + $gridAction = new DataGridAction(); + $gridAction->setId(ActionsInterface::TAG_EDIT); + $gridAction->setType(DataGridActionType::EDIT_ITEM); + $gridAction->setName(__('Editar Etiqueta')); + $gridAction->setTitle(__('Editar Etiqueta')); + $gridAction->setIcon($this->icons->getIconEdit()); + $gridAction->setOnClickFunction('appMgmt/show'); + $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::TAG_EDIT)); + + return $gridAction; + } + + /** + * @return DataGridAction + */ + private function getDeleteAction() + { + $gridAction = new DataGridAction(); + $gridAction->setId(ActionsInterface::TAG_DELETE); + $gridAction->setType(DataGridActionType::DELETE_ITEM); + $gridAction->setName(__('Eliminar Etiqueta')); + $gridAction->setTitle(__('Eliminar Etiqueta')); + $gridAction->setIcon($this->icons->getIconDelete()); + $gridAction->setOnClickFunction('appMgmt/delete'); + $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::TAG_DELETE)); + + return $gridAction; + } +} \ No newline at end of file diff --git a/app/modules/web/Controllers/Helpers/Grid/UserGrid.php b/app/modules/web/Controllers/Helpers/Grid/UserGrid.php new file mode 100644 index 00000000..0f53c18a --- /dev/null +++ b/app/modules/web/Controllers/Helpers/Grid/UserGrid.php @@ -0,0 +1,262 @@ +. + */ + +namespace SP\Modules\Web\Controllers\Helpers\Grid; + + +use SP\Core\Acl\Acl; +use SP\Core\Acl\ActionsInterface; +use SP\Html\Assets\FontIcon; +use SP\Html\DataGrid\DataGridAction; +use SP\Html\DataGrid\DataGridActionSearch; +use SP\Html\DataGrid\DataGridActionType; +use SP\Html\DataGrid\DataGridData; +use SP\Html\DataGrid\DataGridHeader; +use SP\Html\DataGrid\DataGridInterface; +use SP\Html\DataGrid\DataGridTab; +use SP\Storage\Database\QueryResult; + +/** + * Class UserGrid + * + * @package SP\Modules\Web\Controllers\Helpers\Grid + */ +final class UserGrid extends GridBase +{ + /** + * @var QueryResult + */ + private $queryResult; + + /** + * @param QueryResult $queryResult + * + * @return DataGridInterface + */ + public function getGrid(QueryResult $queryResult): DataGridInterface + { + $this->queryResult = $queryResult; + + $grid = $this->getGridLayout(); + + $searchAction = $this->getSearchAction(); + + $grid->setDataActions($this->getSearchAction()); + $grid->setPager($this->getPager($searchAction)); + + $grid->setDataActions($this->getCreateAction()); + + if ($this->acl->checkUserAccess(ActionsInterface::CONFIG_IMPORT) + && $this->configData->isLdapEnabled() + ) { + $grid->setDataActions($this->getLdapSyncAction()); + } + + $grid->setDataActions($this->getViewAction()); + $grid->setDataActions($this->getEditAction()); + $grid->setDataActions($this->getEditPassAction()); + + $deleteAction = $this->getDeleteAction(); + + $grid->setDataActions($deleteAction); + $grid->setDataActions($deleteAction, true); + + $grid->setTime(round(getElapsedTime($this->queryTimeStart), 5)); + + return $grid; + } + + /** + * @return DataGridInterface + */ + protected function getGridLayout(): DataGridInterface + { + // Grid + $gridTab = new DataGridTab($this->view->getTheme()); + $gridTab->setId('tblUsers'); + $gridTab->setDataRowTemplate('datagrid-rows', 'grid'); + $gridTab->setDataPagerTemplate('datagrid-nav-full', 'grid'); + $gridTab->setHeader($this->getHeader()); + $gridTab->setData($this->getData()); + $gridTab->setTitle(__('Usuarios')); + + return $gridTab; + } + + /** + * @return DataGridHeader + */ + protected function getHeader(): DataGridHeader + { + // Grid Header + $gridHeader = new DataGridHeader(); + $gridHeader->addHeader(__('Nombre')); + $gridHeader->addHeader(__('Login')); + $gridHeader->addHeader(__('Perfil')); + $gridHeader->addHeader(__('Grupo')); + $gridHeader->addHeader(__('Propiedades')); + + return $gridHeader; + } + + /** + * @return DataGridData + */ + protected function getData(): DataGridData + { + // Grid Data + $gridData = new DataGridData(); + $gridData->setDataRowSourceId('id'); + $gridData->addDataRowSource('name'); + $gridData->addDataRowSource('login'); + $gridData->addDataRowSource('userProfileName'); + $gridData->addDataRowSource('userGroupName'); + $gridData->addDataRowSourceWithIcon('isAdminApp', $this->icons->getIconAppAdmin()); + $gridData->addDataRowSourceWithIcon('isAdminAcc', $this->icons->getIconAccAdmin()); + $gridData->addDataRowSourceWithIcon('isLdap', $this->icons->getIconLdapUser()); + $gridData->addDataRowSourceWithIcon('isDisabled', $this->icons->getIconDisabled()); + $gridData->setData($this->queryResult); + + return $gridData; + } + + /** + * @return DataGridActionSearch + */ + private function getSearchAction() + { + // Grid Actions + $gridActionSearch = new DataGridActionSearch(); + $gridActionSearch->setId(ActionsInterface::USER_SEARCH); + $gridActionSearch->setType(DataGridActionType::SEARCH_ITEM); + $gridActionSearch->setName('frmSearchUser'); + $gridActionSearch->setTitle(__('Buscar Usuario')); + $gridActionSearch->setOnSubmitFunction('appMgmt/search'); + $gridActionSearch->addData('action-route', Acl::getActionRoute(ActionsInterface::USER_SEARCH)); + + return $gridActionSearch; + } + + /** + * @return DataGridAction + */ + private function getCreateAction() + { + $gridAction = new DataGridAction(); + $gridAction->setId(ActionsInterface::USER_CREATE); + $gridAction->setType(DataGridActionType::MENUBAR_ITEM); + $gridAction->setName(__('Nuevo Usuario')); + $gridAction->setTitle(__('Nuevo Usuario')); + $gridAction->setIcon($this->icons->getIconAdd()); + $gridAction->setSkip(true); + $gridAction->setOnClickFunction('appMgmt/show'); + $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::USER_CREATE)); + + return $gridAction; + } + + /** + * @return DataGridAction + */ + private function getEditAction() + { + $gridAction = new DataGridAction(); + $gridAction->setId(ActionsInterface::USER_EDIT); + $gridAction->setType(DataGridActionType::EDIT_ITEM); + $gridAction->setName(__('Editar Usuario')); + $gridAction->setTitle(__('Editar Usuario')); + $gridAction->setIcon($this->icons->getIconEdit()); + $gridAction->setOnClickFunction('appMgmt/show'); + $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::USER_EDIT)); + + return $gridAction; + } + + /** + * @return DataGridAction + */ + private function getDeleteAction() + { + $gridAction = new DataGridAction(); + $gridAction->setId(ActionsInterface::USER_DELETE); + $gridAction->setType(DataGridActionType::DELETE_ITEM); + $gridAction->setName(__('Eliminar Usuario')); + $gridAction->setTitle(__('Eliminar Usuario')); + $gridAction->setIcon($this->icons->getIconDelete()); + $gridAction->setOnClickFunction('appMgmt/delete'); + $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::USER_DELETE)); + + return $gridAction; + } + + /** + * @return DataGridAction + */ + private function getLdapSyncAction() + { + $gridAction = new DataGridAction(); + $gridAction->setId(ActionsInterface::CONFIG_LDAP_SYNC); + $gridAction->setType(DataGridActionType::MENUBAR_ITEM); + $gridAction->setName(__('Importar usuarios de LDAP')); + $gridAction->setTitle(__('Importar usuarios de LDAP')); + $gridAction->setIcon(new FontIcon('get_app')); + $gridAction->setSkip(true); + $gridAction->setOnClickFunction('appMgmt/ldapSync'); + $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::CONFIG_LDAP_SYNC)); + + return $gridAction; + } + + private function getViewAction() + { + $gridAction = new DataGridAction(); + $gridAction->setId(ActionsInterface::USER_VIEW); + $gridAction->setType(DataGridActionType::VIEW_ITEM); + $gridAction->setName(__('Ver Detalles de Usuario')); + $gridAction->setTitle(__('Ver Detalles de Usuario')); + $gridAction->setIcon($this->icons->getIconView()); + $gridAction->setOnClickFunction('appMgmt/show'); + $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::USER_VIEW)); + + return $gridAction; + } + + /** + * @return DataGridAction + */ + private function getEditPassAction() + { + $gridAction = new DataGridAction(); + $gridAction->setId(ActionsInterface::USER_EDIT_PASS); + $gridAction->setType(DataGridActionType::EDIT_ITEM); + $gridAction->setName(__('Cambiar Clave de Usuario')); + $gridAction->setTitle(__('Cambiar Clave de Usuario')); + $gridAction->setIcon($this->icons->getIconEditPass()); + $gridAction->setOnClickFunction('appMgmt/show'); + $gridAction->setFilterRowSource('isLdap'); + $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::USER_EDIT_PASS)); + + return $gridAction; + } +} \ No newline at end of file diff --git a/app/modules/web/Controllers/Helpers/Grid/UserGroupGrid.php b/app/modules/web/Controllers/Helpers/Grid/UserGroupGrid.php new file mode 100644 index 00000000..a2290bd2 --- /dev/null +++ b/app/modules/web/Controllers/Helpers/Grid/UserGroupGrid.php @@ -0,0 +1,211 @@ +. + */ + +namespace SP\Modules\Web\Controllers\Helpers\Grid; + + +use SP\Core\Acl\Acl; +use SP\Core\Acl\ActionsInterface; +use SP\Html\DataGrid\DataGridAction; +use SP\Html\DataGrid\DataGridActionSearch; +use SP\Html\DataGrid\DataGridActionType; +use SP\Html\DataGrid\DataGridData; +use SP\Html\DataGrid\DataGridHeader; +use SP\Html\DataGrid\DataGridInterface; +use SP\Html\DataGrid\DataGridTab; +use SP\Storage\Database\QueryResult; + +/** + * Class UserGroupGrid + * + * @package SP\Modules\Web\Controllers\Helpers\Grid + */ +final class UserGroupGrid extends GridBase +{ + /** + * @var QueryResult + */ + private $queryResult; + + /** + * @param QueryResult $queryResult + * + * @return DataGridInterface + */ + public function getGrid(QueryResult $queryResult): DataGridInterface + { + $this->queryResult = $queryResult; + + $grid = $this->getGridLayout(); + + $searchAction = $this->getSearchAction(); + + $grid->setDataActions($this->getSearchAction()); + $grid->setPager($this->getPager($searchAction)); + + $grid->setDataActions($this->getCreateAction()); + $grid->setDataActions($this->getViewAction()); + $grid->setDataActions($this->getEditAction()); + + $deleteAction = $this->getDeleteAction(); + + $grid->setDataActions($deleteAction); + $grid->setDataActions($deleteAction, true); + + $grid->setTime(round(getElapsedTime($this->queryTimeStart), 5)); + + return $grid; + } + + /** + * @return DataGridInterface + */ + protected function getGridLayout(): DataGridInterface + { + // Grid + $gridTab = new DataGridTab($this->view->getTheme()); + $gridTab->setId('tblGroups'); + $gridTab->setDataRowTemplate('datagrid-rows', 'grid'); + $gridTab->setDataPagerTemplate('datagrid-nav-full', 'grid'); + $gridTab->setHeader($this->getHeader()); + $gridTab->setData($this->getData()); + $gridTab->setTitle(__('Grupos')); + + return $gridTab; + } + + /** + * @return DataGridHeader + */ + protected function getHeader(): DataGridHeader + { + // Grid Header + $gridHeader = new DataGridHeader(); + $gridHeader->addHeader(__('Nombre')); + $gridHeader->addHeader(__('Descripción')); + + return $gridHeader; + } + + /** + * @return DataGridData + */ + protected function getData(): DataGridData + { + // Grid Data + $gridData = new DataGridData(); + $gridData->setDataRowSourceId('id'); + $gridData->addDataRowSource('name'); + $gridData->addDataRowSource('description'); + $gridData->setData($this->queryResult); + + return $gridData; + } + + /** + * @return DataGridActionSearch + */ + private function getSearchAction() + { + // Grid Actions + $gridActionSearch = new DataGridActionSearch(); + $gridActionSearch->setId(ActionsInterface::GROUP_SEARCH); + $gridActionSearch->setType(DataGridActionType::SEARCH_ITEM); + $gridActionSearch->setName('frmSearchGroup'); + $gridActionSearch->setTitle(__('Buscar Grupo')); + $gridActionSearch->setOnSubmitFunction('appMgmt/search'); + $gridActionSearch->addData('action-route', Acl::getActionRoute(ActionsInterface::GROUP_SEARCH)); + + return $gridActionSearch; + } + + /** + * @return DataGridAction + */ + private function getCreateAction() + { + $gridAction = new DataGridAction(); + $gridAction->setId(ActionsInterface::GROUP_CREATE); + $gridAction->setType(DataGridActionType::MENUBAR_ITEM); + $gridAction->setName(__('Nuevo Grupo')); + $gridAction->setTitle(__('Nuevo Grupo')); + $gridAction->setIcon($this->icons->getIconAdd()); + $gridAction->setSkip(true); + $gridAction->setOnClickFunction('appMgmt/show'); + $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::GROUP_CREATE)); + + return $gridAction; + } + + /** + * @return DataGridAction + */ + private function getViewAction() + { + $gridAction = new DataGridAction(); + $gridAction->setId(ActionsInterface::GROUP_VIEW); + $gridAction->setType(DataGridActionType::VIEW_ITEM); + $gridAction->setName(__('Ver Grupo')); + $gridAction->setTitle(__('Ver Grupo')); + $gridAction->setIcon($this->icons->getIconView()); + $gridAction->setOnClickFunction('appMgmt/show'); + $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::GROUP_VIEW)); + + return $gridAction; + } + + /** + * @return DataGridAction + */ + private function getEditAction() + { + $gridAction = new DataGridAction(); + $gridAction->setId(ActionsInterface::GROUP_EDIT); + $gridAction->setType(DataGridActionType::EDIT_ITEM); + $gridAction->setName(__('Editar Grupo')); + $gridAction->setTitle(__('Editar Grupo')); + $gridAction->setIcon($this->icons->getIconEdit()); + $gridAction->setOnClickFunction('appMgmt/show'); + $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::GROUP_EDIT)); + + return $gridAction; + } + + /** + * @return DataGridAction + */ + private function getDeleteAction() + { + $gridAction = new DataGridAction(); + $gridAction->setId(ActionsInterface::GROUP_DELETE); + $gridAction->setType(DataGridActionType::DELETE_ITEM); + $gridAction->setName(__('Eliminar Grupo')); + $gridAction->setTitle(__('Eliminar Grupo')); + $gridAction->setIcon($this->icons->getIconDelete()); + $gridAction->setOnClickFunction('appMgmt/delete'); + $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::GROUP_DELETE)); + + return $gridAction; + } +} \ No newline at end of file diff --git a/app/modules/web/Controllers/Helpers/Grid/UserProfileGrid.php b/app/modules/web/Controllers/Helpers/Grid/UserProfileGrid.php new file mode 100644 index 00000000..3c652637 --- /dev/null +++ b/app/modules/web/Controllers/Helpers/Grid/UserProfileGrid.php @@ -0,0 +1,209 @@ +. + */ + +namespace SP\Modules\Web\Controllers\Helpers\Grid; + + +use SP\Core\Acl\Acl; +use SP\Core\Acl\ActionsInterface; +use SP\Html\DataGrid\DataGridAction; +use SP\Html\DataGrid\DataGridActionSearch; +use SP\Html\DataGrid\DataGridActionType; +use SP\Html\DataGrid\DataGridData; +use SP\Html\DataGrid\DataGridHeader; +use SP\Html\DataGrid\DataGridInterface; +use SP\Html\DataGrid\DataGridTab; +use SP\Storage\Database\QueryResult; + +/** + * Class UserProfileGrid + * + * @package SP\Modules\Web\Controllers\Helpers\Grid + */ +final class UserProfileGrid extends GridBase +{ + /** + * @var QueryResult + */ + private $queryResult; + + /** + * @param QueryResult $queryResult + * + * @return DataGridInterface + */ + public function getGrid(QueryResult $queryResult): DataGridInterface + { + $this->queryResult = $queryResult; + + $grid = $this->getGridLayout(); + + $searchAction = $this->getSearchAction(); + + $grid->setDataActions($this->getSearchAction()); + $grid->setPager($this->getPager($searchAction)); + + $grid->setDataActions($this->getCreateAction()); + $grid->setDataActions($this->getViewAction()); + $grid->setDataActions($this->getEditAction()); + + $deleteAction = $this->getDeleteAction(); + + $grid->setDataActions($deleteAction); + $grid->setDataActions($deleteAction, true); + + $grid->setTime(round(getElapsedTime($this->queryTimeStart), 5)); + + return $grid; + } + + /** + * @return DataGridInterface + */ + protected function getGridLayout(): DataGridInterface + { + // Grid + $gridTab = new DataGridTab($this->view->getTheme()); + $gridTab->setId('tblProfiles'); + $gridTab->setDataRowTemplate('datagrid-rows', 'grid'); + $gridTab->setDataPagerTemplate('datagrid-nav-full', 'grid'); + $gridTab->setHeader($this->getHeader()); + $gridTab->setData($this->getData()); + $gridTab->setTitle(__('Perfiles')); + + return $gridTab; + } + + /** + * @return DataGridHeader + */ + protected function getHeader(): DataGridHeader + { + // Grid Header + $gridHeader = new DataGridHeader(); + $gridHeader->addHeader(__('Nombre')); + + return $gridHeader; + } + + /** + * @return DataGridData + */ + protected function getData(): DataGridData + { + // Grid Data + $gridData = new DataGridData(); + $gridData->setDataRowSourceId('id'); + $gridData->addDataRowSource('name'); + $gridData->setData($this->queryResult); + + return $gridData; + } + + /** + * @return DataGridActionSearch + */ + private function getSearchAction() + { + // Grid Actions + $gridActionSearch = new DataGridActionSearch(); + $gridActionSearch->setId(ActionsInterface::PROFILE_SEARCH); + $gridActionSearch->setType(DataGridActionType::SEARCH_ITEM); + $gridActionSearch->setName('frmSearchProfile'); + $gridActionSearch->setTitle(__('Buscar Perfil')); + $gridActionSearch->setOnSubmitFunction('appMgmt/search'); + $gridActionSearch->addData('action-route', Acl::getActionRoute(ActionsInterface::PROFILE_SEARCH)); + + return $gridActionSearch; + } + + /** + * @return DataGridAction + */ + private function getCreateAction() + { + $gridAction = new DataGridAction(); + $gridAction->setId(ActionsInterface::PROFILE_CREATE); + $gridAction->setType(DataGridActionType::MENUBAR_ITEM); + $gridAction->setName(__('Nuevo Perfil')); + $gridAction->setTitle(__('Nuevo Perfil')); + $gridAction->setIcon($this->icons->getIconAdd()); + $gridAction->setSkip(true); + $gridAction->setOnClickFunction('appMgmt/show'); + $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::PROFILE_CREATE)); + + return $gridAction; + } + + /** + * @return DataGridAction + */ + private function getViewAction() + { + $gridAction = new DataGridAction(); + $gridAction->setId(ActionsInterface::PROFILE_VIEW); + $gridAction->setType(DataGridActionType::VIEW_ITEM); + $gridAction->setName(__('Ver Detalles de Perfil')); + $gridAction->setTitle(__('Ver Detalles de Perfil')); + $gridAction->setIcon($this->icons->getIconView()); + $gridAction->setOnClickFunction('appMgmt/show'); + $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::PROFILE_VIEW)); + + return $gridAction; + } + + /** + * @return DataGridAction + */ + private function getEditAction() + { + $gridAction = new DataGridAction(); + $gridAction->setId(ActionsInterface::PROFILE_EDIT); + $gridAction->setType(DataGridActionType::EDIT_ITEM); + $gridAction->setName(__('Editar Perfil')); + $gridAction->setTitle(__('Editar Perfil')); + $gridAction->setIcon($this->icons->getIconEdit()); + $gridAction->setOnClickFunction('appMgmt/show'); + $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::PROFILE_EDIT)); + + return $gridAction; + } + + /** + * @return DataGridAction + */ + private function getDeleteAction() + { + $gridAction = new DataGridAction(); + $gridAction->setId(ActionsInterface::PROFILE_DELETE); + $gridAction->setType(DataGridActionType::DELETE_ITEM); + $gridAction->setName(__('Eliminar Perfil')); + $gridAction->setTitle(__('Eliminar Perfil')); + $gridAction->setIcon($this->icons->getIconDelete()); + $gridAction->setOnClickFunction('appMgmt/delete'); + $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::PROFILE_DELETE)); + + return $gridAction; + } +} \ No newline at end of file diff --git a/app/modules/web/Controllers/Helpers/ItemsGridHelper.php b/app/modules/web/Controllers/Helpers/ItemsGridHelper.php deleted file mode 100644 index c689c667..00000000 --- a/app/modules/web/Controllers/Helpers/ItemsGridHelper.php +++ /dev/null @@ -1,1509 +0,0 @@ -. - */ - -namespace SP\Modules\Web\Controllers\Helpers; - -defined('APP_ROOT') || die(); - -use SP\Core\Acl\Acl; -use SP\Core\Acl\ActionsInterface; -use SP\Core\UI\ThemeIcons; -use SP\DataModel\ItemSearchData; -use SP\Html\Assets\FontIcon; -use SP\Html\DataGrid\DataGrid; -use SP\Html\DataGrid\DataGridAction; -use SP\Html\DataGrid\DataGridActionSearch; -use SP\Html\DataGrid\DataGridActionType; -use SP\Html\DataGrid\DataGridData; -use SP\Html\DataGrid\DataGridHeader; -use SP\Html\DataGrid\DataGridInterface; -use SP\Html\DataGrid\DataGridPager; -use SP\Html\DataGrid\DataGridTab; -use SP\Services\CustomField\CustomFieldDefService; -use SP\Storage\Database\QueryResult; -use SP\Util\DateUtil; - -/** - * Class Grids con las plantillas de tablas de datos - * - * @package SP\Controller - */ -final class ItemsGridHelper extends HelperBase -{ - /** - * @var float - */ - protected $queryTimeStart; - /** - * @var ThemeIcons - */ - protected $icons; - /** - * @var \SP\Core\Acl\Acl - */ - protected $acl; - - /** - * @param QueryResult $queryResult - * - * @return DataGridTab - */ - public function getCategoriesGrid(QueryResult $queryResult) - { - // Grid Header - $GridHeaders = new DataGridHeader(); - $GridHeaders->addHeader(__('Nombre')); - $GridHeaders->addHeader(__('Descripción')); - - // Grid Data - $GridData = new DataGridData(); - $GridData->setDataRowSourceId('id'); - $GridData->addDataRowSource('name'); - $GridData->addDataRowSource('description'); - $GridData->setData($queryResult); - - // Grid - $Grid = new DataGridTab($this->view->getTheme()); - $Grid->setId('tblCategories'); - $Grid->setDataRowTemplate('datagrid-rows', 'grid'); - $Grid->setDataPagerTemplate('datagrid-nav-full', 'grid'); - $Grid->setHeader($GridHeaders); - $Grid->setData($GridData); - $Grid->setTitle(__('Categorías')); - $Grid->setTime(round(getElapsedTime($this->queryTimeStart), 5)); - - // Grid Actions - $GridActionSearch = new DataGridActionSearch(); - $GridActionSearch->setId(ActionsInterface::CATEGORY_SEARCH); - $GridActionSearch->setType(DataGridActionType::SEARCH_ITEM); - $GridActionSearch->setName('frmSearchCategory'); - $GridActionSearch->setTitle(__('Buscar Categoría')); - $GridActionSearch->setOnSubmitFunction('appMgmt/search'); - $GridActionSearch->addData('action-route', Acl::getActionRoute(ActionsInterface::CATEGORY_SEARCH)); - - $Grid->setDataActions($GridActionSearch); - $Grid->setPager($this->getPager($GridActionSearch)); - - // Grid item's actions - $GridActionNew = new DataGridAction(); - $GridActionNew->setId(ActionsInterface::CATEGORY_CREATE); - $GridActionNew->setType(DataGridActionType::MENUBAR_ITEM); - $GridActionNew->setName(__('Nueva Categoría')); - $GridActionNew->setTitle(__('Nueva Categoría')); - $GridActionNew->setIcon($this->icons->getIconAdd()); - $GridActionNew->setSkip(true); - $GridActionNew->setOnClickFunction('appMgmt/show'); - $GridActionNew->addData('action-route', Acl::getActionRoute(ActionsInterface::CATEGORY_CREATE)); - - $Grid->setDataActions($GridActionNew); - - $GridActionEdit = new DataGridAction(); - $GridActionEdit->setId(ActionsInterface::CATEGORY_EDIT); - $GridActionEdit->setType(DataGridActionType::EDIT_ITEM); - $GridActionEdit->setName(__('Editar Categoría')); - $GridActionEdit->setTitle(__('Editar Categoría')); - $GridActionEdit->setIcon($this->icons->getIconEdit()); - $GridActionEdit->setOnClickFunction('appMgmt/show'); - $GridActionEdit->addData('action-route', Acl::getActionRoute(ActionsInterface::CATEGORY_EDIT)); - - - $Grid->setDataActions($GridActionEdit); - - $GridActionDel = new DataGridAction(); - $GridActionDel->setId(ActionsInterface::CATEGORY_DELETE); - $GridActionDel->setType(DataGridActionType::DELETE_ITEM); - $GridActionDel->setName(__('Eliminar Categoría')); - $GridActionDel->setTitle(__('Eliminar Categoría')); - $GridActionDel->setIcon($this->icons->getIconDelete()); - $GridActionDel->setOnClickFunction('appMgmt/delete'); - $GridActionDel->addData('action-route', Acl::getActionRoute(ActionsInterface::CATEGORY_DELETE)); - - $Grid->setDataActions($GridActionDel); - $Grid->setDataActions($GridActionDel, true); - - return $Grid; - } - - /** - * Devolver el paginador por defecto - * - * @param DataGridActionSearch $sourceAction - * - * @return DataGridPager - */ - protected function getPager(DataGridActionSearch $sourceAction) - { - $GridPager = new DataGridPager(); - $GridPager->setSourceAction($sourceAction); - $GridPager->setOnClickFunction('appMgmt/nav'); - $GridPager->setLimitStart(0); - $GridPager->setLimitCount($this->configData->getAccountCount()); - $GridPager->setIconPrev($this->icons->getIconNavPrev()); - $GridPager->setIconNext($this->icons->getIconNavNext()); - $GridPager->setIconFirst($this->icons->getIconNavFirst()); - $GridPager->setIconLast($this->icons->getIconNavLast()); - - return $GridPager; - } - - /** - * @param QueryResult $queryResult - * - * @return DataGridTab - */ - public function getClientsGrid(QueryResult $queryResult) - { - // Grid Header - $GridHeaders = new DataGridHeader(); - $GridHeaders->addHeader(__('Nombre')); - $GridHeaders->addHeader(__('Descripción')); - $GridHeaders->addHeader(__('Global')); - - // Grid Data - $GridData = new DataGridData(); - $GridData->setDataRowSourceId('id'); - $GridData->addDataRowSource('name'); - $GridData->addDataRowSource('description'); - $GridData->addDataRowSource('isGlobal', false, function ($value) { - return $value ? __('SI') : __('NO'); - }); - $GridData->setData($queryResult); - - // Grid - $Grid = new DataGridTab($this->view->getTheme()); - $Grid->setId('tblCustomers'); - $Grid->setDataRowTemplate('datagrid-rows', 'grid'); - $Grid->setDataPagerTemplate('datagrid-nav-full', 'grid'); - $Grid->setHeader($GridHeaders); - $Grid->setData($GridData); - $Grid->setTitle(__('Clientes')); - $Grid->setTime(round(getElapsedTime($this->queryTimeStart), 5)); - - // Grid Actions - $GridActionSearch = new DataGridActionSearch(); - $GridActionSearch->setId(ActionsInterface::CLIENT_SEARCH); - $GridActionSearch->setType(DataGridActionType::SEARCH_ITEM); - $GridActionSearch->setName('frmSearchCustomer'); - $GridActionSearch->setTitle(__('Buscar Cliente')); - $GridActionSearch->setOnSubmitFunction('appMgmt/search'); - $GridActionSearch->addData('action-route', Acl::getActionRoute(ActionsInterface::CLIENT_SEARCH)); - - $Grid->setDataActions($GridActionSearch); - $Grid->setPager($this->getPager($GridActionSearch)); - - // Grid item's actions - $GridActionNew = new DataGridAction(); - $GridActionNew->setId(ActionsInterface::CLIENT_CREATE); - $GridActionNew->setType(DataGridActionType::MENUBAR_ITEM); - $GridActionNew->setName(__('Nuevo Cliente')); - $GridActionNew->setTitle(__('Nuevo Cliente')); - $GridActionNew->setIcon($this->icons->getIconAdd()); - $GridActionNew->setSkip(true); - $GridActionNew->setOnClickFunction('appMgmt/show'); - $GridActionNew->addData('action-route', Acl::getActionRoute(ActionsInterface::CLIENT_CREATE)); - - $Grid->setDataActions($GridActionNew); - - $GridActionEdit = new DataGridAction(); - $GridActionEdit->setId(ActionsInterface::CLIENT_EDIT); - $GridActionEdit->setType(DataGridActionType::EDIT_ITEM); - $GridActionEdit->setName(__('Editar Cliente')); - $GridActionEdit->setTitle(__('Editar Cliente')); - $GridActionEdit->setIcon($this->icons->getIconEdit()); - $GridActionEdit->setOnClickFunction('appMgmt/show'); - $GridActionEdit->addData('action-route', Acl::getActionRoute(ActionsInterface::CLIENT_EDIT)); - - $Grid->setDataActions($GridActionEdit); - - $GridActionDel = new DataGridAction(); - $GridActionDel->setId(ActionsInterface::CLIENT_DELETE); - $GridActionDel->setType(DataGridActionType::DELETE_ITEM); - $GridActionDel->setName(__('Eliminar Cliente')); - $GridActionDel->setTitle(__('Eliminar Cliente')); - $GridActionDel->setIcon($this->icons->getIconDelete()); - $GridActionDel->setOnClickFunction('appMgmt/delete'); - $GridActionDel->addData('action-route', Acl::getActionRoute(ActionsInterface::CLIENT_DELETE)); - - $Grid->setDataActions($GridActionDel); - $Grid->setDataActions($GridActionDel, true); - - return $Grid; - } - - /** - * @param QueryResult $queryResult - * - * @return DataGridTab - */ - public function getCustomFieldsGrid(QueryResult $queryResult) - { - // Grid Header - $GridHeaders = new DataGridHeader(); - $GridHeaders->addHeader(__('Nombre')); - $GridHeaders->addHeader(__('Módulo')); - $GridHeaders->addHeader(__('Tipo')); - $GridHeaders->addHeader(__('Propiedades')); - - // Grid Data - $GridData = new DataGridData(); - $GridData->setDataRowSourceId('id'); - $GridData->addDataRowSource('name'); - $GridData->addDataRowSource('moduleId', false, function ($value) { - return CustomFieldDefService::getFieldModuleById($value); - }); - $GridData->addDataRowSource('typeName'); - $GridData->addDataRowSourceWithIcon('isEncrypted', $this->icons->getIconEditPass()->setTitle(__('Encriptado'))); - $GridData->setData($queryResult); - - // Grid - $Grid = new DataGridTab($this->view->getTheme()); - $Grid->setId('tblCustomFields'); - $Grid->setDataRowTemplate('datagrid-rows', 'grid'); - $Grid->setDataPagerTemplate('datagrid-nav-full', 'grid'); - $Grid->setHeader($GridHeaders); - $Grid->setData($GridData); - $Grid->setTitle(__('Campos Personalizados')); - $Grid->setTime(round(getElapsedTime($this->queryTimeStart), 5)); - - // Grid Actions - $GridActionSearch = new DataGridActionSearch(); - $GridActionSearch->setId(ActionsInterface::CUSTOMFIELD_SEARCH); - $GridActionSearch->setType(DataGridActionType::SEARCH_ITEM); - $GridActionSearch->setName('frmSearchCustomField'); - $GridActionSearch->setTitle(__('Buscar Campo')); - $GridActionSearch->setOnSubmitFunction('appMgmt/search'); - $GridActionSearch->addData('action-route', Acl::getActionRoute(ActionsInterface::CUSTOMFIELD_SEARCH)); - - $Grid->setDataActions($GridActionSearch); - $Grid->setPager($this->getPager($GridActionSearch)); - - // Grid item's actions - $GridActionNew = new DataGridAction(); - $GridActionNew->setId(ActionsInterface::CUSTOMFIELD_CREATE); - $GridActionNew->setType(DataGridActionType::MENUBAR_ITEM); - $GridActionNew->setName(__('Nuevo Campo')); - $GridActionNew->setTitle(__('Nuevo Campo')); - $GridActionNew->setIcon($this->icons->getIconAdd()); - $GridActionNew->setSkip(true); - $GridActionNew->setOnClickFunction('appMgmt/show'); - $GridActionNew->addData('action-route', Acl::getActionRoute(ActionsInterface::CUSTOMFIELD_CREATE)); - - $Grid->setDataActions($GridActionNew); - - $GridActionEdit = new DataGridAction(); - $GridActionEdit->setId(ActionsInterface::CUSTOMFIELD_EDIT); - $GridActionEdit->setType(DataGridActionType::EDIT_ITEM); - $GridActionEdit->setName(__('Editar Campo')); - $GridActionEdit->setTitle(__('Editar Campo')); - $GridActionEdit->setIcon($this->icons->getIconEdit()); - $GridActionEdit->setOnClickFunction('appMgmt/show'); - $GridActionEdit->addData('action-route', Acl::getActionRoute(ActionsInterface::CUSTOMFIELD_EDIT)); - - $Grid->setDataActions($GridActionEdit); - - $GridActionDel = new DataGridAction(); - $GridActionDel->setId(ActionsInterface::CUSTOMFIELD_DELETE); - $GridActionDel->setType(DataGridActionType::DELETE_ITEM); - $GridActionDel->setName(__('Eliminar Campo')); - $GridActionDel->setTitle(__('Eliminar Campo')); - $GridActionDel->setIcon($this->icons->getIconDelete()); - $GridActionDel->setOnClickFunction('appMgmt/delete'); - $GridActionDel->addData('action-route', Acl::getActionRoute(ActionsInterface::CUSTOMFIELD_DELETE)); - - $Grid->setDataActions($GridActionDel); - $Grid->setDataActions($GridActionDel, true); - - return $Grid; - } - - /** - * @param QueryResult $queryResult - * - * @return DataGridTab - */ - public function getFilesGrid(QueryResult $queryResult) - { - // Grid Header - $GridHeaders = new DataGridHeader(); - $GridHeaders->addHeader(__('Cuenta')); - $GridHeaders->addHeader(__('Cliente')); - $GridHeaders->addHeader(__('Nombre')); - $GridHeaders->addHeader(__('Tipo')); - $GridHeaders->addHeader(__('Tamaño')); - - // Grid Data - $GridData = new DataGridData(); - $GridData->setDataRowSourceId('id'); - $GridData->addDataRowSource('accountName'); - $GridData->addDataRowSource('clientName'); - $GridData->addDataRowSource('name'); - $GridData->addDataRowSource('type'); - $GridData->addDataRowSource('size', false, function ($value) { - return sprintf('%.2f KB', $value / 1000); - }); - $GridData->setData($queryResult); - - // Grid - $Grid = new DataGridTab($this->view->getTheme()); - $Grid->setId('tblFiles'); - $Grid->setDataRowTemplate('datagrid-rows', 'grid'); - $Grid->setDataPagerTemplate('datagrid-nav-full', 'grid'); - $Grid->setHeader($GridHeaders); - $Grid->setData($GridData); - $Grid->setTitle(__('Archivos')); - $Grid->setTime(round(getElapsedTime($this->queryTimeStart), 5)); - - // Grid Actions - $GridActionSearch = new DataGridActionSearch(); - $GridActionSearch->setId(ActionsInterface::ACCOUNT_FILE_SEARCH); - $GridActionSearch->setType(DataGridActionType::SEARCH_ITEM); - $GridActionSearch->setName('frmSearchFile'); - $GridActionSearch->setTitle(__('Buscar Archivo')); - $GridActionSearch->setOnSubmitFunction('appMgmt/search'); - $GridActionSearch->addData('action-route', Acl::getActionRoute(ActionsInterface::ACCOUNT_FILE_SEARCH)); - - $Grid->setDataActions($GridActionSearch); - $Grid->setPager($this->getPager($GridActionSearch)); - - // Grid item's actions - $GridActionView = new DataGridAction(); - $GridActionView->setId(ActionsInterface::ACCOUNT_FILE_VIEW); - $GridActionView->setType(DataGridActionType::VIEW_ITEM); - $GridActionView->setName(__('Ver Archivo')); - $GridActionView->setTitle(__('Ver Archivo')); - $GridActionView->setIcon($this->icons->getIconView()); - $GridActionView->setOnClickFunction('file/view'); - $GridActionView->addData('action-route', Acl::getActionRoute(ActionsInterface::ACCOUNT_FILE_VIEW)); - - $Grid->setDataActions($GridActionView); - - // Grid item's actions - $GridActionDownload = new DataGridAction(); - $GridActionDownload->setId(ActionsInterface::ACCOUNT_FILE_DOWNLOAD); - $GridActionDownload->setType(DataGridActionType::VIEW_ITEM); - $GridActionDownload->setName(__('Descargar Archivo')); - $GridActionDownload->setTitle(__('Descargar Archivo')); - $GridActionDownload->setIcon($this->icons->getIconDownload()); - $GridActionDownload->setOnClickFunction('file/download'); - $GridActionDownload->addData('action-route', Acl::getActionRoute(ActionsInterface::ACCOUNT_FILE_DOWNLOAD)); - - $Grid->setDataActions($GridActionDownload); - - $GridActionDel = new DataGridAction(); - $GridActionDel->setId(ActionsInterface::ACCOUNT_FILE_DELETE); - $GridActionDel->setType(DataGridActionType::DELETE_ITEM); - $GridActionDel->setName(__('Eliminar Archivo')); - $GridActionDel->setTitle(__('Eliminar Archivo')); - $GridActionDel->setIcon($this->icons->getIconDelete()); - $GridActionDel->setOnClickFunction('appMgmt/delete'); - $GridActionDel->addData('action-route', Acl::getActionRoute(ActionsInterface::ACCOUNT_FILE_DELETE)); - - $Grid->setDataActions($GridActionDel); - $Grid->setDataActions($GridActionDel, true); - - return $Grid; - } - - /** - * @param QueryResult $queryResult - * - * @return DataGridTab - */ - public function getAccountsGrid(QueryResult $queryResult) - { - // Grid Header - $GridHeaders = new DataGridHeader(); - $GridHeaders->addHeader(__('Nombre')); - $GridHeaders->addHeader(__('Cliente')); - $GridHeaders->addHeader(__('Categoría')); - - // Grid Data - $GridData = new DataGridData(); - $GridData->setDataRowSourceId('id'); - $GridData->addDataRowSource('name'); - $GridData->addDataRowSource('clientName'); - $GridData->addDataRowSource('categoryName'); - $GridData->setData($queryResult); - - // Grid - $Grid = new DataGridTab($this->view->getTheme()); - $Grid->setId('tblAccounts'); - $Grid->setDataRowTemplate('datagrid-rows', 'grid'); - $Grid->setDataPagerTemplate('datagrid-nav-full', 'grid'); - $Grid->setHeader($GridHeaders); - $Grid->setData($GridData); - $Grid->setTitle(__('Cuentas')); - $Grid->setTime(round(getElapsedTime($this->queryTimeStart), 5)); - - // Grid Actions - $GridActionSearch = new DataGridActionSearch(); - $GridActionSearch->setId(ActionsInterface::ACCOUNTMGR_SEARCH); - $GridActionSearch->setType(DataGridActionType::SEARCH_ITEM); - $GridActionSearch->setName('frmSearchAccount'); - $GridActionSearch->setTitle(__('Buscar Cuenta')); - $GridActionSearch->setOnSubmitFunction('appMgmt/search'); - $GridActionSearch->addData('action-route', Acl::getActionRoute(ActionsInterface::ACCOUNTMGR_SEARCH)); - - $Grid->setDataActions($GridActionSearch); - $Grid->setPager($this->getPager($GridActionSearch)); - - // Grid item's actions - $GridActionDel = new DataGridAction(); - $GridActionDel->setId(ActionsInterface::ACCOUNTMGR_DELETE); - $GridActionDel->setType(DataGridActionType::DELETE_ITEM); - $GridActionDel->setName(__('Eliminar Cuenta')); - $GridActionDel->setTitle(__('Eliminar Cuenta')); - $GridActionDel->setIcon($this->icons->getIconDelete()); - $GridActionDel->setOnClickFunction('appMgmt/delete'); - $GridActionDel->addData('action-route', Acl::getActionRoute(ActionsInterface::ACCOUNTMGR_DELETE)); - - $Grid->setDataActions($GridActionDel); - $Grid->setDataActions($GridActionDel, true); - - return $Grid; - } - - /** - * @param QueryResult $queryResult - * - * @return DataGridTab - */ - public function getAccountsHistoryGrid(QueryResult $queryResult) - { - // Grid Header - $GridHeaders = new DataGridHeader(); - $GridHeaders->addHeader(__('Nombre')); - $GridHeaders->addHeader(__('Cliente')); - $GridHeaders->addHeader(__('Categoría')); - $GridHeaders->addHeader(__('Fecha')); - $GridHeaders->addHeader(__('Estado')); - - $iconEdit = clone $this->icons->getIconEdit(); - $iconDelete = clone $this->icons->getIconDelete(); - - // Grid Data - $GridData = new DataGridData(); - $GridData->setDataRowSourceId('id'); - $GridData->addDataRowSource('name'); - $GridData->addDataRowSource('clientName'); - $GridData->addDataRowSource('categoryName'); - $GridData->addDataRowSource('date'); - $GridData->addDataRowSourceWithIcon('isModify', $iconEdit->setTitle(__('Modificada'))->setClass('opacity50')); - $GridData->addDataRowSourceWithIcon('isDeleted', $iconDelete->setTitle(__('Eliminada'))->setClass('opacity50')); - $GridData->setData($queryResult); - - // Grid - $Grid = new DataGridTab($this->view->getTheme()); - $Grid->setId('tblAccountsHistory'); - $Grid->setDataRowTemplate('datagrid-rows', 'grid'); - $Grid->setDataPagerTemplate('datagrid-nav-full', 'grid'); - $Grid->setHeader($GridHeaders); - $Grid->setData($GridData); - $Grid->setTitle(__('Cuentas (H)')); - $Grid->setTime(round(getElapsedTime($this->queryTimeStart), 5)); - - // Grid Actions - $GridActionSearch = new DataGridActionSearch(); - $GridActionSearch->setId(ActionsInterface::ACCOUNTMGR_HISTORY_SEARCH); - $GridActionSearch->setType(DataGridActionType::SEARCH_ITEM); - $GridActionSearch->setName('frmSearchAccountHistory'); - $GridActionSearch->setTitle(__('Buscar Cuenta')); - $GridActionSearch->setOnSubmitFunction('appMgmt/search'); - $GridActionSearch->addData('action-route', Acl::getActionRoute(ActionsInterface::ACCOUNTMGR_HISTORY_SEARCH)); - - $Grid->setDataActions($GridActionSearch); - $Grid->setPager($this->getPager($GridActionSearch)); - - // Grid item's actions - $GridActionRestore = new DataGridAction(); - $GridActionRestore->setId(ActionsInterface::ACCOUNTMGR_HISTORY_RESTORE); - $GridActionRestore->setType(DataGridActionType::EDIT_ITEM); - $GridActionRestore->setName(__('Restaurar Cuenta')); - $GridActionRestore->setTitle(__('Restaurar Cuenta')); - $GridActionRestore->setIcon($this->icons->getIconRestore()); - $GridActionRestore->addData('action-route', Acl::getActionRoute(ActionsInterface::ACCOUNTMGR_HISTORY_RESTORE)); - -// $Grid->setDataActions($GridActionRestore); - - $GridActionDel = new DataGridAction(); - $GridActionDel->setId(ActionsInterface::ACCOUNTMGR_HISTORY_DELETE); - $GridActionDel->setType(DataGridActionType::DELETE_ITEM); - $GridActionDel->setName(__('Eliminar Cuenta')); - $GridActionDel->setTitle(__('Eliminar Cuenta')); - $GridActionDel->setIcon($this->icons->getIconDelete()); - $GridActionDel->setOnClickFunction('appMgmt/delete'); - $GridActionDel->addData('action-route', Acl::getActionRoute(ActionsInterface::ACCOUNTMGR_HISTORY_DELETE)); - - $Grid->setDataActions($GridActionDel); - $Grid->setDataActions($GridActionDel, true); - - return $Grid; - } - - /** - * @param QueryResult $queryResult - * - * @return DataGridTab - */ - public function getUsersGrid(QueryResult $queryResult) - { - // Grid Header - $GridHeaders = new DataGridHeader(); - $GridHeaders->addHeader(__('Nombre')); - $GridHeaders->addHeader(__('Login')); - $GridHeaders->addHeader(__('Perfil')); - $GridHeaders->addHeader(__('Grupo')); - $GridHeaders->addHeader(__('Propiedades')); - - // Grid Data - $GridData = new DataGridData(); - $GridData->setDataRowSourceId('id'); - $GridData->addDataRowSource('name'); - $GridData->addDataRowSource('login'); - $GridData->addDataRowSource('userProfileName'); - $GridData->addDataRowSource('userGroupName'); - $GridData->addDataRowSourceWithIcon('isAdminApp', $this->icons->getIconAppAdmin()); - $GridData->addDataRowSourceWithIcon('isAdminAcc', $this->icons->getIconAccAdmin()); - $GridData->addDataRowSourceWithIcon('isLdap', $this->icons->getIconLdapUser()); - $GridData->addDataRowSourceWithIcon('isDisabled', $this->icons->getIconDisabled()); - $GridData->setData($queryResult); - - // Grid - $Grid = new DataGridTab($this->view->getTheme()); - $Grid->setId('tblUsers'); - $Grid->setDataRowTemplate('datagrid-rows', 'grid'); - $Grid->setDataPagerTemplate('datagrid-nav-full', 'grid'); - $Grid->setHeader($GridHeaders); - $Grid->setData($GridData); - $Grid->setTitle(__('Usuarios')); - $Grid->setTime(round(getElapsedTime($this->queryTimeStart), 5)); - - // Grid Actions - $GridActionSearch = new DataGridActionSearch(); - $GridActionSearch->setId(ActionsInterface::USER_SEARCH); - $GridActionSearch->setType(DataGridActionType::SEARCH_ITEM); - $GridActionSearch->setName('frmSearchUser'); - $GridActionSearch->setTitle(__('Buscar Usuario')); - $GridActionSearch->setOnSubmitFunction('appMgmt/search'); - $GridActionSearch->addData('action-route', Acl::getActionRoute(ActionsInterface::USER_SEARCH)); - - $Grid->setDataActions($GridActionSearch); - $Grid->setPager($this->getPager($GridActionSearch)); - - $GridActionNew = new DataGridAction(); - $GridActionNew->setId(ActionsInterface::USER_CREATE); - $GridActionNew->setType(DataGridActionType::MENUBAR_ITEM); - $GridActionNew->setName(__('Nuevo Usuario')); - $GridActionNew->setTitle(__('Nuevo Usuario')); - $GridActionNew->setIcon($this->icons->getIconAdd()); - $GridActionNew->setSkip(true); - $GridActionNew->setOnClickFunction('appMgmt/show'); - $GridActionNew->addData('action-route', Acl::getActionRoute(ActionsInterface::USER_CREATE)); - - $Grid->setDataActions($GridActionNew); - - if ($this->acl->checkUserAccess(ActionsInterface::CONFIG_IMPORT) - && $this->configData->isLdapEnabled() - ) { - $GridActionLdapSync = new DataGridAction(); - $GridActionLdapSync->setId(ActionsInterface::CONFIG_LDAP_SYNC); - $GridActionLdapSync->setType(DataGridActionType::MENUBAR_ITEM); - $GridActionLdapSync->setName(__('Importar usuarios de LDAP')); - $GridActionLdapSync->setTitle(__('Importar usuarios de LDAP')); - $GridActionLdapSync->setIcon(new FontIcon('get_app')); - $GridActionLdapSync->setSkip(true); - $GridActionLdapSync->setOnClickFunction('appMgmt/ldapSync'); - $GridActionLdapSync->addData('action-route', Acl::getActionRoute(ActionsInterface::CONFIG_LDAP_SYNC)); - - $Grid->setDataActions($GridActionLdapSync); - } - - // Grid item's actions - $GridActionView = new DataGridAction(); - $GridActionView->setId(ActionsInterface::USER_VIEW); - $GridActionView->setType(DataGridActionType::VIEW_ITEM); - $GridActionView->setName(__('Ver Detalles de Usuario')); - $GridActionView->setTitle(__('Ver Detalles de Usuario')); - $GridActionView->setIcon($this->icons->getIconView()); - $GridActionView->setOnClickFunction('appMgmt/show'); - $GridActionView->addData('action-route', Acl::getActionRoute(ActionsInterface::USER_VIEW)); - - $Grid->setDataActions($GridActionView); - - $GridActionEdit = new DataGridAction(); - $GridActionEdit->setId(ActionsInterface::USER_EDIT); - $GridActionEdit->setType(DataGridActionType::EDIT_ITEM); - $GridActionEdit->setName(__('Editar Usuario')); - $GridActionEdit->setTitle(__('Editar Usuario')); - $GridActionEdit->setIcon($this->icons->getIconEdit()); - $GridActionEdit->setOnClickFunction('appMgmt/show'); - $GridActionEdit->addData('action-route', Acl::getActionRoute(ActionsInterface::USER_EDIT)); - - $Grid->setDataActions($GridActionEdit); - - $GridActionEditPass = new DataGridAction(); - $GridActionEditPass->setId(ActionsInterface::USER_EDIT_PASS); - $GridActionEditPass->setType(DataGridActionType::EDIT_ITEM); - $GridActionEditPass->setName(__('Cambiar Clave de Usuario')); - $GridActionEditPass->setTitle(__('Cambiar Clave de Usuario')); - $GridActionEditPass->setIcon($this->icons->getIconEditPass()); - $GridActionEditPass->setOnClickFunction('appMgmt/show'); - $GridActionEditPass->setFilterRowSource('isLdap'); - $GridActionEditPass->addData('action-route', Acl::getActionRoute(ActionsInterface::USER_EDIT_PASS)); - - $Grid->setDataActions($GridActionEditPass); - - $GridActionDel = new DataGridAction(); - $GridActionDel->setId(ActionsInterface::USER_DELETE); - $GridActionDel->setType(DataGridActionType::DELETE_ITEM); - $GridActionDel->setName(__('Eliminar Usuario')); - $GridActionDel->setTitle(__('Eliminar Usuario')); - $GridActionDel->setIcon($this->icons->getIconDelete()); - $GridActionDel->setOnClickFunction('appMgmt/delete'); - $GridActionDel->addData('action-route', Acl::getActionRoute(ActionsInterface::USER_DELETE)); - - $Grid->setDataActions($GridActionDel); - $Grid->setDataActions($GridActionDel, true); - - return $Grid; - } - - /** - * @param QueryResult $queryResult - * - * @return DataGridTab - */ - public function getUserGroupsGrid(QueryResult $queryResult) - { - // Grid Header - $GridHeaders = new DataGridHeader(); - $GridHeaders->addHeader(__('Nombre')); - $GridHeaders->addHeader(__('Descripción')); - - // Grid Data - $GridData = new DataGridData(); - $GridData->setDataRowSourceId('id'); - $GridData->addDataRowSource('name'); - $GridData->addDataRowSource('description'); - $GridData->setData($queryResult); - - // Grid - $Grid = new DataGridTab($this->view->getTheme()); - $Grid->setId('tblGroups'); - $Grid->setDataRowTemplate('datagrid-rows', 'grid'); - $Grid->setDataPagerTemplate('datagrid-nav-full', 'grid'); - $Grid->setHeader($GridHeaders); - $Grid->setData($GridData); - $Grid->setTitle(__('Grupos')); - $Grid->setTime(round(getElapsedTime($this->queryTimeStart), 5)); - - // Grid Actions - $GridActionSearch = new DataGridActionSearch(); - $GridActionSearch->setId(ActionsInterface::GROUP_SEARCH); - $GridActionSearch->setType(DataGridActionType::SEARCH_ITEM); - $GridActionSearch->setName('frmSearchGroup'); - $GridActionSearch->setTitle(__('Buscar Grupo')); - $GridActionSearch->setOnSubmitFunction('appMgmt/search'); - $GridActionSearch->addData('action-route', Acl::getActionRoute(ActionsInterface::GROUP_SEARCH)); - - $Grid->setDataActions($GridActionSearch); - $Grid->setPager($this->getPager($GridActionSearch)); - - // Grid item's actions - $GridActionNew = new DataGridAction(); - $GridActionNew->setId(ActionsInterface::GROUP_CREATE); - $GridActionNew->setType(DataGridActionType::MENUBAR_ITEM); - $GridActionNew->setName(__('Nuevo Grupo')); - $GridActionNew->setTitle(__('Nuevo Grupo')); - $GridActionNew->setIcon($this->icons->getIconAdd()); - $GridActionNew->setSkip(true); - $GridActionNew->setOnClickFunction('appMgmt/show'); - $GridActionNew->addData('action-route', Acl::getActionRoute(ActionsInterface::GROUP_CREATE)); - - $Grid->setDataActions($GridActionNew); - - $GridActionView = new DataGridAction(); - $GridActionView->setId(ActionsInterface::GROUP_VIEW); - $GridActionView->setType(DataGridActionType::VIEW_ITEM); - $GridActionView->setName(__('Ver Grupo')); - $GridActionView->setTitle(__('Ver Grupo')); - $GridActionView->setIcon($this->icons->getIconView()); - $GridActionView->setOnClickFunction('appMgmt/show'); - $GridActionView->addData('action-route', Acl::getActionRoute(ActionsInterface::GROUP_VIEW)); - - $Grid->setDataActions($GridActionView); - - $GridActionEdit = new DataGridAction(); - $GridActionEdit->setId(ActionsInterface::GROUP_EDIT); - $GridActionEdit->setType(DataGridActionType::EDIT_ITEM); - $GridActionEdit->setName(__('Editar Grupo')); - $GridActionEdit->setTitle(__('Editar Grupo')); - $GridActionEdit->setIcon($this->icons->getIconEdit()); - $GridActionEdit->setOnClickFunction('appMgmt/show'); - $GridActionEdit->addData('action-route', Acl::getActionRoute(ActionsInterface::GROUP_EDIT)); - - $Grid->setDataActions($GridActionEdit); - - $GridActionDel = new DataGridAction(); - $GridActionDel->setId(ActionsInterface::GROUP_DELETE); - $GridActionDel->setType(DataGridActionType::DELETE_ITEM); - $GridActionDel->setName(__('Eliminar Grupo')); - $GridActionDel->setTitle(__('Eliminar Grupo')); - $GridActionDel->setIcon($this->icons->getIconDelete()); - $GridActionDel->setOnClickFunction('appMgmt/delete'); - $GridActionDel->addData('action-route', Acl::getActionRoute(ActionsInterface::GROUP_DELETE)); - - $Grid->setDataActions($GridActionDel); - $Grid->setDataActions($GridActionDel, true); - - return $Grid; - } - - /** - * @param QueryResult $queryResult - * - * @return DataGridTab - */ - public function getUserProfilesGrid(QueryResult $queryResult) - { - // Grid Header - $GridHeaders = new DataGridHeader(); - $GridHeaders->addHeader(__('Nombre')); - - // Grid Data - $GridData = new DataGridData(); - $GridData->setDataRowSourceId('id'); - $GridData->addDataRowSource('name'); - $GridData->setData($queryResult); - - // Grid - $Grid = new DataGridTab($this->view->getTheme()); - $Grid->setId('tblProfiles'); - $Grid->setDataRowTemplate('datagrid-rows', 'grid'); - $Grid->setDataPagerTemplate('datagrid-nav-full', 'grid'); - $Grid->setHeader($GridHeaders); - $Grid->setData($GridData); - $Grid->setTitle(__('Perfiles')); - $Grid->setTime(round(getElapsedTime($this->queryTimeStart), 5)); - - // Grid Actions - $GridActionSearch = new DataGridActionSearch(); - $GridActionSearch->setId(ActionsInterface::PROFILE_SEARCH); - $GridActionSearch->setType(DataGridActionType::SEARCH_ITEM); - $GridActionSearch->setName('frmSearchProfile'); - $GridActionSearch->setTitle(__('Buscar Perfil')); - $GridActionSearch->setOnSubmitFunction('appMgmt/search'); - $GridActionSearch->addData('action-route', Acl::getActionRoute(ActionsInterface::PROFILE_SEARCH)); - - $Grid->setDataActions($GridActionSearch); - $Grid->setPager($this->getPager($GridActionSearch)); - - // Grid item's actions - $GridActionNew = new DataGridAction(); - $GridActionNew->setId(ActionsInterface::PROFILE_CREATE); - $GridActionNew->setType(DataGridActionType::MENUBAR_ITEM); - $GridActionNew->setName(__('Nuevo Perfil')); - $GridActionNew->setTitle(__('Nuevo Perfil')); - $GridActionNew->setIcon($this->icons->getIconAdd()); - $GridActionNew->setSkip(true); - $GridActionNew->setOnClickFunction('appMgmt/show'); - $GridActionNew->addData('action-route', Acl::getActionRoute(ActionsInterface::PROFILE_CREATE)); - - $Grid->setDataActions($GridActionNew); - - $GridActionView = new DataGridAction(); - $GridActionView->setId(ActionsInterface::PROFILE_VIEW); - $GridActionView->setType(DataGridActionType::VIEW_ITEM); - $GridActionView->setName(__('Ver Detalles de Perfil')); - $GridActionView->setTitle(__('Ver Detalles de Perfil')); - $GridActionView->setIcon($this->icons->getIconView()); - $GridActionView->setOnClickFunction('appMgmt/show'); - $GridActionView->addData('action-route', Acl::getActionRoute(ActionsInterface::PROFILE_VIEW)); - - $Grid->setDataActions($GridActionView); - - $GridActionEdit = new DataGridAction(); - $GridActionEdit->setId(ActionsInterface::PROFILE_EDIT); - $GridActionEdit->setType(DataGridActionType::EDIT_ITEM); - $GridActionEdit->setName(__('Editar Perfil')); - $GridActionEdit->setTitle(__('Editar Perfil')); - $GridActionEdit->setIcon($this->icons->getIconEdit()); - $GridActionEdit->setOnClickFunction('appMgmt/show'); - $GridActionEdit->addData('action-route', Acl::getActionRoute(ActionsInterface::PROFILE_EDIT)); - - $Grid->setDataActions($GridActionEdit); - - $GridActionDel = new DataGridAction(); - $GridActionDel->setId(ActionsInterface::PROFILE_DELETE); - $GridActionDel->setType(DataGridActionType::DELETE_ITEM); - $GridActionDel->setName(__('Eliminar Perfil')); - $GridActionDel->setTitle(__('Eliminar Perfil')); - $GridActionDel->setIcon($this->icons->getIconDelete()); - $GridActionDel->setOnClickFunction('appMgmt/delete'); - $GridActionDel->addData('action-route', Acl::getActionRoute(ActionsInterface::PROFILE_DELETE)); - - $Grid->setDataActions($GridActionDel); - $Grid->setDataActions($GridActionDel, true); - - return $Grid; - } - - /** - * @param QueryResult $queryResult - * - * @return DataGridTab - */ - public function getAuthTokensGrid(QueryResult $queryResult) - { - // Grid Header - $GridHeaders = new DataGridHeader(); - $GridHeaders->addHeader(__('Usuario')); - $GridHeaders->addHeader(__('Acción')); - - // Grid Data - $GridData = new DataGridData(); - $GridData->setDataRowSourceId('id'); - $GridData->addDataRowSource('userLogin'); - $GridData->addDataRowSource('actionId', false, function ($value) { - return Acl::getActionInfo($value); - }); - $GridData->setData($queryResult); - - // Grid - $Grid = new DataGridTab($this->view->getTheme()); - $Grid->setId('tblTokens'); - $Grid->setDataRowTemplate('datagrid-rows', 'grid'); - $Grid->setDataPagerTemplate('datagrid-nav-full', 'grid'); - $Grid->setHeader($GridHeaders); - $Grid->setData($GridData); - $Grid->setTitle(__('Autorizaciones API')); - $Grid->setTime(round(getElapsedTime($this->queryTimeStart), 5)); - - // Grid Actions - $GridActionSearch = new DataGridActionSearch(); - $GridActionSearch->setId(ActionsInterface::AUTHTOKEN_SEARCH); - $GridActionSearch->setType(DataGridActionType::SEARCH_ITEM); - $GridActionSearch->setName('frmSearchToken'); - $GridActionSearch->setTitle(__('Buscar Token')); - $GridActionSearch->setOnSubmitFunction('appMgmt/search'); - $GridActionSearch->addData('action-route', Acl::getActionRoute(ActionsInterface::AUTHTOKEN_SEARCH)); - - $Grid->setDataActions($GridActionSearch); - $Grid->setPager($this->getPager($GridActionSearch)); - - // Grid item's actions - $GridActionNew = new DataGridAction(); - $GridActionNew->setId(ActionsInterface::AUTHTOKEN_CREATE); - $GridActionNew->setType(DataGridActionType::MENUBAR_ITEM); - $GridActionNew->setName(__('Nueva Autorización')); - $GridActionNew->setTitle(__('Nueva Autorización')); - $GridActionNew->setIcon($this->icons->getIconAdd()); - $GridActionNew->setSkip(true); - $GridActionNew->setOnClickFunction('appMgmt/show'); - $GridActionNew->addData('action-route', Acl::getActionRoute(ActionsInterface::AUTHTOKEN_CREATE)); - - $Grid->setDataActions($GridActionNew); - - $GridActionView = new DataGridAction(); - $GridActionView->setId(ActionsInterface::AUTHTOKEN_VIEW); - $GridActionView->setType(DataGridActionType::VIEW_ITEM); - $GridActionView->setName(__('Ver token de Autorización')); - $GridActionView->setTitle(__('Ver token de Autorización')); - $GridActionView->setIcon($this->icons->getIconView()); - $GridActionView->setOnClickFunction('appMgmt/show'); - $GridActionView->addData('action-route', Acl::getActionRoute(ActionsInterface::AUTHTOKEN_VIEW)); - - $Grid->setDataActions($GridActionView); - - $GridActionEdit = new DataGridAction(); - $GridActionEdit->setId(ActionsInterface::AUTHTOKEN_EDIT); - $GridActionEdit->setType(DataGridActionType::EDIT_ITEM); - $GridActionEdit->setName(__('Editar Autorización')); - $GridActionEdit->setTitle(__('Editar Autorización')); - $GridActionEdit->setIcon($this->icons->getIconEdit()); - $GridActionEdit->setOnClickFunction('appMgmt/show'); - $GridActionEdit->addData('action-route', Acl::getActionRoute(ActionsInterface::AUTHTOKEN_EDIT)); - - $Grid->setDataActions($GridActionEdit); - - $GridActionDel = new DataGridAction(); - $GridActionDel->setId(ActionsInterface::AUTHTOKEN_DELETE); - $GridActionDel->setType(DataGridActionType::DELETE_ITEM); - $GridActionDel->setName(__('Eliminar Autorización')); - $GridActionDel->setTitle(__('Eliminar Autorización')); - $GridActionDel->setIcon($this->icons->getIconDelete()); - $GridActionDel->setOnClickFunction('appMgmt/delete'); - $GridActionDel->addData('action-route', Acl::getActionRoute(ActionsInterface::AUTHTOKEN_DELETE)); - - $Grid->setDataActions($GridActionDel); - $Grid->setDataActions($GridActionDel, true); - - return $Grid; - } - - /** - * @param QueryResult $queryResult - * - * @return DataGridTab - */ - public function getPublicLinksGrid(QueryResult $queryResult) - { - // Grid Header - $GridHeaders = new DataGridHeader(); - $GridHeaders->addHeader(__('Cuenta')); - $GridHeaders->addHeader(__('Cliente')); - $GridHeaders->addHeader(__('Fecha Creación')); - $GridHeaders->addHeader(__('Fecha Caducidad')); - $GridHeaders->addHeader(__('Usuario')); - $GridHeaders->addHeader(__('Notificar')); - $GridHeaders->addHeader(__('Visitas')); - - // Grid Data - $GridData = new DataGridData(); - $GridData->setDataRowSourceId('id'); - $GridData->addDataRowSource('accountName'); - $GridData->addDataRowSource('clientName'); - $GridData->addDataRowSource('getDateAddFormat', true); - $GridData->addDataRowSource('getDateExpireFormat', true); - $GridData->addDataRowSource('userLogin'); - $GridData->addDataRowSource('getNotifyString', true); - $GridData->addDataRowSource('getCountViewsString', true); - $GridData->setData($queryResult); - - // Grid - $Grid = new DataGridTab($this->view->getTheme()); - $Grid->setId('tblLinks'); - $Grid->setDataRowTemplate('datagrid-rows', 'grid'); - $Grid->setDataPagerTemplate('datagrid-nav-full', 'grid'); - $Grid->setHeader($GridHeaders); - $Grid->setData($GridData); - $Grid->setTitle(__('Enlaces')); - $Grid->setTime(round(getElapsedTime($this->queryTimeStart), 5)); - - // Grid Actions - $GridActionSearch = new DataGridActionSearch(); - $GridActionSearch->setId(ActionsInterface::PUBLICLINK_SEARCH); - $GridActionSearch->setType(DataGridActionType::SEARCH_ITEM); - $GridActionSearch->setName('frmSearchLink'); - $GridActionSearch->setTitle(__('Buscar Enlace')); - $GridActionSearch->setOnSubmitFunction('appMgmt/search'); - $GridActionSearch->addData('action-route', Acl::getActionRoute(ActionsInterface::PUBLICLINK_SEARCH)); - - $Grid->setDataActions($GridActionSearch); - $Grid->setPager($this->getPager($GridActionSearch)); - - // Grid item's actions - $GridActionNew = new DataGridAction(); - $GridActionNew->setId(ActionsInterface::PUBLICLINK_CREATE); - $GridActionNew->setType(DataGridActionType::MENUBAR_ITEM); - $GridActionNew->setName(__('Nuevo Enlace')); - $GridActionNew->setTitle(__('Nuevo Enlace')); - $GridActionNew->setIcon($this->icons->getIconAdd()); - $GridActionNew->setSkip(true); - $GridActionNew->setOnClickFunction('appMgmt/show'); - $GridActionNew->addData('action-route', Acl::getActionRoute(ActionsInterface::PUBLICLINK_CREATE)); - - $Grid->setDataActions($GridActionNew); - - $GridActionView = new DataGridAction(); - $GridActionView->setId(ActionsInterface::PUBLICLINK_VIEW); - $GridActionView->setType(DataGridActionType::VIEW_ITEM); - $GridActionView->setName(__('Ver Enlace')); - $GridActionView->setTitle(__('Ver Enlace')); - $GridActionView->setIcon($this->icons->getIconView()); - $GridActionView->setOnClickFunction('appMgmt/show'); - $GridActionView->addData('action-route', Acl::getActionRoute(ActionsInterface::PUBLICLINK_VIEW)); - - $Grid->setDataActions($GridActionView); - - $GridActionRefresh = new DataGridAction(); - $GridActionRefresh->setId(ActionsInterface::PUBLICLINK_REFRESH); - $GridActionRefresh->setName(__('Renovar Enlace')); - $GridActionRefresh->setTitle(__('Renovar Enlace')); - $GridActionRefresh->setIcon($this->icons->getIconRefresh()); - $GridActionRefresh->setOnClickFunction('link/refresh'); - $GridActionRefresh->addData('action-route', Acl::getActionRoute(ActionsInterface::PUBLICLINK_REFRESH)); - - $Grid->setDataActions($GridActionRefresh); - - $GridActionDel = new DataGridAction(); - $GridActionDel->setId(ActionsInterface::PUBLICLINK_DELETE); - $GridActionDel->setType(DataGridActionType::DELETE_ITEM); - $GridActionDel->setName(__('Eliminar Enlace')); - $GridActionDel->setTitle(__('Eliminar Enlace')); - $GridActionDel->setIcon($this->icons->getIconDelete()); - $GridActionDel->setOnClickFunction('appMgmt/delete'); - $GridActionDel->addData('action-route', Acl::getActionRoute(ActionsInterface::PUBLICLINK_DELETE)); - - $Grid->setDataActions($GridActionDel); - $Grid->setDataActions($GridActionDel, true); - - return $Grid; - } - - /** - * @param QueryResult $queryResult - * - * @return DataGridTab - */ - public function getTagsGrid(QueryResult $queryResult) - { - // Grid Header - $GridHeaders = new DataGridHeader(); - $GridHeaders->addHeader(__('Nombre')); - - // Grid Data - $GridData = new DataGridData(); - $GridData->setDataRowSourceId('id'); - $GridData->addDataRowSource('name'); - $GridData->setData($queryResult); - - // Grid - $Grid = new DataGridTab($this->view->getTheme()); - $Grid->setId('tblTags'); - $Grid->setDataRowTemplate('datagrid-rows', 'grid'); - $Grid->setDataPagerTemplate('datagrid-nav-full', 'grid'); - $Grid->setHeader($GridHeaders); - $Grid->setData($GridData); - $Grid->setTitle(__('Etiquetas')); - $Grid->setTime(round(getElapsedTime($this->queryTimeStart), 5)); - - // Grid Actions - $GridActionSearch = new DataGridActionSearch(); - $GridActionSearch->setId(ActionsInterface::TAG_SEARCH); - $GridActionSearch->setType(DataGridActionType::SEARCH_ITEM); - $GridActionSearch->setName('frmSearchTag'); - $GridActionSearch->setTitle(__('Buscar Etiqueta')); - $GridActionSearch->setOnSubmitFunction('appMgmt/search'); - $GridActionSearch->addData('action-route', Acl::getActionRoute(ActionsInterface::TAG_SEARCH)); - - $Grid->setDataActions($GridActionSearch); - $Grid->setPager($this->getPager($GridActionSearch)); - - // Grid item's actions - $GridActionNew = new DataGridAction(); - $GridActionNew->setId(ActionsInterface::TAG_CREATE); - $GridActionNew->setType(DataGridActionType::MENUBAR_ITEM); - $GridActionNew->setName(__('Nueva Etiqueta')); - $GridActionNew->setTitle(__('Nueva Etiqueta')); - $GridActionNew->setIcon($this->icons->getIconAdd()); - $GridActionNew->setSkip(true); - $GridActionNew->setOnClickFunction('appMgmt/show'); - $GridActionNew->addData('action-route', Acl::getActionRoute(ActionsInterface::TAG_CREATE)); - - $Grid->setDataActions($GridActionNew); - - $GridActionEdit = new DataGridAction(); - $GridActionEdit->setId(ActionsInterface::TAG_EDIT); - $GridActionEdit->setType(DataGridActionType::EDIT_ITEM); - $GridActionEdit->setName(__('Editar Etiqueta')); - $GridActionEdit->setTitle(__('Editar Etiqueta')); - $GridActionEdit->setIcon($this->icons->getIconEdit()); - $GridActionEdit->setOnClickFunction('appMgmt/show'); - $GridActionEdit->addData('action-route', Acl::getActionRoute(ActionsInterface::TAG_EDIT)); - - $Grid->setDataActions($GridActionEdit); - - $GridActionDel = new DataGridAction(); - $GridActionDel->setId(ActionsInterface::TAG_DELETE); - $GridActionDel->setType(DataGridActionType::DELETE_ITEM); - $GridActionDel->setName(__('Eliminar Etiqueta')); - $GridActionDel->setTitle(__('Eliminar Etiqueta')); - $GridActionDel->setIcon($this->icons->getIconDelete()); - $GridActionDel->setOnClickFunction('appMgmt/delete'); - $GridActionDel->addData('action-route', Acl::getActionRoute(ActionsInterface::TAG_DELETE)); - - $Grid->setDataActions($GridActionDel); - $Grid->setDataActions($GridActionDel, true); - - return $Grid; - } - - /** - * @param QueryResult $queryResult - * - * @return DataGridTab - */ - public function getPluginsGrid(QueryResult $queryResult) - { - // Grid Header - $GridHeaders = new DataGridHeader(); - $GridHeaders->addHeader(__('Plugin')); - $GridHeaders->addHeader(__('Estado')); - - // Grid Data - $GridData = new DataGridData(); - $GridData->setDataRowSourceId('id'); - $GridData->addDataRowSource('name'); - $GridData->addDataRowSourceWithIcon('enabled', $this->icons->getIconEnabled()); - $GridData->addDataRowSourceWithIcon('enabled', $this->icons->getIconDisabled(), 0); - $GridData->addDataRowSourceWithIcon('available', $this->icons->getIconDelete()->setTitle(__('No disponible')), 0); - $GridData->setData($queryResult); - - // Grid - $Grid = new DataGridTab($this->view->getTheme()); - $Grid->setId('tblPlugins'); - $Grid->setDataRowTemplate('datagrid-rows', 'grid'); - $Grid->setDataPagerTemplate('datagrid-nav-full', 'grid'); - $Grid->setHeader($GridHeaders); - $Grid->setData($GridData); - $Grid->setTitle(__('Plugins')); - $Grid->setTime(round(getElapsedTime($this->queryTimeStart), 5)); - - // Grid Actions - $GridActionSearch = new DataGridActionSearch(); - $GridActionSearch->setId(ActionsInterface::PLUGIN_SEARCH); - $GridActionSearch->setType(DataGridActionType::SEARCH_ITEM); - $GridActionSearch->setName('frmSearchPlugin'); - $GridActionSearch->setTitle(__('Buscar Plugin')); - $GridActionSearch->setOnSubmitFunction('appMgmt/search'); - $GridActionSearch->addData('action-route', Acl::getActionRoute(ActionsInterface::PLUGIN_SEARCH)); - - $Grid->setDataActions($GridActionSearch); - $Grid->setPager($this->getPager($GridActionSearch)); - - // Grid item's actions - $GridActionView = new DataGridAction(); - $GridActionView->setId(ActionsInterface::PLUGIN_VIEW); - $GridActionView->setType(DataGridActionType::VIEW_ITEM); - $GridActionView->setName(__('Ver Plugin')); - $GridActionView->setTitle(__('Ver Plugin')); - $GridActionView->setIcon($this->icons->getIconView()); - $GridActionView->setOnClickFunction('appMgmt/show'); - $GridActionView->setFilterRowSource('available', 0); - $GridActionView->addData('action-route', Acl::getActionRoute(ActionsInterface::PLUGIN_VIEW)); - - $Grid->setDataActions($GridActionView); - - $GridActionEnable = new DataGridAction(); - $GridActionEnable->setId(ActionsInterface::PLUGIN_ENABLE); - $GridActionEnable->setName(__('Habilitar')); - $GridActionEnable->setTitle(__('Habilitar')); - $GridActionEnable->setIcon($this->icons->getIconEnabled()); - $GridActionEnable->setOnClickFunction('plugin/toggle'); - $GridActionEnable->setFilterRowSource('enabled'); - $GridActionEnable->setFilterRowSource('available', 0); - $GridActionEnable->addData('action-route', Acl::getActionRoute(ActionsInterface::PLUGIN_ENABLE)); - $GridActionEnable->addData('action-method', 'get'); - - $Grid->setDataActions($GridActionEnable); - - $GridActionDisable = new DataGridAction(); - $GridActionDisable->setId(ActionsInterface::PLUGIN_DISABLE); - $GridActionDisable->setName(__('Deshabilitar')); - $GridActionDisable->setTitle(__('Deshabilitar')); - $GridActionDisable->setIcon($this->icons->getIconDisabled()); - $GridActionDisable->setOnClickFunction('plugin/toggle'); - $GridActionDisable->setFilterRowSource('enabled', 0); - $GridActionDisable->setFilterRowSource('available', 0); - $GridActionDisable->addData('action-route', Acl::getActionRoute(ActionsInterface::PLUGIN_DISABLE)); - $GridActionDisable->addData('action-method', 'get'); - - $Grid->setDataActions($GridActionDisable); - - $GridActionReset = new DataGridAction(); - $GridActionReset->setId(ActionsInterface::PLUGIN_RESET); - $GridActionReset->setName(__('Restablecer Datos')); - $GridActionReset->setTitle(__('Restablecer Datos')); - $GridActionReset->setIcon($this->icons->getIconRefresh()); - $GridActionReset->setOnClickFunction('plugin/reset'); - $GridActionReset->setFilterRowSource('available', 0); - $GridActionReset->addData('action-route', Acl::getActionRoute(ActionsInterface::PLUGIN_RESET)); - $GridActionReset->addData('action-method', 'get'); - - $Grid->setDataActions($GridActionReset); - - return $Grid; - } - - /** - * @param QueryResult $queryResult - * - * @return DataGrid - */ - public function getEventLogGrid(QueryResult $queryResult) - { - // Grid Header - $GridHeaders = new DataGridHeader(); - $GridHeaders->addHeader(__('ID')); - $GridHeaders->addHeader(__('Fecha / Hora')); - $GridHeaders->addHeader(__('Nivel')); - $GridHeaders->addHeader(__('Evento')); - $GridHeaders->addHeader(__('Login')); - $GridHeaders->addHeader(__('IP')); - $GridHeaders->addHeader(__('Descripción')); - - $isDemoMode = $this->configData->isDemoEnabled(); - - // Grid Data - $GridData = new DataGridData(); - $GridData->setDataRowSourceId('id'); - $GridData->addDataRowSource('id'); - $GridData->addDataRowSource('date'); - $GridData->addDataRowSource('level'); - $GridData->addDataRowSource('action'); - $GridData->addDataRowSource('login'); - $GridData->addDataRowSource('ipAddress', false, - function ($value) use ($isDemoMode) { - return $isDemoMode ? preg_replace('#\d+#', '*', $value) : $value; - }); - $GridData->addDataRowSource('description', false, - function ($value) use ($isDemoMode) { - if ($isDemoMode) { - $value = preg_replace('/\\d+\\.\\d+\\.\\d+\\.\\d+/', "*.*.*.*", $value); - } - - $text = str_replace(';;', PHP_EOL, $value); - - if (preg_match('/^SQL.*/m', $text)) { - $text = preg_replace([ - '/([a-zA-Z_]+),/m', - '/(UPDATE|DELETE|TRUNCATE|INSERT|SELECT|WHERE|LEFT|ORDER|LIMIT|FROM)/m'], - ['\\1,
', '
\\1'], - $text); - } - -// if (strlen($text) >= 100) { -// $text = wordwrap($text, 100, PHP_EOL, true); -// } - - return str_replace(PHP_EOL, '
', $text); - }); - $GridData->setData($queryResult); - - // Grid - $Grid = new DataGrid($this->view->getTheme()); - $Grid->setId('tblEventLog'); - $Grid->setDataTableTemplate('datagrid-table-simple', 'grid'); - $Grid->setDataRowTemplate('datagrid-rows', $this->view->getBase()); - $Grid->setDataPagerTemplate('datagrid-nav-full', 'grid'); - $Grid->setHeader($GridHeaders); - $Grid->setData($GridData); - $Grid->setTitle(__('Registro de Eventos')); - $Grid->setTime(round(getElapsedTime($this->queryTimeStart), 5)); - - // Grid Actions - $GridActionSearch = new DataGridActionSearch(); - $GridActionSearch->setId(ActionsInterface::EVENTLOG_SEARCH); - $GridActionSearch->setType(DataGridActionType::SEARCH_ITEM); - $GridActionSearch->setName('frmSearchEvent'); - $GridActionSearch->setTitle(__('Buscar Evento')); - $GridActionSearch->setOnSubmitFunction('eventlog/search'); - $GridActionSearch->addData('action-route', Acl::getActionRoute(ActionsInterface::EVENTLOG_SEARCH)); - - $Grid->setDataActions($GridActionSearch); - - $GridActionRefresh = new DataGridAction(); - $GridActionRefresh->setId(ActionsInterface::EVENTLOG_SEARCH); - $GridActionRefresh->setType(DataGridActionType::MENUBAR_ITEM); - $GridActionRefresh->setName(__('Refrescar')); - $GridActionRefresh->setTitle(__('Refrescar')); - $GridActionRefresh->setIcon($this->icons->getIconRefresh()); - $GridActionRefresh->setOnClickFunction('eventlog/search'); - $GridActionRefresh->addData('action-route', Acl::getActionRoute(ActionsInterface::EVENTLOG_SEARCH)); - $GridActionRefresh->addData('target', '#data-table-tblEventLog'); - - $Grid->setDataActions($GridActionRefresh); - - $GridActionClear = new DataGridAction(); - $GridActionClear->setId(ActionsInterface::EVENTLOG_CLEAR); - $GridActionClear->setType(DataGridActionType::MENUBAR_ITEM); - $GridActionClear->setName(__('Vaciar registro de eventos')); - $GridActionClear->setTitle(__('Vaciar registro de eventos')); - $GridActionClear->setIcon($this->icons->getIconClear()); - $GridActionClear->setOnClickFunction('eventlog/clear'); - $GridActionClear->addData('action-route', Acl::getActionRoute(ActionsInterface::EVENTLOG_CLEAR)); - $GridActionClear->addData('nextaction', Acl::getActionRoute(ActionsInterface::EVENTLOG)); - - $Grid->setDataActions($GridActionClear); - - $Grid->setPager($this->getPager($GridActionSearch) - ->setOnClickFunction('eventlog/nav') - ); - - return $Grid; - } - - /** - * @param QueryResult $queryResult - * - * @return DataGrid - */ - public function getNotificationsGrid(QueryResult $queryResult) - { - $isAdminApp = $this->context->getUserData()->getIsAdminApp(); - - // Grid Header - $GridHeaders = new DataGridHeader(); - $GridHeaders->addHeader(__('Fecha')); - $GridHeaders->addHeader(__('Tipo')); - $GridHeaders->addHeader(__('Componente')); - $GridHeaders->addHeader(__('Descripción')); - $GridHeaders->addHeader(__('Estado')); - - // Grid Data - $GridData = new DataGridData(); - $GridData->setDataRowSourceId('id'); - $GridData->addDataRowSource('date', false, - function ($value) { - return DateUtil::getDateFromUnix($value); - }); - $GridData->addDataRowSource('type'); - $GridData->addDataRowSource('component'); - $GridData->addDataRowSource('description'); - $GridData->addDataRowSourceWithIcon('checked', $this->icons->getIconEnabled()->setTitle(__('Leída'))); - $GridData->addDataRowSourceWithIcon('onlyAdmin', $this->icons->getIconAppAdmin()->setTitle(__('Sólo Admins'))); - $GridData->addDataRowSourceWithIcon('sticky', $this->icons->getIconGroup()->setTitle(__('Global'))); - $GridData->setData($queryResult); - - // Grid - $Grid = new DataGrid($this->view->getTheme()); - $Grid->setId('tblNotifications'); - $Grid->setDataRowTemplate('datagrid-rows', 'grid'); - $Grid->setDataPagerTemplate('datagrid-nav-full', 'grid'); - $Grid->setHeader($GridHeaders); - $Grid->setData($GridData); - $Grid->setTitle(__('Notificaciones')); - $Grid->setTime(round(getElapsedTime($this->queryTimeStart), 5)); - - // Grid Actions - $GridActionSearch = new DataGridActionSearch(); - $GridActionSearch->setId(ActionsInterface::NOTIFICATION_SEARCH); - $GridActionSearch->setType(DataGridActionType::SEARCH_ITEM); - $GridActionSearch->setName('frmSearchNotification'); - $GridActionSearch->setTitle(__('Buscar Notificación')); - $GridActionSearch->setOnSubmitFunction('notification/search'); - $GridActionSearch->addData('action-route', Acl::getActionRoute(ActionsInterface::NOTIFICATION_SEARCH)); - - $Grid->setDataActions($GridActionSearch); - $Grid->setPager($this->getPager($GridActionSearch)); - - if ($isAdminApp) { - // Grid item's actions - $GridActionNew = new DataGridAction(); - $GridActionNew->setId(ActionsInterface::NOTIFICATION_CREATE); - $GridActionNew->setType(DataGridActionType::MENUBAR_ITEM); - $GridActionNew->setName(__('Nueva Notificación')); - $GridActionNew->setTitle(__('Nueva Notificación')); - $GridActionNew->setIcon($this->icons->getIconAdd()); - $GridActionNew->setSkip(true); - $GridActionNew->setOnClickFunction('notification/show'); - $GridActionNew->addData('action-route', Acl::getActionRoute(ActionsInterface::NOTIFICATION_CREATE)); - - $Grid->setDataActions($GridActionNew); - } - - $GridActionView = new DataGridAction(); - $GridActionView->setId(ActionsInterface::NOTIFICATION_VIEW); - $GridActionView->setType(DataGridActionType::VIEW_ITEM); - $GridActionView->setName(__('Ver Notificación')); - $GridActionView->setTitle(__('Ver Notificación')); - $GridActionView->setIcon($this->icons->getIconView()); - $GridActionView->setOnClickFunction('notification/show'); - $GridActionView->addData('action-route', Acl::getActionRoute(ActionsInterface::NOTIFICATION_VIEW)); - - $Grid->setDataActions($GridActionView); - - $GridActionCheck = new DataGridAction(); - $GridActionCheck->setId(ActionsInterface::NOTIFICATION_CHECK); - $GridActionCheck->setName(__('Marcar Notificación')); - $GridActionCheck->setTitle(__('Marcar Notificación')); - $GridActionCheck->setIcon($this->icons->getIconEnabled()); - $GridActionCheck->setOnClickFunction('notification/check'); - $GridActionCheck->setFilterRowSource('checked'); - $GridActionCheck->addData('action-route', Acl::getActionRoute(ActionsInterface::NOTIFICATION_CHECK)); - $GridActionCheck->addData('nextaction', Acl::getActionRoute(ActionsInterface::NOTIFICATION)); - - $Grid->setDataActions($GridActionCheck); - - $GridActionEdit = new DataGridAction(); - $GridActionEdit->setId(ActionsInterface::NOTIFICATION_EDIT); - $GridActionEdit->setName(__('Editar Notificación')); - $GridActionEdit->setTitle(__('Editar Notificación')); - $GridActionEdit->setIcon($this->icons->getIconEdit()); - $GridActionEdit->setOnClickFunction('notification/show'); - $GridActionEdit->addData('action-route', Acl::getActionRoute(ActionsInterface::NOTIFICATION_EDIT)); - - $Grid->setDataActions($GridActionEdit); - - $GridActionDel = new DataGridAction(); - $GridActionDel->setId(ActionsInterface::NOTIFICATION_DELETE); - $GridActionDel->setType(DataGridActionType::DELETE_ITEM); - $GridActionDel->setName(__('Eliminar Notificación')); - $GridActionDel->setTitle(__('Eliminar Notificación')); - $GridActionDel->setIcon($this->icons->getIconDelete()); - $GridActionDel->setOnClickFunction('notification/delete'); - $GridActionDel->addData('action-route', Acl::getActionRoute(ActionsInterface::NOTIFICATION_DELETE)); - $GridActionDel->addData('nextaction', Acl::getActionRoute(ActionsInterface::NOTIFICATION)); - - if (!$isAdminApp) { - $GridActionCheck->setFilterRowSource('sticky'); - $GridActionEdit->setFilterRowSource('sticky'); - $GridActionDel->setFilterRowSource('sticky'); - } - - $Grid->setDataActions($GridActionDel); - $Grid->setDataActions($GridActionDel, true); - - return $Grid; - } - - /** - * Actualizar los datos del paginador - * - * @param DataGridInterface $dataGrid - * @param ItemSearchData $itemSearchData - * - * @return DataGridInterface - */ - public function updatePager(DataGridInterface $dataGrid, ItemSearchData $itemSearchData) - { - $dataGrid->getPager() - ->setLimitStart($itemSearchData->getLimitStart()) - ->setLimitCount($itemSearchData->getLimitCount()) - ->setFilterOn($itemSearchData->getSeachString() !== ''); - - $dataGrid->updatePager(); - - return $dataGrid; - } - - /** - * @param mixed $queryTimeStart - */ - public function setQueryTimeStart(float $queryTimeStart) - { - $this->queryTimeStart = $queryTimeStart; - } - - /** - * @throws \Psr\Container\ContainerExceptionInterface - * @throws \Psr\Container\NotFoundExceptionInterface - */ - protected function initialize() - { - $this->acl = $this->dic->get(Acl::class); - $this->icons = $this->view->getTheme()->getIcons(); - } -} \ No newline at end of file diff --git a/app/modules/web/Controllers/ItemManagerController.php b/app/modules/web/Controllers/ItemManagerController.php index 67164054..6ab288fc 100644 --- a/app/modules/web/Controllers/ItemManagerController.php +++ b/app/modules/web/Controllers/ItemManagerController.php @@ -27,7 +27,14 @@ namespace SP\Modules\Web\Controllers; use SP\Core\Acl\Acl; use SP\Core\Events\Event; use SP\DataModel\ItemSearchData; -use SP\Modules\Web\Controllers\Helpers\ItemsGridHelper; +use SP\Modules\Web\Controllers\Helpers\Grid\AccountGrid; +use SP\Modules\Web\Controllers\Helpers\Grid\AccountHistoryGrid; +use SP\Modules\Web\Controllers\Helpers\Grid\CategoryGrid; +use SP\Modules\Web\Controllers\Helpers\Grid\ClientGrid; +use SP\Modules\Web\Controllers\Helpers\Grid\CustomFieldGrid; +use SP\Modules\Web\Controllers\Helpers\Grid\FileGrid; +use SP\Modules\Web\Controllers\Helpers\Grid\PluginGrid; +use SP\Modules\Web\Controllers\Helpers\Grid\TagGrid; use SP\Modules\Web\Controllers\Helpers\TabsGridHelper; use SP\Services\Account\AccountFileService; use SP\Services\Account\AccountHistoryService; @@ -49,10 +56,6 @@ final class ItemManagerController extends ControllerBase * @var ItemSearchData */ protected $itemSearchData; - /** - * @var ItemsGridHelper - */ - protected $itemsGridHelper; /** * @var TabsGridHelper */ @@ -78,11 +81,8 @@ final class ItemManagerController extends ControllerBase $this->itemSearchData = new ItemSearchData(); $this->itemSearchData->setLimitCount($this->configData->getAccountCount()); - $this->itemsGridHelper = $this->dic->get(ItemsGridHelper::class); $this->tabsGridHelper = $this->dic->get(TabsGridHelper::class); - $this->itemsGridHelper->setQueryTimeStart(microtime(true)); - if ($this->checkAccess(Acl::CATEGORY)) { $this->tabsGridHelper->addTab($this->getCategoriesList()); } @@ -131,7 +131,9 @@ final class ItemManagerController extends ControllerBase */ protected function getCategoriesList() { - return $this->itemsGridHelper->getCategoriesGrid($this->dic->get(CategoryService::class)->search($this->itemSearchData))->updatePager(); + return $this->dic->get(CategoryGrid::class) + ->getGrid($this->dic->get(CategoryService::class)->search($this->itemSearchData)) + ->updatePager(); } /** @@ -143,7 +145,9 @@ final class ItemManagerController extends ControllerBase */ protected function getTagsList() { - return $this->itemsGridHelper->getTagsGrid($this->dic->get(TagService::class)->search($this->itemSearchData))->updatePager(); + return $this->dic->get(TagGrid::class) + ->getGrid($this->dic->get(TagService::class)->search($this->itemSearchData)) + ->updatePager(); } /** @@ -155,7 +159,9 @@ final class ItemManagerController extends ControllerBase */ protected function getClientsList() { - return $this->itemsGridHelper->getClientsGrid($this->dic->get(ClientService::class)->search($this->itemSearchData))->updatePager(); + return $this->dic->get(ClientGrid::class) + ->getGrid($this->dic->get(ClientService::class)->search($this->itemSearchData)) + ->updatePager(); } /** @@ -167,7 +173,9 @@ final class ItemManagerController extends ControllerBase */ protected function getCustomFieldsList() { - return $this->itemsGridHelper->getCustomFieldsGrid($this->dic->get(CustomFieldDefService::class)->search($this->itemSearchData))->updatePager(); + return $this->dic->get(CustomFieldGrid::class) + ->getGrid($this->dic->get(CustomFieldDefService::class)->search($this->itemSearchData)) + ->updatePager(); } /** @@ -179,7 +187,9 @@ final class ItemManagerController extends ControllerBase */ protected function getAccountFilesList() { - return $this->itemsGridHelper->getFilesGrid($this->dic->get(AccountFileService::class)->search($this->itemSearchData))->updatePager(); + return $this->dic->get(FileGrid::class) + ->getGrid($this->dic->get(AccountFileService::class)->search($this->itemSearchData)) + ->updatePager(); } /** @@ -191,7 +201,9 @@ final class ItemManagerController extends ControllerBase */ protected function getAccountsList() { - return $this->itemsGridHelper->getAccountsGrid($this->dic->get(AccountService::class)->search($this->itemSearchData))->updatePager(); + return $this->dic->get(AccountGrid::class) + ->getGrid($this->dic->get(AccountService::class)->search($this->itemSearchData)) + ->updatePager(); } /** @@ -203,7 +215,9 @@ final class ItemManagerController extends ControllerBase */ protected function getAccountsHistoryList() { - return $this->itemsGridHelper->getAccountsHistoryGrid($this->dic->get(AccountHistoryService::class)->search($this->itemSearchData))->updatePager(); + return $this->dic->get(AccountHistoryGrid::class) + ->getGrid($this->dic->get(AccountHistoryService::class)->search($this->itemSearchData)) + ->updatePager(); } /** @@ -215,7 +229,9 @@ final class ItemManagerController extends ControllerBase */ protected function getPluginsList() { - return $this->itemsGridHelper->getPluginsGrid($this->dic->get(PluginService::class)->search($this->itemSearchData))->updatePager(); + return $this->dic->get(PluginGrid::class) + ->getGrid($this->dic->get(PluginService::class)->search($this->itemSearchData)) + ->updatePager(); } /** diff --git a/app/modules/web/Controllers/NotificationController.php b/app/modules/web/Controllers/NotificationController.php index 93b7a811..a01bd184 100644 --- a/app/modules/web/Controllers/NotificationController.php +++ b/app/modules/web/Controllers/NotificationController.php @@ -31,7 +31,7 @@ use SP\Core\Events\Event; use SP\Core\Events\EventMessage; use SP\DataModel\NotificationData; use SP\Http\JsonResponse; -use SP\Modules\Web\Controllers\Helpers\ItemsGridHelper; +use SP\Modules\Web\Controllers\Helpers\Grid\NotificationGrid; use SP\Modules\Web\Controllers\Traits\ItemTrait; use SP\Modules\Web\Controllers\Traits\JsonTrait; use SP\Modules\Web\Forms\NotificationForm; @@ -82,12 +82,11 @@ final class NotificationController extends ControllerBase implements CrudControl */ protected function getSearchGrid() { - $itemsGridHelper = $this->dic->get(ItemsGridHelper::class); - $itemsGridHelper->setQueryTimeStart(microtime(true)); - $itemSearchData = $this->getSearchData($this->configData->getAccountCount(), $this->request); - return $itemsGridHelper->updatePager($itemsGridHelper->getNotificationsGrid($this->notificationService->search($itemSearchData)), $itemSearchData); + $notificationGrid = $this->dic->get(NotificationGrid::class); + + return $notificationGrid->updatePager($notificationGrid->getGrid($this->notificationService->search($itemSearchData)), $itemSearchData); } /** diff --git a/app/modules/web/Controllers/PluginController.php b/app/modules/web/Controllers/PluginController.php index af716e03..1f7eb9e0 100644 --- a/app/modules/web/Controllers/PluginController.php +++ b/app/modules/web/Controllers/PluginController.php @@ -31,7 +31,7 @@ use SP\Core\Events\Event; use SP\Core\Events\EventMessage; use SP\DataModel\PluginData; use SP\Http\JsonResponse; -use SP\Modules\Web\Controllers\Helpers\ItemsGridHelper; +use SP\Modules\Web\Controllers\Helpers\Grid\PluginGrid; use SP\Modules\Web\Controllers\Traits\ItemTrait; use SP\Modules\Web\Controllers\Traits\JsonTrait; use SP\Services\Plugin\PluginService; @@ -78,10 +78,11 @@ final class PluginController extends ControllerBase */ protected function getSearchGrid() { - $itemsGridHelper = $this->dic->get(ItemsGridHelper::class); $itemSearchData = $this->getSearchData($this->configData->getAccountCount(), $this->request); - return $itemsGridHelper->updatePager($itemsGridHelper->getPluginsGrid($this->pluginService->search($itemSearchData)), $itemSearchData); + $pluginGrid = $this->dic->get(PluginGrid::class); + + return $pluginGrid->updatePager($pluginGrid->getGrid($this->pluginService->search($itemSearchData)), $itemSearchData); } /** diff --git a/app/modules/web/Controllers/PublicLinkController.php b/app/modules/web/Controllers/PublicLinkController.php index 019ff7af..8573a772 100644 --- a/app/modules/web/Controllers/PublicLinkController.php +++ b/app/modules/web/Controllers/PublicLinkController.php @@ -32,7 +32,7 @@ use SP\Core\Exceptions\ValidationException; use SP\DataModel\PublicLinkData; use SP\DataModel\PublicLinkListData; use SP\Http\JsonResponse; -use SP\Modules\Web\Controllers\Helpers\ItemsGridHelper; +use SP\Modules\Web\Controllers\Helpers\Grid\PublicLinkGrid; use SP\Modules\Web\Controllers\Traits\ItemTrait; use SP\Modules\Web\Controllers\Traits\JsonTrait; use SP\Modules\Web\Forms\PublicLinkForm; @@ -84,10 +84,11 @@ final class PublicLinkController extends ControllerBase implements CrudControlle */ protected function getSearchGrid() { - $itemsGridHelper = $this->dic->get(ItemsGridHelper::class); $itemSearchData = $this->getSearchData($this->configData->getAccountCount(), $this->request); - return $itemsGridHelper->updatePager($itemsGridHelper->getPublicLinksGrid($this->publicLinkService->search($itemSearchData)), $itemSearchData); + $publicLinkGrid = $this->dic->get(PublicLinkGrid::class); + + return $publicLinkGrid->updatePager($publicLinkGrid->getGrid($this->publicLinkService->search($itemSearchData)), $itemSearchData); } /** diff --git a/app/modules/web/Controllers/StatusController.php b/app/modules/web/Controllers/StatusController.php index e3ecf9be..5e479d62 100644 --- a/app/modules/web/Controllers/StatusController.php +++ b/app/modules/web/Controllers/StatusController.php @@ -82,6 +82,7 @@ final class StatusController extends SimpleControllerBase } $this->returnJsonResponseData([]); + return; } } @@ -128,6 +129,7 @@ final class StatusController extends SimpleControllerBase } $this->returnJsonResponseData($notices); + return; } logger($requestData->message); diff --git a/app/modules/web/Controllers/TagController.php b/app/modules/web/Controllers/TagController.php index ef36ae1c..908a3bd9 100644 --- a/app/modules/web/Controllers/TagController.php +++ b/app/modules/web/Controllers/TagController.php @@ -29,7 +29,7 @@ use SP\Core\Events\Event; use SP\Core\Exceptions\ValidationException; use SP\DataModel\TagData; use SP\Http\JsonResponse; -use SP\Modules\Web\Controllers\Helpers\ItemsGridHelper; +use SP\Modules\Web\Controllers\Helpers\Grid\TagGrid; use SP\Modules\Web\Controllers\Traits\ItemTrait; use SP\Modules\Web\Controllers\Traits\JsonTrait; use SP\Modules\Web\Forms\TagForm; @@ -78,10 +78,11 @@ final class TagController extends ControllerBase implements CrudControllerInterf */ protected function getSearchGrid() { - $itemsGridHelper = $this->dic->get(ItemsGridHelper::class); $itemSearchData = $this->getSearchData($this->configData->getAccountCount(), $this->request); - return $itemsGridHelper->updatePager($itemsGridHelper->getTagsGrid($this->tagService->search($itemSearchData)), $itemSearchData); + $tagGrid = $this->dic->get(TagGrid::class); + + return $tagGrid->updatePager($tagGrid->getGrid($this->tagService->search($itemSearchData)), $itemSearchData); } /** @@ -120,6 +121,7 @@ final class TagController extends ControllerBase implements CrudControllerInterf * * @throws \SP\Core\Exceptions\ConstraintException * @throws \SP\Core\Exceptions\QueryException + * @throws \SP\Repositories\NoSuchItemException */ protected function setViewData($tagId = null) { diff --git a/app/modules/web/Controllers/UserController.php b/app/modules/web/Controllers/UserController.php index 4080e8db..99c9f2c7 100644 --- a/app/modules/web/Controllers/UserController.php +++ b/app/modules/web/Controllers/UserController.php @@ -30,7 +30,7 @@ use SP\Core\Events\EventMessage; use SP\Core\Exceptions\ValidationException; use SP\DataModel\UserData; use SP\Http\JsonResponse; -use SP\Modules\Web\Controllers\Helpers\ItemsGridHelper; +use SP\Modules\Web\Controllers\Helpers\Grid\UserGrid; use SP\Modules\Web\Controllers\Traits\ItemTrait; use SP\Modules\Web\Controllers\Traits\JsonTrait; use SP\Modules\Web\Forms\UserForm; @@ -85,10 +85,11 @@ final class UserController extends ControllerBase implements CrudControllerInter */ protected function getSearchGrid() { - $itemsGridHelper = $this->dic->get(ItemsGridHelper::class); $itemSearchData = $this->getSearchData($this->configData->getAccountCount(), $this->request); - return $itemsGridHelper->updatePager($itemsGridHelper->getUsersGrid($this->userService->search($itemSearchData)), $itemSearchData); + $userGrid = $this->dic->get(UserGrid::class); + + return $userGrid->updatePager($userGrid->getGrid($this->userService->search($itemSearchData)), $itemSearchData); } /** diff --git a/app/modules/web/Controllers/UserGroupController.php b/app/modules/web/Controllers/UserGroupController.php index 718d2767..7af418c0 100644 --- a/app/modules/web/Controllers/UserGroupController.php +++ b/app/modules/web/Controllers/UserGroupController.php @@ -30,7 +30,7 @@ use SP\Core\Events\EventMessage; use SP\Core\Exceptions\ValidationException; use SP\DataModel\UserGroupData; use SP\Http\JsonResponse; -use SP\Modules\Web\Controllers\Helpers\ItemsGridHelper; +use SP\Modules\Web\Controllers\Helpers\Grid\UserGroupGrid; use SP\Modules\Web\Controllers\Traits\ItemTrait; use SP\Modules\Web\Controllers\Traits\JsonTrait; use SP\Modules\Web\Forms\UserGroupForm; @@ -86,10 +86,11 @@ final class UserGroupController extends ControllerBase implements CrudController */ protected function getSearchGrid() { - $itemsGridHelper = $this->dic->get(ItemsGridHelper::class); $itemSearchData = $this->getSearchData($this->configData->getAccountCount(), $this->request); - return $itemsGridHelper->updatePager($itemsGridHelper->getUserGroupsGrid($this->userGroupService->search($itemSearchData)), $itemSearchData); + $userGroupGrid = $this->dic->get(UserGroupGrid::class); + + return $userGroupGrid->updatePager($userGroupGrid->getGrid($this->userGroupService->search($itemSearchData)), $itemSearchData); } /** diff --git a/app/modules/web/Controllers/UserProfileController.php b/app/modules/web/Controllers/UserProfileController.php index 0fed39a9..6207c5d5 100644 --- a/app/modules/web/Controllers/UserProfileController.php +++ b/app/modules/web/Controllers/UserProfileController.php @@ -31,7 +31,7 @@ use SP\Core\Exceptions\ValidationException; use SP\DataModel\ProfileData; use SP\DataModel\UserProfileData; use SP\Http\JsonResponse; -use SP\Modules\Web\Controllers\Helpers\ItemsGridHelper; +use SP\Modules\Web\Controllers\Helpers\Grid\UserProfileGrid; use SP\Modules\Web\Controllers\Traits\ItemTrait; use SP\Modules\Web\Controllers\Traits\JsonTrait; use SP\Modules\Web\Forms\UserProfileForm; @@ -80,10 +80,11 @@ final class UserProfileController extends ControllerBase implements CrudControll */ protected function getSearchGrid() { - $itemsGridHelper = $this->dic->get(ItemsGridHelper::class); $itemSearchData = $this->getSearchData($this->configData->getAccountCount(), $this->request); - return $itemsGridHelper->updatePager($itemsGridHelper->getUserProfilesGrid($this->userProfileService->search($itemSearchData)), $itemSearchData); + $userProfileGrid = $this->dic->get(UserProfileGrid::class); + + return $userProfileGrid->updatePager($userProfileGrid->getGrid($this->userProfileService->search($itemSearchData)), $itemSearchData); } /** diff --git a/lib/SP/Core/Acl/Actions.php b/lib/SP/Core/Acl/Actions.php index b26ec102..38af8f1c 100644 --- a/lib/SP/Core/Acl/Actions.php +++ b/lib/SP/Core/Acl/Actions.php @@ -85,7 +85,9 @@ final class Actions */ protected function loadCache() { - if ($this->fileStorage->isExpired(self::ACTIONS_CACHE_FILE, self::CACHE_EXPIRE)) { + if ($this->fileStorage->isExpired(self::ACTIONS_CACHE_FILE, self::CACHE_EXPIRE) + || $this->fileStorage->isExpiredDate(self::ACTIONS_CACHE_FILE, $this->xmlFileStorage->getFileHandler()->getFileTime()) + ) { $this->mapAndSave(); } else { try { diff --git a/lib/SP/Repositories/Account/AccountHistoryRepository.php b/lib/SP/Repositories/Account/AccountHistoryRepository.php index 140be8f4..f3382ed1 100644 --- a/lib/SP/Repositories/Account/AccountHistoryRepository.php +++ b/lib/SP/Repositories/Account/AccountHistoryRepository.php @@ -347,7 +347,7 @@ final class AccountHistoryRepository extends Repository implements RepositoryIte INNER JOIN Client C ON AH.clientId = C.id INNER JOIN Category C2 ON AH.categoryId = C2.id '); - $queryData->setOrder('AH.name, C.name, AH.id DESC'); + $queryData->setOrder('date DESC, AH.name, C.name, AH.id DESC'); if ($itemSearchData->getSeachString() !== '') { $queryData->setWhere('AH.name LIKE ? OR C.name LIKE ?'); diff --git a/lib/SP/Repositories/Account/AccountRepository.php b/lib/SP/Repositories/Account/AccountRepository.php index 15a9b07e..89ae875e 100644 --- a/lib/SP/Repositories/Account/AccountRepository.php +++ b/lib/SP/Repositories/Account/AccountRepository.php @@ -172,8 +172,6 @@ final class AccountRepository extends Repository implements RepositoryItemInterf userId = ?, userGroupId = ?, userEditId = ?, - otherUserEdit = ?, - otherUserGroupEdit = ?, isPrivate = ?, isPrivateGroup = ?, passDate = UNIX_TIMESTAMP(), @@ -194,8 +192,6 @@ final class AccountRepository extends Repository implements RepositoryItemInterf $itemData->userId, $itemData->userGroupId, $itemData->userId, - $itemData->otherUserEdit, - $itemData->otherUserGroupEdit, $itemData->isPrivate, $itemData->isPrivateGroup, $itemData->passDateChange, diff --git a/lib/SP/Services/Account/AccountService.php b/lib/SP/Services/Account/AccountService.php index dc64c551..635b5870 100644 --- a/lib/SP/Services/Account/AccountService.php +++ b/lib/SP/Services/Account/AccountService.php @@ -29,6 +29,7 @@ use SP\Core\Crypt\Crypt; use SP\Core\Exceptions\QueryException; use SP\Core\Exceptions\SPException; use SP\DataModel\AccountData; +use SP\DataModel\AccountHistoryData; use SP\DataModel\AccountPassData; use SP\DataModel\AccountSearchVData; use SP\DataModel\Dto\AccountDetailsResponse; @@ -271,6 +272,34 @@ final class AccountService extends Service implements AccountServiceInterface } } + /** + * @param AccountHistoryData $data + * + * @return int + * @throws QueryException + * @throws \SP\Core\Exceptions\ConstraintException + */ + public function createFromHistory(AccountHistoryData $data) + { + $accountRequest = new AccountRequest(); + $accountRequest->name = $data->getName(); + $accountRequest->categoryId = $data->getCategoryId(); + $accountRequest->clientId = $data->getClientId(); + $accountRequest->url = $data->getUrl(); + $accountRequest->login = $data->getLogin(); + $accountRequest->pass = $data->getPass(); + $accountRequest->key = $data->getKey(); + $accountRequest->notes = $data->getNotes(); + $accountRequest->userId = $data->getUserId(); + $accountRequest->userGroupId = $data->getUserGroupId(); + $accountRequest->passDateChange = $data->getPassDateChange(); + $accountRequest->parentId = $data->getParentId(); + $accountRequest->isPrivate = $data->getIsPrivate(); + $accountRequest->isPrivateGroup = $data->getIsPrivateGroup(); + + return $this->accountRepository->create($accountRequest); + } + /** * Updates external items for the account * @@ -313,8 +342,8 @@ final class AccountService extends Service implements AccountServiceInterface return $accountHistoryRepository->create( new AccountHistoryCreateDto( $accountId, - $isDelete, !$isDelete, + $isDelete, $configService->getByParam('masterPwd')) ); } @@ -422,15 +451,18 @@ final class AccountService extends Service implements AccountServiceInterface * @param $id * * @return AccountService - * @throws NoSuchItemException - * @throws QueryException - * @throws \SP\Core\Exceptions\ConstraintException + * @throws ServiceException */ public function delete($id) { - if ($this->accountRepository->delete($id) === 0) { - throw new NoSuchItemException(__u('Cuenta no encontrada')); - } + $this->transactionAware(function () use ($id) { + $this->addHistory($id, 1); + + if ($this->accountRepository->delete($id) === 0) { + throw new NoSuchItemException(__u('Cuenta no encontrada')); + } + + }); return $this; } diff --git a/lib/SP/Services/Install/Installer.php b/lib/SP/Services/Install/Installer.php index 490931a7..6a355d53 100644 --- a/lib/SP/Services/Install/Installer.php +++ b/lib/SP/Services/Install/Installer.php @@ -55,7 +55,7 @@ final class Installer extends Service */ const VERSION = [3, 0, 0]; const VERSION_TEXT = '3.0-beta'; - const BUILD = 18080601; + const BUILD = 18080701; /** * @var DatabaseSetupInterface diff --git a/lib/SP/Storage/File/FileCache.php b/lib/SP/Storage/File/FileCache.php index e5715940..594b30a6 100644 --- a/lib/SP/Storage/File/FileCache.php +++ b/lib/SP/Storage/File/FileCache.php @@ -39,15 +39,9 @@ final class FileCache implements FileStorageInterface */ public function load($path) { - if (!file_exists($path)) { - throw new FileException(sprintf(__('No es posible leer el archivo (%s)'), $path)); - } + $file = new FileHandler($path); - if (!($data = file_get_contents($path))) { - throw new FileException(sprintf(__('Error al leer datos del archivo (%s)'), $path)); - } - - return unserialize($data); + return unserialize($file->checkIsReadable()->readToString()); } /** @@ -59,23 +53,28 @@ final class FileCache implements FileStorageInterface */ public function save($path, $data) { - $dir = dirname($path); + $this->createPath(dirname($path)); - if (!is_dir($dir) && mkdir($dir, 0700, true) === false) { - throw new FileException(sprintf(__('No es posible crear el directorio (%s)'), $dir)); - } - - if (file_exists($path) && !is_writable($path)) { - throw new FileException(sprintf(__('No es posible escribir en el archivo (%s)'), $path)); - } - - if (!file_put_contents($path, serialize($data))) { - throw new FileException(sprintf(__('No es posible escribir en el archivo (%s)'), $path)); - } + $file = new FileHandler($path); + $file->checkIsWritable() + ->write(serialize($data)) + ->close(); return $this; } + /** + * @param $path + * + * @throws FileException + */ + public function createPath($path) + { + if (!is_dir($path) && mkdir($path, 0700, true) === false) { + throw new FileException(sprintf(__('No es posible crear el directorio (%s)'), $path)); + } + } + /** * @param string $path * @@ -84,13 +83,8 @@ final class FileCache implements FileStorageInterface */ public function delete($path) { - if (file_exists($path) && !is_writable($path)) { - throw new FileException(sprintf(__('No es posible abrir el archivo (%s)'), $path)); - } - - if (!unlink($path)) { - throw new FileException(sprintf(__('Error al eliminar el archivo (%s)'), $path)); - } + $file = new FileHandler($path); + $file->delete(); return $this; } @@ -101,11 +95,15 @@ final class FileCache implements FileStorageInterface * @param string $path * @param int $time * - * @return mixed + * @return bool + * @throws FileException */ - public function isExpired($path, $time = 86400) + public function isExpired($path, $time = 86400): bool { - return !file_exists($path) || time() > filemtime($path) + $time; + $file = new FileHandler($path); + $file->checkFileExists(); + + return time() > $file->getFileTime() + $time; } /** @@ -114,10 +112,14 @@ final class FileCache implements FileStorageInterface * @param string $path * @param int $date * - * @return mixed + * @return bool + * @throws FileException */ - public function isExpiredDate($path, $date) + public function isExpiredDate($path, $date): bool { - return !file_exists($path) || (int)$date > filemtime($path); + $file = new FileHandler($path); + $file->checkFileExists(); + + return (int)$date > $file->getFileTime(); } } \ No newline at end of file diff --git a/lib/SP/Storage/File/FileCachePacked.php b/lib/SP/Storage/File/FileCachePacked.php index 25c44666..de0236eb 100644 --- a/lib/SP/Storage/File/FileCachePacked.php +++ b/lib/SP/Storage/File/FileCachePacked.php @@ -47,23 +47,18 @@ final class FileCachePacked implements FileStorageInterface * * @return mixed * @throws \RuntimeException + * @throws FileException */ public function load($path) { - if (!file_exists($path)) { - throw new RuntimeException(sprintf(__('No es posible leer/escribir el archivo (%s)'), $path)); - } + $file = new FileHandler($path); - if (!($data = file_get_contents($path))) { - throw new RuntimeException(sprintf(__('Error al leer datos del archivo (%s)'), $path)); - } - - if (!($data = gzuncompress($data))) { - throw new RuntimeException(sprintf(__('Error al descomprimir datos del archivo (%s)'), $path)); + if (!($data = gzuncompress($file->checkIsReadable()->readToString()))) { + throw new FileException(sprintf(__('Error al descomprimir datos del archivo (%s)'), $path)); } if (($this->data = unserialize($data)) === false) { - throw new RuntimeException(__('Error al obtener los datos')); + throw new FileException(__('Error al obtener los datos')); } $this->loaded = true; @@ -76,6 +71,7 @@ final class FileCachePacked implements FileStorageInterface * @param mixed $data * * @return FileStorageInterface + * @throws FileException */ public function save($path, $data = null) { @@ -91,25 +87,33 @@ final class FileCachePacked implements FileStorageInterface /** * @param $path * @param $data + * + * @throws FileException */ protected function saveData($path, $data) { - $dir = dirname($path); - if (!is_dir($dir) && mkdir($dir, 0700, true) === false) { - throw new RuntimeException(sprintf(__('No es posible crear el directorio (%s)'), $dir)); - } - - if (file_exists($path) && !is_writable($path)) { - throw new RuntimeException(sprintf(__('No es posible leer/escribir el archivo (%s)'), $path)); - } + $this->createPath(dirname($path)); if (!($data = gzcompress(serialize($data)))) { - throw new RuntimeException(sprintf(__('Error al comprimir datos del archivo (%s)'), $path)); + throw new FileException(sprintf(__('Error al comprimir datos del archivo (%s)'), $path)); } - if (!file_put_contents($path, $data)) { - throw new RuntimeException(sprintf(__('Error al escribir datos en el archivo (%s)'), $path)); + $file = new FileHandler($path); + $file->checkIsWritable() + ->write(gzcompress(serialize($data))) + ->close(); + } + + /** + * @param $path + * + * @throws FileException + */ + public function createPath($path) + { + if (!is_dir($path) && mkdir($path, 0700, true) === false) { + throw new FileException(sprintf(__('No es posible crear el directorio (%s)'), $path)); } } @@ -117,16 +121,12 @@ final class FileCachePacked implements FileStorageInterface * @param string $path * * @return FileStorageInterface + * @throws FileException */ public function delete($path) { - if (file_exists($path) && !is_writable($path)) { - throw new RuntimeException(sprintf(__('No es posible leer/escribir el archivo (%s)'), $path)); - } - - if (!unlink($path)) { - throw new RuntimeException(sprintf(__('Error al eliminar el archivo (%s)'), $path)); - } + $file = new FileHandler($path); + $file->delete(); return $this; } @@ -168,10 +168,31 @@ final class FileCachePacked implements FileStorageInterface * @param string $path * @param int $time * - * @return mixed + * @return bool + * @throws FileException */ - public function isExpired($path, $time = 86400) + public function isExpired($path, $time = 86400): bool { - // TODO: Implement isExpired() method. + $file = new FileHandler($path); + $file->checkFileExists(); + + return time() > $file->getFileTime() + $time; + } + + /** + * Returns if the file is expired adding time to modification date + * + * @param string $path + * @param int $date + * + * @return bool + * @throws FileException + */ + public function isExpiredDate($path, $date): bool + { + $file = new FileHandler($path); + $file->checkFileExists(); + + return (int)$date > $file->getFileTime(); } } \ No newline at end of file diff --git a/lib/SP/Storage/File/FileHandler.php b/lib/SP/Storage/File/FileHandler.php index 045822da..444ee608 100644 --- a/lib/SP/Storage/File/FileHandler.php +++ b/lib/SP/Storage/File/FileHandler.php @@ -265,4 +265,15 @@ final class FileHandler return $this; } + + /** + * @return int + * @throws FileException + */ + public function getFileTime(): int + { + $this->checkIsReadable(); + + return filemtime($this->file) ?: 0; + } } \ No newline at end of file diff --git a/lib/SP/Storage/File/FileStorageInterface.php b/lib/SP/Storage/File/FileStorageInterface.php index 447493ab..d6270e6a 100644 --- a/lib/SP/Storage/File/FileStorageInterface.php +++ b/lib/SP/Storage/File/FileStorageInterface.php @@ -61,7 +61,18 @@ interface FileStorageInterface * @param string $path * @param int $time * - * @return mixed + * @return bool */ - public function isExpired($path, $time = 86400); + public function isExpired($path, $time = 86400): bool; + + /** + * Returns if the file is expired adding time to modification date + * + * @param string $path + * @param int $date + * + * @return bool + * @throws FileException + */ + public function isExpiredDate($path, $date): bool; } \ No newline at end of file diff --git a/lib/SP/Storage/File/XmlFileStorageInterface.php b/lib/SP/Storage/File/XmlFileStorageInterface.php index 74bc00ac..b1f0e4ea 100644 --- a/lib/SP/Storage/File/XmlFileStorageInterface.php +++ b/lib/SP/Storage/File/XmlFileStorageInterface.php @@ -61,4 +61,9 @@ interface XmlFileStorageInterface * @throws FileException */ public function getPathValue($path); + + /** + * @return FileHandler + */ + public function getFileHandler(): FileHandler; } \ No newline at end of file diff --git a/lib/SP/Storage/File/XmlHandler.php b/lib/SP/Storage/File/XmlHandler.php index bcc1d90c..45b9c8c4 100644 --- a/lib/SP/Storage/File/XmlHandler.php +++ b/lib/SP/Storage/File/XmlHandler.php @@ -312,4 +312,12 @@ final class XmlHandler implements XmlFileStorageInterface return $query->item(0)->nodeValue; } + + /** + * @return FileHandler + */ + public function getFileHandler(): FileHandler + { + return $this->fileHandler; + } } \ No newline at end of file diff --git a/public/js/app-actions.js b/public/js/app-actions.js index 0214e884..b5fd3338 100644 --- a/public/js/app-actions.js +++ b/public/js/app-actions.js @@ -1589,6 +1589,44 @@ sysPass.Actions = function (Common) { } }; + const accountManager = { + restore: function ($obj) { + log.info("accountManager:restore"); + + tabs.state.update($obj); + + const itemId = $obj.data("item-id"); + + const opts = Common.appRequests().getRequestOpts(); + opts.url = ajaxUrl.entrypoint; + opts.method = "get"; + opts.data = { + r: $obj.data("action-route") + "/" + itemId, + sk: Common.sk.get(), + isAjax: 1 + }; + + Common.appRequests().getActionCall(opts, function (json) { + Common.msg.out(json); + + if (json.status === 0) { + const actionNext = $obj.data("action-next"); + + if (actionNext) { + getContent({ + r: actionNext + "/" + itemId + }); + } else { + getContent({ + r: tabs.state.tab.route, + tabIndex: tabs.state.tab.index + }); + } + } + }); + }, + }; + const task = function (taskId) { const $taskStatus = $("#taskStatus"); @@ -1610,6 +1648,7 @@ sysPass.Actions = function (Common) { doAction: doAction, appMgmt: appMgmt, account: account, + accountManager: accountManager, file: file, checks: checks, config: config, diff --git a/public/js/app-actions.min.js b/public/js/app-actions.min.js index aad4cad3..98c57745 100644 --- a/public/js/app-actions.min.js +++ b/public/js/app-actions.min.js @@ -1,19 +1,19 @@ -var $jscomp={scope:{},findInternal:function(b,e,l){b instanceof String&&(b=String(b));for(var f=b.length,h=0;h'+c+""),g=d.find("img");if(0===g.length)return m(c);g.hide();$.magnificPopup.open({items:{src:d,type:"inline"},callbacks:{open:function(){var a= -this;g.on("click",function(){a.close()});setTimeout(function(){var a=b.resizeImage(g);d.css({backgroundColor:"#fff",width:a.width,height:"auto"});g.show("slow")},500)}}})},p={view:function(a){e.info("account:show");h(b.appRequests().getRouteForQuery(a.data("action-route"),a.data("item-id")),"account")},viewHistory:function(a){e.info("account:showHistory");h(b.appRequests().getRouteForQuery(a.data("action-route"),a.val()),"account")},edit:function(a){e.info("account:edit");h(b.appRequests().getRouteForQuery(a.data("action-route"), +sysPass.Actions=function(b){var e=b.log,l=0,f={entrypoint:"/index.php"};Object.freeze(f);var g=function(a,c){e.info("getContent");a.isAjax=1;var d=b.appRequests().getRequestOpts();d.url=f.entrypoint;d.method="get";d.type="html";d.addHistory=!0;d.data=a;b.appRequests().getActionCall(d,function(a){var d=$("#content");d.empty().html(a);a=b.triggers().views;a.common(d);if(void 0!==c&&"function"===typeof a[c])a[c]();d=$(".mdl-layout__content");0'+c+""),h=d.find("img");if(0===h.length)return m(c);h.hide();$.magnificPopup.open({items:{src:d,type:"inline"},callbacks:{open:function(){var a= +this;h.on("click",function(){a.close()});setTimeout(function(){var a=b.resizeImage(h);d.css({backgroundColor:"#fff",width:a.width,height:"auto"});h.show("slow")},500)}}})},p={view:function(a){e.info("account:show");g(b.appRequests().getRouteForQuery(a.data("action-route"),a.data("item-id")),"account")},viewHistory:function(a){e.info("account:showHistory");g(b.appRequests().getRouteForQuery(a.data("action-route"),a.val()),"account")},edit:function(a){e.info("account:edit");g(b.appRequests().getRouteForQuery(a.data("action-route"), a.data("item-id")),"account")},"delete":function(a){e.info("account:delete");var c='

'+b.config().LANG[3]+"

";mdlDialog().show({text:c,negative:{title:b.config().LANG[44],onClick:function(a){a.preventDefault();b.msg.error(b.config().LANG[44])}},positive:{title:b.config().LANG[43],onClick:function(d){d=b.appRequests().getRequestOpts();d.url=f.entrypoint;d.data={r:"account/saveDelete/"+a.data("item-id"),sk:b.sk.get()};b.appRequests().getActionCall(d,function(d){b.msg.out(d); -p.search(a)})}}})},viewPass:function(a){e.info("account:viewPass");var c=a.data("parent-id")||0,d=0===c?a.data("item-id"):c,g=b.appRequests().getRequestOpts();g.url=f.entrypoint;g.method="get";g.data={r:a.data("action-route")+"/"+d+"/"+c,sk:b.sk.get(),isAjax:1};b.appRequests().getActionCall(g,function(a){0!==a.status?b.msg.out(a):(a=$(a.data.html),m(a),l=setTimeout(function(){$.magnificPopup.close()},3E4),a.on("mouseleave",function(){clearTimeout(l);l=setTimeout(function(){$.magnificPopup.close()}, +p.search(a)})}}})},viewPass:function(a){e.info("account:viewPass");var c=a.data("parent-id")||0,d=0===c?a.data("item-id"):c,h=b.appRequests().getRequestOpts();h.url=f.entrypoint;h.method="get";h.data={r:a.data("action-route")+"/"+d+"/"+c,sk:b.sk.get(),isAjax:1};b.appRequests().getActionCall(h,function(a){0!==a.status?b.msg.out(a):(a=$(a.data.html),m(a),l=setTimeout(function(){$.magnificPopup.close()},3E4),a.on("mouseleave",function(){clearTimeout(l);l=setTimeout(function(){$.magnificPopup.close()}, 3E4)}).on("mouseenter",function(){0!==l&&clearTimeout(l)}))})},viewPassHistory:function(a){e.info("account:viewPassHistory");p.viewPass(a)},copyPass:function(a){e.info("account:copyPass");var c=a.data("parent-id"),c=0===c?a.data("item-id"):c,d=b.appRequests().getRequestOpts();d.url=f.entrypoint;d.method="get";d.async=!1;d.data={r:a.data("action-route")+"/"+c,sk:b.sk.get(),isAjax:1};return b.appRequests().getActionCall(d)},copyPassHistory:function(a){e.info("account:copyPassHistory");p.copyPassHistory(a)}, -copy:function(a){e.info("account:copy");h(b.appRequests().getRouteForQuery(a.data("action-route"),a.data("item-id")),"account")},saveFavorite:function(a,c){e.info("account:saveFavorite");var d="on"===a.data("status"),g=d?a.data("action-route-off"):a.data("action-route-on"),q=b.appRequests().getRequestOpts();q.url=f.entrypoint;q.data={r:g+"/"+a.data("item-id"),sk:b.sk.get(),isAjax:1};b.appRequests().getActionCall(q,function(g){b.msg.out(g);0===g.status&&(a.data("status",d?"off":"on"),"function"=== -typeof c&&c())})},request:function(a){e.info("account:request");var c=b.appRequests().getRequestOpts();c.url=f.entrypoint+"?r="+a.data("action-route")+"/"+a.data("item-id");c.data=a.serialize();b.appRequests().getActionCall(c,function(a){b.msg.out(a);0===a.status&&void 0!==a.data.nextAction&&h({r:a.data.nextAction.nextAction},"account")})},menu:function(a){a.hide();a.parent().children(".actions-optional").show(250)},sort:function(a){e.info("account:sort");var b=$("#frmSearch");b.find('input[name="skey"]').val(a.data("key")); -b.find('input[name="sorder"]').val(a.data("dir"));b.find('input[name="start"]').val(a.data("start"));p.search()},editPass:function(a){e.info("account:editpass");var c=a.data("parent-id"),c=void 0===c?a.data("item-id"):c;h(b.appRequests().getRouteForQuery(a.data("action-route"),c),"account")},saveEditRestore:function(a){e.info("account:restore");var c=b.appRequests().getRequestOpts();c.url=f.entrypoint+"?r="+a.data("action-route")+"/"+a.data("history-id")+"/"+a.data("item-id");c.data=a.serialize(); -b.appRequests().getActionCall(c,function(a){b.msg.out(a);void 0!==a.data.itemId&&void 0!==a.data.nextAction&&h(b.appRequests().getRouteForQuery(a.data.nextAction,a.data.itemId),"account")})},listFiles:function(a){e.info("account:getfiles");var c=b.appRequests().getRequestOpts();c.method="get";c.type="html";c.url=f.entrypoint;c.data={r:a.data("action-route")+"/"+a.data("item-id"),del:a.data("delete"),sk:b.sk.get()};b.appRequests().getActionCall(c,function(b){a.html(b)})},search:function(a){e.info("account:search"); +copy:function(a){e.info("account:copy");g(b.appRequests().getRouteForQuery(a.data("action-route"),a.data("item-id")),"account")},saveFavorite:function(a,c){e.info("account:saveFavorite");var d="on"===a.data("status"),h=d?a.data("action-route-off"):a.data("action-route-on"),q=b.appRequests().getRequestOpts();q.url=f.entrypoint;q.data={r:h+"/"+a.data("item-id"),sk:b.sk.get(),isAjax:1};b.appRequests().getActionCall(q,function(h){b.msg.out(h);0===h.status&&(a.data("status",d?"off":"on"),"function"=== +typeof c&&c())})},request:function(a){e.info("account:request");var c=b.appRequests().getRequestOpts();c.url=f.entrypoint+"?r="+a.data("action-route")+"/"+a.data("item-id");c.data=a.serialize();b.appRequests().getActionCall(c,function(a){b.msg.out(a);0===a.status&&void 0!==a.data.nextAction&&g({r:a.data.nextAction.nextAction},"account")})},menu:function(a){a.hide();a.parent().children(".actions-optional").show(250)},sort:function(a){e.info("account:sort");var b=$("#frmSearch");b.find('input[name="skey"]').val(a.data("key")); +b.find('input[name="sorder"]').val(a.data("dir"));b.find('input[name="start"]').val(a.data("start"));p.search()},editPass:function(a){e.info("account:editpass");var c=a.data("parent-id"),c=void 0===c?a.data("item-id"):c;g(b.appRequests().getRouteForQuery(a.data("action-route"),c),"account")},saveEditRestore:function(a){e.info("account:restore");var c=b.appRequests().getRequestOpts();c.url=f.entrypoint+"?r="+a.data("action-route")+"/"+a.data("history-id")+"/"+a.data("item-id");c.data=a.serialize(); +b.appRequests().getActionCall(c,function(a){b.msg.out(a);void 0!==a.data.itemId&&void 0!==a.data.nextAction&&g(b.appRequests().getRouteForQuery(a.data.nextAction,a.data.itemId),"account")})},listFiles:function(a){e.info("account:getfiles");var c=b.appRequests().getRequestOpts();c.method="get";c.type="html";c.url=f.entrypoint;c.data={r:a.data("action-route")+"/"+a.data("item-id"),del:a.data("delete"),sk:b.sk.get()};b.appRequests().getActionCall(c,function(b){a.html(b)})},search:function(a){e.info("account:search"); var c=$("#frmSearch");c.find("input[name='sk']").val(b.sk.get());c.find("input[name='skey']").val();c.find("input[name='sorder']").val();void 0!==a&&c.find("input[name='start']").val(0);a=b.appRequests().getRequestOpts();a.url=f.entrypoint+"?r="+c.data("action-route");a.method="get";a.data=c.serialize();b.appRequests().getActionCall(a,function(a){10===a.status&&b.msg.out(a);b.sk.set(a.data.sk);$("#res-content").empty().html(a.data.html)})},save:function(a){e.info("account:save");var c=b.appRequests().getRequestOpts(); -c.url=f.entrypoint+"?r="+a.data("action-route")+"/"+a.data("item-id");c.data=a.serialize();$("select.select-box-tags[data-hash][data-updated=true]").each(function(a,b){c.data+="&"+b.getAttribute("id")+"_update=1"});b.appRequests().getActionCall(c,function(a){b.msg.out(a);void 0!==a.data.itemId&&void 0!==a.data.nextAction&&h(b.appRequests().getRouteForQuery(a.data.nextAction,a.data.itemId),"account")})}},r={get:function(a){e.info("items:get");var c=a[0].selectize;c.clearOptions();c.load(function(d){var g= -b.appRequests().getRequestOpts();g.url=f.entrypoint;g.method="get";g.data={r:a.data("action-route")+"/"+a.data("item-id"),sk:a.data("sk")};b.appRequests().getActionCall(g,function(g){d(g.data);c.setValue(a.data("selected-id"),!0);b.appTriggers().updateFormHash()})})},update:function(a){e.info("items:update");var c=$("#"+a.data("item-dst"))[0].selectize;c.clearOptions();c.load(function(c){var d=b.appRequests().getRequestOpts();d.url=f.entrypoint;d.method="get";d.data={r:a.data("item-route"),sk:b.sk.get()}; +c.url=f.entrypoint+"?r="+a.data("action-route")+"/"+a.data("item-id");c.data=a.serialize();$("select.select-box-tags[data-hash][data-updated=true]").each(function(a,b){c.data+="&"+b.getAttribute("id")+"_update=1"});b.appRequests().getActionCall(c,function(a){b.msg.out(a);void 0!==a.data.itemId&&void 0!==a.data.nextAction&&g(b.appRequests().getRouteForQuery(a.data.nextAction,a.data.itemId),"account")})}},r={get:function(a){e.info("items:get");var c=a[0].selectize;c.clearOptions();c.load(function(d){var h= +b.appRequests().getRequestOpts();h.url=f.entrypoint;h.method="get";h.data={r:a.data("action-route")+"/"+a.data("item-id"),sk:a.data("sk")};b.appRequests().getActionCall(h,function(h){d(h.data);c.setValue(a.data("selected-id"),!0);b.appTriggers().updateFormHash()})})},update:function(a){e.info("items:update");var c=$("#"+a.data("item-dst"))[0].selectize;c.clearOptions();c.load(function(c){var d=b.appRequests().getRequestOpts();d.url=f.entrypoint;d.method="get";d.data={r:a.data("item-route"),sk:b.sk.get()}; b.appRequests().getActionCall(d,function(a){c(a)})})}},u={logout:function(){b.redirect("index.php?r=login/logout")},login:function(a){e.info("main:login");var c=b.appRequests().getRequestOpts();c.url=f.entrypoint+"?r="+a.data("route");c.method="get";c.data=a.serialize();b.appRequests().getActionCall(c,function(c){var d=$(".extra-hidden");switch(c.status){case 0:b.redirect(c.data.url);break;case 2:b.msg.out(c);a.find("input[type='text'],input[type='password']").val("");a.find("input:first").focus(); 0";mdlDialog().show({text:c,negative:{title:b.config().LANG[44],onClick:function(a){a.preventDefault();b.msg.error(b.config().LANG[44])}},positive:{title:b.config().LANG[43],onClick:function(c){var d;(c= @@ -22,27 +22,28 @@ a.method="get";a.timeout=1E4;a.useLoading=!1;a.data={isAjax:1};var c=$("#updates b.config().LANG[68]+""):c.html('
warning
'+b.config().LANG[69]+"");void 0!==componentHandler&&componentHandler.upgradeDom()},function(){c.html('
warning
'+b.config().LANG[69]+ "")})},getNotices:function(){e.info("main:getNotices");var a=b.appRequests().getRequestOpts();a.url=f.entrypoint+"?r=status/checkNotices";a.method="get";a.timeout=1E4;a.useLoading=!1;a.data={isAjax:1};var c=$("#notices");b.appRequests().getActionCall(a,function(a){0===a.status&&0
feedback
'+b.config().LANG[70]+"
"+a.data.map(function(a){return a.title}).join("
")+"
");void 0!==componentHandler&&componentHandler.upgradeDom()})}},k={state:{tab:{index:0,refresh:!0,route:""},itemId:0,update:function(a){var b=$("#content").find("[id^='tabs-'].is-active");0",g=a.data("selection"),e=[];if(g&&($(g).find(".is-selected").each(function(){e.push($(this).data("item-id"))}),0===e.length))return;mdlDialog().show({text:d,negative:{title:b.config().LANG[44],onClick:function(a){a.preventDefault();b.msg.error(b.config().LANG[44])}},positive:{title:b.config().LANG[43],onClick:function(a){a.preventDefault(); +d.find("[name='sk']").val(b.sk.get());"function"===typeof c?c(d):n.search(d)},"delete":function(a,c){var d='

'+b.config().LANG[12]+"

",h=a.data("selection"),e=[];if(h&&($(h).find(".is-selected").each(function(){e.push($(this).data("item-id"))}),0===e.length))return;mdlDialog().show({text:d,negative:{title:b.config().LANG[44],onClick:function(a){a.preventDefault();b.msg.error(b.config().LANG[44])}},positive:{title:b.config().LANG[43],onClick:function(a){a.preventDefault(); "function"===typeof c&&c(e)}}})}},t=function(a){var c=$("#taskStatus");c.empty().html(b.config().LANG[62]);var d=b.appRequests().getRequestOpts();d.method="get";d.url=f.entrypoint+"?r=task/runTask/"+a;return b.appRequests().getActionEvent(d,function(a){a=a.task+" - "+a.message+" - "+a.time+" - "+a.progress+"%";a+="
"+b.config().LANG[62];c.empty().html(a)})};return{doAction:function(a,c){var d={r:a.r+(void 0!==a.itemId?"/"+a.itemId:""),isAjax:1},e=b.appRequests().getRequestOpts();e.url=f.entrypoint; -e.method="get";e.type="html";e.addHistory=!0;e.data=d;b.appRequests().getActionCall(e,function(a){var d=$("#content");d.empty().html(a);a=b.triggers().views;a.common(d);if(void 0!==c&&"function"===typeof a[c])a[c]();d=$(".mdl-layout__content");0";mdlDialog().show({text:c,negative:{title:b.config().LANG[44],onClick:function(a){a.preventDefault();b.msg.error(b.config().LANG[44])}},positive:{title:b.config().LANG[43], -onClick:function(c){c=b.appRequests().getRequestOpts();c.url=f.entrypoint;c.method="get";c.data={r:a.data("action-route")+"/"+a.data("item-id"),sk:b.sk.get()};b.appRequests().getActionCall(c,function(a){b.msg.out(a);0===a.status&&p.listFiles($("#list-account-files"))})}}})}},checks:{wiki:function(a){e.info("checks:wiki");a=$(a.data("src"));a.find("[name='sk']").val(b.sk.get());var c=b.appRequests().getRequestOpts();c.url=f.entrypoint;c.data=a.serialize();b.appRequests().getActionCall(c,function(a){b.msg.out(a); -0===a.status&&$("#dokuWikiResCheck").html(a.data)})}},config:{save:function(a){e.info("config:save");k.save(a)},masterpass:function(a){var c='

'+b.config().LANG[59]+"

";mdlDialog().show({text:c,negative:{title:b.config().LANG[44],onClick:function(c){c.preventDefault();b.msg.error(b.config().LANG[44]);a.find(":input[type=password]").val("")}},positive:{title:b.config().LANG[43],onClick:function(c){var d;(c=a.find("input[name='taskId']").val())&&(d=t(c));var e= -b.appRequests().getRequestOpts();e.url=f.entrypoint;e.useFullLoading=!!c;e.data=a.serialize();b.appRequests().getActionCall(e,function(c){b.msg.out(c);a.find(":input[type=password]").val("");void 0!==d&&d.close()})}}})},backup:function(a){e.info("config:backup");k.state.update(a);var c=b.appRequests().getRequestOpts();c.url=f.entrypoint+"?r="+a.data("action-route");c.useFullLoading=!0;c.data=a.serialize()+"&sk="+b.sk.get();b.appRequests().getActionCall(c,function(a){b.msg.out(a);0===a.status&&h({r:k.state.tab.route, -tabIndex:k.state.tab.index})})},"export":function(a){e.info("config:export");k.save(a)},"import":function(a){e.info("config:import");var c=b.appRequests().getRequestOpts();c.url=f.entrypoint+"?r="+a.data("action-route");c.data=a.serialize()+"&sk="+b.sk.get();b.appRequests().getActionCall(c,function(a){b.msg.out(a)})},refreshMpass:function(a){e.info("config:import");var c=b.appRequests().getRequestOpts();c.url=f.entrypoint+"?r="+a.data("action-route");c.data={sk:a.data("sk"),isAjax:1};b.appRequests().getActionCall(c, -function(a){b.msg.out(a)})},mailCheck:function(a){e.info("config:mailCheck");var c=$(a.data("src")),d=b.appRequests().getRequestOpts();d.url=f.entrypoint+"?r="+a.data("action-route");d.data=c.serialize()+"&sk="+b.sk.get();b.appRequests().getActionCall(d,function(a){b.msg.out(a)})}},main:u,user:{showSettings:function(a){e.info("user:showSettings");h({r:a.data("action-route")},"userSettings")},saveSettings:function(a){e.info("user:saveSettings");k.save(a)},password:function(a){e.info("user:password"); -var c=b.appRequests().getRequestOpts();c.type="html";c.method="get";c.url=f.entrypoint;c.data={r:a.data("action-route")+"/"+a.data("item-id"),sk:b.sk.get(),isAjax:1};b.appRequests().getActionCall(c,function(a){0===a.length?u.logout():m(a)})},passreset:function(a){e.info("user:passreset");var c=b.appRequests().getRequestOpts();c.url=f.entrypoint+"/?r="+a.data("action-route");c.data=a.serialize();b.appRequests().getActionCall(c,function(a){b.msg.out(a);0===a.status&&setTimeout(function(){b.redirect("index.php")}, -2E3)})}},link:{save:function(a){e.info("link:save");var c=function(c){var d=a.data("item-id"),e=b.appRequests().getRequestOpts();d?e.url=f.entrypoint+"?r="+a.data("action-route")+"/"+d+"/"+c:(e.url=f.entrypoint+"?r="+a.data("action-route"),e.data=a.serialize());b.appRequests().getActionCall(e,function(c){b.msg.out(c);0===c.status&&h({r:a.data("action-next")+"/"+d})})},d='

'+b.config().LANG[48]+"

";mdlDialog().show({text:d,negative:{title:b.config().LANG[44], -onClick:function(a){a.preventDefault();c(0)}},positive:{title:b.config().LANG[43],onClick:function(a){a.preventDefault();c(1)}}})},refresh:function(a){e.info("link:refresh");k.state.update(a);var c=a.data("item-id"),d=b.appRequests().getRequestOpts();d.url=f.entrypoint;d.method="get";d.data={r:a.data("action-route")+"/"+c,sk:b.sk.get(),isAjax:1};b.appRequests().getActionCall(d,function(d){b.msg.out(d);0===d.status&&((d=a.data("action-next"))?h({r:d+"/"+c}):h({r:k.state.tab.route,tabIndex:k.state.tab.index}))})}}, -eventlog:{search:function(a){e.info("eventlog:search");n.search(a)},nav:function(a){e.info("eventlog:nav");n.nav(a)},clear:function(a){var c='

'+b.config().LANG[20]+"

";mdlDialog().show({text:c,negative:{title:b.config().LANG[44],onClick:function(a){a.preventDefault();b.msg.error(b.config().LANG[44])}},positive:{title:b.config().LANG[43],onClick:function(c){c.preventDefault();c=b.appRequests().getRequestOpts();c.url=f.entrypoint+"?r="+a.data("action-route"); -c.method="get";c.data={sk:b.sk.get(),isAjax:1};b.appRequests().getActionCall(c,function(c){b.msg.out(c);0===c.status&&h({r:a.data("nextaction")});b.sk.set(c.csrf)})}}})}},ajaxUrl:f,plugin:{toggle:function(a){e.info("plugin:enable");k.save(a,function(){setTimeout(function(){b.redirect("index.php")},2E3)})},reset:function(a){e.info("plugin:reset");var c='

'+b.config().LANG[58]+"

";mdlDialog().show({text:c,negative:{title:b.config().LANG[44],onClick:function(a){a.preventDefault(); -b.msg.error(b.config().LANG[44])}},positive:{title:b.config().LANG[43],onClick:function(b){b.preventDefault();k.save(a)}}})}},notification:{check:function(a){e.info("notification:check");var c=b.appRequests().getRequestOpts();c.url=f.entrypoint;c.method="get";c.data={r:a.data("action-route")+"/"+a.data("item-id"),sk:b.sk.get(),isAjax:1};b.appRequests().getActionCall(c,function(c){b.msg.out(c);0===c.status&&h({r:a.data("nextaction")});b.sk.set(c.csrf)})},search:function(a){e.info("notification:search"); -n.search(a)},show:function(a){e.info("notification:show");v.show(a)},save:function(a){e.info("notification:save");var c=b.appRequests().getRequestOpts();c.url=f.entrypoint+"?r="+a.data("route");c.data=a.serialize();b.appRequests().getActionCall(c,function(c){b.msg.out(c);0===c.status&&(h({r:a.data("nextaction")}),$.magnificPopup.close())})},"delete":function(a){e.info("notification:delete");n["delete"](a,function(c){var d=a.data("item-id"),e=b.appRequests().getRequestOpts();e.url=f.entrypoint;e.method= -"get";e.data={r:a.data("action-route")+(d?"/"+d:""),items:c,sk:b.sk.get(),isAjax:1};b.appRequests().getActionCall(e,function(c){b.msg.out(c);h({r:a.data("nextaction")})})})},getActive:function(){e.info("notification:getActive");var a=b.appRequests().getRequestOpts();a.url=f.entrypoint;a.method="get";a.data={r:"items/notifications",sk:b.sk.get(),isAjax:1};b.appRequests().getActionCall(a,function(a){return a})},nav:function(a){e.info("eventlog:nav");n.nav(a)}},wiki:{show:function(a){e.info("wiki:show"); -var c=b.appRequests().getRequestOpts();c.url=f.entrypoint;c.method="get";c.data={pageName:a.data("pagename"),actionId:a.data("action-id"),sk:b.sk.get(),isAjax:1};b.appRequests().getActionCall(c,function(a){0!==a.status?b.msg.out(a):m(a.data.html)})}},items:r,ldap:{check:function(a){e.info("ldap:check");var c=$(a.data("src")),d=b.appRequests().getRequestOpts();d.url=f.entrypoint+"?r="+a.data("action-route");d.data=c.serialize()+"&sk="+b.sk.get();b.appRequests().getActionCall(d,function(a){b.msg.out(a); -0===a.status&&void 0!==a.data.template&&void 0!==a.data.items&&m(a.data.template,{open:function(){var c=$("#ldap-results").find(".list-wrap").empty();a.data.items.forEach(function(a){c.append(b.appTheme().html.getList(a.items,a.icon))})}})})},"import":function(a){e.info("ldap:import");var c='

'+b.config().LANG[57]+"

";mdlDialog().show({text:c,negative:{title:b.config().LANG[44],onClick:function(a){a.preventDefault();b.msg.error(b.config().LANG[44])}},positive:{title:b.config().LANG[43], -onClick:function(c){c=$(a.data("src"));var d=b.appRequests().getRequestOpts();d.url=f.entrypoint+"?r="+a.data("action-route");d.data=c.serialize()+"&sk="+b.sk.get();b.appRequests().getActionCall(d,function(a){b.msg.out(a)})}}})}}}}; +e.method="get";e.type="html";e.addHistory=!0;e.data=d;b.appRequests().getActionCall(e,function(a){var d=$("#content");d.empty().html(a);a=b.triggers().views;a.common(d);if(void 0!==c&&"function"===typeof a[c])a[c]();d=$(".mdl-layout__content");0";mdlDialog().show({text:c,negative:{title:b.config().LANG[44],onClick:function(a){a.preventDefault();b.msg.error(b.config().LANG[44])}},positive:{title:b.config().LANG[43],onClick:function(c){c=b.appRequests().getRequestOpts();c.url=f.entrypoint;c.method="get"; +c.data={r:a.data("action-route")+"/"+a.data("item-id"),sk:b.sk.get()};b.appRequests().getActionCall(c,function(a){b.msg.out(a);0===a.status&&p.listFiles($("#list-account-files"))})}}})}},checks:{wiki:function(a){e.info("checks:wiki");a=$(a.data("src"));a.find("[name='sk']").val(b.sk.get());var c=b.appRequests().getRequestOpts();c.url=f.entrypoint;c.data=a.serialize();b.appRequests().getActionCall(c,function(a){b.msg.out(a);0===a.status&&$("#dokuWikiResCheck").html(a.data)})}},config:{save:function(a){e.info("config:save"); +k.save(a)},masterpass:function(a){var c='

'+b.config().LANG[59]+"

";mdlDialog().show({text:c,negative:{title:b.config().LANG[44],onClick:function(c){c.preventDefault();b.msg.error(b.config().LANG[44]);a.find(":input[type=password]").val("")}},positive:{title:b.config().LANG[43],onClick:function(c){var d;(c=a.find("input[name='taskId']").val())&&(d=t(c));var e=b.appRequests().getRequestOpts();e.url=f.entrypoint;e.useFullLoading=!!c;e.data=a.serialize();b.appRequests().getActionCall(e, +function(c){b.msg.out(c);a.find(":input[type=password]").val("");void 0!==d&&d.close()})}}})},backup:function(a){e.info("config:backup");k.state.update(a);var c=b.appRequests().getRequestOpts();c.url=f.entrypoint+"?r="+a.data("action-route");c.useFullLoading=!0;c.data=a.serialize()+"&sk="+b.sk.get();b.appRequests().getActionCall(c,function(a){b.msg.out(a);0===a.status&&g({r:k.state.tab.route,tabIndex:k.state.tab.index})})},"export":function(a){e.info("config:export");k.save(a)},"import":function(a){e.info("config:import"); +var c=b.appRequests().getRequestOpts();c.url=f.entrypoint+"?r="+a.data("action-route");c.data=a.serialize()+"&sk="+b.sk.get();b.appRequests().getActionCall(c,function(a){b.msg.out(a)})},refreshMpass:function(a){e.info("config:import");var c=b.appRequests().getRequestOpts();c.url=f.entrypoint+"?r="+a.data("action-route");c.data={sk:a.data("sk"),isAjax:1};b.appRequests().getActionCall(c,function(a){b.msg.out(a)})},mailCheck:function(a){e.info("config:mailCheck");var c=$(a.data("src")),d=b.appRequests().getRequestOpts(); +d.url=f.entrypoint+"?r="+a.data("action-route");d.data=c.serialize()+"&sk="+b.sk.get();b.appRequests().getActionCall(d,function(a){b.msg.out(a)})}},main:u,user:{showSettings:function(a){e.info("user:showSettings");g({r:a.data("action-route")},"userSettings")},saveSettings:function(a){e.info("user:saveSettings");k.save(a)},password:function(a){e.info("user:password");var c=b.appRequests().getRequestOpts();c.type="html";c.method="get";c.url=f.entrypoint;c.data={r:a.data("action-route")+"/"+a.data("item-id"), +sk:b.sk.get(),isAjax:1};b.appRequests().getActionCall(c,function(a){0===a.length?u.logout():m(a)})},passreset:function(a){e.info("user:passreset");var c=b.appRequests().getRequestOpts();c.url=f.entrypoint+"/?r="+a.data("action-route");c.data=a.serialize();b.appRequests().getActionCall(c,function(a){b.msg.out(a);0===a.status&&setTimeout(function(){b.redirect("index.php")},2E3)})}},link:{save:function(a){e.info("link:save");var c=function(c){var d=a.data("item-id"),e=b.appRequests().getRequestOpts(); +d?e.url=f.entrypoint+"?r="+a.data("action-route")+"/"+d+"/"+c:(e.url=f.entrypoint+"?r="+a.data("action-route"),e.data=a.serialize());b.appRequests().getActionCall(e,function(c){b.msg.out(c);0===c.status&&g({r:a.data("action-next")+"/"+d})})},d='

'+b.config().LANG[48]+"

";mdlDialog().show({text:d,negative:{title:b.config().LANG[44],onClick:function(a){a.preventDefault();c(0)}},positive:{title:b.config().LANG[43],onClick:function(a){a.preventDefault();c(1)}}})}, +refresh:function(a){e.info("link:refresh");k.state.update(a);var c=a.data("item-id"),d=b.appRequests().getRequestOpts();d.url=f.entrypoint;d.method="get";d.data={r:a.data("action-route")+"/"+c,sk:b.sk.get(),isAjax:1};b.appRequests().getActionCall(d,function(d){b.msg.out(d);0===d.status&&((d=a.data("action-next"))?g({r:d+"/"+c}):g({r:k.state.tab.route,tabIndex:k.state.tab.index}))})}},eventlog:{search:function(a){e.info("eventlog:search");n.search(a)},nav:function(a){e.info("eventlog:nav");n.nav(a)}, +clear:function(a){var c='

'+b.config().LANG[20]+"

";mdlDialog().show({text:c,negative:{title:b.config().LANG[44],onClick:function(a){a.preventDefault();b.msg.error(b.config().LANG[44])}},positive:{title:b.config().LANG[43],onClick:function(c){c.preventDefault();c=b.appRequests().getRequestOpts();c.url=f.entrypoint+"?r="+a.data("action-route");c.method="get";c.data={sk:b.sk.get(),isAjax:1};b.appRequests().getActionCall(c,function(c){b.msg.out(c);0===c.status&& +g({r:a.data("nextaction")});b.sk.set(c.csrf)})}}})}},ajaxUrl:f,plugin:{toggle:function(a){e.info("plugin:enable");k.save(a,function(){setTimeout(function(){b.redirect("index.php")},2E3)})},reset:function(a){e.info("plugin:reset");var c='

'+b.config().LANG[58]+"

";mdlDialog().show({text:c,negative:{title:b.config().LANG[44],onClick:function(a){a.preventDefault();b.msg.error(b.config().LANG[44])}},positive:{title:b.config().LANG[43],onClick:function(b){b.preventDefault(); +k.save(a)}}})}},notification:{check:function(a){e.info("notification:check");var c=b.appRequests().getRequestOpts();c.url=f.entrypoint;c.method="get";c.data={r:a.data("action-route")+"/"+a.data("item-id"),sk:b.sk.get(),isAjax:1};b.appRequests().getActionCall(c,function(c){b.msg.out(c);0===c.status&&g({r:a.data("nextaction")});b.sk.set(c.csrf)})},search:function(a){e.info("notification:search");n.search(a)},show:function(a){e.info("notification:show");v.show(a)},save:function(a){e.info("notification:save"); +var c=b.appRequests().getRequestOpts();c.url=f.entrypoint+"?r="+a.data("route");c.data=a.serialize();b.appRequests().getActionCall(c,function(c){b.msg.out(c);0===c.status&&(g({r:a.data("nextaction")}),$.magnificPopup.close())})},"delete":function(a){e.info("notification:delete");n["delete"](a,function(c){var d=a.data("item-id"),e=b.appRequests().getRequestOpts();e.url=f.entrypoint;e.method="get";e.data={r:a.data("action-route")+(d?"/"+d:""),items:c,sk:b.sk.get(),isAjax:1};b.appRequests().getActionCall(e, +function(c){b.msg.out(c);g({r:a.data("nextaction")})})})},getActive:function(){e.info("notification:getActive");var a=b.appRequests().getRequestOpts();a.url=f.entrypoint;a.method="get";a.data={r:"items/notifications",sk:b.sk.get(),isAjax:1};b.appRequests().getActionCall(a,function(a){return a})},nav:function(a){e.info("eventlog:nav");n.nav(a)}},wiki:{show:function(a){e.info("wiki:show");var c=b.appRequests().getRequestOpts();c.url=f.entrypoint;c.method="get";c.data={pageName:a.data("pagename"),actionId:a.data("action-id"), +sk:b.sk.get(),isAjax:1};b.appRequests().getActionCall(c,function(a){0!==a.status?b.msg.out(a):m(a.data.html)})}},items:r,ldap:{check:function(a){e.info("ldap:check");var c=$(a.data("src")),d=b.appRequests().getRequestOpts();d.url=f.entrypoint+"?r="+a.data("action-route");d.data=c.serialize()+"&sk="+b.sk.get();b.appRequests().getActionCall(d,function(a){b.msg.out(a);0===a.status&&void 0!==a.data.template&&void 0!==a.data.items&&m(a.data.template,{open:function(){var c=$("#ldap-results").find(".list-wrap").empty(); +a.data.items.forEach(function(a){c.append(b.appTheme().html.getList(a.items,a.icon))})}})})},"import":function(a){e.info("ldap:import");var c='

'+b.config().LANG[57]+"

";mdlDialog().show({text:c,negative:{title:b.config().LANG[44],onClick:function(a){a.preventDefault();b.msg.error(b.config().LANG[44])}},positive:{title:b.config().LANG[43],onClick:function(c){c=$(a.data("src"));var d=b.appRequests().getRequestOpts();d.url=f.entrypoint+"?r="+a.data("action-route"); +d.data=c.serialize()+"&sk="+b.sk.get();b.appRequests().getActionCall(d,function(a){b.msg.out(a)})}}})}}}}; diff --git a/test/SP/Services/Account/AccountServiceTest.php b/test/SP/Services/Account/AccountServiceTest.php index e21a14ff..b882a5ad 100644 --- a/test/SP/Services/Account/AccountServiceTest.php +++ b/test/SP/Services/Account/AccountServiceTest.php @@ -30,6 +30,7 @@ use SP\DataModel\AccountData; use SP\DataModel\AccountVData; use SP\DataModel\ItemSearchData; use SP\Repositories\NoSuchItemException; +use SP\Services\Account\AccountHistoryService; use SP\Services\Account\AccountPasswordRequest; use SP\Services\Account\AccountRequest; use SP\Services\Account\AccountSearchFilter; @@ -48,6 +49,10 @@ use function SP\Test\setupContext; class AccountServiceTest extends DatabaseTestCase { const SECURE_KEY_PASSWORD = '12345678900'; + /** + * @var AccountHistoryService + */ + protected static $accountHistoryService; /** * @var AccountService */ @@ -69,6 +74,7 @@ class AccountServiceTest extends DatabaseTestCase // Inicializar el servicio self::$service = $dic->get(AccountService::class); + self::$accountHistoryService = $dic->get(AccountHistoryService::class); } /** @@ -79,7 +85,7 @@ class AccountServiceTest extends DatabaseTestCase */ public function testCreate() { - $accountRequest = new \SP\Services\Account\AccountRequest(); + $accountRequest = new AccountRequest(); $accountRequest->name = 'Prueba 2'; $accountRequest->login = 'admin'; $accountRequest->url = 'http://syspass.org'; @@ -152,9 +158,7 @@ class AccountServiceTest extends DatabaseTestCase } /** - * @throws \SP\Core\Exceptions\ConstraintException - * @throws \SP\Core\Exceptions\QueryException - * @throws \SP\Repositories\NoSuchItemException + * @throws ServiceException */ public function testDelete() { @@ -325,7 +329,7 @@ class AccountServiceTest extends DatabaseTestCase */ public function testUpdate() { - $accountRequest = new \SP\Services\Account\AccountRequest(); + $accountRequest = new AccountRequest(); $accountRequest->id = 1; $accountRequest->name = 'Prueba 1'; $accountRequest->login = 'admin'; @@ -394,7 +398,7 @@ class AccountServiceTest extends DatabaseTestCase $this->assertEquals(3, $groups[1]->getId()); $this->assertEquals(0, (int)$groups[1]->isEdit); - $accountRequest = new \SP\Services\Account\AccountRequest(); + $accountRequest = new AccountRequest(); $accountRequest->id = 3; self::$service->update($accountRequest); @@ -621,4 +625,35 @@ class AccountServiceTest extends DatabaseTestCase $this->assertInstanceOf(AccountData::class, $data[1]); $this->assertEquals(2, $data[1]->getId()); } + + /** + * @throws \SP\Core\Exceptions\SPException + */ + public function testCreateFromHistory() + { + $data = self::$accountHistoryService->getById(7); + + $this->assertEquals(3, self::$service->createFromHistory($data)); + + $result = self::$service->getById(3); + $resultData = $result->getAccountVData(); + + $this->assertEquals($data->getName(), $resultData->getName()); + $this->assertEquals($data->getCategoryId(), $resultData->getCategoryId()); + $this->assertEquals($data->getClientId(), $resultData->getClientId()); + $this->assertEquals($data->getUrl(), $resultData->getUrl()); + $this->assertEquals($data->getLogin(), $resultData->getLogin()); + $this->assertEquals($data->getNotes(), $resultData->getNotes()); + $this->assertEquals($data->getPassDateChange(), $resultData->getPassDateChange()); + $this->assertEquals($data->getUserId(), $resultData->getUserId()); + $this->assertEquals($data->getUserGroupId(), $resultData->getUserGroupId()); + $this->assertEquals($data->getParentId(), $resultData->getParentId()); + $this->assertEquals($data->getIsPrivate(), $resultData->getIsPrivate()); + $this->assertEquals($data->getIsPrivateGroup(), $resultData->getIsPrivateGroup()); + + $resultData = self::$service->getPasswordForId(3); + + $this->assertEquals($data->getPass(), $resultData->getPass()); + $this->assertEquals($data->getKey(), $resultData->getKey()); + } } diff --git a/test/res/config/config.xml b/test/res/config/config.xml index 61d36a6f..771d6bb6 100644 --- a/test/res/config/config.xml +++ b/test/res/config/config.xml @@ -9,11 +9,11 @@ 1 1 - 4bd6ca38c4315865466fa38e063752800c7f2b84 + 739f43c2476a3a31e65275f8cdefdcf0b5245035 0 0 - 1533580110 - 0b0cc60f598647ce598d8f5ae697ecf83253080b + 1533668971 + 739f49ea7aec35e021daab89d60957273c24b5f7 @@ -32,7 +32,7 @@ 0 - efade17afbe1bb9f905dbe05f54da6d711289440 + 31177a1b27a6a9ba54112771e9d9655d0ac9f9a5 PDF JPG