5 include_once(
"Services/Block/classes/class.ilBlockGUI.php");
6 include_once
'./Services/Calendar/classes/class.ilCalendarCategories.php';
60 parent::__construct();
62 $this->tabs = $DIC->tabs();
63 $this->obj_data_cache = $DIC[
"ilObjDataCache"];
64 $this->ui = $DIC->ui();
70 $ilHelp = $DIC[
"ilHelp"];
73 $lng->loadLanguageModule(
"dateplaner");
74 $ilHelp->addHelpSection(
"cal_block");
76 include_once(
"./Services/News/classes/class.ilNewsItem.php");
78 $ilCtrl->saveParameter($this,
'bkid');
99 $this->allow_moving =
false;
102 include_once(
'Services/Calendar/classes/class.ilDate.php');
103 include_once(
'Services/Calendar/classes/class.ilCalendarUserSettings.php');
106 if ((!isset(
$_GET[
"seed"]) ||
$_GET[
"seed"] ==
"") &&
109 } elseif (isset(
$_GET[
"seed"])) {
110 $seed_str =
$_GET[
"seed"];
113 if (isset(
$_GET[
"seed"]) &&
$_GET[
"seed"] !=
"") {
118 if ($seed_str ==
"") {
128 $this->display_mode = $mode ?
$mode :
"mmon";
139 return ($this->
settings->getShowWeeks() && $this->user_settings->getShowWeeks());
150 return self::$block_type;
170 $this->parent_gui = $a_val;
190 $this->force_month_view = $a_val;
192 $this->display_mode =
"mmon";
215 $cmd_class =
$ilCtrl->getCmdClass();
217 if ($cmd_class ==
"ilcalendarappointmentgui" ||
218 $cmd_class ==
"ilconsultationhoursgui" ||
219 $_GET[
'cmd'] ==
'showCalendarSubscription') {
243 $next_class =
$ilCtrl->getNextClass();
244 $cmd =
$ilCtrl->getCmd(
"getHTML");
248 switch ($next_class) {
249 case "ilcalendarappointmentgui":
250 include_once(
'./Services/Calendar/classes/class.ilCalendarAppointmentGUI.php');
252 $ilCtrl->forwardCommand($app_gui);
255 case "ilconsultationhoursgui":
256 include_once(
'./Services/Calendar/classes/ConsultationHours/class.ilConsultationHoursGUI.php');
258 $ilCtrl->forwardCommand($hours);
261 case "ilcalendarappointmentpresentationgui":
264 $ilCtrl->forwardCommand($presentation);
267 case "ilcalendarmonthgui":
268 $ilTabs->setSubTabActive(
'app_month');
269 include_once(
'./Services/Calendar/classes/class.ilCalendarMonthGUI.php');
271 $ilCtrl->forwardCommand($month_gui);
275 return $this->$cmd();
286 $this->enable_edit = $a_enable_edit;
296 return $this->enable_edit;
307 $this->
setRowTemplate(
"tpl.pd_event_list.html",
"Services/Calendar");
314 "tpl.calendar_block.html",
336 $target_class =
array();
338 $target_class =
array(
"ilpersonaldesktopgui",
"ilcalendarpresentationgui");
342 $target_class =
array(
"ilobjcoursegui",
"ilcalendarpresentationgui");
346 $target_class =
array(
"ilobjgroupgui",
"ilcalendarpresentationgui");
350 return $target_class;
366 include_once(
'Services/Calendar/classes/class.ilCalendarUtil.php');
368 $a_tpl->setCurrentBlock(
'month_header_col');
369 $a_tpl->setVariable(
'TXT_WEEKDAY',
$lng->txt(
"cal_week_abbrev"));
370 $a_tpl->parseCurrentBlock();
372 for (
$i = (
int) $this->user_settings->getWeekStart();
$i < (7 + (int) $this->user_settings->getWeekStart());
$i++) {
373 $a_tpl->setCurrentBlock(
'month_header_col');
375 $a_tpl->parseCurrentBlock();
378 if (isset(
$_GET[
"bkid"])) {
379 $user_id =
$_GET[
"bkid"];
380 $disable_empty =
true;
383 $disable_empty =
false;
385 include_once(
'Services/Calendar/classes/class.ilCalendarSchedule.php');
387 $this->scheduler->addSubitemCalendars(
true);
388 $this->scheduler->calculate();
394 $this->user_settings->getWeekStart()
398 $events = $this->scheduler->getByDay($date,
$ilUser->getTimeZone());
399 $has_events = (bool) count($events);
400 if ($has_events || !$disable_empty) {
401 $a_tpl->setCurrentBlock(
'month_col_link');
403 $a_tpl->setCurrentBlock(
'month_col_no_link');
406 if ($disable_empty) {
408 $a_tpl->setVariable(
'DAY_CLASS',
'calminiinactive');
410 $week_has_events =
true;
411 include_once
'Services/Booking/classes/class.ilBookingEntry.php';
412 foreach ($events as $event) {
414 if ($booking->hasBooked($event[
'event']->getEntryId())) {
415 $a_tpl->setVariable(
'DAY_CLASS',
'calminiapp');
420 } elseif ($has_events) {
421 $week_has_events =
true;
422 $a_tpl->setVariable(
'DAY_CLASS',
'calminiapp');
432 if ($agenda_view_type = (
int)
$_GET[
'cal_agenda_per']) {
435 $a_tpl->setVariable(
'OPEN_DAY_VIEW',
$ilCtrl->getLinkTargetByClass($this->getTargetGUIClassPath(),
''));
437 $a_tpl->setVariable(
'MONTH_DAY', $month_day);
439 $a_tpl->parseCurrentBlock();
442 $a_tpl->setCurrentBlock(
'month_col');
444 include_once(
'./Services/Calendar/classes/class.ilCalendarUtil.php');
446 $a_tpl->setVariable(
'TD_CLASS',
'calminitoday');
448 #elseif(ilDateTime::_equals($date,$this->seed,IL_CAL_DAY)) 450 # $a_tpl->setVariable('TD_CLASS','calmininow'); 453 $a_tpl->setVariable(
'TD_CLASS',
'calministd');
455 $a_tpl->setVariable(
'TD_CLASS',
'calminiprev');
457 $a_tpl->setVariable(
'TD_CLASS',
'calmininext');
460 $a_tpl->parseCurrentBlock();
465 $a_tpl->setCurrentBlock(
'week');
470 $a_tpl->parseCurrentBlock();
473 $a_tpl->setCurrentBlock(
'month_row');
475 $a_tpl->parseCurrentBlock();
477 $week_has_events =
false;
480 $a_tpl->setCurrentBlock(
'mini_month');
481 $a_tpl->setVariable(
'TXT_MONTH_OVERVIEW',
$lng->txt(
"cal_month_overview"));
483 $myseed = clone($this->seed);
488 $prev_link =
$ilCtrl->getLinkTarget($this,
"setSeed",
"",
true);
492 $next_link =
$ilCtrl->getLinkTarget($this,
"setSeed",
"",
true);
494 $ilCtrl->setParameter($this,
'seed',
"");
500 $b1 =
$ui->factory()->button()->standard(
$lng->txt(
"previous"),
"#")->
withOnLoadCode(
function (
$id) use ($prev_link, $blockgui) {
502 "$('#" .
$id .
"').click(function() { ilBlockJSHandler('block_" . $blockgui->getBlockType() .
503 "_" . $blockgui->getBlockId() .
"','" . $prev_link .
"'); return false;});";
507 $ilCtrl->clearParameterByClass(
"ilcalendarblockgui",
'seed');
508 $month_link =
$ilCtrl->getLinkTarget($this,
"setSeed",
"",
true,
false);
509 $seed_parts = explode(
"-", $this->seed->get(
IL_CAL_DATE));
510 $b2 =
$ui->factory()->button()->month($seed_parts[1] .
"-" . $seed_parts[0])->withOnLoadCode(
function (
$id) use ($month_link, $blockgui) {
511 return "$('#" .
$id .
"').on('il.ui.button.month.changed', function(el, id, month) { var m = month.split('-'); ilBlockJSHandler('block_" . $blockgui->getBlockType() .
512 "_" . $blockgui->getBlockId() .
"','" . $month_link .
"' + '&seed=' + m[1] + '-' + m[0] + '-01'); return false;});";
515 $b3 =
$ui->factory()->button()->standard(
$lng->txt(
"next"),
"#")->
withOnLoadCode(
function (
$id) use ($next_link, $blockgui) {
517 "$('#" .
$id .
"').click(function() { ilBlockJSHandler('block_" . $blockgui->getBlockType() .
518 "_" . $blockgui->getBlockId() .
"','" . $next_link .
"'); return false;});";
522 $vc =
$ui->factory()->viewControl()->section($b1, $b2, $b3);
523 $a_tpl->setVariable(
"VIEW_CTRL_SECTION",
$ui->renderer()->render($vc));
525 $a_tpl->parseCurrentBlock();
545 #if ($this->getEnableEdit()) 557 include_once(
"./Services/News/classes/class.ilRSSButtonGUI.php");
559 $gui_path[] =
"ilcalendarsubscriptiongui";
561 $this->ctrl->getLinkTargetByClass($gui_path),
562 $lng->txt(
'ical_export'),
573 if (!isset(
$_GET[
"bkid"])) {
585 include_once
"Modules/Course/classes/class.ilCourseParticipants.php";
586 $obj_id = $ilObjDataCache->lookupObjId((
int)
$_GET[
'ref_id']);
588 $users = array_unique(array_merge($participants->getTutors(), $participants->getAdmins()));
590 include_once
'Services/Booking/classes/class.ilBookingEntry.php';
592 foreach (
$users as $user_id) {
593 if (!isset($_GET[
"bkid"])) {
594 include_once
'./Services/Calendar/classes/ConsultationHours/class.ilConsultationHourAppointments.php';
599 $next_app = end($appointments);
600 reset($appointments);
602 foreach ($appointments as $entry) {
607 include_once
'Services/Booking/classes/class.ilBookingEntry.php';
609 if (!in_array($obj_id, $booking_entry->getTargetObjIds())) {
613 if (!$booking_entry->isAppointmentBookableForUser($entry->getEntryId(),
$user->getId())) {
645 $this->cal_footer[] =
array(
646 'link' =>
$ilCtrl->getLinkTargetByClass($this->getTargetGUIClassPath(),
'selectCHCalendarOfUser'),
655 $ilCtrl->setParameter($this,
"bkid",
"");
656 $ilCtrl->setParameter($this,
'seed',
'');
658 $ilCtrl->setParameter($this,
"bkid",
"");
663 $ilCtrl->setParameter($this,
"bkid", (
int)
$_GET[
"bkid"]);
669 $ilCtrl->getLinkTarget($this,
"editSettings"),
670 $lng->txt(
"settings")
675 $ret = parent::getHTML();
681 $f = $DIC->ui()->factory()->legacy(
"");
682 $ret.= $DIC->ui()->renderer()->renderAsync($f);
697 include_once(
'./Services/Calendar/classes/class.ilCalendarSchedule.php');
699 $events = $schedule->getChangedEvents(
true);
701 $ilCtrl->setParameterByClass(
'ilcalendarinboxgui',
'changed', 1);
702 $link =
'<a href=' .
$ilCtrl->getLinkTargetByClass(
'ilcalendarinboxgui',
'') .
'>';
703 $ilCtrl->setParameterByClass(
'ilcalendarinboxgui',
'changed',
'');
704 $text =
'<div class="small">' . ((int) count($events)) .
" " .
$lng->txt(
"cal_changed_events_header") .
"</div>";
707 return $link .
$text . $end_link;
715 $a_content_block->addHeaderCommand(
716 $ilCtrl->getParentReturn($this),
737 elseif (!$cats->getMode()) {
740 (
int)
$_GET[
'ref_id'],
755 $ilTabs->clearSubTabs();
783 $ilCtrl->returnToParent($this);
797 $tpl =
new ilTemplate(
'tpl.show_calendar_subscription.html',
true,
true,
'Services/Calendar');
799 $tpl->setVariable(
'TXT_TITLE',
$lng->txt(
'cal_subscription_header'));
800 $tpl->setVariable(
'TXT_INFO',
$lng->txt(
'cal_subscription_info'));
801 $tpl->setVariable(
'TXT_CAL_URL',
$lng->txt(
'cal_subscription_url'));
803 include_once
'./Services/Calendar/classes/class.ilCalendarAuthenticationToken.php';
805 switch ($this->mode) {
822 $token->setCalendar($calendar);
823 $hash = $token->add();
825 $url = ILIAS_HTTP_PATH .
'/calendar.php?client_id=' . CLIENT_ID .
'&token=' . $hash;
827 $tpl->setVariable(
'VAL_CAL_URL',
$url);
828 $tpl->setVariable(
'VAL_CAL_URL_TXT',
$url);
830 include_once(
"./Services/PersonalDesktop/classes/class.ilPDContentBlockGUI.php");
832 $content_block->setContent(
$tpl->get());
833 $content_block->setTitle(
$lng->txt(
"calendar"));
834 $content_block->addHeaderCommand(
835 $this->ctrl->getParentReturn($this),
836 $lng->txt(
"selected_items_back")
839 return $content_block->getHTML();
845 foreach ((
array) $this->cal_footer as $link_info) {
846 $this->tpl->setCurrentBlock(
'data_section');
847 $this->tpl->setVariable(
849 sprintf(
'<a href="%s">%s</a>', $link_info[
'link'], $link_info[
'txt'])
851 $this->tpl->parseCurrentBlock();
857 $this->tpl->setVariable(
"FCOLSPAN", $this->
getColSpan());
858 if ($this->tpl->blockExists(
"block_footer")) {
859 $this->tpl->setCurrentBlock(
"block_footer");
860 $this->tpl->parseCurrentBlock();
877 $lng->txt(
"cal_upcoming_events_header"),
878 $ilCtrl->getLinkTarget($this,
"setPdModeEvents"),
879 $ilCtrl->getLinkTarget($this,
"setPdModeEvents",
"",
true),
883 ($this->display_mode !=
'mmon')
887 $lng->txt(
"app_month"),
888 $ilCtrl->getLinkTarget($this,
"setPdModeMonth"),
889 $ilCtrl->getLinkTarget($this,
"setPdModeMonth",
"",
true),
893 ($this->display_mode ==
'mmon')
898 $ilCtrl->setParameterByClass(
'ilcalendarpresentationgui',
'seed',
'');
900 $lng->txt(
"cal_open_calendar"),
908 $ilCtrl->setParameter($this,
"add_mode",
"");
910 $lng->txt(
"add_appointment"),
911 $ilCtrl->getLinkTargetByClass(
"ilCalendarAppointmentGUI",
"add"),
917 $ilCtrl->setParameter($this,
"add_mode",
"");
928 $ilUser->writePref(
"il_pd_cal_mode",
"evt");
929 $this->display_mode =
"evt";
934 $ilCtrl->redirectByClass(
"ilpersonaldesktopgui",
"show");
943 $ilUser->writePref(
"il_pd_cal_mode",
"mmon");
944 $this->display_mode =
"mmon";
949 $ilCtrl->redirectByClass(
"ilpersonaldesktopgui",
"show");
963 include_once(
'./Services/Calendar/classes/class.ilCalendarSchedule.php');
965 $schedule->addSubitemCalendars(
true);
966 $schedule->setEventsLimit(20);
967 $schedule->calculate();
968 $ev = $schedule->getScheduledEvents();
982 if (
sizeof($events)) {
983 foreach ($events as $item) {
984 $this->ctrl->setParameter($this,
"app_id", $item[
"event"]->getEntryId());
985 $this->ctrl->setParameter($this,
'dt', $item[
'dstart']);
986 $url = $this->ctrl->getLinkTarget($this,
"getModalForApp",
"",
true,
false);
987 $this->ctrl->setParameter($this,
"app_id",
$_GET[
"app_id"]);
988 $this->ctrl->setParameter($this,
"dt",
$_GET[
"dt"]);
989 $modal = $f->modal()->roundtrip(
'', [])->withAsyncRenderUrl(
$url);
993 $comps = [$f->button()->shy($item[
"event"]->getPresentationTitle(),
"")->withOnClick($modal->getShowSignal()), $modal];
994 $renderer =
$ui->renderer();
995 $shy = $renderer->render($comps);
999 "title" => $item[
"event"]->getPresentationTitle(),
1001 "shy_button" => $shy
1007 "date" =>
$lng->txt(
"msg_no_search_result"),
1026 $start = $item[
"dstart"];
1027 $end = $item[
"dend"];
1028 if ($item[
"fullday"]) {
1035 return array(
"start" => $start,
"end" =>
$end);
1049 $f =
$ui->factory();
1050 $r =
$ui->renderer();
1054 foreach ($events as $item) {
1055 if ($item[
"event"]->getEntryId() == (
int)
$_GET[
"app_id"] && $item[
'dstart'] == (
int)
$_GET[
'dt']) {
1059 include_once(
"./Services/Calendar/classes/class.ilCalendarAppointmentPresentationGUI.php");
1061 $content =
$ilCtrl->getHTML($next_gui);
1064 echo
$r->renderAsync($modal);
static _buildMonthDayList($a_month, $a_year, $weekstart)
Build a month day list.
Consultation hours editor.
getDatesForItem($item)
Get start/end date for item.
static _getInstance()
get singleton instance
static _numericDayToString($a_day, $a_long=true)
get
getShowWeeksColumn()
Show weeks column.
setDataSection($a_content)
Call this from overwritten fillDataSection(), if standard row based data is not used.
static getScreenMode()
Get Screen Mode for current command.
const MODE_PERSONAL_DESKTOP_MEMBERSHIP
static _lookupFullname($a_user_id)
Lookup Full Name.
static _getInstanceByUserId($a_user_id)
get singleton instance
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.
__construct()
Constructor.
static _getInstanceByObjId($a_obj_id)
Get singleton instance.
showCalendarSubscription()
if(!array_key_exists('StateId', $_REQUEST)) $id
setEnableEdit($a_enable_edit=0)
Set EnableEdit.
executeCommand()
execute command
static _getInstance(ilDate $seed, $a_app)
get singleton instance
fillFooterLinks($a_top=false, $a_numinfo="")
Fill footer links.
static getBlockType()
Get block type.
setEnableNumInfo($a_enablenuminfo)
Set Enable Item Number Info.
const MODE_REPOSITORY_CONTAINER_ONLY
getRepositoryMode()
Get RepositoryMode.
getModalForApp()
Get modal for appointment (see similar code in ilCalendarAgendaListGUI) todo use all this methods fro...
getHTML()
Get bloch HTML code.
setColSpan($a_colspan)
Set Columns Span.
initCategories()
init categories
static _equals(ilDateTime $start, ilDateTime $end, $a_compare_field='', $a_tz='')
Check if two date are equal.
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...
addFooterLink( $a_text, $a_href="", $a_onclick="", $a_block_id="", $a_top=false, $a_omit_separator=false, $a_checked=false)
Add a footer text/link.
returnToUpperContext()
Return to upper context.
fillDataSection()
Fill data section.
setTitle($a_title)
Set Title.
getForceMonthView()
Get force month view.
setBlockId($a_block_id=0)
Set Block Id.
static getAppointments($a_user_id)
Get all appointments.
static _lookupObjId($a_id)
date( 'd-M-Y', $objPHPExcel->getProperties() ->getCreated())
special template class to simplify handling of ITX/PEAR
setAvailableDetailLevels($a_max, $a_min=0)
Set Available Detail Levels.
getParentGUI()
Get parent gui.
addCloseCommand($a_content_block)
static _getInstance($a_usr_id=0)
get singleton instance
Create styles array
The data for the language used.
static _lookupType($a_id, $a_reference=false)
lookup object type
getBlockId()
Get Block Id.
addBlockCommand( $a_href, $a_text, $a_target="", $a_img="", $a_right_aligned=false, $a_checked=false, $a_html="")
Add Block Command.
setForceMonthView($a_val)
Set force month view.
setLimit($a_limit)
Set Limit.
getTargetGUIClassPath()
Get target gui class path (for presenting the calendar)
static formatPeriod(ilDateTime $start, ilDateTime $end, $a_skip_starting_day=false)
Format a period of two date Shows: 14.
Administrate calendar appointments.
Calendar blocks, displayed in different contexts, e.g.
getEnableEdit()
Get EnableEdit.
static lookupAuthToken($a_user_id, $a_selection, $a_calendar=0)
getColSpan()
Get Columns Span.
setParentGUI($a_val)
Set parent gui.
static isRepositoryObject()
Is this a repository object.
This class represents a block method of a block.
Handles calendar authentication tokens for external calendar subscriptions.
addMiniMonth($a_tpl)
Add mini version of monthly overview (Maybe extracted to another class, if used in pd calendar tab...
BlockGUI class for (centered) Content on Personal Desktop.
Add data(end) time
Method that wraps PHPs time in order to allow simulations with the workflow.
setSelectionType($a_type)
set selection type
fillDataSection()
Standard implementation for row based data.
getOverview()
Get overview.
setRowTemplate($a_rowtemplatename, $a_rowtemplatedir="")
Set Row Template Name.
static _isToday($date)
check if a date is today
getCurrentDetailLevel()
Get Current Detail Level.
Represents a list of calendar appointments (including recurring events) for a specific user in a give...
withOnLoadCode(\Closure $binder)
const MODE_PERSONAL_DESKTOP_ITEMS