ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
ilTestSkillEvaluation Class Reference
+ Collaboration diagram for ilTestSkillEvaluation:

Public Member Functions

 __construct (private ilDBInterface $db, private TestLogger $logger, int $test_id, private int $refId, private SkillProfileService $skill_profile_service, private SkillPersonalService $skill_personal_service)
 
 getUserId ()
 
 setUserId (int $user_id)
 
 getActiveId ()
 
 setActiveId (int $active_id)
 
 getPass ()
 
 setPass ($pass)
 
 getNumRequiredBookingsForSkillTriggering ()
 
 setNumRequiredBookingsForSkillTriggering (int $num_required_bookings_for_skill_triggering)
 
 init (ilAssQuestionList $question_list)
 
 evaluate (array $test_results)
 
 getReachedSkillLevels ()
 
 handleSkillTriggering ()
 
 getSkillsMatchingNumAnswersBarrier ()
 
 getSkillsInvolvedByAssignment ()
 
 isAssignedSkill ($skill_base_id, $skill_tref_id)
 
 getAssignedSkillMatchingSkillProfiles ()
 
 noProfileMatchingAssignedSkillExists (array $available_skill_profiles)
 

Private Member Functions

 reset ()
 
 initTestQuestionData (ilAssQuestionList $question_list)
 
 initTestResultData (array $test_results)
 
 drawUpSkillPointAccounts ()
 
 isAnsweredQuestion (int $question_id)
 
 determineReachedSkillPointsWithSolutionCompare (ilAssQuestionSolutionComparisonExpressionList $expression_list)
 
 calculateReachedSkillPointsFromTestPoints (int $skill_points, float $max_test_points, float $reached_test_points)
 
 bookToSkillPointAccount (int $skill_base_id, int $skill_tref_id, int $max_skill_points, float $reached_skill_points)
 
 evaluateSkillPointAccounts ()
 
 doesNumBookingsExceedRequiredBookingsBarrier (ilTestSkillPointAccount $skillPointAccount)
 
 invokeSkillLevelTrigger (int $skill_level_id, int $skill_tref_id)
 

Private Attributes

ilAssQuestionSkillAssignmentList $skill_question_assignment_list
 
ilTestSkillLevelThresholdList $skill_level_threshold_list
 
array $questions = []
 
array $max_points_by_question = []
 
array $reached_points_by_question
 
array $skill_point_accounts
 
array $reached_skill_levels
 
int $user_id
 
int $active_id
 
int $pass
 
int $num_required_bookings_for_skill_triggering
 

Detailed Description

Definition at line 33 of file class.ilTestSkillEvaluation.php.

Constructor & Destructor Documentation

◆ __construct()

ilTestSkillEvaluation::__construct ( private ilDBInterface  $db,
private TestLogger  $logger,
int  $test_id,
private int  $refId,
private SkillProfileService  $skill_profile_service,
private SkillPersonalService  $skill_personal_service 
)

Definition at line 48 of file class.ilTestSkillEvaluation.php.

55 {
56 $this->skill_question_assignment_list = new ilAssQuestionSkillAssignmentList($this->db);
57
58 $this->skill_level_threshold_list = new ilTestSkillLevelThresholdList($this->db);
59 $this->skill_level_threshold_list->setTestId($test_id);
60 }

Member Function Documentation

◆ bookToSkillPointAccount()

ilTestSkillEvaluation::bookToSkillPointAccount ( int  $skill_base_id,
int  $skill_tref_id,
int  $max_skill_points,
float  $reached_skill_points 
)
private

Definition at line 237 of file class.ilTestSkillEvaluation.php.

242 : void {
243 $skill_key = $skill_base_id . ':' . $skill_tref_id;
244
245 if (!isset($this->skill_point_accounts[$skill_key])) {
246 $this->skill_point_accounts[$skill_key] = new ilTestSkillPointAccount();
247 }
248
249 $this->skill_point_accounts[$skill_key]->addBooking($max_skill_points, $reached_skill_points);
250 }

