Admin->Users. Al crear un nuevo Usuario el campo Default Main Menu Option no guarda el valor seleccionado. Cuando se pretende editar ese campo aparece con otro valor.
1545 lines
66 KiB
PHP
1545 lines
66 KiB
PHP
<?php
|
|
namespace ProcessMaker\BusinessModel;
|
|
use \G;
|
|
|
|
class User
|
|
{
|
|
private $arrayFieldDefinition = array(
|
|
"USR_UID" => array("type" => "string", "required" => false, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "usrUid"),
|
|
"USR_FIRSTNAME" => array("type" => "string", "required" => true, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "usrFirstname"),
|
|
"USR_LASTNAME" => array("type" => "string", "required" => true, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "usrLastname"),
|
|
"USR_USERNAME" => array("type" => "string", "required" => true, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "usrUsername"),
|
|
"USR_EMAIL" => array("type" => "string", "required" => true, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "usrEmail"),
|
|
"USR_ADDRESS" => array("type" => "string", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "usrAddress"),
|
|
"USR_ZIP_CODE" => array("type" => "string", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "usrZipCode"),
|
|
"USR_COUNTRY" => array("type" => "string", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "usrCountry"),
|
|
"USR_CITY" => array("type" => "string", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "usrCity"),
|
|
"USR_LOCATION" => array("type" => "string", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "usrLocation"),
|
|
"USR_PHONE" => array("type" => "string", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "usrPhone"),
|
|
"USR_POSITION" => array("type" => "string", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "usrPosition"),
|
|
"USR_REPLACED_BY" => array("type" => "string", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "usrReplacedBy"),
|
|
"USR_DUE_DATE" => array("type" => "date", "required" => true, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "usrDueDate"),
|
|
"USR_CALENDAR" => array("type" => "string", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "usrCalendar"),
|
|
"USR_STATUS" => array("type" => "string", "required" => true, "empty" => false, "defaultValues" => array("ACTIVE", "INACTIVE", "VACATION"), "fieldNameAux" => "usrStatus"),
|
|
"USR_ROLE" => array("type" => "string", "required" => true, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "usrRole"),
|
|
"USR_NEW_PASS" => array("type" => "string", "required" => true, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "usrNewPass"),
|
|
"USR_UX" => array("type" => "string", "required" => false, "empty" => false, "defaultValues" => array("NORMAL", "SIMPLIFIED", "SWITCHABLE", "SINGLE"), "fieldNameAux" => "usrUx"),
|
|
"DEP_UID" => array("type" => "string", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "depUid"),
|
|
"USR_BIRTHDAY" => array("type" => "date", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "usrBirthday"),
|
|
"USR_FAX" => array("type" => "string", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "usrFax"),
|
|
"USR_CELLULAR" => array("type" => "string", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "usrCellular"),
|
|
/*----------------------------------********---------------------------------*/
|
|
"USR_COST_BY_HOUR" => array("type" => "string", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "usrCostByHour"),
|
|
"USR_UNIT_COST" => array("type" => "string", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "usrUnitCost"),
|
|
/*----------------------------------********---------------------------------*/
|
|
'USR_LOGGED_NEXT_TIME' => ['type' => 'int', 'required' => false, 'empty' => false, 'defaultValues' => [0, 1], 'fieldNameAux' => 'usrLoggedNextTime'],
|
|
'USR_TIME_ZONE' => ['type' => 'string', 'required' => false, 'empty' => true, 'defaultValues' => [], 'fieldNameAux' => 'usrTimeZone']
|
|
);
|
|
|
|
private $formatFieldNameInUppercase = true;
|
|
|
|
private $arrayFieldNameForException = array(
|
|
"usrPhoto" => "USR_PHOTO"
|
|
);
|
|
|
|
private $arrayPermissionsForEditUser = array (
|
|
'USR_FIRSTNAME' => 'PM_EDIT_USER_PROFILE_FIRST_NAME',
|
|
'USR_LASTNAME' => 'PM_EDIT_USER_PROFILE_LAST_NAME',
|
|
'USR_USERNAME' => 'PM_EDIT_USER_PROFILE_USERNAME',
|
|
'USR_EMAIL' => 'PM_EDIT_USER_PROFILE_EMAIL',
|
|
'USR_ADDRESS' => 'PM_EDIT_USER_PROFILE_ADDRESS',
|
|
'USR_ZIP_CODE' => 'PM_EDIT_USER_PROFILE_ZIP_CODE',
|
|
'USR_COUNTRY' => 'PM_EDIT_USER_PROFILE_COUNTRY',
|
|
'USR_REGION' => 'PM_EDIT_USER_PROFILE_STATE_OR_REGION',
|
|
'USR_LOCATION' => 'PM_EDIT_USER_PROFILE_LOCATION',
|
|
'USR_PHONE' => 'PM_EDIT_USER_PROFILE_PHONE',
|
|
'USR_POSITION' => 'PM_EDIT_USER_PROFILE_POSITION',
|
|
'USR_REPLACED_BY' => 'PM_EDIT_USER_PROFILE_REPLACED_BY',
|
|
'USR_DUE_DATE' => 'PM_EDIT_USER_PROFILE_EXPIRATION_DATE',
|
|
'USR_CALENDAR' => 'PM_EDIT_USER_PROFILE_CALENDAR',
|
|
'USR_STATUS' => 'PM_EDIT_USER_PROFILE_STATUS',
|
|
'USR_ROLE' => 'PM_EDIT_USER_PROFILE_ROLE',
|
|
'USR_TIME_ZONE' => 'PM_EDIT_USER_PROFILE_TIME_ZONE',
|
|
'USR_DEFAULT_LANG' => 'PM_EDIT_USER_PROFILE_DEFAULT_LANGUAGE',
|
|
'USR_COST_BY_HOUR' => 'PM_EDIT_USER_PROFILE_COSTS',
|
|
'USR_UNIT_COST' => 'PM_EDIT_USER_PROFILE_COSTS',
|
|
'USR_CUR_PASS' => 'PM_EDIT_USER_PROFILE_PASSWORD',
|
|
'USR_NEW_PASS' => 'PM_EDIT_USER_PROFILE_PASSWORD',
|
|
'USR_CNF_PASS' => 'PM_EDIT_USER_PROFILE_PASSWORD',
|
|
'USR_LOGGED_NEXT_TIME' => 'PM_EDIT_USER_PROFILE_USER_MUST_CHANGE_PASSWORD_AT_NEXT_LOGON',
|
|
'USR_PHOTO' => 'PM_EDIT_USER_PROFILE_PHOTO',
|
|
'PREF_DEFAULT_MENUSELECTED' => 'PM_EDIT_USER_PROFILE_DEFAULT_MAIN_MENU_OPTIONS',
|
|
'PREF_DEFAULT_CASES_MENUSELECTED' => 'PM_EDIT_USER_PROFILE_DEFAULT_CASES_MENU_OPTIONS'
|
|
);
|
|
|
|
/**
|
|
* Constructor of the class
|
|
*
|
|
* return void
|
|
*/
|
|
public function __construct()
|
|
{
|
|
try {
|
|
foreach ($this->arrayFieldDefinition as $key => $value) {
|
|
$this->arrayFieldNameForException[$value["fieldNameAux"]] = $key;
|
|
}
|
|
} catch (\Exception $e) {
|
|
throw $e;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @return array
|
|
*/
|
|
public function getPermissionsForEdit(){
|
|
return $this->arrayPermissionsForEditUser;
|
|
}
|
|
|
|
/**
|
|
* Set the format of the fields name (uppercase, lowercase)
|
|
*
|
|
* @param bool $flag Value that set the format
|
|
*
|
|
* return void
|
|
*/
|
|
public function setFormatFieldNameInUppercase($flag)
|
|
{
|
|
try {
|
|
$this->formatFieldNameInUppercase = $flag;
|
|
|
|
$this->setArrayFieldNameForException($this->arrayFieldNameForException);
|
|
} catch (\Exception $e) {
|
|
throw $e;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Set exception users for fields
|
|
*
|
|
* @param array $arrayData Data with the fields
|
|
*
|
|
* return void
|
|
*/
|
|
public function setArrayFieldNameForException(array $arrayData)
|
|
{
|
|
try {
|
|
foreach ($arrayData as $key => $value) {
|
|
$this->arrayFieldNameForException[$key] = $this->getFieldNameByFormatFieldName($value);
|
|
}
|
|
} catch (\Exception $e) {
|
|
throw $e;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get the name of the field according to the format
|
|
*
|
|
* @param string $fieldName Field name
|
|
*
|
|
* return string Return the field name according the format
|
|
*/
|
|
public function getFieldNameByFormatFieldName($fieldName)
|
|
{
|
|
try {
|
|
return ($this->formatFieldNameInUppercase)? strtoupper($fieldName) : strtolower($fieldName);
|
|
} catch (\Exception $e) {
|
|
throw $e;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Verify if exists the Name of a User
|
|
*
|
|
* @param string $userName Name
|
|
* @param string $userUidToExclude Unique id of User to exclude
|
|
*
|
|
* return bool Return true if exists the Name of a User, false otherwise
|
|
*/
|
|
public function existsName($userName, $userUidToExclude = "")
|
|
{
|
|
try {
|
|
$criteria = $this->getUserCriteria();
|
|
|
|
if ($userUidToExclude != "") {
|
|
$criteria->add(\UsersPeer::USR_UID, $userUidToExclude, \Criteria::NOT_EQUAL);
|
|
}
|
|
|
|
$criteria->add(\UsersPeer::USR_USERNAME, $userName, \Criteria::EQUAL);
|
|
|
|
//QUERY
|
|
$rsCriteria = \UsersPeer::doSelectRS($criteria);
|
|
|
|
return ($rsCriteria->next())? true : false;
|
|
} catch (\Exception $e) {
|
|
throw $e;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Verify if exists the Name of a User
|
|
*
|
|
* @param string $userName Name
|
|
* @param string $fieldNameForException Field name for the exception
|
|
* @param string $userUidToExclude Unique id of User to exclude
|
|
*
|
|
* return void Throw exception if exists the title of a User
|
|
*/
|
|
public function throwExceptionIfExistsName($userName, $fieldNameForException, $userUidToExclude = "")
|
|
{
|
|
try {
|
|
if ($this->existsName($userName, $userUidToExclude)) {
|
|
throw new \Exception(\G::LoadTranslation("ID_USER_NAME_ALREADY_EXISTS", array($fieldNameForException, $userName)));
|
|
}
|
|
} catch (\Exception $e) {
|
|
throw $e;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Verify password
|
|
*
|
|
* @param string $userPassword Password
|
|
* @param string $fieldNameForException Field name for the exception
|
|
*
|
|
* return void Throw exception if password is invalid
|
|
*/
|
|
public function throwExceptionIfPasswordIsInvalid($userPassword, $fieldNameForException)
|
|
{
|
|
try {
|
|
$result = $this->testPassword($userPassword);
|
|
|
|
if (!$result["STATUS"]) {
|
|
throw new \Exception($fieldNameForException . ": " . $result["DESCRIPTION"]);
|
|
}
|
|
} catch (\Exception $e) {
|
|
throw $e;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Validate the data if they are invalid (INSERT and UPDATE)
|
|
*
|
|
* @param string $userUid Unique id of User
|
|
* @param array $arrayData Data
|
|
*
|
|
* return void Throw exception if data has an invalid value
|
|
*/
|
|
public function throwExceptionIfDataIsInvalid($userUid, array $arrayData)
|
|
{
|
|
try {
|
|
//Set variables
|
|
$arrayUserData = ($userUid == "")? array() : $this->getUser($userUid, true);
|
|
$flagInsert = ($userUid == "")? true : false;
|
|
|
|
$arrayFinalData = array_merge($arrayUserData, $arrayData);
|
|
|
|
//Verify data - Field definition.
|
|
$process = new \ProcessMaker\BusinessModel\Process();
|
|
|
|
$process->throwExceptionIfDataNotMetFieldDefinition($arrayData, $this->arrayFieldDefinition, $this->arrayFieldNameForException, $flagInsert);
|
|
|
|
//Verify data
|
|
if (isset($arrayData["USR_USERNAME"])) {
|
|
$this->throwExceptionIfExistsName($arrayData["USR_USERNAME"], $this->arrayFieldNameForException["usrUsername"], $userUid);
|
|
}
|
|
|
|
if (isset($arrayData["USR_EMAIL"])) {
|
|
if (!filter_var($arrayData["USR_EMAIL"], FILTER_VALIDATE_EMAIL)) {
|
|
throw new \Exception($this->arrayFieldNameForException["usrEmail"] . ": " . \G::LoadTranslation("ID_INCORRECT_EMAIL"));
|
|
}
|
|
}
|
|
|
|
if (isset($arrayData["USR_NEW_PASS"])) {
|
|
$this->throwExceptionIfPasswordIsInvalid($arrayData["USR_NEW_PASS"], $this->arrayFieldNameForException["usrNewPass"]);
|
|
}
|
|
|
|
if (isset($arrayData["USR_REPLACED_BY"]) && $arrayData["USR_REPLACED_BY"] != "") {
|
|
$obj = \UsersPeer::retrieveByPK($arrayData["USR_REPLACED_BY"]);
|
|
|
|
if (is_null($obj)) {
|
|
throw new \Exception(\G::LoadTranslation("ID_USER_DOES_NOT_EXIST", array($this->arrayFieldNameForException["usrReplacedBy"], $arrayData["USR_REPLACED_BY"])));
|
|
}
|
|
}
|
|
|
|
if (isset($arrayData["USR_DUE_DATE"])) {
|
|
$arrayUserDueDate = explode("-", $arrayData["USR_DUE_DATE"]);
|
|
|
|
if (ctype_digit($arrayUserDueDate[0])) {
|
|
if (!checkdate($arrayUserDueDate[1], $arrayUserDueDate[2], $arrayUserDueDate[0])) {
|
|
throw new \Exception($this->arrayFieldNameForException["usrDueDate"] . ": " . \G::LoadTranslation("ID_MSG_ERROR_DUE_DATE"));
|
|
}
|
|
} else {
|
|
throw new \Exception($this->arrayFieldNameForException["usrDueDate"] . ": " . \G::LoadTranslation("ID_MSG_ERROR_DUE_DATE"));
|
|
}
|
|
}
|
|
|
|
if (isset($arrayData["USR_ROLE"])) {
|
|
require_once (PATH_RBAC_HOME . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "Roles.php");
|
|
|
|
$criteria = new \Criteria("rbac");
|
|
|
|
$criteria->add(\RolesPeer::ROL_CODE, $arrayData["USR_ROLE"]);
|
|
$rsCriteria = \RolesPeer::doSelectRS($criteria);
|
|
|
|
if (!$rsCriteria->next()) {
|
|
throw new \Exception(\G::LoadTranslation("ID_INVALID_VALUE_FOR", array($this->arrayFieldNameForException["usrRole"])));
|
|
}
|
|
}
|
|
|
|
if (isset($arrayData["USR_COUNTRY"]) && $arrayData["USR_COUNTRY"] != "") {
|
|
$obj = \IsoCountryPeer::retrieveByPK($arrayData["USR_COUNTRY"]);
|
|
|
|
if (is_null($obj)) {
|
|
throw new \Exception(\G::LoadTranslation("ID_INVALID_VALUE_FOR", array($this->arrayFieldNameForException["usrCountry"])));
|
|
}
|
|
}
|
|
|
|
if (isset($arrayData["USR_CITY"]) && $arrayData["USR_CITY"] != "") {
|
|
if (!isset($arrayFinalData["USR_COUNTRY"]) || $arrayFinalData["USR_COUNTRY"] == "") {
|
|
throw new \Exception(\G::LoadTranslation("ID_INVALID_VALUE_FOR", array($this->arrayFieldNameForException["usrCountry"])));
|
|
}
|
|
|
|
$obj = \IsoSubdivisionPeer::retrieveByPK($arrayFinalData["USR_COUNTRY"], $arrayData["USR_CITY"]);
|
|
|
|
if (is_null($obj)) {
|
|
throw new \Exception(\G::LoadTranslation("ID_INVALID_VALUE_FOR", array($this->arrayFieldNameForException["usrCity"])));
|
|
}
|
|
}
|
|
|
|
if (isset($arrayData["USR_LOCATION"]) && $arrayData["USR_LOCATION"] != "") {
|
|
if (!isset($arrayFinalData["USR_COUNTRY"]) || $arrayFinalData["USR_COUNTRY"] == "") {
|
|
throw new \Exception(\G::LoadTranslation("ID_INVALID_VALUE_FOR", array($this->arrayFieldNameForException["usrCountry"])));
|
|
}
|
|
|
|
$obj = \IsoLocationPeer::retrieveByPK($arrayFinalData["USR_COUNTRY"], $arrayData["USR_LOCATION"]);
|
|
|
|
if (is_null($obj)) {
|
|
throw new \Exception(\G::LoadTranslation("ID_INVALID_VALUE_FOR", array($this->arrayFieldNameForException["usrLocation"])));
|
|
}
|
|
}
|
|
|
|
if (isset($arrayData["USR_CALENDAR"]) && $arrayData["USR_CALENDAR"] != "") {
|
|
$obj = \CalendarDefinitionPeer::retrieveByPK($arrayData["USR_CALENDAR"]);
|
|
|
|
if (is_null($obj)) {
|
|
throw new \Exception(\G::LoadTranslation("ID_CALENDAR_DOES_NOT_EXIST", array($this->arrayFieldNameForException["usrCalendar"], $arrayData["USR_CALENDAR"])));
|
|
}
|
|
}
|
|
|
|
if (isset($arrayData["DEP_UID"]) && $arrayData["DEP_UID"] != "") {
|
|
$department = new \Department();
|
|
|
|
if (!$department->existsDepartment($arrayData["DEP_UID"])) {
|
|
throw new \Exception(\G::LoadTranslation("ID_DEPARTMENT_NOT_EXIST", array($this->arrayFieldNameForException["depUid"], $arrayData["DEP_UID"])));
|
|
}
|
|
}
|
|
|
|
if (isset($arrayData['USR_TIME_ZONE']) && $arrayData['USR_TIME_ZONE'] != '') {
|
|
if (!in_array($arrayData['USR_TIME_ZONE'], \DateTimeZone::listIdentifiers())) {
|
|
throw new \Exception(\G::LoadTranslation('ID_TIME_ZONE_DOES_NOT_EXIST', [$this->arrayFieldNameForException['usrTimeZone'], $arrayData['USR_TIME_ZONE']]));
|
|
}
|
|
}
|
|
} catch (\Exception $e) {
|
|
throw $e;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Verify if does not exist the User in table USERS
|
|
*
|
|
* @param string $userUid Unique id of Email Server
|
|
* @param string $fieldNameForException Field name for the exception
|
|
*
|
|
* return void Throw exception if does not exist the User in table USERS
|
|
*/
|
|
public function throwExceptionIfNotExistsUser($userUid, $fieldNameForException)
|
|
{
|
|
try {
|
|
$obj = \UsersPeer::retrieveByPK($userUid);
|
|
|
|
if (is_null($obj) || $obj->getUsrUsername() == "") {
|
|
throw new \Exception(\G::LoadTranslation("ID_USER_DOES_NOT_EXIST", array($fieldNameForException, $userUid)));
|
|
}
|
|
} catch (\Exception $e) {
|
|
throw $e;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get User record
|
|
*
|
|
* @param string $userUid Unique id of User
|
|
* @param array $arrayVariableNameForException Variable name for exception
|
|
* @param bool $throwException Flag to throw the exception if the main parameters are invalid or do not exist
|
|
* (TRUE: throw the exception; FALSE: returns FALSE)
|
|
*
|
|
* @return array Returns an array with User record, ThrowTheException/FALSE otherwise
|
|
*/
|
|
public function getUserRecordByPk($userUid, array $arrayVariableNameForException, $throwException = true)
|
|
{
|
|
try {
|
|
$obj = \UsersPeer::retrieveByPK($userUid);
|
|
|
|
if (is_null($obj)) {
|
|
if ($throwException) {
|
|
throw new \Exception(\G::LoadTranslation(
|
|
'ID_USER_DOES_NOT_EXIST', [$arrayVariableNameForException['$userUid'], $userUid]
|
|
));
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
//Return
|
|
return $obj->toArray(\BasePeer::TYPE_FIELDNAME);
|
|
} catch (\Exception $e) {
|
|
throw $e;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get custom record
|
|
*
|
|
* @param array $record Record
|
|
*
|
|
* @return array Return an array with custom record
|
|
*/
|
|
private function __getUserCustomRecordFromRecord(array $record)
|
|
{
|
|
try {
|
|
//Get Calendar
|
|
$calendar = new \Calendar();
|
|
$calendarInfo = $calendar->getCalendarFor( $record["USR_UID"], "", "" );
|
|
$aFields["USR_CALENDAR_UID"] = ($calendarInfo["CALENDAR_APPLIED"] != "DEFAULT") ? $calendarInfo["CALENDAR_UID"] : "";
|
|
$aFields["USR_CALENDAR"] = ($aFields["USR_CALENDAR_UID"] != "") ? $calendar->calendarName( $aFields["USR_CALENDAR_UID"] ) : $aFields["USR_CALENDAR_UID"];
|
|
|
|
//Get photo
|
|
$pathPhotoUser = PATH_IMAGES_ENVIRONMENT_USERS . $record["USR_UID"] . ".gif";
|
|
if (! file_exists( $pathPhotoUser )) {
|
|
$pathPhotoUser = PATH_HOME . "public_html" . PATH_SEP . "images" . PATH_SEP . "user.gif";
|
|
}
|
|
|
|
$arrayResult = [];
|
|
$arrayResult[$this->getFieldNameByFormatFieldName('USR_UID')] = $record['USR_UID'];
|
|
$arrayResult[$this->getFieldNameByFormatFieldName('USR_USERNAME')] = $record['USR_USERNAME'];
|
|
//$arrayResult[$this->getFieldNameByFormatFieldName('USR_PASSWORD')] = $record['USR_PASSWORD'];
|
|
$arrayResult[$this->getFieldNameByFormatFieldName('USR_FIRSTNAME')] = $record['USR_FIRSTNAME'];
|
|
$arrayResult[$this->getFieldNameByFormatFieldName('USR_LASTNAME')] = $record['USR_LASTNAME'];
|
|
$arrayResult[$this->getFieldNameByFormatFieldName('USR_EMAIL')] = $record['USR_EMAIL'];
|
|
$arrayResult[$this->getFieldNameByFormatFieldName('USR_DUE_DATE')] = $record['USR_DUE_DATE'];
|
|
$arrayResult[$this->getFieldNameByFormatFieldName('USR_CREATE_DATE')] = $record['USR_CREATE_DATE'];
|
|
$arrayResult[$this->getFieldNameByFormatFieldName('USR_UPDATE_DATE')] = $record['USR_UPDATE_DATE'];
|
|
$arrayResult[$this->getFieldNameByFormatFieldName('USR_STATUS')] = $record['USR_STATUS'];
|
|
$arrayResult[$this->getFieldNameByFormatFieldName('USR_COUNTRY')] = $record['USR_COUNTRY'];
|
|
$arrayResult[$this->getFieldNameByFormatFieldName('USR_CITY')] = $record['USR_CITY'];
|
|
$arrayResult[$this->getFieldNameByFormatFieldName('USR_LOCATION')] = $record['USR_LOCATION'];
|
|
$arrayResult[$this->getFieldNameByFormatFieldName('USR_ADDRESS')] = $record['USR_ADDRESS'];
|
|
$arrayResult[$this->getFieldNameByFormatFieldName('USR_PHONE')] = $record['USR_PHONE'];
|
|
$arrayResult[$this->getFieldNameByFormatFieldName('USR_FAX')] = $record['USR_FAX'];
|
|
$arrayResult[$this->getFieldNameByFormatFieldName('USR_CELLULAR')] = $record['USR_CELLULAR'];
|
|
$arrayResult[$this->getFieldNameByFormatFieldName('USR_ZIP_CODE')] = $record['USR_ZIP_CODE'];
|
|
$arrayResult[$this->getFieldNameByFormatFieldName('DEP_UID')] = $record['DEP_UID'];
|
|
$arrayResult[$this->getFieldNameByFormatFieldName('USR_POSITION')] = $record['USR_POSITION'];
|
|
$arrayResult[$this->getFieldNameByFormatFieldName('USR_RESUME')] = $record['USR_RESUME'];
|
|
$arrayResult[$this->getFieldNameByFormatFieldName('USR_BIRTHDAY')] = $record['USR_BIRTHDAY'];
|
|
$arrayResult[$this->getFieldNameByFormatFieldName('USR_ROLE')] = $record['USR_ROLE'];
|
|
$arrayResult[$this->getFieldNameByFormatFieldName('USR_REPORTS_TO')] = $record['USR_REPORTS_TO'];
|
|
$arrayResult[$this->getFieldNameByFormatFieldName('USR_REPLACED_BY')] = $record['USR_REPLACED_BY'];
|
|
$arrayResult[$this->getFieldNameByFormatFieldName('USR_CALENDAR_UID')] = $aFields['USR_CALENDAR_UID'];
|
|
$arrayResult[$this->getFieldNameByFormatFieldName('USR_CALENDAR_NAME')] = $aFields['USR_CALENDAR'];
|
|
$arrayResult[$this->getFieldNameByFormatFieldName('USR_UX')] = $record['USR_UX'];
|
|
/*----------------------------------********---------------------------------*/
|
|
$arrayResult[$this->getFieldNameByFormatFieldName('USR_COST_BY_HOUR')] = $record['USR_COST_BY_HOUR'];
|
|
$arrayResult[$this->getFieldNameByFormatFieldName('USR_UNIT_COST')] = $record['USR_UNIT_COST'];
|
|
/*----------------------------------********---------------------------------*/
|
|
$arrayResult[$this->getFieldNameByFormatFieldName('USR_PHOTO_PATH')] = $pathPhotoUser;
|
|
|
|
if (isset($_SESSION['__SYSTEM_UTC_TIME_ZONE__']) && $_SESSION['__SYSTEM_UTC_TIME_ZONE__']) {
|
|
$arrayResult[$this->getFieldNameByFormatFieldName('USR_TIME_ZONE')] = (trim($record['USR_TIME_ZONE']) != '')? trim($record['USR_TIME_ZONE']) : \ProcessMaker\Util\System::getTimeZone();
|
|
}
|
|
|
|
//Return
|
|
return $arrayResult;
|
|
} catch (\Exception $e) {
|
|
throw $e;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get criteria for User
|
|
*
|
|
* return object
|
|
*/
|
|
public function getUserCriteria()
|
|
{
|
|
try {
|
|
$criteria = new \Criteria("workflow");
|
|
|
|
$criteria->addSelectColumn(\UsersPeer::USR_UID);
|
|
$criteria->addSelectColumn(\UsersPeer::USR_USERNAME);
|
|
$criteria->addSelectColumn(\UsersPeer::USR_PASSWORD);
|
|
$criteria->addSelectColumn(\UsersPeer::USR_FIRSTNAME);
|
|
$criteria->addSelectColumn(\UsersPeer::USR_LASTNAME);
|
|
$criteria->addSelectColumn(\UsersPeer::USR_EMAIL);
|
|
$criteria->addSelectColumn(\UsersPeer::USR_DUE_DATE);
|
|
$criteria->addSelectColumn(\UsersPeer::USR_CREATE_DATE);
|
|
$criteria->addSelectColumn(\UsersPeer::USR_UPDATE_DATE);
|
|
$criteria->addSelectColumn(\UsersPeer::USR_STATUS);
|
|
$criteria->addSelectColumn(\UsersPeer::USR_COUNTRY);
|
|
$criteria->addSelectColumn(\UsersPeer::USR_CITY);
|
|
$criteria->addSelectColumn(\UsersPeer::USR_LOCATION);
|
|
$criteria->addSelectColumn(\UsersPeer::USR_ADDRESS);
|
|
$criteria->addSelectColumn(\UsersPeer::USR_PHONE);
|
|
$criteria->addSelectColumn(\UsersPeer::USR_FAX);
|
|
$criteria->addSelectColumn(\UsersPeer::USR_CELLULAR);
|
|
$criteria->addSelectColumn(\UsersPeer::USR_ZIP_CODE);
|
|
$criteria->addSelectColumn(\UsersPeer::DEP_UID);
|
|
$criteria->addSelectColumn(\UsersPeer::USR_POSITION);
|
|
$criteria->addSelectColumn(\UsersPeer::USR_RESUME);
|
|
$criteria->addSelectColumn(\UsersPeer::USR_BIRTHDAY);
|
|
$criteria->addSelectColumn(\UsersPeer::USR_ROLE);
|
|
$criteria->addSelectColumn(\UsersPeer::USR_REPORTS_TO);
|
|
$criteria->addSelectColumn(\UsersPeer::USR_REPLACED_BY);
|
|
$criteria->addSelectColumn(\UsersPeer::USR_UX);
|
|
/*----------------------------------********---------------------------------*/
|
|
$criteria->addSelectColumn(\UsersPeer::USR_COST_BY_HOUR);
|
|
$criteria->addSelectColumn(\UsersPeer::USR_UNIT_COST);
|
|
/*----------------------------------********---------------------------------*/
|
|
$criteria->addSelectColumn(\UsersPeer::USR_TIME_ZONE);
|
|
|
|
//Return
|
|
return $criteria;
|
|
} catch (\Exception $e) {
|
|
throw $e;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Create User
|
|
*
|
|
* @param array $arrayData Data
|
|
*
|
|
* return array Return data of the new User created
|
|
*/
|
|
public function create(array $arrayData)
|
|
{
|
|
try {
|
|
\G::LoadSystem("rbac");
|
|
|
|
//Verify data
|
|
$validator = new \ProcessMaker\BusinessModel\Validator();
|
|
|
|
$validator->throwExceptionIfDataIsNotArray($arrayData, "\$arrayData");
|
|
$validator->throwExceptionIfDataIsEmpty($arrayData, "\$arrayData");
|
|
|
|
//Set data
|
|
$arrayDataAux = array_change_key_case($arrayData, CASE_UPPER);
|
|
$arrayData = $arrayDataAux;
|
|
|
|
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);
|
|
|
|
//Create
|
|
$cnn = \Propel::getConnection("workflow");
|
|
|
|
try {
|
|
$rbac = new \RBAC();
|
|
$user = new \Users();
|
|
|
|
$rbac->initRBAC();
|
|
|
|
$arrayData["USR_PASSWORD"] = \Bootstrap::hashPassword($arrayData["USR_NEW_PASS"]);
|
|
|
|
$arrayData["USR_BIRTHDAY"] = (isset($arrayData["USR_BIRTHDAY"]))? $arrayData["USR_BIRTHDAY"] : date("Y-m-d");
|
|
$arrayData["USR_LOGGED_NEXT_TIME"] = (isset($arrayData["USR_LOGGED_NEXT_TIME"]))? $arrayData["USR_LOGGED_NEXT_TIME"] : 0;
|
|
$arrayData["USR_CREATE_DATE"] = date("Y-m-d H:i:s");
|
|
$arrayData["USR_UPDATE_DATE"] = date("Y-m-d H:i:s");
|
|
|
|
//Create in rbac
|
|
//$userStatus = $arrayData["USR_STATUS"];
|
|
//
|
|
//if ($arrayData["USR_STATUS"] == "ACTIVE") {
|
|
// $arrayData["USR_STATUS"] = 1;
|
|
//}
|
|
//
|
|
//if ($arrayData["USR_STATUS"] == "INACTIVE") {
|
|
// $arrayData["USR_STATUS"] = 0;
|
|
//}
|
|
//
|
|
//$userUid = $this->createUser($arrayData);
|
|
//
|
|
//if ($arrayData["USR_ROLE"] != "") {
|
|
// $this->assignRoleToUser($userUid, $arrayData["USR_ROLE"]);
|
|
//}
|
|
//
|
|
//$arrayData["USR_STATUS"] = $userStatus;
|
|
|
|
$userUid = $rbac->createUser($arrayData, $arrayData["USR_ROLE"]);
|
|
|
|
//Create in workflow
|
|
$arrayData["USR_UID"] = $userUid;
|
|
$arrayData["USR_PASSWORD"] = "00000000000000000000000000000000";
|
|
|
|
$result = $user->create($arrayData);
|
|
|
|
//User Properties
|
|
$userProperty = new \UsersProperties();
|
|
|
|
$aUserProperty = $userProperty->loadOrCreateIfNotExists($arrayData["USR_UID"], array("USR_PASSWORD_HISTORY" => serialize(array(\Bootstrap::hashPassword($arrayData["USR_PASSWORD"])))));
|
|
$aUserProperty["USR_LOGGED_NEXT_TIME"] = $arrayData["USR_LOGGED_NEXT_TIME"];
|
|
|
|
$userProperty->update($aUserProperty);
|
|
|
|
//Save Calendar assigment
|
|
if (isset($arrayData["USR_CALENDAR"])) {
|
|
//Save Calendar ID for this user
|
|
\G::LoadClass("calendar");
|
|
|
|
$calendar = new \Calendar();
|
|
$calendar->assignCalendarTo($arrayData["USR_UID"], $arrayData["USR_CALENDAR"], "USER");
|
|
}
|
|
|
|
//Return
|
|
return $this->getUser($userUid);
|
|
} catch (\Exception $e) {
|
|
$cnn->rollback();
|
|
|
|
throw $e;
|
|
}
|
|
} catch (\Exception $e) {
|
|
throw $e;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Update User
|
|
*
|
|
* @param string $userUid Unique id of User
|
|
* @param array $arrayData Data
|
|
* @param string $userUidLogged Unique id of User logged
|
|
*
|
|
* return array Return data of the User updated
|
|
*/
|
|
public function update($userUid, array $arrayData, $userUidLogged)
|
|
{
|
|
try {
|
|
\G::LoadSystem("rbac");
|
|
|
|
//Verify data
|
|
$validator = new \ProcessMaker\BusinessModel\Validator();
|
|
|
|
$validator->throwExceptionIfDataIsNotArray($arrayData, "\$arrayData");
|
|
$validator->throwExceptionIfDataIsEmpty($arrayData, "\$arrayData");
|
|
|
|
//Set data
|
|
$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"]);
|
|
|
|
$this->throwExceptionIfDataIsInvalid($userUid, $arrayData);
|
|
|
|
//Permission Admin
|
|
$countPermission = 0;
|
|
|
|
$permission = $this->loadUserRolePermission("PROCESSMAKER", $userUidLogged);
|
|
|
|
foreach ($permission as $key => $value) {
|
|
if (preg_match('/^(?:PM_USERS|PM_EDITPERSONALINFO)$/', $value['PER_CODE'])) {
|
|
$countPermission = $countPermission + 1;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if ($countPermission == 0) {
|
|
throw new \Exception(\G::LoadTranslation("ID_USER_CAN_NOT_UPDATE", array($userUidLogged)));
|
|
}
|
|
|
|
//Update
|
|
$cnn = \Propel::getConnection("workflow");
|
|
|
|
try {
|
|
$rbac = new \RBAC();
|
|
$user = new \Users();
|
|
|
|
$rbac->initRBAC();
|
|
|
|
if (isset($arrayData['USR_PASSWORD'])) {
|
|
$arrayData['USR_PASSWORD'] = \Bootstrap::hashPassword($arrayData['USR_PASSWORD']);
|
|
} else {
|
|
if (isset($arrayData['USR_NEW_PASS'])) {
|
|
$arrayData['USR_PASSWORD'] = \Bootstrap::hashPassword($arrayData['USR_NEW_PASS']);
|
|
}
|
|
}
|
|
|
|
$arrayData["USR_UID"] = $userUid;
|
|
$arrayData["USR_LOGGED_NEXT_TIME"] = (isset($arrayData["USR_LOGGED_NEXT_TIME"]))? $arrayData["USR_LOGGED_NEXT_TIME"] : 0;
|
|
$arrayData["USR_UPDATE_DATE"] = date("Y-m-d H:i:s");
|
|
|
|
$flagUserLoggedNextTime = false;
|
|
|
|
if (isset($arrayData["USR_PASSWORD"])) {
|
|
if ($arrayData["USR_PASSWORD"] != "") {
|
|
//require_once 'classes/model/UsersProperties.php';
|
|
|
|
$userProperty = new \UsersProperties();
|
|
$aUserProperty = $userProperty->loadOrCreateIfNotExists($userUid, array("USR_PASSWORD_HISTORY" => serialize(array(\Bootstrap::hashPassword($arrayData["USR_PASSWORD"])))));
|
|
|
|
$memKey = "rbacSession" . session_id();
|
|
$memcache = & \PMmemcached::getSingleton(defined("SYS_SYS")? SYS_SYS : "");
|
|
|
|
if (($rbac->aUserInfo = $memcache->get($memKey)) == false) {
|
|
$rbac->loadUserRolePermission("PROCESSMAKER", $userUidLogged);
|
|
$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"] = $arrayData["USR_LOGGED_NEXT_TIME"];
|
|
$userProperty->update($aUserProperty);
|
|
}
|
|
|
|
$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($arrayData['USR_PASSWORD'])) == 0) {
|
|
$sw = 0;
|
|
}
|
|
|
|
$c++;
|
|
}
|
|
|
|
if ($sw == 0) {
|
|
$sDescription = G::LoadTranslation("ID_POLICY_ALERT") . ":\n\n";
|
|
$sDescription = $sDescription . " - " . G::LoadTranslation("PASSWORD_HISTORY") . ": " . PPP_PASSWORD_HISTORY . "\n";
|
|
$sDescription = $sDescription . "\n" . G::LoadTranslation("ID_PLEASE_CHANGE_PASSWORD_POLICY") . "";
|
|
|
|
throw new \Exception($this->arrayFieldNameForException["usrNewPass"] . ": " . $sDescription);
|
|
}
|
|
|
|
if (count($aHistory) >= PPP_PASSWORD_HISTORY) {
|
|
$sLastPassw = array_shift($aHistory);
|
|
}
|
|
|
|
$aHistory[] = $arrayData["USR_PASSWORD"];
|
|
}
|
|
|
|
$aUserProperty["USR_LAST_UPDATE_DATE"] = date("Y-m-d H:i:s");
|
|
$aUserProperty["USR_LOGGED_NEXT_TIME"] = $arrayData["USR_LOGGED_NEXT_TIME"];
|
|
$aUserProperty["USR_PASSWORD_HISTORY"] = serialize($aHistory);
|
|
$userProperty->update($aUserProperty);
|
|
} else {
|
|
$flagUserLoggedNextTime = true;
|
|
}
|
|
} else {
|
|
$flagUserLoggedNextTime = true;
|
|
}
|
|
|
|
if ($flagUserLoggedNextTime) {
|
|
//require_once "classes/model/Users.php";
|
|
$oUser = new \Users();
|
|
$aUser = $oUser->load($userUid);
|
|
//require_once "classes/model/UsersProperties.php";
|
|
$oUserProperty = new \UsersProperties();
|
|
$aUserProperty = $oUserProperty->loadOrCreateIfNotExists($userUid, array("USR_PASSWORD_HISTORY" => serialize(array($aUser["USR_PASSWORD"]))));
|
|
$aUserProperty["USR_LOGGED_NEXT_TIME"] = $arrayData["USR_LOGGED_NEXT_TIME"];
|
|
$oUserProperty->update($aUserProperty);
|
|
}
|
|
|
|
//Update in rbac
|
|
if (isset($arrayData["USR_ROLE"])) {
|
|
$rbac->updateUser($arrayData, $arrayData["USR_ROLE"]);
|
|
} else {
|
|
$rbac->updateUser($arrayData);
|
|
}
|
|
|
|
//Update in workflow
|
|
$result = $user->update($arrayData);
|
|
|
|
//Save Calendar assigment
|
|
if (isset($arrayData["USR_CALENDAR"])) {
|
|
//Save Calendar ID for this user
|
|
\G::LoadClass("calendar");
|
|
|
|
$calendar = new \Calendar();
|
|
$calendar->assignCalendarTo($userUid, $arrayData["USR_CALENDAR"], "USER");
|
|
}
|
|
|
|
//Return
|
|
$arrayData = $arrayDataBackup;
|
|
|
|
if (!$this->formatFieldNameInUppercase) {
|
|
$arrayData = array_change_key_case($arrayData, CASE_LOWER);
|
|
}
|
|
|
|
return $arrayData;
|
|
} catch (\Exception $e) {
|
|
$cnn->rollback();
|
|
|
|
throw $e;
|
|
}
|
|
} catch (\Exception $e) {
|
|
throw $e;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get data of a User
|
|
*
|
|
* @param string $userUid Unique id of User
|
|
* @param bool $flagGetRecord Value that set the getting
|
|
*
|
|
* return array Return an array with data of a User
|
|
*/
|
|
public function getUser($userUid, $flagGetRecord = false)
|
|
{
|
|
try {
|
|
//Verify data
|
|
$this->throwExceptionIfNotExistsUser($userUid, $this->arrayFieldNameForException["usrUid"]);
|
|
|
|
//Get data
|
|
//SQL
|
|
$criteria = $this->getUserCriteria();
|
|
|
|
$criteria->add(\UsersPeer::USR_UID, $userUid, \Criteria::EQUAL);
|
|
|
|
$rsCriteria = \UsersPeer::doSelectRS($criteria);
|
|
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
|
|
|
|
$result = $rsCriteria->next();
|
|
|
|
$row = $rsCriteria->getRow();
|
|
|
|
//Return
|
|
return (!$flagGetRecord)? $this->__getUserCustomRecordFromRecord($row) : $row;
|
|
} catch (\Exception $e) {
|
|
throw $e;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Create User Uid
|
|
*
|
|
* @param array $arrayUserData Data
|
|
*
|
|
* return id
|
|
*/
|
|
public function createUser($userData)
|
|
{
|
|
require_once (PATH_RBAC_HOME . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "RbacUsers.php");
|
|
$this->userObj = new \RbacUsers();
|
|
if (class_exists('PMPluginRegistry')) {
|
|
$pluginRegistry = & \PMPluginRegistry::getSingleton();
|
|
if ($pluginRegistry->existsTrigger(PM_BEFORE_CREATE_USER)) {
|
|
try {
|
|
$pluginRegistry->executeTriggers(PM_BEFORE_CREATE_USER, null);
|
|
} catch (Exception $error) {
|
|
throw new Exception($error->getMessage());
|
|
}
|
|
}
|
|
}
|
|
$oConnection = \Propel::getConnection(\RbacUsersPeer::DATABASE_NAME);
|
|
try {
|
|
$oRBACUsers = new \RbacUsers();
|
|
do {
|
|
$userData['USR_UID'] = \G::generateUniqueID();
|
|
} while ($oRBACUsers->load($userData['USR_UID']));
|
|
$oRBACUsers->fromArray($userData, \BasePeer::TYPE_FIELDNAME);
|
|
$iResult = $oRBACUsers->save();
|
|
return $userData['USR_UID'];
|
|
} catch (Exception $oError) {
|
|
$oConnection->rollback();
|
|
throw($oError);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* to put role an user
|
|
*
|
|
* @access public
|
|
* @param string $sUserUID
|
|
* @param string $sRolCode
|
|
* @return void
|
|
*/
|
|
public function assignRoleToUser ($sUserUID = '', $sRolCode = '')
|
|
{
|
|
require_once (PATH_RBAC_HOME . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "Roles.php");
|
|
require_once (PATH_RBAC_HOME . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "UsersRoles.php");
|
|
$this->usersRolesObj = new \UsersRoles();
|
|
$this->rolesObj = new \Roles();
|
|
$aRol = $this->rolesObj->loadByCode( $sRolCode );
|
|
$this->usersRolesObj->create( $sUserUID, $aRol['ROL_UID'] );
|
|
}
|
|
|
|
/**
|
|
* to test Password
|
|
*
|
|
* @access public
|
|
* @param string $sPassword
|
|
* @return array
|
|
*/
|
|
public function testPassword ($sPassword = '')
|
|
{
|
|
require_once (PATH_TRUNK . "workflow" . PATH_SEP . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "UsersProperties.php");
|
|
$oUserProperty = new \UsersProperties();
|
|
$aFields = array();
|
|
$dateNow = date('Y-m-d H:i:s');
|
|
$aErrors = $oUserProperty->validatePassword($sPassword, $dateNow, 0);
|
|
if (!empty($aErrors)) {
|
|
if (!defined('NO_DISPLAY_USERNAME')) {
|
|
define('NO_DISPLAY_USERNAME', 1);
|
|
}
|
|
$aFields = array();
|
|
$aFields['DESCRIPTION'] = \G::LoadTranslation('ID_POLICY_ALERT');
|
|
foreach ($aErrors as $sError) {
|
|
switch ($sError) {
|
|
case 'ID_PPP_MINIMUM_LENGTH':
|
|
$aFields['DESCRIPTION'] .= ' - ' . \G::LoadTranslation($sError) . ': ' . PPP_MINIMUM_LENGTH .'. ';
|
|
$aFields[substr($sError, 3)] = PPP_MINIMUM_LENGTH;
|
|
break;
|
|
case 'ID_PPP_MAXIMUM_LENGTH':
|
|
$aFields['DESCRIPTION'] .= ' - ' . \G::LoadTranslation($sError) . ': ' . PPP_MAXIMUM_LENGTH .'. ';
|
|
$aFields[substr($sError, 3)] = PPP_MAXIMUM_LENGTH;
|
|
break;
|
|
case 'ID_PPP_EXPIRATION_IN':
|
|
$aFields['DESCRIPTION'] .= ' - ' . \G::LoadTranslation($sError) . ' ' . PPP_EXPIRATION_IN . ' ' . \G::LoadTranslation('ID_DAYS') .'. ';
|
|
$aFields[substr($sError, 3)] = PPP_EXPIRATION_IN;
|
|
break;
|
|
default:
|
|
$aFields['DESCRIPTION'] .= ' - ' . \G::LoadTranslation($sError);
|
|
$aFields[substr($sError, 3)] = 1;
|
|
break;
|
|
}
|
|
}
|
|
$aFields['DESCRIPTION'] .= \G::LoadTranslation('ID_PLEASE_CHANGE_PASSWORD_POLICY');
|
|
$aFields['STATUS'] = false;
|
|
} else {
|
|
$aFields['DESCRIPTION'] = \G::LoadTranslation('ID_PASSWORD_COMPLIES_POLICIES');
|
|
$aFields['STATUS'] = true;
|
|
}
|
|
return $aFields;
|
|
}
|
|
|
|
/**
|
|
* change status of an user
|
|
*
|
|
* @access public
|
|
* @param array $sUserUID
|
|
* @return void
|
|
*/
|
|
public function changeUserStatus ($sUserUID = '', $sStatus = 'ACTIVE')
|
|
{
|
|
require_once (PATH_RBAC_HOME . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "RbacUsers.php");
|
|
$this->userObj = new \RbacUsers();
|
|
if ($sStatus === 'ACTIVE') {
|
|
$sStatus = 1;
|
|
}
|
|
$aFields = $this->userObj->load( $sUserUID );
|
|
$aFields['USR_STATUS'] = $sStatus;
|
|
$this->userObj->update( $aFields );
|
|
}
|
|
|
|
/**
|
|
* remove a role from an user
|
|
*
|
|
* @access public
|
|
* @param array $sUserUID
|
|
* @return void
|
|
*/
|
|
public function removeRolesFromUser ($sUserUID = '')
|
|
{
|
|
$oCriteria = new \Criteria( 'rbac' );
|
|
$oCriteria->add( \UsersRolesPeer::USR_UID, $sUserUID );
|
|
\UsersRolesPeer::doDelete( $oCriteria );
|
|
}
|
|
|
|
/**
|
|
* updated an user
|
|
*
|
|
* @access public
|
|
* @param array $userData
|
|
* @param string $sRolCode
|
|
* @return void
|
|
*/
|
|
public function updateUser ($userData = array(), $sRolCode = '')
|
|
{
|
|
require_once (PATH_RBAC_HOME . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "RbacUsers.php");
|
|
$this->userObj = new \RbacUsers();
|
|
if (isset( $userData['USR_STATUS'] )) {
|
|
if ($userData['USR_STATUS'] == 'ACTIVE') {
|
|
$userData['USR_STATUS'] = 1;
|
|
}
|
|
}
|
|
$this->userObj->update( $userData );
|
|
if ($sRolCode != '') {
|
|
$this->removeRolesFromUser( $userData['USR_UID'] );
|
|
$this->assignRoleToUser( $userData['USR_UID'], $sRolCode );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Gets the roles and permission for one RBAC_user
|
|
*
|
|
* gets the Role and their permissions for one User
|
|
*
|
|
* @author Fernando Ontiveros Lira <fernando@colosa.com>
|
|
* @access public
|
|
*
|
|
* @param string $sSystem the system
|
|
* @param string $sUser the user
|
|
* @return $this->aUserInfo[ $sSystem ]
|
|
*/
|
|
public function loadUserRolePermission ($sSystem, $sUser)
|
|
{
|
|
//in previous versions we provided a path data and session we will cache the session Info for this user
|
|
//now this is deprecated, and all the aUserInfo is in the memcache
|
|
require_once (PATH_RBAC_HOME . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "UsersRoles.php");
|
|
require_once (PATH_RBAC_HOME . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "Systems.php");
|
|
require_once (PATH_RBAC_HOME . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "RbacUsers.php");
|
|
require_once (PATH_RBAC_HOME . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "RolesPeer.php");
|
|
$this->sSystem = $sSystem;
|
|
$this->usersRolesObj = new \UsersRoles();
|
|
$this->systemObj = new \Systems();
|
|
$fieldsSystem = $this->systemObj->loadByCode( $sSystem );
|
|
$fieldsRoles = $this->usersRolesObj->getRolesBySystem( $fieldsSystem['SYS_UID'], $sUser );
|
|
$fieldsPermissions = $this->usersRolesObj->getAllPermissions( $fieldsRoles['ROL_UID'], $sUser );
|
|
$this->userObj = new \RbacUsers();
|
|
$this->aUserInfo['USER_INFO'] = $this->userObj->load( $sUser );
|
|
$this->aUserInfo[$sSystem]['SYS_UID'] = $fieldsSystem['SYS_UID'];
|
|
$this->aUserInfo[$sSystem]['ROLE'] = $fieldsRoles;
|
|
$this->aUserInfo[$sSystem]['PERMISSIONS'] = $fieldsPermissions;
|
|
return $fieldsPermissions;
|
|
}
|
|
|
|
/**
|
|
* Authenticate User
|
|
*
|
|
* @param array $arrayUserData Data
|
|
*
|
|
* return array Return data of the User updated
|
|
*/
|
|
public function authenticate($arrayUserData)
|
|
{
|
|
try {
|
|
|
|
} catch (\Exception $e) {
|
|
throw $e;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Delete User
|
|
*
|
|
* @param string $usrUid Unique id of User
|
|
*
|
|
* return void
|
|
*/
|
|
public function delete($usrUid)
|
|
{
|
|
try {
|
|
//Verify data
|
|
$this->throwExceptionIfNotExistsUser($usrUid, $this->arrayFieldNameForException["usrUid"]);
|
|
|
|
\G::LoadClass('case');
|
|
$oProcessMap = new \Cases();
|
|
$USR_UID = $usrUid;
|
|
$total = 0;
|
|
$history = 0;
|
|
$c = $oProcessMap->getCriteriaUsersCases('TO_DO', $USR_UID);
|
|
$total += \ApplicationPeer::doCount($c);
|
|
$c = $oProcessMap->getCriteriaUsersCases('DRAFT', $USR_UID);
|
|
$total += \ApplicationPeer::doCount($c);
|
|
$c = $oProcessMap->getCriteriaUsersCases('COMPLETED', $USR_UID);
|
|
$history += \ApplicationPeer::doCount($c);
|
|
$c = $oProcessMap->getCriteriaUsersCases('CANCELLED', $USR_UID);
|
|
$history += \ApplicationPeer::doCount($c);
|
|
if ($total > 0) {
|
|
throw new \Exception(\G::LoadTranslation("ID_USER_CAN_NOT_BE_DELETED", array($USR_UID)));
|
|
} else {
|
|
$UID = $usrUid;
|
|
\G::LoadClass('tasks');
|
|
$oTasks = new \Tasks();
|
|
$oTasks->ofToAssignUserOfAllTasks($UID);
|
|
\G::LoadClass('groups');
|
|
$oGroups = new \Groups();
|
|
$oGroups->removeUserOfAllGroups($UID);
|
|
$this->changeUserStatus($UID, 'CLOSED');
|
|
$_GET['USR_USERNAME'] = '';
|
|
$this->updateUser(array('USR_UID' => $UID, 'USR_USERNAME' => $_GET['USR_USERNAME']), '');
|
|
require_once (PATH_TRUNK . "workflow" . PATH_SEP . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "Users.php");
|
|
$oUser = new \Users();
|
|
$aFields = $oUser->load($UID);
|
|
$aFields['USR_STATUS'] = 'CLOSED';
|
|
$aFields['USR_USERNAME'] = '';
|
|
$oUser->update($aFields);
|
|
//Delete Dashboard
|
|
require_once (PATH_TRUNK . "workflow" . PATH_SEP . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "DashletInstance.php");
|
|
$criteria = new \Criteria( 'workflow' );
|
|
$criteria->add( \DashletInstancePeer::DAS_INS_OWNER_UID, $UID );
|
|
$criteria->add( \DashletInstancePeer::DAS_INS_OWNER_TYPE , 'USER');
|
|
\DashletInstancePeer::doDelete( $criteria );
|
|
}
|
|
} catch (\Exception $e) {
|
|
throw $e;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get all Users
|
|
*
|
|
* @param array $arrayWhere Where (Condition and filters)
|
|
* @param string $sortField Field name to sort
|
|
* @param string $sortDir Direction of sorting (ASC, DESC)
|
|
* @param int $start Start
|
|
* @param int $limit Limit
|
|
* @param bool $flagRecord Flag that set the "getting" of record
|
|
* @param bool $throwException Flag to throw the exception (This only if the parameters are invalid)
|
|
* (TRUE: throw the exception; FALSE: returns FALSE)
|
|
*
|
|
* @return array Return an array with all Users, ThrowTheException/FALSE otherwise
|
|
*/
|
|
public function getUsers(
|
|
array $arrayWhere = null,
|
|
$sortField = null,
|
|
$sortDir = null,
|
|
$start = null,
|
|
$limit = null,
|
|
$flagRecord = true,
|
|
$throwException = true
|
|
) {
|
|
try {
|
|
$arrayUser = array();
|
|
|
|
$numRecTotal = 0;
|
|
|
|
//Verify data and Set variables
|
|
$flag = !is_null($arrayWhere) && is_array($arrayWhere);
|
|
$flagCondition = $flag && isset($arrayWhere['condition']);
|
|
$flagFilter = $flag && isset($arrayWhere['filter']);
|
|
|
|
$result = \ProcessMaker\BusinessModel\Validator::validatePagerDataByPagerDefinition(
|
|
['$start' => $start, '$limit' => $limit],
|
|
['$start' => '$start', '$limit' => '$limit']
|
|
);
|
|
|
|
if ($result !== true) {
|
|
if ($throwException) {
|
|
throw new \Exception($result);
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
//Set variables
|
|
$filterName = "filter";
|
|
|
|
if ($flagFilter) {
|
|
$arrayAux = array(
|
|
"" => "filter",
|
|
"LEFT" => "lfilter",
|
|
"RIGHT" => "rfilter"
|
|
);
|
|
|
|
$filterName = $arrayAux[
|
|
(isset($arrayWhere['filterOption']))? $arrayWhere['filterOption'] : ''
|
|
];
|
|
}
|
|
|
|
//Get data
|
|
if (!is_null($limit) && (string)($limit) == '0') {
|
|
//Return
|
|
return array(
|
|
"total" => $numRecTotal,
|
|
"start" => (int)((!is_null($start))? $start : 0),
|
|
"limit" => (int)((!is_null($limit))? $limit : 0),
|
|
$filterName => ($flagFilter)? $arrayWhere['filter'] : '',
|
|
"data" => $arrayUser
|
|
);
|
|
}
|
|
|
|
//Query
|
|
$criteria = $this->getUserCriteria();
|
|
|
|
if ($flagCondition && !empty($arrayWhere['condition'])) {
|
|
foreach ($arrayWhere['condition'] as $value) {
|
|
$criteria->add($value[0], $value[1], $value[2]);
|
|
}
|
|
} else {
|
|
$criteria->add(\UsersPeer::USR_STATUS, 'ACTIVE', \Criteria::EQUAL);
|
|
}
|
|
|
|
if ($flagFilter && trim($arrayWhere['filter']) != '') {
|
|
$arraySearch = [
|
|
'' => '%' . $arrayWhere['filter'] . '%',
|
|
'LEFT' => $arrayWhere['filter'] . '%',
|
|
'RIGHT' => '%' . $arrayWhere['filter']
|
|
];
|
|
|
|
$search = $arraySearch[
|
|
(isset($arrayWhere['filterOption']))? $arrayWhere['filterOption'] : ''
|
|
];
|
|
|
|
$criteria->add(
|
|
$criteria->getNewCriterion(\UsersPeer::USR_USERNAME, $search, \Criteria::LIKE)->addOr(
|
|
$criteria->getNewCriterion(\UsersPeer::USR_FIRSTNAME, $search, \Criteria::LIKE))->addOr(
|
|
$criteria->getNewCriterion(\UsersPeer::USR_LASTNAME, $search, \Criteria::LIKE))
|
|
);
|
|
}
|
|
|
|
//Number records total
|
|
$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 = $sortFieldDefault;
|
|
}
|
|
} else {
|
|
$sortField = $sortFieldDefault;
|
|
}
|
|
|
|
if (!is_null($sortDir) && trim($sortDir) != "" && strtoupper($sortDir) == "DESC") {
|
|
$criteria->addDescendingOrderByColumn($sortField);
|
|
} else {
|
|
$criteria->addAscendingOrderByColumn($sortField);
|
|
}
|
|
|
|
if (!is_null($start)) {
|
|
$criteria->setOffset((int)($start));
|
|
}
|
|
|
|
if (!is_null($limit)) {
|
|
$criteria->setLimit((int)($limit));
|
|
}
|
|
|
|
$rsCriteria = \UsersPeer::doSelectRS($criteria);
|
|
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
|
|
|
|
while ($rsCriteria->next()) {
|
|
$record = $rsCriteria->getRow();
|
|
|
|
$arrayUser[] = ($flagRecord)? $record : $this->__getUserCustomRecordFromRecord($record);
|
|
}
|
|
|
|
//Return
|
|
return array(
|
|
"total" => $numRecTotal,
|
|
"start" => (int)((!is_null($start))? $start : 0),
|
|
"limit" => (int)((!is_null($limit))? $limit : 0),
|
|
$filterName => ($flagFilter)? $arrayWhere['filter'] : '',
|
|
"data" => $arrayUser
|
|
);
|
|
} catch (\Exception $e) {
|
|
throw $e;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Upload image User
|
|
*
|
|
* @param string $userUid Unique id of User
|
|
*
|
|
*/
|
|
public function uploadImage($userUid)
|
|
{
|
|
try {
|
|
//Verify data
|
|
$this->throwExceptionIfNotExistsUser($userUid, $this->arrayFieldNameForException["usrUid"]);
|
|
|
|
if (!$_FILES) {
|
|
throw new \Exception(\G::LoadTranslation("ID_UPLOAD_ERR_NO_FILE"));
|
|
}
|
|
|
|
if (!isset($_FILES["USR_PHOTO"])) {
|
|
throw new \Exception(\G::LoadTranslation("ID_UNDEFINED_VALUE_IS_REQUIRED", array($this->arrayFieldNameForException["usrPhoto"])));
|
|
}
|
|
|
|
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, $userUid . '.' . $aAux[1]);
|
|
\G::resizeImage(PATH_IMAGES_ENVIRONMENT_USERS . $userUid . '.' . $aAux[1], 96, 96, PATH_IMAGES_ENVIRONMENT_USERS . $userUid . '.gif');
|
|
}
|
|
} else {
|
|
throw new \Exception(\G::LoadTranslation('ID_ERROR') . ' ' . $_FILES['USR_PHOTO']['error']);
|
|
}
|
|
} catch (\Exception $e) {
|
|
throw $e;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* change Bookmarks of an user
|
|
*
|
|
* @access public
|
|
* @param $userUID
|
|
* @param $tasUid
|
|
* @param $type
|
|
* @return void
|
|
*/
|
|
public function updateBookmark($userUID, $tasUid, $type)
|
|
{
|
|
$this->userObj = new \Users();
|
|
$fields = $this->userObj->load($userUID);
|
|
$bookmark = empty($fields['USR_BOOKMARK_START_CASES']) ? array() : unserialize($fields['USR_BOOKMARK_START_CASES']);
|
|
$position = array_search($tasUid, $bookmark);
|
|
|
|
if ($type === 'INSERT' and $position === false) {
|
|
$bookmark[] = $tasUid;
|
|
} elseif ($type === 'DELETE' and $position !== false) {
|
|
unset($bookmark[$position]);
|
|
}
|
|
$fields['USR_BOOKMARK_START_CASES'] = serialize($bookmark);
|
|
$this->userObj->update($fields);
|
|
}
|
|
|
|
/**
|
|
* @param $userUid
|
|
* @param array $arrayPermission
|
|
* @return User
|
|
* @throws \Exception
|
|
*/
|
|
public function checkPermissionForEdit($userUid, $arrayPermission = array(), $form)
|
|
{
|
|
try {
|
|
foreach ($arrayPermission as $key => $value) {
|
|
$flagPermission = $this->checkPermission($userUid, $value);
|
|
if (!$flagPermission){
|
|
unset($form[$key]);
|
|
}
|
|
}
|
|
return $form;
|
|
} catch (\Exception $e) {
|
|
throw $e;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @param $aFields
|
|
* @return array
|
|
* @throws \Exception
|
|
*/
|
|
public function loadDetailedPermissions($aFields)
|
|
{
|
|
try {
|
|
global $RBAC;
|
|
$resultPermissionsForUser = array();
|
|
if ($aFields['USR_UID'] != '') {
|
|
foreach ($this->arrayPermissionsForEditUser as $index => $item) {
|
|
if ($RBAC->userCanAccess($item) !== 1) {
|
|
$resultPermissionsForUser[$index] = $item;
|
|
}
|
|
}
|
|
return $resultPermissionsForUser;
|
|
} else {
|
|
$lang = defined('SYS_LANG') ? SYS_LANG : 'en';
|
|
throw (new \Exception(G::LoadTranslation("ID_USER_UID_DOESNT_EXIST", $lang, array("USR_UID" => $aFields['USR_UID']))));
|
|
}
|
|
} catch (\Exception $oError) {
|
|
throw ($oError);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Check permission
|
|
*
|
|
* @param string $userUid Unique uid of User
|
|
* @param string $permissionCode Permission code
|
|
*
|
|
* return bool
|
|
*/
|
|
public function checkPermission($userUid, $permissionCode)
|
|
{
|
|
try {
|
|
$flagPermission = false;
|
|
|
|
$arrayUserRolePermission = $this->loadUserRolePermission("PROCESSMAKER", $userUid);
|
|
|
|
foreach ($arrayUserRolePermission as $value) {
|
|
if ($value["PER_CODE"] == $permissionCode) {
|
|
$flagPermission = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
//Return
|
|
return $flagPermission;
|
|
} catch (\Exception $e) {
|
|
throw $e;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get User-Logged Time Zone
|
|
*
|
|
* @return string Return the User-Logged Time Zone; Time Zone system settings otherwise
|
|
*/
|
|
public static function getUserLoggedTimeZone()
|
|
{
|
|
try {
|
|
$timeZone = 'UTC';
|
|
|
|
if (isset($_SESSION['USR_TIME_ZONE'])) {
|
|
$tz = trim($_SESSION['USR_TIME_ZONE']);
|
|
|
|
$timeZone = ($tz != '')? $tz : $timeZone;
|
|
}
|
|
|
|
//Return
|
|
return $timeZone;
|
|
} catch (\Exception $e) {
|
|
throw $e;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get the User's Manager
|
|
*
|
|
* @param string $userUid Unique id of User
|
|
* @param bool $throwException Flag to throw the exception if the main parameters are invalid or do not exist
|
|
* (TRUE: throw the exception; FALSE: returns FALSE)
|
|
*
|
|
* @return string Returns an string with Unique id of User (Manager), ThrowTheException/FALSE otherwise
|
|
*/
|
|
public function getUsersManager($userUid, $throwException = true)
|
|
{
|
|
try {
|
|
//Verify data and Set variables
|
|
$arrayUserData = $this->getUserRecordByPk($userUid, ['$userUid' => '$userUid'], $throwException);
|
|
|
|
if ($arrayUserData === false) {
|
|
return false;
|
|
}
|
|
|
|
//Set variables
|
|
$department = new \ProcessMaker\BusinessModel\Department();
|
|
|
|
//Get Manager
|
|
if ((string)($arrayUserData['USR_REPORTS_TO']) == '' ||
|
|
(string)($arrayUserData['USR_REPORTS_TO']) == $userUid
|
|
) {
|
|
if ((string)($arrayUserData['DEP_UID']) != '') {
|
|
$departmentUid = $arrayUserData['DEP_UID'];
|
|
|
|
do {
|
|
$flagd = false;
|
|
|
|
$arrayDepartmentData = $department->getDepartmentRecordByPk(
|
|
$departmentUid, ['$departmentUid' => '$departmentUid'], $throwException
|
|
);
|
|
|
|
if ($arrayDepartmentData === false) {
|
|
return false;
|
|
}
|
|
|
|
if ((string)($arrayDepartmentData['DEP_MANAGER']) == '' ||
|
|
(string)($arrayDepartmentData['DEP_MANAGER']) == $userUid
|
|
) {
|
|
if ((string)($arrayDepartmentData['DEP_PARENT']) != '') {
|
|
$departmentUid = $arrayDepartmentData['DEP_PARENT'];
|
|
$flagd = true;
|
|
} else {
|
|
return false;
|
|
}
|
|
} else {
|
|
return $arrayDepartmentData['DEP_MANAGER'];
|
|
}
|
|
} while ($flagd);
|
|
} else {
|
|
return false;
|
|
}
|
|
} else {
|
|
return $arrayUserData['USR_REPORTS_TO'];
|
|
}
|
|
} catch (\Exception $e) {
|
|
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;
|
|
}
|
|
}
|
|
}
|
|
|