X-Git-Url: https://git.rohieb.name/iserv-mod-room-reservation.git/blobdiff_plain/8aa81d777b83e2828cf8ca63e178413de0fa81ee..25b8819f74993ab10fa2a107f35de29fca46ca0e:/includes/mod_roomReservationBookingTable.inc diff --git a/includes/mod_roomReservationBookingTable.inc b/includes/mod_roomReservationBookingTable.inc index c672e52..8d017f5 100644 --- a/includes/mod_roomReservationBookingTable.inc +++ b/includes/mod_roomReservationBookingTable.inc @@ -118,6 +118,8 @@ class mod_roomReservationBookingsTable /* extends mclWidget */ { protected $strPostAccount; /** (int) recurrence interval, POST data */ protected $nPostInterval; + /** (string) Array of error messages */ + protected $asErrors = array(); /***************************************************************************/ /** @@ -139,7 +141,11 @@ class mod_roomReservationBookingsTable /* extends mclWidget */ { $this->oRm = $oRm; $this->oBm = $oBm; - $this->processRequestVariables(); + try { + $this->processRequestVariables(); + } catch(Exception $e) { + $this->asErrors[] = $e->getMessage(); + } $this->addCSS(); } @@ -151,18 +157,26 @@ class mod_roomReservationBookingsTable /* extends mclWidget */ { */ /** - * 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() { // 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; @@ -179,8 +193,9 @@ class mod_roomReservationBookingsTable /* extends mclWidget */ { 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); @@ -295,10 +310,19 @@ class mod_roomReservationBookingsTable /* extends mclWidget */ { /** * 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 @@ -387,9 +411,10 @@ class mod_roomReservationBookingsTable /* extends mclWidget */ { $strCss = <<asErrors) > 0) { + printf("

%s

", join("
\n", $this->asErrors)); + return; + } + // Print the header with the days $ncTs = sizeof($this->oCfg->getTimeslices()); $nDays = ($this->oCfg->isShowWeekend()) ? 7 : 5; @@ -727,7 +758,8 @@ CSS; // 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"] .