From 49e299fbcc83f07015352f873c4b6e05d4bba0af Mon Sep 17 00:00:00 2001 From: Victor Saisa Lopez Date: Fri, 18 Mar 2016 16:49:33 -0400 Subject: [PATCH] HOR-474 "Asignacion de un rol a usuarios tarda demasiado " SOLVED Issue: Asignacion de un rol a usuarios tarda demasiado Cause: Los metodos Roles::getRoleUsers() y Roles::getAllUsers() no son optimos Solution: - Se a mejorado el metodo \ProcessMaker\BusinessModel\Role\User::getUsers() (Back-End) - Se agrego el pager a los grids en ADMIN>Users>Roles>Users (Front-End) HOR-474 "Asignacion de un rol a usuarios tarda demasiado " SOLVED Issue: Asignacion de un rol a usuarios tarda demasiado Cause: Los metodos Roles::getRoleUsers() y Roles::getAllUsers() no son optimos Solution: - Se a mejorado el metodo \ProcessMaker\BusinessModel\Role\User::getUsers() (Back-End) - Se agrego el pager a los grids en ADMIN>Users>Roles>Users (Front-End) HOR-474 "Asignacion de un rol a usuarios tarda demasiado " SOLVED Issue: Asignacion de un rol a usuarios tarda demasiado Cause: Los metodos Roles::getRoleUsers() y Roles::getAllUsers() no son optimos Solution: - Se a mejorado el metodo \ProcessMaker\BusinessModel\Role\User::getUsers() (Back-End) - Se agrego el pager a los grids en ADMIN>Users>Roles>Users (Front-End) --- gulliver/system/class.rbac.php | 4 +- rbac/engine/classes/model/Roles.php | 78 +------ .../engine/methods/roles/data_rolesUsers.php | 58 +++-- .../methods/roles/rolesUsersPermission.php | 7 + .../src/ProcessMaker/BusinessModel/Cases.php | 20 +- .../ProcessMaker/BusinessModel/Role/User.php | 153 +++++++------- .../ProcessMaker/Services/Api/Role/User.php | 8 +- .../templates/roles/rolesUsersPermission.js | 198 +++++++++++++++--- 8 files changed, 288 insertions(+), 238 deletions(-) diff --git a/gulliver/system/class.rbac.php b/gulliver/system/class.rbac.php index f3634a594..8ffcb6fde 100755 --- a/gulliver/system/class.rbac.php +++ b/gulliver/system/class.rbac.php @@ -788,7 +788,7 @@ class RBAC */ public function getRoleUsers ($ROL_UID, $filter = '') { - return $this->rolesObj->getRoleUsers( $ROL_UID, $filter ); + throw new Exception(__METHOD__ . ': The method is deprecated'); } /** @@ -859,7 +859,7 @@ class RBAC */ public function getAllUsers ($ROL_UID, $filter = '') { - return $this->rolesObj->getAllUsers( $ROL_UID, $filter ); + throw new Exception(__METHOD__ . ': The method is deprecated'); } /** diff --git a/rbac/engine/classes/model/Roles.php b/rbac/engine/classes/model/Roles.php index d789b82cd..282833d4f 100755 --- a/rbac/engine/classes/model/Roles.php +++ b/rbac/engine/classes/model/Roles.php @@ -398,85 +398,11 @@ class Roles extends BaseRoles { } function getRoleUsers($ROL_UID, $filter='') { - try { - $criteria = new Criteria(); - $criteria->addSelectColumn(RolesPeer::ROL_UID); - $criteria->addSelectColumn(RolesPeer::ROL_PARENT); - $criteria->addSelectColumn(RolesPeer::ROL_SYSTEM); - $criteria->addSelectColumn(RolesPeer::ROL_CODE); - $criteria->addSelectColumn(RolesPeer::ROL_CREATE_DATE); - $criteria->addSelectColumn(RolesPeer::ROL_UPDATE_DATE); - $criteria->addSelectColumn(RolesPeer::ROL_STATUS); - $criteria->addSelectColumn(RbacUsersPeer::USR_UID); - $criteria->addSelectColumn(RbacUsersPeer::USR_USERNAME); - $criteria->addSelectColumn(RbacUsersPeer::USR_FIRSTNAME); - $criteria->addSelectColumn(RbacUsersPeer::USR_LASTNAME); - $criteria->add(RolesPeer::ROL_UID, "", Criteria::NOT_EQUAL); - $criteria->add(RolesPeer::ROL_UID, $ROL_UID); - - $criteria->add(RbacUsersPeer::USR_STATUS, 0, Criteria::NOT_EQUAL); - - $criteria->addJoin(RolesPeer::ROL_UID, UsersRolesPeer::ROL_UID); - $criteria->addJoin(UsersRolesPeer::USR_UID, RbacUsersPeer::USR_UID); - - if ($filter != ''){ - $criteria->add( - $criteria->getNewCriterion(RbacUsersPeer::USR_USERNAME,'%'.$filter.'%',Criteria::LIKE)->addOr( - $criteria->getNewCriterion(RbacUsersPeer::USR_FIRSTNAME,'%'.$filter.'%',Criteria::LIKE)->addOr( - $criteria->getNewCriterion(RbacUsersPeer::USR_LASTNAME,'%'.$filter.'%',Criteria::LIKE))) - ); - } - - $oDataset = RolesPeer::doSelectRS($criteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - return $oDataset; - - } catch( exception $e ) { - throw $e; - } + throw new Exception(__METHOD__ . ': The method is deprecated'); } function getAllUsers($ROL_UID, $filter='') { - try { - $c = new Criteria(); - $c->addSelectColumn(RbacUsersPeer::USR_UID); - $c->add(RolesPeer::ROL_UID, $ROL_UID); - $c->addJoin(RolesPeer::ROL_UID, UsersRolesPeer::ROL_UID); - $c->addJoin(UsersRolesPeer::USR_UID, RbacUsersPeer::USR_UID); - - $result = RolesPeer::doSelectRS($c); - $result->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $result->next(); - - $a = Array(); - while( $row = $result->getRow() ) { - $a[] = $row['USR_UID']; - $result->next(); - } - - $criteria = new Criteria(); - - $criteria->addSelectColumn(RbacUsersPeer::USR_UID); - $criteria->addSelectColumn(RbacUsersPeer::USR_USERNAME); - $criteria->addSelectColumn(RbacUsersPeer::USR_FIRSTNAME); - $criteria->addSelectColumn(RbacUsersPeer::USR_LASTNAME); - $criteria->add(RbacUsersPeer::USR_STATUS, 1, Criteria::EQUAL); - $criteria->add(RbacUsersPeer::USR_UID, $a, Criteria::NOT_IN); - - if ($filter != ''){ - $criteria->add( - $criteria->getNewCriterion(RbacUsersPeer::USR_USERNAME,'%'.$filter.'%',Criteria::LIKE)->addOr( - $criteria->getNewCriterion(RbacUsersPeer::USR_FIRSTNAME,'%'.$filter.'%',Criteria::LIKE)->addOr( - $criteria->getNewCriterion(RbacUsersPeer::USR_LASTNAME,'%'.$filter.'%',Criteria::LIKE))) - ); - } - - $oDataset = RbacUsersPeer::doSelectRS($criteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - return $oDataset; - } catch( exception $e ) { - throw $e; - } + throw new Exception(__METHOD__ . ': The method is deprecated'); } function assignUserToRole($aData) { diff --git a/workflow/engine/methods/roles/data_rolesUsers.php b/workflow/engine/methods/roles/data_rolesUsers.php index a36458f46..d6b75d4e4 100755 --- a/workflow/engine/methods/roles/data_rolesUsers.php +++ b/workflow/engine/methods/roles/data_rolesUsers.php @@ -1,42 +1,32 @@ . - * - * For more information, contact Colosa Inc, 2566 Le Jeune Rd., - * Coral Gables, FL, 33134, USA, or email info@colosa.com. - */ +$response = []; -$ROL_UID = $_GET['rUID']; -$TYPE_DATA = $_GET["type"]; +try { + $option = $_POST['option']; + $roleUid = $_POST['roleUid']; -global $RBAC; + $pageSize = $_POST['pageSize']; + $filter = $_POST['filter']; -$filter = (isset( $_REQUEST['textFilter'] )) ? $_REQUEST['textFilter'] : ''; + $sortField = (isset($_POST['sort']))? $_POST['sort']: 'USR_FIRSTNAME'; + $sortDir = (isset($_POST['dir']))? $_POST['dir']: 'ASC'; + $start = (isset($_POST['start']))? $_POST['start']: 0; + $limit = (isset($_POST['limit']))? $_POST['limit']: $pageSize; -if ($TYPE_DATA == 'list') - $oDataset = $RBAC->getRoleUsers( $ROL_UID, $filter ); -if ($TYPE_DATA == 'show') - $oDataset = $RBAC->getAllUsers( $ROL_UID, $filter ); + $roleUser = new \ProcessMaker\BusinessModel\Role\User(); -$rows = Array (); -while ($oDataset->next()) { - $rows[] = $oDataset->getRow(); + $result = $roleUser->getUsers( + $roleUid, $option, ['filter' => $filter, 'filterOption' => ''], $sortField, $sortDir, $start, $limit + ); + + $response['status'] = 'OK'; + $response['success'] = true; + $response['resultTotal'] = $result['total']; + $response['resultRoot'] = $result['data']; +} catch (Exception $e) { + $response['status'] = 'ERROR'; + $response['message'] = $e->getMessage(); } -echo '{users: ' . G::json_encode( $rows ) . '}'; + +echo G::json_encode($response); diff --git a/workflow/engine/methods/roles/rolesUsersPermission.php b/workflow/engine/methods/roles/rolesUsersPermission.php index 5d07eecf9..5dba0985d 100755 --- a/workflow/engine/methods/roles/rolesUsersPermission.php +++ b/workflow/engine/methods/roles/rolesUsersPermission.php @@ -48,8 +48,15 @@ $G_ID_SUB_MENU_SELECTED = 'ROLES'; $G_PUBLISH = new Publisher(); +$configuration = new Configurations(); +$arrayConfigPage = $configuration->getConfiguration('roleUsersPermissionsList', 'pageSize', null, $_SESSION['USER_LOGGED']); + +$arrayConfig = []; +$arrayConfig['pageSize'] = (isset($arrayConfigPage['pageSize']))? $arrayConfigPage['pageSize'] : 20; + $oHeadPublisher = & headPublisher::getSingleton(); $oHeadPublisher->assign("PARTNER_FLAG", (defined('PARTNER_FLAG')) ? PARTNER_FLAG : false); +$oHeadPublisher->assign('CONFIG', $arrayConfig); $oHeadPublisher->addExtJsScript( 'roles/rolesUsersPermission', false ); //adding a javascript file .js $oHeadPublisher->addContent( 'roles/rolesUsersPermission' ); //adding a html file .html. diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php b/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php index cdfa9fd8b..9192cd850 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php @@ -2694,30 +2694,22 @@ class Cases } //Number records total - $criteriaCount = clone $criteria; - - $criteriaCount->clearSelectColumns(); - $criteriaCount->addSelectColumn('COUNT(' . \UsersPeer::USR_UID . ') AS NUM_REC'); - - $rsCriteriaCount = \UsersPeer::doSelectRS($criteriaCount); - $rsCriteriaCount->setFetchmode(\ResultSet::FETCHMODE_ASSOC); - - $result = $rsCriteriaCount->next(); - $row = $rsCriteriaCount->getRow(); - - $numRecTotal = (int)($row['NUM_REC']); + $numRecTotal = \UsersPeer::doCount($criteria); //Query + $conf = new \Configurations(); + $sortFieldDefault = \UsersPeer::TABLE_NAME . '.' . $conf->userNameFormatGetFirstFieldByUsersTable(); + if (!is_null($sortField) && trim($sortField) != '') { $sortField = strtoupper($sortField); if (in_array(\UsersPeer::TABLE_NAME . '.' . $sortField, $criteria->getSelectColumns())) { $sortField = \UsersPeer::TABLE_NAME . '.' . $sortField; } else { - $sortField = \UsersPeer::USR_FIRSTNAME; + $sortField = $sortFieldDefault; } } else { - $sortField = \UsersPeer::USR_FIRSTNAME; + $sortField = $sortFieldDefault; } if (!is_null($sortDir) && trim($sortDir) != '' && strtoupper($sortDir) == 'DESC') { diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Role/User.php b/workflow/engine/src/ProcessMaker/BusinessModel/Role/User.php index 0cf9e2040..0825c16f5 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Role/User.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Role/User.php @@ -217,48 +217,6 @@ class User } } - /** - * Get criteria for User - * - * @param string $roleUid Unique id of Role - * @param array $arrayUserUidExclude Unique id of Users to exclude - * - * return object - */ - public function getUserCriteria($roleUid, array $arrayUserUidExclude = null) - { - try { - $criteria = new \Criteria("rbac"); - - $criteria->addSelectColumn(\RbacUsersPeer::USR_UID); - $criteria->addSelectColumn(\RbacUsersPeer::USR_USERNAME); - $criteria->addSelectColumn(\RbacUsersPeer::USR_FIRSTNAME); - $criteria->addSelectColumn(\RbacUsersPeer::USR_LASTNAME); - $criteria->addSelectColumn(\RbacUsersPeer::USR_STATUS); - - $criteria->addAlias("USR", \RbacUsersPeer::TABLE_NAME); - - $arrayCondition = array(); - $arrayCondition[] = array(\RbacUsersPeer::USR_UID, "USR.USR_UID", \Criteria::EQUAL); - $criteria->addJoinMC($arrayCondition, \Criteria::LEFT_JOIN); - - if ($roleUid != "") { - $criteria->addJoin(\UsersRolesPeer::USR_UID, \RbacUsersPeer::USR_UID, \Criteria::LEFT_JOIN); - $criteria->add(\UsersRolesPeer::ROL_UID, $roleUid, \Criteria::EQUAL); - } - - $criteria->add("USR.USR_USERNAME", "", \Criteria::NOT_EQUAL); - - if (!is_null($arrayUserUidExclude) && is_array($arrayUserUidExclude)) { - $criteria->add(\RbacUsersPeer::USR_UID, $arrayUserUidExclude, \Criteria::NOT_IN); - } - - return $criteria; - } catch (\Exception $e) { - throw $e; - } - } - /** * Get data of a User from a record * @@ -299,7 +257,11 @@ class User try { $arrayUser = array(); - //Verify data + $numRecTotal = 0; + + //Verify data and Set variables + $flagFilter = !is_null($arrayFilterData) && is_array($arrayFilterData) && isset($arrayFilterData['filter']); + $process = new \ProcessMaker\BusinessModel\Process(); $role = new \ProcessMaker\BusinessModel\Role(); @@ -314,56 +276,89 @@ class User $process->throwExceptionIfDataNotMetPagerVarDefinition(array("start" => $start, "limit" => $limit), $this->arrayFieldNameForException); - //Get data - if (!is_null($limit) && $limit . "" == "0") { - return $arrayUser; + //Set variables + $filterName = 'filter'; + + if ($flagFilter) { + $arrayAux = [ + '' => 'filter', + 'LEFT' => 'lfilter', + 'RIGHT' => 'rfilter' + ]; + + $filterName = $arrayAux[ + (isset($arrayFilterData['filterOption']))? $arrayFilterData['filterOption'] : '' + ]; } - //SQL + //Get data + if (!is_null($limit) && (string)($limit) == '0') { + return [ + 'total' => $numRecTotal, + 'start' => (int)((!is_null($start))? $start : 0), + 'limit' => (int)((!is_null($limit))? $limit : 0), + $filterName => ($flagFilter)? $arrayFilterData['filter'] : '', + 'data' => $arrayUser + ]; + } + + //Query + $criteria = new \Criteria('rbac'); + + $criteria->addSelectColumn(\RbacUsersPeer::USR_UID); + $criteria->addSelectColumn(\RbacUsersPeer::USR_USERNAME); + $criteria->addSelectColumn(\RbacUsersPeer::USR_FIRSTNAME); + $criteria->addSelectColumn(\RbacUsersPeer::USR_LASTNAME); + $criteria->addSelectColumn(\RbacUsersPeer::USR_STATUS); + + $criteria->addJoin(\RbacUsersPeer::USR_UID, \UsersRolesPeer::USR_UID, \Criteria::LEFT_JOIN); + + $criteria->add(\RbacUsersPeer::USR_USERNAME, '', \Criteria::NOT_EQUAL); + switch ($option) { case "USERS": - //Criteria - $criteria = $this->getUserCriteria($roleUid); + $criteria->add(\UsersRolesPeer::ROL_UID, $roleUid, \Criteria::EQUAL); break; case "AVAILABLE-USERS": - //Get Uids - $arrayUid = array(); - - $criteria = $this->getUserCriteria($roleUid); - - $rsCriteria = \RbacUsersPeer::doSelectRS($criteria); - $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); - - while ($rsCriteria->next()) { - $row = $rsCriteria->getRow(); - - $arrayUid[] = $row["USR_UID"]; - } - - //Criteria - $criteria = $this->getUserCriteria("", $arrayUid); + $criteria->add(\UsersRolesPeer::ROL_UID, $roleUid, \Criteria::NOT_EQUAL); break; } - if (!is_null($arrayFilterData) && is_array($arrayFilterData) && isset($arrayFilterData["filter"]) && trim($arrayFilterData["filter"]) != "") { + if ($flagFilter && trim($arrayFilterData['filter']) != '') { + $arraySearch = [ + '' => '%' . $arrayFilterData['filter'] . '%', + 'LEFT' => $arrayFilterData['filter'] . '%', + 'RIGHT' => '%' . $arrayFilterData['filter'] + ]; + + $search = $arraySearch[ + (isset($arrayFilterData['filterOption']))? $arrayFilterData['filterOption'] : '' + ]; + $criteria->add( - $criteria->getNewCriterion(\RbacUsersPeer::USR_USERNAME, "%" . $arrayFilterData["filter"] . "%", \Criteria::LIKE)->addOr( - $criteria->getNewCriterion(\RbacUsersPeer::USR_FIRSTNAME, "%" . $arrayFilterData["filter"] . "%", \Criteria::LIKE)->addOr( - $criteria->getNewCriterion(\RbacUsersPeer::USR_LASTNAME, "%" . $arrayFilterData["filter"] . "%", \Criteria::LIKE))) + $criteria->getNewCriterion(\RbacUsersPeer::USR_USERNAME, $search, \Criteria::LIKE)->addOr( + $criteria->getNewCriterion(\RbacUsersPeer::USR_FIRSTNAME, $search, \Criteria::LIKE)->addOr( + $criteria->getNewCriterion(\RbacUsersPeer::USR_LASTNAME, $search, \Criteria::LIKE))) ); } - //SQL - if (!is_null($sortField) && trim($sortField) != "") { + //Number records total + $numRecTotal = \RbacUsersPeer::doCount($criteria); + + //Query + $conf = new \Configurations(); + $sortFieldDefault = \RbacUsersPeer::TABLE_NAME . '.' . $conf->userNameFormatGetFirstFieldByUsersTable(); + + if (!is_null($sortField) && trim($sortField) != '') { $sortField = strtoupper($sortField); - if (in_array($sortField, array("USR_UID", "USR_USERNAME", "USR_FIRSTNAME", "USR_LASTNAME", "USR_STATUS"))) { - $sortField = \RbacUsersPeer::TABLE_NAME . "." . $sortField; + if (in_array(\RbacUsersPeer::TABLE_NAME . '.' . $sortField, $criteria->getSelectColumns())) { + $sortField = \RbacUsersPeer::TABLE_NAME . '.' . $sortField; } else { - $sortField = \RbacUsersPeer::USR_USERNAME; + $sortField = $sortFieldDefault; } } else { - $sortField = \RbacUsersPeer::USR_USERNAME; + $sortField = $sortFieldDefault; } if (!is_null($sortDir) && trim($sortDir) != "" && strtoupper($sortDir) == "DESC") { @@ -390,7 +385,13 @@ class User } //Return - return $arrayUser; + return [ + 'total' => $numRecTotal, + 'start' => (int)((!is_null($start))? $start : 0), + 'limit' => (int)((!is_null($limit))? $limit : 0), + $filterName => ($flagFilter)? $arrayFilterData['filter'] : '', + 'data' => $arrayUser + ]; } catch (\Exception $e) { throw $e; } diff --git a/workflow/engine/src/ProcessMaker/Services/Api/Role/User.php b/workflow/engine/src/ProcessMaker/Services/Api/Role/User.php index 6f6e4a357..6dd793819 100644 --- a/workflow/engine/src/ProcessMaker/Services/Api/Role/User.php +++ b/workflow/engine/src/ProcessMaker/Services/Api/Role/User.php @@ -38,9 +38,13 @@ class User extends Api public function doGetUsers($rol_uid, $filter = null, $start = null, $limit = null) { try { - $response = $this->roleUser->getUsers($rol_uid, (preg_match("/^.*\/users$/", $this->restler->url))? "USERS" : "AVAILABLE-USERS", array("filter" => $filter), null, null, $start, $limit); + $option = (preg_match('/^.*\/users$/', $this->restler->url))? 'USERS' : 'AVAILABLE-USERS'; - return $response; + $response = $this->roleUser->getUsers( + $rol_uid, $option, ['filter' => $filter, 'filterOption' => ''], null, null, $start, $limit + ); + + return $response['data']; } catch (\Exception $e) { throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); } diff --git a/workflow/engine/templates/roles/rolesUsersPermission.js b/workflow/engine/templates/roles/rolesUsersPermission.js index 947b02b86..717cd3b9b 100755 --- a/workflow/engine/templates/roles/rolesUsersPermission.js +++ b/workflow/engine/templates/roles/rolesUsersPermission.js @@ -26,8 +26,6 @@ var storeA; var cmodelP; var smodelA; var smodelP; -var storeU; -var storeX; var cmodelU; var smodelU; var smodelX; @@ -54,6 +52,9 @@ var removeUAllButton; var backButton; var editForm; +var pagingUser; +var pagingAvailableUser; + var sw_func_permissions; var sw_func_users; @@ -83,12 +84,12 @@ GridByDefaultP = function(){ //Function DoSearch Available DoSearchU = function(){ - availableUGrid.store.load({params: {textFilter: searchTextU.getValue()}}); + pagingAvailableUser.moveFirst(); }; //Function DoSearch Assigned DoSearchX = function(){ - assignedUGrid.store.load({params: {textFilter: searchTextX.getValue()}}); + pagingUser.moveFirst(); }; //Load Grid By Default Available Members @@ -149,6 +150,11 @@ CancelEditPermissionsActionU = function(){ Ext.onReady(function(){ + var loadMaskUserPermission = new Ext.LoadMask(Ext.getBody(), {msg: _("ID_LOADING_GRID")}); + + //Variables + var pageSizeU = parseInt(CONFIG.pageSize); + var pageSizeA = parseInt(CONFIG.pageSize); sw_func_permissions = false; sw_func_users = false; @@ -404,34 +410,154 @@ Ext.onReady(function(){ }); - storeU = new Ext.data.GroupingStore({ - proxy : new Ext.data.HttpProxy({ - url: 'data_rolesUsers?rUID=' + ROLES.ROL_UID + '&type=list' - }), - reader : new Ext.data.JsonReader( { - root: 'users', - fields : [ - {name : 'USR_UID'}, - {name : 'USR_USERNAME'}, - {name : 'USR_FIRSTNAME'}, - {name : 'USR_LASTNAME'} - ] - }) + //Stores + var storePageSize = new Ext.data.SimpleStore({ + fields: ["size"], + data: [["20"], ["30"], ["40"], ["50"], ["100"]], + autoLoad: true }); - storeX = new Ext.data.GroupingStore({ - proxy : new Ext.data.HttpProxy({ - url: 'data_rolesUsers?rUID=' + ROLES.ROL_UID + '&type=show' - }), - reader : new Ext.data.JsonReader( { - root: 'users', - fields : [ - {name : 'USR_UID'}, - {name : 'USR_USERNAME'}, - {name : 'USR_FIRSTNAME'}, - {name : 'USR_LASTNAME'} - ] - }) + var storeUser = new Ext.data.Store({ + proxy: new Ext.data.HttpProxy({ + url: "data_rolesUsers", + method: "POST" + }), + + reader: new Ext.data.JsonReader({ + root: "resultRoot", + totalProperty: "resultTotal", + fields: [ + {name: 'USR_UID'}, + {name: 'USR_USERNAME'}, + {name: 'USR_FIRSTNAME'}, + {name: 'USR_LASTNAME'} + ] + }), + + remoteSort: true, + + listeners: { + beforeload: function (store) + { + loadMaskUserPermission.show(); + + this.baseParams = { + "option": "USERS", + "roleUid": ROLES.ROL_UID, + "pageSize": pageSizeU, + "filter": searchTextX.getValue() + }; + }, + load: function (store, record, opt) + { + loadMaskUserPermission.hide(); + } + } + }); + + var storeAvailableUser = new Ext.data.Store({ + proxy: new Ext.data.HttpProxy({ + url: "data_rolesUsers", + method: "POST" + }), + + reader: new Ext.data.JsonReader({ + root: "resultRoot", + totalProperty: "resultTotal", + fields: [ + {name: 'USR_UID'}, + {name: 'USR_USERNAME'}, + {name: 'USR_FIRSTNAME'}, + {name: 'USR_LASTNAME'} + ] + }), + + remoteSort: true, + + listeners: { + beforeload: function (store) + { + loadMaskUserPermission.show(); + + this.baseParams = { + "option": "AVAILABLE-USERS", + "roleUid": ROLES.ROL_UID, + "pageSize": pageSizeA, + "filter": searchTextU.getValue() + }; + }, + load: function (store, record, opt) + { + loadMaskUserPermission.hide(); + } + } + }); + + //Components + var cboPageSizeUser = new Ext.form.ComboBox({ + id: "cboPageSizeUser", + + mode: "local", + triggerAction: "all", + store: storePageSize, + valueField: "size", + displayField: "size", + width: 50, + editable: false, + + listeners: { + select: function (combo, record, index) + { + pageSizeU = parseInt(record.data["size"]); + + pagingUser.pageSize = pageSizeU; + pagingUser.moveFirst(); + } + } + }); + + pagingUser = new Ext.PagingToolbar({ + id: "pagingUser", + + pageSize: pageSizeU, + store: storeUser, + displayInfo: true, + displayMsg: _("ID_GRID_PAGE_DISPLAYING_ITEMS"), + emptyMsg: _("ID_NO_RECORDS_FOUND"), + items: ["-", _("ID_PAGE_SIZE") + " ", cboPageSizeUser] + }); + + var cboPageSizeAvailableUser = new Ext.form.ComboBox({ + id: "cboPageSizeAvailableUser", + + mode: "local", + triggerAction: "all", + store: storePageSize, + valueField: "size", + displayField: "size", + width: 50, + editable: false, + + listeners: { + select: function (combo, record, index) + { + pageSizeA = parseInt(record.data["size"]); + + pagingAvailableUser.pageSize = pageSizeA; + pagingAvailableUser.moveFirst(); + } + } + }); + + pagingAvailableUser = new Ext.PagingToolbar({ + id: "pagingAvailableUser", + + pageSize: pageSizeA, + store: storeAvailableUser, + displayInfo: true, + displayMsg: _("ID_GRID_PAGE_DISPLAYING_ITEMS"), + emptyMsg: _("ID_NO_RECORDS_FOUND"), + items: ["-", _("ID_PAGE_SIZE") + " ", cboPageSizeAvailableUser] }); cmodelU = new Ext.grid.ColumnModel({ @@ -510,7 +636,7 @@ Ext.onReady(function(){ title : _('ID_AVAILABLE_USERS'), region : 'center', ddGroup : 'assignedUGridDDGroup', - store : storeX, + store: storeAvailableUser, cm : cmodelU, sm : smodelX, enableDragDrop : true, @@ -528,7 +654,7 @@ Ext.onReady(function(){ columnLines : false, viewConfig : {forceFit:true}, tbar: [cancelEditPermissionsUButton,{xtype: 'tbfill'},'-',searchTextU, clearTextButtonU], - //bbar: [{xtype: 'tbfill'}, assignUAllButton], + bbar: pagingAvailableUser, listeners: {rowdblclick: AssignUserAction}, hidden : true }); @@ -537,7 +663,7 @@ Ext.onReady(function(){ layout : 'fit', title : _('ID_ASSIGNED_USERS'), ddGroup : 'availableUGridDDGroup', - store : storeU, + store: storeUser, cm : cmodelU, sm : smodelU, enableDragDrop : false, @@ -554,7 +680,8 @@ Ext.onReady(function(){ frame : false, columnLines : false, viewConfig : {forceFit:true}, - tbar : [editPermissionsUButton,{xtype: 'tbfill'},'-',searchTextX, clearTextButtonX] + tbar: [editPermissionsUButton, {xtype: "tbfill"}, "-", searchTextX, clearTextButtonX], + bbar: pagingUser }); buttonsUPanel = new Ext.Panel({ @@ -613,6 +740,9 @@ Ext.onReady(function(){ } }); + cboPageSizeUser.setValue(pageSizeU); + cboPageSizeAvailableUser.setValue(pageSizeA); + //LOAD ALL PANELS viewport = new Ext.Viewport({ layout: 'border',