protected $strPostAccount;
/** (int) recurrence interval, POST data */
protected $nPostInterval;
+ /** (string) Array of error messages */
+ protected $asErrors = array();
/***************************************************************************/
/**
$this->oRm = $oRm;
$this->oBm = $oBm;
- $this->processRequestVariables();
+ try {
+ $this->processRequestVariables();
+ } catch(Exception $e) {
+ $this->asErrors[] = $e->getMessage();
+ }
$this->addCSS();
}
*/
/**
- * Process the REQUEST variables and preset the some variables
+ * Process the REQUEST variables and preset the some variables. Throws an
+ * exception if the room provided by the GET data is not allowed for booking
* @return void
+ * @throws Exception
*/
protected function processRequestVariables() {
- ########################
- # FIXME remove this
- var_export($_GET); echo "<p />";
- var_export($_POST); echo "<p />";
- ########################
-
// default values
- $aoRooms = $this->oRm->getRooms();
- if($aoRooms != array()) {
- $or = $aoRooms[0];
- $this->setRoom($or->getName());
+ $aoRooms = $this->oCfg->getWhitelistedRooms();
+ if(count($aoRooms) < 1) {
+ $this->setRoom("");
+ } else {
+ $this->setRoom($aoRooms[0]->getName());
+ }
+ // if weekends are not shown, show the next week already on saturday
+ if(!$this->oCfg->isShowWeekend() and date("w") == 6) {
+ $this->setDate(strtotime("monday"));
+ } else {
+ $this->setDate(time());
}
- $this->setDate(time());
$this->setAction(MOD_ROOM_RESERVATION_BT_ACTION_SHOW);
$this->nPostInterval = 0;
MOD_ROOM_RESERVATION_BT_ACTION_SHOW)))));
$this->setDate(isset($_GET["mod_roomReservationBookingTable"]["date"]) ?
intval($_GET["mod_roomReservationBookingTable"]["date"]) : time());
- $this->setRoom(isset($_GET["mod_roomReservationBookingTable"]["room"]) ?
- $_GET["mod_roomReservationBookingTable"]["room"] : "");
+ if(isset($_GET["mod_roomReservationBookingTable"]["room"])) {
+ $this->setRoom($_GET["mod_roomReservationBookingTable"]["room"]);
+ }
$this->setTsFirst(
isset($_GET["mod_roomReservationBookingTable"]["tsfirst"]) ?
intval($_GET["mod_roomReservationBookingTable"]["tsfirst"]) : 0);
$_POST["mod_roomReservationBookingTable"]["submitdelete"] : "");
}
}
-
- ################
- /** FIXME remove this */
- echo sprintf("date: %s <br />", $this->getDate());
- echo sprintf("room: %s <br />", $this->getRoom());
- echo sprintf("reason: %s <br />", $this->getReason());
- echo sprintf("tsfirst: %s <br />", $this->getTsFirst());
- echo sprintf("tslast: %s <br />", $this->getTsLast());
- echo sprintf("action: %s <br />", $this->getAction());
- ################
}
/***************************************************************************/
/**
* Set the room of the requested booking or the room to be shown in the
- * booking table
+ * booking table. Throws an Exception if the room is not allowed for booking.
* @param $str (string)
+ * @throws Exception
*/
- protected function setRoom($str) { $this->strRoom = $str; }
+ protected function setRoom($str) {
+ // only allow whitelisted rooms
+ if($this->oCfg->isRoomWhitelisted($str)) {
+ $this->strRoom = $str;
+ } else {
+ throw new Exception(_c("room-reservation:This room is not available ".
+ "for booking."));
+ }
+ }
/**
* Set the reason of the requested booking
$strCss = <<<CSS
#mod_roomReservationBookingTable .msg { font-weight:800; }
#mod_roomReservationBookingTable td {
- vertical-align:middle;
- height:7em;
- border:1px solid white; padding:0.4em;
+ vertical-align: middle;
+ height: 5em;
+ border: 1px solid white;
+ padding:0.4em;
}
#mod_roomReservationBookingTable td.booking { background-color:#5276AB; }
#mod_roomReservationBookingTable td.new { background-color:#008015; }
throw new AccessException(MOD_ROOM_RESERVATION_ERROR_ACCESS_DENIED);
return;
}
-
+
+ // print error messages and return if there are any
+ if(count($this->asErrors) > 0) {
+ printf("<p class='err'>%s</p>", join("<br />\n", $this->asErrors));
+ return;
+ }
+
// Print the header with the days
$ncTs = sizeof($this->oCfg->getTimeslices());
$nDays = ($this->oCfg->isShowWeekend()) ? 7 : 5;
$strLessons = $this->oCfg->isShowLessons() ?_sprintf_ord(
_c("room-reservation:%s# lesson"), $nTs + 1) . "<br />" : "";
$oTs = $this->oCfg->getTimeslice($nTs);
- $strTs = sprintf("%s - %s", strftime(_("%#I:%M %p"), $oTs->getBegin()),
- strftime(_("%#I:%M %p"), $oTs->getEnd()));
+ $strTs = sprintf("%s - %s", gmstrftime(_("%#I:%M %p"), $oTs->getBegin()),
+ gmstrftime(_("%#I:%M %p"), $oTs->getEnd()));
// First column: Lesson
echo sprintf("<tr><td class='lesson'>%s</td>", $strLessons . $strTs);
if($nNewUid > 0) {
// print new booking and increment the "next row" variable by
// the current span
+ $oNewBooking->setUid($nNewUid);
$anNextRow[$i] += $this->printBooking($nTs, $ts, $oNewBooking,
MOD_ROOM_RESERVATION_BTPB_NEW);
}
// print link to booking if the timeslice is later than now
$oTs = $this->oCfg->getTimeslice($nTs);
- $tsCur = strtotime(date("Y-m-d ", $ts) . date(" G:i",
+ // note: only the timeslices are in GMT!
+ $tsCur = strtotime(date("Y-m-d ", $ts) . gmdate(" G:i",
$oTs->getEnd()));
if($tsCur > time()) {
$strURL = $_SERVER["PHP_SELF"] .