From 34b60d3dd7d01935f0e54eb510b47cae62e010c1 Mon Sep 17 00:00:00 2001 From: Julio Cesar Laura Date: Fri, 7 Sep 2012 11:44:08 -0400 Subject: [PATCH] BUG 9713 User administration: Add a way to disable/enable users from users list SOLVED - Add the functionallity to enable/disable users in the users list --- workflow/engine/methods/users/users_Ajax.php | 45 ++++++--- workflow/engine/templates/users/usersList.js | 100 +++++++++++++++++-- 2 files changed, 122 insertions(+), 23 deletions(-) diff --git a/workflow/engine/methods/users/users_Ajax.php b/workflow/engine/methods/users/users_Ajax.php index 5c8c657fd..b9d258997 100755 --- a/workflow/engine/methods/users/users_Ajax.php +++ b/workflow/engine/methods/users/users_Ajax.php @@ -151,21 +151,21 @@ try { } break; - //This case is used to check if any of the user group has as role 'PROCESSMAKER_ADMIN', + //This case is used to check if any of the user group has as role 'PROCESSMAKER_ADMIN', case 'usersAdminGroupExtJS': G::LoadClass('groups'); $oGroup = new Groups(); - $aGroup = $oGroup->getUsersOfGroup($_POST['GRP_UID']); + $aGroup = $oGroup->getUsersOfGroup($_POST['GRP_UID']); $responseUser = 'false'; $usersAdmin = ''; - foreach ($aGroup as $iIndex => $aValues) { + foreach ($aGroup as $iIndex => $aValues) { if ($aValues['USR_ROLE'] == 'PROCESSMAKER_ADMIN') { $responseUser = 'true'; - $usersAdmin .= $aValues['USR_FIRSTNAME'] . ' ' . $aValues['USR_LASTNAME'].', '; + $usersAdmin .= $aValues['USR_FIRSTNAME'] . ' ' . $aValues['USR_LASTNAME'].', '; } } $usersAdmin = substr($usersAdmin, 0, -2); - + $result = new stdClass(); $result->reponse = $responseUser; $result->users = $usersAdmin; @@ -178,7 +178,7 @@ try { $USR_UID = $_POST['uUID']; $total = 0; $history = 0; - $c = $oProcessMap->getCriteriaUsersCases('TO_DO', $USR_UID); + $c = $oProcessMap->getCriteriaUsersCases('TO_DO', $USR_UID); $total += ApplicationPeer::doCount($c); $c = $oProcessMap->getCriteriaUsersCases('DRAFT', $USR_UID); $total += ApplicationPeer::doCount($c); @@ -211,6 +211,23 @@ try { $aFields['USR_USERNAME'] = ''; $oUser->update($aFields); break; + case 'changeUserStatus': + $response = new stdclass(); + if (isset($_REQUEST['USR_UID']) && isset($_REQUEST['NEW_USR_STATUS'])) { + $RBAC->changeUserStatus($_REQUEST['USR_UID'], $_REQUEST['NEW_USR_STATUS']); + require_once 'classes/model/Users.php'; + $userInstance = new Users(); + $userData = $userInstance->load($_REQUEST['USR_UID']); + $userData['USR_STATUS'] = $_REQUEST['NEW_USR_STATUS']; + $userInstance->update($userData); + $response->status = 'OK'; + } + else { + $response->status = 'ERROR'; + $response->message = 'USR_UID and NEW_USR_STATUS parameters are required.'; + } + die(G::json_encode($response)); + break; case 'availableGroups': G::LoadClass('groups'); $filter = (isset($_POST['textFilter']))? $_POST['textFilter'] : ''; @@ -243,7 +260,7 @@ try { G::LoadClass('groups'); $oGroup = new Groups(); foreach ($gUIDs as $GRP_UID){ - $oGroup->addUserToGroup($GRP_UID, $USR_UID); + $oGroup->addUserToGroup($GRP_UID, $USR_UID); } break; case 'deleteGroupsToUserMultiple': @@ -252,7 +269,7 @@ try { G::LoadClass('groups'); $oGroup = new Groups(); foreach ($gUIDs as $GRP_UID){ - $oGroup->removeUserOfGroup($GRP_UID, $USR_UID); + $oGroup->removeUserOfGroup($GRP_UID, $USR_UID); } break; case 'authSources': @@ -299,7 +316,7 @@ try { $arr = Array(); $arr['AUTH_SOURCE_NAME'] = 'ProcessMaker (MYSQL)'; $arr['AUTH_SOURCE_PROVIDER'] = 'MYSQL'; - $aFields = $arr; + $aFields = $arr; } $res = Array(); $res['data'] = $oCriteria; @@ -322,7 +339,7 @@ try { $aData['USR_AUTH_TYPE'] = $aFields['AUTH_SOURCE_PROVIDER']; $aData['UID_AUTH_SOURCE'] = $auth_uid; } - if (isset($_POST['auth_dn'])){ + if (isset($_POST['auth_dn'])){ $auth_dn = $_POST['auth_dn']; }else{ $auth_dn = ""; @@ -342,7 +359,7 @@ try { $config = $co->getConfiguration('usersList', 'pageSize','',$_SESSION['USER_LOGGED']); $limit_size = isset($config['pageSize']) ? $config['pageSize'] : 20; $start = isset($_REQUEST['start']) ? $_REQUEST['start'] : 0; - $limit = isset($_REQUEST['limit']) ? $_REQUEST['limit'] : $limit_size; + $limit = isset($_REQUEST['limit']) ? $_REQUEST['limit'] : $limit_size; $filter = isset($_REQUEST['textFilter']) ? $_REQUEST['textFilter'] : ''; $auths = isset($_REQUEST['auths']) ? $_REQUEST['auths'] : ''; $sort = isset($_REQUEST['sort']) ? $_REQUEST['sort'] : ''; @@ -398,7 +415,7 @@ try { // $tmpL = $tmpL->addOr($oCriteria->getNewCriterion(UsersPeer::USR_UID, $aUsers[$i],Criteria::EQUAL)); // }else{ // $uList = $oCriteria->getNewCriterion(UsersPeer::USR_UID, $aUsers[$i],Criteria::EQUAL); -// $tmpL = $uList; +// $tmpL = $uList; // $sw_add = true; // } // } @@ -469,8 +486,8 @@ try { $aTypes = Array(); $aTypes['to_do'] = 'CASES_INBOX'; $aTypes['draft'] = 'CASES_DRAFT'; - $aTypes['cancelled'] = 'CASES_CANCELLED'; - $aTypes['sent'] = 'CASES_SENT'; + $aTypes['cancelled'] = 'CASES_CANCELLED'; + $aTypes['sent'] = 'CASES_SENT'; $aTypes['paused'] = 'CASES_PAUSED'; $aTypes['completed'] = 'CASES_COMPLETED'; $aTypes['selfservice'] = 'CASES_SELFSERVICE'; diff --git a/workflow/engine/templates/users/usersList.js b/workflow/engine/templates/users/usersList.js index 013bab264..f4aca6de7 100755 --- a/workflow/engine/templates/users/usersList.js +++ b/workflow/engine/templates/users/usersList.js @@ -40,6 +40,7 @@ var viewport; var smodel; var newButton; var editButton; +var changeStatusButton; var deleteButton; var summaryButton; var groupsButton; @@ -83,6 +84,14 @@ Ext.onReady(function(){ disabled: true }); + changeStatusButton = new Ext.Button({ + text: _('ID_STATUS'), + icon: '', + iconCls: 'silk-add', + handler: changeStatusCheck, + disabled: true + }); + deleteButton = new Ext.Action({ text: _('ID_DELETE'), iconCls: 'button_menu_ext ss_sprite ss_delete', @@ -155,8 +164,9 @@ Ext.onReady(function(){ singleSelect: true, listeners:{ rowselect: function(sm){ - editButton.enable(); - deleteButton.enable(); + editButton.enable(); + changeStatusButton.enable(); + deleteButton.enable(); groupsButton.enable(); //reassignButton.enable(); authenticationButton.enable(); @@ -164,11 +174,14 @@ Ext.onReady(function(){ }, rowdeselect: function(sm){ editButton.disable(); - deleteButton.disable(); - groupsButton.disable(); - //reassignButton.disable(); - authenticationButton.disable(); - summaryButton.disable(); + changeStatusButton.setIcon(''); + changeStatusButton.setText(_('ID_STATUS')); + changeStatusButton.disable(); + deleteButton.disable(); + groupsButton.disable(); + //reassignButton.disable(); + authenticationButton.disable(); + summaryButton.disable(); } } }); @@ -353,10 +366,24 @@ Ext.onReady(function(){ store: store, cm: cmodel, sm: smodel, - tbar: [newButton, '-',summaryButton,'-', editButton, deleteButton, '-', groupsButton, '-',authenticationButton, {xtype: 'tbfill'}, /* _('ID_AUTH_SOURCES')+': ',comboAuthSources,'-', */ searchText,clearTextButton,searchButton], + tbar: [newButton, '-',summaryButton,'-', editButton, changeStatusButton, deleteButton, '-', groupsButton, '-',authenticationButton, {xtype: 'tbfill'}, searchText,clearTextButton,searchButton], bbar: bbarpaging, listeners: { - rowdblclick : EditUserAction + rowdblclick : EditUserAction, + render: function() { + infoGrid.getSelectionModel().on('rowselect', function() { + var rowSelected = infoGrid.getSelectionModel().getSelected(); + changeStatusButton.enable(); + if (rowSelected.data.USR_STATUS == 'ACTIVE') { + changeStatusButton.setIcon('/images/deactivate.png'); + changeStatusButton.setText(_('ID_DISABLE')); + } + else { + changeStatusButton.setIcon('/images/activate.png'); + changeStatusButton.setText(_('ID_ENABLE')); + } + }); + } }, view: new Ext.grid.GroupingView({ forceFit:true, @@ -405,6 +432,61 @@ NewUserAction = function(){ location.href = 'usersNew?MODE=new'; }; +//Change user status +changeStatus = function(userUid, newUsrStatus) { + viewport.getEl().mask(_('ID_PROCESSING')); + Ext.Ajax.request({ + url: 'users_Ajax', + params: {'function': 'changeUserStatus', USR_UID: userUid, NEW_USR_STATUS: newUsrStatus}, + success: function(res, opt) { + viewport.getEl().unmask(); + changeStatusButton.disable(); + changeStatusButton.setIcon(''); + changeStatusButton.setText(_('ID_STATUS')); + DoSearch(); + }, + failure: DoNothing + }); +}; + +//Check change user status +changeStatusCheck = function() { + var row = infoGrid.getSelectionModel().getSelected(); + if (row) { + if (row.data.USR_UID == user_admin){ + Ext.Msg.alert(_('ID_USERS'), _('ID_CANNOT_CHANGE_STATUS_ADMIN_USER')); + } + else { + viewport.getEl().mask(_('ID_PROCESSING')); + Ext.Ajax.request({ + url: 'users_Ajax', + params: {'function': 'canDeleteUser', uUID: row.data.USR_UID}, + success: function(res, opt) { + viewport.getEl().unmask(); + response = Ext.util.JSON.decode(res.responseText); + if (!response.candelete && row.data.USR_STATUS == 'ACTIVE') { + Ext.Msg.confirm(_('ID_CONFIRM'), _('ID_USERS_HAS_ASSIGNED_CASES'), function(btn) { + if (btn == 'yes') { + changeStatus(row.data.USR_UID, row.data.USR_STATUS == 'ACTIVE' ? 'INACTIVE' : 'ACTIVE'); + } + else { + viewport.getEl().unmask(); + } + }); + } + else { + changeStatus(row.data.USR_UID, row.data.USR_STATUS == 'ACTIVE' ? 'INACTIVE' : 'ACTIVE'); + } + }, + failure: function(r, o) { + viewport.getEl().unmask(); + DoNothing(); + } + }); + } + } +}; + //Delete User Action DeleteUserAction = function(){ var uid = infoGrid.getSelectionModel().getSelected();