Referenced by drawUpSkillPointAccounts().

+ Here is the caller graph for this function:

◆ calculateReachedSkillPointsFromTestPoints()

ilTestSkillEvaluation::calculateReachedSkillPointsFromTestPoints ( int  $skill_points,
float  $max_test_points,
float  $reached_test_points 
)
private

Definition at line 219 of file class.ilTestSkillEvaluation.php.

223 : float {
224 if ($reached_test_points < 0) {
225 $reached_test_points = 0;
226 }
227
228 $factor = 0;
229
230 if ($max_test_points > 0) {
231 $factor = $reached_test_points / $max_test_points;
232 }
233
234 return ($skill_points * $factor);
235 }

Referenced by drawUpSkillPointAccounts().

+ Here is the caller graph for this function:

◆ determineReachedSkillPointsWithSolutionCompare()

ilTestSkillEvaluation::determineReachedSkillPointsWithSolutionCompare ( ilAssQuestionSolutionComparisonExpressionList  $expression_list)
private

Definition at line 195 of file class.ilTestSkillEvaluation.php.

197 : ?int {
198 $question_provider = new ilAssLacQuestionProvider();
199 $question_provider->setQuestionId($expression_list->getQuestionId());
200
201 foreach ($expression_list->get() as $expression) {
202 $condition_composite = (new ilAssLacConditionParser())->parse(
203 $expression->getExpression()
204 );
205
206 $composite_evaluator = new ilAssLacCompositeEvaluator(
207 $question_provider,
208 $this->getActiveId(),
209 $this->getPass()
210 );
211 if ($composite_evaluator->evaluate($condition_composite)) {
212 return $expression->getPoints();
213 }
214 }
215
216 return 0;
217 }
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...

References getActiveId(), and getPass().

Referenced by drawUpSkillPointAccounts().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ doesNumBookingsExceedRequiredBookingsBarrier()

ilTestSkillEvaluation::doesNumBookingsExceedRequiredBookingsBarrier ( ilTestSkillPointAccount  $skillPointAccount)
private

Definition at line 285 of file class.ilTestSkillEvaluation.php.

285 : bool
286 {
287 return $skillPointAccount->getNumBookings() >= $this->getNumRequiredBookingsForSkillTriggering();
288 }

References ilTestSkillPointAccount\getNumBookings().

+ Here is the call graph for this function:

◆ drawUpSkillPointAccounts()

ilTestSkillEvaluation::drawUpSkillPointAccounts ( )
private

Definition at line 156 of file class.ilTestSkillEvaluation.php.

156 : void
157 {
158 foreach ($this->questions as $question_id) {
159 if (!$this->isAnsweredQuestion($question_id)) {
160 continue;
161 }
162
163 $assignments = $this->skill_question_assignment_list->getAssignmentsByQuestionId($question_id);
164
165 foreach ($assignments as $assignment) {
166 if ($assignment->hasEvalModeBySolution()) {
167 $reached_skill_points = $this->determineReachedSkillPointsWithSolutionCompare(
168 $assignment->getSolutionComparisonExpressionList()
169 );
170 } else {
171 $max_test_points = $this->max_points_by_question[$question_id];
172 $reached_test_points = $this->reached_points_by_question[$question_id];
173 $reached_skill_points = $this->calculateReachedSkillPointsFromTestPoints(
174 $assignment->getSkillPoints(),
175 $max_test_points,
176 $reached_test_points
177 );
178 }
179
181 $assignment->getSkillBaseId(),
182 $assignment->getSkillTrefId(),
183 $assignment->getMaxSkillPoints(),
184 $reached_skill_points
185 );
186 }
187 }
188 }
bookToSkillPointAccount(int $skill_base_id, int $skill_tref_id, int $max_skill_points, float $reached_skill_points)
determineReachedSkillPointsWithSolutionCompare(ilAssQuestionSolutionComparisonExpressionList $expression_list)
calculateReachedSkillPointsFromTestPoints(int $skill_points, float $max_test_points, float $reached_test_points)

