ILIAS  release_5-3 Revision v5.3.23-19-g915713cf615
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  global $DIC;
41 
42  if (is_string($a_target)) {
43  $t_arr = explode("_", $a_target);
44 
45  if (count($t_arr) < 2 || $t_arr[0] != "chtr" || ((int) $t_arr[1]) <= 0) {
46  return false;
47  }
48 
49  if ($DIC->rbac()->system()->checkAccess("read", $t_arr[1])) {
50  return true;
51  }
52  }
53 
54  return false;
55  }
56 
60  public function _checkAccess($a_cmd, $a_permission, $a_ref_id, $a_obj_id, $a_user_id = "")
61  {
62  if ($a_user_id == '') {
63  $a_user_id = $GLOBALS['DIC']->user()->getId();
64  }
65 
66  return self::checkRoomAccess($a_permission, $a_ref_id, $a_obj_id, $a_user_id);
67  }
68 
69 
70  public static function checkRoomAccess($a_permission, $a_ref_id, $a_obj_id, $a_user_id)
71  {
72  if (self::$chat_enabled === null) {
73  $chatSetting = new ilSetting('chatroom');
74  self::$chat_enabled = (boolean) $chatSetting->get('chat_enabled');
75  }
76 
77  if ($GLOBALS['DIC']->rbac()->system()->checkAccessOfUser($a_user_id, 'write', $a_ref_id)) {
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  $hasWriteAccess = $GLOBALS['DIC']->rbac()->system()->checkAccessOfUser($a_user_id, 'write', $a_ref_id);
87 
88  if (!$active) {
89  $GLOBALS['DIC']->access()->addInfoItem(IL_NO_OBJECT_ACCESS, $GLOBALS['DIC']->language()->txt('offline'));
90  }
91 
92  if (!$hasWriteAccess && !$active && !$visible) {
93  return false;
94  }
95  break;
96 
97  case 'read':
98  $hasWriteAccess = $GLOBALS['DIC']->rbac()->system()->checkAccessOfUser($a_user_id, 'write', $a_ref_id);
99  if ($hasWriteAccess) {
100  return true;
101  }
102 
103  $active = self::isActivated($a_ref_id, $a_obj_id);
104  if (!$active) {
105  $GLOBALS['DIC']->access()->addInfoItem(IL_NO_OBJECT_ACCESS, $GLOBALS['DIC']->language()->txt('offline'));
106  return false;
107  }
108  break;
109  }
110 
111  return self::$chat_enabled;
112  }
113 
120  public static function isActivated($refId, $objId, &$a_visible_flag = null)
121  {
122  if (!self::lookupOnline($objId)) {
123  $a_visible_flag = false;
124  return false;
125  }
126 
127  $a_visible_flag = true;
128 
129  require_once 'Services/Object/classes/class.ilObjectActivation.php';
130  $item = ilObjectActivation::getItem($refId);
131  switch ($item['timing_type']) {
133  if (time() < $item['timing_start'] || time() > $item['timing_end']) {
134  $a_visible_flag = $item['visible'];
135  return false;
136  }
137 
138  // no break
139  default:
140  return true;
141  }
142  }
143 
148  public static function lookupOnline($a_obj_id)
149  {
150  global $DIC;
151 
152  $res = $DIC->database()->query("SELECT online_status FROM chatroom_settings WHERE object_id = " . $DIC->database()->quote($a_obj_id, 'integer'));
153  $row = $DIC->database()->fetchAssoc($res);
154 
155  return (bool) $row['online_status'];
156  }
157 
161  public function canBeDelivered(ilWACPath $ilWACPath)
162  {
163  if (preg_match("/chatroom\\/smilies\\//ui", $ilWACPath->getPath())) {
164  return true;
165  }
166 
167  return false;
168  }
169 }
global $DIC
Definition: saml.php:7
static _checkGoto($a_target)
{}
const IL_NO_OBJECT_ACCESS
static getItem($a_ref_id)
Get item data.
$GLOBALS['loaded']
Global hash that tracks already loaded includes.
_checkAccess($a_cmd, $a_permission, $a_ref_id, $a_obj_id, $a_user_id="")
{}
Class ilWACPath.
Access class for chatroom objects.
foreach($_POST as $key=> $value) $res
canBeDelivered(ilWACPath $ilWACPath)
bool
Class ilWACCheckingClass.
Create styles array
The data for the language used.
Class ilObjectAccess.
Add data(end) time
Method that wraps PHPs time in order to allow simulations with the workflow.
static isActivated($refId, $objId, &$a_visible_flag=null)
static checkRoomAccess($a_permission, $a_ref_id, $a_obj_id, $a_user_id)