ILIAS  release_8 Revision v8.24
class.ilChatroomSmilies.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
28{
32 private static function _insertDefaultValues(): void
33 {
34 global $DIC;
35
37 $ilDB = $DIC->database();
38
39 $values = [
40 ["icon_smile.gif", ":)\n:-)\n:smile:"],
41 ["icon_wink.gif", ";)\n;-)\n:wink:"],
42 ["icon_laugh.gif", ":D\n:-D\n:laugh:\n:grin:\n:biggrin:"],
43 ["icon_sad.gif", ":(\n:-(\n:sad:"],
44 ["icon_shocked.gif", ":o\n:-o\n:shocked:"],
45 ["icon_tongue.gif", ":p\n:-p\n:tongue:"],
46 ["icon_cool.gif", ":cool:"],
47 ["icon_eek.gif", ":eek:"],
48 ["icon_angry.gif", ":||\n:-||\n:angry:"],
49 ["icon_flush.gif", ":flush:"],
50 ["icon_idea.gif", ":idea:"],
51 ["icon_thumbup.gif", ":thumbup:"],
52 ["icon_thumbdown.gif", ":thumbdown:"],
53 ];
54
55 $stmt = $ilDB->prepareManip(
56 'INSERT INTO chatroom_smilies (smiley_id, smiley_keywords, smiley_path) VALUES (?, ?, ?)',
57 ['integer', 'text', 'text']
58 );
59
60 foreach ($values as $val) {
61 $row = [
62 $ilDB->nextId('chatroom_smilies'),
63 $val[1],
64 $val[0]
65 ];
66 $stmt->execute($row);
67 }
68 }
69
76 public static function _checkSetup(): bool
77 {
78 global $DIC;
79 $main_tpl = $DIC->ui()->mainTemplate();
80
82 $lng = $DIC->language();
83
85
86 if (!is_dir($path)) {
87 $main_tpl->setOnScreenMessage('info', $lng->txt('chatroom_smilies_dir_not_exists'));
89
90 if (!is_dir($path)) {
91 $main_tpl->setOnScreenMessage('failure', $lng->txt('chatroom_smilies_dir_not_available'));
92 return false;
93 }
94
95 $smilies = [
96 "icon_smile.gif",
97 "icon_wink.gif",
98 "icon_laugh.gif",
99 "icon_sad.gif",
100 "icon_shocked.gif",
101 "icon_tongue.gif",
102 "icon_cool.gif",
103 "icon_eek.gif",
104 "icon_angry.gif",
105 "icon_flush.gif",
106 "icon_idea.gif",
107 "icon_thumbup.gif",
108 "icon_thumbdown.gif",
109 ];
110
111 foreach ($smilies as $smiley) {
112 copy("templates/default/images/emoticons/$smiley", $path . "/$smiley");
113 }
114
115 self::_insertDefaultValues();
116 $main_tpl->setOnScreenMessage('success', $lng->txt('chatroom_smilies_initialized'));
117 }
118
119 if (!is_writable($path)) {
120 $main_tpl->setOnScreenMessage('info', $lng->txt('chatroom_smilies_dir_not_writable'));
121 }
122
123 return true;
124 }
125
126 public static function _getSmileyDir(): string
127 {
128 return ilFileUtils::getWebspaceDir() . '/chatroom/smilies';
129 }
130
134 public static function _getSmilies(): array
135 {
136 global $DIC;
137
139 $ilDB = $DIC->database();
140
141 $res = $ilDB->query("SELECT smiley_id, smiley_keywords, smiley_path FROM chatroom_smilies");
142 $result = [];
143
144 while ($row = $ilDB->fetchAssoc($res)) {
145 $result[] = [
146 'smiley_id' => (int) $row['smiley_id'],
147 'smiley_keywords' => $row['smiley_keywords'],
148 'smiley_path' => $row['smiley_path'],
149 'smiley_fullpath' => ilFileUtils::getWebspaceDir() . '/chatroom/smilies/' . $row['smiley_path']
150 ];
151 }
152
153 return $result;
154 }
155
159 public static function _deleteMultipleSmilies(array $ids = []): void
160 {
161 global $DIC;
162
164 $ilDB = $DIC->database();
165
166 $smilies = self::_getSmiliesById($ids);
167
168 if ($smilies === []) {
169 return;
170 }
171
172 $sql_parts = [];
173
174 foreach ($smilies as $s) {
175 unlink($s['smiley_fullpath']);
176 $sql_parts[] = 'smiley_id = ' . $ilDB->quote($s['smiley_id'], 'integer');
177 }
178
179 $ilDB->manipulate('DELETE FROM chatroom_smilies WHERE ' . implode(' OR ', $sql_parts));
180 }
181
186 public static function _getSmiliesById(array $ids = []): array
187 {
188 global $DIC;
189
191 $ilDB = $DIC->database();
192
193 if ($ids === []) {
194 return [];
195 }
196
197 $sql = 'SELECT smiley_id, smiley_keywords, smiley_path FROM chatroom_smilies WHERE ';
198
199 $sql_parts = [];
200 foreach ($ids as $id) {
201 $sql_parts[] = "smiley_id = " . $ilDB->quote($id, "integer");
202 }
203
204 $sql .= implode(" OR ", $sql_parts);
205 $res = $ilDB->query($sql);
206 $result = [];
207
208 while ($row = $ilDB->fetchAssoc($res)) {
209 $result[] = [
210 'smiley_id' => (int) $row['smiley_id'],
211 'smiley_keywords' => $row['smiley_keywords'],
212 'smiley_path' => $row['smiley_path'],
213 'smiley_fullpath' => ilFileUtils::getWebspaceDir() . '/chatroom/smilies/' . $row['smiley_path']
214 ];
215 }
216
217 return $result;
218 }
219
225 public static function _updateSmiley(array $data): void
226 {
227 global $DIC;
228
230 $ilDB = $DIC->database();
231
232 $ilDB->manipulateF(
233 'UPDATE chatroom_smilies SET smiley_keywords = %s WHERE smiley_id = %s',
234 ['text', 'integer'],
235 [$data['smiley_keywords'], $data['smiley_id']]
236 );
237
238 if (isset($data["smiley_path"])) {
239 $sm = self::_getSmiley($data["smiley_id"]);
240 unlink($sm["smiley_fullpath"]);
241 $ilDB->manipulateF(
242 'UPDATE chatroom_smilies SET smiley_path = %s WHERE smiley_id = %s',
243 ['text', 'integer'],
244 [$data['smiley_path'], $data['smiley_id']]
245 );
246 }
247 }
248
253 public static function _getSmiley(int $a_id): array
254 {
255 global $DIC;
256
258 $ilDB = $DIC->database();
259
260 $res = $ilDB->queryF(
261 'SELECT smiley_id, smiley_keywords, smiley_path FROM chatroom_smilies WHERE smiley_id = %s ',
262 ['integer'],
263 [$a_id]
264 );
265
266 if ($row = $ilDB->fetchAssoc($res)) {
267 return [
268 'smiley_id' => (int) $row['smiley_id'],
269 'smiley_keywords' => $row['smiley_keywords'],
270 'smiley_path' => $row['smiley_path'],
271 'smiley_fullpath' => ilFileUtils::getWebspaceDir() . '/chatroom/smilies/' . $row['smiley_path']
272 ];
273 }
274
275 throw new OutOfBoundsException("Smiley with id $a_id not found");
276 }
277
278 public static function getSmiliesBasePath(): string
279 {
280 return 'chatroom/smilies';
281 }
282
283 public static function _deleteSmiley(int $a_id): void
284 {
285 global $DIC;
286
288 $ilDB = $DIC->database();
289
290 try {
291 $smiley = self::_getSmiley($a_id);
292 $path = ilFileUtils::getWebspaceDir() . '/chatroom/smilies/' . $smiley['smiley_path'];
293
294 if (is_file($path)) {
295 unlink($path);
296 }
297
298 $ilDB->manipulateF(
299 'DELETE FROM chatroom_smilies WHERE smiley_id = %s',
300 ['integer'],
301 [$a_id]
302 );
303 } catch (Exception $e) {
304 }
305 }
306
312 public static function _storeSmiley(string $keywords, string $path): void
313 {
314 global $DIC;
315
317 $ilDB = $DIC->database();
318
319 $stmt = $ilDB->prepareManip(
320 'INSERT INTO chatroom_smilies (smiley_id, smiley_keywords, smiley_path) VALUES (?, ?, ?)',
321 ['integer', 'text', 'text']
322 );
323 $ilDB->execute($stmt, [
324 $ilDB->nextId('chatroom_smilies'),
325 $keywords,
326 $path
327 ]);
328 }
329
335 public static function _prepareKeywords(string $words): array
336 {
337 return array_filter(array_map('trim', explode("\n", $words)));
338 }
339}
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
Definition: plugin.php:23
Class ilChatroomSmilies.
static _prepareKeywords(string $words)
Trims given keywords and returns them in one array.
static makeDirParents(string $a_dir)
Create a new directory and all parent directories.
static getWebspaceDir(string $mode="filesystem")
get webspace directory
global $DIC
Definition: feed.php:28
$path
Definition: ltiservices.php:32
$res
Definition: ltiservices.php:69
$lng