References bookToSkillPointAccount(), calculateReachedSkillPointsFromTestPoints(), determineReachedSkillPointsWithSolutionCompare(), and isAnsweredQuestion().

Referenced by evaluate().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ evaluate()

ilTestSkillEvaluation::evaluate ( array  $test_results)
Parameters
array$test_resultsAn array containing the test results for a given user

Definition at line 115 of file class.ilTestSkillEvaluation.php.

115 : void
116 {
117 $this->reset();
118
119 $this->initTestResultData($test_results);
120
123 }
initTestResultData(array $test_results)

References drawUpSkillPointAccounts(), evaluateSkillPointAccounts(), initTestResultData(), and reset().

+ Here is the call graph for this function:

◆ evaluateSkillPointAccounts()

ilTestSkillEvaluation::evaluateSkillPointAccounts ( )
private

Definition at line 252 of file class.ilTestSkillEvaluation.php.

252 : void
253 {
254 foreach ($this->skill_point_accounts as $skill_key => $skill_point_account) {
255 if (!$this->doesNumBookingsExceedRequiredBookingsBarrier($skill_point_account)) {
256 continue;
257 }
258
259 list($skill_base_id, $skill_tref_id) = explode(':', $skill_key);
260
261 $skill = new ilBasicSkill((int) $skill_base_id);
262 $levels = $skill->getLevelData();
263
264 $reached_level_id = null;
265 foreach ($levels as $level) {
266 $threshold = $this->skill_level_threshold_list->getThreshold($skill_base_id, $skill_tref_id, $level['id']);
267
268 if (!($threshold instanceof ilTestSkillLevelThreshold) || $threshold->getThreshold() === null) {
269 continue;
270 }
271
272 if ($skill_point_account->getTotalReachedSkillPercent() < $threshold->getThreshold()) {
273 break;
274 }
275
276 $reached_level_id = $level['id'];
277 }
278
279 $this->reached_skill_levels[] = [
280 'sklBaseId' => $skill_base_id, 'sklTrefId' => $skill_tref_id, 'sklLevelId' => $reached_level_id
281 ];
282 }
283 }
doesNumBookingsExceedRequiredBookingsBarrier(ilTestSkillPointAccount $skillPointAccount)

Referenced by evaluate().

+ Here is the caller graph for this function:

◆ getActiveId()

ilTestSkillEvaluation::getActiveId ( )

Definition at line 72 of file class.ilTestSkillEvaluation.php.

72 : int
73 {
74 return $this->active_id;
75 }

References $active_id.

Referenced by determineReachedSkillPointsWithSolutionCompare().

+ Here is the caller graph for this function:

◆ getAssignedSkillMatchingSkillProfiles()

ilTestSkillEvaluation::getAssignedSkillMatchingSkillProfiles ( )

Definition at line 362 of file class.ilTestSkillEvaluation.php.

362 : array
363 {
364 $matching_skill_profiles = [];
365 $users_profiles = $this->skill_profile_service->getProfilesOfUser($this->getUserId());
366 foreach ($users_profiles as $profile_data) {
367 $assigned_skill_levels = $this->skill_profile_service->getSkillLevels($profile_data->getId());
368
369 foreach ($assigned_skill_levels as $assigned_skill_level) {
370 $skill_base_id = $assigned_skill_level->getBaseSkillId();
371 $skill_tref_id = $assigned_skill_level->getTrefId();
372
373 if ($this->skill_question_assignment_list->isAssignedSkill($skill_base_id, $skill_tref_id)) {
374 $matching_skill_profiles[$profile_data->getId()] = $profile_data->getTitle();
375 }
376 }
377 }
378
379 return $matching_skill_profiles;
380 }

◆ getNumRequiredBookingsForSkillTriggering()

ilTestSkillEvaluation::getNumRequiredBookingsForSkillTriggering ( )

◆ getPass()

ilTestSkillEvaluation::getPass ( )

