19declare(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)) {
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);
setXapiUserAsDeleted(int $userId)
setXapiObjAsDeleted(int $objId, int $typeId, string $actId)
resetUpdatedXapiObj(int $objId)
setXapiObjAsUpdated(int $objId)
deleteUserEntry($usrId, $objId)
getXapiObjectsByUser(int $userId)
deleteXapiObjectEntry($objId)
removeCmixUsersForObject(int $objId)
setXapiObjAsDeletedForUser(int $objId, int $typeId, string $actId, int $usrId)
removeCmixUsersForObjectAndUser(int $objId, int $usrId)
getXapiObjectsByDeletedUsers()
const DB_USERS_TABLE_NAME
setUserAsUpdated(int $usrId)
static ilCmiXapiDelModel $instance
getAllXapiDelObjectData()
resetUpdatedXapiUser(int $usrId, int $objId)
getXapiObjIdForUser(int $userId)
getXapiObjectData(int $objId)
getNewDeletedXapiObjects()
Class ilCmiXapiStatementsDeleteRequest.
static getLogger(string $a_component_id)
Get component logger.
Component logger with individual log levels by component id.