4 require_once
"./Services/Object/classes/class.ilObjectGUI.php";
49 public function __construct($a_data, $a_id, $a_call_by_reference, $a_prepare_output =
true)
53 $this->tpl = $DIC[
"tpl"];
54 $this->tabs = $DIC->tabs();
55 $this->nav_history = $DIC[
"ilNavigationHistory"];
56 $this->help = $DIC[
"ilHelp"];
57 $this->ctrl = $DIC->ctrl();
58 $this->lng = $DIC->language();
60 parent::__construct($a_data, $a_id, $a_call_by_reference, $a_prepare_output);
61 $this->lng->loadLanguageModule(
"book");
63 $this->user_profile_id = (int)
$_GET[
"user_id"];
64 $this->book_obj_id = (int) $_REQUEST[
'object_id'];
68 $this->profile_user_id = (int)
$_GET[
'user_id'];
70 $this->user_id_assigner = $this->
user->getId();
72 $this->user_id_to_book = (int)
$_GET[
'bkusr'];
78 throw new ilException(
"Booking Object ID does not match Booking Pool.");
94 $next_class = $this->ctrl->getNextClass($this);
95 $cmd = $this->ctrl->getCmd();
97 if (!$next_class && $cmd ==
'render') {
98 if (
$ilUser->getId() != ANONYMOUS_USER_ID) {
99 $this->ctrl->setCmdClass(
'ilBookingObjectGUI');
100 $next_class = $this->ctrl->getNextClass($this);
102 $this->ctrl->redirect($this,
"infoscreen");
106 if (substr($cmd, 0, 4) ==
'book') {
110 $ilNavigationHistory->addItem(
112 "./goto.php?target=book_" . $this->ref_id,
118 switch ($next_class) {
119 case 'ilpermissiongui':
121 $this->tabs_gui->setTabActive(
'perm_settings');
122 include_once(
"Services/AccessControl/classes/class.ilPermissionGUI.php");
124 $ret = &$this->ctrl->forwardCommand($perm_gui);
127 case 'ilbookingobjectgui':
129 $this->ctrl->redirect($this,
"infoScreen");
132 $this->tabs_gui->setTabActive(
'render');
133 include_once(
"Modules/BookingManager/classes/class.ilBookingObjectGUI.php");
135 $ret = &$this->ctrl->forwardCommand($object_gui);
138 case 'ilbookingschedulegui':
140 $this->tabs_gui->setTabActive(
'schedules');
141 include_once(
"Modules/BookingManager/classes/class.ilBookingScheduleGUI.php");
143 $ret = &$this->ctrl->forwardCommand($schedule_gui);
146 case 'ilpublicuserprofilegui':
148 $ilTabs->clearTargets();
149 include_once(
"Services/User/classes/class.ilPublicUserProfileGUI.php");
151 $profile->setBackUrl($this->ctrl->getLinkTarget($this,
'log'));
152 $ret = $this->ctrl->forwardCommand($profile);
156 case 'ilinfoscreengui':
161 case "ilcommonactiondispatchergui":
163 include_once(
"Services/Object/classes/class.ilCommonActionDispatcherGUI.php");
165 $this->ctrl->forwardCommand($gui);
168 case "ilobjectcopygui":
170 include_once
"./Services/Object/classes/class.ilObjectCopyGUI.php";
172 $cp->setType(
"book");
173 $this->ctrl->forwardCommand($cp);
176 case 'ilobjectmetadatagui':
178 $this->tabs_gui->setTabActive(
'meta_data');
179 include_once
'Services/Object/classes/class.ilObjectMetaDataGUI.php';
181 $this->ctrl->forwardCommand($md_gui);
184 case 'ilbookingparticipantgui':
186 $this->tabs_gui->setTabActive(
'participants');
187 include_once(
"Modules/BookingManager/classes/class.ilBookingParticipantGUI.php");
189 $this->ctrl->forwardCommand($object_gui);
193 if (!in_array($cmd, [
"create",
"save",
"infoScreen"])) {
196 $cmd = $this->ctrl->getCmd();
208 $forms = parent::initCreationForms($a_new_type);
209 unset($forms[self::CFORM_IMPORT]);
216 $a_new_object->setOffline(
true);
220 ilUtil::sendSuccess($this->lng->txt(
"book_pool_added"),
true);
221 $this->ctrl->setParameter($this,
"ref_id", $a_new_object->
getRefId());
222 $this->ctrl->redirect($this,
"edit");
228 return parent::editObject();
240 include_once
"Modules/BookingManager/classes/class.ilBookingSchedule.php";
256 $type->setRequired(
true);
260 include_once
"Modules/BookingManager/classes/class.ilBookingObject.php";
262 $type->setDisabled(
true);
266 $fixed->
setInfo($this->lng->txt(
"book_schedule_type_fixed_info"));
267 $type->addOption($fixed);
271 $period =
new ilNumberInputGUI($this->lng->txt(
"book_reservation_filter_period"),
"period");
272 $period->
setInfo($this->lng->txt(
"book_reservation_filter_period_info"));
273 $period->setSuffix($this->lng->txt(
"days"));
275 $period->setMinValue(0);
276 $fixed->addSubItem($period);
280 $rmd->
setChecked($this->object->getReminderStatus());
281 $fixed->addSubItem($rmd);
283 $rmd_day =
new ilNumberInputGUI($this->lng->txt(
"book_reminder_day"),
"rmd_day");
285 $rmd_day->setInfo($this->lng->txt(
"book_reminder_day_info"));
286 $rmd_day->setSize(3);
287 $rmd_day->setSuffix($this->lng->txt(
"book_reminder_days"));
288 $rmd_day->setValue(max($this->object->getReminderDay(), 1));
289 $rmd_day->setMinValue(1);
290 $rmd->addSubItem($rmd_day);
293 $none->
setInfo($this->lng->txt(
"book_schedule_type_none_info"));
294 $type->addOption($none);
296 $limit =
new ilNumberInputGUI($this->lng->txt(
"book_overall_limit"),
"limit");
298 $limit->setMinValue(1);
299 $limit->setInfo($this->lng->txt(
"book_overall_limit_info"));
300 $none->addSubItem($limit);
303 $public->
setInfo($this->lng->txt(
"book_public_log_info"));
308 $pres->setTitle($this->lng->txt(
'obj_presentation'));
312 $obj_service->commonSettings()->legacyForm($a_form, $this->
object)->addTileImage();
316 $feat->setTitle($this->lng->txt(
'obj_features'));
322 $a_values[
"online"] = !$this->
object->isOffline();
323 $a_values[
"public"] = $this->
object->hasPublicLog();
324 $a_values[
"stype"] = $this->
object->getScheduleType();
325 $a_values[
"limit"] = $this->
object->getOverallLimit();
326 $a_values[
"period"] = $this->
object->getReservationFilterPeriod();
327 $a_values[
"rmd"] = $this->
object->getReminderStatus();
328 $a_values[
"rmd_day"] = $this->
object->getReminderDay();
335 $this->
object->setOffline(!$a_form->
getInput(
'online'));
336 $this->
object->setReminderStatus($a_form->
getInput(
'rmd'));
337 $this->
object->setReminderDay($a_form->
getInput(
'rmd_day'));
338 $this->
object->setPublicLog($a_form->
getInput(
'public'));
339 $this->
object->setScheduleType($a_form->
getInput(
'stype'));
340 $this->
object->setOverallLimit($a_form->
getInput(
'limit') ? $a_form->
getInput(
'limit') : null);
341 $this->
object->setReservationFilterPeriod(strlen($a_form->
getInput(
'period')) ? (
int) $a_form->
getInput(
'period') : null);
344 $obj_service->commonSettings()->legacyForm($a_form, $this->
object)->saveTileImage();
346 include_once
'./Services/Container/classes/class.ilContainer.php';
347 include_once
'./Services/Object/classes/class.ilObjectServiceSettingsGUI.php';
349 $this->object->getId(),
357 include_once
'./Services/Container/classes/class.ilContainer.php';
358 include_once
'./Services/Object/classes/class.ilObjectServiceSettingsGUI.php';
360 $this->object->getId(),
374 if (in_array($this->ctrl->getCmd(), array(
"create",
"save")) && !$this->ctrl->getNextClass()) {
378 $ilHelp->setScreenIdComponent(
"book");
381 if (
$ilUser->getId() != ANONYMOUS_USER_ID) {
382 $this->tabs_gui->addTab(
384 $this->lng->txt(
"book_booking_types"),
385 $this->ctrl->getLinkTarget($this,
"render")
389 $this->tabs_gui->addTab(
391 $this->lng->txt(
"info_short"),
392 $this->ctrl->getLinkTarget($this,
"infoscreen")
395 if (
$ilUser->getId() != ANONYMOUS_USER_ID || $this->
object->hasPublicLog()) {
396 $this->tabs_gui->addTab(
398 $this->lng->txt(
"book_log"),
399 $this->ctrl->getLinkTarget($this,
"log")
406 $this->tabs_gui->addTab(
408 $this->lng->txt(
"book_schedules"),
409 $this->ctrl->getLinkTargetByClass(
"ilbookingschedulegui",
"render")
413 $this->tabs_gui->addTab(
415 $this->lng->txt(
"settings"),
416 $this->ctrl->getLinkTarget($this,
"edit")
420 include_once
"Services/Object/classes/class.ilObjectMetaDataGUI.php";
422 $mdtab = $mdgui->getTab();
424 $this->tabs_gui->addTarget(
428 "ilobjectmetadatagui" 434 $this->tabs_gui->addTab(
436 $this->lng->txt(
"participants"),
437 $this->ctrl->getLinkTargetByClass(
"ilbookingparticipantgui",
"render")
442 $this->tabs_gui->addTab(
444 $this->lng->txt(
"perm_settings"),
445 $this->ctrl->getLinkTargetByClass(
"ilpermissiongui",
"perm")
458 $ilHelp->setScreenIdComponent(
'book');
459 $ilHelp->setScreenId(
'object' . $object_subtype);
460 $ilHelp->setSubScreenId($a_id);
470 $this->tabs_gui->clearTargets();
471 $this->tabs_gui->setBackTarget($this->lng->txt(
'book_back_to_list'), $this->ctrl->getLinkTarget($this,
'render'));
475 include_once
'Modules/BookingManager/classes/class.ilBookingObject.php';
478 $this->lng->loadLanguageModule(
"dateplaner");
479 $this->ctrl->setParameter($this,
'object_id', $obj->getId());
481 if ($this->user_id_to_book != $this->user_id_assigner) {
482 $this->ctrl->setParameter($this,
'bkusr', $this->user_id_to_book);
486 include_once
'Modules/BookingManager/classes/class.ilBookingSchedule.php';
489 $tpl->setContent($this->
renderSlots($schedule, array($obj->getId()), $obj->getTitle()));
491 include_once(
"./Services/Utilities/classes/class.ilConfirmationGUI.php");
493 $cgui->setHeaderText($this->lng->txt(
"book_confirm_booking_no_schedule"));
495 $cgui->setFormAction($this->ctrl->getFormAction($this));
496 $cgui->setCancel($this->lng->txt(
"cancel"),
"render");
497 $cgui->setConfirm($this->lng->txt(
"confirm"),
"confirmedBooking");
499 $cgui->addItem(
"object_id", $obj->getId(), $obj->getTitle());
505 $tpl->setContent($cgui->getHTML());
515 $mytpl =
new ilTemplate(
'tpl.booking_reservation_fix.html',
true,
true,
'Modules/BookingManager');
517 $mytpl->setVariable(
'FORM_ACTION', $this->ctrl->getFormAction($this));
518 $mytpl->setVariable(
'TXT_TITLE', $this->lng->txt(
'book_reservation_title'));
519 $mytpl->setVariable(
'TXT_INFO', $this->lng->txt(
'book_reservation_fix_info'));
520 $mytpl->setVariable(
'TXT_OBJECT',
$title);
521 $mytpl->setVariable(
'TXT_CMD_BOOK', $this->lng->txt(
'book_confirm_booking'));
522 $mytpl->setVariable(
'TXT_CMD_CANCEL', $this->lng->txt(
'cancel'));
524 include_once
'Services/Calendar/classes/class.ilCalendarUserSettings.php';
528 $morning_aggr = $user_settings->getDayStart();
529 $evening_aggr = $user_settings->getDayEnd();
531 for (
$i = $morning_aggr;
$i <= $evening_aggr;
$i++) {
532 switch ($user_settings->getTimeFormat()) {
534 if ($morning_aggr > 0 &&
$i == $morning_aggr) {
535 $hours[
$i] = sprintf(
'%02d:00', 0) .
"-";
537 $hours[
$i] .= sprintf(
'%02d:00',
$i);
538 if ($evening_aggr < 23 &&
$i == $evening_aggr) {
539 $hours[
$i] .=
"-" . sprintf(
'%02d:00', 23);
544 if ($morning_aggr > 0 &&
$i == $morning_aggr) {
545 $hours[
$i] = date(
'h a', mktime(0, 0, 0, 1, 1, 2000)) .
"-";
547 $hours[
$i] .= date(
'h a', mktime(
$i, 0, 0, 1, 1, 2000));
548 if ($evening_aggr < 23 &&
$i == $evening_aggr) {
549 $hours[
$i] .=
"-" . date(
'h a', mktime(23, 0, 0, 1, 1, 2000));
555 if ($this->seed !=
"") {
556 $find_first_open =
false;
559 $find_first_open =
true;
560 $seed = ($this->sseed !=
"")
565 include_once
'Services/Calendar/classes/class.ilCalendarUtil.php';
566 include_once
'Modules/BookingManager/classes/class.ilBookingReservation.php';
567 $week_start = $user_settings->getWeekStart();
569 if (!$find_first_open) {
576 $has_open_slot = $this->
buildDatesBySchedule($week_start, $hours, $schedule, $object_ids, $seed, $dates);
579 if (!$has_open_slot) {
581 $limit = clone($seed);
585 while (!$has_open_slot && $seed->get(
IL_CAL_UNIX) < $limit) {
589 $has_open_slot = $this->
buildDatesBySchedule($week_start, $hours, $schedule, $object_ids, $seed, $dates);
594 include_once
'Services/Calendar/classes/class.ilCalendarHeaderNavigationGUI.php';
596 $mytpl->setVariable(
'NAVIGATION', $navigation->getHTML());
601 $mytpl->setCurrentBlock(
'weekdays');
604 $mytpl->parseCurrentBlock();
607 include_once
'Services/Calendar/classes/class.ilCalendarAppointmentColors.php';
608 include_once
'Services/Calendar/classes/class.ilCalendarUtil.php';
611 for ($loop = 0; $loop < 7; $loop++) {
614 $color[$loop + 1] =
'border-bottom: 1px solid ' . $col .
'; background-color: ' . $col .
'; color: ' . $fnt;
618 foreach ($dates as $hour => $days) {
620 $caption = array_shift($caption);
622 for ($loop = 1; $loop < 8; $loop++) {
623 if (!isset($days[$loop])) {
624 $mytpl->setCurrentBlock(
'dates');
625 $mytpl->setVariable(
'DUMMY',
' ');
626 $mytpl->parseCurrentBlock();
628 if (isset($days[$loop][
'captions'])) {
629 foreach ($days[$loop][
'captions'] as $slot_id => $slot_caption) {
630 $mytpl->setCurrentBlock(
'choice');
631 $mytpl->setVariable(
'TXT_DATE', $slot_caption);
632 $mytpl->setVariable(
'VALUE_DATE', $slot_id);
633 $mytpl->setVariable(
'DATE_COLOR', $color[$loop]);
637 $this->lng->txt(
'book_reservation_available'),
638 $days[$loop][
'available'][$slot_id]
641 $mytpl->parseCurrentBlock();
644 $mytpl->setCurrentBlock(
'dates');
645 $mytpl->setVariable(
'DUMMY',
'');
646 $mytpl->parseCurrentBlock();
647 } elseif (isset($days[$loop][
'in_slot'])) {
648 $mytpl->setCurrentBlock(
'dates');
649 $mytpl->setVariable(
'DATE_COLOR', $color[$loop]);
650 $mytpl->parseCurrentBlock();
652 $mytpl->setCurrentBlock(
'dates');
653 $mytpl->setVariable(
'DUMMY',
' ');
654 $mytpl->parseCurrentBlock();
659 $mytpl->setCurrentBlock(
'slots');
660 $mytpl->setVariable(
'TXT_HOUR', $caption);
662 $mytpl->setVariable(
'CSS_ROW',
'tblrow1');
664 $mytpl->setVariable(
'CSS_ROW',
'tblrow2');
666 $mytpl->parseCurrentBlock();
676 return $mytpl->get();
679 protected function buildDatesBySchedule($week_start, array $hours, $schedule, array $object_ids, $seed, array &$dates)
683 include_once
'Services/Calendar/classes/class.ilCalendarUserSettings.php';
686 $map = array(
'mo',
'tu',
'we',
'th',
'fr',
'sa',
'su');
687 $definition = $schedule->getDefinition();
689 $av_from = ($schedule->getAvailabilityFrom() && !$schedule->getAvailabilityFrom()->isNull())
690 ? $schedule->getAvailabilityFrom()->get(
IL_CAL_DATE)
692 $av_to = ($schedule->getAvailabilityTo() && !$schedule->getAvailabilityTo()->isNull())
696 $has_open_slot =
false;
701 if ($av_from || $av_to) {
704 if ($av_from && $av_from > $today) {
708 if ($av_to && $av_to < $today) {
714 if (isset($definition[$map[$date_info[
'isoday'] - 1]])) {
716 foreach ($definition[$map[$date_info[
'isoday'] - 1]] as $slot) {
717 $slot = explode(
'-', $slot);
718 $slots[] = array(
'from' => str_replace(
':',
'', $slot[0]),
719 'to' => str_replace(
':',
'', $slot[1]));
723 $last = array_pop(array_keys($hours));
724 $slot_captions = array();
725 foreach ($hours as $hour => $period) {
726 $dates[$hour][0] = $period;
728 $period = explode(
"-", $period);
732 $period[0] = date(
"H", strtotime($period[0]));
733 if (
sizeof($period) == 2) {
734 $period[1] = date(
"H", strtotime($period[1]));
738 if (
sizeof($period) == 1) {
739 $period_from = (int) substr($period[0], 0, 2) .
"00";
740 $period_to = (int) substr($period[0], 0, 2) .
"59";
742 $period_from = (int) substr($period[0], 0, 2) .
"00";
743 $period_to = (int) substr($period[1], 0, 2) .
"59";
746 $column = $date_info[
'isoday'];
755 if (
sizeof($slots)) {
757 foreach ($slots as $slot) {
758 $slot_from = mktime(substr($slot[
'from'], 0, 2), substr($slot[
'from'], 2, 2), 0, $date_info[
"mon"], $date_info[
"mday"], $date_info[
"year"]);
759 $slot_to = mktime(substr($slot[
'to'], 0, 2), substr($slot[
'to'], 2, 2), 0, $date_info[
"mon"], $date_info[
"mday"], $date_info[
"year"]);
765 if (!array_sum($nr_available)) {
770 if ($schedule->getDeadline() >= 0) {
772 if ($slot_from < (time() + $schedule->getDeadline() * 60 * 60)) {
777 if ($slot_to < time()) {
783 if ((
int) $slot[
'from'] < $period_to && (int) $slot[
'to'] > $period_from) {
787 $to = array_pop(explode(
' ', $to));
790 $id = $slot_from .
'_' . $slot_to;
791 if (!in_array(
$id, $slot_captions)) {
792 $dates[$hour][$column][
'captions'][
$id] =
$from .
'-' . $to;
793 $dates[$hour][$column][
'available'][
$id] = array_sum($nr_available);
794 $slot_captions[] =
$id;
802 $has_open_slot =
true;
803 $dates[$hour][$column][
'in_slot'] =
$in;
809 return $has_open_slot;
819 include_once
'Modules/BookingManager/classes/class.ilBookingObject.php';
820 include_once
'Modules/BookingManager/classes/class.ilBookingReservation.php';
826 if ($this->book_obj_id > 0) {
827 $object_id = $this->book_obj_id;
836 $this->ctrl->redirect($this,
'render');
841 if (!isset(
$_POST[
'date'])) {
847 if ($this->book_obj_id > 0) {
850 $object_id = $this->book_obj_id;
856 foreach (
$_POST[
'date'] as $date) {
857 $fromto = explode(
'_', $date);
861 $counter = $counter[$object_id];
864 $confirm[$object_id .
"_" . $fromto[0] .
"_" . ($fromto[1] + 1)] = $counter;
869 if (
sizeof($confirm)) {
880 $this->ctrl->redirect($this,
'book');
886 ilUtil::sendSuccess($this->lng->txt(
'book_reservation_confirmed'),
true);
889 include_once
'Modules/BookingManager/classes/class.ilBookingObject.php';
891 $pfile = $obj->getPostFile();
892 $ptext = $obj->getPostText();
893 if (trim($ptext) || $pfile) {
894 if (
sizeof($a_rsv_ids)) {
895 $this->ctrl->setParameterByClass(
'ilbookingobjectgui',
'rsv_ids', implode(
";", $a_rsv_ids));
897 $this->ctrl->setParameterByClass(
'ilbookingobjectgui',
'object_id', $obj->getId());
898 $this->ctrl->redirectByClass(
'ilbookingobjectgui',
'displayPostInfo');
901 $this->ctrl->redirectByClass(
'ilbookingparticipantgui',
'render');
903 $this->ctrl->redirect($this,
'render');
910 include_once
'Services/Form/classes/class.ilPropertyFormGUI.php';
912 $form->setFormAction($this->ctrl->getFormAction($this,
"confirmedBooking"));
913 $form->setTitle($this->lng->txt(
"book_confirm_booking_schedule_number_of_objects"));
914 $form->setDescription($this->lng->txt(
"book_confirm_booking_schedule_number_of_objects_info"));
916 include_once
'Modules/BookingManager/classes/class.ilBookingObject.php';
919 foreach ($a_objects_counter as
$id => $counter) {
921 $book_id =
$id[0] .
"_" .
$id[1] .
"_" .
$id[2] .
"_" . $counter;
927 $section->setTitle($obj->getTitle());
940 $nr_field->setValue(1);
941 $nr_field->setSize(3);
942 $nr_field->setMaxValue($counter);
943 $nr_field->setMinValue($counter ? 1 : 0);
944 $nr_field->setRequired(
true);
945 $form->addItem($nr_field);
947 if (!$min_date ||
$id[1] < $min_date) {
953 $this->lng->loadLanguageModule(
"dateplaner");
954 $rec_mode =
new ilSelectInputGUI($this->lng->txt(
"cal_recurrences"),
"recm");
956 $rec_mode->setOptions(array(
957 "-1" => $this->lng->txt(
"cal_no_recurrence"),
958 1 => $this->lng->txt(
"cal_weekly"),
959 2 => $this->lng->txt(
"r_14"),
960 4 => $this->lng->txt(
"r_4_weeks")
962 $form->addItem($rec_mode);
966 $rec_mode->addSubItem($rec_end);
970 $rec_mode->setHideSubForm(
true,
'>= 1');
977 $rec_mode->setDisabled(
true);
978 $rec_end->setDisabled(
true);
983 $grp->setValue($a_group_id);
984 $form->addItem($grp);
987 if ($this->user_id_assigner != $this->user_id_to_book) {
989 $usr->setValue($this->user_id_to_book);
990 $form->addItem($usr);
993 $form->addCommandButton(
"confirmedBookingNumbers", $this->lng->txt(
"confirm"));
994 $form->addCommandButton(
"render", $this->lng->txt(
"cancel"));
1003 $this->tabs_gui->clearTargets();
1004 $this->tabs_gui->setBackTarget($this->lng->txt(
'book_back_to_list'), $this->ctrl->getLinkTarget($this,
'render'));
1010 $tpl->setContent($a_form->getHTML());
1015 $date = date_parse($a_date);
1016 $stamp = mktime(0, 0, 1, $date[
"month"], $date[
"day"] + $a_days, $date[
"year"]);
1017 return date(
"Y-m-d", $stamp);
1022 $date = getDate($a_stamp);
1028 $date[
"mday"] + $a_days,
1035 include_once
'Modules/BookingManager/classes/class.ilBookingReservation.php';
1036 include_once
'Modules/BookingManager/classes/class.ilBookingObject.php';
1040 $this->user_id_to_book = (int)
$_POST[
'bkusr'];
1045 $current_first =
$obj_id = null;
1047 if (substr($id, 0, 9) ==
"conf_nr__") {
1048 $id = explode(
"_", substr($id, 9));
1049 $counter[$id[0] .
"_" . $id[1] .
"_" . $id[2]] = (int) $id[3];
1050 if (!$current_first) {
1051 $current_first = date(
"Y-m-d", $id[1]);
1059 include_once
'Services/Calendar/classes/class.ilCalendarUtil.php';
1062 if ((
int)
$_POST[
"recm"] > 0 &&
$end && $current_first) {
1065 $cycle = (int)
$_POST[
"recm"] * 7;
1068 while ($cut < 1000 && $this->
addDaysDate($current_first, $cycle) <=
$end) {
1070 $current_first = null;
1071 foreach ($org as $item_id => $max) {
1072 $parts = explode(
"_", $item_id);
1081 if (!isset($counter[$new_item_id]) && date(
"Y-m-d", $to) <=
$end) {
1084 $new_max = (int) $new_max[
$obj_id];
1086 $counter[$new_item_id] = $new_max;
1088 if (!$current_first) {
1089 $current_first = date(
"Y-m-d",
$from);
1093 $_POST[
"conf_nr__" . $new_item_id .
"_" . $new_max] =
$_POST[
"conf_nr__" . $item_id .
"_" . $max];
1099 $group_id =
$_POST[
"grp_id"];
1102 if (
$form->checkInput()) {
1105 foreach ($counter as $id => $all_nr) {
1106 $book_nr =
$form->getInput(
"conf_nr__" . $id .
"_" . $all_nr);
1107 $parts = explode(
"_", $id);
1110 $to = $parts[2] - 1;
1117 $book_nr = min($book_nr, $counter);
1118 for ($loop = 0; $loop < $book_nr; $loop++) {
1129 $this->ctrl->redirect($this,
'render');
1134 $rece_array = explode(
".",
$_POST[
'rece']);
1136 $rece_day = str_pad($rece_array[0], 2,
"0", STR_PAD_LEFT);
1137 $rece_month = str_pad($rece_array[1], 2,
"0", STR_PAD_LEFT);
1138 $rece_year = $rece_array[2];
1143 $form->setValuesByPost();
1145 $rece_date =
new ilDate($rece_year .
"-" . $rece_month .
"-" . $rece_day,
IL_CAL_DATE);
1147 $form->getItemByPostVar(
"rece")->setDate($rece_date);
1148 $form->getItemByPostVar(
"recm")->setHideSubForm(
$_POST[
"recm"] < 1);
1151 $hidden_date->setValue($rece_date);
1152 $form->addItem($hidden_date);
1167 public function processBooking($a_object_id, $a_from = null, $a_to = null, $a_group_id = null)
1172 include_once
'Modules/BookingManager/classes/class.ilBookingReservation.php';
1174 $reservation->setObjectId($a_object_id);
1175 $reservation->setUserId($this->user_id_to_book);
1176 $reservation->setAssignerId($this->user_id_assigner);
1177 $reservation->setFrom($a_from);
1178 $reservation->setTo($a_to);
1179 $reservation->setGroupId($a_group_id);
1180 $reservation->save();
1183 $this->lng->loadLanguageModule(
'dateplaner');
1184 include_once
'Services/Calendar/classes/class.ilCalendarUtil.php';
1185 include_once
'Services/Calendar/classes/class.ilCalendarCategory.php';
1188 include_once
'Modules/BookingManager/classes/class.ilBookingObject.php';
1191 include_once
'Services/Calendar/classes/class.ilCalendarEntry.php';
1195 $entry->setTitle($this->lng->txt(
'book_cal_entry') .
' ' .
$object->getTitle());
1196 $entry->setContextId($reservation->getId());
1199 include_once
'Services/Calendar/classes/class.ilCalendarCategoryAssignments.php';
1204 return $reservation->getId();
1214 $this->tabs_gui->setTabActive(
'log');
1219 if ($this->book_obj_id > 0) {
1220 $filter[
"object"] = $this->book_obj_id;
1224 if (
$_GET[
'user_id']) {
1225 $filter[
"user_id"] = (int)
$_GET[
'user_id'];
1228 include_once
'Modules/BookingManager/classes/class.ilBookingReservationsTableGUI.php';
1233 $this->object->getId(),
1245 $this->tabs_gui->clearTargets();
1246 $this->tabs_gui->setBackTarget(
1247 $this->lng->txt(
"back"),
1248 $this->ctrl->getLinkTarget($this,
"log")
1254 if ($this->book_obj_id > 0) {
1255 $filter[
"object"] = $this->book_obj_id;
1258 include_once
'Modules/BookingManager/classes/class.ilBookingReservationsTableGUI.php';
1263 $this->object->getId(),
1267 $this->reservation_id
1277 $this->tabs_gui->setTabActive(
'log');
1279 if (!
$_POST[
'reservation_id']) {
1285 include_once
'Modules/BookingManager/classes/class.ilBookingReservation.php';
1289 ilUtil::sendSuccess($this->lng->txt(
'settings_saved'),
true);
1290 return $this->ctrl->redirect($this,
'log');
1300 include_once
'Modules/BookingManager/classes/class.ilBookingReservationsTableGUI.php';
1305 $this->object->getId(),
1310 $table->writeFilterToSession();
1321 include_once
'Modules/BookingManager/classes/class.ilBookingReservationsTableGUI.php';
1326 $this->object->getId(),
1339 $ilAccess = $DIC->access();
1340 $lng = $DIC->language();
1342 if ($ilAccess->checkAccess(
"read",
"", $a_target)) {
1344 } elseif ($ilAccess->checkAccess(
"read",
"", ROOT_FOLDER_ID)) {
1346 $lng->txt(
"msg_no_perm_read_item"),
1360 $this->ctrl->setCmd(
"showSummary");
1361 $this->ctrl->setCmdClass(
"ilinfoscreengui");
1369 $this->tabs_gui->setTabActive(
'info');
1373 include_once(
"./Services/InfoScreen/classes/class.ilInfoScreenGUI.php");
1376 $info->enablePrivateNotes();
1379 $info->enableNews();
1383 $info->enableNewsEditing(
false);
1386 $enable_internal_rss = $news_set->get(
"enable_rss_for_internal");
1388 if ($enable_internal_rss) {
1389 $info->setBlockProperty(
"news",
"settings",
true);
1390 $info->setBlockProperty(
"news",
"public_notifications_option",
true);
1395 if (
$ilCtrl->getNextClass() ==
"ilinfoscreengui") {
1406 } elseif ($this->reservation_id > 0) {
1407 return array($this->reservation_id);
1419 if (!is_array($ids) || !
sizeof($ids)) {
1420 $this->ctrl->redirect($this,
'log');
1423 include_once
'Modules/BookingManager/classes/class.ilBookingObject.php';
1424 include_once
'Modules/BookingManager/classes/class.ilBookingReservation.php';
1427 foreach ($ids as $idx =>
$id) {
1428 if (!is_numeric(
$id)) {
1431 $valid_ids = array();
1433 $valid_ids[$item[
"booking_object_id"]] = $item[
"title"];
1438 in_array(
$obj_id, array_keys($valid_ids))) {
1440 if (!
sizeof($rsv_ids)) {
1443 if (
sizeof($rsv_ids) > 1) {
1444 $max[
$id] =
sizeof($rsv_ids);
1445 $ids[$idx] = $rsv_ids;
1448 $ids[$idx] = array_shift($rsv_ids);
1456 if (!is_array($ids) || !
sizeof($ids)) {
1457 $this->ctrl->redirect($this,
'log');
1461 if (
sizeof($max) && max($max) > 1) {
1465 $this->tabs_gui->clearTargets();
1466 $this->tabs_gui->setBackTarget(
1468 $ilCtrl->getLinkTarget($this,
"log")
1473 include_once
'Services/Utilities/classes/class.ilConfirmationGUI.php';
1475 $conf->setFormAction(
$ilCtrl->getFormAction($this,
'rsvCancel'));
1476 $conf->setHeaderText(
$lng->txt(
'book_confirm_cancel'));
1477 $conf->setConfirm(
$lng->txt(
'book_set_cancel'),
'rsvCancel');
1478 $conf->setCancel(
$lng->txt(
'cancel'),
'log');
1480 foreach ($ids as
$id) {
1492 $conf->addItem(
'rsv_id[]', $id, $details);
1495 $tpl->setContent($conf->getHTML());
1500 include_once
'Services/Form/classes/class.ilPropertyFormGUI.php';
1502 $form->setFormAction($this->ctrl->getFormAction($this,
"rsvCancel"));
1503 $form->setTitle($this->lng->txt(
"book_confirm_cancel_aggregation"));
1505 include_once
'Modules/BookingManager/classes/class.ilBookingObject.php';
1506 include_once
'Modules/BookingManager/classes/class.ilBookingReservation.php';
1510 foreach ($a_ids as $idx => $ids) {
1511 if (is_array($ids)) {
1513 $first = array_shift($first);
1527 if (is_array($ids)) {
1528 $caption .=
" (" .
sizeof($ids) .
")";
1532 $item->setRequired(
true);
1533 $item->setMinValue(0);
1535 $form->addItem($item);
1537 if (is_array($ids)) {
1538 $item->setMaxValue(
sizeof($ids));
1540 foreach ($ids as
$id) {
1542 $hidden->setValue($id);
1543 $form->addItem($hidden);
1546 $item->setMaxValue(1);
1549 $hidden->setValue($ids);
1550 $form->addItem($hidden);
1553 if (
$_POST[
"rsv_id_" . $idx]) {
1554 $item->setValue((
int)
$_POST[
"rsv_id_" . $idx]);
1558 $form->addCommandButton(
"rsvCancel", $this->lng->txt(
"confirm"));
1559 $form->addCommandButton(
"log", $this->lng->txt(
"cancel"));
1570 $this->tabs_gui->clearTargets();
1571 $this->tabs_gui->setBackTarget(
1573 $ilCtrl->getLinkTarget($this,
"log")
1583 $tpl->setContent($form->getHTML());
1596 if (
$_POST[
"rsv_aggr"]) {
1598 if (!
$form->checkInput()) {
1599 $this->tabs_gui->clearTargets();
1600 $this->tabs_gui->setBackTarget(
1602 $ilCtrl->getLinkTarget($this,
"log")
1605 return $tpl->setContent(
$form->getHTML());
1609 foreach (
$_POST[
"rsv_aggr"] as $idx => $aggr_ids) {
1610 $max = (int)
$_POST[
"rsv_id_" . $idx];
1612 if (!is_array($aggr_ids)) {
1615 $aggr_ids = array_slice($aggr_ids, 0, $max);
1616 $ids = array_merge($ids, $aggr_ids);
1623 include_once
'Modules/BookingManager/classes/class.ilBookingReservation.php';
1624 foreach ($ids as
$id) {
1629 $this->ctrl->redirect($this,
'log');
1637 $cal_entry_id = $obj->getCalendarEntry();
1638 if ($cal_entry_id) {
1639 include_once
'Services/Calendar/classes/class.ilCalendarEntry.php';
1647 ilUtil::sendSuccess($this->lng->txt(
'settings_saved'));
1656 $this->ctrl->redirect($this,
'log');
1659 $this->tabs_gui->clearTargets();
1660 $this->tabs_gui->setBackTarget(
1661 $this->lng->txt(
"back"),
1662 $this->ctrl->getLinkTarget($this,
"log")
1665 include_once
'Services/Utilities/classes/class.ilConfirmationGUI.php';
1667 $conf->setFormAction($this->ctrl->getFormAction($this,
'rsvDelete'));
1668 $conf->setHeaderText($this->lng->txt(
'book_confirm_delete'));
1669 $conf->setConfirm($this->lng->txt(
'book_set_delete'),
'rsvDelete');
1670 $conf->setCancel($this->lng->txt(
'cancel'),
'log');
1672 list(
$obj_id, $user_id,
$from, $to) = explode(
"_", $DIC->http()->request()->getQueryParams()[
'reservation_id']);
1677 $details = sprintf($this->lng->txt(
'X_reservations_of'), count($ids)) .
' ' . $obj->
getTitle();
1685 $conf->addItem(
'rsv_ids', implode(
',', $ids), $details);
1686 $this->tpl->setContent($conf->getHTML());
1692 $get = $DIC->http()->request()->getParsedBody()[
'rsv_ids'];
1694 include_once
'Modules/BookingManager/classes/class.ilBookingReservation.php';
1695 foreach (explode(
',', $get) as
$id) {
1698 if ($obj->getPoolId() != $this->
object->getId() || !$this->
checkPermissionBool(
"write")) {
1700 $this->ctrl->redirect($this,
'log');
1703 $cal_entry_id =
$res->getCalendarEntry();
1704 if ($cal_entry_id) {
1705 include_once
'Services/Calendar/classes/class.ilCalendarEntry.php';
1714 ilUtil::sendSuccess($this->lng->txt(
'reservation_deleted'));
1724 include_once
'Modules/BookingManager/classes/class.ilBookingReservation.php';
1725 foreach ($ids as
$id) {
1732 ilUtil::sendSuccess($this->lng->txt(
'settings_saved'));
1742 include_once
'Modules/BookingManager/classes/class.ilBookingReservation.php';
1743 foreach ($ids as
$id) {
1745 $obj->setStatus(null);
1750 ilUtil::sendSuccess($this->lng->txt(
'settings_saved'));
1759 $this->tabs_gui->clearTargets();
1761 $user_id = $this->profile_user_id;
1763 include_once
'Services/User/classes/class.ilPublicUserProfileGUI.php';
1765 $profile->setBackUrl($this->ctrl->getLinkTarget($this,
'log'));
1773 if (is_object($this->
object)) {
1774 $ilLocator->addItem($this->object->getTitle(), $this->ctrl->getLinkTarget($this,
"render"),
"", $this->
object->getRefId());
1788 $lng->loadLanguageModule(
"noti");
1790 $lg = parent::initHeaderAction($a_sub_type, $a_sub_id);
1792 if (
$lg &&
$access->checkAccess(
"read",
"", $this->ref_id)) {
1799 $lng->txt(
"noti_notification_deactivated")
1802 $ctrl->setParameter($this,
"ntf", 1);
1803 $caption =
"noti_activate_notification";
1808 $lng->txt(
"noti_notification_activated")
1811 $ctrl->setParameter($this,
"ntf", 0);
1812 $caption =
"noti_deactivate_notification";
1815 $lg->addCustomCommand(
1816 $ctrl->getLinkTarget($this,
"saveNotification"),
1820 $ctrl->setParameter($this,
"ntf",
"");
1836 switch (
$_GET[
"ntf"]) {
1845 $ctrl->redirect($this,
"render");
1852 include_once(
"./Modules/BookingManager/classes/class.ilBookingParticipant.php");
1862 $participants =
$_POST[
"mass"];
1864 $this->ctrl->redirectByClass(
'ilbookingobjectgui',
'render');
1867 $this->tabs->clearTargets();
1868 $this->ctrl->setParameterByClass(
'ilbookingobjectgui',
'object_id', $this->book_obj_id);
1869 $this->tabs->setBackTarget($this->lng->txt(
"back"), $this->ctrl->getLinkTargetByClass(
'ilbookingobjectgui',
'assignparticipants'));
1870 $this->ctrl->setParameterByClass(
'ilbookingobjectgui',
'object_id',
'');
1873 $conf->setFormAction($this->ctrl->getFormAction($this));
1876 foreach ($participants as
$id) {
1878 $conf->addItem(
"participants[]", $id,
$name);
1882 if (
sizeof($participants) > $available) {
1884 $conf->setHeaderText(
1886 $this->lng->txt(
'book_limit_objects_available'),
1887 sizeof($participants),
1893 $conf->setHeaderText($this->lng->txt(
'book_confirm_booking_no_schedule'));
1894 $conf->addHiddenItem(
"object_id", $this->book_obj_id);
1895 $conf->setConfirm($this->lng->txt(
"assign"),
"saveMultipleBookings");
1898 $conf->setCancel($this->lng->txt(
"cancel"),
'redirectToList');
1899 $this->tpl->setContent($conf->getHTML());
1904 $this->ctrl->setParameterByClass(
'ilbookingobjectgui',
'object_id', $this->book_obj_id);
1905 $this->ctrl->redirectByClass(
'ilbookingobjectgui',
'assignParticipants');
1915 $participants =
$_POST[
"participants"];
1916 $this->book_obj_id =
$_POST[
'object_id'];
1918 $this->ctrl->redirectByClass(
'ilbookingobjectgui',
'render');
1921 foreach ($participants as
$id) {
1922 $this->user_id_to_book =
$id;
1926 if (
sizeof($rsv_ids)) {
1927 ilUtil::sendSuccess(
"booking_multiple_succesfully");
1928 $this->ctrl->redirectByClass(
'ilbookingobjectgui',
'render');
1931 $this->ctrl->redirect($this,
'render');
applyLogFilterObject()
Apply filter from reservations table gui.
Class ilObjBookingPoolGUI.
This class represents an option in a radio group.
Model for a calendar entry.
renderSlots(ilBookingSchedule $schedule, array $object_ids, $title)
static hasNotification($type, $user_id, $id)
Check notification status for object and user.
Class ilBookingParticipant.
static _getColorsByType($a_type)
get selectable colors
getEditFormCustomValues(array &$a_values)
static getList($a_pool_id, $a_title=null)
Get list of booking objects for given type.
static _numericDayToString($a_day, $a_long=true)
get
static isObjectAvailableNoSchedule($a_obj_id)
GUI class for the workflow of copying objects.
bookObject()
First step in booking process.
handleBookingSuccess($a_obj_id, array $a_rsv_ids=null)
static getNewGroupId()
Get next group id.
static _lookupFullname($a_user_id)
Lookup Full Name.
static _getInstanceByUserId($a_user_id)
get singleton instance
buildDatesBySchedule($week_start, array $hours, $schedule, array $object_ids, $seed, array &$dates)
schedule for booking ressource
getRaster()
Get booking raster.
if(!array_key_exists('StateId', $_REQUEST)) $id
static _gotoRepositoryRoot($a_raise_error=false)
Goto repository root.
saveMultipleBookingsObject()
Save multiple users reservations for one booking pool object.
static setUseRelativeDates($a_status)
set use relative dates
initHeaderAction($a_sub_type=null, $a_sub_id=null)
static _lookupTitle($a_id)
lookup object title
saveNotificationObject()
Save notification.
static _buildWeekDayList($a_day, $a_weekstart)
build week day list
updateCustom(ilPropertyFormGUI $a_form)
addDaysStamp($a_stamp, $a_days)
initBookingNumbersForm(array $a_objects_counter, $a_group_id, $a_reload=false)
setInfo($a_info)
Set Info.
static formatDate(ilDateTime $date, $a_skip_day=false, $a_include_wd=false, $include_seconds=false)
Format a date public.
initCreationForms($a_new_type)
static _numericMonthToString($a_month, $a_long=true)
numeric month to string
__construct($a_data, $a_id, $a_call_by_reference, $a_prepare_output=true)
Constructor.
static sendInfo($a_info="", $a_keep=false)
Send Info Message to Screen.
Class ilBookingParticipantGUI.
rsvConfirmCancelAggregationForm($a_ids)
static getNrOfItemsForObjects(array $a_obj_ids)
Get nr of available items.
prepareOutput($a_show_subobjects=true)
prepare output
GUI class for public user profile presentation.
getTitle()
Get object title.
static getObjectReservationForUser($a_object_id, $a_user_id, $a_multi=false)
Class ilBookingObjectGUI.
foreach($_POST as $key=> $value) $res
if(isset($_POST['submit'])) $form
static _gotoRepositoryNode($a_ref_id, $a_cmd="frameset")
Goto repository root.
static getImagePath($img, $module_path="", $mode="output", $offline=false)
get image path (for images located in a template directory)
Class ilObjectGUI Basic methods of all Output classes.
static _lookupObjId($a_id)
special template class to simplify handling of ITX/PEAR
processBooking($a_object_id, $a_from=null, $a_to=null, $a_group_id=null)
Book object for date.
static setNotification($type, $user_id, $id, $status=true)
Set notification status for object and user.
confirmedBookingObject()
Book object - either of type or specific - for given dates.
static calculateFontColor($a_html_color_code)
Calculate best font color from html hex color code.
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
initEditCustomForm(ilPropertyFormGUI $a_form)
static sendQuestion($a_info="", $a_keep=false)
Send Question to Screen.
static updateServiceSettingsForm($a_obj_id, ilPropertyFormGUI $form, $services)
Update service settings.
rsvConfirmCancelAggregationObject(array $a_ids=null)
static getAvailableObject(array $a_ids, $a_from, $a_to, $a_return_single=true, $a_return_counter=false)
Check if any of given objects are bookable.
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
addAssignment($a_cal_cat_id)
add assignment
static lookupPoolId($object_id)
Lookup pool id.
addDaysDate($a_date, $a_days)
if(php_sapi_name() !='cli') $in
afterSave(ilObject $a_new_object)
static formatPeriod(ilDateTime $start, ilDateTime $end, $a_skip_starting_day=false)
Format a period of two date Shows: 14.
bookMultipleParticipantsObject()
Create reservations for a bunch of booking pool participants.
confirmedBookingNumbersObject()
Class ilBookingScheduleGUI.
logObject()
List reservations.
static initServiceSettingsForm($a_obj_id, ilPropertyFormGUI $form, $services)
Init service settings form.
static initDefaultCalendarByType($a_type_id, $a_usr_id, $a_title, $a_create=false)
Init the default calendar for given type and user.
addExternalEditFormCustom(ilPropertyFormGUI $a_form)
getRefId()
get reference id public
resetLogFilterObject()
Reset filter in reservations table gui.
static numAvailableFromObjectNoSchedule($a_obj_id)
checkPermission($a_perm, $a_cmd="", $a_type="", $a_ref_id=null)
Check permission and redirect on error.
New PermissionGUI (extends from old ilPermission2GUI) RBAC related output.
confirmBookingNumbers(array $a_objects_counter, $a_group_id, ilPropertyFormGUI $a_form=null)
static getCancelDetails($a_obj_id, $a_user_id, $a_from, $a_to)
Get reservation ids from aggregated id for cancellation.
getObjectService()
Get object service.
if(empty($password)) $table
update()
update object in db
static changeStatus(array $a_ids, $a_status)
List all reservations.
addHeaderAction()
Add header action menu.
infoScreenObject()
this one is called from the info button in the repository not very nice to set cmdClass/Cmd manually...
static getList($a_pool_id)
Get list of booking objects for given pool.
checkPermissionBool($a_perm, $a_cmd="", $a_type="", $a_ref_id=null)
Check permission.
showNoScheduleMessage()
Show no schedule message.
changeStatusObject()
Change status of given reservations.
static parseIncomingDate($a_value, $a_add_time=null)
Try to parse incoming value to date object.
static getInstanceFromAjaxCall()
(Re-)Build instance from ajax call
Confirmation screen class.