api/
ved/
admin/
modules/
gyar/
admin/
cron/
api/ved/modules/utility.php1 lines
<?php
# utility.php
# Har lite olika hjälparfunktioner.
# Omvandlar minuter efter 00:00 till ett tidsslag.
function min_to_time($minutes)
{
$mins = $minutes % 60;
$hours = ($minutes - $mins) / 60;
return sprintf('%02d:%02d', $hours, $mins);
}
# Omvandlar ett tidsslag till minuter efter 00:00.
function time_to_min($time)
{
$split = explode(":", $time);
return intval($split[0]) * 60 + intval($split[1]);
}
# Delar upp dagen i tidsramar. Varje tidsram lagrar antalet platser som används.
function create_time_frames($dateData, $bookings, $settings)
{
# Skapar en lista med alla tidsramar och sätter antalet till antalet platser.
$timeframes = array();
for ($i = 0; $i < $dateData["minutesOpen"]; $i += $settings["bookingInterval"]) {
$timeframes[$i] = $settings["seatCount"];
}
# Går igenom varje bokning och subtraherar antalet personer i bokningen från tidsramslistan.
foreach ($bookings as $booking) {
$relativeTime = $booking["timeMinutes"] - $dateData["openingTimeMinutes"];
$frameBegin = $relativeTime - $relativeTime % $settings["bookingInterval"];
$frameEnd = $relativeTime + $settings["bookingInterval"] - 1 - ($relativeTime + $settings["bookingInterval"] - 1) % $settings["bookingInterval"] + $settings["bookingLength"];
for ($i = $frameBegin; $i < $frameEnd; $i += $settings["bookingInterval"]) {
if (isset($timeframes[$i]))
$timeframes[$i] -= $booking["peopleCount"];
}
}
return $timeframes;
}
# Kollar framåt för varje tidsram och beräknar max hur många platser finns tillgängliga en hel bokningslängd framåt.
# Exempelvis om det är fullbokat 18:00 och en bokning är 90 min så kan du inte boka 17:00 eftersom det överlappar
# med fullbokningen.
function create_bookable_time_frames($dateData, $timeframes, $settings)
{
$bookableFrames = array();
for ($i = 0; $i <= $dateData["minutesOpen"] - $settings["bookingLength"]; $i += $settings["bookingInterval"]) {
$frameAvailableSeats = $settings["seatCount"];
for ($j = 0; $j < $settings["bookingLength"]; $j += $settings["bookingInterval"]) {
$t = $i + $j;
$frameAvailableSeats = min(array($frameAvailableSeats, $timeframes[$t]));
}
$bookableFrames[min_to_time($i + $dateData["openingTimeMinutes"])] = $frameAvailableSeats;
}
return $bookableFrames;
}
# Någorlunda modifierad funktion som jag hittade online för att skapa 32 byte långa strängar.
# Används för tokens.
function generate_32b_string(): string
{
$data = random_bytes(16);
assert(strlen($data) == 16);
$data[6] = chr(ord($data[6]) & 0x0f | 0x40);
$data[8] = chr(ord($data[8]) & 0x3f | 0x80);
return vsprintf('%s%s%s%s%s%s%s%s', str_split(bin2hex($data), 4));
}
?>