diff --git a/workflow/engine/methods/users/usersAjax.php b/workflow/engine/methods/users/usersAjax.php index 78fe67f3b..e37df59b6 100755 --- a/workflow/engine/methods/users/usersAjax.php +++ b/workflow/engine/methods/users/usersAjax.php @@ -128,324 +128,59 @@ switch ($_POST['action']) { print (G::json_encode($oData)); break; case 'saveUser': + case 'savePersonalInfo': try { + $user = new \ProcessMaker\BusinessModel\User(); $form = $_POST; - if (isset($_POST['USR_UID'])) { - $form['USR_UID'] = $_POST['USR_UID']; - } else { - $form['USR_UID'] = ''; + switch ($_POST['action']) { + case 'saveUser'; + if (!$user->checkPermission($_SESSION['USER_LOGGED'], 'PM_USERS')) { + throw new Exception(G::LoadTranslation('ID_USER_NOT_HAVE_PERMISSION', [$_SESSION['USER_LOGGED']])); + } + break; + case 'savePersonalInfo': + if (!$user->checkPermission($_SESSION['USER_LOGGED'], 'PM_USERS') && + !$user->checkPermission($_SESSION['USER_LOGGED'], 'PM_EDITPERSONALINFO') + ) { + throw new Exception(G::LoadTranslation('ID_USER_NOT_HAVE_PERMISSION', [$_SESSION['USER_LOGGED']])); + } + + unset( + $form['USR_REPLACED_BY'], + $form['USR_DUE_DATE'], + $form['USR_STATUS'], + $form['USR_ROLE'] + ); + break; + default: + throw new Exception(G::LoadTranslation('ID_INVALID_DATA')); + break; } - if (!isset($form['USR_NEW_PASS'])) { - $form['USR_NEW_PASS'] = ''; - } - if ($form['USR_NEW_PASS'] != '') { - $form['USR_PASSWORD'] = Bootstrap::hashPassword($form['USR_NEW_PASS']); - } - if (!isset($form['USR_CITY'])) { - $form['USR_CITY'] = ''; - } - if (!isset($form['USR_LOCATION'])) { - $form['USR_LOCATION'] = ''; - } - if (!isset($form['USR_AUTH_USER_DN'])) { - $form['USR_AUTH_USER_DN'] = ''; - } - if (!isset($form['USR_LOGGED_NEXT_TIME'])) { - $form['USR_LOGGED_NEXT_TIME'] = 0; + if (array_key_exists('USR_LOGGED_NEXT_TIME', $form)) { + $form['USR_LOGGED_NEXT_TIME'] = ($form['USR_LOGGED_NEXT_TIME'])? 1 : 0; } - $user = new \ProcessMaker\BusinessModel\User(); - - $firstName = $form['USR_FIRSTNAME'] ? " - First Name: ". $form['USR_FIRSTNAME'] : ""; - $lastName = $form['USR_LASTNAME'] ? " - Last Name: ". $form['USR_LASTNAME'] : ""; - $email = $form['USR_EMAIL'] ? " - Email: ". $form['USR_EMAIL'] : ""; - $dueDate = $form['USR_DUE_DATE'] ? " - Due Date: ". $form['USR_DUE_DATE'] : ""; - $status = ""; - if(isset($form['USR_STATUS'])){ - $status = $form['USR_STATUS'] ? " - Status: ". $form['USR_STATUS'] : ""; - } - $address = $form['USR_ADDRESS'] ? " - Address: ". $form['USR_ADDRESS'] : ""; - $phone = $form['USR_PHONE'] ? " - Phone: ". $form['USR_PHONE'] : ""; - $zipCode = $form['USR_ZIP_CODE'] ? " - Zip Code: ". $form['USR_ZIP_CODE'] : ""; - $position = $form['USR_POSITION'] ? " - Position: ". $form['USR_POSITION'] : ""; - $role = $form['USR_ROLE'] ? " - Role: ". $form['USR_ROLE'] : ""; - $languageDef = (isset($form['USR_DEFAULT_LANG']))? " - Default Language: " . $form['USR_DEFAULT_LANG'] : ""; - /*----------------------------------********---------------------------------*/ - $costByHour = $form['USR_COST_BY_HOUR'] ? $form['USR_COST_BY_HOUR'] : ""; - $unit = $form['USR_UNIT_COST'] ? $form['USR_UNIT_COST'] : ""; - /*----------------------------------********---------------------------------*/ - $timeZone = (isset($form['USR_TIME_ZONE']))? ' - Time Zone: ' . $form['USR_TIME_ZONE'] : ''; + $userUid = ''; if ($form['USR_UID'] == '') { - $criteria = new Criteria(); - $criteria->addSelectColumn(UsersPeer::USR_USERNAME); - $criteria->add(UsersPeer::USR_USERNAME, utf8_encode($_POST['USR_USERNAME'])); - if (UsersPeer::doCount($criteria) > 0) { - throw new Exception(G::LoadTranslation('ID_USERNAME_ALREADY_EXISTS', array('USER_ID' => $_POST['USR_USERNAME']))); - } - $aData['USR_USERNAME'] = $form['USR_USERNAME']; - $aData['USR_PASSWORD'] = $form['USR_PASSWORD']; - $aData['USR_FIRSTNAME'] = $form['USR_FIRSTNAME']; - $aData['USR_LASTNAME'] = $form['USR_LASTNAME']; - $aData['USR_EMAIL'] = $form['USR_EMAIL']; - $aData['USR_DUE_DATE'] = $form['USR_DUE_DATE']; - $aData['USR_CREATE_DATE'] = date('Y-m-d H:i:s'); - $aData['USR_UPDATE_DATE'] = date('Y-m-d H:i:s'); - $aData['USR_BIRTHDAY'] = date('Y-m-d'); - $aData['USR_AUTH_USER_DN'] = $form['USR_AUTH_USER_DN']; + $arrayUserData = $user->create($form); + $userUid = $arrayUserData['USR_UID']; - //fixing bug in inactive user when the admin create a new user. - $statusWF = $form['USR_STATUS']; - $aData['USR_STATUS'] = $form['USR_STATUS'] ;//== 'ACTIVE' ? 1 : 0; - try { - $sUserUID = $RBAC->createUser($aData, $form['USR_ROLE']); - } catch(Exception $oError) { - throw new Exception($oError->getMessage()); - } - $aData['USR_STATUS'] = $statusWF; - $aData['USR_UID'] = $sUserUID; - $aData['USR_PASSWORD'] = G::encryptOld($sUserUID); //fake :p - $aData['USR_COUNTRY'] = $form['USR_COUNTRY']; - $aData['USR_CITY'] = $form['USR_CITY']; - $aData['USR_LOCATION'] = $form['USR_LOCATION']; - $aData['USR_ADDRESS'] = $form['USR_ADDRESS']; - $aData['USR_PHONE'] = $form['USR_PHONE']; - $aData['USR_ZIP_CODE'] = $form['USR_ZIP_CODE']; - $aData['USR_POSITION'] = $form['USR_POSITION']; - // $aData['USR_RESUME'] = $form['USR_RESUME']; - $aData['USR_ROLE'] = $form['USR_ROLE']; - $aData['USR_DEFAULT_LANG'] = (isset($form['USR_DEFAULT_LANG']))? $form['USR_DEFAULT_LANG'] : ''; - /*----------------------------------********---------------------------------*/ - $aData['USR_COST_BY_HOUR'] = $form['USR_COST_BY_HOUR']; - $aData['USR_UNIT_COST'] = $form['USR_UNIT_COST']; - /*----------------------------------********---------------------------------*/ - $aData['USR_REPLACED_BY'] = ($user->getUserRecordByPk($form['USR_REPLACED_BY'], [], false) !== false)? - $form['USR_REPLACED_BY'] : ''; - $aData['USR_TIME_ZONE'] = $form['USR_TIME_ZONE']; - - require_once 'classes/model/Users.php'; - $oUser = new Users(); - $oUser->create($aData); - G::auditLog('CreateUser', 'User Name: ' . $aData['USR_USERNAME'] . ' - User ID: (' . $aData['USR_UID'] . ') ' . $firstName . $lastName . $email . $dueDate . $status . $address . $phone . $zipCode . $position . $role . $timeZone . $languageDef); - - if ($_FILES['USR_PHOTO']['error'] != 1) { - //print (PATH_IMAGES_ENVIRONMENT_USERS); - if ($_FILES['USR_PHOTO']['tmp_name'] != '') { - G::uploadFile($_FILES['USR_PHOTO']['tmp_name'], PATH_IMAGES_ENVIRONMENT_USERS, $sUserUID . '.gif'); - } - } else { - $result->success = false; - $result->fileError = true; - print (G::json_encode($result)); - die(); - } - /* - if ($_FILES['USR_RESUME']['error'] != 1) { - if ($_FILES['USR_RESUME']['tmp_name'] != '') { - G::uploadFile($_FILES['USR_RESUME']['tmp_name'], PATH_IMAGES_ENVIRONMENT_FILES . $sUserUID . '/', $_FILES['USR_RESUME']['name']); - } - } - else { - $result->success = false; - $result->fileError = true; - print(G::json_encode($result)); - die; - } - */ - require_once 'classes/model/UsersProperties.php'; - $oUserProperty = new UsersProperties(); - $aUserProperty = $oUserProperty->loadOrCreateIfNotExists($aData['USR_UID'], array('USR_PASSWORD_HISTORY' => serialize(array(Bootstrap::hashPassword($aData['USR_PASSWORD']))))); - $aUserProperty['USR_LOGGED_NEXT_TIME'] = $form['USR_LOGGED_NEXT_TIME']; - $oUserProperty->update($aUserProperty); + $user->auditLog('INS', array_merge(['USR_UID' => $userUid, 'USR_USERNAME' => $arrayUserData['USR_USERNAME']], $form)); } else { - - $aData['USR_UID'] = $form['USR_UID']; - $aData['USR_USERNAME'] = $form['USR_USERNAME']; - - if (isset($form['USR_PASSWORD'])) { - - if ($form['USR_PASSWORD'] != '') { - $aData['USR_PASSWORD'] = $form['USR_PASSWORD']; - require_once 'classes/model/UsersProperties.php'; - $oUserProperty = new UsersProperties(); - $aUserProperty = $oUserProperty->loadOrCreateIfNotExists($form['USR_UID'], array('USR_PASSWORD_HISTORY' => serialize(array(Bootstrap::hashPassword($form['USR_PASSWORD']))))); - - $memKey = 'rbacSession' . session_id(); - $memcache = & PMmemcached::getSingleton(defined('SYS_SYS') ? SYS_SYS : '' ); - if (($RBAC->aUserInfo = $memcache->get($memKey)) === false) { - $RBAC->loadUserRolePermission($RBAC->sSystem, $_SESSION['USER_LOGGED']); - $memcache->set($memKey, $RBAC->aUserInfo, PMmemcached::EIGHT_HOURS); - } - if ($RBAC->aUserInfo['PROCESSMAKER']['ROLE']['ROL_CODE'] == 'PROCESSMAKER_ADMIN') { - $aUserProperty['USR_LAST_UPDATE_DATE'] = date('Y-m-d H:i:s'); - $aUserProperty['USR_LOGGED_NEXT_TIME'] = $form['USR_LOGGED_NEXT_TIME']; - $oUserProperty->update($aUserProperty); - } - - $aErrors = $oUserProperty->validatePassword($form['USR_NEW_PASS'], $aUserProperty['USR_LAST_UPDATE_DATE'], 0); - - if (count($aErrors) > 0) { - $sDescription = G::LoadTranslation('ID_POLICY_ALERT') . ':,'; - foreach ($aErrors as $sError) { - switch ($sError) { - case 'ID_PPP_MINIMUN_LENGTH': - $sDescription .= ' - ' . G::LoadTranslation($sError) . ': ' . PPP_MINIMUN_LENGTH . ','; - break; - case 'ID_PPP_MAXIMUN_LENGTH': - $sDescription .= ' - ' . G::LoadTranslation($sError) . ': ' . PPP_MAXIMUN_LENGTH . ','; - break; - case 'ID_PPP_EXPIRATION_IN': - $sDescription .= ' - ' . G::LoadTranslation($sError) . ' ' . PPP_EXPIRATION_IN . ' ' . G::LoadTranslation('ID_DAYS') . ','; - break; - default: - $sDescription .= ' - ' . G::LoadTranslation($sError) . ','; - break; - } - } - $sDescription .= '' . G::LoadTranslation('ID_PLEASE_CHANGE_PASSWORD_POLICY'); - $result->success = false; - $result->msg = $sDescription; - print (G::json_encode($result)); - die(); - } - $aHistory = unserialize($aUserProperty['USR_PASSWORD_HISTORY']); - if (!is_array($aHistory)) { - $aHistory = array(); - } - if (!defined('PPP_PASSWORD_HISTORY')) { - define('PPP_PASSWORD_HISTORY', 0); - } - if (PPP_PASSWORD_HISTORY > 0) { - //it's looking a password igual into aHistory array that was send for post in md5 way - $c = 0; - $sw = 1; - while (count($aHistory) >= 1 && count($aHistory) > $c && $sw) { - if (strcmp(trim($aHistory[$c]), trim($form['USR_PASSWORD'])) == 0) { - $sw = 0; - } - $c++; - } - if ($sw == 0) { - $sDescription = G::LoadTranslation('ID_POLICY_ALERT') . ':

'; - $sDescription .= ' - ' . G::LoadTranslation('PASSWORD_HISTORY') . ': ' . PPP_PASSWORD_HISTORY . '
'; - $sDescription .= '
' . G::LoadTranslation('ID_PLEASE_CHANGE_PASSWORD_POLICY') . ''; - $result->success = false; - $result->msg = $sDescription; - print (G::json_encode($result)); - die(); - } - - if (count($aHistory) >= PPP_PASSWORD_HISTORY) { - $sLastPassw = array_shift($aHistory); - } - $aHistory[] = $form['USR_PASSWORD']; - } - $aUserProperty['USR_LAST_UPDATE_DATE'] = date('Y-m-d H:i:s'); - $aUserProperty['USR_LOGGED_NEXT_TIME'] = $form['USR_LOGGED_NEXT_TIME']; - $aUserProperty['USR_PASSWORD_HISTORY'] = serialize($aHistory); - $oUserProperty->update($aUserProperty); - } else { - require_once 'classes/model/Users.php'; - $oUser = new Users(); - $aUser = $oUser->load($aData['USR_UID']); - require_once 'classes/model/UsersProperties.php'; - $oUserProperty = new UsersProperties(); - $aUserProperty = $oUserProperty->loadOrCreateIfNotExists($aData['USR_UID'], array('USR_PASSWORD_HISTORY' => serialize(array($aUser['USR_PASSWORD'])))); - $aUserProperty['USR_LOGGED_NEXT_TIME'] = $form['USR_LOGGED_NEXT_TIME']; - $oUserProperty->update($aUserProperty); - } - } else { - require_once 'classes/model/Users.php'; - $oUser = new Users(); - $aUser = $oUser->load($aData['USR_UID']); - require_once 'classes/model/UsersProperties.php'; - $oUserProperty = new UsersProperties(); - $aUserProperty = $oUserProperty->loadOrCreateIfNotExists($aData['USR_UID'], array('USR_PASSWORD_HISTORY' => serialize(array($aUser['USR_PASSWORD'])))); - $aUserProperty['USR_LOGGED_NEXT_TIME'] = $form['USR_LOGGED_NEXT_TIME']; - $oUserProperty->update($aUserProperty); - } - $aData['USR_FIRSTNAME'] = $form['USR_FIRSTNAME']; - $aData['USR_LASTNAME'] = $form['USR_LASTNAME']; - $aData['USR_EMAIL'] = $form['USR_EMAIL']; - $aData['USR_DUE_DATE'] = $form['USR_DUE_DATE']; - $aData['USR_UPDATE_DATE'] = date('Y-m-d H:i:s'); - if (isset($form['USR_STATUS'])) { - $aData['USR_STATUS'] = $form['USR_STATUS']; - } - if (isset($form['USR_ROLE'])) { - $RBAC->updateUser($aData, $form['USR_ROLE']); - } else { - $RBAC->updateUser($aData); - } - $aData['USR_COUNTRY'] = $form['USR_COUNTRY']; - $aData['USR_CITY'] = $form['USR_CITY']; - $aData['USR_LOCATION'] = $form['USR_LOCATION']; - $aData['USR_ADDRESS'] = $form['USR_ADDRESS']; - $aData['USR_PHONE'] = $form['USR_PHONE']; - $aData['USR_ZIP_CODE'] = $form['USR_ZIP_CODE']; - $aData['USR_POSITION'] = $form['USR_POSITION']; - /* - if ($form['USR_RESUME'] != '') { - $aData['USR_RESUME'] = $form['USR_RESUME']; - } - */ - if (isset($form['USR_ROLE'])) { - $aData['USR_ROLE'] = $form['USR_ROLE']; - } - if (isset($form['USR_DEFAULT_LANG'])) { - $aData['USR_DEFAULT_LANG'] = $form['USR_DEFAULT_LANG']; - } - /*----------------------------------********---------------------------------*/ - if (isset($form['USR_COST_BY_HOUR'])) { - $aData['USR_COST_BY_HOUR'] = $form['USR_COST_BY_HOUR']; - } - if (isset($form['USR_UNIT_COST'])) { - $aData['USR_UNIT_COST'] = $form['USR_UNIT_COST']; - } - /*----------------------------------********---------------------------------*/ - if (isset($form['USR_REPLACED_BY'])) { - $aData['USR_REPLACED_BY'] = ($user->getUserRecordByPk($form['USR_REPLACED_BY'], [], false) !== false)? - $form['USR_REPLACED_BY'] : ''; - } - if (isset($form['USR_AUTH_USER_DN'])) { - $aData['USR_AUTH_USER_DN'] = $form['USR_AUTH_USER_DN']; + if (array_key_exists('USR_NEW_PASS', $form) && $form['USR_NEW_PASS'] == '') { + unset($form['USR_NEW_PASS']); } - if (isset($form['USR_TIME_ZONE'])) { - $aData['USR_TIME_ZONE'] = $form['USR_TIME_ZONE']; - } + $result = $user->update($form['USR_UID'], $form, $_SESSION['USER_LOGGED']); + $userUid = $form['USR_UID']; + + $arrayUserData = $user->getUserRecordByPk($userUid, [], false); + + $user->auditLog('UPD', array_merge(['USR_UID' => $userUid, 'USR_USERNAME' => $arrayUserData['USR_USERNAME']], $form)); - require_once 'classes/model/Users.php'; - $oUser = new Users(); - $oUser->update($aData); - G::auditLog('UpdateUser', 'User Name: ' . $aData['USR_USERNAME'] . ' - User ID: (' . $aData['USR_UID'] . ') ' . $firstName . $lastName . $email . $dueDate . $status . $address . $phone . $zipCode . $position . $role . $timeZone . $languageDef); - if ($_FILES['USR_PHOTO']['error'] != 1) { - if ($_FILES['USR_PHOTO']['tmp_name'] != '') { - $aAux = explode('.', $_FILES['USR_PHOTO']['name']); - G::uploadFile($_FILES['USR_PHOTO']['tmp_name'], PATH_IMAGES_ENVIRONMENT_USERS, $aData['USR_UID'] . '.' . $aAux[1]); - G::resizeImage(PATH_IMAGES_ENVIRONMENT_USERS . $aData['USR_UID'] . '.' . $aAux[1], 96, 96, PATH_IMAGES_ENVIRONMENT_USERS . $aData['USR_UID'] . '.gif'); - } - } else { - $result->success = false; - $result->fileError = true; - print (G::json_encode($result)); - die(); - } - /* - if ($_FILES['USR_RESUME']['error'] != 1) { - if ($_FILES['USR_RESUME']['tmp_name'] != '') { - G::uploadFile($_FILES['USR_RESUME']['tmp_name'], PATH_IMAGES_ENVIRONMENT_FILES . $aData['USR_UID'] . '/', $_FILES['USR_RESUME']['name']); - } - } - else { - $result->success = false; - $result->fileError = true; - print(G::json_encode($result)); - die; - } - */ /* Saving preferences */ $def_lang = $form['PREF_DEFAULT_LANG']; $def_menu = $form['PREF_DEFAULT_MENUSELECTED']; @@ -456,31 +191,32 @@ switch ($_POST['action']) { $oConf = new Configurations(); $aConf = Array('DEFAULT_LANG' => $def_lang, 'DEFAULT_MENU' => $def_menu, 'DEFAULT_CASES_MENU' => $def_cases_menu); - /* UPDATING SESSION VARIABLES */ - $aUser = $RBAC->userObj->load($_SESSION['USER_LOGGED']); - //$_SESSION['USR_FULLNAME'] = $aUser['USR_FIRSTNAME'] . ' ' . $aUser['USR_LASTNAME']; - - $oConf->aConfig = $aConf; $oConf->saveConfig('USER_PREFERENCES', '', '', $_SESSION['USER_LOGGED']); } + try { + $user->uploadImage($userUid); + } catch (Exception $e) { + $result = new stdClass(); + $result->success = false; + $result->fileError = true; + + echo G::json_encode($result); + exit(0); + } + if ($_SESSION['USER_LOGGED'] == $form['USR_UID']) { /* UPDATING SESSION VARIABLES */ $aUser = $RBAC->userObj->load($_SESSION['USER_LOGGED']); $_SESSION['USR_FULLNAME'] = $aUser['USR_FIRSTNAME'] . ' ' . $aUser['USR_LASTNAME']; } - //Save Calendar assigment - if ((isset($form['USR_CALENDAR']))) { - //Save Calendar ID for this user - G::LoadClass("calendar"); - $calendarObj = new Calendar(); - $calendarObj->assignCalendarTo($aData['USR_UID'], $form['USR_CALENDAR'], 'USER'); - } + $result = new stdClass(); $result->success = true; print (G::json_encode($result)); } catch (Exception $e) { + $result = new stdClass(); $result->success = false; $result->error = $e->getMessage(); print (G::json_encode($result)); diff --git a/workflow/engine/methods/users/usersEdit.php b/workflow/engine/methods/users/usersEdit.php index 1415fdc6c..398a1f984 100644 --- a/workflow/engine/methods/users/usersEdit.php +++ b/workflow/engine/methods/users/usersEdit.php @@ -43,6 +43,7 @@ $oHeadPublisher->assign('TIME_ZONE_DATA', array_map(function ($value) { return [ $oHeadPublisher->assign('__SYSTEM_UTC_TIME_ZONE__', (isset($_SESSION['__SYSTEM_UTC_TIME_ZONE__']) && $_SESSION['__SYSTEM_UTC_TIME_ZONE__'])? 1 : 0); $oHeadPublisher->assign('EXPIRATION_DATE', (int)$expirationDate); $oHeadPublisher->assign('LANGUAGE_MANAGEMENT', $languageManagement); +$oHeadPublisher->assign('__ACTION__', 'saveUser'); G::RenderPage( 'publish', 'extJs' ); diff --git a/workflow/engine/methods/users/usersInit.php b/workflow/engine/methods/users/usersInit.php index 2f71826af..7faf2838a 100644 --- a/workflow/engine/methods/users/usersInit.php +++ b/workflow/engine/methods/users/usersInit.php @@ -63,5 +63,6 @@ $oHeadPublisher->assign('TIME_ZONE_DATA', array_map(function ($value) { return [ $oHeadPublisher->assign('__SYSTEM_UTC_TIME_ZONE__', (isset($_SESSION['__SYSTEM_UTC_TIME_ZONE__']) && $_SESSION['__SYSTEM_UTC_TIME_ZONE__'])? 1 : 0); $oHeadPublisher->assign('EXPIRATION_DATE', (int)$expirationDate); $oHeadPublisher->assign('LANGUAGE_MANAGEMENT', $languageManagement); +$oHeadPublisher->assign('__ACTION__', 'savePersonalInfo'); G::RenderPage( 'publish', 'extJs' ); diff --git a/workflow/engine/methods/users/usersNew.php b/workflow/engine/methods/users/usersNew.php index 1fef6f10d..1127bd327 100644 --- a/workflow/engine/methods/users/usersNew.php +++ b/workflow/engine/methods/users/usersNew.php @@ -47,6 +47,7 @@ $oHeadPublisher->assign('TIME_ZONE_DATA', array_map(function ($value) { return [ $oHeadPublisher->assign('__SYSTEM_UTC_TIME_ZONE__', (isset($_SESSION['__SYSTEM_UTC_TIME_ZONE__']) && $_SESSION['__SYSTEM_UTC_TIME_ZONE__'])? 1 : 0); $oHeadPublisher->assign('EXPIRATION_DATE', (int)$expirationDate); $oHeadPublisher->assign('LANGUAGE_MANAGEMENT', $languageManagement); +$oHeadPublisher->assign('__ACTION__', 'saveUser'); G::RenderPage( 'publish', 'extJs' ); diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/User.php b/workflow/engine/src/ProcessMaker/BusinessModel/User.php index 47ad7ef5b..d1f8ac463 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/User.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/User.php @@ -504,16 +504,30 @@ class User \G::LoadSystem("rbac"); //Verify data - $process = new \ProcessMaker\BusinessModel\Process(); $validator = new \ProcessMaker\BusinessModel\Validator(); $validator->throwExceptionIfDataIsNotArray($arrayData, "\$arrayData"); $validator->throwExceptionIfDataIsEmpty($arrayData, "\$arrayData"); //Set data - $arrayData = array_change_key_case($arrayData, CASE_UPPER); + $arrayDataAux = array_change_key_case($arrayData, CASE_UPPER); + $arrayData = $arrayDataAux; - unset($arrayData["USR_UID"]); + unset( + $arrayData['USR_UID'], + $arrayData['USR_COST_BY_HOUR'], + $arrayData['USR_UNIT_COST'] + ); + + /*----------------------------------********---------------------------------*/ + if (array_key_exists('USR_COST_BY_HOUR', $arrayDataAux)) { + $arrayData['USR_COST_BY_HOUR'] = $arrayDataAux['USR_COST_BY_HOUR']; + } + + if (array_key_exists('USR_UNIT_COST', $arrayDataAux)) { + $arrayData['USR_UNIT_COST'] = $arrayDataAux['USR_UNIT_COST']; + } + /*----------------------------------********---------------------------------*/ $this->throwExceptionIfDataIsInvalid("", $arrayData); @@ -604,16 +618,31 @@ class User \G::LoadSystem("rbac"); //Verify data - $process = new \ProcessMaker\BusinessModel\Process(); $validator = new \ProcessMaker\BusinessModel\Validator(); $validator->throwExceptionIfDataIsNotArray($arrayData, "\$arrayData"); $validator->throwExceptionIfDataIsEmpty($arrayData, "\$arrayData"); //Set data - $arrayData = array_change_key_case($arrayData, CASE_UPPER); + $arrayDataAux = array_change_key_case($arrayData, CASE_UPPER); + $arrayData = $arrayDataAux; $arrayDataBackup = $arrayData; + unset( + $arrayData['USR_COST_BY_HOUR'], + $arrayData['USR_UNIT_COST'] + ); + + /*----------------------------------********---------------------------------*/ + if (array_key_exists('USR_COST_BY_HOUR', $arrayDataAux)) { + $arrayData['USR_COST_BY_HOUR'] = $arrayDataAux['USR_COST_BY_HOUR']; + } + + if (array_key_exists('USR_UNIT_COST', $arrayDataAux)) { + $arrayData['USR_UNIT_COST'] = $arrayDataAux['USR_UNIT_COST']; + } + /*----------------------------------********---------------------------------*/ + //Verify data $this->throwExceptionIfNotExistsUser($userUid, $this->arrayFieldNameForException["usrUid"]); @@ -625,12 +654,13 @@ class User $permission = $this->loadUserRolePermission("PROCESSMAKER", $userUidLogged); foreach ($permission as $key => $value) { - if ($value["PER_CODE"] == "PM_USERS") { + if (preg_match('/^(?:PM_USERS|PM_EDITPERSONALINFO)$/', $value['PER_CODE'])) { $countPermission = $countPermission + 1; + break; } } - if ($countPermission != 1) { + if ($countPermission == 0) { throw new \Exception(\G::LoadTranslation("ID_USER_CAN_NOT_UPDATE", array($userUidLogged))); } @@ -1260,9 +1290,7 @@ class User \G::resizeImage(PATH_IMAGES_ENVIRONMENT_USERS . $userUid . '.' . $aAux[1], 96, 96, PATH_IMAGES_ENVIRONMENT_USERS . $userUid . '.gif'); } } else { - $result->success = false; - $result->fileError = true; - throw (new \Exception($result)); + throw new \Exception(\G::LoadTranslation('ID_ERROR') . ' ' . $_FILES['USR_PHOTO']['error']); } } catch (\Exception $e) { throw $e; @@ -1409,5 +1437,38 @@ class User throw $e; } } + + /** + * AuditLog + * + * @param string $option Option + * @param array $arrayData Data + * + * @return void + */ + public function auditLog($option, array $arrayData) + { + try { + $firstName = (array_key_exists('USR_FIRSTNAME', $arrayData))? ' - First Name: ' . $arrayData['USR_FIRSTNAME'] : ''; + $lastName = (array_key_exists('USR_LASTNAME', $arrayData))? ' - Last Name: ' . $arrayData['USR_LASTNAME'] : ''; + $email = (array_key_exists('USR_EMAIL', $arrayData))? ' - Email: ' . $arrayData['USR_EMAIL'] : ''; + $dueDate = (array_key_exists('USR_DUE_DATE', $arrayData))? ' - Due Date: ' . $arrayData['USR_DUE_DATE'] : ''; + $status = (array_key_exists('USR_STATUS', $arrayData))? ' - Status: ' . $arrayData['USR_STATUS'] : ''; + $address = (array_key_exists('USR_ADDRESS', $arrayData))? ' - Address: ' . $arrayData['USR_ADDRESS'] : ''; + $phone = (array_key_exists('USR_PHONE', $arrayData))? ' - Phone: ' . $arrayData['USR_PHONE'] : ''; + $zipCode = (array_key_exists('USR_ZIP_CODE', $arrayData))? ' - Zip Code: ' . $arrayData['USR_ZIP_CODE'] : ''; + $position = (array_key_exists('USR_POSITION', $arrayData))? ' - Position: ' . $arrayData['USR_POSITION'] : ''; + $role = (array_key_exists('USR_ROLE', $arrayData))? ' - Role: ' . $arrayData['USR_ROLE'] : ''; + $languageDef = (array_key_exists('USR_DEFAULT_LANG', $arrayData))? ' - Default Language: ' . $arrayData['USR_DEFAULT_LANG'] : ''; + $timeZone = (array_key_exists('USR_TIME_ZONE', $arrayData))? ' - Time Zone: ' . $arrayData['USR_TIME_ZONE'] : ''; + + $str = 'User Name: ' . $arrayData['USR_USERNAME'] . ' - User ID: (' . $arrayData['USR_UID'] . ')' . + $firstName . $lastName . $email . $dueDate . $status . $address . $phone . $zipCode . $position . $role . $timeZone . $languageDef; + + \G::auditLog(($option == 'INS')? 'CreateUser' : 'UpdateUser', $str); + } catch (\Exception $e) { + throw $e; + } + } } diff --git a/workflow/engine/templates/users/users.js b/workflow/engine/templates/users/users.js index c9164bda0..2849f4d9a 100755 --- a/workflow/engine/templates/users/users.js +++ b/workflow/engine/templates/users/users.js @@ -1226,7 +1226,7 @@ function userFrmEditSubmit() Ext.getCmp("frmDetails").getForm().submit({ url : "usersAjax", params : { - action : "saveUser", + action: __ACTION__, USR_UID : USR_UID, USR_CITY : global.IS_UID },