ILIAS  trunk Revision v12.0_alpha-377-g3641b37b9db
class.ilCmiXapiDelCron.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
24
33{
34 public const JOB_ID = 'xapi_deletion_cron';
35
37
39
40 protected ilLogger $log;
41
42 private \ILIAS\DI\Container $dic;
43
44 public function __construct()
45 {
46 global $DIC; /* @var \ILIAS\DI\Container $DIC */
47 $this->dic = $DIC;
48
49 $DIC->language()->loadLanguageModule('cmix');
50
51 $this->log = ilLoggerFactory::getLogger('cmix');
52
53 $settings = new ilSetting(self::JOB_ID);
54 $lrsTypeId = $settings->get('lrs_type_id', '0');
55
56 if ($lrsTypeId) {
57 $this->lrsType = new ilCmiXapiLrsType((int) $lrsTypeId);
58 } else {
59 $this->lrsType = null;
60 }
61
62 $this->model = ilCmiXapiDelModel::init();
63 }
64
65 public function getId(): string
66 {
67 return self::JOB_ID;
68 }
69
70 public function getTitle(): string
71 {
72 return $this->dic->language()->txt("cron_xapi_del");
73 }
74
75 public function getDescription(): string
76 {
77 return $this->dic->language()->txt("cron_xapi_del_desc");
78 }
79
83 public function hasAutoActivation(): bool
84 {
85 return false;
86 }
87
91 public function hasFlexibleSchedule(): bool
92 {
93 return true;
94 }
95
97 {
98 return JobScheduleType::DAILY;
99 }
100
101 public function getDefaultScheduleValue(): int
102 {
103 return 1;
104 }
105
106 protected function hasLrsType()
107 {
108 return $this->getLrsType() !== null;
109 }
110
111 protected function getLrsType()
112 {
113 return $this->lrsType;
114 }
115
116 public function run(): JobResult
117 {
118 global $DIC;
119 $cronResult = new JobResult();
120 $this->log->debug('run');
121
122 // LRS - Ist Client gelöscht?
123 // LRS - Wenn Client gelöscht dann nix machen
124 // LRS - Wenn Client gelöscht wirklich alle Daten weg?
125 // Wenn Objekt gelöscht warum wird es nochmal bei Nutzer aufgeführt (Tabelle gucken)
126 // xxx Löschen wenn nut Lernerfahrung anzeigen dann nur anzeigen nicht löschen = kein Datenadmin
127
128 /*
129 Fall 1:
130 * Objekt deleted (in Tabelle xapidel_object eingetragen mit Feld updated=null)
131 => xapidel_object aktualisieren mit updated
132 => hole alle Daten zu Users aus xxcf_users und die Daten zum lrs und activity_id aus xapidel_object inkl. xxcf_data_types
133 => Löschvorgang an LRS-typ schicken
134 => wenn's geklappt hat: Zeile aus xxcf_users löschen
135 => wenn's für alle user geklappt hat: Zeile aus xxcf_data_settings löschen
136 => wenn ggf. auch user gelöscht wurde und der user nur dieses objekt bearbeitet hat, dann lösche auch Zeile in xpidel_user
137
138
139 Fall 2:
140 * User deleted (in Tabelle xapidel_user eingetragen mit Feld updated=null)
141 * Objekt noch vorhanden (kein Eintrag in Tabelle xapidel_object)
142 => xapidel_user aktualisieren mit updated
143 => hole alle Daten zum User aus xxcf_users und die Daten zum lrs und activity_id aus xxcf_settings inkl. xxcf_data_types
144 => Löschvorgang an LRS-typ schicken
145 => wenn's geklappt hat: Zeile aus xxcf_users löschen
146 => wenn's für alle Objekte, die der User genutzt hat, gelöscht wurde: Zeile in xapidel_user löschen
147
148 Fall 3:
149 * User deleted (in Tabelle xapidel_user eingetragen mit Feld updated=null)
150 * Objekt auch deleted (Eintrag in Tabelle xapidel_object mit updated=null)
151 => xapidel_user aktualisieren mit updated
152 => xapidel_object aktualisieren mit updated
153 => hole alle Daten zum User aus xxcf_users und die Daten zum lrs und activity_id aus xapidel_object inkl. xxcf_data_types
154 => Löschvorgang an LRS-typ schicken
155 => wenn's geklappt hat: Zeile aus xxcf_users löschen
156 => wenn's für alle Objekte, die der User genutzt hat, gelöscht wurde: Zeile in xapidel_user löschen
157 => Zeile in Tabelle xapidel_object löschen
158
159 */
160
161 // Fall 1:
162 // check deleted objects where updated = NULL
163
164 $newDeletedObjects = $this->model->getNewDeletedXapiObjects();
165 //ilLoggerFactory::getRootLogger()->alert(var_export($newDeletedObjects,TRUE));
166
167 $deletedObjectData = array();
168 $allDone = true;
169 foreach ($newDeletedObjects as $deletedObject) {
170 $this->log->debug("delete for " . (string) $deletedObject['obj_id']);
171 // set object to updated
172 $this->model->setXapiObjAsUpdated($deletedObject['obj_id']);
173 // delete data
174 $deleteRequest = new ilCmiXapiStatementsDeleteRequest(
175 (int) $deletedObject['obj_id'],
176 (int) $deletedObject['type_id'],
177 (string) $deletedObject['activity_id'],
178 null,
180 );
181 $done = $deleteRequest->delete();
182 // entry in xxcf_users is already deleted from ilXapiCmi5StatementsDeleteRequest
183 // delete in obj_id from xxcf_data_settings
184 if ($done) {
185 $this->log->debug("deleted data for object: " . (string) $deletedObject['obj_id']);
186 $deletedObjectData[] = $deletedObject['obj_id'];
187 $this->model->deleteXapiObjectEntry($deletedObject['obj_id']);
188 } else {
189 $this->log->debug("error: delete data for object: " . (string) $deletedObject['obj_id']);
190 $this->model->resetUpdatedXapiObj($deletedObject['obj_id']);
191 $allDone = false;
192 }
193 }
194
195 // Fall 2:
196 // check deleted users where updated = NULL
197 $newDeletedUsers = $this->model->getNewDeletedUsers();
198 foreach ($newDeletedUsers as $deletedUser) {
199 $usrId = $deletedUser['usr_id'];
200 $objId = $deletedUser['obj_id'];
201 // set user to updated
202 $this->model->setUserAsUpdated($usrId);
203 $xapiObject = $this->model->getXapiObjectData($objId);
204 // check if all object data already successfully deleted in previous step within this run, because object was also deleted
205 if (in_array($objId, $deletedObjectData)) {
206 $this->log->debug("nothing to do, because of complete object data deletion in previous step");
207 continue;
208 }
209 $deleteRequest = new ilCmiXapiStatementsDeleteRequest(
210 (int) $objId,
211 (int) $xapiObject['lrs_type_id'],
212 (string) $xapiObject['activity_id'],
213 $usrId,
215 );
216 $done = $deleteRequest->delete();
217 // entry in xxcf_users is already deleted from ilXapiCmi5StatementsDeleteRequest
218 if ($done) {
219 $this->model->deleteUserEntry($usrId, $objId);
220 $this->log->debug("deleted object " . (string) $objId . " data for user " . (string) $usrId);
221 } else {
222 $this->log->debug("error deleting object " . (string) $objId . " data for user " . (string) $usrId);
223 $this->model->resetUpdatedXapiUser($usrId, $objId);
224 $allDone = false;
225 }
226 }
227
228 if ($allDone) {
229 $cronResult->setStatus(JobResult::STATUS_OK);
230 } else {
231 $cronResult->setStatus(JobResult::STATUS_FAIL);
232 }
233 return $cronResult;
234 }
235}
Class ilCmiXapiDelCron.
ilCmiXapiLrsType $lrsType
hasAutoActivation()
@inheritdoc
ILIAS DI Container $dic
ilCmiXapiDelModel $model
hasFlexibleSchedule()
@inheritdoc
Class ilCmiXapiDelModel.
static getLogger(string $a_component_id)
Get component logger.
Component logger with individual log levels by component id.
ILIAS Setting Class.
global $DIC
Definition: shib_login.php:26
$objId
Definition: xapitoken.php:55