diff --git a/workflow/engine/methods/groups/groups_Ajax.php b/workflow/engine/methods/groups/groups_Ajax.php index 15fd0e96a..9842f1570 100755 --- a/workflow/engine/methods/groups/groups_Ajax.php +++ b/workflow/engine/methods/groups/groups_Ajax.php @@ -190,7 +190,37 @@ switch ($_POST['action']) case 'assignedMembers': require_once 'classes/model/Users.php'; require_once 'classes/model/GroupUser.php'; + + G::LoadClass('configuration'); + $co = new Configurations(); + $config = $co->getConfiguration('groupList', 'pageSize','',$_SESSION['USER_LOGGED']); + $env = $co->getConfiguration('ENVIRONMENT_SETTINGS', ''); + $limit_size = isset($config['pageSize']) ? $config['pageSize'] : 20; + $start = isset($_REQUEST['start']) ? $_REQUEST['start'] : 0; + $limit = isset($_REQUEST['limit']) ? $_REQUEST['limit'] : $limit_size; + $filter = isset($_REQUEST['textFilter']) ? $_REQUEST['textFilter'] : ''; + $sGroupUID = $_REQUEST['gUID']; + + $aUsers = Array(); + $oCriteria = new Criteria('workflow'); + $oCriteria->addSelectColumn('COUNT(*) AS CNT'); + $oCriteria->addJoin(GroupUserPeer::USR_UID, UsersPeer::USR_UID, Criteria::LEFT_JOIN); + $oCriteria->add(GroupUserPeer::GRP_UID, $sGroupUID); + $oCriteria->add(UsersPeer::USR_STATUS, 'CLOSED', Criteria::NOT_EQUAL); + $filter = (isset($_POST['textFilter']))? $_POST['textFilter'] : ''; + if ($filter != ''){ + $oCriteria->add( + $oCriteria->getNewCriterion(UsersPeer::USR_USERNAME, '%'.$filter.'%', Criteria::LIKE)->addOr( + $oCriteria->getNewCriterion(UsersPeer::USR_FIRSTNAME, '%'.$filter.'%', Criteria::LIKE)->addOr( + $oCriteria->getNewCriterion(UsersPeer::USR_LASTNAME, '%'.$filter.'%', Criteria::LIKE)))); + } + $oDataset = UsersPeer::DoSelectRs ($oCriteria); + $oDataset->setFetchmode (ResultSet::FETCHMODE_ASSOC); + $oDataset->next(); + $row = $oDataset->getRow(); + $totalRows = $row['CNT']; + $oCriteria = new Criteria('workflow'); $oCriteria->addSelectColumn(GroupUserPeer::GRP_UID); $oCriteria->addSelectColumn(UsersPeer::USR_UID); @@ -208,18 +238,31 @@ switch ($_POST['action']) $oCriteria->getNewCriterion(UsersPeer::USR_USERNAME, '%'.$filter.'%', Criteria::LIKE)->addOr( $oCriteria->getNewCriterion(UsersPeer::USR_FIRSTNAME, '%'.$filter.'%', Criteria::LIKE)->addOr( $oCriteria->getNewCriterion(UsersPeer::USR_LASTNAME, '%'.$filter.'%', Criteria::LIKE)))); - } + } + $oCriteria->setOffset($start); + $oCriteria->setLimit($limit); + $oDataset = UsersPeer::doSelectRS($oCriteria); $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $arrData = Array(); while ($oDataset->next()){ $arrData[] = $oDataset->getRow(); } - echo '{success: true, members: '.G::json_encode($arrData).'}'; + echo '{success: true, members: '.G::json_encode($arrData).', total_users: '.$totalRows.'}'; break; case 'availableMembers': require_once 'classes/model/Users.php'; require_once 'classes/model/GroupUser.php'; + + G::LoadClass('configuration'); + $co = new Configurations(); + $config = $co->getConfiguration('groupList', 'pageSize','',$_SESSION['USER_LOGGED']); + $env = $co->getConfiguration('ENVIRONMENT_SETTINGS', ''); + $limit_size = isset($config['pageSize']) ? $config['pageSize'] : 20; + $start = isset($_REQUEST['start']) ? $_REQUEST['start'] : 0; + $limit = isset($_REQUEST['limit']) ? $_REQUEST['limit'] : $limit_size; + $filter = isset($_REQUEST['textFilter']) ? $_REQUEST['textFilter'] : ''; + $sGroupUID = $_REQUEST['gUID']; $oCriteria = new Criteria('workflow'); $oCriteria->addSelectColumn(GroupUserPeer::GRP_UID); @@ -235,6 +278,25 @@ switch ($_POST['action']) $uUIDs[] = $aRow['USR_UID']; $oDataset->next(); } + + $aUsers = Array(); + $oCriteria = new Criteria('workflow'); + $oCriteria->addSelectColumn('COUNT(*) AS CNT'); + $oCriteria->add(UsersPeer::USR_STATUS, 'CLOSED', Criteria::NOT_EQUAL); + $oCriteria->add(UsersPeer::USR_UID, $uUIDs, Criteria::NOT_IN); + $filter = (isset($_POST['textFilter']))? $_POST['textFilter'] : ''; + if ($filter != ''){ + $oCriteria->add( + $oCriteria->getNewCriterion(UsersPeer::USR_USERNAME, '%'.$filter.'%', Criteria::LIKE)->addOr( + $oCriteria->getNewCriterion(UsersPeer::USR_FIRSTNAME, '%'.$filter.'%', Criteria::LIKE)->addOr( + $oCriteria->getNewCriterion(UsersPeer::USR_LASTNAME, '%'.$filter.'%', Criteria::LIKE)))); + } + $oDataset = UsersPeer::DoSelectRs ($oCriteria); + $oDataset->setFetchmode (ResultSet::FETCHMODE_ASSOC); + $oDataset->next(); + $row = $oDataset->getRow(); + $totalRows = $row['CNT']; + $oCriteria = new Criteria('workflow'); $oCriteria->addSelectColumn(UsersPeer::USR_UID); $oCriteria->addSelectColumn(UsersPeer::USR_USERNAME); @@ -250,14 +312,16 @@ switch ($_POST['action']) $oCriteria->getNewCriterion(UsersPeer::USR_USERNAME, '%'.$filter.'%', Criteria::LIKE)->addOr( $oCriteria->getNewCriterion(UsersPeer::USR_FIRSTNAME, '%'.$filter.'%', Criteria::LIKE)->addOr( $oCriteria->getNewCriterion(UsersPeer::USR_LASTNAME, '%'.$filter.'%', Criteria::LIKE)))); - } + } + $oCriteria->setOffset($start); + $oCriteria->setLimit($limit); $oDataset = UsersPeer::doSelectRS($oCriteria); $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $arrData = Array(); while ($oDataset->next()){ $arrData[] = $oDataset->getRow(); } - echo '{success: true, members: '.G::json_encode($arrData).'}'; + echo '{success: true, members: '.G::json_encode($arrData).', total_users: '.$totalRows.'}'; break; case 'assignUsersToGroupsMultiple': $GRP_UID = $_POST['GRP_UID']; diff --git a/workflow/engine/templates/groups/groupsMembers.js b/workflow/engine/templates/groups/groupsMembers.js index 39443f514..796a71ad5 100755 --- a/workflow/engine/templates/groups/groupsMembers.js +++ b/workflow/engine/templates/groups/groupsMembers.js @@ -38,6 +38,8 @@ var assignAllButton; var removeButton; var removeAllButton; var backButton; +var pageSize = 20; +var bbarpaging; Ext.onReady(function(){ @@ -66,6 +68,7 @@ Ext.onReady(function(){ }), reader : new Ext.data.JsonReader( { root: 'members', + totalProperty: 'total_users', fields : [ {name : 'USR_UID'}, {name : 'USR_USERNAME'}, @@ -125,6 +128,7 @@ Ext.onReady(function(){ }), reader : new Ext.data.JsonReader( { root: 'members', + totalProperty: 'total_users', fields : [ {name : 'USR_UID'}, {name : 'USR_USERNAME'}, @@ -168,72 +172,137 @@ Ext.onReady(function(){ selectSingle: false, listeners:{ selectionchange: function(sm){ - switch(sm.getCount()){ + switch(sm.getCount()){ case 0: Ext.getCmp('removeButton').disable(); break; default: Ext.getCmp('removeButton').enable(); break; - } } + } } }); + storePageSize = new Ext.data.SimpleStore({ + fields : ['size'], + data : [['20'],['30'],['40'],['50'],['100']], + autoLoad : true + }); + + comboPageSizeAvailable = new Ext.form.ComboBox({ + typeAhead : false, + mode : 'local', + triggerAction : 'all', + store : storePageSize, + valueField : 'size', + displayField : 'size', + width : 50, + editable : false, + listeners : { + select : function(c, d, i) { + bbarpagingAvailable.pageSize = parseInt(d.data['size']); + bbarpagingAvailable.moveFirst(); + } + } + }); + comboPageSizeAvailable.setValue(pageSize); + + bbarpagingAvailable = new Ext.PagingToolbar({ + pageSize : pageSize, + store : storeA, + displayInfo : true, + displayMsg : '{0} - {1} of {2}', + emptyMsg : 'No records', + items: ['-', _('ID_PAGE_SIZE')+':', comboPageSizeAvailable ] + }); + availableGrid = new Ext.grid.GridPanel({ - layout : 'fit', - title : _('ID_AVAILABLE_USERS'), - region : 'center', - ddGroup : 'assignedGridDDGroup', - store : storeA, - cm : cmodelP, - sm : smodelA, - enableDragDrop : true, - stripeRows : true, - autoExpandColumn: 'USR_USERNAME', - iconCls : 'icon-grid', - id : 'availableGrid', - height : 100, - autoWidth : true, - stateful : true, - stateId : 'grid', + layout : 'fit', + title : _('ID_AVAILABLE_USERS'), + region : 'center', + ddGroup : 'assignedGridDDGroup', + store : storeA, + cm : cmodelP, + sm : smodelA, + enableDragDrop : true, + stripeRows : true, + autoExpandColumn : 'USR_USERNAME', + iconCls : 'icon-grid', + id : 'availableGrid', + height : 100, + autoWidth : true, + stateful : true, + stateId : 'grid', enableColumnResize : true, - enableHdMenu : true, - frame : false, - columnLines : false, - viewConfig: { - forceFit:true, - cls:"x-grid-empty", - emptyText: (TRANSLATIONS.ID_NO_RECORDS_FOUND) + enableHdMenu : true, + frame : false, + columnLines : false, + viewConfig : { + forceFit : true, + cls : "x-grid-empty", + emptyText : (TRANSLATIONS.ID_NO_RECORDS_FOUND) }, - tbar: [cancelEditMembersButton,{xtype: 'tbfill'},'-',searchTextA,clearTextButtonA], + tbar : [cancelEditMembersButton,{xtype: 'tbfill'},'-',searchTextA,clearTextButtonA], //bbar: [{xtype: 'tbfill'}, assignAllButton], - listeners: {rowdblclick: AssignUsersAction}, - hidden: true + listeners : {rowdblclick: AssignUsersAction}, + hidden : true, + bbar : bbarpagingAvailable + }); + + + comboPageSizeAssigned = new Ext.form.ComboBox({ + typeAhead : false, + mode : 'local', + triggerAction : 'all', + store : storePageSize, + valueField : 'size', + displayField : 'size', + width : 50, + editable : false, + listeners : { + select : function(c, d, i) { + bbarpagingAssigned.pageSize = parseInt(d.data['size']); + bbarpagingAssigned.moveFirst(); + } + } + }); + comboPageSizeAssigned.setValue(pageSize); + + bbarpagingAssigned = new Ext.PagingToolbar({ + pageSize : pageSize, + store : storeP, + displayInfo : true, + displayMsg : '{0} - {1} of {2}', + emptyMsg : 'No records', + items: ['-', _('ID_PAGE_SIZE')+':', comboPageSizeAssigned ] }); assignedGrid = new Ext.grid.GridPanel({ - layout : 'fit', - title : _('ID_ASSIGNED_USERS'), - ddGroup : 'availableGridDDGroup', - store : storeP, - cm : cmodelP, - sm : smodelP, - enableDragDrop : true, - stripeRows : true, - autoExpandColumn: 'USR_USERNAME', - iconCls : 'icon-grid', - id : 'assignedGrid', - height : 100, - autoWidth : true, - stateful : true, - stateId : 'grid', + layout : 'fit', + title : _('ID_ASSIGNED_USERS'), + ddGroup : 'availableGridDDGroup', + store : storeP, + cm : cmodelP, + sm : smodelP, + enableDragDrop : true, + stripeRows : true, + autoExpandColumn : 'USR_USERNAME', + iconCls : 'icon-grid', + id : 'assignedGrid', + height : 100, + autoWidth : true, + stateful : true, + stateId : 'grid', enableColumnResize : true, - enableHdMenu : true, - frame : false, - columnLines : false, - viewConfig : {forceFit:true}, - tbar: [editMembersButton,{xtype: 'tbfill'},'-',searchTextP,clearTextButtonP], + enableHdMenu : true, + frame : false, + columnLines : false, + viewConfig : {forceFit:true}, + tbar : [editMembersButton,{xtype: 'tbfill'},'-',searchTextP,clearTextButtonP], //bbar: [{xtype: 'tbfill'},removeAllButton], - listeners: {rowdblclick: function(){ - (availableGrid.hidden)? DoNothing() : RemoveUsersAction(); - }} + listeners : { + rowdblclick: function() { + (availableGrid.hidden) ? DoNothing() : RemoveUsersAction(); + } + }, + bbar : bbarpagingAssigned }); buttonsPanel = new Ext.Panel({