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