5 * @author Roland Hieber (roland.hieber@wilhelm-gym.net)
8 * Copyright © 2007 Roland Hieber
10 * Permission is hereby granted, free of charge, to any person obtaining
11 * copy of this software and associated documentation files (the "Software"),
12 * to deal in the Software without restriction, including without limitation
13 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
14 * and/or sell copies of the Software, and to permit persons to whom the
15 * Software is furnished to do so, subject to the following conditions:
17 * The above copyright notice and this permission notice shall be included in
18 * all copies or substantial portions of the Software.
20 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
29 require_once("mod_room-reservation/globals.inc");
30 require_once("mod_room-reservation/mod_roomReservationBookingPage.inc");
31 $page = new mod_roomReservationBookingPage($g_rrCfg, $g_rrRm, $g_rrBm);
32 $page->setTitle(_c("room-reservation:Schedule of room bookings"));
36 require_once("sec/secure.inc");
37 require_once("mod_rooms.inc");
40 // Ist der User berechtigt?
41 $bAllowAccess = false;
42 foreach($user[groups] as $group)
44 foreach($cfgRooms["AllowedGroups"] as $allowed)
46 $bAllowAccess |= (($group == $allowed) == true);
49 if(!$bAllowAccess and $cfgRooms["RestrictAccess"] == true)
50 die_nice("Fehler: Sie sind nicht berechtigt, diese Seite zu benutzen. Wenden Sie sich an einen Administrator.");
52 $bookings = new AllBookings(false);
54 // Zeitstunden in Schulstunden umrechnen
55 $lessons_begin = array_flip($cfgRooms["TimeslicesBegin"]);
56 $lessons_end = array_flip($cfgRooms["TimeslicesEnd"]);
58 $action = $_GET["action"];
59 $room = isset($_GET["room"]) ? $_GET["room"] : $cfgRooms["Rooms"][0];
60 $start = isset($_GET["start"]) ? $_GET["start"] : Monday();
62 $id = isset($_POST["id"]) ? $_POST["id"] : $_GET["id"];
63 $class = isset($_POST["class"]) ? $_POST["class"] : $_GET["class"];
64 $room_form = isset($_POST["room_form"]) ? $_POST["room_form"] : $_GET["room"];
65 $date = isset($_POST["date"]) ? $_POST["date"] : $_GET["date"];
66 $timebegin = isset($_POST["timebegin"]) ? $_POST["timebegin"] : $_GET["timebegin"];
67 $timeend = isset($_POST["timeend"]) ? $_POST["timeend"] : (isset($_GET["timeend"]) ? $_GET["timeend"] : $cfgRooms["TimeslicesEnd"][$lessons_begin[$timebegin]]); // Standardmäßig auf einen Zeitraum später als Anfangszeit
68 $reason = isset($_POST["reason"]) ? $_POST["reason"] : $_GET["reason"];
69 $submit = $_POST["submit"];
70 $cancel = $_POST["cancel"];
72 PageBlue("Raumbelegungsplan", "rooms_index");
78 global $act, $class, $room_form, $date, $timebegin, $timeend, $reason, $user;
80 Title("Einen Raum buchen");
81 $form = "<p>Füllen Sie das Formular aus und klicken Sie dann auf die Schaltfläche „Raum buchen“.</p>
82 <form action='?action=insert' method='post'>
83 <input type='hidden' name='id' value='$id' />
85 <td>Ihr Name:</td><td colspan='4'>{$user[name]}</td>
88 // Klasse nur anzeigen, wenn angeschaltet
89 if($cfgRooms["ShowClassEdit"])
90 $form .= "<tr>\n <td>".q(stripslashes($cfgRooms["ClassEditText"])).":</td><td colspan='4'><input type='edit' style='width:100%' name='class' value='".q(stripslashes($class))."' /></td>\n</tr>";
92 $form .= "<tr>\n <td>Raum:</td><td colspan='4'><select style='width:100%' name='room_form'>";
93 foreach($cfgRooms["Rooms"] as $rm)
96 $form .= "<option selected='selected'>".q(stripslashes($rm))."</option>";
98 $form .= "<option>".q(stripslashes($rm))."</option>";
100 $form .= "</select></td>\n</tr><tr>\n";
101 $form .= " <td>Datum:</td><td colspan='4'><input type='text' style='width:100%' name='date' value='".q(stripslashes($date))."' /></td>\n</tr><tr>\n";
102 $form .= " <td>Zeit:</td><td>von</td><td><select style='width:60pt' name='timebegin'>";
103 foreach($cfgRooms["TimeslicesBegin"] as $time)
105 if($time == $timebegin)
106 $form .= "<option selected='selected'>".q(stripslashes($time))."</option>";
108 $form .= "<option>".q(stripslashes($time))."</option>";
110 $form .= "</select></td><td>bis</td><td><select style='width:60pt' name='timeend'>";
111 foreach($cfgRooms["TimeslicesEnd"] as $time)
113 if($time == $timeend)
114 $form .= "<option selected='selected'>".q(stripslashes($time))."</option>";
116 $form .= "<option>".q(stripslashes($time))."</option>";
118 $form .= "</select></td>\n</tr><tr>\n";
119 $form .= " <td>Grund für die Belegung:</td><td colspan='4'><input type='text' style='width:100%' name='reason' value='".q(stripslashes($reason))."' /></td>\n</tr><tr>\n";
120 $form .= " <td><input type='submit' class='stdbtn submit' name='submit' value='Raum buchen' /> <input type='submit' class='stdbtn submit' name='cancel' value='Abbrechen' /></td>\n</tr></table></form>";
126 if($action == "book")
130 // ...oder Buchung löschen?
131 else if($action == "delete")
133 // Rausfinden, wo unsere gewünschte ID im Array steht
134 for($n = 0; isset($bookings->objBookings[$n]->sqlData->id) and ($id != $bookings->objBookings[$n]->sqlData->id); $n++);
136 // Auf Besitz oder Admin prüfen
138 $bAdminMode |= ($bookings->objBookings[$n]->UserIsOwner() and !$bookings->objBookings[$n]->rawData->fixed); // Benutzer dürfen keine festen Buchungen löschen
139 $bAdminMode |= $bookings->UserIsAdmin();
142 echo "<div class='err'>Sie sind nicht berechtigt, diese Buchung zu löschen!</div>\n";
145 if($_POST["surely_delete"] == "Löschen" && $_POST["surely_delete_fixed"] == "true")
147 $bookings->Delete($id);
148 echo "<div class='err'>Ihre Buchung wurde gelöscht.</div>\n";
152 echo "<h1>Eine Buchung löschen</h1>\n";
153 if($bookings->objBookings[$n]->rawData->fixed and $_POST["surely_delete_fixed"] == "false")
154 echo "<p class='err'>Sie müssen bestätigen, dass Sie die Warnung über das Löschen von festen Buchungen zur Kenntnis genommen haben.</p>\n";
155 // Formular zur Bestätigung anzeigen
156 echo "<p>Wollen Sie diese Buchung löschen?<p>\n";
157 $bookings->PrintBooking($id);
159 echo "<form action='?action=delete&id=$id' method='post'>\n";
160 if($bookings->objBookings[$n]->rawData->fixed)
161 // Bestätigungsfeld für feste Buchungen
162 echo "<p>".icona("dlg-warn", 16)."<b>Achtung:</b> Diese Buchung ist eine feste Buchung. Wenn sie gelöscht wird, wird der Zeitraum nicht in dieser Woche, sondern in <b>allen Wochen</b> wieder freigegeben.</p>\n<p><input type='hidden' name='surely_delete_fixed' value='false' /><$smlchk name='surely_delete_fixed' value='true' /><label for='surely_delete_fixed'>Ich habe diese Warnung zur Kenntnis genommen.</label></p>\n";
164 echo "<input type='hidden' name='surely_delete_fixed' value='true' />\n";
165 echo "<$stdbtn name='surely_delete' value='Löschen' /></form>\n";
169 // Zurück-Link anzeigen
170 Option(_("Back"), "", "href='?room=$room&start=$start'", "back");
173 // ... oder alle Buchungen anzeigen / Buchung eintragen?
176 if($action == "insert" and $submit == "Raum buchen")
178 $err = $bookings->Insert(null, $room_form, $date, $timebegin, $timeend, $act, $class, $reason, false);
181 switch($bookings->lastError)
183 case ALLBOOKINGS_SQL_ERROR:
184 ReportError("\$booking->Insert", $booking->lastError, __FILE__, __LINE__);
192 // Log-Eintrag, wenn erwünscht
193 if($cfgRooms["LogOnInsert"])
194 InsertLog("Raum $room_form am $date von $timebegin bis $timeend gebucht. Begründung: $reason");
196 // Passenderweise gleich die Woche mit der eingetragenen Buchung anzeigen
197 $tmp = explode(".", $date);
198 $start = Monday(strtotime($tmp[2]."-".$tmp[1]."-".$tmp[0]));
200 Title("Raumbelegungen für den Raum $room in Woche ".date("W", $start));
201 echo "<p class='err'>".icona("dlg-info", 16, "bl")."Ihre Buchung wurde eingetragen.</p>\n";
206 Title("Raumbelegungen für den Raum $room in Woche ".date("W", $start));
209 $nPrevWeek = strtotime("last monday", Monday($start)); // der Montag vor dem Montag in der Startwoche
210 $nFirstWeek = Monday(); // der Montag in der aktuellen Woche
211 $nLastWeek = strtotime("last monday", Monday($bookings->GetLastBookingDate()));
212 $nNextWeek = strtotime("next monday", Monday($start)); // der Montag nach dem Montag der Startwoche
214 echo "<form action=''>
215 Raum: <select onchange='window.location.href=\"{$_SERVER["PHP_SELF"]}?start=$start&room=\" + this.options[this.options.selectedIndex].text;' width='250'>\n";
216 foreach($cfgRooms["Rooms"] as $opt)
220 echo " selected='selected'";
221 echo ">".q(stripslashes($opt))."</option>\n";
223 echo "</select></form></p>";
225 // Navigation für die Wochen ausgeben
226 echo "<p><a href='?start=$nPrevWeek&room=".qu(stripslashes($room))."' title='Zur vorherigen Woche blättern'>Vorherige Woche</a> | <a href='?start=$nFirstWeek&room=".qu(stripslashes($room))."' title='Zur aktuellen Woche blättern'>Aktuelle Woche</a> | ";
227 // Fünf Wochen zur direkten Anwahl anbieten
228 for($i = 1; $i <= 5; $i++)
230 $nCurWeek = Monday(strtotime("$i week", $start));
231 echo "<a href='?start=$nCurWeek&room=".qu(stripslashes($room))."' title='Zu Woche ".date("W", $nCurWeek)." blättern'>Woche ".date("W", $nCurWeek)."</a> | ";
233 echo "<a href='?start=$nLastWeek&room=".qu(stripslashes($room))."' title='Zur Woche mit der letzen Buchung blättern'>Letzte Buchung</a> | <a href='?start=$nNextWeek&room=".qu(stripslashes($room))."' title='Zur nächsten Woche blättern'>Nächste Woche</a></p>";
235 <li>Um eine Buchung vorzunehmen dort auf „Ab hier buchen“ klicken, wo die Buchung beginnen soll.</li>
236 <li><b>Neu:</b> Eigene Buchungen (außer den wiederkehrenden Buchungen in dunkelblau) können gelöscht werden, indem auf den Link „Buchung löschen“ geklickt wird.</li>
237 <li>Mit Klick auf den Benutzernamen kann eine E-Mail an den Benutzer geschrieben werden.</li>
240 $bookings->PrintTimeTable($start, $room);
This page took 0.077915 seconds and 5 git commands to generate.