ILIAS  release_5-0 Revision 5.0.0-1144-gc4397b1f870
class.ilTestSkillQuestionAssignmentList.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2013 ILIAS open source, Extended GPL, see docs/LICENSE */
3
4require_once 'Modules/Test/classes/class.ilTestSkillQuestionAssignment.php';
5
13{
17 private $db;
18
22 private $testId;
23
27 private $assignments;
28
33
38
39 public function __construct(ilDB $db)
40 {
41 $this->db = $db;
42 }
43
47 public function setTestId($testId)
48 {
49 $this->testId = $testId;
50 }
51
55 public function getTestId()
56 {
57 return $this->testId;
58 }
59
60 public function reset()
61 {
62 $this->assignments = array();
63 $this->numAssignsBySkill = array();
64 $this->maxPointsBySkill = array();
65 }
66
67 private function addAssignment(ilTestSkillQuestionAssignment $assignment)
68 {
69 if( !isset($this->assignments[$assignment->getQuestionId()]) )
70 {
71 $this->assignments[$assignment->getQuestionId()] = array();
72 }
73
74 $this->assignments[$assignment->getQuestionId()][] = $assignment;
75 }
76
78 {
79 $key = $this->buildSkillKey($assignment->getSkillBaseId(), $assignment->getSkillTrefId());
80
81 if( !isset($this->numAssignsBySkill[$key]) )
82 {
83 $this->numAssignsBySkill[$key] = 0;
84 }
85
86 $this->numAssignsBySkill[$key]++;
87 }
88
90 {
91 $key = $this->buildSkillKey($assignment->getSkillBaseId(), $assignment->getSkillTrefId());
92
93 if( !isset($this->maxPointsBySkill[$key]) )
94 {
95 $this->maxPointsBySkill[$key] = 0;
96 }
97
98 $this->maxPointsBySkill[$key] += $assignment->getSkillPoints();
99 }
100
101 public function loadFromDb()
102 {
103 $this->reset();
104
105 $query = "
106 SELECT test_fi, question_fi, skill_base_fi, skill_tref_fi, skill_points
107 FROM tst_skl_qst_assigns
108 WHERE test_fi = %s
109 ";
110
111 $res = $this->db->queryF( $query, array('integer'), array($this->getTestId()) );
112
113 while( $row = $this->db->fetchAssoc($res) )
114 {
115 $assignment = $this->buildSkillQuestionAssignmentByArray($row);
116
117 $this->addAssignment($assignment);
118 $this->incrementNumAssignsBySkill($assignment);
119 $this->incrementMaxPointsBySkill($assignment);
120 }
121 }
122
128 {
129 $assignment = new ilTestSkillQuestionAssignment($this->db);
130
131 $assignment->setTestId($data['test_fi']);
132 $assignment->setQuestionId($data['question_fi']);
133 $assignment->setSkillBaseId($data['skill_base_fi']);
134 $assignment->setSkillTrefId($data['skill_tref_fi']);
135 $assignment->setSkillPoints($data['skill_points']);
136
137 return $assignment;
138 }
139
140 private function buildSkillKey($skillBaseId, $skillTrefId)
141 {
142 return $skillBaseId.':'.$skillTrefId;
143 }
144
145 public function loadAdditionalSkillData()
146 {
147 foreach($this->assignments as $assignmentsByQuestion)
148 {
149 foreach($assignmentsByQuestion as $assignment)
150 {
151 $assignment->loadAdditionalSkillData();
152 }
153 }
154 }
155
156 public function getAssignmentsByQuestionId($questionId)
157 {
158 if( !isset($this->assignments[$questionId]) )
159 {
160 return array();
161 }
162
163 return $this->assignments[$questionId];
164 }
165
166 public function getUniqueAssignedSkills()
167 {
168 require_once 'Services/Skill/classes/class.ilBasicSkill.php';
169
170 $skills = array();
171
172 foreach($this->assignments as $assignmentsByQuestion)
173 {
174 foreach($assignmentsByQuestion as $assignment)
175 {
176 $key = $this->buildSkillKey($assignment->getSkillBaseId(), $assignment->getSkillTrefId());
177
178 if( !isset($skills[$key]) )
179 {
180 $skills[$key] = array(
181 'skill' => new ilBasicSkill($assignment->getSkillBaseId()),
182 'skill_base_id' => $assignment->getSkillBaseId(),
183 'skill_tref_id' => $assignment->getSkillTrefId(),
184 'num_assigns' => $this->getNumAssignsBySkill(
185 $assignment->getSkillBaseId(), $assignment->getSkillTrefId()
186 ),
187 'max_points' => $this->getMaxPointsBySkill(
188 $assignment->getSkillBaseId(), $assignment->getSkillTrefId()
189 )
190 );
191 }
192 }
193 }
194
195 return $skills;
196 }
197
198 public function isAssignedSkill($skillBaseId, $skillTrefId)
199 {
200 foreach($this->getUniqueAssignedSkills() as $assignedSkill)
201 {
202 if( $assignedSkill['skill_base_id'] != $skillBaseId )
203 {
204 continue;
205 }
206
207 if( $assignedSkill['skill_tref_id'] == $skillTrefId )
208 {
209 return true;
210 }
211 }
212
213 return false;
214 }
215
216 public function getNumAssignsBySkill($skillBaseId, $skillTrefId)
217 {
218 return $this->numAssignsBySkill[$this->buildSkillKey($skillBaseId, $skillTrefId)];
219 }
220
221 public function getMaxPointsBySkill($skillBaseId, $skillTrefId)
222 {
223 return $this->maxPointsBySkill[$this->buildSkillKey($skillBaseId, $skillTrefId)];
224 }
225}
Database Wrapper.
Definition: class.ilDB.php:29
incrementMaxPointsBySkill(ilTestSkillQuestionAssignment $assignment)
incrementNumAssignsBySkill(ilTestSkillQuestionAssignment $assignment)
addAssignment(ilTestSkillQuestionAssignment $assignment)