ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
class.ilRecommendedContentDBRepository.php
Go to the documentation of this file.
1<?php
2
34{
35 protected ilDBInterface $db;
36
37 public function __construct(?ilDBInterface $db = null)
38 {
39 global $DIC;
40
41 $this->db = (is_null($db))
42 ? $DIC->database()
43 : $db;
44 }
45
46 public function addRoleRecommendation(int $role_id, int $ref_id): void
47 {
48 $db = $this->db;
49
50 $db->replace(
51 "rep_rec_content_role",
52 [ // pk
53 "role_id" => ["integer", $role_id],
54 "ref_id" => ["integer", $ref_id]
55 ],
56 []
57 );
58 }
59
60 public function removeRoleRecommendation(int $role_id, int $ref_id): void
61 {
62 $db = $this->db;
63
65 "DELETE FROM rep_rec_content_role WHERE " .
66 " role_id = %s AND ref_id = %s",
67 ["integer", "integer"],
68 [$role_id, $ref_id]
69 );
70 }
71
72 public function addObjectRecommendation(int $user_id, int $ref_id): void
73 {
74 $db = $this->db;
75
76 if (!$this->ifExistsObjectRecommendation($user_id, $ref_id)) {
77 $db->insert("rep_rec_content_obj", [
78 "user_id" => ["integer", $user_id],
79 "ref_id" => ["integer", $ref_id],
80 "declined" => ["integer", false]
81 ]);
82 }
83 }
84
85 public function removeObjectRecommendation(int $user_id, int $ref_id): void
86 {
87 $db = $this->db;
88
90 "DELETE FROM rep_rec_content_obj WHERE " .
91 " user_id = %s AND ref_id = %s",
92 ["integer", "integer"],
94 );
95 }
96
97 public function removeRecommendationsOfRefId(int $ref_id): void
98 {
99 $db = $this->db;
100
102 "DELETE FROM rep_rec_content_obj WHERE " .
103 " ref_id = %s",
104 ["integer"],
105 [$ref_id]
106 );
107
109 "DELETE FROM rep_rec_content_role WHERE " .
110 " ref_id = %s",
111 ["integer"],
112 [$ref_id]
113 );
114 }
115
116 public function removeRecommendationsOfUser(int $user_id): void
117 {
118 $db = $this->db;
119
121 "DELETE FROM rep_rec_content_obj WHERE " .
122 " user_id = %s",
123 ["integer"],
124 [$user_id]
125 );
126 }
127
128 public function removeRecommendationsOfRole(int $role_id): void
129 {
130 $db = $this->db;
131
133 "DELETE FROM rep_rec_content_role WHERE " .
134 " role_id = %s",
135 ["integer"],
136 [$role_id]
137 );
138 }
139
140 // Does object recommendation exist?
141 protected function ifExistsObjectRecommendation(int $user_id, int $ref_id): bool
142 {
143 $db = $this->db;
144
145 $set = $db->queryF(
146 "SELECT * FROM rep_rec_content_obj " .
147 " WHERE user_id = %s AND ref_id = %s",
148 ["integer","integer"],
150 );
151 if ($rec = $db->fetchAssoc($set)) {
152 return true;
153 }
154 return false;
155 }
156
157 public function declineObjectRecommendation(int $user_id, int $ref_id): void
158 {
159 $db = $this->db;
160
161 if ($this->ifExistsObjectRecommendation($user_id, $ref_id)) {
162 $db->update(
163 "rep_rec_content_obj",
164 [
165 "declined" => ["integer", true]
166 ],
167 [ // where
168 "user_id" => ["integer", $user_id],
169 "ref_id" => ["integer", $ref_id]
170 ]
171 );
172 } else {
173 $db->insert("rep_rec_content_obj", [
174 "user_id" => ["integer", $user_id],
175 "ref_id" => ["integer", $ref_id],
176 "declined" => ["integer", true]
177 ]);
178 }
179 }
180
187 public function getRecommendationsOfRoles(array $role_ids): array
188 {
189 $db = $this->db;
190
191 $set = $db->query(
192 "SELECT DISTINCT ref_id FROM rep_rec_content_role " .
193 " WHERE " . $db->in("role_id", $role_ids, false, "integer")
194 );
195
196 return array_map('intval', array_column($db->fetchAll($set), "ref_id"));
197 }
198
203 protected function getUserObjectRecommendations(int $user_id): array
204 {
205 $db = $this->db;
206
207 $set = $db->queryF(
208 "SELECT ref_id FROM rep_rec_content_obj " .
209 " WHERE user_id = %s AND declined = %s",
210 ["integer", "integer"],
211 [$user_id, false]
212 );
213
214 return array_map('intval', array_column($db->fetchAll($set), "ref_id"));
215 }
216
221 protected function getDeclinedUserObjectRecommendations(int $user_id): array
222 {
223 $db = $this->db;
224
225 $set = $db->queryF(
226 "SELECT ref_id FROM rep_rec_content_obj " .
227 " WHERE user_id = %s AND declined = %s",
228 ["integer", "integer"],
229 [$user_id, true]
230 );
231
232 return array_map('intval', array_column($db->fetchAll($set), "ref_id"));
233 }
234
240 public function getOpenRecommendationsOfUser(int $user_id, array $role_ids): array
241 {
242 // recommendations of role
243 $role_recommendations = $this->getRecommendationsOfRoles($role_ids);
244
245 // recommendations of user
246 $obj_recommendations = $this->getUserObjectRecommendations($user_id);
247
248 $recommendations = array_unique($role_recommendations + $obj_recommendations);
249
250 // filter declined recommendations
251 $declined_recommendations = $this->getDeclinedUserObjectRecommendations($user_id);
252 return array_filter($recommendations, static function (int $i) use ($declined_recommendations): bool {
253 return !in_array($i, $declined_recommendations, true);
254 });
255 }
256}
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
getUserObjectRecommendations(int $user_id)
Get user object recommendations.
getOpenRecommendationsOfUser(int $user_id, array $role_ids)
Open recommendations of user (by role or object, without declined ones)
getRecommendationsOfRoles(array $role_ids)
Get recommendations of roles.
getDeclinedUserObjectRecommendations(int $user_id)
Get declined user object recommendations.
Interface ilDBInterface.
update(string $table_name, array $values, array $where)
@description $where MUST contain existing columns only.
insert(string $table_name, array $values)
replace(string $table, array $primary_keys, array $other_columns)
Replace into method.
fetchAll(ilDBStatement $statement, int $fetch_mode=ilDBConstants::FETCHMODE_ASSOC)
manipulateF(string $query, array $types, array $values)
query(string $query)
Run a (read-only) Query on the database.
fetchAssoc(ilDBStatement $statement)
queryF(string $query, array $types, array $values)
in(string $field, array $values, bool $negate=false, string $type="")
$ref_id
Definition: ltiauth.php:66
global $DIC
Definition: shib_login.php:26