ILIAS  trunk Revision v11.0_alpha-2638-g80c1d007f79
class.AssignedMaterialDBRepository.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
21 namespace ILIAS\Skill\Personal;
22 
24 
29 {
30  protected \ilDBInterface $db;
32 
33  public function __construct(
34  ?\ilDBInterface $db = null,
35  ?Service\SkillInternalFactoryService $factory_service = null
36  ) {
37  global $DIC;
38 
39  $this->db = ($db) ?: $DIC->database();
40  $this->factory_service = ($factory_service) ?: $DIC->skills()->internal()->factory();
41  }
42 
53  public function assign(
54  int $user_id,
55  int $top_skill_id,
56  int $tref_id,
57  int $basic_skill_id,
58  int $level_id,
59  int $wsp_id
60  ): void {
61  $ilDB = $this->db;
62 
63  $set = $ilDB->query(
64  "SELECT * FROM skl_assigned_material " .
65  " WHERE user_id = " . $ilDB->quote($user_id, "integer") .
66  " AND top_skill_id = " . $ilDB->quote($top_skill_id, "integer") .
67  " AND tref_id = " . $ilDB->quote($tref_id, "integer") .
68  " AND skill_id = " . $ilDB->quote($basic_skill_id, "integer") .
69  " AND level_id = " . $ilDB->quote($level_id, "integer") .
70  " AND wsp_id = " . $ilDB->quote($wsp_id, "integer")
71  );
72  if (!$ilDB->fetchAssoc($set)) {
73  $ilDB->manipulate("INSERT INTO skl_assigned_material " .
74  "(user_id, top_skill_id, tref_id, skill_id, level_id, wsp_id) VALUES (" .
75  $ilDB->quote($user_id, "integer") . "," .
76  $ilDB->quote($top_skill_id, "integer") . "," .
77  $ilDB->quote($tref_id, "integer") . "," .
78  $ilDB->quote($basic_skill_id, "integer") . "," .
79  $ilDB->quote($level_id, "integer") . "," .
80  $ilDB->quote($wsp_id, "integer") .
81  ")");
82  }
83  }
84 
89  public function get(int $user_id, int $tref_id, int $level_id): array
90  {
91  $ilDB = $this->db;
92 
93  $set = $ilDB->query(
94  "SELECT * FROM skl_assigned_material " .
95  " WHERE level_id = " . $ilDB->quote($level_id, "integer") .
96  " AND tref_id = " . $ilDB->quote($tref_id, "integer") .
97  " AND user_id = " . $ilDB->quote($user_id, "integer")
98  );
99  $mat = [];
100  while ($rec = $ilDB->fetchAssoc($set)) {
101  $mat[] = $this->getFromRecord($rec);
102  }
103  return $mat;
104  }
105 
110  public function getAll(int $user_id, int $skill_id, int $tref_id): array
111  {
112  $ilDB = $this->db;
113 
114  $set = $ilDB->query(
115  "SELECT * FROM skl_assigned_material " .
116  " WHERE skill_id = " . $ilDB->quote($skill_id, "integer") .
117  " AND tref_id = " . $ilDB->quote($tref_id, "integer") .
118  " AND user_id = " . $ilDB->quote($user_id, "integer")
119  );
120  $mat = [];
121  while ($rec = $ilDB->fetchAssoc($set)) {
122  $mat[] = $this->getFromRecord($rec);
123  }
124  return $mat;
125  }
126 
127  protected function getFromRecord(array $rec): AssignedMaterial
128  {
129  $rec['user_id'] = (int) $rec['user_id'];
130  $rec['top_skill_id'] = (int) $rec['top_skill_id'];
131  $rec['skill_id'] = (int) $rec['skill_id'];
132  $rec['level_id'] = (int) $rec['level_id'];
133  $rec['wsp_id'] = (int) $rec['wsp_id'];
134  $rec['tref_id'] = (int) $rec['tref_id'];
135 
136  return $this->factory_service->personal()->assignedMaterial(
137  $rec['user_id'],
138  $rec['top_skill_id'],
139  $rec['skill_id'],
140  $rec['level_id'],
141  $rec['wsp_id'],
142  $rec['tref_id']
143  );
144  }
145 
149  public function count(int $user_id, int $tref_id, int $level_id): int
150  {
151  $ilDB = $this->db;
152 
153  $set = $ilDB->query(
154  "SELECT count(*) as cnt FROM skl_assigned_material " .
155  " WHERE level_id = " . $ilDB->quote($level_id, "integer") .
156  " AND tref_id = " . $ilDB->quote($tref_id, "integer") .
157  " AND user_id = " . $ilDB->quote($user_id, "integer")
158  );
159  $rec = $ilDB->fetchAssoc($set);
160  return (int) $rec["cnt"];
161  }
162 
163  public function remove(int $user_id, int $tref_id, int $level_id, int $wsp_id): void
164  {
165  $ilDB = $this->db;
166 
167  $t = "DELETE FROM skl_assigned_material WHERE " .
168  " user_id = " . $ilDB->quote($user_id, "integer") .
169  " AND tref_id = " . $ilDB->quote($tref_id, "integer") .
170  " AND level_id = " . $ilDB->quote($level_id, "integer") .
171  " AND wsp_id = " . $ilDB->quote($wsp_id, "integer");
172 
173  $ilDB->manipulate($t);
174  }
175 
176  public function removeAllForUser(int $user_id): void
177  {
178  $ilDB = $this->db;
179 
180  $t = "DELETE FROM skl_assigned_material WHERE " .
181  " user_id = " . $ilDB->quote($user_id, "integer");
182  $ilDB->manipulate($t);
183  }
184 
185  public function removeAllForSkill(int $skill_node_id, bool $is_reference): void
186  {
187  $ilDB = $this->db;
188 
189  if (!$is_reference) {
190  $t = "DELETE FROM skl_assigned_material WHERE " .
191  " skill_id = " . $ilDB->quote($skill_node_id, "integer");
192  } else {
193  $t = "DELETE FROM skl_assigned_material WHERE " .
194  " tref_id = " . $ilDB->quote($skill_node_id, "integer");
195  }
196  $ilDB->manipulate($t);
197  }
198 }
getAll(int $user_id, int $skill_id, int $tref_id)
Get all assigned materials (for a skill and user)
assign(int $user_id, int $top_skill_id, int $tref_id, int $basic_skill_id, int $level_id, int $wsp_id)
Assign material to skill level.
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
count(int $user_id, int $tref_id, int $level_id)
Count assigned materials (for a skill level and user)
global $DIC
Definition: shib_login.php:26
__construct(?\ilDBInterface $db=null, ?Service\SkillInternalFactoryService $factory_service=null)