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