ILIAS  release_7 Revision v7.30-3-g800a261c036
All Data Structures Namespaces Files Functions Variables Modules Pages
class.ilObjChatroomAccess.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (c) 1998-2012 ILIAS open source, Extended GPL, see docs/LICENSE */
3 
4 require_once 'Services/Object/classes/class.ilObjectAccess.php';
5 require_once 'Services/WebAccessChecker/interfaces/interface.ilWACCheckingClass.php';
6 
14 {
18  private static $chat_enabled = null;
19 
23  public static function _getCommands()
24  {
25  $commands = array();
26  $commands[] = array("permission" => "read", "cmd" => "view", "lang_var" => "enter", "default" => true);
27  $commands[] = array("permission" => "write", "cmd" => "settings-general", "lang_var" => "settings");
28 
29  // alex 3 Oct 2012: this leads to a blank screen, i guess it is a copy/paste bug from files
30  //$commands[] = array("permission" => "write", "cmd" => "versions", "lang_var" => "versions");
31 
32  return $commands;
33  }
34 
38  public static function _checkGoto($a_target)
39  {
40  if (is_string($a_target)) {
41  $t_arr = explode("_", $a_target);
42 
43  if (count($t_arr) < 2 || $t_arr[0] != 'chtr' || ((int) $t_arr[1]) <= 0) {
44  return false;
45  }
46 
47  if (
48  ilChatroom::checkUserPermissions('visible', $t_arr[1], false) ||
49  ilChatroom::checkUserPermissions('read', $t_arr[1], false)
50  ) {
51  return true;
52  }
53  }
54 
55  return false;
56  }
57 
61  public function _checkAccess($a_cmd, $a_permission, $a_ref_id, $a_obj_id, $a_user_id = "")
62  {
63  if ($a_user_id == '') {
64  $a_user_id = $GLOBALS['DIC']->user()->getId();
65  }
66 
67  return self::checkRoomAccess($a_permission, $a_ref_id, $a_obj_id, $a_user_id);
68  }
69 
70 
71  public static function checkRoomAccess($a_permission, $a_ref_id, $a_obj_id, $a_user_id)
72  {
73  if (self::$chat_enabled === null) {
74  $chatSetting = new ilSetting('chatroom');
75  self::$chat_enabled = (boolean) $chatSetting->get('chat_enabled');
76  }
77 
78  if ($GLOBALS['DIC']->rbac()->system()->checkAccessOfUser($a_user_id, 'write', $a_ref_id)) {
79  return true;
80  }
81 
82  switch ($a_permission) {
83  case 'visible':
84  $visible = null;
85 
86  $active = self::isActivated($a_ref_id, $a_obj_id, $visible);
87  $hasWriteAccess = $GLOBALS['DIC']->rbac()->system()->checkAccessOfUser($a_user_id, 'write', $a_ref_id);
88 
89  if (!$active) {
90  $GLOBALS['DIC']->access()->addInfoItem(IL_NO_OBJECT_ACCESS, $GLOBALS['DIC']->language()->txt('offline'));
91  }
92 
93  if (!$hasWriteAccess && !$active && !$visible) {
94  return false;
95  }
96  break;
97 
98  case 'read':
99  $hasWriteAccess = $GLOBALS['DIC']->rbac()->system()->checkAccessOfUser($a_user_id, 'write', $a_ref_id);
100  if ($hasWriteAccess) {
101  return true;
102  }
103 
104  $active = self::isActivated($a_ref_id, $a_obj_id);
105  if (!$active) {
106  $GLOBALS['DIC']->access()->addInfoItem(IL_NO_OBJECT_ACCESS, $GLOBALS['DIC']->language()->txt('offline'));
107  return false;
108  }
109  break;
110  }
111 
112  return self::$chat_enabled;
113  }
114 
121  public static function isActivated($refId, $objId, &$a_visible_flag = null)
122  {
123  if (!self::lookupOnline($objId)) {
124  $a_visible_flag = false;
125  return false;
126  }
127 
128  $a_visible_flag = true;
129 
130  require_once 'Services/Object/classes/class.ilObjectActivation.php';
132  switch ($item['timing_type']) {
134  if (time() < $item['timing_start'] || time() > $item['timing_end']) {
135  $a_visible_flag = $item['visible'];
136  return false;
137  }
138 
139  // no break
140  default:
141  return true;
142  }
143  }
144 
149  public static function lookupOnline($a_obj_id)
150  {
151  global $DIC;
152 
153  $res = $DIC->database()->query("SELECT online_status FROM chatroom_settings WHERE object_id = " . $DIC->database()->quote($a_obj_id, 'integer'));
154  $row = $DIC->database()->fetchAssoc($res);
155 
156  return (bool) $row['online_status'];
157  }
158 
162  public function canBeDelivered(ilWACPath $ilWACPath)
163  {
164  if (preg_match("/chatroom\\/smilies\\//ui", $ilWACPath->getPath())) {
165  return true;
166  }
167 
168  return false;
169  }
170 }
static _checkGoto($a_target)
{}
const IL_NO_OBJECT_ACCESS
static getItem($a_ref_id)
Get item data.
$objId
Definition: xapitoken.php:39
_checkAccess($a_cmd, $a_permission, $a_ref_id, $a_obj_id, $a_user_id="")
{}
$refId
Definition: xapitoken.php:40
Class ilWACPath.
static checkUserPermissions($permissions, $ref_id, $send_info=true)
Checks user permissions by given array and ref_id.
Access class for chatroom objects.
foreach($_POST as $key=> $value) $res
global $DIC
Definition: goto.php:24
canBeDelivered(ilWACPath $ilWACPath)
bool
if(!defined('PATH_SEPARATOR')) $GLOBALS['_PEAR_default_error_mode']
Definition: PEAR.php:64
Class ilWACCheckingClass.
static isActivated($refId, $objId, &$a_visible_flag=null)
language()
Definition: language.php:2
static checkRoomAccess($a_permission, $a_ref_id, $a_obj_id, $a_user_id)