Slow query for login

HOR-1787
Slow query for login

HOR-1787
Slow query for login

HOR-1787
Slow query for login

HOR-1787
Slow query for login

HOR-1787
Slow query for login

HOR-1787
Slow query for login
This commit is contained in:
dheeyi william
2016-09-09 15:15:51 -04:00
parent 82e48dd7e8
commit 2fa5213e08
11 changed files with 235 additions and 83 deletions

View File

@@ -82,6 +82,9 @@ class database extends database_base
} else {
$sSQL .= ' NOT NULL';
}
if (isset( $aParameters['AutoIncrement'] ) && $aParameters['AutoIncrement']) {
$sSQL .= ' AUTO_INCREMENT PRIMARY KEY';
}
if (isset( $aParameters['Key'] ) && $aParameters['Key'] == 'PRI') {
$sKeys .= $this->sQuoteCharacter . $sColumnName . $this->sQuoteCharacter . ',';
}
@@ -139,6 +142,52 @@ class database extends database_base
return $sSQL;
}
/**
* This method has to refactor
* @param $sTable
* @param $sColumn
* @param $aParameters
* @return string
*/
public function generateCheckAddColumnSQL($sTable, $sColumn, $aParameters)
{
$sSQL = 'ALTER TABLE ' . $this->sQuoteCharacter . $sTable . $this->sQuoteCharacter . ' DROP PRIMARY KEY ';
$sSQL .= $this->sEndLine;
return $sSQL;
}
/**
* This method has to refactor
* @param $sTable
* @param $sColumn
* @param $aParameters
* @return string
*/
public function deleteAllIndexesIntable($sTable, $sColumn, $aParameters)
{
$sSQL = 'ALTER TABLE ' . $this->sQuoteCharacter . $sTable . $this->sQuoteCharacter . ' DROP INDEX indexLoginLog ';
$sSQL .= $this->sEndLine;
return $sSQL;
}
/**
* This method is used exclusively to verify if it was made changes in the DB to solve the HOR-1787 issue, later
* a generic method which covers all the possible similar problems found in the HOR-1787 issue will be generated.
* @param $sTable
* @param $sColumn
* @param $aParameters
* @return bool
*/
public function checkPatchHor1787($sTable, $sColumn, $aParameters)
{
if (isset($aParameters['AutoIncrement']) && $aParameters['AutoIncrement'] && $sTable == 'LOGIN_LOG') {
return true;
}
return false;
}
/**
* generate an add column sentence
*
@@ -157,6 +206,9 @@ class database extends database_base
$sSQL .= ' NOT NULL';
}
}
if (isset( $aParameters['AutoIncrement'] ) && $aParameters['AutoIncrement']) {
$sSQL .= ' AUTO_INCREMENT PRIMARY KEY';
}
/*if ($aParameters['Key'] == 'PRI') {
$sKeys .= 'ALTER TABLE ' . $this->sQuoteCharacter . $sTable . $this->sQuoteCharacter .
' ADD PRIMARY KEY (' . $this->sQuoteCharacter . $sColumn . $this->sQuoteCharacter . ')' . $this->sEndLine;

View File

@@ -803,7 +803,7 @@ class System
/* Convert $required to a bool */
$required = (in_array(strtolower($required), array('1', 'true'
)));
$autoIncrement = $oColumn->hasAttribute('autoIncrement') ? $oColumn->hasAttribute('autoIncrement') : false;
$default = $oColumn->hasAttribute('default') ? $oColumn->getAttribute('default') : null;
$primaryKey = $oColumn->hasAttribute('primaryKey') ? $oColumn->getAttribute('primaryKey') : null;
@@ -813,8 +813,8 @@ class System
if ($primaryKey) {
$aPrimaryKeys[] = $sColumName;
}
$aSchema[$sTableName][$sColumName] = array ('Field' => $sColumName,'Type' => $type,'Null' => $required ? "NO" : "YES",'Default' => $default
);
$aSchema[$sTableName][$sColumName] = array('Field' => $sColumName, 'Type' => $type,
'Null' => $required ? "NO" : "YES", 'Default' => $default, 'AutoIncrement' => $autoIncrement);
}
if (is_array($aPrimaryKeys) && count($aPrimaryKeys) > 0) {

View File

@@ -934,6 +934,10 @@ class workspaceTools
$oDataBase->executeQuery($oDataBase->generateDropColumnSQL($sTable, $vData));
break;
case 'ADD':
if ($oDataBase->checkPatchHor1787($sTable, $sColumn, $vData)) {
$oDataBase->executeQuery($oDataBase->generateCheckAddColumnSQL($sTable, $sColumn, $vData));
$oDataBase->executeQuery($oDataBase->deleteAllIndexesIntable($sTable, $sColumn, $vData));
}
$oDataBase->executeQuery($oDataBase->generateAddColumnSQL($sTable, $sColumn, $vData));
break;
case 'CHANGE':

View File

@@ -20,20 +20,33 @@ require_once 'classes/model/om/BaseLoginLog.php';
*/
class LoginLog extends BaseLoginLog
{
/**
* @param $aData
* @return bool
* @throws Exception
*/
public function create($aData)
{
$con = Propel::getConnection( LoginLogPeer::DATABASE_NAME );
$con = Propel::getConnection("workflow");
try {
$this->fromArray( $aData, BasePeer::TYPE_FIELDNAME );
if ($this->validate()) {
$result = $this->save();
} else {
$e = new Exception( "Failed Validation in class " . get_class( $this ) . "." );
$e->aValidationFailures = $this->getValidationFailures();
throw ($e);
}
$con->commit();
return $result;
$tableName = 'LOGIN_LOG';
$columns = array('LOG_UID', 'LOG_STATUS', 'LOG_IP', 'LOG_SID', 'LOG_INIT_DATE', 'LOG_CLIENT_HOSTNAME', 'USR_UID');
$sql = "INSERT INTO " . $tableName
. " (" . implode(",", $columns) . ")"
. " VALUES ("
. "'" . $aData['LOG_UID'] . "'" . ','
. "'" . $aData['LOG_STATUS'] . "'" . ','
. "'" . $aData['LOG_IP'] . "'" . ','
. "'" . $aData['LOG_SID'] . "'" . ','
. "'" . $aData['LOG_INIT_DATE'] . "'" . ','
. "'" . $aData['LOG_CLIENT_HOSTNAME'] . "'" . ','
. "'" . $aData['USR_UID'] . "'" .
")";
$stmt = $con->createStatement();
$stmt->executeQuery($sql);
return true;
} catch (Exception $e) {
$con->rollback();
throw ($e);

View File

@@ -129,6 +129,8 @@ class UsersMapBuilder
$tMap->addColumn('USR_DEFAULT_LANG', 'UsrDefaultLang', 'string', CreoleTypes::VARCHAR, false, 10);
$tMap->addColumn('USR_LAST_LOGIN', 'UsrLastLogin', 'int', CreoleTypes::TIMESTAMP, false, null);
$tMap->addValidator('USR_STATUS', 'validValues', 'propel.validator.ValidValuesValidator', 'ACTIVE|INACTIVE|VACATION|CLOSED', 'Please select a valid type.');
$tMap->addValidator('USR_STATUS', 'required', 'propel.validator.RequiredValidator', '', 'Type is required.');

View File

@@ -219,6 +219,12 @@ abstract class BaseUsers extends BaseObject implements Persistent
*/
protected $usr_default_lang = '';
/**
* The value for the usr_last_login field.
* @var int
*/
protected $usr_last_login;
/**
* Flag to prevent endless save loop, if this object is referenced
* by another object which falls in this transaction.
@@ -669,6 +675,38 @@ abstract class BaseUsers extends BaseObject implements Persistent
return $this->usr_default_lang;
}
/**
* Get the [optionally formatted] [usr_last_login] column value.
*
* @param string $format The date/time format string (either date()-style or strftime()-style).
* If format is NULL, then the integer unix timestamp will be returned.
* @return mixed Formatted date/time value as string or integer unix timestamp (if format is NULL).
* @throws PropelException - if unable to convert the date/time to timestamp.
*/
public function getUsrLastLogin($format = 'Y-m-d H:i:s')
{
if ($this->usr_last_login === null || $this->usr_last_login === '') {
return null;
} elseif (!is_int($this->usr_last_login)) {
// a non-timestamp value was set externally, so we convert it
$ts = strtotime($this->usr_last_login);
if ($ts === -1 || $ts === false) {
throw new PropelException("Unable to parse value of [usr_last_login] as date/time value: " .
var_export($this->usr_last_login, true));
}
} else {
$ts = $this->usr_last_login;
}
if ($format === null) {
return $ts;
} elseif (strpos($format, '%') !== false) {
return strftime($format, $ts);
} else {
return date($format, $ts);
}
}
/**
* Set the value of [usr_uid] column.
*
@@ -1395,6 +1433,35 @@ abstract class BaseUsers extends BaseObject implements Persistent
} // setUsrDefaultLang()
/**
* Set the value of [usr_last_login] column.
*
* @param int $v new value
* @return void
*/
public function setUsrLastLogin($v)
{
if ($v !== null && !is_int($v)) {
$ts = strtotime($v);
//Date/time accepts null values
if ($v == '') {
$ts = null;
}
if ($ts === -1 || $ts === false) {
throw new PropelException("Unable to parse date/time value for [usr_last_login] from input: " .
var_export($v, true));
}
} else {
$ts = $v;
}
if ($this->usr_last_login !== $ts) {
$this->usr_last_login = $ts;
$this->modifiedColumns[] = UsersPeer::USR_LAST_LOGIN;
}
} // setUsrLastLogin()
/**
* Hydrates (populates) the object variables with values from the database resultset.
*
@@ -1476,12 +1543,14 @@ abstract class BaseUsers extends BaseObject implements Persistent
$this->usr_default_lang = $rs->getString($startcol + 31);
$this->usr_last_login = $rs->getTimestamp($startcol + 32, null);
$this->resetModified();
$this->setNew(false);
// FIXME - using NUM_COLUMNS may be clearer.
return $startcol + 32; // 32 = UsersPeer::NUM_COLUMNS - UsersPeer::NUM_LAZY_LOAD_COLUMNS).
return $startcol + 33; // 33 = UsersPeer::NUM_COLUMNS - UsersPeer::NUM_LAZY_LOAD_COLUMNS).
} catch (Exception $e) {
throw new PropelException("Error populating Users object", $e);
@@ -1781,6 +1850,9 @@ abstract class BaseUsers extends BaseObject implements Persistent
case 31:
return $this->getUsrDefaultLang();
break;
case 32:
return $this->getUsrLastLogin();
break;
default:
return null;
break;
@@ -1833,6 +1905,7 @@ abstract class BaseUsers extends BaseObject implements Persistent
$keys[29] => $this->getUsrBookmarkStartCases(),
$keys[30] => $this->getUsrTimeZone(),
$keys[31] => $this->getUsrDefaultLang(),
$keys[32] => $this->getUsrLastLogin(),
);
return $result;
}
@@ -1960,6 +2033,9 @@ abstract class BaseUsers extends BaseObject implements Persistent
case 31:
$this->setUsrDefaultLang($value);
break;
case 32:
$this->setUsrLastLogin($value);
break;
} // switch()
}
@@ -2111,6 +2187,10 @@ abstract class BaseUsers extends BaseObject implements Persistent
$this->setUsrDefaultLang($arr[$keys[31]]);
}
if (array_key_exists($keys[32], $arr)) {
$this->setUsrLastLogin($arr[$keys[32]]);
}
}
/**
@@ -2250,6 +2330,10 @@ abstract class BaseUsers extends BaseObject implements Persistent
$criteria->add(UsersPeer::USR_DEFAULT_LANG, $this->usr_default_lang);
}
if ($this->isColumnModified(UsersPeer::USR_LAST_LOGIN)) {
$criteria->add(UsersPeer::USR_LAST_LOGIN, $this->usr_last_login);
}
return $criteria;
}
@@ -2366,6 +2450,8 @@ abstract class BaseUsers extends BaseObject implements Persistent
$copyObj->setUsrDefaultLang($this->usr_default_lang);
$copyObj->setUsrLastLogin($this->usr_last_login);
$copyObj->setNew(true);

View File

@@ -25,7 +25,7 @@ abstract class BaseUsersPeer
const CLASS_DEFAULT = 'classes.model.Users';
/** The total number of columns. */
const NUM_COLUMNS = 32;
const NUM_COLUMNS = 33;
/** The number of lazy-loaded columns. */
const NUM_LAZY_LOAD_COLUMNS = 0;
@@ -127,6 +127,9 @@ abstract class BaseUsersPeer
/** the column name for the USR_DEFAULT_LANG field */
const USR_DEFAULT_LANG = 'USERS.USR_DEFAULT_LANG';
/** the column name for the USR_LAST_LOGIN field */
const USR_LAST_LOGIN = 'USERS.USR_LAST_LOGIN';
/** The PHP to DB Name Mapping */
private static $phpNameMap = null;
@@ -138,10 +141,10 @@ abstract class BaseUsersPeer
* e.g. self::$fieldNames[self::TYPE_PHPNAME][0] = 'Id'
*/
private static $fieldNames = array (
BasePeer::TYPE_PHPNAME => array ('UsrUid', 'UsrUsername', 'UsrPassword', 'UsrFirstname', 'UsrLastname', 'UsrEmail', 'UsrDueDate', 'UsrCreateDate', 'UsrUpdateDate', 'UsrStatus', 'UsrCountry', 'UsrCity', 'UsrLocation', 'UsrAddress', 'UsrPhone', 'UsrFax', 'UsrCellular', 'UsrZipCode', 'DepUid', 'UsrPosition', 'UsrResume', 'UsrBirthday', 'UsrRole', 'UsrReportsTo', 'UsrReplacedBy', 'UsrUx', 'UsrCostByHour', 'UsrUnitCost', 'UsrPmdriveFolderUid', 'UsrBookmarkStartCases', 'UsrTimeZone', 'UsrDefaultLang', ),
BasePeer::TYPE_COLNAME => array (UsersPeer::USR_UID, UsersPeer::USR_USERNAME, UsersPeer::USR_PASSWORD, UsersPeer::USR_FIRSTNAME, UsersPeer::USR_LASTNAME, UsersPeer::USR_EMAIL, UsersPeer::USR_DUE_DATE, UsersPeer::USR_CREATE_DATE, UsersPeer::USR_UPDATE_DATE, UsersPeer::USR_STATUS, UsersPeer::USR_COUNTRY, UsersPeer::USR_CITY, UsersPeer::USR_LOCATION, UsersPeer::USR_ADDRESS, UsersPeer::USR_PHONE, UsersPeer::USR_FAX, UsersPeer::USR_CELLULAR, UsersPeer::USR_ZIP_CODE, UsersPeer::DEP_UID, UsersPeer::USR_POSITION, UsersPeer::USR_RESUME, UsersPeer::USR_BIRTHDAY, UsersPeer::USR_ROLE, UsersPeer::USR_REPORTS_TO, UsersPeer::USR_REPLACED_BY, UsersPeer::USR_UX, UsersPeer::USR_COST_BY_HOUR, UsersPeer::USR_UNIT_COST, UsersPeer::USR_PMDRIVE_FOLDER_UID, UsersPeer::USR_BOOKMARK_START_CASES, UsersPeer::USR_TIME_ZONE, UsersPeer::USR_DEFAULT_LANG, ),
BasePeer::TYPE_FIELDNAME => array ('USR_UID', 'USR_USERNAME', 'USR_PASSWORD', 'USR_FIRSTNAME', 'USR_LASTNAME', 'USR_EMAIL', 'USR_DUE_DATE', 'USR_CREATE_DATE', 'USR_UPDATE_DATE', 'USR_STATUS', 'USR_COUNTRY', 'USR_CITY', 'USR_LOCATION', 'USR_ADDRESS', 'USR_PHONE', 'USR_FAX', 'USR_CELLULAR', 'USR_ZIP_CODE', 'DEP_UID', 'USR_POSITION', 'USR_RESUME', 'USR_BIRTHDAY', 'USR_ROLE', 'USR_REPORTS_TO', 'USR_REPLACED_BY', 'USR_UX', 'USR_COST_BY_HOUR', 'USR_UNIT_COST', 'USR_PMDRIVE_FOLDER_UID', 'USR_BOOKMARK_START_CASES', 'USR_TIME_ZONE', 'USR_DEFAULT_LANG', ),
BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, )
BasePeer::TYPE_PHPNAME => array ('UsrUid', 'UsrUsername', 'UsrPassword', 'UsrFirstname', 'UsrLastname', 'UsrEmail', 'UsrDueDate', 'UsrCreateDate', 'UsrUpdateDate', 'UsrStatus', 'UsrCountry', 'UsrCity', 'UsrLocation', 'UsrAddress', 'UsrPhone', 'UsrFax', 'UsrCellular', 'UsrZipCode', 'DepUid', 'UsrPosition', 'UsrResume', 'UsrBirthday', 'UsrRole', 'UsrReportsTo', 'UsrReplacedBy', 'UsrUx', 'UsrCostByHour', 'UsrUnitCost', 'UsrPmdriveFolderUid', 'UsrBookmarkStartCases', 'UsrTimeZone', 'UsrDefaultLang', 'UsrLastLogin', ),
BasePeer::TYPE_COLNAME => array (UsersPeer::USR_UID, UsersPeer::USR_USERNAME, UsersPeer::USR_PASSWORD, UsersPeer::USR_FIRSTNAME, UsersPeer::USR_LASTNAME, UsersPeer::USR_EMAIL, UsersPeer::USR_DUE_DATE, UsersPeer::USR_CREATE_DATE, UsersPeer::USR_UPDATE_DATE, UsersPeer::USR_STATUS, UsersPeer::USR_COUNTRY, UsersPeer::USR_CITY, UsersPeer::USR_LOCATION, UsersPeer::USR_ADDRESS, UsersPeer::USR_PHONE, UsersPeer::USR_FAX, UsersPeer::USR_CELLULAR, UsersPeer::USR_ZIP_CODE, UsersPeer::DEP_UID, UsersPeer::USR_POSITION, UsersPeer::USR_RESUME, UsersPeer::USR_BIRTHDAY, UsersPeer::USR_ROLE, UsersPeer::USR_REPORTS_TO, UsersPeer::USR_REPLACED_BY, UsersPeer::USR_UX, UsersPeer::USR_COST_BY_HOUR, UsersPeer::USR_UNIT_COST, UsersPeer::USR_PMDRIVE_FOLDER_UID, UsersPeer::USR_BOOKMARK_START_CASES, UsersPeer::USR_TIME_ZONE, UsersPeer::USR_DEFAULT_LANG, UsersPeer::USR_LAST_LOGIN, ),
BasePeer::TYPE_FIELDNAME => array ('USR_UID', 'USR_USERNAME', 'USR_PASSWORD', 'USR_FIRSTNAME', 'USR_LASTNAME', 'USR_EMAIL', 'USR_DUE_DATE', 'USR_CREATE_DATE', 'USR_UPDATE_DATE', 'USR_STATUS', 'USR_COUNTRY', 'USR_CITY', 'USR_LOCATION', 'USR_ADDRESS', 'USR_PHONE', 'USR_FAX', 'USR_CELLULAR', 'USR_ZIP_CODE', 'DEP_UID', 'USR_POSITION', 'USR_RESUME', 'USR_BIRTHDAY', 'USR_ROLE', 'USR_REPORTS_TO', 'USR_REPLACED_BY', 'USR_UX', 'USR_COST_BY_HOUR', 'USR_UNIT_COST', 'USR_PMDRIVE_FOLDER_UID', 'USR_BOOKMARK_START_CASES', 'USR_TIME_ZONE', 'USR_DEFAULT_LANG', 'USR_LAST_LOGIN', ),
BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, )
);
/**
@@ -151,10 +154,10 @@ abstract class BaseUsersPeer
* e.g. self::$fieldNames[BasePeer::TYPE_PHPNAME]['Id'] = 0
*/
private static $fieldKeys = array (
BasePeer::TYPE_PHPNAME => array ('UsrUid' => 0, 'UsrUsername' => 1, 'UsrPassword' => 2, 'UsrFirstname' => 3, 'UsrLastname' => 4, 'UsrEmail' => 5, 'UsrDueDate' => 6, 'UsrCreateDate' => 7, 'UsrUpdateDate' => 8, 'UsrStatus' => 9, 'UsrCountry' => 10, 'UsrCity' => 11, 'UsrLocation' => 12, 'UsrAddress' => 13, 'UsrPhone' => 14, 'UsrFax' => 15, 'UsrCellular' => 16, 'UsrZipCode' => 17, 'DepUid' => 18, 'UsrPosition' => 19, 'UsrResume' => 20, 'UsrBirthday' => 21, 'UsrRole' => 22, 'UsrReportsTo' => 23, 'UsrReplacedBy' => 24, 'UsrUx' => 25, 'UsrCostByHour' => 26, 'UsrUnitCost' => 27, 'UsrPmdriveFolderUid' => 28, 'UsrBookmarkStartCases' => 29, 'UsrTimeZone' => 30, 'UsrDefaultLang' => 31, ),
BasePeer::TYPE_COLNAME => array (UsersPeer::USR_UID => 0, UsersPeer::USR_USERNAME => 1, UsersPeer::USR_PASSWORD => 2, UsersPeer::USR_FIRSTNAME => 3, UsersPeer::USR_LASTNAME => 4, UsersPeer::USR_EMAIL => 5, UsersPeer::USR_DUE_DATE => 6, UsersPeer::USR_CREATE_DATE => 7, UsersPeer::USR_UPDATE_DATE => 8, UsersPeer::USR_STATUS => 9, UsersPeer::USR_COUNTRY => 10, UsersPeer::USR_CITY => 11, UsersPeer::USR_LOCATION => 12, UsersPeer::USR_ADDRESS => 13, UsersPeer::USR_PHONE => 14, UsersPeer::USR_FAX => 15, UsersPeer::USR_CELLULAR => 16, UsersPeer::USR_ZIP_CODE => 17, UsersPeer::DEP_UID => 18, UsersPeer::USR_POSITION => 19, UsersPeer::USR_RESUME => 20, UsersPeer::USR_BIRTHDAY => 21, UsersPeer::USR_ROLE => 22, UsersPeer::USR_REPORTS_TO => 23, UsersPeer::USR_REPLACED_BY => 24, UsersPeer::USR_UX => 25, UsersPeer::USR_COST_BY_HOUR => 26, UsersPeer::USR_UNIT_COST => 27, UsersPeer::USR_PMDRIVE_FOLDER_UID => 28, UsersPeer::USR_BOOKMARK_START_CASES => 29, UsersPeer::USR_TIME_ZONE => 30, UsersPeer::USR_DEFAULT_LANG => 31, ),
BasePeer::TYPE_FIELDNAME => array ('USR_UID' => 0, 'USR_USERNAME' => 1, 'USR_PASSWORD' => 2, 'USR_FIRSTNAME' => 3, 'USR_LASTNAME' => 4, 'USR_EMAIL' => 5, 'USR_DUE_DATE' => 6, 'USR_CREATE_DATE' => 7, 'USR_UPDATE_DATE' => 8, 'USR_STATUS' => 9, 'USR_COUNTRY' => 10, 'USR_CITY' => 11, 'USR_LOCATION' => 12, 'USR_ADDRESS' => 13, 'USR_PHONE' => 14, 'USR_FAX' => 15, 'USR_CELLULAR' => 16, 'USR_ZIP_CODE' => 17, 'DEP_UID' => 18, 'USR_POSITION' => 19, 'USR_RESUME' => 20, 'USR_BIRTHDAY' => 21, 'USR_ROLE' => 22, 'USR_REPORTS_TO' => 23, 'USR_REPLACED_BY' => 24, 'USR_UX' => 25, 'USR_COST_BY_HOUR' => 26, 'USR_UNIT_COST' => 27, 'USR_PMDRIVE_FOLDER_UID' => 28, 'USR_BOOKMARK_START_CASES' => 29, 'USR_TIME_ZONE' => 30, 'USR_DEFAULT_LANG' => 31, ),
BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, )
BasePeer::TYPE_PHPNAME => array ('UsrUid' => 0, 'UsrUsername' => 1, 'UsrPassword' => 2, 'UsrFirstname' => 3, 'UsrLastname' => 4, 'UsrEmail' => 5, 'UsrDueDate' => 6, 'UsrCreateDate' => 7, 'UsrUpdateDate' => 8, 'UsrStatus' => 9, 'UsrCountry' => 10, 'UsrCity' => 11, 'UsrLocation' => 12, 'UsrAddress' => 13, 'UsrPhone' => 14, 'UsrFax' => 15, 'UsrCellular' => 16, 'UsrZipCode' => 17, 'DepUid' => 18, 'UsrPosition' => 19, 'UsrResume' => 20, 'UsrBirthday' => 21, 'UsrRole' => 22, 'UsrReportsTo' => 23, 'UsrReplacedBy' => 24, 'UsrUx' => 25, 'UsrCostByHour' => 26, 'UsrUnitCost' => 27, 'UsrPmdriveFolderUid' => 28, 'UsrBookmarkStartCases' => 29, 'UsrTimeZone' => 30, 'UsrDefaultLang' => 31, 'UsrLastLogin' => 32, ),
BasePeer::TYPE_COLNAME => array (UsersPeer::USR_UID => 0, UsersPeer::USR_USERNAME => 1, UsersPeer::USR_PASSWORD => 2, UsersPeer::USR_FIRSTNAME => 3, UsersPeer::USR_LASTNAME => 4, UsersPeer::USR_EMAIL => 5, UsersPeer::USR_DUE_DATE => 6, UsersPeer::USR_CREATE_DATE => 7, UsersPeer::USR_UPDATE_DATE => 8, UsersPeer::USR_STATUS => 9, UsersPeer::USR_COUNTRY => 10, UsersPeer::USR_CITY => 11, UsersPeer::USR_LOCATION => 12, UsersPeer::USR_ADDRESS => 13, UsersPeer::USR_PHONE => 14, UsersPeer::USR_FAX => 15, UsersPeer::USR_CELLULAR => 16, UsersPeer::USR_ZIP_CODE => 17, UsersPeer::DEP_UID => 18, UsersPeer::USR_POSITION => 19, UsersPeer::USR_RESUME => 20, UsersPeer::USR_BIRTHDAY => 21, UsersPeer::USR_ROLE => 22, UsersPeer::USR_REPORTS_TO => 23, UsersPeer::USR_REPLACED_BY => 24, UsersPeer::USR_UX => 25, UsersPeer::USR_COST_BY_HOUR => 26, UsersPeer::USR_UNIT_COST => 27, UsersPeer::USR_PMDRIVE_FOLDER_UID => 28, UsersPeer::USR_BOOKMARK_START_CASES => 29, UsersPeer::USR_TIME_ZONE => 30, UsersPeer::USR_DEFAULT_LANG => 31, UsersPeer::USR_LAST_LOGIN => 32, ),
BasePeer::TYPE_FIELDNAME => array ('USR_UID' => 0, 'USR_USERNAME' => 1, 'USR_PASSWORD' => 2, 'USR_FIRSTNAME' => 3, 'USR_LASTNAME' => 4, 'USR_EMAIL' => 5, 'USR_DUE_DATE' => 6, 'USR_CREATE_DATE' => 7, 'USR_UPDATE_DATE' => 8, 'USR_STATUS' => 9, 'USR_COUNTRY' => 10, 'USR_CITY' => 11, 'USR_LOCATION' => 12, 'USR_ADDRESS' => 13, 'USR_PHONE' => 14, 'USR_FAX' => 15, 'USR_CELLULAR' => 16, 'USR_ZIP_CODE' => 17, 'DEP_UID' => 18, 'USR_POSITION' => 19, 'USR_RESUME' => 20, 'USR_BIRTHDAY' => 21, 'USR_ROLE' => 22, 'USR_REPORTS_TO' => 23, 'USR_REPLACED_BY' => 24, 'USR_UX' => 25, 'USR_COST_BY_HOUR' => 26, 'USR_UNIT_COST' => 27, 'USR_PMDRIVE_FOLDER_UID' => 28, 'USR_BOOKMARK_START_CASES' => 29, 'USR_TIME_ZONE' => 30, 'USR_DEFAULT_LANG' => 31, 'USR_LAST_LOGIN' => 32, ),
BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, )
);
/**
@@ -319,6 +322,8 @@ abstract class BaseUsersPeer
$criteria->addSelectColumn(UsersPeer::USR_DEFAULT_LANG);
$criteria->addSelectColumn(UsersPeer::USR_LAST_LOGIN);
}
const COUNT = 'COUNT(USERS.USR_UID)';

View File

@@ -1557,6 +1557,7 @@
</column>
<column name="USR_TIME_ZONE" type="VARCHAR" size="100" default="" />
<column name="USR_DEFAULT_LANG" type="VARCHAR" size="10" default=""/>
<column name="USR_LAST_LOGIN" type="TIMESTAMP" required="false"/>
<index name="indexUsrUid">
<index-column name="USR_UID"/>
</index>
@@ -2166,7 +2167,7 @@
<index-column name="APP_PARENT"/>
</index>
</table>
<table name="LOGIN_LOG">
<table name="LOGIN_LOG" idMethod="native">
<vendor type="mysql">
<parameter name="Name" value="LOGIN_LOG"/>
<parameter name="Engine" value="InnoDB"/>
@@ -2187,7 +2188,8 @@
<parameter name="Create_options" value=""/>
<parameter name="Comment" value=""/>
</vendor>
<column name="LOG_UID" type="VARCHAR" size="32" required="true" primaryKey="true" default=""/>
<column name="LOG_ID" type="INTEGER" required="true" autoIncrement="true" primaryKey="true"/>
<column name="LOG_UID" type="VARCHAR" size="32" required="true" default=""/>
<column name="LOG_STATUS" type="VARCHAR" size="100" required="true" default=""/>
<column name="LOG_IP" type="VARCHAR" size="15" required="true" default=""/>
<column name="LOG_SID" type="VARCHAR" size="100" required="true" default=""/>
@@ -2195,24 +2197,6 @@
<column name="LOG_END_DATE" type="TIMESTAMP" required="false"/>
<column name="LOG_CLIENT_HOSTNAME" type="VARCHAR" size="100" required="true" default=""/>
<column name="USR_UID" type="VARCHAR" size="32" required="true" default=""/>
<index name="indexLoginLog">
<index-column name="USR_UID"/>
<index-column name="LOG_INIT_DATE"/>
<vendor type="mysql">
<parameter name="Table" value="LOGIN_LOG"/>
<parameter name="Non_unique" value="1"/>
<parameter name="Key_name" value="indexLoginLog"/>
<parameter name="Seq_in_index" value="1"/>
<parameter name="Column_name" value="USR_UID"/>
<parameter name="Collation" value="A"/>
<parameter name="Cardinality" value=""/>
<parameter name="Sub_part" value=""/>
<parameter name="Packed" value=""/>
<parameter name="Null" value=""/>
<parameter name="Index_type" value="BTREE"/>
<parameter name="Comment" value=""/>
</vendor>
</index>
</table>
<table name="USERS_PROPERTIES">
<vendor type="mysql">

View File

@@ -752,6 +752,7 @@ CREATE TABLE `USERS`
`USR_BOOKMARK_START_CASES` MEDIUMTEXT,
`USR_TIME_ZONE` VARCHAR(100) default '',
`USR_DEFAULT_LANG` VARCHAR(10) default '',
`USR_LAST_LOGIN` DATETIME,
PRIMARY KEY (`USR_UID`),
KEY `indexUsrUid` (`USR_UID`)
)ENGINE=InnoDB DEFAULT CHARSET='utf8' COMMENT='Users';
@@ -1013,6 +1014,7 @@ DROP TABLE IF EXISTS `LOGIN_LOG`;
CREATE TABLE `LOGIN_LOG`
(
`LOG_ID` INTEGER NOT NULL AUTO_INCREMENT,
`LOG_UID` VARCHAR(32) default '' NOT NULL,
`LOG_STATUS` VARCHAR(100) default '' NOT NULL,
`LOG_IP` VARCHAR(15) default '' NOT NULL,
@@ -1021,8 +1023,7 @@ CREATE TABLE `LOGIN_LOG`
`LOG_END_DATE` DATETIME,
`LOG_CLIENT_HOSTNAME` VARCHAR(100) default '' NOT NULL,
`USR_UID` VARCHAR(32) default '' NOT NULL,
PRIMARY KEY (`LOG_UID`),
KEY `indexLoginLog`(`USR_UID`, `LOG_INIT_DATE`)
PRIMARY KEY (`LOG_ID`)
)ENGINE=InnoDB DEFAULT CHARSET='utf8';
#-----------------------------------------------------------------------------
#-- USERS_PROPERTIES

View File

@@ -86,17 +86,24 @@ if (isset ($_SESSION['USER_LOGGED'])) {
if ($aRow) {
if ($aRow['LOG_STATUS'] != 'CLOSED' && $aRow['LOG_END_DATE'] == null) {
$weblog = new LoginLog();
$endDate = date('Y-m-d H:i:s');
$aLog = array();
$aLog['LOG_UID'] = $aRow['LOG_UID'];
$aLog['LOG_STATUS'] = 'CLOSED';
$aLog['LOG_IP'] = $aRow['LOG_IP'];
$aLog['LOG_SID'] = session_id();
$aLog['LOG_INIT_DATE'] = $aRow['LOG_INIT_DATE'];
$aLog['LOG_END_DATE'] = date('Y-m-d H:i:s');
$aLog['LOG_END_DATE'] = $endDate;
$aLog['LOG_CLIENT_HOSTNAME'] = $aRow['LOG_CLIENT_HOSTNAME'];
$aLog['USR_UID'] = $aRow['USR_UID'];
$weblog->update($aLog);
$aLog = array();
$aLog['USR_UID'] = $aRow['USR_UID'];
$aLog['USR_LAST_LOGIN'] = $endDate;
$user = new Users();
$aUser = $user->update($aLog);
}
}
} else {

View File

@@ -444,6 +444,7 @@ try {
$oCriteria->addSelectColumn(UsersPeer::USR_STATUS);
$oCriteria->addSelectColumn(UsersPeer::USR_UX);
$oCriteria->addSelectColumn(UsersPeer::DEP_UID);
$oCriteria->addSelectColumn(UsersPeer::USR_LAST_LOGIN);
$oCriteria->addAsColumn('LAST_LOGIN', 0);
$oCriteria->addAsColumn('DEP_TITLE', 0);
$oCriteria->addAsColumn('TOTAL_CASES', 0);
@@ -470,9 +471,6 @@ try {
$oCriteria->setLimit($limit);
$oDataset = UsersPeer::DoSelectRs($oCriteria);
$oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
$Login = new LoginLog();
$aLogin = $Login->getLastLoginAllUsers();
$Department = new Department();
$aDepart = $Department->getAllDepartmentsByUser();
$aAuthSources = $RBAC->getAllAuthSourcesByUser();
@@ -506,7 +504,7 @@ try {
$row['USR_ROLE'] = isset($uRole['ROL_NAME']) ? ($uRole['ROL_NAME'] != '' ? $uRole['ROL_NAME'] : $uRole['ROL_CODE']) : $uRole['ROL_CODE'];
$row['DUE_DATE_OK'] = (date('Y-m-d') > date('Y-m-d', strtotime($row['USR_DUE_DATE']))) ? 0 : 1;
$row['LAST_LOGIN'] = isset($aLogin[$row['USR_UID']]) ? \ProcessMaker\Util\DateTime::convertUtcToTimeZone($aLogin[$row['USR_UID']]) : '';
$row['LAST_LOGIN'] = isset($row['USR_LAST_LOGIN']) ? \ProcessMaker\Util\DateTime::convertUtcToTimeZone($row['USR_LAST_LOGIN']) : '';
$row['TOTAL_CASES'] = $total;
$row['DEP_TITLE'] = isset($aDepart[$row['USR_UID']]) ? $aDepart[$row['USR_UID']] : '';
$row['USR_UX'] = isset($uxList[$row['USR_UX']]) ? $uxList[$row['USR_UX']] : $uxList['NORMAL'];