ILIAS  release_9 Revision v9.13-25-g2c18ec4c24f
class.ilConsultationHoursTableGUI.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
23 
30 {
31  private int $user_id = 0;
32  private bool $has_groups = false;
35 
36  public function __construct(object $a_gui, string $a_cmd, int $a_user_id)
37  {
38  $this->user_id = $a_user_id;
39 
40  $this->has_groups = (bool) ilConsultationHourGroups::getCountGroupsOfUser($a_user_id);
41 
42  $this->setId('chtg_' . $this->getUserId());
43  parent::__construct($a_gui, $a_cmd);
44 
45  global $DIC;
46  $this->renderer = $DIC->ui()->renderer();
47  $this->uiFactory = $DIC->ui()->factory();
48 
49  $this->addColumn('', 'f', '1');
50  $this->addColumn($this->lng->txt('appointment'), 'start');
51 
52  if ($this->hasGroups()) {
53  $this->addColumn($this->lng->txt('cal_ch_grp_header'), 'group');
54  }
55 
56  $this->addColumn($this->lng->txt('title'), 'title');
57  $this->addColumn($this->lng->txt('cal_ch_num_bookings'), 'num_bookings');
58  $this->addColumn($this->lng->txt('cal_ch_bookings'), 'participants');
59  $this->addColumn($this->lng->txt('cal_ch_target_object'), 'target');
60  $this->addColumn('');
61 
62  $this->setRowTemplate('tpl.ch_upcoming_row.html', 'Services/Calendar');
63  $this->setFormAction($this->ctrl->getFormAction($this->getParentObject(), $this->getParentCmd()));
64  $this->setTitle($this->lng->txt('cal_ch_ch'));
65 
66  $this->enable('sort');
67  $this->enable('header');
68  $this->enable('numinfo');
69 
70  $this->setDefaultOrderField('start');
71  $this->setSelectAllCheckbox('apps');
72  $this->setShowRowsSelector(true);
73  $this->addMultiCommand('edit', $this->lng->txt('edit'));
74  $this->addMultiCommand('searchUsersForAppointments', $this->lng->txt('cal_ch_assign_participants'));
75  $this->addMultiCommand('confirmDelete', $this->lng->txt('delete'));
76  }
77 
78  public function getUserId(): int
79  {
80  return $this->user_id;
81  }
82 
83  public function hasGroups(): bool
84  {
85  return $this->has_groups;
86  }
87 
91  protected function fillRow(array $a_set): void
92  {
93  $this->tpl->setVariable('VAL_ID', $a_set['id']);
94  $this->tpl->setVariable('START', $a_set['start_p']);
95  $this->tpl->setVariable('TITLE', $a_set['title']);
96 
97  if ($this->hasGroups()) {
98  $this->tpl->setVariable('TITLE_GROUP', $a_set['group']);
99  }
100 
101  $this->tpl->setVariable('NUM_BOOKINGS', $a_set['num_bookings']);
102 
103  foreach ((array) ($a_set['target_links'] ?? []) as $link) {
104  $this->tpl->setCurrentBlock('links');
105  $this->tpl->setVariable('TARGET', $link['title']);
106  $this->tpl->setVariable('URL_TARGET', $link['link']);
107  $this->tpl->parseCurrentBlock();
108  }
109  if ($a_set['bookings']) {
110  foreach ($a_set['bookings'] as $user_id => $name) {
111  $user_profile_prefs = ilObjUser::_getPreferences($user_id);
112  if (($user_profile_prefs["public_profile"] ?? '') == "y") {
113  $this->tpl->setCurrentBlock('booking_with_link');
114  $this->ctrl->setParameter($this->getParentObject(), 'user', $user_id);
115  $this->tpl->setVariable(
116  'URL_BOOKING',
117  $this->ctrl->getLinkTarget($this->getParentObject(), 'showprofile')
118  );
119  } else {
120  $this->tpl->setCurrentBlock('booking_without_link');
121  }
122  $this->ctrl->setParameter($this->getParentObject(), 'user', '');
123  $this->tpl->setVariable('TXT_BOOKING', $name);
124  $this->tpl->parseCurrentBlock();
125  }
126  }
127 
128  $this->tpl->setVariable('BOOKINGS', implode(', ', $a_set['bookings']));
129  $this->ctrl->setParameter($this->getParentObject(), 'apps', $a_set['id']);
130 
131  $dropDownItems = array(
132  $this->uiFactory->button()->shy(
133  $this->lng->txt('edit'),
134  $this->ctrl->getLinkTarget($this->getParentObject(), 'edit')
135  ),
136  $this->uiFactory->button()->shy(
137  $this->lng->txt('cal_ch_assign_participants'),
138  $this->ctrl->getLinkTargetByClass('ilRepositorySearchGUI', '')
139  ),
140  $this->uiFactory->button()->shy(
141  $this->lng->txt('delete'),
142  $this->ctrl->getLinkTarget($this->getParentObject(), 'confirmDelete')
143  )
144  );
145  $dropDown = $this->uiFactory->dropdown()->standard($dropDownItems)
146  ->withLabel($this->lng->txt('actions'));
147  $this->tpl->setVariable('ACTIONS', $this->renderer->render($dropDown));
148  }
149 
150  public function parse()
151  {
152  $data = array();
153  $counter = 0;
155  $data[$counter]['id'] = $app->getEntryId();
156  $data[$counter]['title'] = $app->getTitle();
157  $data[$counter]['description'] = $app->getDescription();
158  $data[$counter]['start'] = $app->getStart()->get(IL_CAL_UNIX);
159  $data[$counter]['start_p'] = ilDatePresentation::formatPeriod($app->getStart(), $app->getEnd());
160 
161  $booking = new ilBookingEntry($app->getContextId());
162 
163  $booked_user_ids = $booking->getCurrentBookings($app->getEntryId());
164  $booked_user_ids = array_map('intval', ilUtil::_sortIds($booked_user_ids, 'usr_data', 'lastname', 'usr_id'));
165  $users = array();
166  $data[$counter]['participants'] = '';
167  $user_counter = 0;
168  foreach ($booked_user_ids as $user_id) {
169  if (!$user_counter) {
170  $name = ilObjUser::_lookupName($user_id);
171  $data[$counter]['participants'] = $name['lastname'];
172  }
173  $users[$user_id] = ilObjUser::_lookupFullname($user_id);
174  $user_counter++;
175  }
176  $data[$counter]['bookings'] = $users;
177  $data[$counter]['num_bookings'] = $booking->getNumberOfBookings();
178 
179  $data[$counter]['group'] = '';
180  $group_id = $booking->getBookingGroup();
181  if ($this->hasGroups() && $group_id) {
182  $data[$counter]['group'] = ilConsultationHourGroups::lookupTitle($group_id);
183  }
184 
185  // obj assignments
186  $refs_counter = 0;
187  $obj_ids = array_map(
188  'intval',
189  ilUtil::_sortIds($booking->getTargetObjIds(), 'object_data', 'title', 'obj_id')
190  );
191  foreach ($obj_ids as $obj_id) {
192  if ($refs_counter) {
193  $data[$counter]['target'] = ilObject::_lookupTitle($obj_id);
194  }
195 
196  $refs = ilObject::_getAllReferences($obj_id);
197  $data[$counter]['target_links'][$refs_counter]['title'] = ilObject::_lookupTitle($obj_id);
198  $data[$counter]['target_links'][$refs_counter]['link'] = ilLink::_getLink(end($refs));
199  ++$refs_counter;
200  }
201  $counter++;
202  }
203  $this->setData($data);
204  }
205 }
$app
Definition: cli.php:39
static lookupTitle(int $a_group_id)
Lookup group title.
setData(array $a_data)
__construct(object $a_gui, string $a_cmd, int $a_user_id)
enable(string $a_module_name)
setFormAction(string $a_form_action, bool $a_multipart=false)
getCurrentBookings(int $a_entry_id)
get current bookings
static _lookupFullname(int $a_user_id)
setSelectAllCheckbox(string $a_select_all_checkbox, bool $a_select_all_on_top=false)
static _getPreferences(int $user_id)
get preferences for user
static _getAllReferences(int $id)
get all reference ids for object ID
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static _lookupName(int $a_user_id)
lookup user name
const IL_CAL_UNIX
setId(string $a_val)
global $DIC
Definition: feed.php:28
setShowRowsSelector(bool $a_value)
Toggle rows-per-page selector.
__construct(VocabulariesInterface $vocabularies)
static _lookupTitle(int $obj_id)
setDefaultOrderField(string $a_defaultorderfield)
static getCountGroupsOfUser(int $a_user_id)
Get number of consultation hour groups.
setRowTemplate(string $a_template, string $a_template_dir="")
Set row template.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static getAppointments(int $a_user_id)
Get all appointments.
setTitle(string $a_title, string $a_icon="", string $a_icon_alt="")
static _sortIds(array $a_ids, string $a_table, string $a_field, string $a_id_name)
Function that sorts ids by a given table field using WHERE IN E.g: __sort(array(6,7),&#39;usr_data&#39;,&#39;lastname&#39;,&#39;usr_id&#39;) => sorts by lastname.
static formatPeriod(ilDateTime $start, ilDateTime $end, bool $a_skip_starting_day=false)
Format a period of two dates Shows: 14.
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)
addMultiCommand(string $a_cmd, string $a_text)