19 declare(strict_types=1);
    36     private \ILIAS\DI\Container 
$dic;
    48         $this->db = $this->dic->database();
    55         return self::$instance ?? self::$instance = 
new self();
    61         $where = $this->db->quote($userId, 
'integer');
    62         $result = $this->db->query(
"SELECT obj_id FROM " . self::DB_USERS_TABLE_NAME . 
" WHERE usr_id = " . $where);
    63         while ($row = $this->db->fetchAssoc($result)) {
    67             $data[] = $row[
'obj_id'];
    75             'usr_id' => [
'integer', $userId],
    76             'added' => [
'timestamp', date(
'Y-m-d H:i:s')]
    78         $this->db->insert(self::DB_DEL_USERS, $values);
    84         $this->db->update(self::DB_DEL_USERS, [
    85             'updated' => [
'timestamp', date(
'Y-m-d H:i:s')]
    87             'usr_id' => [
'integer', $usrId]
    93         $this->db->update(self::DB_DEL_USERS, [
    94             'updated' => [
'timestamp', null]
    96             'usr_id' => [
'integer', $usrId],
    97             'obj_id' => [
'integer', $objId]
   106         $result = $this->db->query(
"SELECT obj.obj_id, obj.lrs_type_id, obj.activity_id, usr.usr_id, usr.usr_ident, del.added FROM " .
   107             self::DB_TABLE_NAME . 
" obj, " .
   108             self::DB_USERS_TABLE_NAME . 
" usr, " .
   109             self::DB_DEL_USERS . 
" del " .
   110             #
" INNER JOIN " . self::DB_DEL_USERS . 
" del ON usr.usr_id = xdel.usr_id" .
   111             " WHERE usr.usr_id = del.usr_id AND obj.obj_id = usr.obj_id AND del.updated IS NULL");
   112         while ($row = $this->db->fetchAssoc($result)) {
   113             if (is_null(
$data)) {
   124         $result = $this->db->query(
"SELECT obj.obj_id, obj.lrs_type_id, obj.activity_id FROM " .
   125             self::DB_TABLE_NAME . 
" obj, " .
   126             self::DB_USERS_TABLE_NAME . 
" usr" .
   127             #
" INNER JOIN " . self::DB_DEL_USERS . 
" del ON usr.usr_id = xdel.usr_id" .
   128             " WHERE usr.usr_id = " . $this->db->quote($userId, 
'integer') . 
" AND obj.obj_id = usr.obj_id");
   129         while ($row = $this->db->fetchAssoc($result)) {
   130             if (is_null(
$data)) {
   142         $result = $this->db->query(
"SELECT * FROM " . self::DB_DEL_USERS . 
" WHERE updated IS NULL");
   143         while ($row = $this->db->fetchAssoc($result)) {
   151         $this->db->manipulateF(
   152             'DELETE FROM ' . self::DB_DEL_USERS . 
' WHERE usr_id = %s AND obj_id = %s',
   153             [
'integer', 
'integer'],
   163         $where = $this->db->quote($objId, 
'integer');
   164         $result = $this->db->query(
"SELECT lrs_type_id, activity_id, delete_data FROM " . self::DB_TABLE_NAME . 
" WHERE obj_id = " . $where);
   165         while ($row = $this->db->fetchAssoc($result)) {
   175         $result = $this->db->query(
"SELECT * FROM " . self::DB_DEL_OBJ . 
" WHERE 1");
   176         while ($row = $this->db->fetchAssoc($result)) {
   186         $result = $this->db->query(
"SELECT * FROM " . self::DB_DEL_OBJ . 
" WHERE updated IS NULL");
   187         while ($row = $this->db->fetchAssoc($result)) {
   195         $this->db->manipulateF(
   196             'DELETE FROM ' . self::DB_DEL_OBJ . 
' WHERE obj_id = %s',
   204         if (!$this->dic->cron()->manager()->isJobActive(
'xapi_deletion_cron')) {
   206             $xapiDelete->delete();
   209                 'obj_id' => [
'integer', 
$objId],
   210                 'type_id' => [
'integer', 
$typeId],
   211                 'activity_id' => [
'string', $actId],
   212                 'added' => [
'timestamp', date(
'Y-m-d H:i:s')]
   214             $this->db->insert(self::DB_DEL_OBJ, $values);
   220         if (!$this->dic->cron()->manager()->isJobActive(
'xapi_deletion_cron')) {
   222             $xapiDelete->delete();
   225             $result = $this->db->queryF(
   226                 'SELECT count(*) as counter FROM ' . self::DB_DEL_USERS . 
' WHERE usr_id = %s AND obj_id = %s',
   227                 [
'integer', 
'integer'],
   230             while ($row = $this->db->fetchAssoc($result)) {
   231                 $counter = $row[
'counter'];
   236                     'usr_id' => [
'integer', $usrId],
   237                     'obj_id' => [
'integer', 
$objId],
   238                     'added' => [
'timestamp', date(
'Y-m-d H:i:s')]
   240                 $this->db->insert(self::DB_DEL_USERS, $values);
   249         $this->db->update(self::DB_DEL_OBJ, [
   250             'updated' => [
'timestamp', date(
'Y-m-d H:i:s')]
   252             'obj_id' => [
'integer', $objId]
   259         $this->db->update(self::DB_DEL_OBJ, [
   260             'updated' => [
'timestamp', null]
   262             'obj_id' => [
'integer', $objId]
   268         $this->db->manipulateF(
   269             'DELETE FROM cmix_users WHERE obj_id = %s',
   273         $this->log->debug(
'cmix_users deleted for objId=' . (
string) $objId);
   278         $this->db->manipulateF(
   279             'DELETE FROM cmix_users WHERE obj_id = %s AND usr_id = %s',
   280             [
'integer',
'integer'],
   283         $this->log->debug(
'cmix_user with usrId ' . (
string) $usrId . 
' deleted for objId=' . (
string) $objId);
 setUserAsUpdated(int $usrId)
 
setXapiObjAsDeleted(int $objId, int $typeId, string $actId)
 
static getLogger(string $a_component_id)
Get component logger. 
 
getXapiObjectData(int $objId)
 
deleteUserEntry($usrId, $objId)
 
getXapiObjectsByUser(int $userId)
 
setXapiUserAsDeleted(int $userId)
 
getNewDeletedXapiObjects()
 
removeCmixUsersForObjectAndUser(int $objId, int $usrId)
 
Class ilCmiXapiStatementsDeleteRequest. 
 
deleteXapiObjectEntry($objId)
 
resetUpdatedXapiUser(int $usrId, int $objId)
 
setXapiObjAsUpdated(int $objId)
 
setXapiObjAsDeletedForUser(int $objId, int $typeId, string $actId, int $usrId)
 
const DB_USERS_TABLE_NAME
 
getAllXapiDelObjectData()
 
resetUpdatedXapiObj(int $objId)
 
static ilCmiXapiDelModel $instance
 
getXapiObjectsByDeletedUsers()
 
getXapiObjIdForUser(int $userId)
 
removeCmixUsersForObject(int $objId)