Definition at line 82 of file class.ilTestSkillEvaluation.php.

82 : int
83 {
84 return $this->pass;
85 }

References $pass.

Referenced by determineReachedSkillPointsWithSolutionCompare().

+ Here is the caller graph for this function:

◆ getReachedSkillLevels()

ilTestSkillEvaluation::getReachedSkillLevels ( )

Definition at line 125 of file class.ilTestSkillEvaluation.php.

125 : array
126 {
128 }

References $reached_skill_levels.

◆ getSkillsInvolvedByAssignment()

ilTestSkillEvaluation::getSkillsInvolvedByAssignment ( )

Definition at line 341 of file class.ilTestSkillEvaluation.php.

341 : array
342 {
343 $unique_skills = [];
344
345 foreach ($this->skill_question_assignment_list->getUniqueAssignedSkills() as $skill) {
346 $skillKey = $skill['skill_base_id'] . ':' . $skill['skill_tref_id'];
347
348 $unique_skills[$skillKey] = [
349 'base_skill_id' => (int) $skill['skill_base_id'],
350 'tref_id' => (int) $skill['skill_tref_id']
351 ];
352 }
353
354 return $unique_skills;
355 }

References ILIAS\Repository\int().

+ Here is the call graph for this function:

◆ getSkillsMatchingNumAnswersBarrier()

ilTestSkillEvaluation::getSkillsMatchingNumAnswersBarrier ( )

Definition at line 323 of file class.ilTestSkillEvaluation.php.

323 : array
324 {
325 $skills_matching_num_answers_barrier = [];
326
327 foreach ($this->skill_point_accounts as $skillKey => $skillPointAccount) {
328 if ($this->doesNumBookingsExceedRequiredBookingsBarrier($skillPointAccount)) {
329 list($skillBaseId, $skillTrefId) = explode(':', $skillKey);
330
331 $skills_matching_num_answers_barrier[$skillKey] = [
332 'base_skill_id' => (int) $skillBaseId,
333 'tref_id' => (int) $skillTrefId
334 ];
335 }
336 }
337
338 return $skills_matching_num_answers_barrier;
339 }

References ILIAS\Repository\int().

+ Here is the call graph for this function:

◆ getUserId()

ilTestSkillEvaluation::getUserId ( )

Definition at line 62 of file class.ilTestSkillEvaluation.php.

62 : int
63 {
64 return $this->user_id;
65 }

References $user_id.

◆ handleSkillTriggering()

ilTestSkillEvaluation::handleSkillTriggering ( )

Definition at line 290 of file class.ilTestSkillEvaluation.php.

290 : void
291 {
292 foreach ($this->getReachedSkillLevels() as $reached_skill_level) {
293 $this->invokeSkillLevelTrigger((int) $reached_skill_level['sklLevelId'], (int) $reached_skill_level['sklTrefId']);
294
295 if ($reached_skill_level['sklTrefId'] > 0) {
296 $this->skill_personal_service->addPersonalSkill($this->getUserId(), (int) $reached_skill_level['sklTrefId']);
297 } else {
298 $this->skill_personal_service->addPersonalSkill($this->getUserId(), (int) $reached_skill_level['sklBaseId']);
299 }
300 }
301 //write profile completion entries if fulfilment status has changed
302 $this->skill_profile_service->writeCompletionEntryForAllProfiles($this->getUserId());
303 }
invokeSkillLevelTrigger(int $skill_level_id, int $skill_tref_id)

◆ init()

ilTestSkillEvaluation::init ( ilAssQuestionList  $question_list)

Definition at line 102 of file class.ilTestSkillEvaluation.php.

102 : void
103 {
104 $this->skill_question_assignment_list->setParentObjId($question_list->getParentObjId());
105 $this->skill_question_assignment_list->loadFromDb();
106
107 $this->skill_level_threshold_list->loadFromDb();
108
109 $this->initTestQuestionData($question_list);
110 }
initTestQuestionData(ilAssQuestionList $question_list)

