mirror of
https://github.com/Combodo/iTop.git
synced 2026-02-12 23:14:18 +01:00
N°7398 - be able to add custom data in session files generated by SessionHandler
This commit is contained in:
@@ -139,23 +139,60 @@ class SessionHandler extends \SessionHandler
|
||||
// - Data corruption (not a json / not an array / no previous creation_time key)
|
||||
$iCreationTime = time();
|
||||
|
||||
$aJson=[];
|
||||
if (! is_null($sPreviousFileVersionContent)) {
|
||||
$aJson = json_decode($sPreviousFileVersionContent, true);
|
||||
if (is_array($aJson) && array_key_exists('creation_time', $aJson)) {
|
||||
$iCreationTime = $aJson['creation_time'];
|
||||
if (is_array($aJson)){
|
||||
if (array_key_exists('creation_time', $aJson)) {
|
||||
$iCreationTime = $aJson['creation_time'];
|
||||
}
|
||||
} else {
|
||||
IssueLog::Warning(__METHOD__ . ': not a json due (session file corruption?)', null, [ 'sPreviousFileVersionContent' => $sPreviousFileVersionContent ]);
|
||||
$aJson=[];
|
||||
}
|
||||
}
|
||||
|
||||
$aData = [
|
||||
'login_mode' => Session::Get('login_mode'),
|
||||
'user_id' => $sUserId,
|
||||
'creation_time' => $iCreationTime,
|
||||
'context' => implode('|', ContextTag::GetStack())
|
||||
];
|
||||
|
||||
$oiSessionHandlerExtension = $this->GetSessionHandlerExtension();
|
||||
if (! is_null($oiSessionHandlerExtension)){
|
||||
$oiSessionHandlerExtension->CompleteSessionData($aJson, $aData);
|
||||
}
|
||||
|
||||
return json_encode (
|
||||
[
|
||||
'login_mode' => Session::Get('login_mode'),
|
||||
'user_id' => $sUserId,
|
||||
'creation_time' => $iCreationTime,
|
||||
'context' => implode('|', ContextTag::GetStack())
|
||||
]
|
||||
$aData
|
||||
);
|
||||
} catch(Exception $e) {
|
||||
IssueLog::Error(__METHOD__, null, [ 'error' => $e->getMessage() ]);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private function GetSessionHandlerExtension() : ?iSessionHandlerExtension
|
||||
{
|
||||
$sSessionHandlerExtensionClass = utils::GetConfig()->Get('sessions_tracking.session_handler_extension');
|
||||
if (strlen($sSessionHandlerExtensionClass) !=0){
|
||||
try{
|
||||
if (! class_exists($sSessionHandlerExtensionClass)){
|
||||
throw new \Exception("Cannot find class");
|
||||
}
|
||||
|
||||
/** @var iSessionHandlerExtension $oSessionHandlerExtension */
|
||||
$oSessionHandlerExtension = new $sSessionHandlerExtensionClass;
|
||||
if ($oSessionHandlerExtension instanceof iSessionHandlerExtension){
|
||||
return $oSessionHandlerExtension;
|
||||
}
|
||||
|
||||
throw new \Exception("Not an instance of iSessionHandlerExtension");
|
||||
} catch(\Exception $e) {
|
||||
IssueLog::Error(__METHOD__ . ': cannot instanciate iSessionHandlerExtension', null, ['sessions_tracking.session_handler_extension' => $sSessionHandlerExtensionClass]);
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
|
||||
16
sources/SessionTracker/iSessionHandlerExtension.php
Normal file
16
sources/SessionTracker/iSessionHandlerExtension.php
Normal file
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace Combodo\iTop\SessionTracker;
|
||||
|
||||
interface iSessionHandlerExtension {
|
||||
public function __construct();
|
||||
|
||||
/**
|
||||
* Called by SessionHandler to change data stored in iTop session files
|
||||
* @param array $aJson: previous data stored in session file
|
||||
* @param array $aData: usual session data see @SessionHandler
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function CompleteSessionData(array $aJson, array &$aData) : void;
|
||||
}
|
||||
Reference in New Issue
Block a user