ILIAS  release_5-0 Revision 5.0.0-1144-gc4397b1f870
All Data Structures Namespaces Files Functions Variables Modules Pages
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 
4 require_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 }
addAssignment(ilTestSkillQuestionAssignment $assignment)
incrementNumAssignsBySkill(ilTestSkillQuestionAssignment $assignment)
incrementMaxPointsBySkill(ilTestSkillQuestionAssignment $assignment)
Database Wrapper.
Definition: class.ilDB.php:28
Basic Skill.