ILIAS  trunk Revision v11.0_alpha-2638-g80c1d007f79
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 $no_skill_profile_option_enabled = false;
49  protected array $available_skill_profiles = [];
50  protected array $available_skills = [];
52 
53  public function __construct(
54  private readonly ilObjTest $test_obj,
55  private readonly ilCtrlInterface $ctrl,
56  private readonly ilGlobalTemplateInterface $tpl,
57  private readonly ilLanguage $lng,
58  private readonly ilDBInterface $db,
59  private readonly TestLogger $logger,
60  private readonly SkillService $skills_service,
61  private readonly RequestDataCollector $testrequest
62  ) {
63  }
64 
66  {
67  return $this->question_list;
68  }
69 
70  public function setQuestionList(ilAssQuestionList $question_list): void
71  {
72  $this->question_list = $question_list;
73  }
74 
76  {
78  }
79 
81  ilTestObjectiveOrientedContainer $objective_oriented_container
82  ): void {
83  $this->objective_oriented_container = $objective_oriented_container;
84  }
85 
86  public function executeCommand(): void
87  {
88  $cmd = $this->ctrl->getCmd(self::CMD_SHOW) . 'Cmd';
89  $this->$cmd();
90  }
91 
92  protected function init(bool $skill_profile_enabled): void
93  {
94  $this->test_passes_selector = new ilTestPassesSelector($this->db, $this->test_obj);
95  $this->test_passes_selector->setActiveId($this->test_session->getActiveId());
96  $this->test_passes_selector->setLastFinishedPass($this->test_session->getLastFinishedPass());
97 
98  $skill_evaluation = new ilTestSkillEvaluation(
99  $this->db,
100  $this->logger,
101  $this->test_obj->getTestId(),
102  $this->test_obj->getRefId(),
103  $this->skills_service->profile(),
104  $this->skills_service->personal()
105  );
106 
107  $skill_evaluation->setUserId($this->getTestSession()->getUserId());
108  $skill_evaluation->setActiveId($this->getTestSession()->getActiveId());
109 
110  $skill_evaluation->setNumRequiredBookingsForSkillTriggering(
111  $this->test_obj->getGlobalSettings()->getSkillTriggeringNumberOfAnswers()
112  );
113 
114  $skill_evaluation->init($this->getQuestionList());
115 
116  $available_skill_profiles = $skill_evaluation->getAssignedSkillMatchingSkillProfiles();
118  $skill_evaluation->noProfileMatchingAssignedSkillExists($available_skill_profiles)
119  );
120  $this->setAvailableSkillProfiles($available_skill_profiles);
121 
122  // should be reportedPasses - yes - indeed, skill level status will not respect - avoid confuse here
123  $evaluation_passes = $this->test_passes_selector->getExistingPasses();
124 
125  $available_skills = [];
126 
127  foreach ($evaluation_passes as $eval_pass) {
128  $test_results = $this->test_obj->getTestResult($this->getTestSession()->getActiveId(), $eval_pass, true);
129 
130  $skill_evaluation->setPass($eval_pass);
131  $skill_evaluation->evaluate($test_results);
132 
133  if ($skill_profile_enabled && self::INVOLVE_SKILLS_BELOW_NUM_ANSWERS_BARRIER_FOR_GAP_ANALASYS) {
134  $skills = $skill_evaluation->getSkillsInvolvedByAssignment();
135  } else {
136  $skills = $skill_evaluation->getSkillsMatchingNumAnswersBarrier();
137  }
138 
139  $available_skills = array_merge($available_skills, $skills);
140  }
141 
142  $this->setAvailableSkills(array_values($available_skills));
143  }
144 
145  private function showCmd(): void
146  {
147  $skill_profile_selected = $this->testrequest->isset(self::SKILL_PROFILE_PARAM);
148  $selected_skill_profile = $this->testrequest->int(self::SKILL_PROFILE_PARAM);
149 
150  $this->init($skill_profile_selected);
151 
152  $personal_skills_gui = new ilPersonalSkillsGUI();
153  $personal_skills_gui->setGapAnalysisActualStatusModePerObject(
154  $this->test_obj->getId(),
155  $this->lng->txt('tst_test_result')
156  );
157  $personal_skills_gui->setTriggerObjectsFilter([$this->test_obj->getId()]);
158  $personal_skills_gui->setHistoryView(true);
159  $personal_skills_gui->setProfileId($selected_skill_profile);
160 
161  $this->tpl->setContent(
162  $this->buildEvaluationToolbarGUI($selected_skill_profile)->getHTML()
163  . $personal_skills_gui->getGapAnalysisHTML(
164  $this->getTestSession()->getUserId(),
166  )
167  );
168  }
169 
170  private function buildEvaluationToolbarGUI(
171  int $selected_skill_profile_id
173  if (!$this->no_skill_profile_option_enabled && $selected_skill_profile_id === null) {
174  $selected_skill_profile_id = key($this->available_skill_profiles) ?? 0;
175  }
176 
177  $gui = new ilTestSkillEvaluationToolbarGUI($this->ctrl, $this->lng);
178  $gui->setAvailableSkillProfiles($this->available_skill_profiles);
179  $gui->setNoSkillProfileOptionEnabled($this->no_skill_profile_option_enabled);
180  $gui->setSelectedEvaluationMode($selected_skill_profile_id);
181  $gui->build();
182  return $gui;
183  }
184 
185  public function setTestSession(ilTestSession $test_session): void
186  {
187  $this->test_session = $test_session;
188  }
189 
190  public function getTestSession(): ilTestSession
191  {
192  return $this->test_session;
193  }
194 
195  public function setNoSkillProfileOptionEnabled(bool $no_skill_profile_option_enabled): void
196  {
197  $this->no_skill_profile_option_enabled = $no_skill_profile_option_enabled;
198  }
199 
200  public function setAvailableSkillProfiles(array $available_skill_profiles): void
201  {
202  $this->available_skill_profiles = $available_skill_profiles;
203  }
204 
205  public function setAvailableSkills(array $available_skills): void
206  {
207  $this->available_skills = $available_skills;
208  }
209 }
setAvailableSkillProfiles(array $available_skill_profiles)
ilTestObjectiveOrientedContainer $objective_oriented_container
buildEvaluationToolbarGUI(int $selected_skill_profile_id)
setObjectiveOrientedContainer(ilTestObjectiveOrientedContainer $objective_oriented_container)
__construct(private readonly ilObjTest $test_obj, private readonly ilCtrlInterface $ctrl, private readonly ilGlobalTemplateInterface $tpl, private readonly ilLanguage $lng, private readonly ilDBInterface $db, private readonly TestLogger $logger, private readonly SkillService $skills_service, private readonly RequestDataCollector $testrequest)
init(bool $skill_profile_enabled)
setAvailableSkills(array $available_skills)
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
Personal skills GUI class.
setNoSkillProfileOptionEnabled(bool $no_skill_profile_option_enabled)
setTestSession(ilTestSession $test_session)
global $lng
Definition: privfeed.php:31
setQuestionList(ilAssQuestionList $question_list)