References ilAssQuestionList\getParentObjId(), and initTestQuestionData().

+ Here is the call graph for this function:

◆ initTestQuestionData()

ilTestSkillEvaluation::initTestQuestionData ( ilAssQuestionList  $question_list)
private

Definition at line 137 of file class.ilTestSkillEvaluation.php.

137 : void
138 {
139 foreach ($question_list->getQuestionDataArray() as $question_data) {
140 $this->questions[] = $question_data['question_id'];
141 $this->max_points_by_question[ $question_data['question_id'] ] = $question_data['points'];
142 }
143 }

References ilAssQuestionList\getQuestionDataArray().

Referenced by init().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ initTestResultData()

ilTestSkillEvaluation::initTestResultData ( array  $test_results)
private

Definition at line 145 of file class.ilTestSkillEvaluation.php.

145 : void
146 {
147 foreach ($test_results as $key => $result) {
148 if ($key === 'pass' || $key === 'test') { // note: key int 0 IS == 'pass' or 'buxtehude'
149 continue;
150 }
151
152 $this->reached_points_by_question[ $result['qid'] ] = $result['reached'];
153 }
154 }

Referenced by evaluate().

+ Here is the caller graph for this function:

◆ invokeSkillLevelTrigger()

ilTestSkillEvaluation::invokeSkillLevelTrigger ( int  $skill_level_id,
int  $skill_tref_id 
)
private

Definition at line 305 of file class.ilTestSkillEvaluation.php.

305 : void
306 {
308 $skill_level_id,
309 $this->getUserId(),
310 $this->refId,
311 $skill_tref_id,
313 true,
314 false,
315 (string) $this->getPass()
316 );
317
318 $this->logger->info(
319 "refId={$this->refId} / usrId={$this->getUserId()} / levelId={$skill_level_id} / trefId={$skill_tref_id}"
320 );
321 }
static writeUserSkillLevelStatus(int $a_level_id, int $a_user_id, int $a_trigger_ref_id, int $a_tref_id=0, int $a_status=ilBasicSkill::ACHIEVED, bool $a_force=false, bool $a_self_eval=false, string $a_unique_identifier="", float $a_next_level_fulfilment=0.0, string $trigger_user_id="")

References ilBasicSkill\ACHIEVED, ILIAS\Repository\logger(), and ilBasicSkill\writeUserSkillLevelStatus().

+ Here is the call graph for this function:

◆ isAnsweredQuestion()

ilTestSkillEvaluation::isAnsweredQuestion ( int  $question_id)
private

Definition at line 190 of file class.ilTestSkillEvaluation.php.

190 : bool
191 {
192 return isset($this->reached_points_by_question[$question_id]);
193 }

Referenced by drawUpSkillPointAccounts().

+ Here is the caller graph for this function:

◆ isAssignedSkill()

ilTestSkillEvaluation::isAssignedSkill (   $skill_base_id,
  $skill_tref_id 
)

Definition at line 357 of file class.ilTestSkillEvaluation.php.

357 : void
358 {
359 $this->skill_question_assignment_list->isAssignedSkill($skill_base_id, $skill_tref_id);
360 }

◆ noProfileMatchingAssignedSkillExists()

ilTestSkillEvaluation::noProfileMatchingAssignedSkillExists ( array  $available_skill_profiles)

Definition at line 382 of file class.ilTestSkillEvaluation.php.

382 : bool
383 {
384 $no_profile_matching_skills = $this->skill_question_assignment_list->getUniqueAssignedSkills();
385
386 foreach (array_keys($available_skill_profiles) as $skill_profile_id) {
387 $assigned_skill_levels = $this->skill_profile_service->getSkillLevels(
388 $this->skill_profile_service->getProfile($skill_profile_id)->getId()
389 );
390
391 foreach ($assigned_skill_levels as $assigned_skill_level) {
392 $skill_base_id = $assigned_skill_level->getBaseSkillId();
393 $skill_tref_id = $assigned_skill_level->getTrefId();
394
395 if ($this->skill_question_assignment_list->isAssignedSkill($skill_base_id, $skill_tref_id)) {
396 unset($no_profile_matching_skills["{$skill_base_id}:{$skill_tref_id}"]);
397 }
398 }
399 }
400
401 return $no_profile_matching_skills !== [];
402 }

