From aad38b5375a5491d5032bc14235525005e3f619d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michaela=20Br=C3=BCckner?= <brueckner@data-quest.de>
Date: Mon, 22 Aug 2022 15:07:06 +0200
Subject: [PATCH] check for seats, re #1327

---
 app/controllers/course/room_requests.php      | 33 +++++++++++-
 .../_new_request_form_footer.php              | 40 ++++++++-------
 .../course/room_requests/find_by_category.php |  1 +
 .../course/room_requests/find_by_roomname.php | 50 +++++++++++++------
 .../course/room_requests/new_request.php      |  2 +-
 .../room_requests/request_first_step.php      |  1 -
 .../room_requests/request_second_step.php     |  1 -
 7 files changed, 90 insertions(+), 38 deletions(-)
 delete mode 100644 app/views/course/room_requests/request_first_step.php
 delete mode 100644 app/views/course/room_requests/request_second_step.php

diff --git a/app/controllers/course/room_requests.php b/app/controllers/course/room_requests.php
index 4a2849bf9b3..12141cbdc30 100644
--- a/app/controllers/course/room_requests.php
+++ b/app/controllers/course/room_requests.php
@@ -292,11 +292,12 @@ class Course_RoomRequestsController extends AuthenticatedController
     {
         $this->request_id = $request_id;
         $this->step = 1;
+        $_SESSION[$request_id]['search_by'] = '';
 
         if (Request::isPost()) {
             CSRFProtection::verifyUnsafeRequest();
 
-            // either search by room (name) or room category, then go to next step
+            // either search by room name or room category, then go to next step
             $this->room_name = Request::get('room_name');
             $_SESSION[$request_id]['room_name'] = $this->room_name;
             $this->search_by_roomname = Request::submitted('search_by_name');
@@ -306,10 +307,13 @@ class Course_RoomRequestsController extends AuthenticatedController
 
             // 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]['search_by'] = 'roomname';
                 $this->redirect(
                     'course/room_requests/find_by_roomname/' . $this->request_id . '/' . $this->step
                 );
             } else if ($this->category_id != null && $this->search_by_category != null ) {
+                $_SESSION[$request_id]['search_by'] = 'category';
+
                 $this->redirect(
                     'course/room_requests/find_by_category/' . $this->request_id . '/' . $this->step
                 );
@@ -345,7 +349,6 @@ class Course_RoomRequestsController extends AuthenticatedController
 
         // for step 2 after choosing a room
         if ($step == 2) {
-            echo"Hallo";
             $this->category = ResourceCategory::find($this->selected_room_category_id);
             $this->available_properties = $this->category->getRequestableProperties();
         }
@@ -369,6 +372,25 @@ class Course_RoomRequestsController extends AuthenticatedController
                 'course/room_requests/find_by_roomname/' . $this->request_id . '/' . $this->step
             );
         }
+        $this->selected_properties = Request::getArray('selected_properties');
+        $_SESSION[$request_id]['seats'] = $this->selected_properties['seats'];
+
+        if (Request::submitted('save_request')) {
+            // we need the seats property with at least one seat, else we get an error
+            if ($_SESSION[$request_id]['seats'] < 1) {
+                PageLayout::postError(
+                    _('Es wurde keine Anzahl an gewünschten Sitzplätzen angegeben!')
+                );
+                $this->redirect(
+                    'course/room_requests/find_by_roomname/' . $this->request_id . '/' . $this->step
+                );
+            } else {
+                // TODO actually save the request
+                PageLayout::postSuccess(_('Die Anfrage wurde gespeichert!'));
+                $this->relocate('course/timesrooms/');
+            }
+
+        }
 
 
     }
@@ -399,6 +421,13 @@ class Course_RoomRequestsController extends AuthenticatedController
             'course/room_requests/find_by_roomname/' . $this->request_id . '/' . $this->step
         );
 
+    }
+
+    public function save_request_action($request_id) {
+        $this->request_id = $request_id;
+
+
+
     }
 
     private function getRoomBookingIcons($available_rooms, $request_id)
diff --git a/app/views/course/room_requests/_new_request_form_footer.php b/app/views/course/room_requests/_new_request_form_footer.php
index c32c567f8a6..68b82db5105 100644
--- a/app/views/course/room_requests/_new_request_form_footer.php
+++ b/app/views/course/room_requests/_new_request_form_footer.php
@@ -1,25 +1,27 @@
-<footer data-dialog-button>
-    <? if ($step >= 1) : ?>
-        <?= \Studip\LinkButton::create(
-            _('Zurück'),
-            $controller->link_for('course/room_requests/new_request/' . $request_id),
-            [
-                'data-dialog' => 'size=big'
-            ]
+    <footer data-dialog-button>
+        <? if ($step >= 1) : ?>
+            <?= \Studip\LinkButton::create(
+                _('Zurück'),
+                $controller->link_for('course/room_requests/new_request/' . $request_id),
+                ['data-dialog' => 'size=big']
+            ) ?>
 
-        ) ?>
 
