summaryrefslogtreecommitdiffstats
path: root/modules-available/locations/inc/openingtimes.inc.php
diff options
context:
space:
mode:
Diffstat (limited to 'modules-available/locations/inc/openingtimes.inc.php')
-rw-r--r--modules-available/locations/inc/openingtimes.inc.php33
1 files changed, 31 insertions, 2 deletions
diff --git a/modules-available/locations/inc/openingtimes.inc.php b/modules-available/locations/inc/openingtimes.inc.php
index 72ce92f4..18e25063 100644
--- a/modules-available/locations/inc/openingtimes.inc.php
+++ b/modules-available/locations/inc/openingtimes.inc.php
@@ -6,11 +6,12 @@ class OpeningTimes
/**
* Get opening times for given location.
* Format is the decoded JSON from DB column, i.e. currently a list of entries:
- * {
+ * <pre>{
* "days": ["Monday", "Tuesday", ...],
* "openingtime": "8:00",
* "closingtime": "20:00"
- * }
+ * }</pre>
+ * @return array|null
*/
public static function forLocation(int $locationId)
{
@@ -31,4 +32,32 @@ class OpeningTimes
return null;
}
+ /**
+ * Check whether given location is open according to openingtimes.
+ * @param int $locationId location
+ * @param int $openOffsetMin offset to apply to opening times when checking. this is subtracted from opening time
+ * @param int $closeOffsetMin offset to apply to closing times when checking. this is added to closing time
+ */
+ public static function isRoomOpen(int $locationId, int $openOffsetMin = 0, int $closeOffsetMin = 0): bool
+ {
+ $openingTimes = self::forLocation($locationId);
+ if ($openingTimes === null)
+ return true; // No opening times should mean room is always open
+ $now = time();
+ $today = date('l', $now);
+ foreach ($openingTimes as $row) {
+ foreach ($row['days'] as $day) {
+ if ($day !== $today)
+ continue; // Not today!
+ if (strtotime("today {$row['openingtime']} -$openOffsetMin minutes") > $now)
+ continue;
+ if (strtotime("today {$row['closingtime']} +$closeOffsetMin minutes") < $now)
+ continue;
+ // Bingo!
+ return true;
+ }
+ }
+ return false;
+ }
+
} \ No newline at end of file