ILIAS  release_8 Revision v8.19
All Data Structures Namespaces Files Functions Variables Modules Pages
class.ilChatroomSmilies.php
Go to the documentation of this file.
1 <?php
2 
19 declare(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 
84  $path = self::_getSmileyDir();
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 }
static getWebspaceDir(string $mode="filesystem")
get webspace directory
$res
Definition: ltiservices.php:69
$lng
static makeDirParents(string $a_dir)
Create a new directory and all parent directories.
$path
Definition: ltiservices.php:32
global $DIC
Definition: feed.php:28
static _prepareKeywords(string $words)
Trims given keywords and returns them in one array.
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
Definition: plugin.php:23
Class ilChatroomSmilies.