ILIAS  trunk Revision v11.0_alpha-2638-g80c1d007f79
class.SkillResourceDBRepository.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
21 namespace ILIAS\Skill\Resource;
22 
24 
29 {
30  protected \ilDBInterface $db;
32  protected \ilTree $tree;
33 
34  public function __construct(
35  ?\ilDBInterface $db = null,
36  ?Service\SkillInternalFactoryService $factory_service = 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  {
51  $ilDB = $this->db;
52  $tree = $this->tree;
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 
196  protected function getSkillResourceLevelFromRecord(array $rec): SkillResourceLevel
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 }
$resources
Definition: ltiservices.php:65
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)
updateImparting(int $skill_id, int $tref_id, int $level_id, int $rep_ref_id, bool $imparting)
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
global $DIC
Definition: shib_login.php:26
addOrUpdate(int $skill_id, int $tref_id, int $level_id, int $rep_ref_id, bool $imparting, bool $trigger)