90 $this->logger =
$GLOBALS[
'DIC']->logger()->cal();
92 $this->user_id = $a_usr_id;
93 if (!$this->user_id) {
94 $this->user_id =
$ilUser->getId();
111 if (self::$instance) {
112 return self::$instance;
129 $ilDB = $DIC[
'ilDB'];
131 $query =
"SELECT cat_id FROM cal_categories " .
132 "WHERE obj_id = " .
$ilDB->quote($a_obj_id,
'integer') .
" " .
152 public static function _isOwner($a_usr_id, $a_cal_id)
156 $ilDB = $DIC[
'ilDB'];
158 $query =
"SELECT * FROM cal_categories " .
159 "WHERE cat_id = " .
$ilDB->quote($a_cal_id,
'integer') .
" " .
160 "AND obj_id = " .
$ilDB->quote($a_usr_id,
'integer') .
" " .
163 return $res->numRows() ? true :
false;
175 self::MODE_PERSONAL_DESKTOP_ITEMS,
189 self::MODE_REPOSITORY,
203 'categories' => $this->categories,
204 'categories_info' => $this->categories_info,
205 'subitem_categories' => $this->subitem_categories
217 $info = unserialize($a_ser);
219 $this->categories = $info[
'categories'];
220 $this->categories_info = $info[
'categories_info'];
221 $this->subitem_categories = $info[
'subitem_categories'];
230 $this->ch_user_id = $a_user_id;
245 $this->mode = $a_mode;
255 $this->target_ref_id = $a_ref_id;
270 $this->root_ref_id = $a_val;
291 public function initialize($a_mode, $a_source_ref_id = 0, $a_use_cache =
false, $a_cat_id = 0)
294 include_once(
"./Services/Calendar/exceptions/class.ilCalCategoriesInitializedMultipleException.php");
301 if ($a_use_cache && $this->
getMode() != self::MODE_REPOSITORY_CONTAINER_ONLY) {
304 if ($this->
getMode() != self::MODE_REPOSITORY &&
305 $this->
getMode() != self::MODE_CONSULTATION &&
306 $this->
getMode() != self::MODE_PORTFOLIO_CONSULTATION) {
314 case self::MODE_REMOTE_ACCESS:
315 include_once(
'./Services/Calendar/classes/class.ilCalendarUserSettings.php');
323 case self::MODE_REMOTE_SELECTED:
327 case self::MODE_PERSONAL_DESKTOP_MEMBERSHIP:
331 case self::MODE_PERSONAL_DESKTOP_ITEMS:
335 case self::MODE_REPOSITORY:
336 $this->root_ref_id = $a_source_ref_id;
341 case self::MODE_REPOSITORY_CONTAINER_ONLY:
342 $this->root_ref_id = $a_source_ref_id;
347 case self::MODE_MANAGE:
352 case self::MODE_CONSULTATION:
353 #$this->readPrivateCalendars(); 358 case self::MODE_PORTFOLIO_CONSULTATION:
362 case self::MODE_SINGLE_CALENDAR:
370 $this->user_id .
':' . $a_mode .
':categories:' . (
int) $a_source_ref_id,
388 if (isset($this->categories_info[$a_cat_id])) {
389 return $this->categories_info[$a_cat_id];
392 if (in_array($a_cat_id, (array) $this->subitem_categories)) {
393 foreach ($this->categories as $cat_id) {
394 if (in_array($a_cat_id, $this->categories_info[$cat_id][
'subitem_ids'])) {
395 return $this->categories_info[$cat_id];
411 return $this->categories_info ? $this->categories_info : array();
422 if ($a_include_subitem_calendars) {
423 return array_merge((array) $this->categories, (array) $this->subitem_categories);
426 return $this->categories ? $this->categories : array();
437 if (!isset($this->categories_info[$a_cat_id][
'subitem_ids'])) {
438 return array($a_cat_id);
440 return array_merge((array) $this->categories_info[$a_cat_id][
'subitem_ids'], array($a_cat_id));
457 $has_personal_calendar =
false;
458 foreach ($this->categories_info as $info) {
459 if ($info[
'obj_type'] ==
'sess' || $info[
'obj_type'] ==
'exc') {
463 $has_personal_calendar =
true;
466 if ($info[
'editable']) {
467 $cats[$info[
'cat_id']] = $info[
'title'];
471 if (!$has_personal_calendar) {
472 $cats[0] =
$lng->txt(
'cal_default_calendar');
474 return $cats ? $cats : array();
485 foreach ($this->categories_info as $info) {
488 $not[] = $info[
'cat_id'];
504 return isset($this->categories_info[$a_cat_id][
'editable']) and $this->categories_info[$a_cat_id][
'editable'];
516 return in_array($a_cat_id, $this->categories) or
517 in_array($a_cat_id, (array) $this->subitem_categories);
534 $rbacsystem = $DIC[
'rbacsystem'];
542 include_once(
'./Services/Membership/classes/class.ilParticipants.php');
555 include_once
'./Services/Calendar/classes/class.ilCalendarCategory.php';
561 $this->categories[] = $a_cal_id;
576 $ilAccess = $DIC[
'ilAccess'];
588 $exercises = array();
589 foreach ($this->fav_rep->getFavouritesOfUser(
$ilUser->getId(), array(
'crs',
'grp',
'sess',
'exc')) as $item) {
590 if ($ilAccess->checkAccess(
'read',
'', $item[
'ref_id'])) {
591 switch ($item[
'type']) {
593 $courses[] = $item[
'obj_id'];
597 $sessions[] = $item[
'obj_id'];
601 $groups[] = $item[
'obj_id'];
605 $exercises[] = $item[
'obj_id'];
629 $ilAccess = $DIC[
'ilAccess'];
630 $tree = $DIC[
'tree'];
633 $ilDB = $DIC[
'ilDB'];
635 if (!$a_container_only) {
644 #$query = "SELECT ref_id,obd.obj_id obj_id FROM tree t1 ". 645 # "JOIN object_reference obr ON t1.child = obr.ref_id ". 646 # "JOIN object_data obd ON obd.obj_id = obr.obj_id ". 647 # "WHERE t1.lft >= (SELECT lft FROM tree WHERE child = ".$this->db->quote($this->root_ref_id,'integer')." ) ". 648 # "AND t1.lft <= (SELECT rgt FROM tree WHERE child = ".$this->db->quote($this->root_ref_id,'integer')." ) ". 649 # "AND ".$ilDB->in('type',array('crs','grp','sess'),false,'text')." ". 654 $subtree_query =
$GLOBALS[
'DIC'][
'tree']->getSubTreeQuery(
656 array(
'object_reference.ref_id',
'object_data.obj_id'),
657 array(
'crs',
'grp',
'sess',
'exc')
663 if ($tree->isDeleted($row->ref_id)) {
668 if ($obj_type ==
'crs' or $obj_type ==
'grp') {
677 if ($ilAccess->checkAccess(
'read',
'', $row->ref_id)) {
678 $obj_ids[] = $row->obj_id;
689 if (!$a_container_only) {
697 include_once
'./Services/Calendar/classes/class.ilCalendarCategory.php';
699 switch ($cat->getType()) {
732 $rbacsystem = $DIC[
'rbacsystem'];
733 $ilAccess = $DIC[
'ilAccess'];
736 if (is_array($cat_ids)) {
737 $in =
" AND " . $this->db->in(
'cat_id', $cat_ids,
false,
'integer') .
" ";
741 $query =
"SELECT * FROM cal_categories " .
747 $this->categories[] = $row->cat_id;
748 $this->categories_info[$row->cat_id][
'obj_id'] = $row->obj_id;
749 $this->categories_info[$row->cat_id][
'cat_id'] = $row->cat_id;
750 $this->categories_info[$row->cat_id][
'title'] = $row->title;
751 $this->categories_info[$row->cat_id][
'color'] = $row->color;
752 $this->categories_info[$row->cat_id][
'type'] = $row->type;
755 $this->categories_info[$row->cat_id][
'accepted'] =
false;
775 $ilDB = $DIC[
'ilDB'];
778 if (is_array($only_cat_ids)) {
779 $in =
" AND " . $this->db->in(
'cat_id', $only_cat_ids,
false,
'integer') .
" ";
783 $query =
"SELECT cat_id FROM cal_categories " .
785 "AND obj_id = " . $this->db->quote(
$ilUser->getId(),
'integer') .
" " .
$in;
788 $cat_ids[] = $row->cat_id;
792 include_once(
'./Services/Calendar/classes/class.ilCalendarSharedStatus.php');
794 if (!$cat_ids = array_merge((array) $cat_ids, $accepted_ids)) {
798 if (is_array($only_cat_ids)) {
799 $cat_ids = array_filter($cat_ids,
function ($id) use ($only_cat_ids) {
800 return in_array($id, $only_cat_ids);
805 $query =
"SELECT * FROM cal_categories " .
807 "AND " .
$ilDB->in(
'cat_id', $cat_ids,
false,
'integer') .
" " .
810 $res = $this->db->query($query);
812 $this->categories[] = $row->cat_id;
813 $this->categories_info[$row->cat_id][
'obj_id'] = $row->obj_id;
814 $this->categories_info[$row->cat_id][
'cat_id'] = $row->cat_id;
815 $this->categories_info[$row->cat_id][
'title'] = $row->title;
816 $this->categories_info[$row->cat_id][
'color'] = $row->color;
817 $this->categories_info[$row->cat_id][
'type'] = $row->type;
819 include_once
'./Services/Calendar/classes/class.ilCalendarShared.php';
820 if (in_array($row->cat_id, $accepted_ids)) {
822 if ($shared->isEditableForUser(
$ilUser->getId())) {
823 $this->categories_info[$row->cat_id][
'editable'] =
true;
825 $this->categories_info[$row->cat_id][
'editable'] =
false;
828 $this->categories_info[$row->cat_id][
'editable'] =
true;
830 if (
$ilUser->getId() == $row->obj_id) {
831 $this->categories_info[$row->cat_id][
'settings'] =
true;
833 $this->categories_info[$row->cat_id][
'settings'] =
false;
836 $this->categories_info[$row->cat_id][
'accepted'] = in_array($row->cat_id, $accepted_ids);
847 include_once
"Modules/Course/classes/class.ilCourseParticipants.php";
850 $users = array_unique(array_merge($participants->getTutors(), $participants->getAdmins()));
851 include_once
'Services/Booking/classes/class.ilBookingEntry.php';
854 foreach ($users as $user) {
870 $ilDB = $DIC[
'ilDB'];
877 if ($a_target_ref_id) {
880 $query =
'SELECT DISTINCT(cc.cat_id) FROM booking_entry be ' .
881 'LEFT JOIN booking_obj_assignment bo ON be.booking_id = bo.booking_id ' .
882 'JOIN cal_entries ce ON be.booking_id = ce.context_id ' .
883 'JOIN cal_cat_assignments ca ON ce.cal_id = ca.cal_id ' .
884 'JOIN cal_categories cc ON ca.cat_id = cc.cat_id ' .
885 'WHERE ((bo.target_obj_id IS NULL) OR bo.target_obj_id = ' .
$ilDB->quote($target_obj_id,
'integer') .
' ) ';
888 if ($a_cat_id == 0) {
896 if ($a_cat_id == 0 || $row->cat_id == $a_cat_id) {
902 $query =
'SELECT * FROM cal_categories ' .
906 $this->categories[] = $row->cat_id;
907 $this->categories_info[$row->cat_id][
'obj_id'] = $row->obj_id;
908 $this->categories_info[$row->cat_id][
'cat_id'] = $row->cat_id;
910 $this->categories_info[$row->cat_id][
'color'] = $row->color;
911 $this->categories_info[$row->cat_id][
'type'] = $row->type;
912 $this->categories_info[$row->cat_id][
'editable'] =
false;
913 $this->categories_info[$row->cat_id][
'settings'] =
false;
914 $this->categories_info[$row->cat_id][
'accepted'] =
false;
915 $this->categories_info[$row->cat_id][
'remote'] =
false;
919 $filter = ($a_cat_id > 0)
920 ?
" AND cat_id = " .
$ilDB->quote($a_cat_id,
"integer")
923 $query =
"SELECT * FROM cal_categories cc " .
927 $this->categories[] = $row->cat_id;
928 $this->categories_info[$row->cat_id][
'obj_id'] = $row->obj_id;
929 $this->categories_info[$row->cat_id][
'cat_id'] = $row->cat_id;
930 $this->categories_info[$row->cat_id][
'title'] = $row->title;
931 $this->categories_info[$row->cat_id][
'color'] = $row->color;
932 $this->categories_info[$row->cat_id][
'type'] = $row->type;
933 $this->categories_info[$row->cat_id][
'editable'] =
false;
934 $this->categories_info[$row->cat_id][
'settings'] =
false;
935 $this->categories_info[$row->cat_id][
'accepted'] =
false;
936 $this->categories_info[$row->cat_id][
'remote'] =
false;
951 $ilDB = $DIC[
'ilDB'];
957 $query =
"SELECT * FROM cal_categories " .
962 $this->categories[] = $row->cat_id;
963 $this->categories_info[$row->cat_id][
'obj_id'] = $row->obj_id;
964 $this->categories_info[$row->cat_id][
'cat_id'] = $row->cat_id;
965 $this->categories_info[$row->cat_id][
'title'] = $row->title;
966 $this->categories_info[$row->cat_id][
'color'] = $row->color;
967 $this->categories_info[$row->cat_id][
'type'] = $row->type;
968 $this->categories_info[$row->cat_id][
'editable'] =
false;
969 $this->categories_info[$row->cat_id][
'settings'] =
false;
970 $this->categories_info[$row->cat_id][
'accepted'] =
false;
971 $this->categories_info[$row->cat_id][
'remote'] =
false;
985 $ilAccess = $DIC[
'ilAccess'];
986 $tree = $DIC[
'tree'];
989 $ilDB = $DIC[
'ilDB'];
991 if (!count($a_obj_ids)) {
995 $query =
"SELECT * FROM cal_categories " .
997 "AND " .
$ilDB->in(
'obj_id', $a_obj_ids,
false,
'integer') .
" " .
1004 if ($obj_type ==
'crs' or $obj_type ==
'grp') {
1014 if ($ilAccess->checkAccess(
'edit_event',
'', $ref_id)) {
1017 if ($ilAccess->checkAccess(
'edit_event',
'', $ref_id)) {
1021 } elseif ($ilAccess->checkAccess(
'read',
'', $ref_id)) {
1028 $this->categories_info[$row->cat_id][
'editable'] = $editable;
1029 $this->categories_info[$row->cat_id][
'settings'] = $settings;
1031 $this->categories[] = $row->cat_id;
1032 $this->categories_info[$row->cat_id][
'obj_id'] = $row->obj_id;
1033 $this->categories_info[$row->cat_id][
'cat_id'] = $row->cat_id;
1034 $this->categories_info[$row->cat_id][
'color'] = $row->color;
1035 #$this->categories_info[$row->cat_id]['title'] = ilObject::_lookupTitle($row->obj_id); 1036 $this->categories_info[$row->cat_id][
'title'] = $row->title;
1038 $this->categories_info[$row->cat_id][
'type'] = $row->type;
1039 $this->categories_info[$row->cat_id][
'remote'] =
false;
1040 $this->categories_info[$row->cat_id][
'source_ref_id'] = $a_source_ref_id;
1054 $ilDB = $DIC->database();
1055 $access = $DIC->access();
1057 $course_ids = array();
1058 foreach ($this->categories as $cat_id) {
1059 if ($this->categories_info[$cat_id][
'obj_type'] ==
'crs' or $this->categories_info[$cat_id][
'obj_type'] ==
'grp') {
1060 $course_ids[] = $this->categories_info[$cat_id][
'obj_id'];
1064 $query =
"SELECT od2.obj_id sess_id, od1.obj_id crs_id,cat_id, or2.ref_id sess_ref_id FROM object_data od1 " .
1065 "JOIN object_reference or1 ON od1.obj_id = or1.obj_id " .
1066 "JOIN tree t ON or1.ref_id = t.parent " .
1067 "JOIN object_reference or2 ON t.child = or2.ref_id " .
1068 "JOIN object_data od2 ON or2.obj_id = od2.obj_id " .
1069 "JOIN cal_categories cc ON od2.obj_id = cc.obj_id " .
1070 "WHERE " .
$ilDB->in(
'od2.type', array(
'sess',
'exc'),
false,
'text') .
1071 "AND (od1.type = 'crs' OR od1.type = 'grp') " .
1072 "AND " .
$ilDB->in(
'od1.obj_id', $course_ids,
false,
'integer') .
' ' .
1073 "AND or2.deleted IS NULL";
1077 $course_sessions = array();
1080 !$access->checkAccessOfUser($this->user_id,
'read',
'', $row->sess_ref_id) ||
1081 !$access->checkAccessOfUser($this->user_id,
'visible',
'', $row->sess_ref_id)
1085 $cat_ids[] = $row->cat_id;
1086 $course_sessions[$row->crs_id][$row->sess_id] = $row->cat_id;
1087 $this->subitem_categories[] = $row->cat_id;
1090 foreach ($this->categories as $cat_id) {
1092 ($this->categories_info[$cat_id][
'obj_type'] ==
'crs' ||
1093 $this->categories_info[$cat_id][
'obj_type'] ==
'grp') &&
1094 isset($this->categories_info[$cat_id][
'obj_id']) &&
1095 isset($course_sessions[$this->categories_info[$cat_id][
'obj_id']]) &&
1096 is_array($course_sessions[$this->categories_info[$cat_id][
'obj_id']])) {
1097 foreach ($course_sessions[$this->categories_info[$cat_id][
'obj_id']] as $sess_id => $sess_cat_id) {
1098 $this->categories_info[$cat_id][
'subitem_ids'][$sess_id] = $sess_cat_id;
1099 $this->categories_info[$cat_id][
'subitem_obj_ids'][$sess_cat_id] = $sess_id;
1102 $this->categories_info[$cat_id][
'subitem_ids'] = array();
1103 $this->categories_info[$cat_id][
'subitem_obj_ids'] = array();
1118 $ilDB = $DIC[
'ilDB'];
1121 $set =
$ilDB->query(
"SELECT * FROM cal_categories " .
1123 "AND obj_id = " .
$ilDB->quote($a_user_id,
'integer'));
1125 while ($rec =
$ilDB->fetchAssoc($set)) {
class for calendar categories
static getInstance()
get singleton instance
readAllConsultationHoursCalendarOfContainer($a_container_ref_id)
Read personal consultation hours calendar of all tutors for a container.
readSelectedItemCalendars()
Read categories of selected items.
addSubitemCalendars()
Add subitem calendars E.g.
readSelectedCategories($a_obj_ids, $a_source_ref_id=0)
read selected categories
static _getInstance()
get singleton instance
Exception being thrown calendar categories is initiliazed multiple times for the same user...
static _isOwner($a_usr_id, $a_cal_id)
check if user is owner of a category
wakeup($a_ser)
Load from serialize string.
static getAcceptedCalendars($a_usr_id)
get accepted shared calendars
getCategoryInfo($a_cat_id)
public
const MODE_PERSONAL_DESKTOP_MEMBERSHIP
static _lookupFullname($a_user_id)
Lookup Full Name.
static _getMembershipByType($a_usr_id, $a_type, $a_only_member_role=false)
get membership by type Get course or group membership
readReposCalendars($a_container_only=false)
Read available repository calendars.
static _getInstanceByObjId($a_obj_id)
Get singleton instance.
setCHUserId($a_user_id)
Set ch user id.
const CAL_SELECTION_MEMBERSHIP
static _lookupCategoryIdByObjId($a_obj_id)
lookup category by obj_id
const MODE_REMOTE_SELECTED
readBookingCalendar($user_id=null)
Read booking manager calendar.
sleep()
Serialize categories.
isVisible($a_cat_id)
check if category is visible
const MODE_REPOSITORY_CONTAINER_ONLY
Stores calendar categories.
const MODE_SINGLE_CALENDAR
static deletePDItemsCache($a_usr_id)
Delete cache (add remove desktop item)
Handles shared calendars.
readPrivateCalendars($only_cat_ids=null)
Read private calendars.
static _getAllReferences($a_id)
get all reference ids of object
setSourceRefId($a_val)
Set source ref id.
static lookupBookableUsersForObject($a_obj_id, $a_user_ids)
Consultation hours are offered if 1) consultation hour owner is admin or tutor and no object assignme...
isEditable($a_cat_id)
check if category is editable
static deleteRepositoryCache($a_usr_id)
Delete cache.
foreach($_POST as $key=> $value) $res
getCHUserId()
Get ch user id.
getSourceRefId()
Get source ref id.
static _getInstance()
get instance for logged in user
static _lookupObjId($a_id)
initialize($a_mode, $a_source_ref_id=0, $a_use_cache=false, $a_cat_id=0)
initialize visible categories
getSubitemCategories($a_cat_id)
get subitem categories for a specific category
if(!defined('PATH_SEPARATOR')) $GLOBALS['_PEAR_default_error_mode']
readSelectedCalendar($a_cal_id)
Read info about selected calendar.
const MODE_PORTFOLIO_CONSULTATION
prepareCategoriesOfUserForSelection()
prepare categories of users for selection
static _getInstance($a_usr_id=0)
get singleton instance
setTargetRefId($a_ref_id)
static _lookupType($a_id, $a_reference=false)
lookup object type
if(php_sapi_name() !='cli') $in
readConsultationHoursCalendar($a_target_ref_id=null, $a_cat_id=0)
Read personal consultation hours calendar.
getCategories($a_include_subitem_calendars=false)
get categories
__construct($a_usr_id=0)
Singleton instance.
readSingleCalendar($a_cat_id)
getNotificationCalendars()
Get all calendars that allow send of notifications (Editable and course group calendars) ...
static lookupPrivateCategories($a_user_id)
Lookup private categories of user.
readPublicCalendars($cat_ids=null)
Read public calendars.
readPDCalendars()
Read categories of user.
getCategoriesInfo()
get categories
const MODE_PERSONAL_DESKTOP_ITEMS