Skip to content
Snippets Groups Projects
Commit e8d60870 authored by Michaela Brückner's avatar Michaela Brückner :unicorn:
Browse files

first step: select a room, re #1327

parent b70bc19f
No related branches found
No related tags found
No related merge requests found
...@@ -258,6 +258,7 @@ class Course_RoomRequestsController extends AuthenticatedController ...@@ -258,6 +258,7 @@ class Course_RoomRequestsController extends AuthenticatedController
_('Hier können Sie Angaben zu gewünschten Raumeigenschaften machen.') _('Hier können Sie Angaben zu gewünschten Raumeigenschaften machen.')
); );
// create a new request
$this->request_id = $request_id; $this->request_id = $request_id;
if (Request::submitted('request_id')) { if (Request::submitted('request_id')) {
$this->request_id = Request::get('request_id'); $this->request_id = Request::get('request_id');
...@@ -267,10 +268,15 @@ class Course_RoomRequestsController extends AuthenticatedController ...@@ -267,10 +268,15 @@ class Course_RoomRequestsController extends AuthenticatedController
} }
$this->request = null; $this->request = null;
$this->request = RoomRequest::find(Request::get('request_id')); $this->request = RoomRequest::find(Request::get('request_id')) ? RoomRequest::find(Request::get('request_id')) : new RoomRequest($this->request_id);
$this->available_room_categories = ResourceCategory::findByClass_name(
'Room' // TODO no idea why we need this and what it does
); $this->request->setRangeFields('course', [Context::getId()]);
$this->request_time_intervals = $this->request->getTimeIntervals();
$this->available_room_categories = ResourceCategory::findByClass_name('Room');
} }
...@@ -281,13 +287,25 @@ class Course_RoomRequestsController extends AuthenticatedController ...@@ -281,13 +287,25 @@ class Course_RoomRequestsController extends AuthenticatedController
if (Request::isPost()) { if (Request::isPost()) {
CSRFProtection::verifyUnsafeRequest(); CSRFProtection::verifyUnsafeRequest();
$this->room_name = Request::get('room_name'); $this->room_name = Request::get('room_name');
$this->search_by_roomname = Request::submitted('search_by_name');
$this->category_id = Request::get('category_id'); $this->category_id = Request::get('category_id');
$this->search_by_category = Request::submitted('select_properties');
if ($this->room_name != null) { // user looks for a special room OR for room within a selected category
if ($this->room_name != null && $this->search_by_roomname != null) {
$_SESSION[$request_id]['room_name'] = $this->room_name; $_SESSION[$request_id]['room_name'] = $this->room_name;
$this->redirect( $this->redirect(
'course/room_requests/find_by_roomname/' . $this->request_id 'course/room_requests/find_by_roomname/' . $this->request_id
); );
} else if ($this->category_id != null && $this->search_by_category != null ) {
$_SESSION[$request_id]['room_category'] = $this->catgeory_id;
$this->redirect(
'course/room_requests/find_by_category/' . $this->request_id
);
} else {
$this->redirect(
'course/room_requests/new_request/' . $this->request_id
);
} }
} }
...@@ -296,6 +314,77 @@ class Course_RoomRequestsController extends AuthenticatedController ...@@ -296,6 +314,77 @@ class Course_RoomRequestsController extends AuthenticatedController
public function find_by_roomname_action($request_id) public function find_by_roomname_action($request_id)
{ {
$this->request_id = $request_id; $this->request_id = $request_id;
$this->room_name = $_SESSION[$request_id]['room_name'];
$this->available_rooms = RoomManager::findRooms(
$this->room_name,
null,
null,
null,
[],
'name ASC, mkdate ASC'
);
// small icons before room name to show whether they are bookable or not
$this->available_room_icons = $this->getRoomBookingIcons($this->available_rooms, $this->request_id);
}
private function getRoomBookingIcons($available_rooms, $request_id)
{
$this->request_id = $request_id;
$this->available_room_icons = [];
$this->request = RoomRequest::find($this->request_id) ? RoomRequest::find($this->request_id) : new RoomRequest($this->request_id);
// TODO set range fields for other
$this->request->setRangeFields('course', [Context::getId()]);
$request_time_intervals = $this->request->getTimeIntervals();
foreach ($available_rooms as $room) {
$request_dates_booked = 0;
foreach ($request_time_intervals as $interval) {
$booked = ResourceBookingInterval::countBySql(
'resource_id = :room_id AND begin < :end AND end > :begin',
[
'room_id' => $room->id,
'begin' => $interval['begin'],
'end' => $interval['end']
]
) > 0;
if ($booked) {
$request_dates_booked++;
}
}
if ($request_dates_booked == 0) {
$this->available_room_icons[$room->id] =
Icon::create('check-circle', Icon::ROLE_STATUS_GREEN)->asImg(
[
'class' => 'text-bottom',
'title' => _('freier Raum')
]
);
$available_rooms[] = $room;
} elseif ($request_dates_booked < $request_time_intervals) {
$this->available_room_icons[$room->id] =
Icon::create('exclaim-circle', Icon::ROLE_STATUS_YELLOW)->asImg(
[
'class' => 'text-bottom',
'title' => _('teilweise belegter Raum')
]
);
$available_rooms[] = $room;
}
}
return $this->available_room_icons;
}
public function find_by_category_action($request_id)
{
} }
...@@ -391,7 +480,6 @@ class Course_RoomRequestsController extends AuthenticatedController ...@@ -391,7 +480,6 @@ class Course_RoomRequestsController extends AuthenticatedController
); );
return; return;
} }
if (Request::isPost()) { if (Request::isPost()) {
CSRFProtection::verifyUnsafeRequest(); CSRFProtection::verifyUnsafeRequest();
$this->room_name = Request::get('room_name'); $this->room_name = Request::get('room_name');
...@@ -680,6 +768,7 @@ class Course_RoomRequestsController extends AuthenticatedController ...@@ -680,6 +768,7 @@ class Course_RoomRequestsController extends AuthenticatedController
); );
} }
$this->available_room_icons = []; $this->available_room_icons = [];
$request_time_intervals = $this->request->getTimeIntervals(); $request_time_intervals = $this->request->getTimeIntervals();
$request_date_amount = count($request_time_intervals); $request_date_amount = count($request_time_intervals);
foreach ($this->matching_rooms as $room) { foreach ($this->matching_rooms as $room) {
......
<footer data-dialog-button>
<? if ($room_search_button) : ?>
<?= \Studip\Button::create(
_('Räume suchen'),
'search_rooms',
[
'title' => _('Startet die Suche von Räumen anhand der gewählten Eigenschaften.')
]
) ?>
<? endif ?>
<? if ($room_select_button) : ?>
<?= \Studip\Button::create(_('Raum auswählen'), 'select_room') ?>
<? endif ?>
<? if ($save_buttons) : ?>
<?= \Studip\Button::create(_('Speichern'), 'save_and_close') ?>
<? endif ?>
<? if ($select_properties_button) : ?>
<?= \Studip\Button::create(_('Eigenschaften wählen'), 'select_properties') ?>
<? endif ?>
<?= \Studip\LinkButton::createCancel(
_('Abbrechen'),
$controller->link_for('course/room_requests/index/' . $course_id),
[
'title' => _('Abbrechen')
]
) ?>
</footer>
</form>
<?= $step ?>
...@@ -2,3 +2,22 @@ ...@@ -2,3 +2,22 @@
_('Geben Sie den gewünschten Raum und/oder Raumeigenschaften an. Ihre Raumanfrage wird von der zuständigen Raumvergabe bearbeitet.'), _('Geben Sie den gewünschten Raum und/oder Raumeigenschaften an. Ihre Raumanfrage wird von der zuständigen Raumvergabe bearbeitet.'),
[_('<strong>Achtung:</strong> Um später einen passenden Raum für Ihre Veranstaltung zu bekommen, geben Sie bitte immer die gewünschten Eigenschaften mit an!')] [_('<strong>Achtung:</strong> Um später einen passenden Raum für Ihre Veranstaltung zu bekommen, geben Sie bitte immer die gewünschten Eigenschaften mit an!')]
)?> )?>
<section class="resources-grid">
<section class="contentbox">
<header><h1><?= _('Anfrage') ?></h1></header>
<section>
<?= htmlready($request->getTypeString(), 1, 1) ?>
<? if ($request->getType() == 'course'): ?>
<?
$dates = $request->getDateString(true);
?>
<?= tooltipHtmlIcon(implode('<br>', $dates)) ?>
<? endif ?>
</section>
</section>
<section class="contentbox">
<header><h1><?= _('Bearbeitungsstatus') ?></h1></header>
<section></section>
</section>
</section>
...@@ -8,7 +8,6 @@ ...@@ -8,7 +8,6 @@
<?= $this->render_partial( <?= $this->render_partial(
'course/room_requests/_new_request_header') ?> 'course/room_requests/_new_request_header') ?>
<?= $request_id ?>
<?= var_dump($_SESSION[$request_id]) ?> <?= var_dump($_SESSION[$request_id]) ?>
<section class="resources-grid"> <section class="resources-grid">
<div> <div>
...@@ -84,9 +83,34 @@ ...@@ -84,9 +83,34 @@
</span> </span>
</label> </label>
<? if ($available_rooms) : ?>
<label><?= _('Passende Räume') ?>
<section class="selectbox">
<? foreach ($available_rooms as $room): ?>
<div class="flex-row">
<label class="horizontal">
<?= $available_room_icons[$room->id] ?>
<input type="radio" name="selected_room_id"
data-activates="button[type='submit'][name='select_room']"
value="<?= htmlReady($room->id) ?>">
<?= htmlReady(mb_substr($room->name, 0, 50)); ?>
<? if ($room->properties): ?>
<? $property_names = $room->getInfolabelPrperties()
->pluck('fullname') ?>
<?= tooltipIcon(implode("\n", $property_names)) ?>
<? endif ?>
</label>
</div>
<? endforeach ?>
</section>
</label>
<? else : ?>
<?= MessageBox::info(_('Es wurden keine passenden Räume gefunden!')) ?>
<? endif ?>
</fieldset> </fieldset>
</div> </div>
</section> </section>
<?= $this->render_partial('course/room_requests/_request_form_footer') ?> <?= $this->render_partial('course/room_requests/_new_request_form_footer', ['step' => 1]) ?>
<? endif ?> <? endif ?>
...@@ -9,8 +9,9 @@ ...@@ -9,8 +9,9 @@
'course/room_requests/_new_request_header') ?> 'course/room_requests/_new_request_header') ?>
<?= $request_id ?> <?= $request_id ?>
<?= var_dump($request) ?> <br/>
<?= $room_name ?> <?= var_dump($request_time_intervals) ?>
<section class="resources-grid"> <section class="resources-grid">
<div> <div>
<fieldset> <fieldset>
...@@ -45,7 +46,7 @@ ...@@ -45,7 +46,7 @@
[ [
'type' => 'image', 'type' => 'image',
'class' => 'text-bottom', 'class' => 'text-bottom',
'name' => 'select_properties', 'name' => 'search_by_category',
'value' => _('Raumtyp auswählen'), 'value' => _('Raumtyp auswählen'),
'style' => 'margin-left: 0.2em; margin-top: 0.6em;' 'style' => 'margin-left: 0.2em; margin-top: 0.6em;'
] ]
...@@ -89,5 +90,5 @@ ...@@ -89,5 +90,5 @@
</div> </div>
</section> </section>
<?= $this->render_partial('course/room_requests/_request_form_footer') ?> <?= $this->render_partial('course/room_requests/_new_request_form_footer', ['step' => 0]) ?>
<? endif ?> <? endif ?>
...@@ -26,7 +26,8 @@ ...@@ -26,7 +26,8 @@
<div> <div>
<? if ($available_rooms) : ?> <? if ($available_rooms) : ?>
<section class="contentbox"> <section class="contentbox">
<header><h1><?= _('Passende Räume') ?></h1></header> <header><h1><?= _('Passende Räume') ?> <?= count($available_rooms) ?>
</h1></header>
<section class="selectbox"> <section class="selectbox">
<fieldset> <fieldset>
<? foreach ($available_rooms as $room): ?> <? foreach ($available_rooms as $room): ?>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment