ILIAS  trunk Revision v13.0_alpha-62-g3b72d83f2e5
ilAssQuestionSkillAssignmentNormalizer.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
22
27
32{
33 public function __construct(
34 private readonly Transformations $tt,
35 private readonly \ilDBInterface $db
36 ) {
37 }
38
39 #[\Override]
40 public function normalize($value): array|float|bool|int|string|null
41 {
42 if (!($value instanceof \ilAssQuestionSkillAssignment)) {
43 throw new NormalizingException('Invalid value', $value);
44 }
45
46 $normalized = [
47 'parent_id' => $this->tt->normalize(new Id($value->getParentObjId(), 'object')),
48 'question_id' => $this->tt->normalize(new Id($value->getQuestionId(), 'question')),
49 'base_id' => $this->tt->normalize(new Id($value->getSkillBaseId(), 'skill_base')),
50 'tref_id' => $this->tt->normalize(new Id($value->getSkillTrefId(), 'skill_tref')),
51 'original_title' => $value->getSkillTitle(),
52 'original_path' => $value->getSkillPath(),
53 'eval_mode' => $value->getEvalMode(),
54 ];
55
56 switch ($value->getEvalMode()) {
57 case \ilAssQuestionSkillAssignment::EVAL_MODE_BY_QUESTION_RESULT:
58 $normalized['points'] = $value->getSkillPoints();
59 break;
60
61 case \ilAssQuestionSkillAssignment::EVAL_MODE_BY_QUESTION_SOLUTION:
62 $normalized['solution_comparison_expressions'] = $this->normalizeExpressionList($value);
63 break;
64 }
65 return $normalized;
66 }
67
69 {
71
72 $list = [];
73 foreach ($value->getSolutionComparisonExpressionList()->get() as $expression) {
74 $list[] = [
75 'points' => $expression->getPoints(),
76 'expression' => $expression->getExpression(),
77 'order_index' => $expression->getOrderIndex(),
78 ];
79 }
80
81 return $list;
82 }
83
84 #[\Override]
85 public function denormalize(array|float|bool|int|string|null $value, string $type): \ilAssQuestionSkillAssignment
86 {
87 if ($type !== \ilAssQuestionSkillAssignment::class) {
88 throw new NormalizingException("Invalid type for ilAssQuestionSkillAssignment: {$type}");
89 }
90
91 $assignment = new \ilAssQuestionSkillAssignment($this->db);
92 $assignment->setParentObjId($this->tt->denormalize($value['parent_id'], Id::class)->getId());
93 $assignment->setQuestionId($this->tt->denormalize($value['question_id'], Id::class)->getId());
94 $assignment->setSkillBaseId($this->tt->denormalize($value['base_id'], Id::class)->getId());
95 $assignment->setSkillTrefId($this->tt->denormalize($value['tref_id'], Id::class)->getId());
96 $assignment->setSkillTitle($this->tt->string($value['original_title']));
97 $assignment->setSkillPath($this->tt->string($value['original_path']));
98 $assignment->setEvalMode($this->tt->string($value['eval_mode']));
99 $assignment->initSolutionComparisonExpressionList();
100
101 switch ($assignment->getEvalMode()) {
102 case \ilAssQuestionSkillAssignment::EVAL_MODE_BY_QUESTION_RESULT:
103 $assignment->setSkillPoints($this->tt->int($value['points']));
104 break;
105
106 case \ilAssQuestionSkillAssignment::EVAL_MODE_BY_QUESTION_SOLUTION:
107 $list = $assignment->getSolutionComparisonExpressionList();
108 foreach ($value['solution_comparison_expressions'] as $normalized) {
109 $list->add($this->denormalizeExpression($normalized, $assignment));
110 }
111 break;
112 }
113
114 return $assignment;
115 }
116
117 private function denormalizeExpression(
118 array $normalized,
122 $expression->setQuestionId($assignment->getQuestionId());
123 $expression->setSkillBaseId($assignment->getSkillBaseId());
124 $expression->setSkillTrefId($assignment->getSkillTrefId());
125
126 $expression->setOrderIndex($this->tt->int($normalized['order_index']));
127 $expression->setExpression($this->tt->string($normalized['expression']));
128 $expression->setPoints($this->tt->int($normalized['points']));
129
130 return $expression;
131 }
132}
Wrapper object for an object identifier and an optional object type the identifier belongs to.
Definition: Id.php:33
Exception thrown when a value cannot be normalized or denormalized.
Provides a set of transformations for normalizing and denormalizing values.
denormalize(array|float|bool|int|string|null $value, string $type)
Converts a normalized form back into a value.
A Normalizer is responsible for converting a value into a normalized form and back.
Definition: Normalizer.php:35
Interface ilDBInterface.