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