ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
ilCmiXapiDelCron Class Reference

Class ilCmiXapiDelCron. More...

+ Inheritance diagram for ilCmiXapiDelCron:
+ Collaboration diagram for ilCmiXapiDelCron:

Public Member Functions

 __construct ()
 
 getId ()
 
 getTitle ()
 
 getDescription ()
 
 hasAutoActivation ()
 @inheritdoc More...
 
 hasFlexibleSchedule ()
 @inheritdoc More...
 
 getDefaultScheduleType ()
 
 getDefaultScheduleValue ()
 
 run ()
 
- Public Member Functions inherited from ILIAS\Cron\CronJob
 setDateTimeProvider (?\Closure $date_time_provider)
 
 isDue (?\DateTimeImmutable $last_run, ?JobScheduleType $schedule_type, ?int $schedule_value, bool $is_manually_executed=false)
 
 getScheduleType ()
 Get current schedule type (if flexible) More...
 
 getScheduleValue ()
 Get current schedule value (if flexible) More...
 
 setSchedule (?JobScheduleType $a_type, ?int $a_value)
 Update current schedule (if flexible) More...
 
 getAllScheduleTypes ()
 Get all available schedule types. More...
 
 getScheduleTypesWithValues ()
 
 getValidScheduleTypes ()
 Returns a collection of all valid schedule types for a specific job. More...
 
 isManuallyExecutable ()
 
 hasCustomSettings ()
 
 usesLegacyForms ()
 
 getCustomConfigurationInput (\ILIAS\UI\Factory $ui_factory, \ILIAS\Refinery\Factory $factory, \ilLanguage $lng)
 
 addCustomSettingsToForm (\ilPropertyFormGUI $a_form)
 
 saveCustomConfiguration (mixed $form_data)
 
 saveCustomSettings (\ilPropertyFormGUI $a_form)
 
 addToExternalSettingsForm (int $a_form_id, array &$a_fields, bool $a_is_active)
 
 activationWasToggled (\ilDBInterface $db, \ilSetting $setting, bool $a_currently_active)
 Important: This method is (also) called from the setup process, where the constructor of an ilCronJob ist NOT executed. More...
 
 getId ()
 
 getTitle ()
 
 getDescription ()
 
 hasAutoActivation ()
 Is to be activated on "installation", does only work for ILIAS core cron jobs. More...
 
 hasFlexibleSchedule ()
 
 getDefaultScheduleType ()
 
 getDefaultScheduleValue ()
 
 run ()
 

Data Fields

const JOB_ID = 'xapi_deletion_cron'
 

Protected Member Functions

 hasLrsType ()
 
 getLrsType ()
 

Protected Attributes

ilCmiXapiLrsType $lrsType
 
ilCmiXapiDelModel $model
 
ilLogger $log
 
- Protected Attributes inherited from ILIAS\Cron\CronJob
JobScheduleType $schedule_type = null
 
int $schedule_value = null
 
Closure $date_time_provider = null
 

Private Attributes

ILIAS DI Container $dic
 

Detailed Description

Constructor & Destructor Documentation

◆ __construct()

ilCmiXapiDelCron::__construct ( )

Definition at line 44 of file class.ilCmiXapiDelCron.php.

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 }
static getLogger(string $a_component_id)
Get component logger.
ILIAS Setting Class.
global $DIC
Definition: shib_login.php:26

References $DIC, ilLoggerFactory\getLogger(), and ilCmiXapiDelModel\init().

+ Here is the call graph for this function:

Member Function Documentation

◆ getDefaultScheduleType()

ilCmiXapiDelCron::getDefaultScheduleType ( )

Reimplemented from ILIAS\Cron\CronJob.

Definition at line 96 of file class.ilCmiXapiDelCron.php.

97 {
98 return JobScheduleType::DAILY;
99 }

◆ getDefaultScheduleValue()

ilCmiXapiDelCron::getDefaultScheduleValue ( )

Reimplemented from ILIAS\Cron\CronJob.

Definition at line 101 of file class.ilCmiXapiDelCron.php.

101 : int
102 {
103 return 1;
104 }

◆ getDescription()

ilCmiXapiDelCron::getDescription ( )

Reimplemented from ILIAS\Cron\CronJob.

Definition at line 75 of file class.ilCmiXapiDelCron.php.

75 : string
76 {
77 return $this->dic->language()->txt("cron_xapi_del_desc");
78 }

◆ getId()

ilCmiXapiDelCron::getId ( )

Reimplemented from ILIAS\Cron\CronJob.

Definition at line 65 of file class.ilCmiXapiDelCron.php.

