ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
class.SkillResourceDBRepository.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
21namespace ILIAS\Skill\Resource;
22
24
29{
30 protected \ilDBInterface $db;
32 protected \ilTree $tree;
33
34 public function __construct(
35 ?\ilDBInterface $db = null,
37 ?\ilTree $tree = null
38 ) {
39 global $DIC;
40
41 $this->db = ($db) ?: $DIC->database();
42 $this->factory_service = ($factory_service) ?: $DIC->skills()->internal()->factory();
43 $this->tree = ($tree) ?: $DIC->repositoryTree();
44 }
45
49 public function getAll(int $skill_id, int $tref_id): array
50 {
53
54 $set = $ilDB->query(
55 "SELECT * FROM skl_skill_resource " .
56 " WHERE base_skill_id = " . $ilDB->quote($skill_id, "integer") .
57 " AND tref_id = " . $ilDB->quote($tref_id, "integer") .
58 " ORDER BY level_id"
59 );
60 $resources = [];
61 while ($rec = $ilDB->fetchAssoc($set)) {
62 if ($tree->isInTree((int) $rec["rep_ref_id"])) {
63 $resources[(int) $rec["level_id"]][] = $this->getSkillResourceFromRecord($rec);
64 }
65 }
66
67 return $resources;
68 }
69
70 protected function getSkillResourceFromRecord(array $rec): SkillResource
71 {
72 $rec["base_skill_id"] = (int) $rec["base_skill_id"];
73 $rec["tref_id"] = (int) $rec["tref_id"];
74 $rec["level_id"] = (int) $rec["level_id"];
75 $rec["rep_ref_id"] = (int) $rec["rep_ref_id"];
76 $rec["imparting"] = (bool) $rec["imparting"];
77 $rec["ltrigger"] = (bool) $rec["ltrigger"];
78
79 return $this->factory_service->resource()->resource(
80 $rec["base_skill_id"],
81 $rec["tref_id"],
82 $rec["level_id"],
83 $rec["rep_ref_id"],
84 $rec["imparting"],
85 $rec["ltrigger"]
86 );
87 }
88
89 public function addOrUpdate(
90 int $skill_id,
91 int $tref_id,
92 int $level_id,
93 int $rep_ref_id,
94 bool $imparting,
95 bool $trigger
96 ): void {
97 $this->db->replace(
98 "skl_skill_resource",
99 [
100 "base_skill_id" => ["integer", $skill_id],
101 "tref_id" => ["integer", $tref_id],
102 "level_id" => ["integer", $level_id],
103 "rep_ref_id" => ["integer", $rep_ref_id]
104 ],
105 [
106 "imparting" => ["integer", (int) $imparting],
107 "ltrigger" => ["integer", (int) $trigger]
108 ]
109 );
110 }
111
112 public function updateImparting(
113 int $skill_id,
114 int $tref_id,
115 int $level_id,
116 int $rep_ref_id,
117 bool $imparting
118 ): void {
119 $this->db->update(
120 "skl_skill_resource",
121 [
122 "imparting" => ["integer", (int) $imparting]
123 ],
124 [
125 "base_skill_id" => ["integer", $skill_id],
126 "tref_id" => ["integer", $tref_id],
127 "level_id" => ["integer", $level_id],
128 "rep_ref_id" => ["integer", $rep_ref_id]
129 ]
130 );
131 }
132
133 public function updateTrigger(
134 int $skill_id,
135 int $tref_id,
136 int $level_id,
137 int $rep_ref_id,
138 bool $trigger
139 ): void {
140 $this->db->update(
141 "skl_skill_resource",
142 [
143 "ltrigger" => ["integer", (int) $trigger]
144 ],
145 [
146 "base_skill_id" => ["integer", $skill_id],
147 "tref_id" => ["integer", $tref_id],
148 "level_id" => ["integer", $level_id],
149 "rep_ref_id" => ["integer", $rep_ref_id]
150 ]
151 );
152 }
153
154 public function remove(int $skill_id, int $tref_id, int $level_id, int $rep_ref_id): void
155 {
156 $this->db->manipulate(
157 "DELETE FROM skl_skill_resource WHERE " .
158 " base_skill_id = " . $this->db->quote($skill_id, "integer") .
159 " AND tref_id = " . $this->db->quote($tref_id, "integer") .
160 " AND level_id = " . $this->db->quote($level_id, "integer") .
161 " AND rep_ref_id = " . $this->db->quote($rep_ref_id, "integer")
162 );
163 }
164
165 public function removeForSkill(int $skill_node_id, bool $is_reference): void
166 {
167 if (!$is_reference) {
168 $this->db->manipulate(
169 "DELETE FROM skl_skill_resource WHERE " .
170 " base_skill_id = " . $this->db->quote($skill_node_id, "integer")
171 );
172 } else {
173 $this->db->manipulate(
174 "DELETE FROM skl_skill_resource WHERE " .
175 " tref_id = " . $this->db->quote($skill_node_id, "integer")
176 );
177 }
178 }
179
183 public function getTriggerLevelsForRefId(int $rep_ref_id): array
184 {
185 $set = $this->db->query("SELECT * FROM skl_skill_resource " .
186 " WHERE rep_ref_id = " . $this->db->quote($rep_ref_id, "integer") .
187 " AND ltrigger = " . $this->db->quote(1, "integer"));
188
189 $skill_levels = [];
190 while ($rec = $this->db->fetchAssoc($set)) {
191 $skill_levels[] = $this->getSkillResourceLevelFromRecord($rec);
192 }
193 return $skill_levels;
194 }
195
197 {
198 $rec["base_skill_id"] = (int) $rec["base_skill_id"];
199 $rec["tref_id"] = (int) $rec["tref_id"];
200 $rec["level_id"] = (int) $rec["level_id"];
201
202 return $this->factory_service->resource()->resourceLevel(
203 $rec["base_skill_id"],
204 $rec["tref_id"],
205 $rec["level_id"]
206 );
207 }
208}
updateTrigger(int $skill_id, int $tref_id, int $level_id, int $rep_ref_id, bool $trigger)
__construct(?\ilDBInterface $db=null, ?Service\SkillInternalFactoryService $factory_service=null, ?\ilTree $tree=null)
addOrUpdate(int $skill_id, int $tref_id, int $level_id, int $rep_ref_id, bool $imparting, bool $trigger)
updateImparting(int $skill_id, int $tref_id, int $level_id, int $rep_ref_id, bool $imparting)
Tree class data representation in hierachical trees using the Nested Set Model with Gaps by Joe Celco...
isInTree(?int $a_node_id)
get all information of a node.
Interface ilDBInterface.
$resources
Definition: ltiservices.php:68
global $DIC
Definition: shib_login.php:26