19declare(strict_types=1);
60 $this->assignments = [];
61 $this->num_assigns_by_skill = [];
62 $this->max_points_by_skill = [];
68 $this->assignments[$assignment->
getQuestionId()][] = $assignment;
75 $this->num_assigns_by_skill[$key] ??= 0;
76 $this->num_assigns_by_skill[$key]++;
83 $this->max_points_by_skill[$key] ??= 0;
91 $res = $this->db->query(
"
92 SELECT obj_fi, question_fi, skill_base_fi, skill_tref_fi, skill_points, eval_mode
93 FROM qpl_qst_skl_assigns
94 WHERE {$this->getWhereConditions()}
97 while ($row = $this->db->fetchAssoc(
$res)) {
100 if ($assignment->hasEvalModeBySolution()) {
101 $assignment->loadComparisonExpressions();
112 $conditions = [
"obj_fi = {$this->db->quote($this->getParentObjId(), ilDBConstants::T_INTEGER)}"];
115 $conditions[] =
"question_fi = {$this->db->quote($this->getQuestionIdFilter(), ilDBConstants::T_INTEGER)}";
118 return implode(
' AND ', $conditions);
125 $assignment->setParentObjId(
$data[
'obj_fi']);
126 $assignment->setQuestionId(
$data[
'question_fi']);
127 $assignment->setSkillBaseId(
$data[
'skill_base_fi']);
128 $assignment->setSkillTrefId(
$data[
'skill_tref_fi']);
129 $assignment->setSkillPoints(
$data[
'skill_points']);
130 $assignment->setEvalMode(
$data[
'eval_mode']);
135 private function buildSkillKey(
int $skill_base_id,
int $skill_tref_id): string
137 return "{$skill_base_id}:{$skill_tref_id}";
142 foreach ($this->assignments as $assignments_by_question) {
143 foreach ($assignments_by_question as $assignment) {
144 $assignment->loadAdditionalSkillData();
154 return $this->assignments[$question_id] ?? [];
159 if (!isset($this->assignments[$question_id])) {
163 foreach ($this->assignments[$question_id] as $assignment) {
164 if ($assignment->getSkillBaseId() !== $skill_base_id) {
168 if ($assignment->getSkillTrefId() !== $skill_tref_id) {
182 foreach ($this->assignments as $assignments_by_question) {
183 foreach ($assignments_by_question as $assignment) {
184 $key = $this->
buildSkillKey($assignment->getSkillBaseId(), $assignment->getSkillTrefId());
186 'skill' =>
new ilBasicSkill($assignment->getSkillBaseId()),
187 'skill_base_id' => $assignment->getSkillBaseId(),
188 'skill_tref_id' => $assignment->getSkillTrefId(),
189 'skill_title' => $assignment->getSkillTitle(),
190 'skill_path' => $assignment->getSkillPath(),
192 $assignment->getSkillBaseId(),
193 $assignment->getSkillTrefId()
196 $assignment->getSkillBaseId(),
197 $assignment->getSkillTrefId()
209 if ($assignedSkill[
'skill_base_id'] !== $skill_base_id) {
213 if ($assignedSkill[
'skill_tref_id'] === $skill_tref_id) {
223 return $this->num_assigns_by_skill[$this->
buildSkillKey($skill_base_id, $skill_tref_id)] ??
null;
228 return $this->max_points_by_skill[$this->
buildSkillKey($skill_base_id, $skill_tref_id)] ??
null;
234 ->getGlobalSettingsRepository()
235 ->getGlobalSettings()
236 ->getSkillTriggeringNumberOfAnswers();
239 if ($skill_data[
'num_assigns'] < $global_barrier) {
buildSkillQuestionAssignmentByArray(array $data)
setParentObjId(?int $parent_obj_id)
addAssignment(ilAssQuestionSkillAssignment $assignment)
isAssignedSkill(int $skill_base_id, int $skill_tref_id)
__construct(private readonly ilDBInterface $db)
getUniqueAssignedSkills()
incrementNumAssignsBySkill(ilAssQuestionSkillAssignment $assignment)
array $num_assigns_by_skill
getAssignmentsByQuestionId(int $question_id)
isAssignedToQuestionId(int $skill_base_id, int $skill_tref_id, int $question_id)
hasSkillsAssignedLowerThanBarrier()
getNumAssignsBySkill(int $skill_base_id, int $skill_tref_id)
loadAdditionalSkillData()
array $max_points_by_skill
setQuestionIdFilter(?int $question_id_filter)
buildSkillKey(int $skill_base_id, int $skill_tref_id)
incrementMaxPointsBySkill(ilAssQuestionSkillAssignment $assignment)
getMaxPointsBySkill(int $skill_base_id, int $skill_tref_id)