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");
32 db_user("roomreservation");
34 $page = new mod_roomReservationBookingPage($g_rrCfg, $g_rrRm, $g_rrBm);
35 $page->setTitle(_c("room-reservation:Schedule of room bookings"));
39 require_once("sec/secure.inc");
40 require_once("mod_rooms.inc");
43 // Ist der User berechtigt?
44 $bAllowAccess = false;
45 foreach($user[groups] as $group)
47 foreach($cfgRooms["AllowedGroups"] as $allowed)
49 $bAllowAccess |= (($group == $allowed) == true);
52 if(!$bAllowAccess and $cfgRooms["RestrictAccess"] == true)
53 die_nice("Fehler: Sie sind nicht berechtigt, diese Seite zu benutzen. Wenden Sie sich an einen Administrator.");
55 $bookings = new AllBookings(false);
57 // Zeitstunden in Schulstunden umrechnen
58 $lessons_begin = array_flip($cfgRooms["TimeslicesBegin"]);
59 $lessons_end = array_flip($cfgRooms["TimeslicesEnd"]);
61 $action = $_GET["action"];
62 $room = isset($_GET["room"]) ? $_GET["room"] : $cfgRooms["Rooms"][0];
63 $start = isset($_GET["start"]) ? $_GET["start"] : Monday();
65 $id = isset($_POST["id"]) ? $_POST["id"] : $_GET["id"];
66 $class = isset($_POST["class"]) ? $_POST["class"] : $_GET["class"];
67 $room_form = isset($_POST["room_form"]) ? $_POST["room_form"] : $_GET["room"];
68 $date = isset($_POST["date"]) ? $_POST["date"] : $_GET["date"];
69 $timebegin = isset($_POST["timebegin"]) ? $_POST["timebegin"] : $_GET["timebegin"];
70 $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
71 $reason = isset($_POST["reason"]) ? $_POST["reason"] : $_GET["reason"];
72 $submit = $_POST["submit"];
73 $cancel = $_POST["cancel"];
75 PageBlue("Raumbelegungsplan", "rooms_index");
81 global $act, $class, $room_form, $date, $timebegin, $timeend, $reason, $user;
83 Title("Einen Raum buchen");
84 $form = "<p>Füllen Sie das Formular aus und klicken Sie dann auf die Schaltfläche „Raum buchen“.</p>
85 <form action='?action=insert' method='post'>
86 <input type='hidden' name='id' value='$id' />
88 <td>Ihr Name:</td><td colspan='4'>{$user[name]}</td>
91 // Klasse nur anzeigen, wenn angeschaltet
92 if($cfgRooms["ShowClassEdit"])
93 $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>";
95 $form .= "<tr>\n <td>Raum:</td><td colspan='4'><select style='width:100%' name='room_form'>";
96 foreach($cfgRooms["Rooms"] as $rm)
99 $form .= "<option selected='selected'>".q(stripslashes($rm))."</option>";
101 $form .= "<option>".q(stripslashes($rm))."</option>";
103 $form .= "</select></td>\n</tr><tr>\n";
104 $form .= " <td>Datum:</td><td colspan='4'><input type='text' style='width:100%' name='date' value='".q(stripslashes($date))."' /></td>\n</tr><tr>\n";
105 $form .= " <td>Zeit:</td><td>von</td><td><select style='width:60pt' name='timebegin'>";
106 foreach($cfgRooms["TimeslicesBegin"] as $time)
108 if($time == $timebegin)
109 $form .= "<option selected='selected'>".q(stripslashes($time))."</option>";
111 $form .= "<option>".q(stripslashes($time))."</option>";
113 $form .= "</select></td><td>bis</td><td><select style='width:60pt' name='timeend'>";
114 foreach($cfgRooms["TimeslicesEnd"] as $time)
116 if($time == $timeend)
117 $form .= "<option selected='selected'>".q(stripslashes($time))."</option>";
119 $form .= "<option>".q(stripslashes($time))."</option>";
121 $form .= "</select></td>\n</tr><tr>\n";
122 $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";
123 $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>";
129 if($action == "book")
133 // ...oder Buchung löschen?
134 else if($action == "delete")
136 // Rausfinden, wo unsere gewünschte ID im Array steht
137 for($n = 0; isset($bookings->objBookings[$n]->sqlData->id) and ($id != $bookings->objBookings[$n]->sqlData->id); $n++);
139 // Auf Besitz oder Admin prüfen
141 $bAdminMode |= ($bookings->objBookings[$n]->UserIsOwner() and !$bookings->objBookings[$n]->rawData->fixed); // Benutzer dürfen keine festen Buchungen löschen
142 $bAdminMode |= $bookings->UserIsAdmin();
145 echo "<div class='err'>Sie sind nicht berechtigt, diese Buchung zu löschen!</div>\n";
148 if($_POST["surely_delete"] == "Löschen" && $_POST["surely_delete_fixed"] == "true")
150 $bookings->Delete($id);
151 echo "<div class='err'>Ihre Buchung wurde gelöscht.</div>\n";
155 echo "<h1>Eine Buchung löschen</h1>\n";
156 if($bookings->objBookings[$n]->rawData->fixed and $_POST["surely_delete_fixed"] == "false")
157 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";
158 // Formular zur Bestätigung anzeigen
159 echo "<p>Wollen Sie diese Buchung löschen?<p>\n";
160 $bookings->PrintBooking($id);
162 echo "<form action='?action=delete&id=$id' method='post'>\n";
163 if($bookings->objBookings[$n]->rawData->fixed)
164 // Bestätigungsfeld für feste Buchungen
165 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";
167 echo "<input type='hidden' name='surely_delete_fixed' value='true' />\n";
168 echo "<$stdbtn name='surely_delete' value='Löschen' /></form>\n";
172 // Zurück-Link anzeigen
173 Option(_("Back"), "", "href='?room=$room&start=$start'", "back");
176 // ... oder alle Buchungen anzeigen / Buchung eintragen?
179 if($action == "insert" and $submit == "Raum buchen")
181 $err = $bookings->Insert(null, $room_form, $date, $timebegin, $timeend, $act, $class, $reason, false);
184 switch($bookings->lastError)
186 case ALLBOOKINGS_SQL_ERROR:
187 ReportError("\$booking->Insert", $booking->lastError, __FILE__, __LINE__);
195 // Log-Eintrag, wenn erwünscht
196 if($cfgRooms["LogOnInsert"])
197 InsertLog("Raum $room_form am $date von $timebegin bis $timeend gebucht. Begründung: $reason");
199 // Passenderweise gleich die Woche mit der eingetragenen Buchung anzeigen
200 $tmp = explode(".", $date);
201 $start = Monday(strtotime($tmp[2]."-".$tmp[1]."-".$tmp[0]));
203 Title("Raumbelegungen für den Raum $room in Woche ".date("W", $start));
204 echo "<p class='err'>".icona("dlg-info", 16, "bl")."Ihre Buchung wurde eingetragen.</p>\n";
209 Title("Raumbelegungen für den Raum $room in Woche ".date("W", $start));
212 $nPrevWeek = strtotime("last monday", Monday($start)); // der Montag vor dem Montag in der Startwoche
213 $nFirstWeek = Monday(); // der Montag in der aktuellen Woche
214 $nLastWeek = strtotime("last monday", Monday($bookings->GetLastBookingDate()));
215 $nNextWeek = strtotime("next monday", Monday($start)); // der Montag nach dem Montag der Startwoche
217 echo "<form action=''>
218 Raum: <select onchange='window.location.href=\"{$_SERVER["PHP_SELF"]}?start=$start&room=\" + this.options[this.options.selectedIndex].text;' width='250'>\n";
219 foreach($cfgRooms["Rooms"] as $opt)
223 echo " selected='selected'";
224 echo ">".q(stripslashes($opt))."</option>\n";
226 echo "</select></form></p>";
228 // Navigation für die Wochen ausgeben
229 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> | ";
230 // Fünf Wochen zur direkten Anwahl anbieten
231 for($i = 1; $i <= 5; $i++)
233 $nCurWeek = Monday(strtotime("$i week", $start));
234 echo "<a href='?start=$nCurWeek&room=".qu(stripslashes($room))."' title='Zu Woche ".date("W", $nCurWeek)." blättern'>Woche ".date("W", $nCurWeek)."</a> | ";
236 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>";
238 <li>Um eine Buchung vorzunehmen dort auf „Ab hier buchen“ klicken, wo die Buchung beginnen soll.</li>
239 <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>
240 <li>Mit Klick auf den Benutzernamen kann eine E-Mail an den Benutzer geschrieben werden.</li>
243 $bookings->PrintTimeTable($start, $room);
This page took 0.059465 seconds and 5 git commands to generate.