ILIAS  release_10 Revision v10.1-43-ga1241a92c2f
class.ilXapiResultsCronjob.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
21 
32 {
33  public const LAST_RUN_TS_SETTING_NAME = 'cron_xapi_res_eval_last_run';
34 
35  protected int $thisRunTS;
36 
37  protected int $lastRunTS;
38 
39  protected ilLogger $log;
40 
41  private \ILIAS\DI\Container $dic;
42 
43  public function __construct()
44  {
45  global $DIC; /* @var \ILIAS\DI\Container $DIC */
46  $this->dic = $DIC;
47 
48  $DIC->language()->loadLanguageModule('cmix');
49 
50  $this->log = ilLoggerFactory::getLogger('cmix');
51 
52  $this->initThisRunTS();
53  $this->readLastRunTS();
54  }
55 
56  protected function initThisRunTS(): void
57  {
58  $this->thisRunTS = time();
59  }
60 
61  protected function readLastRunTS(): void
62  {
63  $settings = new ilSetting('cmix');
64  // Check return value of $settings->get, since this is string but a int is needed for lastRunTS
65  $this->lastRunTS = (int) $settings->get(self::LAST_RUN_TS_SETTING_NAME, "0");
66  }
67 
68  protected function writeThisAsLastRunTS(): void
69  {
70  $settings = new ilSetting('cmix');
71  $settings->set(self::LAST_RUN_TS_SETTING_NAME, (string) $this->thisRunTS);
72  }
73 
74  public function getThisRunTS(): int
75  {
76  return $this->thisRunTS;
77  }
78 
79  public function getLastRunTS(): int
80  {
81  return $this->lastRunTS;
82  }
83 
84  public function getId(): string
85  {
86  return 'xapi_results_evaluation';
87  }
88 
89  public function getTitle(): string
90  {
91  return $this->dic->language()->txt("cron_xapi_results_evaluation");
92  }
93 
94  public function getDescription(): string
95  {
96  return $this->dic->language()->txt("cron_xapi_results_evaluation_desc");
97  }
98 
99  public function hasAutoActivation(): bool
100  {
101  return false;
102  }
103 
104  public function hasFlexibleSchedule(): bool
105  {
106  return true;
107  }
108 
110  {
111  return CronJobScheduleType::SCHEDULE_TYPE_DAILY;
112  }
113 
114  public function getDefaultScheduleValue(): ?int
115  {
116  return null;
117  }
118 
119  public function run(): ilCronJobResult
120  {
121  $objects = $this->getObjectsToBeReported();
122  $objectIds = [];
123 
124  foreach ($objects as $objId) {
125  $this->log->debug('handle object (' . $objId . ')');
126 
127  $filter = $this->buildReportFilter();
128 
129  $object = ilObjectFactory::getInstanceByObjId($objId, false);
130 
131  $evaluation = new ilXapiStatementEvaluation($this->log, $object);
132 
133  if ($object->getLaunchMode() != ilObjCmiXapi::LAUNCH_MODE_NORMAL) {
134  $this->log->debug('skipped object due to launch mode (' . $objId . ')');
135  continue;
136  }
137 
138  $report = $this->getXapiStatementsReport($object, $filter);
139 
140  $evaluation->evaluateReport($report);
141 
142  //$this->log->debug('update lp for object (' . $objId . ')');
143  //ilLPStatusWrapper::_refreshStatus($objId);
144 
145  $objectIds[] = $objId;
146  }
147 
150  $objectIds
151  );
152 
153  $result = new ilCronJobResult();
154  $result->setStatus(ilCronJobResult::STATUS_OK);
155 
156  $this->writeThisAsLastRunTS();
157  return $result;
158  }
159 
160  protected function getXapiStatementsReport(
161  ilObject $object,
164  $filter->setActivityId($object->getActivityId());
165 
166  $linkBuilder = new ilCmiXapiStatementsReportLinkBuilder(
167  $object->getId(),
168  $object->getLrsType()->getLrsEndpointStatementsAggregationLink(),
169  $filter
170  );
171 
172  $request = new ilCmiXapiStatementsReportRequest(
173  $object->getLrsType()->getBasicAuth(),
174  $linkBuilder
175  );
176 
177  return $request->queryReport($object->getId());
178  }
179 
181  {
182  $filter = new ilCmiXapiStatementsReportFilter();
183 
184  $start = $end = null;
185 
186  if ($this->getLastRunTS() !== 0) {
187  $filter->setStartDate(new ilCmiXapiDateTime($this->getLastRunTS(), IL_CAL_UNIX));
188  $start = $filter->getStartDate()->get(IL_CAL_DATETIME);
189  }
190 
191  $filter->setEndDate(new ilCmiXapiDateTime($this->getThisRunTS(), IL_CAL_UNIX));
192  $end = $filter->getEndDate()->get(IL_CAL_DATETIME);
193 
194  $this->log->debug("use filter from ($start) until ($end)");
195 
196  return $filter;
197  }
198 
202  protected function getObjectsToBeReported(): array
203  {
204  return array_unique(array_merge(
207  ));
208  }
209 }
static getObjectsHavingBypassProxyEnabledAndRegisteredUsers()
getXapiStatementsReport(ilObject $object, ilCmiXapiStatementsReportFilter $filter)
const IL_CAL_DATETIME
static getLogger(string $a_component_id)
Get component logger.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
$objId
Definition: xapitoken.php:55
const IL_CAL_UNIX
static getCmixObjectsHavingUsersMissingProxySuccess()
global $DIC
Definition: shib_login.php:25
static updateFetchedUntilForObjects(ilCmiXapiDateTime $fetchedUntil, array $objectIds)
static getInstanceByObjId(?int $obj_id, bool $stop_on_error=true)
get an instance of an Ilias object by object id