ILIAS  release_5-1 Revision 5.0.0-5477-g43f3e3fab5f
class.ilObjCourseAccess.php
Go to the documentation of this file.
1<?php
2
3/* Copyright (c) 1998-2011 ILIAS open source, Extended GPL, see docs/LICENSE */
4
5include_once("./Services/Object/classes/class.ilObjectAccess.php");
6include_once './Modules/Course/classes/class.ilCourseConstants.php';
7include_once 'Modules/Course/classes/class.ilCourseParticipants.php';
8include_once 'Modules/Course/classes/class.ilCourseParticipant.php';
9include_once './Services/AccessControl/interfaces/interface.ilConditionHandling.php';
10
20{
21
22 protected static $using_code = false;
23
27 public static function getConditionOperators()
28 {
29 include_once './Services/AccessControl/classes/class.ilConditionHandler.php';
30 return array(
32 );
33 }
34
44 public static function checkCondition($a_obj_id,$a_operator,$a_value,$a_usr_id)
45 {
46 include_once "./Modules/Course/classes/class.ilCourseParticipants.php";
47 include_once './Services/AccessControl/classes/class.ilConditionHandler.php';
48
49 switch($a_operator)
50 {
52 return ilCourseParticipants::_hasPassed($a_obj_id,$a_usr_id);
53 }
54 return FALSE;
55 }
56
69 function _checkAccess($a_cmd, $a_permission, $a_ref_id, $a_obj_id, $a_user_id = "")
70 {
71 global $ilUser, $lng, $rbacsystem, $ilAccess, $ilias;
72
73
74 if ($a_user_id == "")
75 {
76 $a_user_id = $ilUser->getId();
77 }
78
79 if($ilUser->getId() == $a_user_id)
80 {
81 $participants = ilCourseParticipant::_getInstanceByObjId($a_obj_id,$a_user_id);
82 }
83 else
84 {
85 $participants = ilCourseParticipants::_getInstanceByObjId($a_obj_id);
86 }
87
88
89 switch ($a_cmd)
90 {
91 case "view":
92 if($participants->isBlocked($a_user_id) and $participants->isAssigned($a_user_id))
93 {
94 $ilAccess->addInfoItem(IL_NO_OBJECT_ACCESS, $lng->txt("crs_status_blocked"));
95 return false;
96 }
97 break;
98
99 case 'leave':
100
101 // Regular member
102 if($a_permission == 'leave')
103 {
104 include_once './Modules/Course/classes/class.ilObjCourse.php';
105 $limit = null;
106 if(!ilObjCourse::mayLeave($a_obj_id, $a_user_id, $limit))
107 {
108 $ilAccess->addInfoItem(IL_STATUS_MESSAGE,
109 sprintf($lng->txt("crs_cancellation_end_rbac_info"), ilDatePresentation::formatDate($limit)));
110 return false;
111 }
112
113 include_once './Modules/Course/classes/class.ilCourseParticipants.php';
114 if(!$participants->isAssigned($a_user_id))
115 {
116 return false;
117 }
118 }
119 // Waiting list
120 if($a_permission == 'join')
121 {
122 include_once './Modules/Course/classes/class.ilCourseWaitingList.php';
123 if(!ilCourseWaitingList::_isOnList($a_user_id, $a_obj_id))
124 {
125 return false;
126 }
127 return true;
128 }
129 break;
130
131 case 'join':
132
133 include_once './Modules/Course/classes/class.ilCourseWaitingList.php';
134 if(ilCourseWaitingList::_isOnList($a_user_id, $a_obj_id))
135 {
136 return false;
137 }
138 break;
139 }
140
141 switch ($a_permission)
142 {
143 case 'visible':
144 $visible = null;
145 $active = self::_isActivated($a_obj_id, $visible);
146 $tutor = $rbacsystem->checkAccessOfUser($a_user_id,'write',$a_ref_id);
147 if(!$active)
148 {
149 $ilAccess->addInfoItem(IL_NO_OBJECT_ACCESS, $lng->txt("offline"));
150 }
151 if(!$tutor and !$active && !$visible)
152 {
153 return false;
154 }
155 break;
156
157 case 'read':
158 $tutor = $rbacsystem->checkAccessOfUser($a_user_id,'write',$a_ref_id);
159 if($tutor)
160 {
161 return true;
162 }
163 $active = self::_isActivated($a_obj_id);
164 if(!$active)
165 {
166 $ilAccess->addInfoItem(IL_NO_OBJECT_ACCESS, $lng->txt("offline"));
167 return false;
168 }
169 if($participants->isBlocked($a_user_id) and $participants->isAssigned($a_user_id))
170 {
171 $ilAccess->addInfoItem(IL_NO_OBJECT_ACCESS, $lng->txt("crs_status_blocked"));
172 return false;
173 }
174 break;
175
176 case 'join':
177 if(!self::_registrationEnabled($a_obj_id))
178 {
179 return false;
180 }
181
182 if($participants->isAssigned($a_user_id))
183 {
184 return false;
185 }
186 break;
187
188 case 'leave':
189 include_once './Modules/Course/classes/class.ilObjCourse.php';
190 return ilObjCourse::mayLeave($a_obj_id, $a_user_id);
191 }
192 return true;
193 }
194
207 function _getCommands()
208 {
209 $commands = array();
210 $commands[] = array("permission" => "crs_linked", "cmd" => "", "lang_var" => "view", "default" => true);
211
212 include_once './Services/WebServices/FileManager/classes/class.ilFMSettings.php';
213 if(ilFMSettings::getInstance()->isEnabled())
214 {
215 $commands[] = array(
216 'permission' => 'read',
217 'cmd' => 'fileManagerLaunch',
218 'lang_var' => 'fm_start',
219 'enable_anonymous' => false
220 );
221 }
222
223 $commands[] = array("permission" => "join", "cmd" => "join", "lang_var" => "join");
224
225 // on waiting list
226 $commands[] = array('permission' => "join", "cmd" => "leave", "lang_var" => "leave_waiting_list");
227
228 // regualar users
229 $commands[] = array('permission' => "leave", "cmd" => "leave", "lang_var" => "crs_unsubscribe");
230
231 include_once ('Services/WebDAV/classes/class.ilDAVActivationChecker.php');
233 {
234 include_once './Services/WebDAV/classes/class.ilDAVUtils.php';
235 if(ilDAVUtils::getInstance()->isLocalPasswordInstructionRequired())
236 {
237 $commands[] = array('permission' => 'read', 'cmd' => 'showPasswordInstruction', 'lang_var' => 'mount_webfolder', 'enable_anonymous' => 'false');
238 }
239 else
240 {
241 $commands[] = array("permission" => "read", "cmd" => "mount_webfolder", "lang_var" => "mount_webfolder", "enable_anonymous" => "false");
242 }
243 }
244
245 $commands[] = array("permission" => "write", "cmd" => "enableAdministrationPanel", "lang_var" => "edit_content");
246 $commands[] = array("permission" => "write", "cmd" => "edit", "lang_var" => "settings");
247 return $commands;
248 }
249
253 function _checkGoto($a_target)
254 {
255 global $ilAccess,$ilUser;
256
257 $t_arr = explode("_", $a_target);
258
259 // registration codes
260 if(substr($t_arr[2],0,5) == 'rcode' and $ilUser->getId() != ANONYMOUS_USER_ID)
261 {
262 self::$using_code = true;
263 return true;
264 }
265
266
267 if ($t_arr[0] != "crs" || ((int) $t_arr[1]) <= 0)
268 {
269 return false;
270 }
271
272 // checking for read results in endless loop, if read is given
273 // but visible is not given (-> see bug 5323)
274 if ($ilAccess->checkAccess("read", "", $t_arr[1]) ||
275 $ilAccess->checkAccess("visible", "", $t_arr[1]))
276 //if ($ilAccess->checkAccess("visible", "", $t_arr[1]))
277 {
278 return true;
279 }
280 return false;
281 }
282
289 function _lookupViewMode($a_id)
290 {
291 global $ilDB;
292
293 $query = "SELECT view_mode FROM crs_settings WHERE obj_id = ".$ilDB->quote($a_id ,'integer')." ";
294 $res = $ilDB->query($query);
295 while($row = $res->fetchRow(DB_FETCHMODE_OBJECT))
296 {
297 return $row->view_mode;
298 }
299 return false;
300 }
301
308 protected static function _isOnline($a_obj_id)
309 {
310 global $ilDB;
311
312 $query = "SELECT * FROM crs_settings ".
313 "WHERE obj_id = ".$ilDB->quote($a_obj_id ,'integer')." ";
314 $res = $ilDB->query($query);
315 $row = $res->fetchRow(DB_FETCHMODE_OBJECT);
316 return (bool)$row->activation_type;
317 }
318
328 public static function _isActivated($a_obj_id, &$a_visible_flag = null, $a_mind_member_view = true)
329 {
330 // #7669
331 if($a_mind_member_view)
332 {
333 include_once './Services/Container/classes/class.ilMemberViewSettings.php';
334 if(ilMemberViewSettings::getInstance()->isActive())
335 {
336 $a_visible_flag = true;
337 return true;
338 }
339 }
340
341 // offline?
342 if(!self::_isOnline($a_obj_id))
343 {
344 $a_visible_flag = false;
345 return false;
346 }
347
349 $ref_id = array_pop($ref_id);
350
351 $a_visible_flag = true;
352
353 include_once './Services/Object/classes/class.ilObjectActivation.php';
355 switch($item['timing_type'])
356 {
358 if(time() < $item['timing_start'] or
359 time() > $item['timing_end'])
360 {
361 $a_visible_flag = $item['visible'];
362 return false;
363 }
364 // fallthrough
365
366 default:
367 return true;
368 }
369 }
370
376 public static function _registrationEnabled($a_obj_id)
377 {
378 global $ilDB;
379
380 $query = "SELECT * FROM crs_settings ".
381 "WHERE obj_id = ".$ilDB->quote($a_obj_id ,'integer')." ";
382
383 $res = $ilDB->query($query);
384 while($row = $res->fetchRow(DB_FETCHMODE_OBJECT))
385 {
386 $type = $row->sub_limitation_type;
387 $reg_start = $row->sub_start;
388 $reg_end = $row->sub_end;
389 }
390
391 switch($type)
392 {
394 return true;
395
397 return false;
398
400 if(time() > $reg_start and
401 time() < $reg_end)
402 {
403 return true;
404 }
405 default:
406 return false;
407 }
408 return false;
409 }
410
419 public static function lookupRegistrationInfo($a_obj_id)
420 {
421 global $ilDB, $ilUser, $lng;
422
423 $query = 'SELECT sub_limitation_type, sub_start, sub_end, sub_mem_limit, sub_max_members FROM crs_settings '.
424 'WHERE obj_id = '.$ilDB->quote($a_obj_id);
425 $res = $ilDB->query($query);
426
427 $info = array();
428 while($row = $res->fetchRow(DB_FETCHMODE_OBJECT))
429 {
430 $info['reg_info_start'] = new ilDateTime($row->sub_start, IL_CAL_UNIX);
431 $info['reg_info_end'] = new ilDateTime($row->sub_end, IL_CAL_UNIX);
432 $info['reg_info_type'] = $row->sub_limitation_type;
433 $info['reg_info_max_members'] = $row->sub_max_members;
434 $info['reg_info_mem_limit'] = $row->sub_mem_limit;
435 }
436
437 $registration_possible = true;
438
439 // Limited registration
440 if($info['reg_info_type'] == ilCourseConstants::SUBSCRIPTION_LIMITED)
441 {
442 $dt = new ilDateTime(time(),IL_CAL_UNIX);
443 if(ilDateTime::_before($dt, $info['reg_info_start']))
444 {
445 $info['reg_info_list_prop']['property'] = $lng->txt('crs_list_reg_start');
446 $info['reg_info_list_prop']['value'] = ilDatePresentation::formatDate($info['reg_info_start']);
447 }
448 elseif(ilDateTime::_before($dt, $info['reg_info_end']))
449 {
450 $info['reg_info_list_prop']['property'] = $lng->txt('crs_list_reg_end');
451 $info['reg_info_list_prop']['value'] = ilDatePresentation::formatDate($info['reg_info_end']);
452 }
453 else
454 {
455 $registration_possible = false;
456 $info['reg_info_list_prop']['property'] = $lng->txt('crs_list_reg_period');
457 $info['reg_info_list_prop']['value'] = $lng->txt('crs_list_reg_noreg');
458 }
459 }
460 else if($info['reg_info_type'] == ilCourseConstants::SUBSCRIPTION_UNLIMITED)
461 {
462 $registration_possible = true;
463 }
464 else
465 {
466 $registration_possible = false;
467 $info['reg_info_list_prop']['property'] = $lng->txt('crs_list_reg_period');
468 $info['reg_info_list_prop']['value'] = $lng->txt('crs_list_reg_noreg');
469 }
470
471 if($info['reg_info_mem_limit'] && $info['reg_info_max_members'] && $registration_possible)
472 {
473 // Check for free places
474 include_once './Modules/Course/classes/class.ilCourseParticipant.php';
475 $part = ilCourseParticipant::_getInstanceByObjId($a_obj_id, $ilUser->getId());
476
477 include_once './Modules/Course/classes/class.ilCourseWaitingList.php';
478 $info['reg_info_list_size'] = ilCourseWaitingList::lookupListSize($a_obj_id);
479 if($info['reg_info_list_size'])
480 {
481 $info['reg_info_free_places'] = 0;
482 }
483 else
484 {
485 $info['reg_info_free_places'] = max(0,$info['reg_info_max_members'] - $part->getNumberOfMembers());
486 }
487
488 if($info['reg_info_free_places'])
489 {
490 $info['reg_info_list_prop_limit']['property'] = $lng->txt('crs_list_reg_limit_places');
491 $info['reg_info_list_prop_limit']['value'] = $info['reg_info_free_places'];
492 }
493 else
494 {
495 $info['reg_info_list_prop_limit']['property'] = '';
496 $info['reg_info_list_prop_limit']['value'] = $lng->txt('crs_list_reg_limit_full');
497 }
498 }
499
500 return $info;
501 }
502
511 static function _isOffline($a_obj_id)
512 {
513 $dummy = null;
514 return !self::_isActivated($a_obj_id, $dummy, false);
515 }
516
522 function _preloadData($a_obj_ids, $a_ref_ids)
523 {
524 global $ilUser, $lng;
525
526 $lng->loadLanguageModule("crs");
527
528 include_once("./Modules/Course/classes/class.ilCourseWaitingList.php");
530
531 include_once "./Modules/Course/classes/class.ilCourseCertificateAdapter.php";
533 }
534
540 public static function _usingRegistrationCode()
541 {
542 return self::$using_code;
543 }
544
551 public static function lookupPeriodInfo($a_obj_id)
552 {
553 global $ilDB, $lng;
554
555 $start = $end = null;
556
557 $query = 'SELECT crs_start, crs_end FROM crs_settings'.
558 ' WHERE obj_id = '.$ilDB->quote($a_obj_id);
559 $set = $ilDB->query($query);
560 while($row = $ilDB->fetchAssoc($set))
561 {
562 $start = $row['crs_start']
563 ? new ilDate($row['crs_start'], IL_CAL_UNIX)
564 : null;
565 $end = $row['crs_end']
566 ? new ilDate($row['crs_end'], IL_CAL_UNIX)
567 : null;
568 }
569
570 if($start && $end)
571 {
572 $lng->loadLanguageModule('crs');
573
574 return array(
575 'property' => $lng->txt('crs_period'),
576 'value' => ilDatePresentation::formatPeriod($start, $end)
577 );
578 }
579 }
580}
581
582?>
const IL_NO_OBJECT_ACCESS
const IL_CRS_SUBSCRIPTION_LIMITED
const IL_CRS_SUBSCRIPTION_UNLIMITED
const IL_CRS_SUBSCRIPTION_DEACTIVATED
const DB_FETCHMODE_OBJECT
Definition: class.ilDB.php:11
const IL_CAL_UNIX
static _preloadListData($a_usr_ids, $a_obj_ids)
Get certificate/passed status for all given objects and users.
static _getInstanceByObjId($a_obj_id, $a_usr_id)
Get singleton instance.
static _getInstanceByObjId($a_obj_id)
Get singleton instance.
static getInstance()
Get singleton instance.
static formatPeriod(ilDateTime $start, ilDateTime $end)
Format a period of two date Shows: 14.
static formatDate(ilDateTime $date)
Format a date @access public.
@classDescription Date and time handling
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.
Class for single dates.
static getInstance()
Get singleton instance.
static getInstance()
Get instance.
Class ilObjCourseAccess.
static lookupPeriodInfo($a_obj_id)
Lookup course period info.
static getConditionOperators()
Get operators.
static checkCondition($a_obj_id, $a_operator, $a_value, $a_usr_id)
@global ilObjUser $ilUser
_lookupViewMode($a_id)
Lookup view mode.
static _registrationEnabled($a_obj_id)
_preloadData($a_obj_ids, $a_ref_ids)
Preload data.
_checkGoto($a_target)
check whether goto script will succeed
static _usingRegistrationCode()
Using Registration code.
_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 _isActivated($a_obj_id, &$a_visible_flag=null, $a_mind_member_view=true)
Is activated?
static lookupRegistrationInfo($a_obj_id)
Lookup registration info @global ilDB $ilDB @global ilObjUser $ilUser @global ilLanguage $lng.
static _isOffline($a_obj_id)
Type-specific implementation of general status.
static _isOnline($a_obj_id)
Check if online setting is active.
static mayLeave($a_course_id, $a_user_id=null, &$a_date=null)
Class ilObjectAccess.
static getItem($a_ref_id)
Get item data.
static _getAllReferences($a_id)
get all reference ids of object
static _hasPassed($a_obj_id, $a_usr_id)
Check if user has passed course.
_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
Interface for condition handling.
global $lng
Definition: privfeed.php:40
$ref_id
Definition: sahs_server.php:39
global $ilDB
global $ilUser
Definition: imgupload.php:15