Application->ConfigValue('UseChangeLog')) { // don't use session log when change log is disabled return ; } $object =& $this->Application->recallObject($event->Prefix, null, Array ('skip_autoload' => 1)); /* @var $object kDBItem */ $fields_hash = Array ( 'SessionStart' => adodb_mktime(), 'IP' => $_SERVER['REMOTE_ADDR'], 'PortalUserId' => $this->Application->RecallVar('user_id'), 'SessionId' => $this->Application->GetSID(), 'Status' => 0, ); $object->SetDBFieldsFromHash($fields_hash); $object->UpdateFormattersSubFields(); if ($object->Create()) { $this->Application->StoreVar('_SessionLogId_', $object->GetID()); } } /** * Closes log for current session * * @param kEvent $event */ function OnEndSession(&$event) { $object =& $this->Application->recallObject($event->Prefix, null, Array ('skip_autoload' => 1)); /* @var $object kDBItem */ $object->Load($this->Application->RecallVar('_SessionLogId_')); if (!$object->isLoaded()) { return ; } $fields_hash = Array ( 'SessionEnd' => adodb_mktime(), 'Status' => 1, ); $object->SetDBFieldsFromHash($fields_hash); $object->UpdateFormattersSubFields(); $object->Update(); } /** * Don't allow to delete other user's messages * * @param kEvent $event */ function customProcessing(&$event, $type) { if ($event->Name == 'OnMassDelete' && $type == 'before') { $ids = $event->getEventParam('ids'); if ($ids) { $id_field = $this->Application->getUnitOption($event->Prefix, 'IDField'); $table_name = $this->Application->getUnitOption($event->Prefix, 'TableName'); $sql = 'SELECT ' . $id_field . ' FROM ' . $table_name . ' WHERE ' . $id_field . ' IN (' . implode(',', $ids) . ') AND Status <> ' . SESSION_LOG_ACTIVE; $allowed_ids = $this->Conn->GetCol($sql); $event->setEventParam('ids', $allowed_ids); } } } /** * Delete changes, related to deleted session * * @param kEvent $event */ function OnAfterItemDelete(&$event) { parent::OnAfterItemDelete($event); $object =& $event->getObject(); /* @var $object kDBItem */ $sql = 'SELECT ' . $this->Application->getUnitOption('change-log', 'IDField') . ' FROM ' . $this->Application->getUnitOption('change-log', 'TableName') . ' WHERE SessionLogId = ' . $object->GetID(); $related_ids = $this->Conn->GetCol($sql); if ($related_ids) { $temp_handler =& $this->Application->recallObject('change-log_TempHandler', 'kTempTablesHandler'); /* @var $temp_handler kTempTablesHandler */ $temp_handler->DeleteItems('change-log', '', $related_ids); } } }