36 protected \ILIAS\BookingManager\Access\AccessManager
$access;
59 ?array $a_filter_pre =
null,
60 ?
int $a_group_id =
null,
71 $this->
ctrl = $DIC->ctrl();
72 $this->
lng = $DIC->language();
73 $this->
user = $DIC->user();
74 $this->
access = $DIC->bookingManager()->internal()->domain()->access();
75 $ilCtrl =
$DIC->ctrl();
77 $ilUser =
$DIC->user();
78 $this->tree =
$DIC->repositoryTree();
79 $this->reservation_repo =
$DIC->bookingManager()
83 $this->schedule_manager =
$DIC
87 ->schedules($a_pool_id);
90 $this->pool_id = $a_pool_id;
91 $this->ref_id = $a_ref_id;
92 $this->show_all = $a_show_all;
93 $this->has_schedule = $a_has_schedule;
94 $this->group_id = $a_group_id;
96 $this->table_repo =
$DIC->bookingManager()
103 $this->
setId(
"bkrsv" . $a_ref_id);
112 $this->
lng->loadLanguageModule(
"crs");
117 if ($this->has_schedule) {
118 $this->
lng->loadLanguageModule(
"dateplaner");
121 if (in_array(
"week", $selected,
true)) {
123 unset($cols[
"week"]);
125 if (in_array(
"weekday", $selected,
true)) {
126 $this->
addColumn($this->
lng->txt(
"cal_weekday"),
"weekday");
127 unset($cols[
"weekday"]);
129 $this->
addColumn($this->
lng->txt(
"book_schedule_slot"),
"slot");
130 $this->
addColumn($this->
lng->txt(
"book_no_of_objects"),
"counter");
147 if (array_key_exists($col, $cols)) {
148 if (!isset($user_cols[$col])) {
149 $this->
addColumn($cols[$col][
"txt"], $col);
155 if ($this->group_id) {
158 $this->filters = array();
164 if ($this->has_items_with_host_context) {
165 $this->
addColumn($this->
lng->txt(
"book_booked_in"),
"context_obj_title");
172 if (isset($cols[$col][
"txt"], $user_cols[$col])) {
173 $this->
addColumn($cols[$col][
"txt"], $col);
180 $this->
setFormAction($ilCtrl->getFormAction($a_parent_obj, $a_parent_cmd));
181 $this->
setRowTemplate(
"tpl.booking_reservation_row.html",
"components/ILIAS/BookingManager/Reservations");
187 if ($this->
access->canManageAllReservations($this->ref_id) ||
188 $this->access->canManageOwnReservations($this->ref_id)) {
191 if ($this->
access->canManageAllReservations($this->ref_id)) {
201 return $this->pool->usesMessages() && $this->
access->canManageAllReservations($this->ref_id);
208 if ($this->has_schedule) {
209 $this->
lng->loadLanguageModule(
'dateplaner');
211 $cols[
'week'] = [
'txt' => $this->
lng->txt(
'wk_short'),
'default' =>
true];
212 $cols[
'weekday'] = [
'txt' => $this->
lng->txt(
'cal_weekday'),
'default' =>
true];
215 foreach ($this->advmd as $field) {
216 $cols[
"advmd{$field['id']}"] = [
'txt' => $field[
'title'],
'default' =>
false];
229 if ($this->
access->canManageMembersOfParent($this->ref_id)) {
230 $parent = $this->
access->getParentGroupCourse($this->ref_id);
233 if ($k !==
"login") {
246 if (isset($user_cols[$col])) {
254 ?array $a_filter_pre =
null
256 if (is_array($a_filter_pre) &&
257 isset($a_filter_pre[
"object"])) {
258 $this->table_repo->setObjectFilter(
260 serialize($a_filter_pre[
"object"])
264 $this->objects = array();
266 $this->objects[$item[
"booking_object_id"]] = $item[
"title"];
269 if ($item !==
null) {
270 $item->setOptions(array(
"" => $this->
lng->txt(
'book_all')) + $this->objects);
271 $this->
filter[
"object"] = $item->getValue();
276 $this->
lng->txt(
"object") .
" " . $this->lng->txt(
"title") .
"/" . $this->lng->txt(
"description")
282 if ($this->has_schedule) {
284 if (!$this->table_repo->hasFromToFilter($this->getId())) {
290 $period = $bpool->getReservationFilterPeriod();
291 if ($period !==
null) {
296 $to = serialize($to);
299 $this->table_repo->setFromToFilter(
302 "from" => serialize($from),
311 $this->
lng->txt(
'book_fromto')
313 $this->
filter[
"fromto"] = $item->getDate();
316 if ($this->show_all) {
318 $map = array_flip(array(
'su',
'mo',
'tu',
'we',
'th',
'fr',
'sa'));
320 $options = array(
"" => $this->
lng->txt(
'book_all'));
323 foreach ($this->schedule_manager->getScheduleList() as
$id =>
$title) {
325 foreach ($schedule->getDefinition() as $day => $slots) {
328 foreach ($slots as $slot) {
329 $idx = $map[$day] .
"_" . $slot;
330 $options[$idx] = $day_caption .
", " . $slot;
339 $this->
filter[
"slot"] = $item->getValue();
345 $item->readFromSession();
349 if (isset($this->
filter[
"fromto"][
"from"]) &&
351 $item->setChecked(
true);
354 $this->
filter[
"past"] = $item->getChecked();
360 if (!$this->has_schedule) {
361 $options = array(
"" => $this->
lng->txt(
'book_all'));
365 foreach ($valid_status as $loop) {
367 $options[$loop] = $this->
lng->txt(
'book_reservation_status_' . $loop);
369 $options[$loop] = $this->
lng->txt(
'book_not') .
' ' . $this->
lng->txt(
'book_reservation_status_' . -$loop);
374 $this->
filter[
"status"] = $item->getValue();
377 if ($this->show_all) {
378 $options = array(
"" => $this->
lng->txt(
'book_all')) +
382 if (is_array($a_filter_pre) && isset($a_filter_pre[
"user_id"])) {
383 $item->setValue($a_filter_pre[
"user_id"]);
384 $this->
filter[
"user_id"] = $a_filter_pre[
"user_id"];
386 $this->
filter[
"user_id"] = $item->getValue();
398 if ($this->
filter[
"object"]) {
399 $filter[
"object"] = $this->
filter[
"object"];
401 if ($this->
filter[
"title"]) {
402 $filter[
"title"] = $this->
filter[
"title"];
404 if ($this->
filter[
"status"]) {
405 $filter[
"status"] = $this->
filter[
"status"];
407 if (isset($this->
filter[
"user_id"])) {
408 $filter[
"user_id"] = $this->
filter[
"user_id"];
410 if (!is_null($this->context_obj_ids)) {
411 $filter[
"context_obj_ids"] = $this->context_obj_ids;
414 if ($this->has_schedule) {
415 if (!isset($filter[
"status"])) {
419 if (isset($this->
filter[
"slot"])) {
420 $filter[
"slot"] = $this->
filter[
"slot"];
423 if ($this->
filter[
"fromto"][
"from"] || $this->
filter[
"fromto"][
"to"]) {
424 if ($this->
filter[
"fromto"][
"from"]) {
427 if ($this->
filter[
"fromto"][
"to"]) {
436 $filter[
"past"] = (bool) $this->
filter[
"past"];
443 return in_array($a_field, array(
"counter",
"date",
"week",
"weekday"));
451 $ilUser = $this->user;
453 $this->has_items_with_host_context =
false;
455 if (!isset($filter[
"object"])) {
456 $ids = array_keys($this->objects);
458 $ids = array($filter[
"object"]);
461 if (!$this->show_all) {
462 $filter[
"user_id"] = $ilUser->getId();
465 $repo = $this->reservation_repo;
466 $data = $repo->getListByDate($this->has_schedule, $ids, $filter);
476 $this->record_gui->setTableGUI($this);
477 $this->record_gui->parse();
479 foreach (array_keys(
$data) as $idx) {
480 $data[$idx][
"pool_id"] = $this->pool_id;
492 $this->record_gui->getFilterElements()
496 if (count($this->getSelectedUserColumns()) > 0) {
498 $user_ids = array_unique(array_map(
static function (
$d) {
499 return $d[
'user_id'];
504 foreach ($this->getSelectedUserColumns() as $field) {
505 if (str_starts_with($field,
'odf')) {
506 $odf_ids[] = (
int) substr($field, 4);
510 $user_columns[] = $field;
514 $user_columns = array_diff(
516 [
'consultation_hour',
'prtf',
'roles',
'org_units']
521 $query->setLimit(9999);
522 $query->setAdditionalFields($user_columns);
523 $query->setUserFilter($user_ids);
524 $ud = $query->query();
526 foreach ($ud[
"set"] as $v) {
527 foreach ($user_columns as
$c) {
528 $usr_data[$v[
"usr_id"]][
$c] = $v[
$c];
531 foreach (
$data as $key => $v) {
532 if (isset($usr_data[$v[
"user_id"]])) {
533 $data[$key] = array_merge($v, $usr_data[$v[
"user_id"]]);
538 if ($odf_ids !== []) {
539 $parent = $this->
access->getParentGroupCourse($this->ref_id);
544 $confirmation_required = $parent_obj_type ===
'crs'
545 ? $privacy_settings->courseConfirmationRequired()
546 : $privacy_settings->groupConfirmationRequired();
547 if ($confirmation_required) {
552 foreach ($odf_data as $usr_id => $fields) {
553 if (in_array($usr_id, $user_ids,
true)) {
554 foreach ($fields as $field_id => $value) {
555 if (in_array($field_id, $odf_ids,
true)) {
556 $usr_data[$usr_id][
"odf_{$field_id}"] = $value;
562 foreach (
$data as $key => $v) {
563 if (isset($usr_data[$v[
'user_id']])) {
564 $data[$key] = array_merge($v, $usr_data[$v[
'user_id']]);
571 if (
$d[
"context_obj_id"] > 0) {
572 $this->has_items_with_host_context =
true;
577 $this->setData(
$data);
582 return $this->record_gui;
587 $field = parent::getOrderField();
590 if (in_array($field, array(
"date",
"week"))) {
591 $field =
"_sortdate";
597 protected function fillRow(array $a_set): void
600 $ilAccess = $this->access;
601 $ilCtrl = $this->ctrl;
602 $ilUser = $this->user;
603 $f = $this->gui->ui()->factory();
605 $selected = $this->getSelectedColumns();
609 if ($this->has_items_with_host_context) {
610 $this->tpl->setCurrentBlock(
"context");
611 $this->tpl->setVariable(
"VALUE_CONTEXT_TITLE", ($a_set[
"context_obj_title"] ??
"") .
" ");
612 $this->tpl->parseCurrentBlock();
615 $this->tpl->setVariable(
"TXT_TITLE", $a_set[
"title"]);
617 $can_be_cancelled = ($this->
access->canManageReservationForUser($this->ref_id, $a_set[
'user_id']) &&
618 $a_set[
"can_be_cancelled"]);
620 if ($can_be_cancelled) {
621 $this->tpl->setVariable(
"MULTI_ID", $a_set[
"booking_reservation_id"]);
625 $profile = $this->domain->profile();
628 $uname = $profile->getDeletedUserNamePresentation();
632 $this->tpl->setVariable(
"TXT_CURRENT_USER", $uname);
633 if ($this->has_schedule) {
634 $this->tpl->setVariable(
638 if (in_array(
"week", $selected,
true)) {
639 $this->tpl->setVariable(
"VALUE_WEEK", $a_set[
"week"]);
641 if (in_array(
"weekday", $selected,
true)) {
642 $this->tpl->setVariable(
647 $this->tpl->setVariable(
"VALUE_SLOT", $a_set[
"slot"]);
648 $this->tpl->setVariable(
"VALUE_COUNTER", $a_set[
"counter"]);
653 $this->tpl->setVariable(
"TXT_STATUS",
$lng->txt(
'book_reservation_status_' . $a_set[
'status']));
655 $this->tpl->setVariable(
"TXT_STATUS",
" ");
657 if ($this->showMessages()) {
658 $this->tpl->setCurrentBlock(
"message");
660 $this->tpl->parseCurrentBlock();
664 foreach ($this->advmd as $item) {
665 $advmd_id = (
int) $item[
"id"];
667 if (!in_array(
"advmd" . $advmd_id, $selected,
true)) {
672 $key =
"md_" . $advmd_id .
"_presentation";
673 if (isset($a_set[$key])) {
674 $pb = $a_set[$key]->getList();
680 $this->tpl->setCurrentBlock(
"advmd_bl");
681 $this->tpl->setVariable(
"VALUE_ADVMD", $val);
682 $this->tpl->parseCurrentBlock();
687 $user_cols = $this->getSelectableUserColumns();
688 foreach ($this->getSelectedColumns() as $col) {
689 if (isset($user_cols[$col])) {
690 $this->tpl->setCurrentBlock(
"user_col");
691 $this->tpl->setVariable(
"VALUE_USER_COL", ($a_set[$col] ??
"") .
" ");
692 $this->tpl->parseCurrentBlock();
697 if ($a_set[
'user_id'] == $ilUser->getId() || $ilAccess->canManageAllReservations($this->ref_id)) {
698 if ($a_set[
'post_text'] !==
"" || $a_set[
'post_file'] !==
"") {
699 $ilCtrl->setParameter($this->parent_obj,
'reservation_id', $a_set[
'booking_reservation_id']);
700 $ilCtrl->setParameter($this->parent_obj,
'object_id', $a_set[
'object_id']);
701 $dd_items[] =
$f->button()->shy(
702 $lng->txt(
'book_post_booking_information'),
703 $ilCtrl->getLinkTarget($this->parent_obj,
'displayPostInfo')
705 $ilCtrl->setParameter($this->parent_obj,
'object_id',
null);
706 $ilCtrl->setParameter($this->parent_obj,
'reservation_id',
"");
710 if ($can_be_cancelled) {
711 $ilCtrl->setParameter($this->parent_obj,
'reservation_id', $a_set[
'booking_reservation_id']);
712 $dd_items[] =
$f->button()->shy(
713 $lng->txt(
'book_set_cancel'),
714 $ilCtrl->getLinkTarget($this->parent_obj,
'rsvConfirmCancel')
716 $ilCtrl->setParameter($this->parent_obj,
'reservation_id',
"");
719 if ($this->
access->canManageAllReservations($this->ref_id)) {
720 $ilCtrl->setParameter($this->parent_obj,
'reservation_id', $a_set[
'booking_reservation_id']);
721 $dd_items[] =
$f->button()->shy(
722 $lng->txt(
'book_mail_to_booker'),
723 $ilCtrl->getLinkTarget($this->parent_obj,
'redirectMailToBooker')
725 $dd_items[] =
$f->button()->shy(
727 $ilCtrl->getLinkTarget($this->parent_obj,
'rsvConfirmDelete')
729 $ilCtrl->setParameter($this->parent_obj,
'reservation_id',
"");
733 if ($this->showMessages() && $a_set[
"message"] !==
"") {
734 $c = $this->gui->modal(
735 $this->
lng->txt(
"book_message"),
736 $this->lng->txt(
"close")
738 ->legacy(nl2br($a_set[
"message"]))
739 ->getTriggerButtonComponents(
740 $this->
lng->txt(
"book_show_message"),
743 $dd_items[] =
$c[
"button"];
744 $render_items[] =
$c[
"modal"];
747 if (count($dd_items) > 0) {
748 $render_items[] =
$f->dropdown()->standard($dd_items);
749 $this->tpl->setVariable(
"ACTIONS", $this->gui->ui()->renderer()->render($render_items));
756 $cols = $this->getSelectableColumns();
758 unset($cols[
"week"], $cols[
"weekday"]);
761 $user_cols = $this->getSelectableUserColumns();
762 foreach ($this->getSelectedColumns() as $col) {
763 if (array_key_exists($col, $cols)) {
764 if (!isset($user_cols[$col])) {
765 $add_cols[$col] = $cols[$col][
"txt"];
770 $add_cols[
"user_name"] = $this->
lng->txt(
"user");
771 $add_cols[
"login"] = $this->
lng->txt(
"login");
774 foreach ($this->getSelectedColumns() as $col) {
775 if (isset($cols[$col][
"txt"], $user_cols[$col])) {
776 $add_cols[$col] = $cols[$col][
"txt"];
787 $a_excel->setCell($a_row, 0, $this->
lng->txt(
"title"));
789 if ($this->has_schedule) {
790 $a_excel->
setCell($a_row, ++$col, $this->
lng->txt(
"date"));
791 $a_excel->
setCell($a_row, ++$col, $this->
lng->txt(
"wk_short"));
792 $a_excel->
setCell($a_row, ++$col, $this->
lng->txt(
"cal_weekday"));
793 $a_excel->
setCell($a_row, ++$col, $this->
lng->txt(
"book_schedule_slot"));
794 $a_excel->
setCell($a_row, ++$col, $this->
lng->txt(
"book_no_of_objects"));
796 $a_excel->
setCell($a_row, ++$col, $this->
lng->txt(
"status"));
798 if ($this->showMessages()) {
799 $a_excel->
setCell($a_row, ++$col, $this->
lng->txt(
"book_message"));
802 foreach ($this->getAdditionalExportCols() as $txt) {
803 $a_excel->
setCell($a_row, ++$col, $txt);
814 $a_excel->setCell($a_row, 0, $a_set[
"title"]);
816 if ($this->has_schedule) {
818 $a_excel->
setCell($a_row, ++$col, $a_set[
"week"]);
820 $a_excel->
setCell($a_row, ++$col, $a_set[
"slot"]);
821 $a_excel->
setCell($a_row, ++$col, $a_set[
"counter"]);
828 $status = $this->
lng->txt(
'book_reservation_status_' . $a_set[
'status']);
830 $a_excel->
setCell($a_row, ++$col, $status);
832 if ($this->showMessages()) {
833 $a_excel->
setCell($a_row, ++$col, $a_set[
"message"]);
836 foreach ($this->getAdditionalExportCols() as $colid => $txt) {
837 if (str_starts_with($colid,
"advmd")) {
839 $key =
"md_" . (
int) substr($colid, 5) .
"_presentation";
840 if (isset($a_set[$key])) {
841 $pb = $a_set[$key]->getList();
846 $a_excel->
setCell($a_row, ++$col, $val);
848 $a_excel->
setCell($a_row, ++$col, $a_set[$colid] ??
"");
856 $a_csv->addColumn($this->
lng->txt(
"title"));
857 if ($this->has_schedule) {
861 $a_csv->
addColumn($this->
lng->txt(
"book_schedule_slot"));
862 $a_csv->
addColumn($this->
lng->txt(
"book_no_of_objects"));
866 if ($this->showMessages()) {
870 foreach ($this->getAdditionalExportCols() as $txt) {
881 $a_csv->addColumn($a_set[
"title"]);
882 if ($this->has_schedule) {
894 $status = $this->
lng->txt(
'book_reservation_status_' . $a_set[
'status']);
898 if ($this->showMessages()) {
902 foreach ($this->getAdditionalExportCols() as $colid => $txt) {
903 if (str_starts_with($colid,
"advmd")) {
905 $key =
"md_" . (
int) substr($colid, 5) .
"_presentation";
906 if (isset($a_set[$key])) {
907 $pb = $a_set[$key]->getList();
Author: Alexander Killing killing@leifos.de
Reservation table related session data.
Repo class for reservations Acts on tables booking_reservation (rw), booking_reservation_group (rw) a...
static queryForRecords(int $adv_rec_obj_ref_id, string $adv_rec_obj_type, string $adv_rec_obj_subtype, array $a_obj_id, string $a_subtype, array $a_records, string $a_obj_id_key, string $a_obj_subid_key, ?array $a_amet_filter=null)
static getList(int $a_pool_id, ?string $a_title=null)
Get list of booking objects.
static getUserFilter(array $a_object_ids)
Get all users who have reservations for object(s)
fillHeaderExcel(ilExcel $a_excel, int &$a_row)
Excel Version of Fill Header.
ILIAS BookingManager Access AccessManager $access
InternalDomainService $domain
ilAdvancedMDRecordGUI $record_gui
ReservationTableSessionRepository $table_repo
fillHeaderCSV(ilCSVWriter $a_csv)
CSV Version of Fill Header.
initFilter(?array $a_filter_pre=null)
ReservationDBRepository $reservation_repo
getCurrentFilter()
Get current filter settings.
getAdditionalExportCols()
ScheduleManager $schedule_manager
fillRow(array $a_set)
Standard Version of Fill Row.
fillRowExcel(ilExcel $a_excel, int &$a_row, array $a_set)
Excel Version of Fill Row.
getItems(array $filter)
Gather data and build rows.
numericOrdering(string $a_field)
Should this field be sorted numeric?
bool $has_items_with_host_context
getSelectableColumns()
Get selectable columns.
fillRowCSV(ilCSVWriter $a_csv, array $a_set)
CSV Version of Fill Row.
__construct(object $a_parent_obj, string $a_parent_cmd, int $a_ref_id, ilObjBookingPool $pool, bool $a_show_all, ?array $a_filter_pre=null, ?int $a_group_id=null, ?array $context_obj_ids=null)
getSelectableUserColumns()
Get selectable user fields.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static _numericDayToString(int $a_day, bool $a_long=true, ?ilLanguage $lng=null)
static _getValuesByObjId(int $a_obj_id)
static setUseRelativeDates(bool $a_status)
set use relative dates
static formatDate(ilDateTime $date, bool $a_skip_day=false, bool $a_include_wd=false, bool $include_seconds=false, ?ilObjUser $user=null,)
@classDescription Date and time handling
setBold(string $a_coords)
Set cell(s) to bold.
setCell(int $a_row, int $col, $value, ?string $datatype=null, bool $disable_strip_tags_for_strings=false)
Set cell value.
getColumnCoord(int $a_col)
Get column "name" from number.
static _getInstanceByType(string $a_type)
Get Singleton Instance.
txt(string $a_topic, string $a_default_lang_fallback_mod="")
gets the text for a given topic if the topic is not in the list, the topic itself with "-" will be re...
static lookupAcceptedAgreements(int $a_obj_id)
Lookup users who have accepted the agreement.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static getAdvancedMDFields(int $a_ref_id)
static _lookupObjectId(int $ref_id)
static _lookupType(int $id, bool $reference=false)
static _lookupTitle(int $obj_id)
static shortenTextExtended(string $a_str, int $a_len, bool $a_dots=false, bool $a_next_blank=false, bool $a_keep_extension=false)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
setFilterCommand(string $a_val, string $a_caption="")
setLimit(int $a_limit=0, int $a_default_limit=0)
set max.
setTitle(string $a_title, string $a_icon="", string $a_icon_alt="")
setExportFormats(array $formats)
Set available export formats.
addFilterItem(ilTableFilterItem $a_input_item, bool $a_optional=false)
addMultiCommand(string $a_cmd, string $a_text)
addFilterItemByMetaType(string $id, int $type=self::FILTER_TEXT, bool $a_optional=false, string $caption="")
Add filter by standard type.
setFormAction(string $a_form_action, bool $a_multipart=false)
addColumn(string $a_text, string $a_sort_field="", string $a_width="", bool $a_is_checkbox_action_column=false, string $a_class="", string $a_tooltip="", bool $a_tooltip_with_html=false)
setEnableHeader(bool $a_enableheader)
setDefaultOrderField(string $a_defaultorderfield)
setDisableFilterHiding(bool $a_val=true)
setRowTemplate(string $a_template, string $a_template_dir="")
Set row template.
setDefaultOrderDirection(string $a_defaultorderdirection)
setResetCommand(string $a_val, string $a_caption="")
disable(string $a_module_name)
Tree class data representation in hierachical trees using the Nested Set Model with Gaps by Joe Celco...
static getNamePresentation( $a_user_id, bool $a_user_image=false, bool $a_profile_link=false, string $a_profile_back_link='', bool $a_force_first_lastname=false, bool $a_omit_login=false, bool $a_sortable=true, bool $a_return_data_array=false, $a_ctrl_path=null)
Default behaviour is:
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
filter(string $filter_id, array $class_path, string $cmd, bool $activated=true, bool $expanded=true)
if(!file_exists('../ilias.ini.php'))