diff options
| author | Michaela Brückner <brueckner@data-quest.de> | 2023-05-25 14:05:36 +0000 |
|---|---|---|
| committer | David Siegfried <david.siegfried@uni-vechta.de> | 2023-05-25 14:05:36 +0000 |
| commit | 04ad36e3a9845a401d95d35880deda5ea390e9dd (patch) | |
| tree | a7db552eb2883ec973575ffb535f9b99deb1cf73 /app/views | |
| parent | 6254b44ac006c19bc571d3c411784fef6829a9aa (diff) | |
closes #1327biest-1310
Closes #1327
Merge request studip/studip!1147
Diffstat (limited to 'app/views')
21 files changed, 584 insertions, 428 deletions
diff --git a/app/views/course/room_requests/_new_request_form_footer.php b/app/views/course/room_requests/_new_request_form_footer.php new file mode 100644 index 0000000..4b84790 --- /dev/null +++ b/app/views/course/room_requests/_new_request_form_footer.php @@ -0,0 +1,41 @@ + <br> + <footer data-dialog-button> + <? if ($step !== 3) : ?> + <?= \Studip\LinkButton::create( + _('Zurück auf Anfang'), + $controller->url_for('course/room_requests/new_request/' . $request_id), + ['data-dialog' => 'size=big'] + ) ?> + <? else: ?> + <?= \Studip\LinkButton::create( + _('Angaben bearbeiten'), + $controller->url_for('course/room_requests/request_find_available_properties/' . $request_id . '/1'), + ['data-dialog' => 'size=big'] + ) ?> + + <? endif ?> + + <? if ($step === 1 || $step === 2) : ?> + <? if ($_SESSION[$request_id]['search_by'] !== 'category') : ?> + <? \Studip\Button::create(_('Raum auswählen'), 'select_room') ?> + <? endif ?> + <? endif ?> + + <? if (($step === 1 && $_SESSION[$request_id]['room_category_id'] !== '0') + || $step === 2) : ?> + <?= \Studip\Button::create(_('Weiter'), 'show_summary') ?> + <? endif ?> + + <? if ($step === 3) : ?> + <?= \Studip\Button::create(_('Raumanfrage speichern'), 'save_request') ?> + <? endif ?> + + <?= \Studip\LinkButton::createCancel( + _('Abbrechen'), + $controller->url_for('course/room_requests/index/' . $course_id), + [ + 'title' => _('Abbrechen') + ] + ) ?> + </footer> +</form> diff --git a/app/views/course/room_requests/_new_request_header.php b/app/views/course/room_requests/_new_request_header.php new file mode 100644 index 0000000..cd0d381 --- /dev/null +++ b/app/views/course/room_requests/_new_request_header.php @@ -0,0 +1,18 @@ +<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><?= htmlReady($request->getStatusText()) ?></section> + </section> +</section> diff --git a/app/views/course/room_requests/_request_edit_header.php b/app/views/course/room_requests/_request_edit_header.php deleted file mode 100644 index 89790d6..0000000 --- a/app/views/course/room_requests/_request_edit_header.php +++ /dev/null @@ -1,30 +0,0 @@ -<? if ($direct_room_requests_only): ?> - <?= MessageBox::info( - _('Geben Sie bitte den gewünschten Raum an. Ihre Raumanfrage wird von der zuständigen Raumvergabe bearbeitet.'), - [_('<strong>Achtung:</strong> Geben Sie bitte immer die notwendige Sitzplatzanzahl mit an!')] - )?> -<? else: ?> - <?= MessageBox::info( - _('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!')] - )?> -<? endif ?> -<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><?= htmlReady($request->getStatusText()) ?></section> - </section> -</section> - diff --git a/app/views/course/room_requests/_request_form_footer.php b/app/views/course/room_requests/_request_form_footer.php deleted file mode 100644 index bfcd3e9..0000000 --- a/app/views/course/room_requests/_request_form_footer.php +++ /dev/null @@ -1,28 +0,0 @@ -<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> diff --git a/app/views/course/room_requests/_request_form_header.php b/app/views/course/room_requests/_request_form_header.php deleted file mode 100644 index cdfe7bc..0000000 --- a/app/views/course/room_requests/_request_form_header.php +++ /dev/null @@ -1,4 +0,0 @@ -<form method="post" name="room_request" class="default" - action="<?= $action ?>" <?= Request::isXhr() ? 'data-dialog="size=big"' : ''?>> - <input type="hidden" name="request_id" value="<?= htmlReady($request_id) ?>"> - <?= CSRFProtection::tokenTag() ?> diff --git a/app/views/course/room_requests/_room_with_properties.php b/app/views/course/room_requests/_room_with_properties.php new file mode 100644 index 0000000..13ec336 --- /dev/null +++ b/app/views/course/room_requests/_room_with_properties.php @@ -0,0 +1,10 @@ +<? if ($selected_room): ?> + <label> + <?= _('Ausgewählter Raum') ?> + <input type="hidden" name="selected_room_id" + value="<?= htmlReady($selected_room->id) ?>"> + <br> + + <strong><?= htmlReady($selected_room->name) ?></strong> + </label> +<? endif ?> diff --git a/app/views/course/room_requests/index.php b/app/views/course/room_requests/index.php index 3f13b05..0f746b8 100644 --- a/app/views/course/room_requests/index.php +++ b/app/views/course/room_requests/index.php @@ -14,12 +14,12 @@ echo $flash['message']; <col style="width: 50px"> </colgroup> <thead> - <tr> - <th><?= _('Art der Anfrage') ?></th> - <th><?= _('Anfragender') ?></th> - <th><?= _('Bearbeitungsstatus') ?></th> - <th></th> - </tr> + <tr> + <th><?= _('Art der Anfrage') ?></th> + <th><?= _('Anfragender') ?></th> + <th><?= _('Bearbeitungsstatus') ?></th> + <th></th> + </tr> </thead> <tbody> <? foreach ($room_requests as $rr): ?> diff --git a/app/views/course/room_requests/new.php b/app/views/course/room_requests/new.php deleted file mode 100644 index 18edbdc..0000000 --- a/app/views/course/room_requests/new.php +++ /dev/null @@ -1,47 +0,0 @@ -<form method="POST" class="default" name="new_room_request" - action="<?= $this->controller->link_for('course/room_requests/request_start') ?>" - <?= Request::isXhr() ? 'data-dialog="size=big"' : '' ?>> - <?= CSRFProtection::tokenTag() ?> - - <fieldset> - <legend><?= _("Raumanfrage erstellen") ?></legend> - <? if (count($options)): ?> - <label> - <?= _("Art der Raumanfrage:") ?> - <select id="new_room_request_type" name="range_str"> - <? foreach ($options as $one) : ?> - <option value="<?= $one['value'] ?>"> - <?= htmlReady($one['name']) ?> - </option> - <? endforeach ?> - </select> - </label> - - <div class="text-center" data-dialog-button> - </div> - <? else : ?> - <?= MessageBox::info( - _("In dieser Veranstaltung können keine weiteren Raumanfragen gestellt werden.") - ) ?> - <? endif ?> - </fieldset> - - <footer data-dialog-button> - <? if (count($options)): ?> - <?= Studip\Button::create( - _('Erstellen'), - 'create_room_request' - ) ?> - <?= Studip\LinkButton::createCancel( - _('Abbrechen'), - $controller->link_for('course/room_requests/index/' . $course_id) - ) ?> - <? else: ?> - <?= Studip\LinkButton::create( - _('Zurück zur Übersicht'), - $controller->link_for('course/room_requests/index/' . $course_id), - ['data-dialog' => 'size=big'] - ) ?> - <? endif ?> - </footer> -</form> diff --git a/app/views/course/room_requests/request_start.php b/app/views/course/room_requests/new_request.php index 763ef5a..948db05 100644 --- a/app/views/course/room_requests/request_start.php +++ b/app/views/course/room_requests/new_request.php @@ -1,45 +1,17 @@ -<? if (!$embedded) : ?> - <?= $this->render_partial( - 'course/room_requests/_request_form_header', - [ - 'action' => $this->controller->link_for('course/room_requests/request_start/' . $request_id), - 'request_id' => $request_id - ] - ) ?> - <?= $this->render_partial( - 'course/room_requests/_request_edit_header', - ['request' => $request] - ) ?> -<? endif ?> -<section class="resources-grid"> - <div> - <fieldset> - <legend><?= _('Raum suchen') ?></legend> - <label> - <?= _('Raumname') ?> - <span class="flex-row"> - <input type="text" name="room_name" value="<?= htmlReady($room_name) ?>"> - <?= Icon::create('search', Icon::ROLE_CLICKABLE)->asInput( - [ - 'name' => 'search_by_name', - 'class' => 'text-bottom', - 'style' => 'margin-left: 0.2em; margin-top: 0.6em;' - ] - ) ?> - <? if ($room_name) : ?> - <?= Icon::create('refresh', Icon::ROLE_CLICKABLE, ['title' => _('alle Angaben zurücksetzen')])->asInput( - [ - 'type' => 'image', - 'class' => 'text-bottom', - 'name' => 'reset_category', - 'style' => 'margin-left: 0.2em; margin-top: 0.6em;' - ] - ) ?> - <? endif?> - </span> - </label> +<form method="post" name="room_request" class="default" + action="<?= $controller->link_for('course/room_requests/request_first_step/' . $request_id) ?>" + <?= Request::isXhr() ? 'data-dialog="size=big"' : ''?>> + <input type="hidden" name="request_id" value="<?= htmlReady($request_id) ?>"> + <?= CSRFProtection::tokenTag() ?> + + <?= $this->render_partial('course/room_requests/_new_request_header') ?> + + <section class="resources-grid"> + <div> + <fieldset> + <legend><?= _('Suche nach Raumkategorie und Eigenschaften') ?></legend> + <? if ($available_room_categories): ?> - <strong><p><?= _('Wünschbare Eigenschaften') ?></p></strong> <label> <?= _('Raumkategorie') ?> <span class="flex-row"> @@ -47,16 +19,17 @@ <option value=""><?= _('bitte auswählen') ?></option> <? foreach ($available_room_categories as $rc): ?> <option value="<?= htmlReady($rc->id) ?>" - <?= ($category_id == $rc->id) - ? 'selected="selected"' + <?= $_SESSION[$request_id]['room_category'] === $rc->id + ? 'selected' : '' ?>> <?= htmlReady($rc->name) ?> </option> <? endforeach ?> </select> <? if ($category) : ?> - <?= Icon::create('refresh', Icon::ROLE_CLICKABLE, ['title' => _('alle Angaben zurücksetzen')])->asInput( + <?= Icon::create('decline')->asInput( [ + 'title' => _('alle Angaben zurücksetzen'), 'type' => 'image', 'class' => 'text-bottom', 'name' => 'reset_category', @@ -64,11 +37,12 @@ ] ) ?> <? else : ?> - <?= Icon::create('accept', Icon::ROLE_CLICKABLE, ['title' => _('Raumtyp auswählen')])->asInput( + <?= Icon::create('accept')->asInput( [ + 'title' => _('Raumtyp auswählen'), 'type' => 'image', 'class' => 'text-bottom', - 'name' => 'select_properties', + 'name' => 'search_by_category', 'value' => _('Raumtyp auswählen'), 'style' => 'margin-left: 0.2em; margin-top: 0.6em;' ] @@ -80,6 +54,39 @@ <? if (!$embedded) : ?> </fieldset> </div> + + <div> + <fieldset> + <legend><?= _('Raumsuche') ?></legend> + <label> + <?= _('Raumname') ?> + <span class="flex-row"> + <input type="text" name="room_name" value="<?= htmlReady($_SESSION[$request_id]['room_name']) ?>"> + <?= Icon::create('search')->asInput( + [ + 'title' => _('Räume suchen'), + 'name' => 'search_by_name', + 'class' => 'text-bottom', + 'style' => 'margin-left: 0.2em; margin-top: 0.6em;' + ] + ) ?> + <? if ($room_name) : ?> + <?= Icon::create('decline')->asInput( + [ + 'title' => _('alle Angaben zurücksetzen'), + 'type' => 'image', + 'class' => 'text-bottom', + 'name' => 'reset_name', + 'style' => 'margin-left: 0.2em; margin-top: 0.6em;' + ] + ) ?> + <? endif?> + </span> + </label> + + </fieldset> + + </div> </section> -<?= $this->render_partial('course/room_requests/_request_form_footer') ?> +<?= $this->render_partial('course/room_requests/_new_request_form_footer', ['step' => $step]) ?> <? endif ?> diff --git a/app/views/course/room_requests/request_find_available_properties.php b/app/views/course/room_requests/request_find_available_properties.php new file mode 100644 index 0000000..ea0767f --- /dev/null +++ b/app/views/course/room_requests/request_find_available_properties.php @@ -0,0 +1,124 @@ +<form method="post" name="room_request" class="default" + action="<?= $controller->link_for('course/room_requests/request_check_properties/' . $request_id . '/' . $this->step) ?>" + <?= Request::isXhr() ? 'data-dialog="size=big"' : ''?>> + <input type="hidden" name="request_id" value="<?= htmlReady($request_id) ?>"> + <?= CSRFProtection::tokenTag() ?> + + <?= $this->render_partial('course/room_requests/_new_request_header') ?> + + <section class="resources-grid"> + <div> + <fieldset class="request-fieldset"> + <legend><?= _('Wünschbare Eigenschaften') ?></legend> + + <? if ($step === 1 || $step === 2) : ?> + <?= $this->render_partial('course/room_requests/_room_with_properties') ?> + <? endif ?> + + <? if ($available_room_categories): ?> + <label> + <?= _('Raumkategorie') ?> + <span class="flex-row"> + <select name="category_id" > + <option value="0"><?= _('bitte auswählen') ?></option> + <? foreach ($available_room_categories as $rc): ?> + <option value="<?= htmlReady($rc->id) ?>" + <?= $room_category_id === $rc->id + ? 'selected' + : '' ?>> + <?= htmlReady($rc->name) ?> + </option> + <? endforeach ?> + </select> + <?= Icon::create('accept')->asInput( + [ + 'title' => _('Raumtyp auswählen'), + 'type' => 'image', + 'class' => 'text-bottom', + 'name' => 'search_by_category', + 'value' => _('Raumtyp auswählen'), + 'style' => 'margin-left: 0.2em; margin-top: 0.6em;' + ] + ) ?> + <? if ($category) : ?> + <?= Icon::create('decline')->asInput( + [ + 'title' => _('alle Angaben zurücksetzen'), + 'type' => 'image', + 'class' => 'text-bottom', + 'name' => 'reset_category', + 'style' => 'margin-left: 0.2em; margin-top: 0.6em;' + ] + ) ?> + <? endif ?> + </span> + </label> + <? endif ?> + + <!-- ROOM CATEGORY PROPERTIES --> + <? if ($available_properties) : ?> + <? foreach ($available_properties as $property) : ?> + <?= $property->toHtmlInput( + $selected_properties[$property->name], + 'selected_properties[' . htmlReady($property->name) . ']', + true, + false + ) ?> + <? endforeach ?> + + <div> + <?= \Studip\Button::create(_('Räume suchen'), 'search_rooms') ?> + </div> + <? endif ?> + + </fieldset> + </div> + + <div> + <fieldset class="request-fieldset"> + <legend><?= _('Raumsuche') ?></legend> + <label> + <?= _('Raumname') ?> + <span class="flex-row"> + <input type="text" name="room_name" value="<?= htmlReady($room_name) ?>" > + <?= Icon::create('search')->asInput( + [ + 'title' => _('Räume suchen'), + 'name' => 'search_by_name', + 'class' => 'text-bottom', + 'style' => 'margin-left: 0.2em; margin-top: 0.6em;' + ] + ) ?> + </span> + </label> + <? if ($available_rooms) : ?> + <label><strong><?= _('Passende Räume') ?></strong> + <section class="selectbox" id="room_select"> + <? 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) ?>" + <? if ($_SESSION[$request_id]['room_id'] === $room->id) echo 'checked' ?>> + <?= htmlReady(mila($room->name, 50)) . ' (' . $room['category']->name . ')'?> + <? if ($room->properties): ?> + <? $property_names = $room->getInfolabelProperties() + ->pluck('fullname') ?> + <?= tooltipIcon(implode("\n", $property_names)) ?> + <? endif ?> + </label> + </div> + <? endforeach ?> + </section> + </label> + <?= \Studip\Button::create(_('Raum auswählen'), 'select_room') ?> + <? else : ?> + <? endif ?> + </fieldset> + + </div> + </section> + +<?= $this->render_partial('course/room_requests/_new_request_form_footer', ['step' => $step, 'search_by' => 'category']) ?> diff --git a/app/views/course/room_requests/request_find_matching_rooms.php b/app/views/course/room_requests/request_find_matching_rooms.php new file mode 100644 index 0000000..a474ab2 --- /dev/null +++ b/app/views/course/room_requests/request_find_matching_rooms.php @@ -0,0 +1,134 @@ +<form method="post" name="room_request" class="default" + action="<?= $controller->link_for('course/room_requests/request_find_matching_rooms/' . $request_id . '/' . $this->step) ?>" + <?= Request::isXhr() ? 'data-dialog="size=big"' : ''?>> + <input type="hidden" name="request_id" value="<?= htmlReady($request_id) ?>"> + <?= CSRFProtection::tokenTag() ?> + + <?= $this->render_partial('course/room_requests/_new_request_header') ?> + + <section class="resources-grid"> + <div> + <fieldset class="request-fieldset"> + <legend><?= _('Wünschbare Eigenschaften') ?></legend> + + <? if ($step === 1 || $step === 2) : ?> + <?= $this->render_partial('course/room_requests/_room_with_properties') ?> + <? endif ?> + + <? if ($available_room_categories): ?> + <label> + <?= _('Raumkategorie') ?> + <span class="flex-row"> + <select name="category_id" > + <option value="0"><?= _('bitte auswählen') ?></option> + <? foreach ($available_room_categories as $rc): ?> + <option value="<?= htmlReady($rc->id) ?>" + <?= $_SESSION[$request_id]['room_category_id'] === $rc->id + ? 'selected' + : '' ?>> + <?= htmlReady($rc->name) ?> + </option> + <? endforeach ?> + </select> + <?= Icon::create('accept')->asInput( + [ + 'title' => _('Raumtyp auswählen'), + 'type' => 'image', + 'class' => 'text-bottom', + 'name' => 'select_properties', + 'value' => _('Raumtyp auswählen'), + 'style' => 'margin-left: 0.2em; margin-top: 0.6em;' + ] + ) ?> + + <? if ($category) : ?> + <?= Icon::create('decline')->asInput( + [ + 'title' => _('alle Angaben zurücksetzen'), + 'type' => 'image', + 'class' => 'text-bottom', + 'name' => 'reset_category', + 'style' => 'margin-left: 0.2em; margin-top: 0.6em;' + ] + ) ?> + <? endif ?> + </span> + </label> + <? endif ?> + + <? if ($step === 2) : ?> + <!-- After choosing a category or room --> + <? if ($available_properties) : ?> + <? foreach ($available_properties as $property) : ?> + <?= $property->toHtmlInput( + $selected_properties[$property->name], + 'selected_properties[' . htmlReady($property->name) . ']', + true, + false, + false + ) ?> + <? endforeach ?> + <? endif ?> + + <?= \Studip\Button::create(_('Räume suchen'), 'search_rooms') ?> + + <? endif ?> + + <? if (!$embedded) : ?> + </fieldset> + + </div> + + <div> + <fieldset class="request-fieldset"> + <legend><?= _('Raumsuche') ?></legend> + <label> + <?= _('Raumname') ?> + <span class="flex-row"> + <input type="text" name="room_name" value="<?= htmlReady($_SESSION[$request_id]['room_name']) ?>"> + <?= Icon::create('search')->asInput( + [ + 'title' => _('Räume suchen'), + 'name' => 'search_by_name', + 'class' => 'text-bottom', + 'style' => 'margin-left: 0.2em; margin-top: 0.6em;' + ] + ) ?> + </span> + </label> + <? if ($available_rooms) : ?> + <label> + <strong><?= _('Passende Räume') ?></strong> + <section class="selectbox" id="room_selection"> + <? 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) ?>" + <? if ($_SESSION[$request_id]['room_id'] === $room->id) echo 'checked' ?>> + <?= htmlReady(mila($room->name, 60)) . ' (' . $room['category']->name . ')'?> + <? if ($room->properties): ?> + <? $property_names = $room->getInfolabelProperties() + ->pluck('fullname') ?> + <?= tooltipIcon(implode("\n", $property_names)) ?> + <? endif ?> + </label> + </div> + <? endforeach ?> + </section> + </label> + <?= \Studip\Button::create(_('Raum auswählen'), 'select_room') ?> + + <? else : ?> + <?= MessageBox::info(_('Es wurden keine passenden Räume gefunden!')) ?> + <? endif ?> + + </fieldset> + + </div> + </section> + + <?= $this->render_partial('course/room_requests/_new_request_form_footer', ['step' => $step, 'search_by' => 'roomname']) ?> +<? endif ?> diff --git a/app/views/course/room_requests/request_select_properties.php b/app/views/course/room_requests/request_select_properties.php deleted file mode 100644 index de45b11..0000000 --- a/app/views/course/room_requests/request_select_properties.php +++ /dev/null @@ -1,65 +0,0 @@ -<? if (empty($embedded)) : ?> - <?= $this->render_partial( - 'course/room_requests/_request_form_header', - [ - 'action' => $this->controller->link_for('course/room_requests/request_select_properties/' . $request_id), - 'request_id' => $request_id - ] - ) ?> - <?= $this->render_partial( - 'course/room_requests/_request_edit_header', - ['request' => $request] - ) ?> - <?= $this->render_partial( - 'course/room_requests/request_start', - ['embedded' => true] - ) ?> -<? endif ?> - -<? if ($available_properties) : ?> - <? foreach ($available_properties as $property) : ?> - <?= $property->toHtmlInput( - $selected_properties[$property->name] ?? '', - 'selected_properties[' . htmlReady($property->name) . ']', - true, - false - ) ?> - <? endforeach ?> -<? endif ?> - -<label> - <?= _('Rüstzeit (in Minuten)') ?> - <input type="number" name="preparation_time" - value="<?= htmlReady($preparation_time) ?>" - min="0" max="<?= htmlReady($max_preparation_time) ?>"> -</label> - -<label> - <input type="checkbox" name="reply_lecturers" value="1" - <?= $reply_lecturers - ? 'checked="checked"' - : '' - ?>> - <?= _('Benachrichtigung bei Ablehnung der Raumanfrage auch an alle Lehrenden der Veranstaltung senden') ?> -</label> - - - <label> - <?= _('Nachricht an die Raumvergabe') ?> - <textarea name="comment" cols="58" rows="4" - placeholder="<?= _('Weitere Wünsche oder Bemerkungen zur angefragten Raumbelegung') ?>"><?= htmlReady($comment) ?></textarea> - </label> - -<? if (empty($embedded)) : ?> - </div> - </section> - <?= $this->render_partial( - 'course/room_requests/_request_form_footer', - [ - 'room_search_button' => true, - 'save_buttons' => true, - 'room_select_button' => false, - 'select_properties_button' => false - ] - ) ?> -<? endif ?> diff --git a/app/views/course/room_requests/request_select_room.php b/app/views/course/room_requests/request_select_room.php deleted file mode 100644 index 752ad98..0000000 --- a/app/views/course/room_requests/request_select_room.php +++ /dev/null @@ -1,66 +0,0 @@ -<? if (empty($embedded)) : ?> - <?= $this->render_partial( - 'course/room_requests/_request_form_header', - [ - 'action' => $this->controller->link_for('course/room_requests/request_select_room/' . $request_id), - 'request_id' => $request_id - ] - ) ?> - <?= $this->render_partial( - 'course/room_requests/_request_edit_header', - ['request' => $request] - ) ?> - <?= $this->render_partial( - 'course/room_requests/request_start', - ['embedded' => true] - ) ?> - <? if (($category instanceof ResourceCategory) && !$direct_room_requests_only): ?> - <?= $this->render_partial( - 'course/room_requests/request_select_properties', - ['embedded' => true] - ) ?> - <? endif ?> -<? endif ?> -</div> - -<div> -<? if ($available_rooms) : ?> - <section class="contentbox"> - <header><h1><?= _('Passende Räume') ?></h1></header> - <section class="selectbox"> - <fieldset> - <? 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->getInfolabelProperties() - ->pluck('fullname') ?> - <?= tooltipIcon(implode("\n", $property_names)) ?> - <? endif ?> - </label> - </div> - <? endforeach ?> - </fieldset> - </section> - </section> - <? else : ?> - <?= MessageBox::info(_('Es wurden keine passenden Räume gefunden!')) ?> - <? endif ?> - </div> -</section> -<? if (empty($embedded)) : ?> - <?= $this->render_partial( - 'course/room_requests/_request_form_footer', - [ - 'room_search_button' => true, - 'room_select_button' => true, - 'save_buttons' => true, - 'select_properties_button' => false - ] - ) ?> -<? endif ?> diff --git a/app/views/course/room_requests/request_show_summary.php b/app/views/course/room_requests/request_show_summary.php new file mode 100644 index 0000000..732e2a4 --- /dev/null +++ b/app/views/course/room_requests/request_show_summary.php @@ -0,0 +1,88 @@ +<form method="post" name="room_request" class="default" + action="<?= $controller->link_for('course/room_requests/store_request/' . $request_id) ?>" + <?= Request::isXhr() ? 'data-dialog="size=big"' : ''?>> + <input type="hidden" name="request_id" value="<?= htmlReady($request_id) ?>"> + <?= CSRFProtection::tokenTag() ?> + + + <?= $this->render_partial('course/room_requests/_new_request_header') ?> + <section class="resources-grid"> + <div> + <fieldset> + <legend> + <?= _('Zusammenfassung') ?> + </legend> + <label> + <?= _('Ausgewählte Raumkategorie') ?> + <input type="hidden" name="selected_room_id" + value="<?= htmlReady($selected_room->id) ?>"> + <br> + + <strong><?= htmlReady($selected_room_category->name) ?></strong> + </label> + + <label> + <?= _('Ausgewählter Raum') ?> + <? if ($selected_room): ?> + <input type="hidden" name="selected_room_id" + value="<?= htmlReady($selected_room->id) ?>"> + <br> + + <strong><?= htmlReady($selected_room->name) ?></strong> + <? else : ?> + <br> + + <strong><?= _('Es wurde kein spezifischer Raum gewählt.') ?></strong> + <? endif ?> + </label> + + <? foreach ($available_properties as $property) : ?> + <? foreach ($selected_properties as $key => $value) : ?> + <? if ($property->name === $key) : ?> + <?= $property->toHtmlInput( + $selected_properties[$property->name], + 'selected_properties[' . htmlReady($property->name) . ']', + true, + false, + true + ) ?> + <? endif ?> + <? endforeach ?> + <? endforeach ?> + + </fieldset> + </div> + <div> + <fieldset> + <legend> + <?= _('Sonstiges') ?> + </legend> + <label> + <?= _('Rüstzeit (in Minuten)') ?> + <input type="number" name="preparation_time" + value="<?= htmlReady($preparation_time) ?>" + min="0" max="<?= htmlReady($max_preparation_time) ?>"> + </label> + + <? if ($user_is_global_resource_admin) : ?> + <label> + <input type="checkbox" name="reply_lecturers" value="1" + <?= $reply_lecturers + ? 'checked' + : '' + ?>> + <?= _('Benachrichtigung bei Ablehnung der Raumanfrage auch an alle Lehrenden der Veranstaltung senden') ?> + </label> + <? endif ?> + + <label> + <?= _('Nachricht an die Raumvergabe') ?> + <textarea name="comment" cols="58" rows="4" + placeholder="<?= _('Weitere Wünsche oder Bemerkungen zur angefragten Raumbelegung') ?>"><?= htmlReady($comment) ?></textarea> + </label> + + </fieldset> + </div> + + </section> + <?= $this->render_partial('course/room_requests/_new_request_form_footer', ['step' => $step, 'search_by' => 'roomname']) ?> diff --git a/app/views/course/room_requests/request_summary.php b/app/views/course/room_requests/request_summary.php deleted file mode 100644 index 4108deb..0000000 --- a/app/views/course/room_requests/request_summary.php +++ /dev/null @@ -1,100 +0,0 @@ -<form method="post" name="room_request" class="default" - action="<?= $this->controller->link_for('course/room_requests/request_summary/' . $request_id) ?>"> - <input type="hidden" name="request_id" value="<?= htmlReady($request_id) ?>"> - <?= $this->render_partial( - 'course/room_requests/_request_edit_header', - ['request' => $request] - ) ?> - <?= CSRFProtection::tokenTag() ?> - <section class="resources-grid"> - <div> - <fieldset> - <legend><?= _('Ausgewählter Raum') ?></legend> - <? if (!empty($selected_room)): ?> - <input type="hidden" name="selected_room_id" - value="<?= htmlReady($selected_room->id) ?>"> - <input type="hidden" name="confirmed_selected_room_id" - value="<?= htmlReady($selected_room->id) ?>"> - <?= htmlReady($selected_room->name) ?> - <? if ($selected_room->properties): ?> - <? $property_names = $selected_room->properties - ->findBy('info_label', 1) - ->findBy('state', '', '!=') - ->pluck('fullname') ?> - <?= tooltipIcon( - implode("\n", $property_names) - ) ?> - <? endif ?> - <?= Studip\Button::create( - _('Anderen Raum wählen'), - 'select_other_room' - ) ?> - <? else: ?> - <?= MessageBox::info( - _('Es wurde kein konkreter Raum ausgewählt!') - ) ?> - <?= Studip\Button::create( - _('Eigenschaften neu wählen'), - 'select_properties' - ) ?> - <? endif ?> - <? if ($request->properties): ?> - <? foreach ($request->properties as $property): ?> - <? if (!in_array($property->name, ['seats'])): ?> - <dt><?= htmlReady($property->display_name) ?></dt> - <dd><?= htmlReady($property->__toString()) ?></dd> - <? endif ?> - <? endforeach ?> - <? endif ?> - <? if ($request->category): ?> - <dt><?= _('Gewünschter Raumtyp') ?>:</dt> - <dd><?= htmlReady($request->category->name) ?></dd> - <? endif ?> - <label> - <?= _('Erwartete Anzahl an Teilnehmenden') ?>: - <input type="number" name="seats" - value="<?= htmlReady($seats) ?>" - min="1"> - </label> - <label> - <?= _('Rüstzeit (in Minuten)') ?> - <input type="number" name="preparation_time" - value="<?= htmlReady($preparation_time) ?>" - min="0" max="<?= htmlReady($max_preparation_time) ?>"> - </label> - <label> - <input type="checkbox" name="reply_lecturers" value="1" - <?= $reply_lecturers - ? 'checked="checked"' - : '' - ?>> - <?= _('Benachrichtigung bei Ablehnung der Raumanfrage auch an alle Lehrenden der Veranstaltung senden') ?> - </label> - </fieldset> - </div> - <div> - <fieldset> - <legend><?= _('Nachricht an die Raumvergabe') ?></legend> - <textarea name="comment" cols="58" rows="4" - placeholder="<?= _('Weitere Wünsche oder Bemerkungen zur angefragten Raumbelegung') ?>"><?= htmlReady($comment) ?></textarea> - </fieldset> - </div> - </section> - <footer data-dialog-button> - <?= \Studip\Button::create( - _('Speichern'), - 'save' - ) ?> - <?= \Studip\Button::create( - _('Speichern und zurück zur Übersicht'), - 'save_and_close' - ) ?> - <?= \Studip\LinkButton::createCancel( - _('Abbrechen'), - $controller->link_for('course/room_requests/index/' . $course_id), - [ - 'title' => _('Abbrechen') - ] - ) ?> - </footer> -</form> diff --git a/app/views/course/timesrooms/_cancel_form.php b/app/views/course/timesrooms/_cancel_form.php index 8a2b706..eaadaf1 100644 --- a/app/views/course/timesrooms/_cancel_form.php +++ b/app/views/course/timesrooms/_cancel_form.php @@ -17,3 +17,4 @@ if (isset($termin) && $termin instanceof CourseExDate) { <input type="checkbox" id="cancel_send_message" name="cancel_send_message" value="1"> <?= _('Benachrichtigung über ausfallende Termine an alle Teilnehmenden verschicken') ?> </label> + diff --git a/app/views/course/timesrooms/_regularEvents.php b/app/views/course/timesrooms/_regularEvents.php index f2b1829..baaa2d8 100644 --- a/app/views/course/timesrooms/_regularEvents.php +++ b/app/views/course/timesrooms/_regularEvents.php @@ -89,18 +89,19 @@ <? if (Config::get()->RESOURCES_ALLOW_ROOM_REQUESTS) : ?> <? $actionMenu->addLink( $controller->url_for( - 'course/room_requests/request_start/', + 'course/room_requests/new_request/', [ - 'range' => 'cycle', - 'range_id' => $metadate_id + 'cid' => $course->id, + 'range_str' => 'cycle', + 'range_id' => $metadate_id ] ), - _('Raumanfrage erstellen'), + _('Neue Raumanfrage'), Icon::create( 'room-request', Icon::ROLE_CLICKABLE, [ - 'title' => _('Raumanfrage erstellen'), + 'title' => _('Neue Raumanfrage'), 'style' => 'vertical-align: middle;' ] ), diff --git a/app/views/course/timesrooms/_roomRequest.php b/app/views/course/timesrooms/_roomRequest.php index 3eecb3c..9f80e96 100644 --- a/app/views/course/timesrooms/_roomRequest.php +++ b/app/views/course/timesrooms/_roomRequest.php @@ -1,12 +1,7 @@ -<?php -$global_requests = $course->room_requests->filter(function (RoomRequest $request) { - return $request->closed < 2 && !$request->termin_id; -}); -?> -<section class="contentbox"> +<section class="contentbox" id="request"> <header> <h1> - <?= _('Raumanfrage für die gesamte Veranstaltung') ?> + <?= _('Raumanfragen für die gesamte Veranstaltung') ?> </h1> <nav> @@ -14,7 +9,7 @@ $global_requests = $course->room_requests->filter(function (RoomRequest $request _('Hier können Sie für die gesamte Veranstaltung, also für alle regelmäßigen und unregelmäßigen Termine, ' . 'eine Raumanfrage erstellen.') ) ?> - <a class="link-add" href="<?= $controller->url_for('course/room_requests/request_start', + <a class="link-add" href="<?= $controller->link_for('course/room_requests/new_request', [ 'cid' => $course->id, 'range_str' => 'course', @@ -29,13 +24,102 @@ $global_requests = $course->room_requests->filter(function (RoomRequest $request </nav> </header> + <?= $flash['message'] ?> + + <? if (count($room_requests)) : ?> <section> - <? if (count($global_requests) > 0): ?> - <p><?= _('Für diese Veranstaltung liegt eine offene Raumanfrage vor') ?></p> - <?= Studip\LinkButton::create(_('Raumanfragen anzeigen'), - URLHelper::getURL('dispatch.php/course/room_requests/index/' . $course->getId())) ?> - <? else: ?> - <p><?= _('Keine Raumanfrage vorhanden') ?></p> - <? endif ?> + <table class="default sortable-table"> + <colgroup> + <col style="width: 40%"> + <col style="width: 20%"> + <col> + <col style="width: 50px"> + </colgroup> + <thead> + <tr class="sortable"> + <th data-sort="text"><?= _('Art der Anfrage') ?></th> + <th data-sort="text"><?= _('Anfragender') ?></th> + <th data-sort="text"><?= _('Bearbeitungsstatus') ?></th> + <th></th> + </tr> + </thead> + <tbody> + <? foreach ($room_requests as $rr): ?> + <tr> + <td> + <?= htmlReady($rr->getTypeString(), 1, 1) ?> + </td> + <td> + <?= htmlReady($rr->user ? $rr->user->getFullName() : '') ?> + </td> + <td> + <?= htmlReady($rr->getStatusText()) ?> + </td> + <td class="actions"> + <a class="load-in-new-row" + href="<?= $controller->link_for('course/room_requests/info/' . $rr->id) ?>" + aria-expanded="false"> + <?= Icon::create('info')->asImg(['title' => _('Weitere Informationen einblenden')]) ?> + </a> + <? $params = [] ?> + <? $dialog = []; ?> + <? if (Request::isXhr()) : ?> + <? $params['asDialog'] = true; ?> + <? $dialog['data-dialog'] = 'size=big' ?> + <? endif ?> + + <? $actionMenu = ActionMenu::get()->setContext($rr->getTypeString()) ?> + <? $actionMenu->addLink( + $controller->url_for('course/room_requests/request_show_summary/' . $rr->id, ['clear_cache' => 1]), + _('Diese Anfrage bearbeiten'), + Icon::create('edit'), + ['title' => _('Diese Anfrage bearbeiten'), 'data-dialog' => 'size=big'] + ) ?> + + <?php + if ($rr->room && !$user_has_permissions) { + $user_has_permissions = $rr->room->userHasPermission($current_user, 'admin'); + } + ?> + + <? if ($user_has_permissions && !$rr->closed): ?> + <? $actionMenu->addLink( + URLHelper::getURL( + 'dispatch.php/resources/room_request/resolve/' . $rr->id, + [ + 'reload-on-close' => 1, + 'single-request' => 1 + ] + ), + _('Diese Anfrage selbst auflösen'), + Icon::create('admin'), + ['title' => _('Diese Anfrage selbst auflösen')], + ['data-dialog' => '1'] + ) ?> + <? endif ?> + <? $actionMenu->addLink( + $controller->url_for('course/room_requests/delete/' . $rr->id), + _('Diese Anfrage löschen'), + Icon::create('trash'), + ['title' => _('Diese Anfrage löschen')] + ) ?> + <?= $actionMenu->render() ?> + </td> + </tr> + <? endforeach ?> + <? if ($request_id === $rr->id) : ?> + <tr> + <td colspan="4"> + <?= $this->render_partial('course/room_requests/_request.php', ['request' => $rr]); ?> + </td> + </tr> + <? endif ?> + </tbody> + </table> </section> + <? else : ?> + <?= MessageBox::info(_('Zu dieser Veranstaltung sind noch keine Raumanfragen vorhanden.')) ?> + <? endif ?> + + </section> diff --git a/app/views/course/timesrooms/_roomRequestInfo.php b/app/views/course/timesrooms/_roomRequestInfo.php index 7bc3660..6b3315b 100644 --- a/app/views/course/timesrooms/_roomRequestInfo.php +++ b/app/views/course/timesrooms/_roomRequestInfo.php @@ -8,7 +8,5 @@ $open_requests = $course->room_requests->filter(function (RoomRequest $request) 'Für diese Veranstaltung liegt eine offene Raumanfrage vor.', 'Für diese Veranstaltung liegen %u offene Raumanfragen vor', count($open_requests) - ), count($open_requests)) . '<br>' - . Studip\LinkButton::create(_('Raumanfragen anzeigen'), - URLHelper::getURL('dispatch.php/course/room_requests/index/' . $course->getId()))) ?> + ), count($open_requests))) ?> <? endif; ?> diff --git a/app/views/course/timesrooms/editDate.php b/app/views/course/timesrooms/editDate.php index 3be5e7c..a8dea31 100644 --- a/app/views/course/timesrooms/editDate.php +++ b/app/views/course/timesrooms/editDate.php @@ -228,8 +228,8 @@ 'course/room_requests/request_summary/' . $request_id ) : $controller->url_for( - 'course/room_requests/request_start/' . $request_id, - array_merge($params, ['range_str' => 'date_' . $date->id,'origin' => 'course_timesrooms']) + 'course/room_requests/new_request/' . $request_id, + array_merge($params, ['range_str' => 'date', 'range_id' => $date->id]) ) ), ['data-dialog' => 'size=big']) ?> diff --git a/app/views/course/timesrooms/index.php b/app/views/course/timesrooms/index.php index 8636ebb..e82409d 100644 --- a/app/views/course/timesrooms/index.php +++ b/app/views/course/timesrooms/index.php @@ -22,13 +22,3 @@ <?= $this->render_partial('course/timesrooms/_roomRequest.php') ?> <? endif ?> -<? if (Request::isXhr() && !$locked && Config::get()->RESOURCES_ENABLE && Config::get()->RESOURCES_ALLOW_ROOM_REQUESTS): ?> - <div data-dialog-button> - <?= Studip\LinkButton::create( - _('Raumanfrage erstellen'), - $controller->url_for('course/room_requests/request_start', - ['cid' => $course->id, 'range_str' => 'course', 'origin' => 'admin_courses']), - ['data-dialog' => 'size=big'] - ) ?> - </div> -<? endif ?> |
