ILIAS  release_10 Revision v10.1-43-ga1241a92c2f
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 ilCronJob
 setDateTimeProvider (?Closure $date_time_provider)
 
 isDue (?DateTimeImmutable $last_run, ?CronJobScheduleType $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 (?CronJobScheduleType $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 ()
 
 addCustomSettingsToForm (ilPropertyFormGUI $a_form)
 
 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 ilCronJob
CronJobScheduleType $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 42 of file class.ilCmiXapiDelCron.php.

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

43  {
44  global $DIC; /* @var \ILIAS\DI\Container $DIC */
45  $this->dic = $DIC;
46 
47  $DIC->language()->loadLanguageModule('cmix');
48 
49  $this->log = ilLoggerFactory::getLogger('cmix');
50 
51  $settings = new ilSetting(self::JOB_ID);
52  $lrsTypeId = $settings->get('lrs_type_id', '0');
53 
54  if ($lrsTypeId) {
55  $this->lrsType = new ilCmiXapiLrsType((int) $lrsTypeId);
56  } else {
57  $this->lrsType = null;
58  }
59 
60  $this->model = ilCmiXapiDelModel::init();
61  }
static getLogger(string $a_component_id)
Get component logger.
global $DIC
Definition: shib_login.php:25
+ Here is the call graph for this function:

Member Function Documentation

◆ getDefaultScheduleType()

ilCmiXapiDelCron::getDefaultScheduleType ( )

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

95  {
96  return CronJobScheduleType::SCHEDULE_TYPE_DAILY;
97  }
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...

◆ getDefaultScheduleValue()

ilCmiXapiDelCron::getDefaultScheduleValue ( )

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

99  : int
100  {
101  return 1;
102  }

◆ getDescription()

ilCmiXapiDelCron::getDescription ( )

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

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

◆ getId()

ilCmiXapiDelCron::getId ( )

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

63  : string
64  {
65  return self::JOB_ID;
66  }

◆ getLrsType()

ilCmiXapiDelCron::getLrsType ( )
protected

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

References $lrsType.

Referenced by hasLrsType().

110  {
111  return $this->lrsType;
112  }
ilCmiXapiLrsType $lrsType
+ Here is the caller graph for this function:

◆ getTitle()

ilCmiXapiDelCron::getTitle ( )

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

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

◆ hasAutoActivation()

ilCmiXapiDelCron::hasAutoActivation ( )

@inheritdoc

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

81  : bool
82  {
83  return false;
84  }

◆ hasFlexibleSchedule()

ilCmiXapiDelCron::hasFlexibleSchedule ( )

@inheritdoc

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

89  : bool
90  {
91  return true;
92  }

◆ hasLrsType()

ilCmiXapiDelCron::hasLrsType ( )
protected

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

References getLrsType().

105  {
106  return $this->getLrsType() !== null;
107  }
+ Here is the call graph for this function:

◆ run()

ilCmiXapiDelCron::run ( )

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

References $DIC, $objId, ilCmiXapiStatementsDeleteRequest\DELETE_SCOPE_ALL, ilCmiXapiStatementsDeleteRequest\DELETE_SCOPE_OWN, ilCronJobResult\STATUS_FAIL, and ilCronJobResult\STATUS_OK.

115  {
116  global $DIC;
117  $cronResult = new ilCronJobResult();
118  $this->log->debug('run');
119 
120  // LRS - Ist Client gelöscht?
121  // LRS - Wenn Client gelöscht dann nix machen
122  // LRS - Wenn Client gelöscht wirklich alle Daten weg?
123  // Wenn Objekt gelöscht warum wird es nochmal bei Nutzer aufgeführt (Tabelle gucken)
124  // xxx Löschen wenn nut Lernerfahrung anzeigen dann nur anzeigen nicht löschen = kein Datenadmin
125 
126  /*
127  Fall 1:
128  * Objekt deleted (in Tabelle xapidel_object eingetragen mit Feld updated=null)
129  => xapidel_object aktualisieren mit updated
130  => hole alle Daten zu Users aus xxcf_users und die Daten zum lrs und activity_id aus xapidel_object inkl. xxcf_data_types
131  => Löschvorgang an LRS-typ schicken
132  => wenn's geklappt hat: Zeile aus xxcf_users löschen
133  => wenn's für alle user geklappt hat: Zeile aus xxcf_data_settings löschen
134  => wenn ggf. auch user gelöscht wurde und der user nur dieses objekt bearbeitet hat, dann lösche auch Zeile in xpidel_user
135 
136 
137  Fall 2:
138  * User deleted (in Tabelle xapidel_user eingetragen mit Feld updated=null)
139  * Objekt noch vorhanden (kein Eintrag in Tabelle xapidel_object)
140  => xapidel_user aktualisieren mit updated
141  => hole alle Daten zum User aus xxcf_users und die Daten zum lrs und activity_id aus xxcf_settings inkl. xxcf_data_types
142  => Löschvorgang an LRS-typ schicken
143  => wenn's geklappt hat: Zeile aus xxcf_users löschen
144  => wenn's für alle Objekte, die der User genutzt hat, gelöscht wurde: Zeile in xapidel_user löschen
145 
146  Fall 3:
147  * User deleted (in Tabelle xapidel_user eingetragen mit Feld updated=null)
148  * Objekt auch deleted (Eintrag in Tabelle xapidel_object mit updated=null)
149  => xapidel_user aktualisieren mit updated
150  => xapidel_object aktualisieren mit updated
151  => hole alle Daten zum User aus xxcf_users und die Daten zum lrs und activity_id aus xapidel_object inkl. xxcf_data_types
152  => Löschvorgang an LRS-typ schicken
153  => wenn's geklappt hat: Zeile aus xxcf_users löschen
154  => wenn's für alle Objekte, die der User genutzt hat, gelöscht wurde: Zeile in xapidel_user löschen
155  => Zeile in Tabelle xapidel_object löschen
156 
157  */
158 
159  // Fall 1:
160  // check deleted objects where updated = NULL
161 
162  $newDeletedObjects = $this->model->getNewDeletedXapiObjects();
163  //ilLoggerFactory::getRootLogger()->alert(var_export($newDeletedObjects,TRUE));
164 
165  $deletedObjectData = array();
166  $allDone = true;
167  foreach ($newDeletedObjects as $deletedObject) {
168  $this->log->debug("delete for " . (string) $deletedObject['obj_id']);
169  // set object to updated
170  $this->model->setXapiObjAsUpdated($deletedObject['obj_id']);
171  // delete data
172  $deleteRequest = new ilCmiXapiStatementsDeleteRequest(
173  (int) $deletedObject['obj_id'],
174  (int) $deletedObject['type_id'],
175  (string) $deletedObject['activity_id'],
176  null,
178  );
179  $done = $deleteRequest->delete();
180  // entry in xxcf_users is already deleted from ilXapiCmi5StatementsDeleteRequest
181  // delete in obj_id from xxcf_data_settings
182  if ($done) {
183  $this->log->debug("deleted data for object: " . (string) $deletedObject['obj_id']);
184  $deletedObjectData[] = $deletedObject['obj_id'];
185  $this->model->deleteXapiObjectEntry($deletedObject['obj_id']);
186  } else {
187  $this->log->debug("error: delete data for object: " . (string) $deletedObject['obj_id']);
188  $this->model->resetUpdatedXapiObj($deletedObject['obj_id']);
189  $allDone = false;
190  }
191  }
192 
193  // Fall 2:
194  // check deleted users where updated = NULL
195  $newDeletedUsers = $this->model->getNewDeletedUsers();
196  foreach ($newDeletedUsers as $deletedUser) {
197  $usrId = $deletedUser['usr_id'];
198  $objId = $deletedUser['obj_id'];
199  // set user to updated
200  $this->model->setUserAsUpdated($usrId);
201  $xapiObject = $this->model->getXapiObjectData($objId);
202  // check if all object data already successfully deleted in previous step within this run, because object was also deleted
203  if (in_array($objId, $deletedObjectData)) {
204  $this->log->debug("nothing to do, because of complete object data deletion in previous step");
205  continue;
206  }
207  $deleteRequest = new ilCmiXapiStatementsDeleteRequest(
208  (int) $objId,
209  (int) $xapiObject['lrs_type_id'],
210  (string) $xapiObject['activity_id'],
211  $usrId,
213  );
214  $done = $deleteRequest->delete();
215  // entry in xxcf_users is already deleted from ilXapiCmi5StatementsDeleteRequest
216  if ($done) {
217  $this->model->deleteUserEntry($usrId, $objId);
218  $this->log->debug("deleted object " . (string) $objId . " data for user " . (string) $usrId);
219  } else {
220  $this->log->debug("error deleting object " . (string) $objId . " data for user " . (string) $usrId);
221  $this->model->resetUpdatedXapiUser($usrId, $objId);
222  $allDone = false;
223  }
224  }
225 
226  // Fall 3 wird noch gebraucht? NEIN
227 
228  if ($allDone) {
229  $cronResult->setStatus(ilCronJobResult::STATUS_OK);
230  } else {
231  $cronResult->setStatus(ilCronJobResult::STATUS_FAIL);
232  }
233  return $cronResult;
234  }
$objId
Definition: xapitoken.php:55
Class ilCmiXapiStatementsDeleteRequest.
global $DIC
Definition: shib_login.php:25

Field Documentation

◆ $dic

ILIAS DI Container ilCmiXapiDelCron::$dic
private

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

◆ $log

ilLogger ilCmiXapiDelCron::$log
protected

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

◆ $lrsType

ilCmiXapiLrsType ilCmiXapiDelCron::$lrsType
protected

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

Referenced by getLrsType().

◆ $model

ilCmiXapiDelModel ilCmiXapiDelCron::$model
protected

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

◆ JOB_ID

const ilCmiXapiDelCron::JOB_ID = 'xapi_deletion_cron'

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


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