ILIAS  release_5-1 Revision 5.0.0-5477-g43f3e3fab5f
class.ilObjGroupAccess.php
Go to the documentation of this file.
1<?php
2
3/* Copyright (c) 1998-2012 ILIAS open source, Extended GPL, see docs/LICENSE */
4
5include_once("./Services/Object/classes/class.ilObjectAccess.php");
6
16{
17 protected static $using_code = false;
30 function _checkAccess($a_cmd, $a_permission, $a_ref_id, $a_obj_id, $a_user_id = "")
31 {
32
33 global $ilUser, $lng, $rbacsystem, $ilAccess;
34
35 if ($a_user_id == "")
36 {
37 $a_user_id = $ilUser->getId();
38 }
39
40 switch ($a_cmd)
41 {
42 case "info":
43
44 include_once './Modules/Group/classes/class.ilGroupParticipants.php';
45 if(ilGroupParticipants::_isParticipant($a_ref_id,$a_user_id))
46 {
47 $ilAccess->addInfoItem(IL_STATUS_MESSAGE, $lng->txt("info_is_member"));
48 }
49 else
50 {
51 $ilAccess->addInfoItem(IL_STATUS_MESSAGE, $lng->txt("info_is_not_member"));
52 }
53 break;
54
55 case "join":
56
57 if(!self::_registrationEnabled($a_obj_id))
58 {
59 return false;
60 }
61
62 include_once './Modules/Group/classes/class.ilGroupWaitingList.php';
63 if(ilGroupWaitingList::_isOnList($ilUser->getId(), $a_obj_id))
64 {
65 return false;
66 }
67
68 include_once './Modules/Group/classes/class.ilGroupParticipants.php';
69 if(ilGroupParticipants::_isParticipant($a_ref_id,$a_user_id))
70 {
71 return false;
72 }
73 break;
74
75 case 'leave':
76
77 // Regular member
78 if($a_permission == 'leave')
79 {
80 include_once './Modules/Group/classes/class.ilObjGroup.php';
81 $limit = null;
82 if(!ilObjGroup::mayLeave($a_obj_id, $a_user_id, $limit))
83 {
84 $ilAccess->addInfoItem(IL_STATUS_MESSAGE,
85 sprintf($lng->txt("grp_cancellation_end_rbac_info"), ilDatePresentation::formatDate($limit)));
86 return false;
87 }
88
89 include_once './Modules/Group/classes/class.ilGroupParticipants.php';
90 if(!ilGroupParticipants::_isParticipant($a_ref_id, $a_user_id))
91 {
92 return false;
93 }
94 }
95 // Waiting list
96 if($a_permission == 'join')
97 {
98 include_once './Modules/Group/classes/class.ilGroupWaitingList.php';
99 if(!ilGroupWaitingList::_isOnList($ilUser->getId(), $a_obj_id))
100 {
101 return false;
102 }
103 }
104 break;
105
106 }
107
108 switch ($a_permission)
109 {
110 case 'leave':
111 include_once './Modules/Group/classes/class.ilObjGroup.php';
112 return ilObjGroup::mayLeave($a_obj_id, $a_user_id);
113 }
114 return true;
115 }
116
129 function _getCommands()
130 {
131 $commands = array();
132 $commands[] = array("permission" => "grp_linked", "cmd" => "", "lang_var" => "show", "default" => true);
133
134 include_once './Services/WebServices/FileManager/classes/class.ilFMSettings.php';
135 if(ilFMSettings::getInstance()->isEnabled())
136 {
137 $commands[] = array(
138 'permission' => 'read',
139 'cmd' => 'fileManagerLaunch',
140 'lang_var' => 'fm_start',
141 'enable_anonymous' => false
142 );
143 }
144
145 $commands[] = array("permission" => "join", "cmd" => "join", "lang_var" => "join");
146
147 // on waiting list
148 $commands[] = array('permission' => "join", "cmd" => "leave", "lang_var" => "leave_waiting_list");
149
150 // regualar users
151 $commands[] = array('permission' => "leave", "cmd" => "leave", "lang_var" => "grp_btn_unsubscribe");
152
153 include_once ('Services/WebDAV/classes/class.ilDAVActivationChecker.php');
155 {
156 include_once './Services/WebDAV/classes/class.ilDAVUtils.php';
157 if(ilDAVUtils::getInstance()->isLocalPasswordInstructionRequired())
158 {
159 $commands[] = array('permission' => 'read', 'cmd' => 'showPasswordInstruction', 'lang_var' => 'mount_webfolder', 'enable_anonymous' => 'false');
160 }
161 else
162 {
163 $commands[] = array("permission" => "read", "cmd" => "mount_webfolder", "lang_var" => "mount_webfolder", "enable_anonymous" => "false");
164 }
165 }
166
167 $commands[] = array("permission" => "write", "cmd" => "enableAdministrationPanel", "lang_var" => "edit_content");
168 $commands[] = array("permission" => "write", "cmd" => "edit", "lang_var" => "settings");
169
170 return $commands;
171 }
172
176 function _checkGoto($a_target)
177 {
178 global $ilAccess,$ilUser;
179
180 $t_arr = explode("_", $a_target);
181 // registration codes
182 if(substr($t_arr[2],0,5) == 'rcode' and $ilUser->getId() != ANONYMOUS_USER_ID)
183 {
184 self::$using_code = true;
185 return true;
186 }
187
188 if ($t_arr[0] != "grp" || ((int) $t_arr[1]) <= 0)
189 {
190 return false;
191 }
192
193 if ($ilAccess->checkAccess("read", "", $t_arr[1]) ||
194 $ilAccess->checkAccess("visible", "", $t_arr[1]))
195 {
196 return true;
197 }
198 return false;
199 }
200
206 public static function _registrationEnabled($a_obj_id)
207 {
208 global $ilDB;
209
210 $query = "SELECT * FROM grp_settings ".
211 "WHERE obj_id = ".$ilDB->quote($a_obj_id ,'integer')." ";
212
213 $res = $ilDB->query($query);
214
215 $enabled = $unlimited = false;
216 while($row = $res->fetchRow(DB_FETCHMODE_OBJECT))
217 {
218 $enabled = $row->registration_enabled;
219 $unlimited = $row->registration_unlimited;
220 $start = $row->registration_start;
221 $end = $row->registration_end;
222 }
223
224 if(!$enabled)
225 {
226 return false;
227 }
228 if($unlimited)
229 {
230 return true;
231 }
232
233 if(!$unlimited)
234 {
235 $start = new ilDateTime($start,IL_CAL_DATETIME);
236 $end = new ilDateTime($end,IL_CAL_DATETIME);
237 $time = new ilDateTime(time(),IL_CAL_UNIX);
238
239 return ilDateTime::_after($time, $start) and ilDateTime::_before($time,$end);
240 }
241 return false;
242 }
243
244
250 function _preloadData($a_obj_ids, $a_ref_ids)
251 {
252 global $ilDB, $ilUser;
253
254 include_once("./Modules/Group/classes/class.ilGroupWaitingList.php");
256 }
257
266 public static function lookupRegistrationInfo($a_obj_id)
267 {
268 global $ilDB, $ilUser, $lng;
269
270 $query = 'SELECT registration_type, registration_enabled, registration_unlimited, registration_start, '.
271 'registration_end, registration_mem_limit, registration_max_members FROM grp_settings '.
272 'WHERE obj_id = '.$ilDB->quote($a_obj_id);
273 $res = $ilDB->query($query);
274
275 $info = array();
276 while($row = $res->fetchRow(DB_FETCHMODE_OBJECT))
277 {
278 $info['reg_info_start'] = new ilDateTime($row->registration_start, IL_CAL_DATETIME);
279 $info['reg_info_end'] = new ilDateTime($row->registration_end, IL_CAL_DATETIME);
280 $info['reg_info_type'] = $row->registration_type;
281 $info['reg_info_max_members'] = $row->registration_max_members;
282 $info['reg_info_mem_limit'] = $row->registration_mem_limit;
283 $info['reg_info_unlimited'] = $row->registration_unlimited;
284
285 $info['reg_info_max_members'] = 0;
286 if($info['reg_info_mem_limit'])
287 {
288 $info['reg_info_max_members'] = $row->registration_max_members;
289 }
290
291 $info['reg_info_enabled'] = $row->registration_enabled;
292 }
293
294 $registration_possible = $info['reg_info_enabled'];
295
296 // Limited registration (added $registration_possible, see bug 0010157)
297 if(!$info['reg_info_unlimited'] && $registration_possible)
298 {
299 $dt = new ilDateTime(time(),IL_CAL_UNIX);
300 if(ilDateTime::_before($dt, $info['reg_info_start']))
301 {
302 $info['reg_info_list_prop']['property'] = $lng->txt('grp_list_reg_start');
303 $info['reg_info_list_prop']['value'] = ilDatePresentation::formatDate($info['reg_info_start']);
304 }
305 elseif(ilDateTime::_before($dt, $info['reg_info_end']))
306 {
307 $info['reg_info_list_prop']['property'] = $lng->txt('grp_list_reg_end');
308 $info['reg_info_list_prop']['value'] = ilDatePresentation::formatDate($info['reg_info_end']);
309 }
310 else
311 {
312 $registration_possible = false;
313 $info['reg_info_list_prop']['property'] = $lng->txt('grp_list_reg_period');
314 $info['reg_info_list_prop']['value'] = $lng->txt('grp_list_reg_noreg');
315 }
316 }
317 else
318 {
319 // added !$registration_possible, see bug 0010157
320 if (!$registration_possible)
321 {
322 $registration_possible = false;
323 $info['reg_info_list_prop']['property'] = $lng->txt('grp_list_reg_period');
324 $info['reg_info_list_prop']['value'] = $lng->txt('grp_list_reg_noreg');
325 }
326 }
327
328 if($info['reg_info_mem_limit'] && $info['reg_info_max_members'] && $registration_possible)
329 {
330 // Check for free places
331 include_once './Modules/Group/classes/class.ilGroupParticipants.php';
333
334 include_once './Modules/Course/classes/class.ilCourseWaitingList.php';
335 $info['reg_info_list_size'] = ilCourseWaitingList::lookupListSize($a_obj_id);
336 if($info['reg_info_list_size'])
337 {
338 $info['reg_info_free_places'] = 0;
339 }
340 else
341 {
342 $info['reg_info_free_places'] = max(0,$info['reg_info_max_members'] - $part->getCountMembers());
343 }
344
345 if($info['reg_info_free_places'])
346 {
347 $info['reg_info_list_prop_limit']['property'] = $lng->txt('grp_list_reg_limit_places');
348 $info['reg_info_list_prop_limit']['value'] = $info['reg_info_free_places'];
349 }
350 else
351 {
352 $info['reg_info_list_prop_limit']['property'] = '';
353 $info['reg_info_list_prop_limit']['value'] = $lng->txt('grp_list_reg_limit_full');
354 }
355 }
356
357 return $info;
358 }
359
365 public static function _usingRegistrationCode()
366 {
367 return self::$using_code;
368 }
369
370
371}
372?>
const DB_FETCHMODE_OBJECT
Definition: class.ilDB.php:11
const IL_CAL_UNIX
const IL_CAL_DATETIME
static getInstance()
Get singleton instance.
static formatDate(ilDateTime $date)
Format a date @access public.
@classDescription Date and time handling
static _after(ilDateTime $start, ilDateTime $end, $a_compare_field='', $a_tz='')
compare two dates and check start is after end This method does not consider tz offsets.
static _before(ilDateTime $start, ilDateTime $end, $a_compare_field='', $a_tz='')
compare two dates and check start is before end This method does not consider tz offsets.
static getInstance()
Get singleton instance.
static _getInstanceByObjId($a_obj_id)
Get singleton instance.
static _isParticipant($a_ref_id, $a_usr_id)
Static function to check if a user is a participant of the container object.
Class ilObjGroupAccess.
_checkAccess($a_cmd, $a_permission, $a_ref_id, $a_obj_id, $a_user_id="")
checks wether a user may invoke a command or not (this method is called by ilAccessHandler::checkAcce...
static _usingRegistrationCode()
Using Registration code.
_preloadData($a_obj_ids, $a_ref_ids)
Preload data.
static lookupRegistrationInfo($a_obj_id)
Lookup registration info @global ilDB $ilDB @global ilObjUser $ilUser @global ilLanguage $lng.
static _registrationEnabled($a_obj_id)
_checkGoto($a_target)
check whether goto script will succeed
static mayLeave($a_group_id, $a_user_id=null, &$a_date=null)
Class ilObjectAccess.
_preloadOnListInfo($a_usr_ids, $a_obj_ids)
Preload on list info.
static _isOnList($a_usr_id, $a_obj_id)
Check if a user on the waiting list.
static lookupListSize($a_obj_id)
Lookup waiting lit size.
$info
Definition: example_052.php:80
global $lng
Definition: privfeed.php:40
global $ilDB
global $ilUser
Definition: imgupload.php:15