65 : string
66 {
67 return self::JOB_ID;
68 }

References JOB_ID.

◆ getLrsType()

ilCmiXapiDelCron::getLrsType ( )
protected

Definition at line 111 of file class.ilCmiXapiDelCron.php.

112 {
113 return $this->lrsType;
114 }
ilCmiXapiLrsType $lrsType

References $lrsType.

Referenced by hasLrsType().

+ Here is the caller graph for this function:

◆ getTitle()

ilCmiXapiDelCron::getTitle ( )

Reimplemented from ILIAS\Cron\CronJob.

Definition at line 70 of file class.ilCmiXapiDelCron.php.

70 : string
71 {
72 return $this->dic->language()->txt("cron_xapi_del");
73 }

◆ hasAutoActivation()

ilCmiXapiDelCron::hasAutoActivation ( )

@inheritdoc

Reimplemented from ILIAS\Cron\CronJob.

Definition at line 83 of file class.ilCmiXapiDelCron.php.

83 : bool
84 {
85 return false;
86 }

◆ hasFlexibleSchedule()

ilCmiXapiDelCron::hasFlexibleSchedule ( )

@inheritdoc

Reimplemented from ILIAS\Cron\CronJob.

Definition at line 91 of file class.ilCmiXapiDelCron.php.

91 : bool
92 {
93 return true;
94 }

◆ hasLrsType()

ilCmiXapiDelCron::hasLrsType ( )
protected

Definition at line 106 of file class.ilCmiXapiDelCron.php.

107 {
108 return $this->getLrsType() !== null;
109 }

References getLrsType().

+ Here is the call graph for this function:

◆ run()

ilCmiXapiDelCron::run ( )

Reimplemented from ILIAS\Cron\CronJob.

Definition at line 116 of file class.ilCmiXapiDelCron.php.

116 : 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 */
162
163
164 //user deleted
165 //SELECT distinct LRS credentials for all objs - ACHTUNG Plugin-Version beachten!
166 //SELECT usr_id FROM xapidel_user
167 //usr_ids=..
168 //SELECT obj_id, user_cred WHERE user_id in (usr_ids)
169 //delete in lrs - wenn nicht in separate log-tabelle schreiben
170 //delete xxcf_users WHERE obj_id and user_cred
171 //if numrows for usr_id =0 DELETE FROM xapidel_user WHERE usr_id=%s
172
173 //Hinweis auf negative Auswirkungen von lrs-typ-Änderungen für Lösch vorgänge
174
175 //object deleted
176 //SELECT activity_id, lrs_cred FROM xapidel_obj, xxcf_data_types WHERE xxcf_data_types.type_id = xapidel_obj.type_d //ACHTUNG: endpoint_use egal, lrs_type_id genutzt?
177
178
179 //lrs_type_id deleted???
180
181 /*
182 if( !$this->hasLrsType() )
183 {
184 ilLoggerFactory::getRootLogger()->alert('No lrs type configured!');
185 $cronResult->setStatus(ilCronJobResult::STATUS_INVALID_CONFIGURATION);
186 return $cronResult;
187 }
188 */
189 // $lpChangesQueue = new ilxapidelChangesQueue();
190 // $lpChangesQueue->load();
191
192 // $statementListBuilder = new ilxapidelXapiStatementListBuilder(ilLoggerFactory::getRootLogger(), $this->getLrsType());
193 // $statementList = $statementListBuilder->buildStatementsList($lpChangesQueue);
194 /*
195 $lrsRequest = new ilxapidelXapiRequest(
196 ilLoggerFactory::getRootLogger(),
197 $this->getLrsType()->getLrsEndpointStatementsLink(),
198 $this->getLrsType()->getLrsKey(),
199 $this->getLrsType()->getLrsSecret()
200 );
201
202 if( $lrsRequest->send($statementList) )
203 {
204 if( $lpChangesQueue->hasEntries() )
205 {
206 $lpChangesQueue->delete();
207 $cronResult->setStatus(ilCronJobResult::STATUS_OK);
208 }
209 else
210 {
211 $cronResult->setStatus(ilCronJobResult::STATUS_NO_ACTION);
212 }
213 }
214 else
215 {
216 $cronResult->setStatus(ilCronJobResult::STATUS_FAIL);
217 }
218 */
219
220 // Fall 1:
221 // check deleted objects where updated = NULL
222
223 $newDeletedObjects = $this->model->getNewDeletedXapiObjects();
224 //ilLoggerFactory::getRootLogger()->alert(var_export($newDeletedObjects,TRUE));
225
226 $deletedObjectData = array();
227 $allDone = true;
228 foreach ($newDeletedObjects as $deletedObject) {
229 $this->log->debug("delete for " . (string) $deletedObject['obj_id']);
230 // set object to updated
231 $this->model->setXapiObjAsUpdated($deletedObject['obj_id']);
232 // delete data
233 $deleteRequest = new ilCmiXapiStatementsDeleteRequest(
234 (int) $deletedObject['obj_id'],
235 (int) $deletedObject['type_id'],
236 (string) $deletedObject['activity_id'],
237 null,
239 );
240 $done = $deleteRequest->delete();
241 // entry in xxcf_users is already deleted from ilXapiCmi5StatementsDeleteRequest
242 // delete in obj_id from xxcf_data_settings
243 if ($done) {
244 $this->log->debug("deleted data for object: " . (string) $deletedObject['obj_id']);
245 $deletedObjectData[] = $deletedObject['obj_id'];
246 $this->model->deleteXapiObjectEntry($deletedObject['obj_id']);
247 } else {
248 $this->log->debug("error: delete data for object: " . (string) $deletedObject['obj_id']);
249 $this->model->resetUpdatedXapiObj($deletedObject['obj_id']);
250 $allDone = false;
251 }
252 }
253
254 // Fall 2:
255 // check deleted users where updated = NULL
256 $newDeletedUsers = $this->model->getNewDeletedUsers();
257 foreach ($newDeletedUsers as $deletedUser) {
258 $usrId = $deletedUser['usr_id'];
259 // set user to updated
260 $this->model->setUserAsUpdated($usrId);
261 // get all objects of deleted user
262 $xapiObjects = $this->model->getXapiObjectsByUser($usrId);
263 $usrObjectsDone = true;
264 foreach ($xapiObjects as $xapiObject) {
265 $objId = $xapiObject['obj_id'];
266 // check if all object data already successfully deleted in previous step within this run, because object was also deleted
267 if (in_array($objId, $deletedObjectData)) {
268 $this->log->debug("nothing to do, because of complete object data deletion in previous step");
269 continue;
270 }
271 $deleteRequest = new ilCmiXapiStatementsDeleteRequest(
272 (int) $xapiObject['obj_id'],
273 (int) $xapiObject['lrs_type_id'],
274 (string) $xapiObject['activity_id'],
275 $usrId,
277 );
278 $done = $deleteRequest->delete();
279 // entry in xxcf_users is already deleted from ilXapiCmi5StatementsDeleteRequest
280 if ($done) {
281 $this->log->debug("deleted object " . (string) $objId . " data for user " . (string) $usrId);
282 } else {
283 $this->log->debug("error deleting object " . (string) $objId . " data for user " . (string) $usrId);
284 $usrObjectsDone = false;
285 }
286 } // EOF foreach ($xapiObjects as $xapiObject)
287
288 if ($usrObjectsDone) {
289 $this->model->deleteUserEntry($usrId);
290 } else {
291 $this->model->resetUpdatedXapiUser($usrId);
292 $allDone = false;
293 }
294 }
295
296 // Fall 3 wird noch gebraucht?
297
298 // maybe more detailled success/fail messages?
299
300 if ($allDone) {
301 $cronResult->setStatus(JobResult::STATUS_OK);
302 } else {
303 $cronResult->setStatus(JobResult::STATUS_FAIL);
304 }
305 return $cronResult;
306 }
$objId
Definition: xapitoken.php:57

References $DIC, $objId, ilCmiXapiStatementsDeleteRequest\DELETE_SCOPE_ALL, and ilCmiXapiStatementsDeleteRequest\DELETE_SCOPE_OWN.

Field Documentation

◆ $dic

ILIAS DI Container ilCmiXapiDelCron::$dic
private

Definition at line 42 of file class.ilCmiXapiDelCron.php.

◆ $log

ilLogger ilCmiXapiDelCron::$log
protected

Definition at line 40 of file class.ilCmiXapiDelCron.php.

◆ $lrsType

ilCmiXapiLrsType ilCmiXapiDelCron::$lrsType
protected

Definition at line 36 of file class.ilCmiXapiDelCron.php.

Referenced by getLrsType().

◆ $model

ilCmiXapiDelModel ilCmiXapiDelCron::$model
protected

Definition at line 38 of file class.ilCmiXapiDelCron.php.

◆ JOB_ID

const ilCmiXapiDelCron::JOB_ID = 'xapi_deletion_cron'

Definition at line 34 of file class.ilCmiXapiDelCron.php.

Referenced by getId().


The documentation for this class was generated from the following file: