ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
class.ilBookingPreferencesGUI.php
Go to the documentation of this file.
1<?php
2
23
29{
33 protected ilCtrl $ctrl;
36 protected \ILIAS\DI\UIServices $ui;
37 protected ilLanguage $lng;
38 protected \Psr\Http\Message\ServerRequestInterface $request;
39 protected ilObjUser $user;
41
42 public function __construct(
44 ) {
45 global $DIC;
46
47 $this->ctrl = $DIC->ctrl();
48 $this->ui = $DIC->ui();
49 $this->lng = $DIC->language();
50 $this->user = $DIC->user();
51 $this->request = $DIC->http()->request();
52 $this->main_tpl = $DIC->ui()->mainTemplate();
53 $this->service = $DIC->bookingManager()->internal();
54 $this->pool = $pool;
55 $this->repo = $this->service->repo()->preferences();
56 $this->access = $DIC->bookingManager()->internal()->domain()->access();
57 $this->objects_manager = $DIC->bookingManager()->internal()->domain()
58 ->objects($pool->getId());
59 }
60
61 public function executeCommand(): void
62 {
64
65 $next_class = $ctrl->getNextClass($this);
66 $cmd = $ctrl->getCmd("show");
67 if ($cmd === "render") {
68 $cmd = "show";
69 }
70 switch ($next_class) {
71 default:
72 if (in_array($cmd, ["show", "savePreferences"])) {
73 $this->$cmd();
74 }
75 }
76 }
77
78 protected function show(): void
79 {
80 $preferences = $this->service->domain()->preferences($this->pool);
81
82 if ($preferences->isGivingPreferencesPossible()) {
83 $this->listPreferenceOptions();
84 } else {
85 $this->listBookingResults();
86 }
87 }
88
89 protected function listPreferenceOptions(
90 ?Form\Standard $form = null
91 ): void {
92 $ui = $this->ui;
93 if (count(ilBookingObject::getList($this->pool->getId())) > 0) {
94 if (is_null($form)) {
95 $form = $this->initPreferenceForm();
96 }
97 $this->main_tpl->setContent($ui->renderer()->render($form));
98 } else {
99 $this->main_tpl->setOnScreenMessage('info', $this->lng->txt("book_type_warning"));
100 }
101 }
102
104 {
105 $ui = $this->ui;
106 $f = $ui->factory();
107 $ctrl = $this->ctrl;
109 $repo = $this->repo;
110
111 $preferences = $repo->getPreferencesOfUser($this->pool->getId(), $this->user->getId());
112 $preferences = $preferences->getPreferences();
113
114 $this->renderBookingInfo();
115
116 $fields = [];
117 foreach (ilBookingObject::getList($this->pool->getId()) as $book_obj) {
118 $checked = isset($preferences[$this->user->getId()]) &&
119 in_array((int) $book_obj["booking_object_id"], $preferences[$this->user->getId()], true);
120
121 $fields["cb_" . $book_obj["booking_object_id"]] =
122 $f->input()->field()->checkbox($book_obj["title"], $book_obj["description"])->withValue($checked);
123 }
124
125 // section
126 $section1 = $f->input()->field()->section($fields, $lng->txt("book_preferences"));
127
128 $form_action = $ctrl->getLinkTarget($this, "savePreferences");
129 return $f->input()->container()->form()->standard($form_action, ["sec" => $section1]);
130 }
131
132 public function savePreferences(): void
133 {
134 $preferences = $this->service->domain()->preferences($this->pool);
135
136 if (!$preferences->isGivingPreferencesPossible()) {
137 return;
138 }
139
140 $request = $this->request;
141 $form = $this->initPreferenceForm();
143 $ctrl = $this->ctrl;
144 $repo = $this->repo;
145
146 if ($request->getMethod() === "POST") {
147 $form = $form->withRequest($request);
148 $data = $form->getData();
149
150 if (is_array($data["sec"])) {
151 $obj_ids = [];
152 foreach ($data["sec"] as $k => $v) {
153 if ($v === true) {
154 $id = explode("_", $k);
155 $obj_ids[] = (int) $id[1];
156 }
157 }
158
159 if (count($obj_ids) > $this->pool->getPreferenceNumber()) {
160 $this->main_tpl->setOnScreenMessage('failure', $lng->txt("book_too_many_preferences"), true);
161 $this->listPreferenceOptions($form);
162 return;
163 }
164
165 if (count($obj_ids) < $this->pool->getPreferenceNumber()) {
166 $this->main_tpl->setOnScreenMessage('failure', $lng->txt("book_not_enough_preferences"), true);
167 $this->listPreferenceOptions($form);
168 return;
169 }
170
171 $preferences = $this->service->data()->preferences(
172 [$this->user->getId() => $obj_ids]
173 );
174
175 $repo->savePreferencesOfUser($this->pool->getId(), $this->user->getId(), $preferences);
176 $part = new ilBookingParticipant($this->user->getId(), $this->pool->getId());
177
178 $titles = implode(", ", array_map(static function ($id) {
180 }, $obj_ids));
181
182 $this->main_tpl->setOnScreenMessage('success', $lng->txt("book_preferences_saved") . " (" . $titles . ")", true);
183 }
184 }
185 $ctrl->redirect($this, "show");
186 }
187
188
189
190 protected function renderBookingInfo(): void
191 {
193 $info = $lng->txt("book_preference_info");
194 $info = str_replace(["%1", "%2"], [
195 $this->pool->getPreferenceNumber(),
197 new ilDateTime($this->pool->getPreferenceDeadline(), IL_CAL_UNIX)
198 )
199 ], $info);
200 $this->main_tpl->setOnScreenMessage('info', $info);
201 }
202
203 protected function listBookingResults(): void
204 {
205 $main_tpl = $this->main_tpl;
207 $repo = $this->repo;
208 $ui = $this->ui;
209 $ctrl = $this->ctrl;
210
211 $info_gui = new ilInfoScreenGUI($this);
212
213 // preferences
214 $info_gui->addSection($lng->txt("book_your_preferences"));
215 $preferences = $repo->getPreferencesOfUser($this->pool->getId(), $this->user->getId());
216 $preferences = $preferences->getPreferences();
217 $cnt = 1;
218 if (isset($preferences[$this->user->getId()])) {
219 foreach ($preferences[$this->user->getId()] as $book_obj_id) {
220 $book_obj = new ilBookingObject($book_obj_id);
221 $info_gui->addProperty((string) $cnt++, $book_obj->getTitle());
222 }
223 } else {
224 $info_gui->addProperty("", $lng->txt("book_no_preferences_for_you"));
225 }
226
227 // bookings
228 $this->service->domain()->preferences($this->pool)->storeBookings(
229 $this->repo->getPreferences($this->pool->getId())
230 );
231 $bookings = $this->service->domain()->preferences($this->pool)->readBookings();
232 $info_gui->addSection($lng->txt("book_your_bookings"));
233 $cnt = 1;
234 if (isset($bookings[$this->user->getId()])) {
235 foreach ($bookings[$this->user->getId()] as $book_obj_id) {
236 $book_obj = new ilBookingObject($book_obj_id);
237 $post_file = $this->objects_manager->getBookingInfoFilename($book_obj_id);
238
239 // post info button
240 $post_info_button = "";
241 if ($post_file || $book_obj->getPostText()) {
242 $ctrl->setParameterByClass("ilBookingObjectGUI", "object_id", $book_obj_id);
243 $b = $ui->factory()->button()->shy(
244 $lng->txt("book_post_booking_information"),
245 $ctrl->getLinkTargetByClass(["ilBookingObjectGUI", "ilBookingProcessWithoutScheduleGUI"], "displayPostInfo")
246 );
247 $post_info_button = "<br>" . $ui->renderer()->render($b);
248 }
249 $info_gui->addProperty((string) $cnt++, $book_obj->getTitle() . $post_info_button);
250 }
251 } else {
252 $info_gui->addProperty("", $lng->txt("book_no_bookings_for_you"));
253 }
254
255 // all users
256 if ($this->access->canManageAllReservations($this->pool->getRefId())) {
257 $info_gui->addSection($lng->txt("book_all_users"));
258 $preferences = $repo->getPreferences($this->pool->getId());
259 $preferences = $preferences->getPreferences();
260 foreach ($preferences as $user_id => $obj_ids) {
261 $booking_str = "<br>" . $lng->txt("book_log") . ": -";
262 if (isset($bookings[$user_id])) {
263 $booking_str = "<br>" . $lng->txt("book_log") . ": " . implode(", ", array_map(
264 static function ($obj_id) {
265 return (new ilBookingObject($obj_id))->getTitle();
266 },
267 $bookings[$user_id]
268 ));
269 }
270
271 $info_gui->addProperty(
272 ilUserUtil::getNamePresentation($user_id, false, false, "", true),
273 $lng->txt("book_preferences") . ": " . implode(", ", array_map(static function ($obj_id) {
274 return (new ilBookingObject($obj_id))->getTitle();
275 }, $obj_ids)) . $booking_str
276 );
277 }
278 }
279
280 $main_tpl->setContent($info_gui->getHTML());
281 }
282}
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
Definition: plugin.php:23
const IL_CAL_UNIX
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static getList(int $a_pool_id, ?string $a_title=null)
Get list of booking objects.
static lookupTitle(int $object_id)
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...
savePreferencesOfUser(int $a_pool_id, int $a_user_id, ilBookingPreferences $preferences)
Save all preferences of a user for a pool.
getPreferences(int $a_pool_id)
Get booking preferences for a pool id.
getPreferencesOfUser(int $a_pool_id, int $a_user_id)
Get booking preferences for a pool id.
Booking preferences ui class.
ilBookingPreferencesDBRepository $repo
Psr Http Message ServerRequestInterface $request
ilGlobalTemplateInterface $main_tpl
listPreferenceOptions(?Form\Standard $form=null)
Class ilCtrl provides processing control methods.
getLinkTarget(object $a_gui_obj, ?string $a_cmd=null, ?string $a_anchor=null, bool $is_async=false, bool $has_xml_style=false)
@inheritDoc
getNextClass($a_gui_class=null)
@inheritDoc
redirect(object $a_gui_obj, ?string $a_cmd=null, ?string $a_anchor=null, bool $is_async=false)
@inheritDoc
getCmd(?string $fallback_command=null)
@inheritDoc
setParameterByClass(string $a_class, string $a_parameter, $a_value)
@inheritDoc
getLinkTargetByClass( $a_class, ?string $a_cmd=null, ?string $a_anchor=null, bool $is_async=false, bool $has_xml_style=false)
@inheritDoc
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
Class ilInfoScreenGUI.
language handling
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
User class.
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:
$info
Definition: entry_point.php:21
setContent(string $a_html)
Sets content for standard template.
This describes commonalities between all forms.
Definition: Form.php:33
This describes a standard form.
Definition: Standard.php:29
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Definition: Factory.php:21
global $lng
Definition: privfeed.php:31
global $DIC
Definition: shib_login.php:26