ILIAS  trunk Revision v11.0_alpha-1713-gd8962da2f67
All Data Structures Namespaces Files Functions Variables Enumerations Enumerator Modules Pages
CertificateCourseLearningProgressEvaluation.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
22 
23 use ilSetting;
24 use ilLPStatus;
30 
35 {
36  private readonly ilSetting $setting;
40 
41  public function __construct(
42  private readonly ilCertificateTemplateRepository $templateRepository,
43  ?ilSetting $setting = null,
44  ?ilCertificateObjectHelper $objectHelper = null,
45  ?ilCertificateLPStatusHelper $statusHelper = null,
46  ?ilCertificateObjUserTrackingHelper $trackingHelper = null
47  ) {
48  if (null === $setting) {
49  $setting = new ilSetting('crs');
50  }
51  $this->setting = $setting;
52 
53  if (null === $objectHelper) {
54  $objectHelper = new ilCertificateObjectHelper();
55  }
56  $this->objectHelper = $objectHelper;
57 
58  if (null === $statusHelper) {
59  $statusHelper = new ilCertificateLPStatusHelper();
60  }
61  $this->statusHelper = $statusHelper;
62  if (null === $trackingHelper) {
63  $trackingHelper = new ilCertificateObjUserTrackingHelper();
64  }
65  $this->trackingHelper = $trackingHelper;
66  }
67 
71  public function evaluate(int $refId, int $userId): array
72  {
73  $courseTemplates = $this->templateRepository
74  ->fetchActiveCertificateTemplatesForCoursesWithDisabledLearningProgress(
75  $this->trackingHelper->enabledLearningProgress(),
76  $refId
77  );
78 
79  $templatesOfCompletedCourses = [];
80  foreach ($courseTemplates as $courseTemplate) {
81  $courseObjectId = $courseTemplate->getObjId();
82 
83  $subItems = $this->setting->get('cert_subitems_' . $courseObjectId);
84  if ($subItems === null) {
85  continue;
86  }
87  $subItems = json_decode($subItems, true, 512, JSON_THROW_ON_ERROR);
88  if (!is_array($subItems)) {
89  continue;
90  }
91 
92  $subitem_obj_ids = [];
93  foreach ($subItems as $subItemRefId) {
94  $subitem_obj_ids[$subItemRefId] = $this->objectHelper->lookupObjId((int) $subItemRefId);
95  }
96 
97  if (in_array($refId, $subItems)) {
98  $completed = true;
99 
100  // check if all subitems are completed now
101  foreach ($subitem_obj_ids as $subitem_id) {
102  $status = $this->statusHelper->lookUpStatus($subitem_id, $userId);
103 
104  if ($status !== ilLPStatus::LP_STATUS_COMPLETED_NUM) {
105  $completed = false;
106 
107  break;
108  }
109  }
110 
111  if ($completed) {
112  $templatesOfCompletedCourses[] = $courseTemplate;
113  }
114  }
115  }
116 
117  return $templatesOfCompletedCourses;
118  }
119 }
const LP_STATUS_COMPLETED_NUM
$refId
Definition: xapitoken.php:58
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
__construct(private readonly ilCertificateTemplateRepository $templateRepository, ?ilSetting $setting=null, ?ilCertificateObjectHelper $objectHelper=null, ?ilCertificateLPStatusHelper $statusHelper=null, ?ilCertificateObjUserTrackingHelper $trackingHelper=null)