ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
class.AssignedMaterialDBRepository.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
21namespace ILIAS\Skill\Personal;
22
24
29{
30 protected \ilDBInterface $db;
32
33 public function __construct(
34 ?\ilDBInterface $db = 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 {
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 {
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 {
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 {
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 {
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 {
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}
count(int $user_id, int $tref_id, int $level_id)
Count assigned materials (for a skill level and user)
__construct(?\ilDBInterface $db=null, ?Service\SkillInternalFactoryService $factory_service=null)
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.
Interface ilDBInterface.
global $DIC
Definition: shib_login.php:26