From a0e495183473d65843190c1b8d65fffbe4e79f6f Mon Sep 17 00:00:00 2001 From: nuxsmin Date: Sat, 19 Nov 2016 12:54:29 +0100 Subject: [PATCH] * [DEV] New LDAP import users feature --- ajax/ajax_checkConnection.php | 89 +-- ajax/ajax_itemSave.php | 6 - ajax/ajax_itemSearch.php | 6 - ajax/ajax_itemShow.php | 6 - inc/SP/Auth/Ldap/LdapBase.class.php | 2 +- inc/SP/Controller/ChecksController.class.php | 143 ++++ inc/SP/Controller/Grids.class.php | 691 ++++++++++-------- .../Controller/ItemActionController.class.php | 51 +- .../Controller/ItemSearchController.class.php | 66 +- .../Controller/ItemShowController.class.php | 59 +- .../RequestControllerTrait.class.php | 113 +++ inc/SP/Mgmt/Users/UserLdapSync.class.php | 3 +- js/app-actions.min.js | 67 +- 13 files changed, 725 insertions(+), 577 deletions(-) create mode 100644 inc/SP/Controller/ChecksController.class.php create mode 100644 inc/SP/Controller/RequestControllerTrait.class.php diff --git a/ajax/ajax_checkConnection.php b/ajax/ajax_checkConnection.php index e1a99197..ccde3c7f 100644 --- a/ajax/ajax_checkConnection.php +++ b/ajax/ajax_checkConnection.php @@ -23,14 +23,8 @@ * */ -use SP\Auth\Ldap\LdapMsAds; -use SP\Auth\Ldap\LdapStd; -use SP\Core\Init; -use SP\Core\SessionUtil; -use SP\Http\JsonResponse; +use SP\Controller\ChecksController; use SP\Http\Request; -use SP\Util\Json; -use SP\Util\Wiki\DokuWikiApi; define('APP_ROOT', '..'); @@ -38,82 +32,5 @@ require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Bas Request::checkReferer('POST'); -$Json = new JsonResponse(); - -if (!Init::isLoggedIn()) { - $Json->setDescription(_('La sesión no se ha iniciado o ha caducado')); - $Json->setStatus(10); - Json::returnJson($Json); -} - -$sk = Request::analyze('sk', false); - -if (!$sk || !SessionUtil::checkSessionKey($sk)) { - $Json->setDescription(_('CONSULTA INVÁLIDA')); - Json::returnJson($Json); -} - -$frmType = Request::analyze('type'); - -if ($frmType === 'ldap') { - $ldapServer = Request::analyze('ldap_server'); - $ldapBase = Request::analyze('ldap_base'); - $ldapGroup = Request::analyze('ldap_group'); - $ldapBindUser = Request::analyze('ldap_binduser'); - $ldapBindPass = Request::analyzeEncrypted('ldap_bindpass'); - - if (!$ldapServer || !$ldapBase || !$ldapBindUser || !$ldapBindPass) { - $Json->setDescription(_('Los parámetros de LDAP no están configurados')); - Json::returnJson($Json); - } - - if (Request::analyze('ldap_enabled', false, false, true)) { - $Ldap = new LdapMsAds(); - } else { - $Ldap = new LdapStd(); - } - - $Ldap->setServer($ldapServer); - $Ldap->setSearchBase($ldapBase); - $Ldap->setGroup($ldapGroup); - $Ldap->setBindDn($ldapBindUser); - $Ldap->setBindPass($ldapBindPass); - - $resCheckLdap = $Ldap->checkConnection(); - - if ($resCheckLdap === false) { - $Json->setDescription(_('Error de conexión a LDAP')); - $Json->addMessage(_('Revise el registro de eventos para más detalles')); - } else { - $Json->setDescription(_('Conexión a LDAP correcta')); - $Json->addMessage(sprintf(_('Objetos encontrados: %d'), $resCheckLdap)); - $Json->setStatus(0); - } - - Json::returnJson($Json); -} elseif ($frmType === 'dokuwiki') { - $frmDokuWikiUrl = Request::analyze('dokuwiki_url'); - $frmDokuWikiUser = Request::analyze('dokuwiki_user'); - $frmDokuWikiPass = Request::analyzeEncrypted('dokuwiki_pass'); - - if (!$frmDokuWikiUrl) { - $Json->setDescription(_('Los parámetros de DokuWiki no están configurados')); - Json::returnJson($Json); - } - - try { - $DokuWikiApi = DokuWikiApi::checkConnection($frmDokuWikiUrl, $frmDokuWikiUser, $frmDokuWikiPass); - - $dokuWikiVersion = $DokuWikiApi->getVersion(); - $version = is_array($dokuWikiVersion) ? $dokuWikiVersion[0] : _('Error'); - - $Json->setDescription(_('Conexión correcta')); - $Json->addMessage(sprintf('%s: %s', _('Versión'), $version)); - $Json->setStatus(0); - } catch (\SP\Core\Exceptions\SPException $e) { - $Json->setDescription(_('Error de conexión a DokuWiki')); - $Json->addMessage(_('Revise el registro de eventos para más detalles')); - } - - Json::returnJson($Json); -} \ No newline at end of file +$Controller = new ChecksController(); +$Controller->doAction(); \ No newline at end of file diff --git a/ajax/ajax_itemSave.php b/ajax/ajax_itemSave.php index 76362226..3487000f 100644 --- a/ajax/ajax_itemSave.php +++ b/ajax/ajax_itemSave.php @@ -25,8 +25,6 @@ use SP\Controller\ItemActionController; use SP\Http\Request; -use SP\Core\SessionUtil; -use SP\Http\Response; define('APP_ROOT', '..'); @@ -34,9 +32,5 @@ require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Bas Request::checkReferer('POST'); -if (!\SP\Core\Init::isLoggedIn()) { - Response::printJson(_('La sesión no se ha iniciado o ha caducado'), 10); -} - $ItemAction = new ItemActionController(); $ItemAction->doAction(); \ No newline at end of file diff --git a/ajax/ajax_itemSearch.php b/ajax/ajax_itemSearch.php index 153ccc34..94d8f92d 100644 --- a/ajax/ajax_itemSearch.php +++ b/ajax/ajax_itemSearch.php @@ -26,17 +26,11 @@ define('APP_ROOT', '..'); use SP\Controller\ItemSearchController; -use SP\Core\Init; use SP\Http\Request; -use SP\Http\Response; require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Base.php'; Request::checkReferer('POST'); -if (!Init::isLoggedIn()) { - Response::printJson(_('La sesión no se ha iniciado o ha caducado'), 10); -} - $ItemSearch = new ItemSearchController(); $ItemSearch->doAction(); \ No newline at end of file diff --git a/ajax/ajax_itemShow.php b/ajax/ajax_itemShow.php index 2d64fc0a..fb7a3453 100644 --- a/ajax/ajax_itemShow.php +++ b/ajax/ajax_itemShow.php @@ -24,9 +24,7 @@ */ use SP\Controller\ItemShowController; -use SP\Core\Init; use SP\Http\Request; -use SP\Util\Util; define('APP_ROOT', '..'); @@ -34,9 +32,5 @@ require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Bas Request::checkReferer('POST'); -if (!Init::isLoggedIn()) { - Util::logout(); -} - $ItemShow = new ItemShowController(); $ItemShow->doAction(); \ No newline at end of file diff --git a/inc/SP/Auth/Ldap/LdapBase.class.php b/inc/SP/Auth/Ldap/LdapBase.class.php index f7c9f830..e828b144 100644 --- a/inc/SP/Auth/Ldap/LdapBase.class.php +++ b/inc/SP/Auth/Ldap/LdapBase.class.php @@ -40,7 +40,7 @@ abstract class LdapBase implements LdapInterface, AuthInterface /** * Atributos de búsqueda */ - const SEARCH_ATTRIBUTES = ['dn', 'displayname', 'samaccountname', 'mail', 'memberof', 'lockouttime', 'fullname', 'groupmembership']; + const SEARCH_ATTRIBUTES = ['dn', 'displayname', 'samaccountname', 'mail', 'memberof', 'lockouttime', 'fullname', 'groupmembership', 'uid']; /** * @var resource */ diff --git a/inc/SP/Controller/ChecksController.class.php b/inc/SP/Controller/ChecksController.class.php new file mode 100644 index 00000000..bd123a80 --- /dev/null +++ b/inc/SP/Controller/ChecksController.class.php @@ -0,0 +1,143 @@ +. + */ + +namespace SP\Controller; + +use SP\Auth\Ldap\LdapMsAds; +use SP\Auth\Ldap\LdapStd; +use SP\Core\Exceptions\SPException; +use SP\Http\Request; +use SP\Util\Json; +use SP\Util\Wiki\DokuWikiApi; + +/** + * Class ChecksController + * + * @package SP\Controller + */ +class ChecksController implements ItemControllerInterface +{ + use RequestControllerTrait; + + /** + * ChecksController constructor. + */ + public function __construct() + { + $this->init(); + } + + /** + * Realizar la acción solicitada en la la petición HTTP + * + * @throws \SP\Core\Exceptions\SPException + */ + public function doAction() + { + $type = Request::analyze('type'); + + try { + switch ($type) { + case 'ldap': + $this->checkLdap(); + break; + case 'dokuwiki': + $this->checkDokuWiki(); + break; + default: + $this->invalidAction(); + } + } catch (\Exception $e) { + $this->jsonResponse->setDescription($e->getMessage()); + } + + Json::returnJson($this->jsonResponse); + } + + /** + * Comprobar la conexión a LDAP + */ + protected function checkLdap() + { + $ldapAdsEnabled = Request::analyze('ldap_ads', false, false, true); + $ldapServer = Request::analyze('ldap_server'); + $ldapBase = Request::analyze('ldap_base'); + $ldapGroup = Request::analyze('ldap_group'); + $ldapBindUser = Request::analyze('ldap_binduser'); + $ldapBindPass = Request::analyzeEncrypted('ldap_bindpass'); + + if (!$ldapServer || !$ldapBase || !$ldapBindUser || !$ldapBindPass) { + $this->jsonResponse->setDescription(_('Los parámetros de LDAP no están configurados')); + return; + } + + $Ldap = $ldapAdsEnabled ? $Ldap = new LdapMsAds() : new LdapStd(); + + $Ldap->setServer($ldapServer); + $Ldap->setSearchBase($ldapBase); + $Ldap->setGroup($ldapGroup); + $Ldap->setBindDn($ldapBindUser); + $Ldap->setBindPass($ldapBindPass); + + $resCheckLdap = $Ldap->checkConnection(); + + if ($resCheckLdap === false) { + $this->jsonResponse->setDescription(_('Error de conexión a LDAP')); + $this->jsonResponse->addMessage(_('Revise el registro de eventos para más detalles')); + } else { + $this->jsonResponse->setDescription(_('Conexión a LDAP correcta')); + $this->jsonResponse->addMessage(sprintf(_('Objetos encontrados: %d'), $resCheckLdap)); + $this->jsonResponse->setStatus(0); + } + } + + /** + * Comprobar la conexión a DokuWIki + */ + protected function checkDokuWiki() + { + $dokuWikiUrl = Request::analyze('dokuwiki_url'); + $dokuWikiUser = Request::analyze('dokuwiki_user'); + $dokuWikiPass = Request::analyzeEncrypted('dokuwiki_pass'); + + if (!$dokuWikiUrl) { + $this->jsonResponse->setDescription(_('Los parámetros de DokuWiki no están configurados')); + return; + } + + try { + $DokuWikiApi = DokuWikiApi::checkConnection($dokuWikiUrl, $dokuWikiUser, $dokuWikiPass); + + $dokuWikiVersion = $DokuWikiApi->getVersion(); + $version = is_array($dokuWikiVersion) ? $dokuWikiVersion[0] : _('Error'); + + $this->jsonResponse->setDescription(_('Conexión correcta')); + $this->jsonResponse->addMessage(sprintf('%s: %s', _('Versión'), $version)); + $this->jsonResponse->setStatus(0); + } catch (SPException $e) { + $this->jsonResponse->setDescription(_('Error de conexión a DokuWiki')); + $this->jsonResponse->addMessage(_('Revise el registro de eventos para más detalles')); + } + } +} \ No newline at end of file diff --git a/inc/SP/Controller/Grids.class.php b/inc/SP/Controller/Grids.class.php index 0d2978c8..02f656b3 100644 --- a/inc/SP/Controller/Grids.class.php +++ b/inc/SP/Controller/Grids.class.php @@ -28,7 +28,9 @@ namespace SP\Controller; defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo')); use SP\Config\Config; +use SP\Core\Acl; use SP\Core\ActionsInterface; +use SP\Core\Session; use SP\Core\SessionUtil; use SP\Core\DiFactory; use SP\Core\UI\ThemeIconsBase; @@ -80,6 +82,28 @@ class Grids implements ActionsInterface */ public function getCategoriesGrid() { + // Grid Header + $GridHeaders = new DataGridHeader(); + $GridHeaders->addHeader(_('Nombre')); + $GridHeaders->addHeader(_('Descripción')); + + // Grid Data + $GridData = new DataGridData(); + $GridData->setDataRowSourceId('category_id'); + $GridData->addDataRowSource('category_name'); + $GridData->addDataRowSource('category_description'); + + // Grid + $Grid = new DataGridTab(); + $Grid->setId('tblCategories'); + $Grid->setDataRowTemplate('datagrid-rows', 'grid'); + $Grid->setDataPagerTemplate('datagrid-nav-full', 'grid'); + $Grid->setHeader($GridHeaders); + $Grid->setData($GridData); + $Grid->setTitle(_('Gestión de Categorías')); + $Grid->setTime(round(microtime() - $this->queryTimeStart, 5)); + + // Grid Actions $GridActionSearch = new DataGridActionSearch(); $GridActionSearch->setId(self::ACTION_MGM_CATEGORIES_SEARCH); $GridActionSearch->setType(DataGridActionType::SEARCH_ITEM); @@ -87,6 +111,10 @@ class Grids implements ActionsInterface $GridActionSearch->setTitle(_('Buscar Categoría')); $GridActionSearch->setOnSubmitFunction('appMgmt/search'); + $Grid->setDataActions($GridActionSearch); + $Grid->setPager($this->getPager($GridActionSearch)); + + // Grid item's actions $GridActionNew = new DataGridAction(); $GridActionNew->setId(self::ACTION_MGM_CATEGORIES_NEW); $GridActionNew->setType(DataGridActionType::NEW_ITEM); @@ -96,6 +124,8 @@ class Grids implements ActionsInterface $GridActionNew->setSkip(true); $GridActionNew->setOnClickFunction('appMgmt/show'); + $Grid->setDataActions($GridActionNew); + $GridActionEdit = new DataGridAction(); $GridActionEdit->setId(self::ACTION_MGM_CATEGORIES_EDIT); $GridActionEdit->setType(DataGridActionType::EDIT_ITEM); @@ -104,6 +134,8 @@ class Grids implements ActionsInterface $GridActionEdit->setIcon($this->icons->getIconEdit()); $GridActionEdit->setOnClickFunction('appMgmt/show'); + $Grid->setDataActions($GridActionEdit); + $GridActionDel = new DataGridAction(); $GridActionDel->setId(self::ACTION_MGM_CATEGORIES_DELETE); $GridActionDel->setType(DataGridActionType::DELETE_ITEM); @@ -112,28 +144,7 @@ class Grids implements ActionsInterface $GridActionDel->setIcon($this->icons->getIconDelete()); $GridActionDel->setOnClickFunction('appMgmt/delete'); - $GridHeaders = new DataGridHeader(); - $GridHeaders->addHeader(_('Nombre')); - $GridHeaders->addHeader(_('Descripción')); - - $GridData = new DataGridData(); - $GridData->setDataRowSourceId('category_id'); - $GridData->addDataRowSource('category_name'); - $GridData->addDataRowSource('category_description'); - - $Grid = new DataGridTab(); - $Grid->setId('tblCategories'); - $Grid->setDataRowTemplate('datagrid-rows', 'grid'); - $Grid->setDataPagerTemplate('datagrid-nav-full', 'grid'); - $Grid->setDataActions($GridActionSearch); - $Grid->setDataActions($GridActionNew); - $Grid->setDataActions($GridActionEdit); $Grid->setDataActions($GridActionDel); - $Grid->setHeader($GridHeaders); - $Grid->setPager($this->getPager($GridActionSearch)); - $Grid->setData($GridData); - $Grid->setTitle(_('Gestión de Categorías')); - $Grid->setTime(round(microtime() - $this->queryTimeStart, 5)); return $Grid; } @@ -165,6 +176,28 @@ class Grids implements ActionsInterface */ public function getCustomersGrid() { + // Grid Header + $GridHeaders = new DataGridHeader(); + $GridHeaders->addHeader(_('Nombre')); + $GridHeaders->addHeader(_('Descripción')); + + // Grid Data + $GridData = new DataGridData(); + $GridData->setDataRowSourceId('customer_id'); + $GridData->addDataRowSource('customer_name'); + $GridData->addDataRowSource('customer_description'); + + // Grid + $Grid = new DataGridTab(); + $Grid->setId('tblCustomers'); + $Grid->setDataRowTemplate('datagrid-rows', 'grid'); + $Grid->setDataPagerTemplate('datagrid-nav-full', 'grid'); + $Grid->setHeader($GridHeaders); + $Grid->setData($GridData); + $Grid->setTitle(_('Gestión de Clientes')); + $Grid->setTime(round(microtime() - $this->queryTimeStart, 5)); + + // Grid Actions $GridActionSearch = new DataGridActionSearch(); $GridActionSearch->setId(self::ACTION_MGM_CUSTOMERS_SEARCH); $GridActionSearch->setType(DataGridActionType::SEARCH_ITEM); @@ -172,6 +205,10 @@ class Grids implements ActionsInterface $GridActionSearch->setTitle(_('Buscar Cliente')); $GridActionSearch->setOnSubmitFunction('appMgmt/search'); + $Grid->setDataActions($GridActionSearch); + $Grid->setPager($this->getPager($GridActionSearch)); + + // Grid item's actions $GridActionNew = new DataGridAction(); $GridActionNew->setId(self::ACTION_MGM_CUSTOMERS_NEW); $GridActionNew->setType(DataGridActionType::NEW_ITEM); @@ -181,6 +218,8 @@ class Grids implements ActionsInterface $GridActionNew->setSkip(true); $GridActionNew->setOnClickFunction('appMgmt/show'); + $Grid->setDataActions($GridActionNew); + $GridActionEdit = new DataGridAction(); $GridActionEdit->setId(self::ACTION_MGM_CUSTOMERS_EDIT); $GridActionEdit->setType(DataGridActionType::EDIT_ITEM); @@ -189,6 +228,8 @@ class Grids implements ActionsInterface $GridActionEdit->setIcon($this->icons->getIconEdit()); $GridActionEdit->setOnClickFunction('appMgmt/show'); + $Grid->setDataActions($GridActionEdit); + $GridActionDel = new DataGridAction(); $GridActionDel->setId(self::ACTION_MGM_CUSTOMERS_DELETE); $GridActionDel->setType(DataGridActionType::DELETE_ITEM); @@ -197,28 +238,7 @@ class Grids implements ActionsInterface $GridActionDel->setIcon($this->icons->getIconDelete()); $GridActionDel->setOnClickFunction('appMgmt/delete'); - $GridHeaders = new DataGridHeader(); - $GridHeaders->addHeader(_('Nombre')); - $GridHeaders->addHeader(_('Descripción')); - - $GridData = new DataGridData(); - $GridData->setDataRowSourceId('customer_id'); - $GridData->addDataRowSource('customer_name'); - $GridData->addDataRowSource('customer_description'); - - $Grid = new DataGridTab(); - $Grid->setId('tblCustomers'); - $Grid->setDataRowTemplate('datagrid-rows', 'grid'); - $Grid->setDataPagerTemplate('datagrid-nav-full', 'grid'); - $Grid->setDataActions($GridActionSearch); - $Grid->setDataActions($GridActionNew); - $Grid->setDataActions($GridActionEdit); $Grid->setDataActions($GridActionDel); - $Grid->setHeader($GridHeaders); - $Grid->setPager($this->getPager($GridActionSearch)); - $Grid->setData($GridData); - $Grid->setTitle(_('Gestión de Clientes')); - $Grid->setTime(round(microtime() - $this->queryTimeStart, 5)); return $Grid; } @@ -229,6 +249,30 @@ class Grids implements ActionsInterface */ public function getCustomFieldsGrid() { + // Grid Header + $GridHeaders = new DataGridHeader(); + $GridHeaders->addHeader(_('Módulo')); + $GridHeaders->addHeader(_('Nombre')); + $GridHeaders->addHeader(_('Tipo')); + + // Grid Data + $GridData = new DataGridData(); + $GridData->setDataRowSourceId('id'); + $GridData->addDataRowSource('moduleName'); + $GridData->addDataRowSource('name'); + $GridData->addDataRowSource('typeName'); + + // Grid + $Grid = new DataGridTab(); + $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(microtime() - $this->queryTimeStart, 5)); + + // Grid Actions $GridActionSearch = new DataGridActionSearch(); $GridActionSearch->setId(self::ACTION_MGM_CUSTOMFIELDS_SEARCH); $GridActionSearch->setType(DataGridActionType::SEARCH_ITEM); @@ -236,6 +280,10 @@ class Grids implements ActionsInterface $GridActionSearch->setTitle(_('Buscar Campo')); $GridActionSearch->setOnSubmitFunction('appMgmt/search'); + $Grid->setDataActions($GridActionSearch); + $Grid->setPager($this->getPager($GridActionSearch)); + + // Grid item's actions $GridActionNew = new DataGridAction(); $GridActionNew->setId(self::ACTION_MGM_CUSTOMFIELDS_NEW); $GridActionNew->setType(DataGridActionType::NEW_ITEM); @@ -245,6 +293,8 @@ class Grids implements ActionsInterface $GridActionNew->setSkip(true); $GridActionNew->setOnClickFunction('appMgmt/show'); + $Grid->setDataActions($GridActionNew); + $GridActionEdit = new DataGridAction(); $GridActionEdit->setId(self::ACTION_MGM_CUSTOMFIELDS_EDIT); $GridActionEdit->setType(DataGridActionType::EDIT_ITEM); @@ -253,6 +303,8 @@ class Grids implements ActionsInterface $GridActionEdit->setIcon($this->icons->getIconEdit()); $GridActionEdit->setOnClickFunction('appMgmt/show'); + $Grid->setDataActions($GridActionEdit); + $GridActionDel = new DataGridAction(); $GridActionDel->setId(self::ACTION_MGM_CUSTOMFIELDS_DELETE); $GridActionDel->setType(DataGridActionType::DELETE_ITEM); @@ -261,30 +313,7 @@ class Grids implements ActionsInterface $GridActionDel->setIcon($this->icons->getIconDelete()); $GridActionDel->setOnClickFunction('appMgmt/delete'); - $GridHeaders = new DataGridHeader(); - $GridHeaders->addHeader(_('Módulo')); - $GridHeaders->addHeader(_('Nombre')); - $GridHeaders->addHeader(_('Tipo')); - - $GridData = new DataGridData(); - $GridData->setDataRowSourceId('id'); - $GridData->addDataRowSource('moduleName'); - $GridData->addDataRowSource('name'); - $GridData->addDataRowSource('typeName'); - - $Grid = new DataGridTab(); - $Grid->setId('tblCustomFields'); - $Grid->setDataRowTemplate('datagrid-rows', 'grid'); - $Grid->setDataPagerTemplate('datagrid-nav-full', 'grid'); - $Grid->setDataActions($GridActionSearch); - $Grid->setDataActions($GridActionNew); - $Grid->setDataActions($GridActionEdit); $Grid->setDataActions($GridActionDel); - $Grid->setHeader($GridHeaders); - $Grid->setPager($this->getPager($GridActionSearch)); - $Grid->setData($GridData); - $Grid->setTitle(_('Campos Personalizados')); - $Grid->setTime(round(microtime() - $this->queryTimeStart, 5)); return $Grid; } @@ -295,27 +324,7 @@ class Grids implements ActionsInterface */ public function getFilesGrid() { - $GridActionSearch = new DataGridActionSearch(); - $GridActionSearch->setId(self::ACTION_MGM_FILES_SEARCH); - $GridActionSearch->setType(DataGridActionType::SEARCH_ITEM); - $GridActionSearch->setName('frmSearchFile'); - $GridActionSearch->setTitle(_('Buscar Archivo')); - $GridActionSearch->setOnSubmitFunction('appMgmt/search'); - - $GridActionView = new DataGridAction(); - $GridActionView->setId(self::ACTION_MGM_FILES_VIEW); - $GridActionView->setType(DataGridActionType::VIEW_ITEM); - $GridActionView->setName(_('Ver Archivo')); - $GridActionView->setIcon($this->icons->getIconView()); - $GridActionView->setOnClickFunction('file/view'); - - $GridActionDel = new DataGridAction(); - $GridActionDel->setId(self::ACTION_MGM_FILES_DELETE); - $GridActionDel->setType(DataGridActionType::DELETE_ITEM); - $GridActionDel->setName(_('Eliminar Archivo')); - $GridActionDel->setIcon($this->icons->getIconDelete()); - $GridActionDel->setOnClickFunction('appMgmt/delete'); - + // Grid Header $GridHeaders = new DataGridHeader(); $GridHeaders->addHeader(_('Cuenta')); $GridHeaders->addHeader(_('Cliente')); @@ -323,6 +332,7 @@ class Grids implements ActionsInterface $GridHeaders->addHeader(_('Tipo')); $GridHeaders->addHeader(_('Tamaño')); + // Grid Data $GridData = new DataGridData(); $GridData->setDataRowSourceId('accfile_id'); $GridData->addDataRowSource('account_name'); @@ -331,19 +341,46 @@ class Grids implements ActionsInterface $GridData->addDataRowSource('accfile_type'); $GridData->addDataRowSource('accfile_size'); + // Grid $Grid = new DataGridTab(); $Grid->setId('tblFiles'); $Grid->setDataRowTemplate('datagrid-rows', 'grid'); $Grid->setDataPagerTemplate('datagrid-nav-full', 'grid'); - $Grid->setDataActions($GridActionView); - $Grid->setDataActions($GridActionDel); - $Grid->setDataActions($GridActionSearch); $Grid->setHeader($GridHeaders); - $Grid->setPager($this->getPager($GridActionSearch)); $Grid->setData($GridData); $Grid->setTitle(_('Gestión de Archivos')); $Grid->setTime(round(microtime() - $this->queryTimeStart, 5)); + // Grid Actions + $GridActionSearch = new DataGridActionSearch(); + $GridActionSearch->setId(self::ACTION_MGM_FILES_SEARCH); + $GridActionSearch->setType(DataGridActionType::SEARCH_ITEM); + $GridActionSearch->setName('frmSearchFile'); + $GridActionSearch->setTitle(_('Buscar Archivo')); + $GridActionSearch->setOnSubmitFunction('appMgmt/search'); + + $Grid->setDataActions($GridActionSearch); + $Grid->setPager($this->getPager($GridActionSearch)); + + // Grid item's actions + $GridActionView = new DataGridAction(); + $GridActionView->setId(self::ACTION_MGM_FILES_VIEW); + $GridActionView->setType(DataGridActionType::VIEW_ITEM); + $GridActionView->setName(_('Ver Archivo')); + $GridActionView->setIcon($this->icons->getIconView()); + $GridActionView->setOnClickFunction('file/view'); + + $Grid->setDataActions($GridActionView); + + $GridActionDel = new DataGridAction(); + $GridActionDel->setId(self::ACTION_MGM_FILES_DELETE); + $GridActionDel->setType(DataGridActionType::DELETE_ITEM); + $GridActionDel->setName(_('Eliminar Archivo')); + $GridActionDel->setIcon($this->icons->getIconDelete()); + $GridActionDel->setOnClickFunction('appMgmt/delete'); + + $Grid->setDataActions($GridActionDel); + return $Grid; } @@ -353,6 +390,28 @@ class Grids implements ActionsInterface */ public function getAccountsGrid() { + // Grid Header + $GridHeaders = new DataGridHeader(); + $GridHeaders->addHeader(_('Nombre')); + $GridHeaders->addHeader(_('Cliente')); + + // Grid Data + $GridData = new DataGridData(); + $GridData->setDataRowSourceId('account_id'); + $GridData->addDataRowSource('account_name'); + $GridData->addDataRowSource('customer_name'); + + // Grid + $Grid = new DataGridTab(); + $Grid->setId('tblAccounts'); + $Grid->setDataRowTemplate('datagrid-rows', 'grid'); + $Grid->setDataPagerTemplate('datagrid-nav-full', 'grid'); + $Grid->setHeader($GridHeaders); + $Grid->setData($GridData); + $Grid->setTitle(_('Gestión de Cuentas')); + $Grid->setTime(round(microtime() - $this->queryTimeStart, 5)); + + // Grid Actions $GridActionSearch = new DataGridActionSearch(); $GridActionSearch->setId(self::ACTION_MGM_ACCOUNTS_SEARCH); $GridActionSearch->setType(DataGridActionType::SEARCH_ITEM); @@ -360,6 +419,10 @@ class Grids implements ActionsInterface $GridActionSearch->setTitle(_('Buscar Cuenta')); $GridActionSearch->setOnSubmitFunction('appMgmt/search'); + $Grid->setDataActions($GridActionSearch); + $Grid->setPager($this->getPager($GridActionSearch)); + + // Grid item's actions $GridActionDel = new DataGridAction(); $GridActionDel->setId(self::ACTION_MGM_ACCOUNTS_DELETE); $GridActionDel->setType(DataGridActionType::DELETE_ITEM); @@ -368,26 +431,7 @@ class Grids implements ActionsInterface $GridActionDel->setIcon($this->icons->getIconDelete()); $GridActionDel->setOnClickFunction('appMgmt/delete'); - $GridHeaders = new DataGridHeader(); - $GridHeaders->addHeader(_('Nombre')); - $GridHeaders->addHeader(_('Cliente')); - - $GridData = new DataGridData(); - $GridData->setDataRowSourceId('account_id'); - $GridData->addDataRowSource('account_name'); - $GridData->addDataRowSource('customer_name'); - - $Grid = new DataGridTab(); - $Grid->setId('tblAccounts'); - $Grid->setDataRowTemplate('datagrid-rows', 'grid'); - $Grid->setDataPagerTemplate('datagrid-nav-full', 'grid'); - $Grid->setDataActions($GridActionSearch); $Grid->setDataActions($GridActionDel); - $Grid->setHeader($GridHeaders); - $Grid->setPager($this->getPager($GridActionSearch)); - $Grid->setData($GridData); - $Grid->setTitle(_('Gestión de Cuentas')); - $Grid->setTime(round(microtime() - $this->queryTimeStart, 5)); return $Grid; } @@ -398,66 +442,7 @@ class Grids implements ActionsInterface */ public function getUsersGrid() { - $GridActionSearch = new DataGridActionSearch(); - $GridActionSearch->setId(self::ACTION_USR_USERS_SEARCH); - $GridActionSearch->setType(DataGridActionType::SEARCH_ITEM); - $GridActionSearch->setName('frmSearchUser'); - $GridActionSearch->setTitle(_('Buscar Usuario')); - $GridActionSearch->setOnSubmitFunction('appMgmt/search'); - - $GridActionNew = new DataGridAction(); - $GridActionNew->setId(self::ACTION_USR_USERS_NEW); - $GridActionNew->setType(DataGridActionType::NEW_ITEM); - $GridActionNew->setName(_('Nuevo Usuario')); - $GridActionNew->setTitle(_('Nuevo Usuario')); - $GridActionNew->setIcon($this->icons->getIconAdd()); - $GridActionNew->setSkip(true); - $GridActionNew->setOnClickFunction('appMgmt/show'); - - $GridActionView = new DataGridAction(); - $GridActionView->setId(self::ACTION_USR_USERS_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'); - - $GridActionEdit = new DataGridAction(); - $GridActionEdit->setId(self::ACTION_USR_USERS_EDIT); - $GridActionEdit->setType(DataGridActionType::EDIT_ITEM); - $GridActionEdit->setName(_('Editar Usuario')); - $GridActionEdit->setTitle(_('Editar Usuario')); - $GridActionEdit->setIcon($this->icons->getIconEdit()); - $GridActionEdit->setOnClickFunction('appMgmt/show'); - - $GridActionDel = new DataGridAction(); - $GridActionDel->setId(self::ACTION_USR_USERS_DELETE); - $GridActionDel->setType(DataGridActionType::DELETE_ITEM); - $GridActionDel->setName(_('Eliminar Usuario')); - $GridActionDel->setTitle(_('Eliminar Usuario')); - $GridActionDel->setIcon($this->icons->getIconDelete()); - $GridActionDel->setOnClickFunction('appMgmt/delete'); - - $GridActionEditPass = new DataGridAction(); - $GridActionEditPass->setId(self::ACTION_USR_USERS_EDITPASS); - $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('user_isLdap'); - - $SyncLdapIcon = new FontIcon('get_app'); - - $GridActionLdapSync = new DataGridAction(); - $GridActionLdapSync->setId(self::ACTION_USR_SYNC_LDAP); - $GridActionLdapSync->setType(DataGridActionType::NEW_ITEM); - $GridActionLdapSync->setName(_('Importar usuarios de LDAP')); - $GridActionLdapSync->setTitle(_('Importar usuarios de LDAP')); - $GridActionLdapSync->setIcon($SyncLdapIcon); - $GridActionLdapSync->setSkip(true); - $GridActionLdapSync->setOnClickFunction('appMgmt/ldapSync'); - + // Grid Header $GridHeaders = new DataGridHeader(); $GridHeaders->addHeader(_('Nombre')); $GridHeaders->addHeader(_('Login')); @@ -465,6 +450,7 @@ class Grids implements ActionsInterface $GridHeaders->addHeader(_('Grupo')); $GridHeaders->addHeader(_('Propiedades')); + // Grid Data $GridData = new DataGridData(); $GridData->setDataRowSourceId('user_id'); $GridData->addDataRowSource('user_name'); @@ -476,23 +462,93 @@ class Grids implements ActionsInterface $GridData->addDataRowSourceWithIcon('user_isLdap', $this->icons->getIconLdapUser()); $GridData->addDataRowSourceWithIcon('user_isDisabled', $this->icons->getIconDisabled()); + // Grid $Grid = new DataGridTab(); $Grid->setId('tblUsers'); $Grid->setDataRowTemplate('datagrid-rows', 'grid'); $Grid->setDataPagerTemplate('datagrid-nav-full', 'grid'); - $Grid->setDataActions($GridActionSearch); - $Grid->setDataActions($GridActionNew); - $Grid->setDataActions($GridActionLdapSync); - $Grid->setDataActions($GridActionView); - $Grid->setDataActions($GridActionEdit); - $Grid->setDataActions($GridActionEditPass); - $Grid->setDataActions($GridActionDel); $Grid->setHeader($GridHeaders); - $Grid->setPager($this->getPager($GridActionSearch)); $Grid->setData($GridData); $Grid->setTitle(_('Gestión de Usuarios')); $Grid->setTime(round(microtime() - $this->queryTimeStart, 5)); + // Grid Actions + $GridActionSearch = new DataGridActionSearch(); + $GridActionSearch->setId(self::ACTION_USR_USERS_SEARCH); + $GridActionSearch->setType(DataGridActionType::SEARCH_ITEM); + $GridActionSearch->setName('frmSearchUser'); + $GridActionSearch->setTitle(_('Buscar Usuario')); + $GridActionSearch->setOnSubmitFunction('appMgmt/search'); + + $Grid->setDataActions($GridActionSearch); + $Grid->setPager($this->getPager($GridActionSearch)); + + $GridActionNew = new DataGridAction(); + $GridActionNew->setId(self::ACTION_USR_USERS_NEW); + $GridActionNew->setType(DataGridActionType::NEW_ITEM); + $GridActionNew->setName(_('Nuevo Usuario')); + $GridActionNew->setTitle(_('Nuevo Usuario')); + $GridActionNew->setIcon($this->icons->getIconAdd()); + $GridActionNew->setSkip(true); + $GridActionNew->setOnClickFunction('appMgmt/show'); + + $Grid->setDataActions($GridActionNew); + + if (Acl::checkUserAccess(ActionsInterface::ACTION_CFG_LDAP)) { + $GridActionLdapSync = new DataGridAction(); + $GridActionLdapSync->setId(self::ACTION_USR_SYNC_LDAP); + $GridActionLdapSync->setType(DataGridActionType::NEW_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'); + + $Grid->setDataActions($GridActionLdapSync); + } + + // Grid item's actions + $GridActionView = new DataGridAction(); + $GridActionView->setId(self::ACTION_USR_USERS_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'); + + $Grid->setDataActions($GridActionView); + + $GridActionEdit = new DataGridAction(); + $GridActionEdit->setId(self::ACTION_USR_USERS_EDIT); + $GridActionEdit->setType(DataGridActionType::EDIT_ITEM); + $GridActionEdit->setName(_('Editar Usuario')); + $GridActionEdit->setTitle(_('Editar Usuario')); + $GridActionEdit->setIcon($this->icons->getIconEdit()); + $GridActionEdit->setOnClickFunction('appMgmt/show'); + + $Grid->setDataActions($GridActionEdit); + + $GridActionEditPass = new DataGridAction(); + $GridActionEditPass->setId(self::ACTION_USR_USERS_EDITPASS); + $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('user_isLdap'); + + $Grid->setDataActions($GridActionEditPass); + + $GridActionDel = new DataGridAction(); + $GridActionDel->setId(self::ACTION_USR_USERS_DELETE); + $GridActionDel->setType(DataGridActionType::DELETE_ITEM); + $GridActionDel->setName(_('Eliminar Usuario')); + $GridActionDel->setTitle(_('Eliminar Usuario')); + $GridActionDel->setIcon($this->icons->getIconDelete()); + $GridActionDel->setOnClickFunction('appMgmt/delete'); + + $Grid->setDataActions($GridActionDel); + return $Grid; } @@ -502,6 +558,28 @@ class Grids implements ActionsInterface */ public function getGroupsGrid() { + // Grid Header + $GridHeaders = new DataGridHeader(); + $GridHeaders->addHeader(_('Nombre')); + $GridHeaders->addHeader(_('Descripción')); + + // Grid Data + $GridData = new DataGridData(); + $GridData->setDataRowSourceId('usergroup_id'); + $GridData->addDataRowSource('usergroup_name'); + $GridData->addDataRowSource('usergroup_description'); + + // Grid + $Grid = new DataGridTab(); + $Grid->setId('tblGroups'); + $Grid->setDataRowTemplate('datagrid-rows', 'grid'); + $Grid->setDataPagerTemplate('datagrid-nav-full', 'grid'); + $Grid->setHeader($GridHeaders); + $Grid->setData($GridData); + $Grid->setTitle(_('Gestión de Grupos')); + $Grid->setTime(round(microtime() - $this->queryTimeStart, 5)); + + // Grid Actions $GridActionSearch = new DataGridActionSearch(); $GridActionSearch->setId(self::ACTION_USR_GROUPS_SEARCH); $GridActionSearch->setType(DataGridActionType::SEARCH_ITEM); @@ -509,6 +587,10 @@ class Grids implements ActionsInterface $GridActionSearch->setTitle(_('Buscar Grupo')); $GridActionSearch->setOnSubmitFunction('appMgmt/search'); + $Grid->setDataActions($GridActionSearch); + $Grid->setPager($this->getPager($GridActionSearch)); + + // Grid item's actions $GridActionNew = new DataGridAction(); $GridActionNew->setId(self::ACTION_USR_GROUPS_NEW); $GridActionNew->setType(DataGridActionType::NEW_ITEM); @@ -518,6 +600,8 @@ class Grids implements ActionsInterface $GridActionNew->setSkip(true); $GridActionNew->setOnClickFunction('appMgmt/show'); + $Grid->setDataActions($GridActionNew); + $GridActionEdit = new DataGridAction(); $GridActionEdit->setId(self::ACTION_USR_GROUPS_EDIT); $GridActionEdit->setType(DataGridActionType::EDIT_ITEM); @@ -526,6 +610,8 @@ class Grids implements ActionsInterface $GridActionEdit->setIcon($this->icons->getIconEdit()); $GridActionEdit->setOnClickFunction('appMgmt/show'); + $Grid->setDataActions($GridActionEdit); + $GridActionDel = new DataGridAction(); $GridActionDel->setId(self::ACTION_USR_GROUPS_DELETE); $GridActionDel->setType(DataGridActionType::DELETE_ITEM); @@ -534,28 +620,7 @@ class Grids implements ActionsInterface $GridActionDel->setIcon($this->icons->getIconDelete()); $GridActionDel->setOnClickFunction('appMgmt/delete'); - $GridHeaders = new DataGridHeader(); - $GridHeaders->addHeader(_('Nombre')); - $GridHeaders->addHeader(_('Descripción')); - - $GridData = new DataGridData(); - $GridData->setDataRowSourceId('usergroup_id'); - $GridData->addDataRowSource('usergroup_name'); - $GridData->addDataRowSource('usergroup_description'); - - $Grid = new DataGridTab(); - $Grid->setId('tblGroups'); - $Grid->setDataRowTemplate('datagrid-rows', 'grid'); - $Grid->setDataPagerTemplate('datagrid-nav-full', 'grid'); - $Grid->setDataActions($GridActionSearch); - $Grid->setDataActions($GridActionNew); - $Grid->setDataActions($GridActionEdit); $Grid->setDataActions($GridActionDel); - $Grid->setHeader($GridHeaders); - $Grid->setPager($this->getPager($GridActionSearch)); - $Grid->setData($GridData); - $Grid->setTitle(_('Gestión de Grupos')); - $Grid->setTime(round(microtime() - $this->queryTimeStart, 5)); return $Grid; } @@ -566,6 +631,26 @@ class Grids implements ActionsInterface */ public function getProfilesGrid() { + // Grid Header + $GridHeaders = new DataGridHeader(); + $GridHeaders->addHeader(_('Nombre')); + + // Grid Data + $GridData = new DataGridData(); + $GridData->setDataRowSourceId('userprofile_id'); + $GridData->addDataRowSource('userprofile_name'); + + // Grid + $Grid = new DataGridTab(); + $Grid->setId('tblProfiles'); + $Grid->setDataRowTemplate('datagrid-rows', 'grid'); + $Grid->setDataPagerTemplate('datagrid-nav-full', 'grid'); + $Grid->setHeader($GridHeaders); + $Grid->setData($GridData); + $Grid->setTitle(_('Gestión de Perfiles')); + $Grid->setTime(round(microtime() - $this->queryTimeStart, 5)); + + // Grid Actions $GridActionSearch = new DataGridActionSearch(); $GridActionSearch->setId(self::ACTION_USR_PROFILES_SEARCH); $GridActionSearch->setType(DataGridActionType::SEARCH_ITEM); @@ -573,6 +658,10 @@ class Grids implements ActionsInterface $GridActionSearch->setTitle(_('Buscar Perfil')); $GridActionSearch->setOnSubmitFunction('appMgmt/search'); + $Grid->setDataActions($GridActionSearch); + $Grid->setPager($this->getPager($GridActionSearch)); + + // Grid item's actions $GridActionNew = new DataGridAction(); $GridActionNew->setId(self::ACTION_USR_PROFILES_NEW); $GridActionNew->setType(DataGridActionType::NEW_ITEM); @@ -582,6 +671,8 @@ class Grids implements ActionsInterface $GridActionNew->setSkip(true); $GridActionNew->setOnClickFunction('appMgmt/show'); + $Grid->setDataActions($GridActionNew); + $GridActionView = new DataGridAction(); $GridActionView->setId(self::ACTION_USR_PROFILES_VIEW); $GridActionView->setType(DataGridActionType::VIEW_ITEM); @@ -590,6 +681,8 @@ class Grids implements ActionsInterface $GridActionView->setIcon($this->icons->getIconView()); $GridActionView->setOnClickFunction('appMgmt/show'); + $Grid->setDataActions($GridActionView); + $GridActionEdit = new DataGridAction(); $GridActionEdit->setId(self::ACTION_USR_PROFILES_EDIT); $GridActionEdit->setType(DataGridActionType::EDIT_ITEM); @@ -598,6 +691,8 @@ class Grids implements ActionsInterface $GridActionEdit->setIcon($this->icons->getIconEdit()); $GridActionEdit->setOnClickFunction('appMgmt/show'); + $Grid->setDataActions($GridActionEdit); + $GridActionDel = new DataGridAction(); $GridActionDel->setId(self::ACTION_USR_PROFILES_DELETE); $GridActionDel->setType(DataGridActionType::DELETE_ITEM); @@ -606,27 +701,7 @@ class Grids implements ActionsInterface $GridActionDel->setIcon($this->icons->getIconDelete()); $GridActionDel->setOnClickFunction('appMgmt/delete'); - $GridHeaders = new DataGridHeader(); - $GridHeaders->addHeader(_('Nombre')); - - $GridData = new DataGridData(); - $GridData->setDataRowSourceId('userprofile_id'); - $GridData->addDataRowSource('userprofile_name'); - - $Grid = new DataGridTab(); - $Grid->setId('tblProfiles'); - $Grid->setDataRowTemplate('datagrid-rows', 'grid'); - $Grid->setDataPagerTemplate('datagrid-nav-full', 'grid'); - $Grid->setDataActions($GridActionSearch); - $Grid->setDataActions($GridActionNew); - $Grid->setDataActions($GridActionView); - $Grid->setDataActions($GridActionEdit); $Grid->setDataActions($GridActionDel); - $Grid->setHeader($GridHeaders); - $Grid->setPager($this->getPager($GridActionSearch)); - $Grid->setData($GridData); - $Grid->setTitle(_('Gestión de Perfiles')); - $Grid->setTime(round(microtime() - $this->queryTimeStart, 5)); return $Grid; } @@ -637,6 +712,28 @@ class Grids implements ActionsInterface */ public function getTokensGrid() { + // Grid Header + $GridHeaders = new DataGridHeader(); + $GridHeaders->addHeader(_('Usuario')); + $GridHeaders->addHeader(_('Acción')); + + // Grid Data + $GridData = new DataGridData(); + $GridData->setDataRowSourceId('authtoken_id'); + $GridData->addDataRowSource('user_login'); + $GridData->addDataRowSource('authtoken_actionId'); + + // Grid + $Grid = new DataGridTab(); + $Grid->setId('tblTokens'); + $Grid->setDataRowTemplate('datagrid-rows', 'grid'); + $Grid->setDataPagerTemplate('datagrid-nav-full', 'grid'); + $Grid->setHeader($GridHeaders); + $Grid->setData($GridData); + $Grid->setTitle(_('Gestión de Autorizaciones API')); + $Grid->setTime(round(microtime() - $this->queryTimeStart, 5)); + + // Grid Actions $GridActionSearch = new DataGridActionSearch(); $GridActionSearch->setId(self::ACTION_MGM_APITOKENS_SEARCH); $GridActionSearch->setType(DataGridActionType::SEARCH_ITEM); @@ -644,6 +741,10 @@ class Grids implements ActionsInterface $GridActionSearch->setTitle(_('Buscar Token')); $GridActionSearch->setOnSubmitFunction('appMgmt/search'); + $Grid->setDataActions($GridActionSearch); + $Grid->setPager($this->getPager($GridActionSearch)); + + // Grid item's actions $GridActionNew = new DataGridAction(); $GridActionNew->setId(self::ACTION_MGM_APITOKENS_NEW); $GridActionNew->setType(DataGridActionType::NEW_ITEM); @@ -653,6 +754,8 @@ class Grids implements ActionsInterface $GridActionNew->setSkip(true); $GridActionNew->setOnClickFunction('appMgmt/show'); + $Grid->setDataActions($GridActionNew); + $GridActionView = new DataGridAction(); $GridActionView->setId(self::ACTION_MGM_APITOKENS_VIEW); $GridActionView->setType(DataGridActionType::VIEW_ITEM); @@ -661,6 +764,8 @@ class Grids implements ActionsInterface $GridActionView->setIcon($this->icons->getIconView()); $GridActionView->setOnClickFunction('appMgmt/show'); + $Grid->setDataActions($GridActionView); + $GridActionEdit = new DataGridAction(); $GridActionEdit->setId(self::ACTION_MGM_APITOKENS_EDIT); $GridActionEdit->setType(DataGridActionType::EDIT_ITEM); @@ -669,6 +774,8 @@ class Grids implements ActionsInterface $GridActionEdit->setIcon($this->icons->getIconEdit()); $GridActionEdit->setOnClickFunction('appMgmt/show'); + $Grid->setDataActions($GridActionEdit); + $GridActionDel = new DataGridAction(); $GridActionDel->setId(self::ACTION_MGM_APITOKENS_DELETE); $GridActionDel->setType(DataGridActionType::DELETE_ITEM); @@ -677,29 +784,7 @@ class Grids implements ActionsInterface $GridActionDel->setIcon($this->icons->getIconDelete()); $GridActionDel->setOnClickFunction('appMgmt/delete'); - $GridHeaders = new DataGridHeader(); - $GridHeaders->addHeader(_('Usuario')); - $GridHeaders->addHeader(_('Acción')); - - $GridData = new DataGridData(); - $GridData->setDataRowSourceId('authtoken_id'); - $GridData->addDataRowSource('user_login'); - $GridData->addDataRowSource('authtoken_actionId'); - - $Grid = new DataGridTab(); - $Grid->setId('tblTokens'); - $Grid->setDataRowTemplate('datagrid-rows', 'grid'); - $Grid->setDataPagerTemplate('datagrid-nav-full', 'grid'); - $Grid->setDataActions($GridActionSearch); - $Grid->setDataActions($GridActionNew); - $Grid->setDataActions($GridActionView); - $Grid->setDataActions($GridActionEdit); $Grid->setDataActions($GridActionDel); - $Grid->setHeader($GridHeaders); - $Grid->setPager($this->getPager($GridActionSearch)); - $Grid->setData($GridData); - $Grid->setTitle(_('Gestión de Autorizaciones API')); - $Grid->setTime(round(microtime() - $this->queryTimeStart, 5)); return $Grid; } @@ -710,36 +795,7 @@ class Grids implements ActionsInterface */ public function getPublicLinksGrid() { - $GridActionSearch = new DataGridActionSearch(); - $GridActionSearch->setId(self::ACTION_MGM_PUBLICLINKS_SEARCH); - $GridActionSearch->setType(DataGridActionType::SEARCH_ITEM); - $GridActionSearch->setName('frmSearchLink'); - $GridActionSearch->setTitle(_('Buscar Enlace')); - $GridActionSearch->setOnSubmitFunction('appMgmt/search'); - - $GridActionView = new DataGridAction(); - $GridActionView->setId(self::ACTION_MGM_PUBLICLINKS_VIEW); - $GridActionView->setType(DataGridActionType::VIEW_ITEM); - $GridActionView->setName(_('Ver Enlace')); - $GridActionView->setTitle(_('Ver Enlace')); - $GridActionView->setIcon($this->icons->getIconView()); - $GridActionView->setOnClickFunction('appMgmt/show'); - - $GridActionRefresh = new DataGridAction(); - $GridActionRefresh->setId(self::ACTION_MGM_PUBLICLINKS_REFRESH); - $GridActionRefresh->setName(_('Renovar Enlace')); - $GridActionRefresh->setTitle(_('Renovar Enlace')); - $GridActionRefresh->setIcon($this->icons->getIconRefresh()); - $GridActionRefresh->setOnClickFunction('link/refresh'); - - $GridActionDel = new DataGridAction(); - $GridActionDel->setId(self::ACTION_MGM_PUBLICLINKS_DELETE); - $GridActionDel->setType(DataGridActionType::DELETE_ITEM); - $GridActionDel->setName(_('Eliminar Enlace')); - $GridActionDel->setTitle(_('Eliminar Enlace')); - $GridActionDel->setIcon($this->icons->getIconDelete()); - $GridActionDel->setOnClickFunction('appMgmt/delete'); - + // Grid Header $GridHeaders = new DataGridHeader(); $GridHeaders->addHeader(_('Cuenta')); $GridHeaders->addHeader(_('Fecha Creación')); @@ -748,6 +804,7 @@ class Grids implements ActionsInterface $GridHeaders->addHeader(_('Notificar')); $GridHeaders->addHeader(_('Visitas')); + // Grid Data $GridData = new DataGridData(); $GridData->setDataRowSourceId('publicLink_id'); $GridData->addDataRowSource('accountName'); @@ -757,20 +814,57 @@ class Grids implements ActionsInterface $GridData->addDataRowSource('notify'); $GridData->addDataRowSource('countViews'); + // Grid $Grid = new DataGridTab(); $Grid->setId('tblLinks'); $Grid->setDataRowTemplate('datagrid-rows', 'grid'); $Grid->setDataPagerTemplate('datagrid-nav-full', 'grid'); - $Grid->setDataActions($GridActionSearch); - $Grid->setDataActions($GridActionView); - $Grid->setDataActions($GridActionRefresh); - $Grid->setDataActions($GridActionDel); $Grid->setHeader($GridHeaders); - $Grid->setPager($this->getPager($GridActionSearch)); $Grid->setData($GridData); $Grid->setTitle(_('Gestión de Enlaces')); $Grid->setTime(round(microtime() - $this->queryTimeStart, 5)); + // Grid Actions + $GridActionSearch = new DataGridActionSearch(); + $GridActionSearch->setId(self::ACTION_MGM_PUBLICLINKS_SEARCH); + $GridActionSearch->setType(DataGridActionType::SEARCH_ITEM); + $GridActionSearch->setName('frmSearchLink'); + $GridActionSearch->setTitle(_('Buscar Enlace')); + $GridActionSearch->setOnSubmitFunction('appMgmt/search'); + + $Grid->setDataActions($GridActionSearch); + $Grid->setPager($this->getPager($GridActionSearch)); + + // Grid item's actions + $GridActionView = new DataGridAction(); + $GridActionView->setId(self::ACTION_MGM_PUBLICLINKS_VIEW); + $GridActionView->setType(DataGridActionType::VIEW_ITEM); + $GridActionView->setName(_('Ver Enlace')); + $GridActionView->setTitle(_('Ver Enlace')); + $GridActionView->setIcon($this->icons->getIconView()); + $GridActionView->setOnClickFunction('appMgmt/show'); + + $Grid->setDataActions($GridActionView); + + $GridActionRefresh = new DataGridAction(); + $GridActionRefresh->setId(self::ACTION_MGM_PUBLICLINKS_REFRESH); + $GridActionRefresh->setName(_('Renovar Enlace')); + $GridActionRefresh->setTitle(_('Renovar Enlace')); + $GridActionRefresh->setIcon($this->icons->getIconRefresh()); + $GridActionRefresh->setOnClickFunction('link/refresh'); + + $Grid->setDataActions($GridActionRefresh); + + $GridActionDel = new DataGridAction(); + $GridActionDel->setId(self::ACTION_MGM_PUBLICLINKS_DELETE); + $GridActionDel->setType(DataGridActionType::DELETE_ITEM); + $GridActionDel->setName(_('Eliminar Enlace')); + $GridActionDel->setTitle(_('Eliminar Enlace')); + $GridActionDel->setIcon($this->icons->getIconDelete()); + $GridActionDel->setOnClickFunction('appMgmt/delete'); + + $Grid->setDataActions($GridActionDel); + return $Grid; } @@ -780,6 +874,26 @@ class Grids implements ActionsInterface */ public function getTagsGrid() { + // Grid Header + $GridHeaders = new DataGridHeader(); + $GridHeaders->addHeader(_('Nombre')); + + // Grid Data + $GridData = new DataGridData(); + $GridData->setDataRowSourceId('tag_id'); + $GridData->addDataRowSource('tag_name'); + + // Grid + $Grid = new DataGridTab(); + $Grid->setId('tblTags'); + $Grid->setDataRowTemplate('datagrid-rows', 'grid'); + $Grid->setDataPagerTemplate('datagrid-nav-full', 'grid'); + $Grid->setHeader($GridHeaders); + $Grid->setData($GridData); + $Grid->setTitle(_('Gestión de Etiquetas')); + $Grid->setTime(round(microtime() - $this->queryTimeStart, 5)); + + // Grid Actions $GridActionSearch = new DataGridActionSearch(); $GridActionSearch->setId(self::ACTION_MGM_TAGS_SEARCH); $GridActionSearch->setType(DataGridActionType::SEARCH_ITEM); @@ -787,6 +901,10 @@ class Grids implements ActionsInterface $GridActionSearch->setTitle(_('Buscar Etiqueta')); $GridActionSearch->setOnSubmitFunction('appMgmt/search'); + $Grid->setDataActions($GridActionSearch); + $Grid->setPager($this->getPager($GridActionSearch)); + + // Grid item's actions $GridActionNew = new DataGridAction(); $GridActionNew->setId(self::ACTION_MGM_TAGS_NEW); $GridActionNew->setType(DataGridActionType::NEW_ITEM); @@ -796,6 +914,8 @@ class Grids implements ActionsInterface $GridActionNew->setSkip(true); $GridActionNew->setOnClickFunction('appMgmt/show'); + $Grid->setDataActions($GridActionNew); + $GridActionEdit = new DataGridAction(); $GridActionEdit->setId(self::ACTION_MGM_TAGS_EDIT); $GridActionEdit->setType(DataGridActionType::EDIT_ITEM); @@ -804,6 +924,8 @@ class Grids implements ActionsInterface $GridActionEdit->setIcon($this->icons->getIconEdit()); $GridActionEdit->setOnClickFunction('appMgmt/show'); + $Grid->setDataActions($GridActionEdit); + $GridActionDel = new DataGridAction(); $GridActionDel->setId(self::ACTION_MGM_TAGS_DELETE); $GridActionDel->setType(DataGridActionType::DELETE_ITEM); @@ -812,26 +934,7 @@ class Grids implements ActionsInterface $GridActionDel->setIcon($this->icons->getIconDelete()); $GridActionDel->setOnClickFunction('appMgmt/delete'); - $GridHeaders = new DataGridHeader(); - $GridHeaders->addHeader(_('Nombre')); - - $GridData = new DataGridData(); - $GridData->setDataRowSourceId('tag_id'); - $GridData->addDataRowSource('tag_name'); - - $Grid = new DataGridTab(); - $Grid->setId('tblTags'); - $Grid->setDataRowTemplate('datagrid-rows', 'grid'); - $Grid->setDataPagerTemplate('datagrid-nav-full', 'grid'); - $Grid->setDataActions($GridActionSearch); - $Grid->setDataActions($GridActionNew); - $Grid->setDataActions($GridActionEdit); $Grid->setDataActions($GridActionDel); - $Grid->setHeader($GridHeaders); - $Grid->setPager($this->getPager($GridActionSearch)); - $Grid->setData($GridData); - $Grid->setTitle(_('Gestión de Etiquetas')); - $Grid->setTime(round(microtime() - $this->queryTimeStart, 5)); return $Grid; } diff --git a/inc/SP/Controller/ItemActionController.class.php b/inc/SP/Controller/ItemActionController.class.php index 31de383f..f0953fbb 100644 --- a/inc/SP/Controller/ItemActionController.class.php +++ b/inc/SP/Controller/ItemActionController.class.php @@ -61,24 +61,10 @@ use SP\Util\Json; * * @package SP\Controller */ -class ItemActionController +class ItemActionController implements ItemControllerInterface { - /** - * @var int - */ - protected $actionId; - /** - * @var int - */ - protected $itemId; - /** - * @var string - */ - protected $sk; - /** - * @var JsonResponse - */ - protected $jsonResponse; + use RequestControllerTrait; + /** * @var CustomFieldData */ @@ -89,36 +75,7 @@ class ItemActionController */ public function __construct() { - $this->jsonResponse = new JsonResponse(); - - $this->analyzeRequest(); - $this->preActionChecks(); - } - - /** - * Analizar la petición HTTP y establecer las propiedades del elemento - */ - protected function analyzeRequest() - { - $this->sk = Request::analyze('sk', false); - $this->itemId = Request::analyze('itemId', 0); - $this->actionId = Request::analyze('actionId', 0); - } - - /** - * Comprobaciones antes de realizar una acción - */ - protected function preActionChecks() - { - if (!$this->sk || !SessionUtil::checkSessionKey($this->sk) || !$this->actionId) { - $this->invalidAction(); - } - } - - protected function invalidAction() - { - $this->jsonResponse->setDescription(_('Acción Inválida')); - Json::returnJson($this->jsonResponse); + $this->init(); } /** diff --git a/inc/SP/Controller/ItemSearchController.class.php b/inc/SP/Controller/ItemSearchController.class.php index 6fc034aa..8c23effe 100644 --- a/inc/SP/Controller/ItemSearchController.class.php +++ b/inc/SP/Controller/ItemSearchController.class.php @@ -34,7 +34,6 @@ use SP\Core\ActionsInterface; use SP\Core\SessionUtil; use SP\Core\Template; use SP\DataModel\ItemSearchData; -use SP\Http\JsonResponse; use SP\Http\Request; use SP\Mgmt\Categories\CategorySearch; use SP\Mgmt\Customers\CustomerSearch; @@ -53,28 +52,14 @@ use SP\Util\Json; * * @package SP\Controller */ -class ItemSearchController extends GridItemsSearchController implements ActionsInterface +class ItemSearchController extends GridItemsSearchController implements ActionsInterface, ItemControllerInterface { - /** - * @var int - */ - protected $actionId; - /** - * @var int - */ - protected $activeTab; - /** - * @var JsonResponse - */ - protected $jsonResponse; + use RequestControllerTrait; + /** * @var ItemSearchData */ protected $ItemSearchData; - /** - * @var string - */ - protected $sk; /** * Constructor @@ -85,41 +70,10 @@ class ItemSearchController extends GridItemsSearchController implements ActionsI { parent::__construct($template); - $this->jsonResponse = new JsonResponse(); $this->ItemSearchData = new ItemSearchData(); - $this->analyzeRequest(); - $this->preActionChecks(); - } - - /** - * Analizar la petición HTTP y establecer las propiedades del elemento - */ - protected function analyzeRequest() - { - $this->sk = Request::analyze('sk'); - $this->actionId = Request::analyze('actionId', 0); - $this->activeTab = Request::analyze('activeTab', 0); - - $this->ItemSearchData->setSeachString(Request::analyze('search')); - $this->ItemSearchData->setLimitStart(Request::analyze('start', 0)); - $this->ItemSearchData->setLimitCount(Request::analyze('count', Config::getConfig()->getAccountCount())); - } - - /** - * Comprobaciones antes de realizar una acción - */ - protected function preActionChecks() - { - if (!$this->sk || !SessionUtil::checkSessionKey($this->sk) || !$this->actionId) { - $this->invalidAction(); - } - } - - protected function invalidAction() - { - $this->jsonResponse->setDescription(_('Acción Inválida')); - Json::returnJson($this->jsonResponse); + $this->init(); + $this->setItemSearchData(); } /** @@ -477,4 +431,14 @@ class ItemSearchController extends GridItemsSearchController implements ActionsI $this->jsonResponse->setStatus(0); } + + /** + * Establecer las propiedades de búsqueda + */ + protected function setItemSearchData() + { + $this->ItemSearchData->setSeachString(Request::analyze('search')); + $this->ItemSearchData->setLimitStart(Request::analyze('start', 0)); + $this->ItemSearchData->setLimitCount(Request::analyze('count', Config::getConfig()->getAccountCount())); + } } \ No newline at end of file diff --git a/inc/SP/Controller/ItemShowController.class.php b/inc/SP/Controller/ItemShowController.class.php index 6e6e26a5..fee2e287 100644 --- a/inc/SP/Controller/ItemShowController.class.php +++ b/inc/SP/Controller/ItemShowController.class.php @@ -29,6 +29,7 @@ defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo' use SP\Api\ApiTokensUtil; use SP\Core\ActionsInterface; +use SP\Core\Init; use SP\Core\Session; use SP\Core\SessionUtil; use SP\Core\Template; @@ -50,6 +51,7 @@ use SP\Mgmt\CustomFields\CustomFieldDef; use SP\Mgmt\CustomFields\CustomFieldTypes; use SP\Mgmt\Files\FileUtil; use SP\Mgmt\Groups\GroupUsers; +use SP\Mgmt\ItemSelectInterface; use SP\Mgmt\PublicLinks\PublicLink; use SP\Mgmt\Groups\Group; use SP\Mgmt\Profiles\Profile; @@ -58,38 +60,21 @@ use SP\Mgmt\Tags\Tag; use SP\Mgmt\Users\User; use SP\Util\Checks; use SP\Util\Json; +use SP\Util\Util; /** * Class AccItemMgmt * * @package SP\Controller */ -class ItemShowController extends ControllerBase implements ActionsInterface +class ItemShowController extends ControllerBase implements ActionsInterface, ItemControllerInterface { + use RequestControllerTrait; + /** * Máximo numero de acciones antes de agrupar */ const MAX_NUM_ACTIONS = 3; - /** - * @var int - */ - protected $actionId; - /** - * @var int - */ - protected $itemId; - /** - * @var int - */ - protected $activeTab; - /** - * @var JsonResponse - */ - protected $jsonResponse; - /** - * @var string - */ - protected $sk; /** * @var int */ @@ -104,10 +89,7 @@ class ItemShowController extends ControllerBase implements ActionsInterface { parent::__construct($template); - $this->jsonResponse = new JsonResponse(); - - $this->analyzeRequest(); - $this->preActionChecks(); + $this->init(); $this->view->assign('isDemo', Checks::demoIsEnabled()); $this->view->assign('sk', SessionUtil::getSessionKey(true)); @@ -118,32 +100,17 @@ class ItemShowController extends ControllerBase implements ActionsInterface } /** - * Analizar la petición HTTP y establecer las propiedades del elemento + * Comprobar si la sesión está activa + * + * @throws \SP\Core\Exceptions\SPException */ - protected function analyzeRequest() + protected function checkSession() { - $this->sk = Request::analyze('sk', false); - $this->itemId = Request::analyze('itemId', 0); - $this->actionId = Request::analyze('actionId', 0); - $this->activeTab = Request::analyze('activeTab', 0); - } - - /** - * Comprobaciones antes de realizar una acción - */ - protected function preActionChecks() - { - if (!$this->sk || !SessionUtil::checkSessionKey($this->sk) || !$this->actionId) { - $this->invalidAction(); + if (!Init::isLoggedIn()) { + Util::logout(); } } - protected function invalidAction() - { - $this->jsonResponse->setDescription(_('Acción Inválida')); - Json::returnJson($this->jsonResponse); - } - /** * Realizar la acción solicitada en la la petición HTTP * diff --git a/inc/SP/Controller/RequestControllerTrait.class.php b/inc/SP/Controller/RequestControllerTrait.class.php new file mode 100644 index 00000000..56f96d62 --- /dev/null +++ b/inc/SP/Controller/RequestControllerTrait.class.php @@ -0,0 +1,113 @@ +. + */ + +namespace SP\Controller; + +use SP\Core\Init; +use SP\Core\SessionUtil; +use SP\Http\JsonResponse; +use SP\Http\Request; +use SP\Util\Json; + +/** + * Class RequestControllerTrait + * + * @package SP\Controller + */ +trait RequestControllerTrait +{ + /** + * @var int + */ + protected $actionId; + /** + * @var int + */ + protected $itemId; + /** + * @var int + */ + protected $activeTab; + /** + * @var JsonResponse + */ + protected $jsonResponse; + /** + * @var string + */ + protected $sk; + + /** + * inicializar las propiedades + */ + protected function init() + { + $this->jsonResponse = new JsonResponse(); + + $this->checkSession(); + $this->analyzeRequest(); + $this->preActionChecks(); + } + + /** + * Analizar la petición HTTP y establecer las propiedades del elemento + */ + protected function analyzeRequest() + { + $this->sk = Request::analyze('sk'); + $this->actionId = Request::analyze('actionId', 0); + $this->itemId = Request::analyze('itemId', 0); + $this->activeTab = Request::analyze('activeTab', 0); + } + + /** + * Comprobaciones antes de realizar una acción + */ + protected function preActionChecks() + { + if (!$this->sk || !SessionUtil::checkSessionKey($this->sk) || !$this->actionId) { + $this->invalidAction(); + } + } + + protected function invalidAction() + { + $this->jsonResponse->setDescription(_('Acción Inválida')); + Json::returnJson($this->jsonResponse); + } + + /** + * Comprobar si la sesión está activa + * + * @throws \SP\Core\Exceptions\SPException + */ + protected function checkSession() + { + if (!Init::isLoggedIn()) { + $this->jsonResponse->setDescription(_('La sesión no se ha iniciado o ha caducado')); + $this->jsonResponse->setStatus(10); + Json::returnJson($this->jsonResponse); + } + } +} \ No newline at end of file diff --git a/inc/SP/Mgmt/Users/UserLdapSync.class.php b/inc/SP/Mgmt/Users/UserLdapSync.class.php index 9ff50ba6..b7e8e5e5 100644 --- a/inc/SP/Mgmt/Users/UserLdapSync.class.php +++ b/inc/SP/Mgmt/Users/UserLdapSync.class.php @@ -36,7 +36,7 @@ class UserLdapSync $Ldap = Config::getConfig()->isLdapAds() ? new LdapMsAds() : new LdapStd(); $ldapObjects = $Ldap->findObjects(); - self::$totalObjects = count($ldapObjects); + self::$totalObjects = (int)$ldapObjects['count']; $Log->addDescription(sprintf(_('Objetos encontrados: %s'), self::$totalObjects)); @@ -58,6 +58,7 @@ class UserLdapSync break; case 'login': case 'samaccountname': + case 'uid': $User->setUserLogin(strtolower($value)); break; case 'mail': diff --git a/js/app-actions.min.js b/js/app-actions.min.js index 44be5430..6ebbd02a 100644 --- a/js/app-actions.min.js +++ b/js/app-actions.min.js @@ -1,33 +1,34 @@ -var $jscomp={scope:{},findInternal:function(c,d,g){c instanceof String&&(c=String(c));for(var e=c.length,f=0;f";alertify.okBtn(c.config().LANG[43]).cancelBtn(c.config().LANG[44]).confirm(b,function(b){b=c.appRequests().getRequestOpts();b.url=e.account.save;b.data={itemId:a.data("item-id"),actionId:a.data("action-id"),sk:c.sk.get()};c.appRequests().getActionCall(b,function(a){c.msg.out(a);k.search()})},function(a){a.preventDefault();alertify.error(c.config().LANG[44])})},showpass:function(a){d.info("account:showpass");var b=c.appRequests().getRequestOpts(); -b.url=e.account.showPass;b.data={itemId:a.data("item-id"),isHistory:a.data("history"),isFull:a.data("full"),isAjax:1};c.appRequests().getActionCall(b,function(a){if(10===a.status)p.logout();else{var b;$("
").dialog({modal:!0,title:c.config().LANG[47],width:"auto",open:function(){b=$(this);var h,d="";h='";var e='",d=a.useimage,f='

'+a.acclogin+"

";0===a.status?(0===d?d='

'+a.accpass+"

":(d='',e=""),h=f+d+'
'+h+e+"
"):(h=''+a.description+"",b.dialog("option","buttons",[{text:"Ok",icons:{primary:"ui-icon-close"},click:function(){b.dialog("close")}}]));b.html(h);b.dialog("option","position","center");b.parent().on("mouseleave",function(){clearTimeout(g);g=setTimeout(function(){b.dialog("close")},3E4)})},close:function(){clearTimeout(g);b.dialog("destroy")}})}})},copypass:function(a){d.info("account:copypass"); -var b=c.appRequests().getRequestOpts();b.url=e.account.showPass;b.async=!1;b.data={itemId:a.data("item-id"),isHistory:a.data("history"),isAjax:1};return c.appRequests().getActionCall(b)},copy:function(a){d.info("account:copy");f({actionId:a.data("action-id"),itemId:a.data("item-id")})},savefavorite:function(a,b){d.info("account:saveFavorite");var h="on"===a.data("status"),f={actionId:h?a.data("action-id-off"):a.data("action-id-on"),itemId:a.data("item-id"),sk:c.sk.get(),isAjax:1},g=c.appRequests().getRequestOpts(); -g.url=e.account.saveFavorite;g.data=f;c.appRequests().getActionCall(g,function(d){c.msg.out(d);0===d.status&&(a.data("status",h?"off":"on"),"function"===typeof b&&b())})},request:function(a){d.info("account:request");var b=c.appRequests().getRequestOpts();b.url=e.account.request;b.data=a.serialize();c.appRequests().getActionCall(b,function(a){c.msg.out(a)})},menu:function(a){a.hide();a.parent().children(".actions-optional").show(250)},sort:function(a){d.info("account:sort");var c=$("#frmSearch"); -c.find('input[name="skey"]').val(a.data("key"));c.find('input[name="sorder"]').val(a.data("dir"));c.find('input[name="start"]').val(a.data("start"));k.search()},editpass:function(a){d.info("account:editpass");f({actionId:a.data("action-id"),itemId:a.data("item-id")})},restore:function(a){d.info("account:restore");k.save(a)},getfiles:function(a){d.info("account:getfiles");var b=c.appRequests().getRequestOpts();b.method="get";b.type="html";b.url=e.account.getFiles;b.data={id:a.data("item-id"),del:a.data("delete"), -sk:c.sk.get()};c.appRequests().getActionCall(b,function(c){a.html(c)})},search:function(){d.info("account:search");var a=$("#frmSearch");a.find("input[name='sk']").val(c.sk.get());a.find("input[name='skey']").val();a.find("input[name='sorder']").val();var b=c.appRequests().getRequestOpts();b.url=e.account.search;b.data=a.serialize();c.appRequests().getActionCall(b,function(b){10===b.status&&c.msg.out(b);c.sk.set(b.sk);$("#res-content").empty().html(b.html);a.find("input:first").focus()})},save:function(a){d.info("account:save"); -var b=c.appRequests().getRequestOpts();b.url=e.account.save;b.data=a.serialize();c.appRequests().getActionCall(b,function(a){c.msg.out(a)})}},l={refreshTab:!0,show:function(a){d.info("appMgmt:show");a.data("item-dst")&&(l.refreshTab=!1);var b=c.appRequests().getRequestOpts();b.url=e.appMgmt.show;b.data={itemId:a.data("item-id"),actionId:a.data("action-id"),activeTab:a.data("activetab"),sk:c.sk.get(),isAjax:1};c.appRequests().getActionCall(b,function(b){0!==b.status?c.msg.out(b):n(a,b.data.html)})}, -"delete":function(a){d.info("appMgmt:delete");var b='

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

";alertify.okBtn(c.config().LANG[43]).cancelBtn(c.config().LANG[44]).confirm(b,function(b){b.preventDefault();b=c.appRequests().getRequestOpts();b.url=e.appMgmt.save;b.data={itemId:a.data("item-id"),actionId:a.data("action-id"),sk:c.sk.get(),isAjax:1};c.appRequests().getActionCall(b,function(b){c.msg.out(b);a.data("nextaction-id")&&f({actionId:a.data("nextaction-id"),itemId:a.data("activetab")})})}, -function(a){a.preventDefault();c.msg.error(c.config().LANG[44])})},save:function(a){d.info("appMgmt:save");var b=c.appRequests().getRequestOpts();b.url=e.appMgmt.save;b.data=a.serialize();c.appRequests().getActionCall(b,function(b){c.msg.out(b);0===b.status&&(!0===l.refreshTab&&f({actionId:a.data("nextaction-id"),itemId:a.data("activetab")}),l.refreshTab=!0,$.fancybox.close())})},search:function(a){d.info("appMgmt:search");var b=$(a.data("target")),h=c.appRequests().getRequestOpts();h.url=e.appMgmt.search; -h.data=a.serialize();c.appRequests().getActionCall(h,function(a){0===a.status?b.html(a.data.html):b.html(c.msg.html.error(a.description));c.sk.set(a.csrf)})},nav:function(a){d.info("appMgmt:nav");var b=$("#"+a.data("action-form"));b.find("[name='start']").val(a.data("start"));b.find("[name='count']").val(a.data("count"));b.find("[name='sk']").val(c.sk.get());l.search(b)}};return{doAction:f,appMgmt:l,account:k,file:{view:function(a){d.info("file:view");var b=c.appRequests().getRequestOpts();b.url= -e.file;b.type="html";b.data={fileId:a.data("item-id"),sk:c.sk.get(),actionId:a.data("action-id")};c.appRequests().getActionCall(b,function(b){"undefined"!==typeof b.status&&1===b.status?c.msg.out(b):b?n(a,b):c.msg.error(c.config().LANG[14])})},download:function(a){d.info("file:download");a={fileId:a.data("item-id"),sk:c.sk.get(),actionId:a.data("action-id")};$.fileDownload(c.config().APP_ROOT+e.file,{httpMethod:"POST",data:a})},"delete":function(a){d.info("file:delete");var b='

'+ -c.config().LANG[15]+"

";alertify.okBtn(c.config().LANG[43]).cancelBtn(c.config().LANG[44]).confirm(b,function(b){b=c.appRequests().getRequestOpts();b.url=e.file;b.data={fileId:a.data("item-id"),actionId:a.data("action-id"),sk:c.sk.get()};c.appRequests().getActionCall(b,function(a){c.msg.out(a);0===a.status&&(a=$("#list-account-files"),k.getfiles(a))})},function(a){a.preventDefault();alertify.error(c.config().LANG[44])})}},checks:{ldap:function(a){d.info("checks:ldap");a=$(a.data("src")); -a.find("[name='sk']").val(c.sk.get());var b=c.appRequests().getRequestOpts();b.url=e.checks;b.data=a.serialize();c.appRequests().getActionCall(b,function(a){c.msg.out(a)})},wiki:function(a){d.info("checks:wiki");a=$(a.data("src"));a.find("[name='sk']").val(c.sk.get());var b=c.appRequests().getRequestOpts();b.url=e.checks;b.data=a.serialize();c.appRequests().getActionCall(b,function(a){c.msg.out(a);0===a.status&&$("#dokuWikiResCheck").html(a.data)})}},config:{save:function(a){d.info("config:save"); -var b=c.appRequests().getRequestOpts();b.url=e.config.save;b.data=a.serialize();c.appRequests().getActionCall(b,function(b){c.msg.out(b);0===b.status&&"undefined"!==typeof a.data("nextaction-id")&&f({actionId:a.data("nextaction-id"),itemId:a.data("activetab")})})},backup:function(a){d.info("config:backup");var b=c.appRequests().getRequestOpts();b.url=e.config["export"];b.data=a.serialize();c.appRequests().getActionCall(b,function(b){c.msg.out(b);0===b.status&&"undefined"!==typeof a.data("nextaction-id")&& -f({actionId:a.data("nextaction-id"),itemId:a.data("activetab")})})},"export":function(a){d.info("config:export");var b=c.appRequests().getRequestOpts();b.url=e.config["export"];b.data=a.serialize();c.appRequests().getActionCall(b,function(b){c.msg.out(b);0===b.status&&"undefined"!==typeof a.data("nextaction-id")&&f({actionId:a.data("nextaction-id"),itemId:a.data("activetab")})})},"import":function(a){d.info("config:import");var b=c.appRequests().getRequestOpts();b.url=e.config["import"];b.data=a.serialize(); -c.appRequests().getActionCall(b,function(b){c.msg.out(b);0===b.status&&"undefined"!==typeof a.data("nextaction-id")&&f({actionId:a.data("nextaction-id"),itemId:a.data("activetab")})})}},main:p,user:{savePreferences:function(a){d.info("user:savePreferences");var b=c.appRequests().getRequestOpts();b.url=e.user.savePreferences;b.data=a.serialize();c.appRequests().getActionCall(b,function(a){c.msg.out(a);setTimeout(function(){window.location.replace("index.php")},2E3)})},saveSecurity:function(a){d.info("user:saveSecurity"); -var b=c.appRequests().getRequestOpts();b.url=e.user.savePreferences;b.data=a.serialize();c.appRequests().getActionCall(b,function(b){c.msg.out(b);f({actionId:a.data("nextaction-id"),itemId:a.data("activetab")})})},password:function(a){d.info("user:password");var b=c.appRequests().getRequestOpts();b.type="html";b.method="get";b.url=e.user.password;b.data={actionId:a.data("action-id"),itemId:a.data("item-id"),sk:a.data("sk"),isAjax:1};c.appRequests().getActionCall(b,function(b){0===b.length?p.logout(): -n(a,b)})},passreset:function(a){d.info("user:passreset");var b=c.appRequests().getRequestOpts();b.url=e.user.passreset;b.data=a.serialize();c.appRequests().getActionCall(b,function(a){c.msg.out(a)})}},link:{save:function(a){d.info("link:save");var b=c.appRequests().getRequestOpts();b.url=e.link;b.data={itemId:a.data("item-id"),actionId:a.data("action-id"),sk:c.sk.get(),isAjax:1};alertify.okBtn(c.config().LANG[40]).cancelBtn(c.config().LANG[41]).confirm(c.config().LANG[48],function(a){a.preventDefault(); -b.data.notify=1;c.appRequests().getActionCall(b,function(a){c.msg.out(a)})},function(a){a.preventDefault();c.appRequests().getActionCall(b,function(a){c.msg.out(a)})})},refresh:function(a){d.info("link:refresh");a={itemId:a.data("item-id"),actionId:a.data("action-id"),sk:c.sk.get(),activeTab:a.data("activetab")};var b=c.appRequests().getRequestOpts();b.url=e.link;b.data=a;c.appRequests().getActionCall(b,function(a){c.msg.out(a)})}},eventlog:{nav:function(a){if("undefined"===typeof a.data("start"))return!1; -var b=c.appRequests().getRequestOpts();b.url=e.eventlog;b.type="html";b.data={start:a.data("start"),current:a.data("current")};c.appRequests().getActionCall(b,function(a){$("#content").html(a);c.scrollUp()})},clear:function(a){var b='

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

";alertify.okBtn(c.config().LANG[43]).cancelBtn(c.config().LANG[44]).confirm(b,function(b){b.preventDefault();b=c.appRequests().getRequestOpts();b.url=e.eventlog;b.data={clear:1,sk:c.sk.get(),isAjax:1}; -c.appRequests().getActionCall(b,function(b){c.msg.out(b);0==b.status&&f({actionId:a.data("nextaction-id")})})},function(a){a.preventDefault();c.msg.error(c.config().LANG[44])})}},ajaxUrl:e}}; +var $jscomp={scope:{},findInternal:function(b,d,g){b instanceof String&&(b=String(b));for(var e=b.length,f=0;f";alertify.okBtn(b.config().LANG[43]).cancelBtn(b.config().LANG[44]).confirm(a,function(a){a=b.appRequests().getRequestOpts();a.url=e.account.save;a.data={itemId:c.data("item-id"),actionId:c.data("action-id"),sk:b.sk.get()};b.appRequests().getActionCall(a,function(c){b.msg.out(c);k.search()})},function(c){c.preventDefault();alertify.error(b.config().LANG[44])})},showpass:function(c){d.info("account:showpass");var a=b.appRequests().getRequestOpts(); +a.url=e.account.showPass;a.data={itemId:c.data("item-id"),isHistory:c.data("history"),isFull:c.data("full"),isAjax:1};b.appRequests().getActionCall(a,function(c){if(10===c.status)p.logout();else{var a;$("
").dialog({modal:!0,title:b.config().LANG[47],width:"auto",open:function(){a=$(this);var h,d="";h='";var e='",d=c.useimage,f='

'+c.acclogin+"

";0===c.status?(0===d?d='

'+c.accpass+"

":(d='',e=""),h=f+d+'
'+h+e+"
"):(h=''+c.description+"",a.dialog("option","buttons",[{text:"Ok",icons:{primary:"ui-icon-close"},click:function(){a.dialog("close")}}]));a.html(h);a.dialog("option","position","center");a.parent().on("mouseleave",function(){clearTimeout(g);g=setTimeout(function(){a.dialog("close")},3E4)})},close:function(){clearTimeout(g);a.dialog("destroy")}})}})},copypass:function(c){d.info("account:copypass"); +var a=b.appRequests().getRequestOpts();a.url=e.account.showPass;a.async=!1;a.data={itemId:c.data("item-id"),isHistory:c.data("history"),isAjax:1};return b.appRequests().getActionCall(a)},copy:function(b){d.info("account:copy");f({actionId:b.data("action-id"),itemId:b.data("item-id")})},savefavorite:function(c,a){d.info("account:saveFavorite");var h="on"===c.data("status"),f={actionId:h?c.data("action-id-off"):c.data("action-id-on"),itemId:c.data("item-id"),sk:b.sk.get(),isAjax:1},g=b.appRequests().getRequestOpts(); +g.url=e.account.saveFavorite;g.data=f;b.appRequests().getActionCall(g,function(d){b.msg.out(d);0===d.status&&(c.data("status",h?"off":"on"),"function"===typeof a&&a())})},request:function(c){d.info("account:request");var a=b.appRequests().getRequestOpts();a.url=e.account.request;a.data=c.serialize();b.appRequests().getActionCall(a,function(c){b.msg.out(c)})},menu:function(b){b.hide();b.parent().children(".actions-optional").show(250)},sort:function(b){d.info("account:sort");var c=$("#frmSearch"); +c.find('input[name="skey"]').val(b.data("key"));c.find('input[name="sorder"]').val(b.data("dir"));c.find('input[name="start"]').val(b.data("start"));k.search()},editpass:function(b){d.info("account:editpass");f({actionId:b.data("action-id"),itemId:b.data("item-id")})},restore:function(b){d.info("account:restore");k.save(b)},getfiles:function(c){d.info("account:getfiles");var a=b.appRequests().getRequestOpts();a.method="get";a.type="html";a.url=e.account.getFiles;a.data={id:c.data("item-id"),del:c.data("delete"), +sk:b.sk.get()};b.appRequests().getActionCall(a,function(b){c.html(b)})},search:function(){d.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();var a=b.appRequests().getRequestOpts();a.url=e.account.search;a.data=c.serialize();b.appRequests().getActionCall(a,function(a){10===a.status&&b.msg.out(a);b.sk.set(a.sk);$("#res-content").empty().html(a.html);c.find("input:first").focus()})},save:function(c){d.info("account:save"); +var a=b.appRequests().getRequestOpts();a.url=e.account.save;a.data=c.serialize();b.appRequests().getActionCall(a,function(c){b.msg.out(c)})}},l={refreshTab:!0,show:function(c){d.info("appMgmt:show");c.data("item-dst")&&(l.refreshTab=!1);var a=b.appRequests().getRequestOpts();a.url=e.appMgmt.show;a.data={itemId:c.data("item-id"),actionId:c.data("action-id"),activeTab:c.data("activetab"),sk:b.sk.get(),isAjax:1};b.appRequests().getActionCall(a,function(a){0!==a.status?b.msg.out(a):n(c,a.data.html)})}, +"delete":function(c){d.info("appMgmt:delete");var a='

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

";alertify.okBtn(b.config().LANG[43]).cancelBtn(b.config().LANG[44]).confirm(a,function(a){a.preventDefault();a=b.appRequests().getRequestOpts();a.url=e.appMgmt.save;a.data={itemId:c.data("item-id"),actionId:c.data("action-id"),sk:b.sk.get(),isAjax:1};b.appRequests().getActionCall(a,function(a){b.msg.out(a);c.data("nextaction-id")&&f({actionId:c.data("nextaction-id"),itemId:c.data("activetab")})})}, +function(c){c.preventDefault();b.msg.error(b.config().LANG[44])})},save:function(c){d.info("appMgmt:save");var a=b.appRequests().getRequestOpts();a.url=e.appMgmt.save;a.data=c.serialize();b.appRequests().getActionCall(a,function(a){b.msg.out(a);0===a.status&&(!0===l.refreshTab&&f({actionId:c.data("nextaction-id"),itemId:c.data("activetab")}),l.refreshTab=!0,$.fancybox.close())})},search:function(c){d.info("appMgmt:search");var a=$(c.data("target")),h=b.appRequests().getRequestOpts();h.url=e.appMgmt.search; +h.data=c.serialize();b.appRequests().getActionCall(h,function(c){0===c.status?a.html(c.data.html):a.html(b.msg.html.error(c.description));b.sk.set(c.csrf)})},nav:function(c){d.info("appMgmt:nav");var a=$("#"+c.data("action-form"));a.find("[name='start']").val(c.data("start"));a.find("[name='count']").val(c.data("count"));a.find("[name='sk']").val(b.sk.get());l.search(a)},ldapSync:function(c){d.info("appMgmt:ldapSync");var a='

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

";alertify.okBtn(b.config().LANG[43]).cancelBtn(b.config().LANG[44]).confirm(a, +function(a){a=b.appRequests().getRequestOpts();a.url=e.appMgmt.save;a.data={actionId:c.data("action-id"),sk:b.sk.get(),isAjax:1};b.appRequests().getActionCall(a,function(c){b.msg.out(c)})},function(c){c.preventDefault();alertify.error(b.config().LANG[44])})}};return{doAction:f,appMgmt:l,account:k,file:{view:function(c){d.info("file:view");var a=b.appRequests().getRequestOpts();a.url=e.file;a.type="html";a.data={fileId:c.data("item-id"),sk:b.sk.get(),actionId:c.data("action-id")};b.appRequests().getActionCall(a, +function(a){"undefined"!==typeof a.status&&1===a.status?b.msg.out(a):a?n(c,a):b.msg.error(b.config().LANG[14])})},download:function(c){d.info("file:download");c={fileId:c.data("item-id"),sk:b.sk.get(),actionId:c.data("action-id")};$.fileDownload(b.config().APP_ROOT+e.file,{httpMethod:"POST",data:c})},"delete":function(c){d.info("file:delete");var a='

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

";alertify.okBtn(b.config().LANG[43]).cancelBtn(b.config().LANG[44]).confirm(a,function(a){a= +b.appRequests().getRequestOpts();a.url=e.file;a.data={fileId:c.data("item-id"),actionId:c.data("action-id"),sk:b.sk.get()};b.appRequests().getActionCall(a,function(a){b.msg.out(a);0===a.status&&(a=$("#list-account-files"),k.getfiles(a))})},function(a){a.preventDefault();alertify.error(b.config().LANG[44])})}},checks:{ldap:function(c){d.info("checks:ldap");c=$(c.data("src"));c.find("[name='sk']").val(b.sk.get());var a=b.appRequests().getRequestOpts();a.url=e.checks;a.data=c.serialize();b.appRequests().getActionCall(a, +function(a){b.msg.out(a)})},wiki:function(c){d.info("checks:wiki");c=$(c.data("src"));c.find("[name='sk']").val(b.sk.get());var a=b.appRequests().getRequestOpts();a.url=e.checks;a.data=c.serialize();b.appRequests().getActionCall(a,function(a){b.msg.out(a);0===a.status&&$("#dokuWikiResCheck").html(a.data)})}},config:{save:function(c){d.info("config:save");var a=b.appRequests().getRequestOpts();a.url=e.config.save;a.data=c.serialize();b.appRequests().getActionCall(a,function(a){b.msg.out(a);0===a.status&& +"undefined"!==typeof c.data("nextaction-id")&&f({actionId:c.data("nextaction-id"),itemId:c.data("activetab")})})},backup:function(c){d.info("config:backup");var a=b.appRequests().getRequestOpts();a.url=e.config["export"];a.data=c.serialize();b.appRequests().getActionCall(a,function(a){b.msg.out(a);0===a.status&&"undefined"!==typeof c.data("nextaction-id")&&f({actionId:c.data("nextaction-id"),itemId:c.data("activetab")})})},"export":function(c){d.info("config:export");var a=b.appRequests().getRequestOpts(); +a.url=e.config["export"];a.data=c.serialize();b.appRequests().getActionCall(a,function(a){b.msg.out(a);0===a.status&&"undefined"!==typeof c.data("nextaction-id")&&f({actionId:c.data("nextaction-id"),itemId:c.data("activetab")})})},"import":function(c){d.info("config:import");var a=b.appRequests().getRequestOpts();a.url=e.config["import"];a.data=c.serialize();b.appRequests().getActionCall(a,function(a){b.msg.out(a);0===a.status&&"undefined"!==typeof c.data("nextaction-id")&&f({actionId:c.data("nextaction-id"), +itemId:c.data("activetab")})})}},main:p,user:{savePreferences:function(c){d.info("user:savePreferences");var a=b.appRequests().getRequestOpts();a.url=e.user.savePreferences;a.data=c.serialize();b.appRequests().getActionCall(a,function(a){b.msg.out(a);setTimeout(function(){window.location.replace("index.php")},2E3)})},saveSecurity:function(c){d.info("user:saveSecurity");var a=b.appRequests().getRequestOpts();a.url=e.user.savePreferences;a.data=c.serialize();b.appRequests().getActionCall(a,function(a){b.msg.out(a); +f({actionId:c.data("nextaction-id"),itemId:c.data("activetab")})})},password:function(c){d.info("user:password");var a=b.appRequests().getRequestOpts();a.type="html";a.method="get";a.url=e.user.password;a.data={actionId:c.data("action-id"),itemId:c.data("item-id"),sk:c.data("sk"),isAjax:1};b.appRequests().getActionCall(a,function(a){0===a.length?p.logout():n(c,a)})},passreset:function(c){d.info("user:passreset");var a=b.appRequests().getRequestOpts();a.url=e.user.passreset;a.data=c.serialize();b.appRequests().getActionCall(a, +function(a){b.msg.out(a)})}},link:{save:function(c){d.info("link:save");var a=b.appRequests().getRequestOpts();a.url=e.link;a.data={itemId:c.data("item-id"),actionId:c.data("action-id"),sk:b.sk.get(),isAjax:1};alertify.okBtn(b.config().LANG[40]).cancelBtn(b.config().LANG[41]).confirm(b.config().LANG[48],function(c){c.preventDefault();a.data.notify=1;b.appRequests().getActionCall(a,function(a){b.msg.out(a)})},function(c){c.preventDefault();b.appRequests().getActionCall(a,function(a){b.msg.out(a)})})}, +refresh:function(c){d.info("link:refresh");c={itemId:c.data("item-id"),actionId:c.data("action-id"),sk:b.sk.get(),activeTab:c.data("activetab")};var a=b.appRequests().getRequestOpts();a.url=e.link;a.data=c;b.appRequests().getActionCall(a,function(a){b.msg.out(a)})}},eventlog:{nav:function(c){if("undefined"===typeof c.data("start"))return!1;var a=b.appRequests().getRequestOpts();a.url=e.eventlog;a.type="html";a.data={start:c.data("start"),current:c.data("current")};b.appRequests().getActionCall(a, +function(a){$("#content").html(a);b.scrollUp()})},clear:function(c){var a='

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

";alertify.okBtn(b.config().LANG[43]).cancelBtn(b.config().LANG[44]).confirm(a,function(a){a.preventDefault();a=b.appRequests().getRequestOpts();a.url=e.eventlog;a.data={clear:1,sk:b.sk.get(),isAjax:1};b.appRequests().getActionCall(a,function(a){b.msg.out(a);0==a.status&&f({actionId:c.data("nextaction-id")})})},function(a){a.preventDefault();b.msg.error(b.config().LANG[44])})}}, +ajaxUrl:e}};