ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
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.
_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.
$row
Class ilObjectAccess.
static isActivated($refId, $objId, &$a_visible_flag=null)
static checkRoomAccess($a_permission, $a_ref_id, $a_obj_id, $a_user_id)
$GLOBALS['JPEG_Segment_Names']
Global Variable: XMP_tag_captions.