192 {
193 $status = $this->parameters['status'] ?? \ilLpStatus::LP_STATUS_NOT_ATTEMPTED_NUM;
194
195 $settings =
new ilSetting(
'certificate');
196
198 $objectId = $this->parameters['obj_id'] ?? 0;
199 $userId = $this->parameters['usr_id'] ?? 0;
200
201 $type = $this->objectDataCache->lookupType($objectId);
202
203 $this->logger->info(sprintf(
204 "Certificate evaluation triggered, received 'completed' learning progress for: usr_id: %s/obj_id: %s/type: %s",
205 $userId,
206 $objectId,
208 ));
209
210 if ($this->certificateClassMap->typeExistsInMap(
$type)) {
211 try {
212 $template = $this->templateRepository->fetchCurrentlyActiveCertificate($objectId);
213
214 if (
true ===
$template->isCurrentlyActive()) {
215 $this->logger->info(sprintf(
216 "Trigger persisting certificate achievement for: usr_id: %s/obj_id: %s/type: %s/template_id: %s",
217 $userId,
218 $objectId,
221 ));
223 } else {
224 $this->logger->info(sprintf(
225 "Did not trigger certificate achievement for inactive template: usr_id: %s/obj_id: %s/type: %s/template_id: %s",
226 $userId,
227 $objectId,
230 ));
231 }
233 $this->logger->info(sprintf(
234 "Did not find an active certificate template for case: usr_id: %s/obj_id: %s/type: %s",
235 $userId,
236 $objectId,
238 ));
239 }
240 } else {
241 $this->logger->info(sprintf(
242 "Object type is not of interest, skipping certificate evaluation for this object"
243 ));
244 }
245
246 if (
$type ===
'crs') {
247 $this->logger->info(
248 'Skipping handling for course, because courses cannot be certificate trigger ' .
249 '(with globally disabled learning progress) for other certificate enabled objects'
250 );
251 return;
252 }
253
254 $this->logger->info(
255 'Triggering certificate evaluation of possible depending course objects ...'
256 );
257
260 $progressEvaluation = new \ilCertificateCourseLearningProgressEvaluation(
$templateRepository);
261
262 $templatesOfCompletedCourses = $progressEvaluation->evaluate($refId, $userId);
263 if (0 === count($templatesOfCompletedCourses)) {
264 $this->logger->info(sprintf(
265 "No dependent course certificate template configuration found for child object: usr_id: %s/obj_id: %s/ref_id: %s/type: %s",
266 $userId,
267 $objectId,
268 $refId,
270 ));
271 continue;
272 }
273
274 foreach ($templatesOfCompletedCourses as $courseTemplate) {
275
276 try {
277 $courseObjectId = $courseTemplate->getObjId();
278
279 if (true === $courseTemplate->isCurrentlyActive()) {
280 $type = $this->objectDataCache->lookupType($courseObjectId);
281
282 $this->logger->info(sprintf(
283 "Trigger persisting certificate achievement for: usr_id: %s/obj_id: %s/type: %s/template_id: %s",
284 $userId,
285 $courseObjectId,
286 'crs',
287 $courseTemplate->getId()
288 ));
289 $this->
processEntry(
$type, $courseObjectId, $userId, $courseTemplate, $settings);
290 } else {
291 $this->logger->info(sprintf(
292 "Did not trigger certificate achievement for inactive template: usr_id: %s/obj_id: %s/type: %s/template_id: %s",
293 $userId,
294 $objectId,
296 $courseTemplate->getId()
297 ));
298 }
300 $this->logger->warning($exception->getMessage());
301 continue;
302 }
303 }
304 }
305
306 $this->logger->info(
307 'Finished certificate evaluation'
308 );
309 }
310 }
processEntry($type, $objectId, int $userId, ilCertificateTemplate $template, ilSetting $settings)
const LP_STATUS_COMPLETED_NUM
static _getAllReferences($a_id)
get all reference ids of object