ILIAS  release_5-1 Revision 5.0.0-5477-g43f3e3fab5f
class.ilChatroomTabGUIFactory.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2012 ILIAS open source, Extended GPL, see docs/LICENSE */
3
12{
16 private $gui;
17
21 private $lng;
22
29 public function __construct(ilObjectGUI $gui)
30 {
35 global $lng;
36
37 $this->gui = $gui;
38 $this->lng = $lng;
39 }
40
47 private function activateTab(array $commandParts, $config)
48 {
52 global $ilTabs;
53
54 if(count($commandParts) > 1)
55 {
56 if(isset($config[$commandParts[0]]))
57 {
58 $ilTabs->activateTab($commandParts[0]);
59
60 if(isset($config[$commandParts[0]]['subtabs'][$commandParts[1]]))
61 {
62 $ilTabs->activateSubTab($commandParts[1]);
63 }
64 }
65 }
66 else if(count($commandParts) == 1)
67 {
68 $ilTabs->activateTab($commandParts[0]);
69 }
70 }
71
77 public function getAdminTabsForCommand($command)
78 {
84 global $ilTabs, $ilCtrl, $ilDB;
85
86 $command = $this->convertLowerCamelCaseToUnderscoreCaseConversion($command);
87 $stopCommands = array('create');
88
89 if(in_array($command, $stopCommands))
90 {
91 return;
92 }
93
94 $settings = new ilSetting('chatroom');
95 $public_room_ref = $settings->get('public_room_ref');
96
97 $query = 'SELECT ref_id FROM object_reference INNER JOIN object_data ON object_data.obj_id = object_reference.obj_id WHERE type = ' . $ilDB->quote('chta', 'text');
98 $rset = $ilDB->query($query);
99 $data = $ilDB->fetchAssoc($rset);
100 $admin_ref = $data['ref_id'];
101
102 $ilCtrl->setParameterByClass('ilObjChatroomAdminGUI', 'ref_id', $admin_ref);
103
104 $config = array(
105 'view' => array(
106 'lng' => 'settings',
107 'link' => $ilCtrl->getLinkTargetByClass('ilObjChatroomAdminGUI', 'view-clientsettings'),
108 'permission' => 'read',
109 'subtabs' => array(
110 'clientsettings' => array(
111 'lng' => 'client_settings',
112 'link' => $ilCtrl->getLinkTargetByClass('ilObjChatroomAdminGUI', 'view-clientsettings'),
113 'permission' => 'read'
114 ),
115 'serversettings' => array(
116 'lng' => 'server_settings',
117 'link' => $ilCtrl->getLinkTargetByClass('ilObjChatroomAdminGUI', 'view-serversettings'),
118 'permission' => 'read'
119 )
120 )
121 ),
122 'smiley' => array(
123 'lng' => 'smiley',
124 'link' => $ilCtrl->getLinkTargetByClass('ilObjChatroomAdminGUI', 'smiley'),
125 'permission' => 'read'
126 )
127 );
128 $ilCtrl->setParameterByClass('ilObjChatroomGUI', 'ref_id', $public_room_ref);
129
130 $config['settings'] = array(
131 'lng' => 'public_chat_settings',
132 'link' => $ilCtrl->getLinkTargetByClass('ilObjChatroomGUI', 'settings-general'),
133 'permission' => 'write',
134 'subtabs' => array(
135 'settings' => array(
136 'lng' => 'settings',
137 'link' => $ilCtrl->getLinkTarget($this->gui, 'settings-general'),
138 'permission' => 'write'
139 ),
140 'ban' => array(
141 'lng' => 'bans',
142 'link' => $ilCtrl->getLinkTargetByClass('ilObjChatroomGUI', 'ban-show'),
143 'permission' => 'moderate'
144 )
145 )
146 );
147
148 $ilCtrl->setParameterByClass('ilPermissionGUI', 'ref_id', $public_room_ref);
149 $config['perm'] = array(
150 'lng' => 'public_chat_permissions',
151 'link' => $ilCtrl->getLinkTargetByClass('ilPermissionGUI', 'perm'),
152 'permission' => 'write',
153 );
154 $ilCtrl->clearParametersByClass('ilPermissionGUI');
155
156 $ilCtrl->setParameterByClass('ilPermissionGUI', 'ref_id', $admin_ref);
157 $config['perm_settings'] = array(
158 'lng' => 'perm_settings',
159 'link' => $ilCtrl->getLinkTargetByClass('ilpermissiongui', 'perm'),
160 'permission' => 'write',
161 );
162 $ilCtrl->clearParametersByClass('ilPermissionGUI');
163
164 $commandParts = explode('_', $command, 2);
165 if($command == 'ban_show')
166 {
167 $commandParts[0] = 'settings';
168 $commandParts[1] = 'ban';
169 }
170 else if($command == 'settings_general')
171 {
172 $commandParts[0] = 'settings';
173 $commandParts[1] = 'settings';
174 }
175 else if($command == 'view_savesettings')
176 {
177 $commandParts[0] = 'view';
178 $commandParts[1] = 'serversettings';
179 }
180 else if($command == 'view_saveclientsettings')
181 {
182 $commandParts[0] = 'view';
183 $commandParts[1] = 'clientsettings';
184 }
185 else if($ilCtrl->getCmdClass() == 'ilpermissiongui' && $_REQUEST['ref_id'] == $public_room_ref)
186 {
187 $commandParts[0] = 'perm';
188 $ilCtrl->setParameterByClass('ilPermissionGUI', 'ref_id', $public_room_ref);
189 }
190 else if($ilCtrl->getCmdClass() == 'ilpermissiongui' && $_REQUEST['ref_id'] == $admin_ref)
191 {
192 $commandParts[0] = 'perm_settings';
193 $ilCtrl->setParameterByClass('ilPermissionGUI', 'ref_id', $admin_ref);
194 }
195
196 $this->buildTabs($ilTabs, $config, $commandParts);
197 $this->activateTab($commandParts, $config);
198 }
199
205 public function getTabsForCommand($command)
206 {
211 global $ilTabs, $ilCtrl;
212
213 $command = $this->convertLowerCamelCaseToUnderscoreCaseConversion($command);
214 $stopCommands = array('create');
215
216 if(in_array($command, $stopCommands))
217 {
218 return;
219 }
220
221 require_once 'Modules/Chatroom/classes/class.ilChatroom.php';
222 $room = ilChatroom::byObjectId($this->gui->object->getId());
223
224 $config = array(
225 'view' => array(
226 'lng' => 'view',
227 'link' => $ilCtrl->getLinkTarget($this->gui, 'view'),
228 'permission' => 'read'
229 ),
230 'history' => array(
231 'lng' => 'history',
232 'link' => $ilCtrl->getLinkTarget($this->gui, 'history-byday'),
233 'permission' => 'read',
234 'enabled' => $room ? $room->getSetting('enable_history') : false,
235 'subtabs' => array(
236 'byday' => array(
237 'lng' => 'history_by_day',
238 'link' => $ilCtrl->getLinkTarget($this->gui, 'history-byday'),
239 'permission' => 'read'
240 ),
241 'bysession' => array(
242 'lng' => 'history_by_session',
243 'link' => $ilCtrl->getLinkTarget($this->gui, 'history-bysession'),
244 'permission' => 'read'
245 )
246 )
247 ),
248 'info' => array(
249 'lng' => 'info_short',
250 'link' => $ilCtrl->getLinkTargetByClass(array(get_class($this->gui), 'ilinfoscreengui'), 'info'),
251 'permission' => 'read'
252 ),
253 'settings' => array(
254 'lng' => 'settings',
255 'link' => $ilCtrl->getLinkTarget($this->gui, 'settings-general'),
256 'permission' => 'write',
257 'subtabs' => array(
258 'general' => array(
259 'lng' => 'settings_general',
260 'link' => $ilCtrl->getLinkTarget($this->gui, 'settings-general'),
261 'permission' => 'write'
262 )
263 )
264 ),
265 'ban' => array(
266 'lng' => 'bans',
267 'link' => $ilCtrl->getLinkTarget($this->gui, 'ban-show'),
268 'permission' => 'moderate',
269 'subtabs' => array(
270 'show' => array(
271 'lng' => 'bans_table',
272 'link' => $ilCtrl->getLinkTarget($this->gui, 'ban-show'),
273 'permission' => 'moderate'
274 )
275 )
276 ),
277 'perm' => array(
278 'lng' => 'permissions',
279 'link' => $ilCtrl->getLinkTargetByClass('ilpermissiongui', 'perm'),
280 'permission' => 'write'
281 )
282 );
283
284 $commandParts = explode('_', $command, 2);
285
286 if($ilCtrl->getCmdClass() == 'ilpermissiongui')
287 {
288 $commandParts[0] = 'perm';
289 }
290
291 $this->buildTabs($ilTabs, $config, $commandParts);
292 $this->activateTab($commandParts, $config);
293 }
294
302 private function buildTabs(ilTabsGUI $tabs, $config, $command)
303 {
307 global $rbacsystem;
308
309 require_once 'Modules/Chatroom/classes/class.ilChatroom.php';
310 foreach($config as $id => $tabDefinition)
311 {
312 if(!ilChatroom::checkUserPermissions($tabDefinition['permission'], $this->gui->getRefId(), false))
313 {
314 continue;
315 }
316 else if(isset($tabDefinition['enabled']) && !$tabDefinition['enabled'])
317 {
318 continue;
319 }
320
321 $tabs->addTab($id, $this->getLabel($tabDefinition, $id), $tabDefinition['link']);
322
323 if($command[0] == $id && isset($tabDefinition['subtabs']) &&
324 is_array($tabDefinition['subtabs'])
325 )
326 {
327 foreach($tabDefinition['subtabs'] as $subid => $subTabDefinition)
328 {
329 if(!$rbacsystem->checkAccess($subTabDefinition['permission'], $this->gui->getRefId()))
330 {
331 continue;
332 }
333 else if(isset($subTabDefinition['enabled']) && !$subTabDefinition['enabled'])
334 {
335 continue;
336 }
337 $tabs->addSubTab(
338 $subid, $this->getLabel($subTabDefinition, $subid),
339 $subTabDefinition['link']
340 );
341 }
342 }
343 }
344 }
345
355 private function getLabel($tabDefinition, $id)
356 {
357 if(isset($tabDefinition['lng']))
358 return $this->lng->txt($tabDefinition['lng']);
359 else
360 return $this->lng->txt($id);
361 }
362
369 {
370 return strtolower(preg_replace('/(.*?)-(.*?)/', '$1_$2', $value));
371 }
372
379 public static function convertUnderscoreCaseToLowerCamelCaseConversion($value, $upper_case_first = FALSE)
380 {
381 $tokens = (array)explode('_', $value);
382 $value = '';
383
384 foreach($tokens as $token)
385 {
386 $value .= ucfirst($token);
387 }
388
389 if($upper_case_first === FALSE)
390 {
391 $value = strtolower($value, 0, 1) . substr($value, 1);
392 }
393
394 return $value;
395 }
396}
Class ilChatroomTabGUIFactory.
static convertUnderscoreCaseToLowerCamelCaseConversion($value, $upper_case_first=FALSE)
Convert a value given in underscore case conversion to lower camel case conversion (e....
getLabel($tabDefinition, $id)
Returns label for tab by $tabDefinition or $id.
static convertLowerCamelCaseToUnderscoreCaseConversion($value)
Convert a value given in lower camel case conversion to underscore case conversion (e....
static byObjectId($object_id)
Returns ilChatroom object by given $object_id.
static checkUserPermissions($permissions, $ref_id, $send_info=true)
Checks user permissions by given array and ref_id.
Class ilObjectGUI Basic methods of all Output classes.
ILIAS Setting Class.
Tabs GUI.
addTab($a_id, $a_text, $a_link, $a_frame="")
Add a Tab.
addSubTab($a_id, $a_text, $a_link, $a_frame="")
Add a Subtab.
$data
global $ilCtrl
Definition: ilias.php:18
if($_REQUEST['ilias_path']) define('ILIAS_HTTP_PATH' $_REQUEST['ilias_path']
Definition: index.php:7
global $ilDB