ILIAS  release_8 Revision v8.19
All Data Structures Namespaces Files Functions Variables Modules Pages
class.ilObjChatroomAccess.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
28 {
29  private static ?bool $chat_enabled = null;
30 
31  public static function _getCommands(): array
32  {
33  $commands = [];
34  $commands[] = ['permission' => 'read', 'cmd' => 'view', 'lang_var' => 'enter', 'default' => true];
35  $commands[] = ['permission' => 'write', 'cmd' => 'settings-general', 'lang_var' => 'settings'];
36 
37  return $commands;
38  }
39 
40  public static function _checkGoto(string $target): bool
41  {
42  $t_arr = explode('_', $target);
43 
44  if (count($t_arr) < 2 || $t_arr[0] !== 'chtr' || ((int) $t_arr[1]) <= 0) {
45  return false;
46  }
47 
48  if (
49  ilChatroom::checkUserPermissions('visible', (int) $t_arr[1], false) ||
50  ilChatroom::checkUserPermissions('read', (int) $t_arr[1], false)
51  ) {
52  return true;
53  }
54 
55  return false;
56  }
57 
58  public function _checkAccess(string $cmd, string $permission, int $ref_id, int $obj_id, ?int $user_id = null): bool
59  {
60  if (!$user_id) {
61  $user_id = $GLOBALS['DIC']->user()->getId();
62  }
63 
64  return self::checkRoomAccess($permission, $ref_id, $obj_id, (int) $user_id);
65  }
66 
67  private static function checkRoomAccess(string $a_permission, int $a_ref_id, int $a_obj_id, int $a_user_id): bool
68  {
69  global $DIC;
70 
71  if (self::$chat_enabled === null) {
72  $chatSetting = new ilSetting('chatroom');
73  self::$chat_enabled = (bool) $chatSetting->get('chat_enabled', '0');
74  }
75 
76  $hasWriteAccess = $DIC->rbac()->system()->checkAccessOfUser($a_user_id, 'write', $a_ref_id);
77  if ($hasWriteAccess) {
78  return true;
79  }
80 
81  switch ($a_permission) {
82  case 'visible':
83  $visible = null;
84 
85  $active = self::isActivated($a_ref_id, $a_obj_id, $visible);
86 
87  if (!$active) {
88  $DIC->access()->addInfoItem(
90  $DIC->language()->txt('offline')
91  );
92  }
93 
94  if ($active === false && $visible === false) {
95  return false;
96  }
97  break;
98 
99  case 'read':
100  $active = self::isActivated($a_ref_id, $a_obj_id);
101  if (!$active) {
102  $DIC->access()->addInfoItem(
104  $DIC->language()->txt('offline')
105  );
106  return false;
107  }
108  break;
109  }
110 
111  return self::$chat_enabled;
112  }
113 
114  public static function isActivated(int $refId, int $objId, bool &$a_visible_flag = null): bool
115  {
116  if (!self::lookupOnline($objId)) {
117  $a_visible_flag = false;
118  return false;
119  }
120 
121  $a_visible_flag = true;
122 
123  $item = ilObjectActivation::getItem($refId);
124  switch ($item['timing_type']) {
126  if (time() < $item['timing_start'] || time() > $item['timing_end']) {
127  $a_visible_flag = (bool) $item['visible'];
128  return false;
129  }
130  }
131 
132  return true;
133  }
134 
135  public static function lookupOnline(int $a_obj_id): bool
136  {
137  global $DIC;
138 
139  $res = $DIC->database()->query(
140  'SELECT online_status FROM chatroom_settings WHERE object_id = ' .
141  $DIC->database()->quote($a_obj_id, 'integer')
142  );
143  $row = $DIC->database()->fetchAssoc($res);
144 
145  return (bool) ($row['online_status'] ?? false);
146  }
147 
148  public function canBeDelivered(ilWACPath $ilWACPath): bool
149  {
150  if (preg_match("/chatroom\\/smilies\\//ui", $ilWACPath->getPath())) {
151  return true;
152  }
153 
154  return false;
155  }
156 }
static checkUserPermissions($permissions, int $ref_id, bool $send_info=true)
Checks user permissions by given array and ref_id.
static lookupOnline(int $a_obj_id)
$res
Definition: ltiservices.php:69
static checkRoomAccess(string $a_permission, int $a_ref_id, int $a_obj_id, int $a_user_id)
static _checkGoto(string $target)
$objId
Definition: xapitoken.php:57
$refId
Definition: xapitoken.php:58
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
_checkAccess(string $cmd, string $permission, int $ref_id, int $obj_id, ?int $user_id=null)
global $DIC
Definition: feed.php:28
$ref_id
Definition: ltiauth.php:67
Access class for chatroom objects.
static isActivated(int $refId, int $objId, bool &$a_visible_flag=null)
canBeDelivered(ilWACPath $ilWACPath)
if(!defined('PATH_SEPARATOR')) $GLOBALS['_PEAR_default_error_mode']
Definition: PEAR.php:64
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static getItem(int $ref_id)