ILIAS  release_9 Revision v9.13-25-g2c18ec4c24f
class.ilTestSkillEvaluationGUI.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
24 
38 {
40 
41  public const SKILL_PROFILE_PARAM = 'skill_profile';
42  public const CMD_SHOW = 'show';
43 
47 
48  protected bool $noSkillProfileOptionEnabled = false;
49  protected array $availableSkillProfiles = [];
50  protected array $availableSkills = [];
52 
53  public function __construct(
54  private ilObjTest $test_obj,
55  private ilCtrl $ctrl,
56  private ilGlobalTemplateInterface $tpl,
57  private ilLanguage $lng,
58  private ilDBInterface $db,
59  private LoggingServices $logging_services,
60  private SkillService $skills_service,
61  private InternalRequestService $testrequest
62  ) {
63  }
64 
69  {
70  return $this->questionList;
71  }
72 
76  public function setQuestionList($questionList)
77  {
78  $this->questionList = $questionList;
79  }
80 
85  {
87  }
88 
92  public function setObjectiveOrientedContainer($objectiveOrientedContainer)
93  {
94  $this->objectiveOrientedContainer = $objectiveOrientedContainer;
95  }
96 
97  public function executeCommand()
98  {
99  $cmd = $this->ctrl->getCmd(self::CMD_SHOW) . 'Cmd';
100  $this->$cmd();
101  }
102 
103  private function isAccessDenied(): bool
104  {
105  return false;
106  }
107 
108  protected function init(bool $skill_profile_enabled): void
109  {
110  $this->testPassesSelector = new ilTestPassesSelector($this->db, $this->test_obj);
111  $this->testPassesSelector->setActiveId($this->testSession->getActiveId());
112  $this->testPassesSelector->setLastFinishedPass($this->testSession->getLastFinishedPass());
113 
114  $assSettings = new ilSetting('assessment');
115  $skillEvaluation = new ilTestSkillEvaluation(
116  $this->db,
117  $this->logging_services,
118  $this->test_obj->getTestId(),
119  $this->test_obj->getRefId(),
120  $this->skills_service->profile(),
121  $this->skills_service->personal()
122  );
123 
124  $skillEvaluation->setUserId($this->getTestSession()->getUserId());
125  $skillEvaluation->setActiveId($this->getTestSession()->getActiveId());
126 
127  $skillEvaluation->setNumRequiredBookingsForSkillTriggering((int) $assSettings->get(
128  'ass_skl_trig_num_answ_barrier',
130  ));
131 
132  $skillEvaluation->init($this->getQuestionList());
133 
134  $availableSkillProfiles = $skillEvaluation->getAssignedSkillMatchingSkillProfiles();
136  $skillEvaluation->noProfileMatchingAssignedSkillExists($availableSkillProfiles)
137  );
138  $this->setAvailableSkillProfiles($availableSkillProfiles);
139 
140  // should be reportedPasses - yes - indeed, skill level status will not respect - avoid confuse here
141  $evaluationPasses = $this->testPassesSelector->getExistingPasses();
142 
143  $availableSkills = [];
144 
145  foreach ($evaluationPasses as $evalPass) {
146  $testResults = $this->test_obj->getTestResult($this->getTestSession()->getActiveId(), $evalPass, true);
147 
148  $skillEvaluation->setPass($evalPass);
149  $skillEvaluation->evaluate($testResults);
150 
151  if ($skill_profile_enabled && self::INVOLVE_SKILLS_BELOW_NUM_ANSWERS_BARRIER_FOR_GAP_ANALASYS) {
152  $skills = $skillEvaluation->getSkillsInvolvedByAssignment();
153  } else {
154  $skills = $skillEvaluation->getSkillsMatchingNumAnswersBarrier();
155  }
156 
157  $availableSkills = array_merge($availableSkills, $skills);
158  }
159 
160  $this->setAvailableSkills(array_values($availableSkills));
161  }
162 
163  private function showCmd()
164  {
165  $selected_skill_profile = $this->testrequest->int(self::SKILL_PROFILE_PARAM);
166  $skill_profile_enabled = $this->testrequest->isset(self::SKILL_PROFILE_PARAM);
167 
168  $this->init($skill_profile_enabled);
169 
170  $evaluation_toolbar_gui = $this->buildEvaluationToolbarGUI($selected_skill_profile);
171 
172  $personal_skills_gui = $this->buildPersonalSkillsGUI(
173  $this->getTestSession()->getUserId(),
174  $evaluation_toolbar_gui->getSelectedEvaluationMode(),
175  $this->getAvailableSkills()
176  );
177 
178  $this->tpl->setContent(
179  $this->ctrl->getHTML($evaluation_toolbar_gui) . $this->ctrl->getHTML($personal_skills_gui)
180  );
181  }
182 
183  private function buildEvaluationToolbarGUI(int $selectedSkillProfileId): ilTestSkillEvaluationToolbarGUI
184  {
185  if (!$this->isNoSkillProfileOptionEnabled() && !$selectedSkillProfileId) {
186  $selectedSkillProfileId = key($this->getAvailableSkillProfiles()) ?? 0;
187  }
188 
189  $gui = new ilTestSkillEvaluationToolbarGUI($this->ctrl, $this->lng);
190 
191  $gui->setAvailableSkillProfiles($this->getAvailableSkillProfiles());
192  $gui->setNoSkillProfileOptionEnabled($this->isNoSkillProfileOptionEnabled());
193  $gui->setSelectedEvaluationMode($selectedSkillProfileId);
194 
195  $gui->build();
196 
197  return $gui;
198  }
199 
200  private function buildPersonalSkillsGUI(
201  int $usrId,
202  ?int $selectedSkillProfileId,
203  array $availableSkills
205  $gui = new ilTestPersonalSkillsGUI($this->lng, $this->test_obj->getId());
206 
207  $gui->setAvailableSkills($availableSkills);
208  $gui->setSelectedSkillProfile($selectedSkillProfileId);
209  $gui->setUsrId($usrId);
210 
211  return $gui;
212  }
213 
214  public function setTestSession(ilTestSession $testSession): void
215  {
216  $this->testSession = $testSession;
217  }
218 
219  public function getTestSession(): ilTestSession
220  {
221  return $this->testSession;
222  }
223 
224  public function isNoSkillProfileOptionEnabled(): bool
225  {
227  }
228 
229  public function setNoSkillProfileOptionEnabled(bool $noSkillProfileOptionEnabled): void
230  {
231  $this->noSkillProfileOptionEnabled = $noSkillProfileOptionEnabled;
232  }
233 
234  public function getAvailableSkillProfiles(): array
235  {
237  }
238 
239  public function setAvailableSkillProfiles(array $availableSkillProfiles): void
240  {
241  $this->availableSkillProfiles = $availableSkillProfiles;
242  }
243 
244  public function getAvailableSkills(): array
245  {
246  return $this->availableSkills;
247  }
248 
249  public function setAvailableSkills(array $availableSkills): void
250  {
251  $this->availableSkills = $availableSkills;
252  }
253 }
setAvailableSkillProfiles(array $availableSkillProfiles)
Provides fluid interface to LoggingServices.
setAvailableSkills(array $availableSkills)
buildEvaluationToolbarGUI(int $selectedSkillProfileId)
init(bool $skill_profile_enabled)
setObjectiveOrientedContainer($objectiveOrientedContainer)
buildPersonalSkillsGUI(int $usrId, ?int $selectedSkillProfileId, array $availableSkills)
$lng
setNoSkillProfileOptionEnabled(bool $noSkillProfileOptionEnabled)
setAvailableSkills(array $availableSkills)
ilTestObjectiveOrientedContainer $objectiveOrientedContainer
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
__construct(private ilObjTest $test_obj, private ilCtrl $ctrl, private ilGlobalTemplateInterface $tpl, private ilLanguage $lng, private ilDBInterface $db, private LoggingServices $logging_services, private SkillService $skills_service, private InternalRequestService $testrequest)
setTestSession(ilTestSession $testSession)