◆ reset()

ilTestSkillEvaluation::reset ( )
private

Definition at line 130 of file class.ilTestSkillEvaluation.php.

130 : void
131 {
132 $this->reached_points_by_question = [];
133 $this->skill_point_accounts = [];
134 $this->reached_skill_levels = [];
135 }

Referenced by evaluate().

+ Here is the caller graph for this function:

◆ setActiveId()

ilTestSkillEvaluation::setActiveId ( int  $active_id)

Definition at line 77 of file class.ilTestSkillEvaluation.php.

77 : void
78 {
79 $this->active_id = $active_id;
80 }

References $active_id.

◆ setNumRequiredBookingsForSkillTriggering()

ilTestSkillEvaluation::setNumRequiredBookingsForSkillTriggering ( int  $num_required_bookings_for_skill_triggering)

Definition at line 97 of file class.ilTestSkillEvaluation.php.

97 : void
98 {
99 $this->num_required_bookings_for_skill_triggering = $num_required_bookings_for_skill_triggering;
100 }

References $num_required_bookings_for_skill_triggering.

◆ setPass()

ilTestSkillEvaluation::setPass (   $pass)

Definition at line 87 of file class.ilTestSkillEvaluation.php.

87 : void
88 {
89 $this->pass = $pass;
90 }

References $pass.

◆ setUserId()

ilTestSkillEvaluation::setUserId ( int  $user_id)

Definition at line 67 of file class.ilTestSkillEvaluation.php.

67 : void
68 {
69 $this->user_id = $user_id;
70 }

References $user_id.

Field Documentation

◆ $active_id

int ilTestSkillEvaluation::$active_id
private

Definition at line 43 of file class.ilTestSkillEvaluation.php.

Referenced by getActiveId(), and setActiveId().

◆ $max_points_by_question

array ilTestSkillEvaluation::$max_points_by_question = []
private

Definition at line 38 of file class.ilTestSkillEvaluation.php.

◆ $num_required_bookings_for_skill_triggering

int ilTestSkillEvaluation::$num_required_bookings_for_skill_triggering
private

◆ $pass

int ilTestSkillEvaluation::$pass
private

Definition at line 44 of file class.ilTestSkillEvaluation.php.

Referenced by getPass(), and setPass().

◆ $questions

array ilTestSkillEvaluation::$questions = []
private

Definition at line 37 of file class.ilTestSkillEvaluation.php.

◆ $reached_points_by_question

array ilTestSkillEvaluation::$reached_points_by_question
private

Definition at line 39 of file class.ilTestSkillEvaluation.php.

◆ $reached_skill_levels

array ilTestSkillEvaluation::$reached_skill_levels
private

Definition at line 41 of file class.ilTestSkillEvaluation.php.

Referenced by getReachedSkillLevels().

◆ $skill_level_threshold_list

ilTestSkillLevelThresholdList ilTestSkillEvaluation::$skill_level_threshold_list
private

Definition at line 36 of file class.ilTestSkillEvaluation.php.

◆ $skill_point_accounts

array ilTestSkillEvaluation::$skill_point_accounts
private

Definition at line 40 of file class.ilTestSkillEvaluation.php.

◆ $skill_question_assignment_list

ilAssQuestionSkillAssignmentList ilTestSkillEvaluation::$skill_question_assignment_list
private

Definition at line 35 of file class.ilTestSkillEvaluation.php.

◆ $user_id

int ilTestSkillEvaluation::$user_id
private

Definition at line 42 of file class.ilTestSkillEvaluation.php.

Referenced by getUserId(), and setUserId().


The documentation for this class was generated from the following file: