ILIAS  release_8 Revision v8.24
class.ilObjChatroomAccess.php
Go to the documentation of this file.
1<?php
2
19declare(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
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}
if(!defined('PATH_SEPARATOR')) $GLOBALS['_PEAR_default_error_mode']
Definition: PEAR.php:64
static checkUserPermissions($permissions, int $ref_id, bool $send_info=true)
Checks user permissions by given array and ref_id.
Access class for chatroom objects.
static checkRoomAccess(string $a_permission, int $a_ref_id, int $a_obj_id, int $a_user_id)
static isActivated(int $refId, int $objId, bool &$a_visible_flag=null)
static lookupOnline(int $a_obj_id)
_checkAccess(string $cmd, string $permission, int $ref_id, int $obj_id, ?int $user_id=null)
Checks whether a user may invoke a command or not (this method is called by ilAccessHandler::checkAcc...
canBeDelivered(ilWACPath $ilWACPath)
static _checkGoto(string $target)
check whether goto script will succeed
static _getCommands()
get commands
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static getItem(int $ref_id)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
global $DIC
Definition: feed.php:28
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
$ref_id
Definition: ltiauth.php:67
$res
Definition: ltiservices.php:69
$objId
Definition: xapitoken.php:57
$refId
Definition: xapitoken.php:58