-        <?= \Studip\Button::create(_('Weiter'), 'request_second_step') ?>
+        <? endif ?>
 
-    <? endif ?>
+        <? if ($step == 1 && $_SESSION[$request_id]['search_by'] == 'roomname') : ?>
+            <?= \Studip\Button::create(_('Weiter'), 'request_second_step') ?>
+        <? elseif (($step == 1 && $_SESSION[$request_id]['search_by'] == 'category') || ($step == 2 && $_SESSION[$request_id]['search_by'] == 'roomname')) : ?>
+            <?= \Studip\Button::create(_('Speichern'), 'save_request') ?>
+        <? endif ?>
 
-    <?= \Studip\LinkButton::createCancel(
-        _('Abbrechen'),
-        $controller->link_for('course/room_requests/index/' . $course_id),
-        [
-            'title' => _('Abbrechen')
-        ]
-    ) ?>
-</footer>
+        <?= \Studip\LinkButton::createCancel(
+            _('Abbrechen'),
+            $controller->link_for('course/room_requests/index/' . $course_id),
+            [
+                'title' => _('Abbrechen')
+            ]
+        ) ?>
+    </footer>
 </form>
 Step: <?= $step ?>
diff --git a/app/views/course/room_requests/find_by_category.php b/app/views/course/room_requests/find_by_category.php
index c2fdfd61bbf..5eade46fffe 100644
--- a/app/views/course/room_requests/find_by_category.php
+++ b/app/views/course/room_requests/find_by_category.php
@@ -56,6 +56,7 @@
                 <!-- ROOM CATEGORY PROPERTIES -->
                 <? if ($available_properties) : ?>
                     <? foreach ($available_properties as $property) : ?>
+                    <?= var_dump($property) ?>
                         <?= $property->toHtmlInput(
                             $selected_properties[$property->name],
                             'selected_properties[' . htmlReady($property->name) . ']',
diff --git a/app/views/course/room_requests/find_by_roomname.php b/app/views/course/room_requests/find_by_roomname.php
index 6ffbd57d4d8..eadb0347dc5 100644
--- a/app/views/course/room_requests/find_by_roomname.php
+++ b/app/views/course/room_requests/find_by_roomname.php
@@ -56,32 +56,54 @@
                     </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 ?>
-                <? 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
+                            ) ?>
+                        <? 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>
+                    <? if ($user_is_global_resource_admin) : ?>
+                        <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>
+                    <? 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>
+                <? endif ?>
 
                 <? if (!$embedded) : ?>
             </fieldset>
         </div>
 
-
         <div>
             <fieldset>
                 <legend><?= _('Raumsuche') ?></legend>
                 <label>
                     <?= _('Raumname') ?>
                     <span class="flex-row">
-                    <input type="text" name="room_name" value="<?= htmlReady($room_name) ?>">
+                    <input type="text" name="room_name" value="<?= htmlReady($_SESSION[$request_id]['room_name']) ?>">
                     <?= Icon::create('search', Icon::ROLE_CLICKABLE)->asInput(
                         [
                             'name'  => 'search_by_name',
@@ -89,7 +111,7 @@
                             'style' => 'margin-left: 0.2em; margin-top: 0.6em;'
                         ]
                     ) ?>
-                        <? if ($room_name) : ?>
+                        <? if ($_SESSION[$request_id]['room_name']) : ?>
                             <?= Icon::create('refresh', Icon::ROLE_CLICKABLE, ['title' => _('alle Angaben zurücksetzen')])->asInput(
                                 [
                                     'type'  => 'image',
diff --git a/app/views/course/room_requests/new_request.php b/app/views/course/room_requests/new_request.php
index bd10d45a036..9a47c87dc0e 100644
--- a/app/views/course/room_requests/new_request.php
+++ b/app/views/course/room_requests/new_request.php
@@ -63,7 +63,7 @@
             <label>
                 <?= _('Raumname') ?>
                 <span class="flex-row">
-                    <input type="text" name="room_name" value="<?= htmlReady($room_name) ?>">
+                    <input type="text" name="room_name" value="<?= htmlReady($_SESSION[$request_id]['room_name']) ?>">
                     <?= Icon::create('search', Icon::ROLE_CLICKABLE)->asInput(
                         [
                             'name'  => 'search_by_name',
diff --git a/app/views/course/room_requests/request_first_step.php b/app/views/course/room_requests/request_first_step.php
deleted file mode 100644
index b3d9bbc7f37..00000000000
--- a/app/views/course/room_requests/request_first_step.php
+++ /dev/null
@@ -1 +0,0 @@
-<?php
diff --git a/app/views/course/room_requests/request_second_step.php b/app/views/course/room_requests/request_second_step.php
deleted file mode 100644
index b3d9bbc7f37..00000000000
--- a/app/views/course/room_requests/request_second_step.php
+++ /dev/null
@@ -1 +0,0 @@
-<?php
-- 
GitLab