Sixtens hemsida Uppgifter Blogg Om

VED House bokningssystem

Gå till sida

Källkod

api/

database.php

api.php

ved/

monthBookingData.php

openingHoursException.php

bookingData.php

dayTimeframes.php

bookings.php

admin/

revokeToken.php

authorization.php

login.php

modules/

vedDatabase.php

utility.php

gyar/

log.php

auth/

revokeToken.php

authorization.php

login.php

station/

settings.php

log.php

modules/

gyarDatabase.php

databaseConnection.php

database.php

utility.php

credentials.json

weather/

latest.php

old.php

admin/

index.html

changeTimetable.html

login.html

js/

login.js

modules.js

admin.js

header.js

changeTimetable.js

cron/

vedClearExpiredTokens.php

api/ved/modules/utility.php

1 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"] - - ($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));
}
?>