From fa52427f66feb98cd22be99a40e3c4d17e2c6dcc Mon Sep 17 00:00:00 2001 From: Thijs Raymakers Date: Thu, 27 Feb 2025 02:57:28 +0100 Subject: [PATCH] Display current space state on page --- header.php | 2 +- index.php | 21 ++++++++++--- language/en.php | 11 ++++++- language/language.php | 16 +++++++--- language/nl.php | 11 ++++++- space/spacestate.php | 71 +++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 121 insertions(+), 11 deletions(-) create mode 100644 space/spacestate.php diff --git a/header.php b/header.php index eb0bc7f..f7691ac 100644 --- a/header.php +++ b/header.php @@ -1,8 +1,8 @@ diff --git a/index.php b/index.php index 1ed1817..3ba4edd 100644 --- a/index.php +++ b/index.php @@ -8,13 +8,17 @@ * make sure you update the language strings in both * - language/nl.php * - language/en.php + * The $lang->get("KEY") function will automatically select the preferred + * display language, based on the Accept-Language client header. * * Thank you for keeping the website accessible for people that * are not fluent in either English or Dutch! * */ -require_once("header.php"); ?> +require_once("header.php"); + +?> @@ -32,15 +36,24 @@ require_once("header.php"); ?>
- + <?= $lang->get(" /> + +open) { ?> + get('OPEN_SINCE') ?> formattedLastChange() ?> get('AGO') ?> + + get('CLOSED') ?> + +

Technologia Incognita

- get('SHORT_DESCRIPTION_BODY') ?> +

get('SHORT_DESCRIPTION_BODY') ?>

-
+
+ +
diff --git a/language/en.php b/language/en.php index 6e7e6c5..7a2a5f6 100644 --- a/language/en.php +++ b/language/en.php @@ -7,7 +7,16 @@ class English extends Language { $this->keys = array( "SHORT_DESCRIPTION_HEAD" => "TechInc is a hackerspace in Amsterdam.", "SHORT_DESCRIPTION_BODY" => 'TechInc is a hackerspace in Amsterdam.', - "LOGO_ALT_TEXT" => "Stylized boat's wheel. The handles and spokes have different colors, as if it is decorated with RGB LEDs. At the axle of the wheel is an abstract electronic circuit board." + "LOGO_ALT_TEXT" => "Stylized boat's wheel. The handles and spokes have different colors, as if it is decorated with RGB LEDs. At the axle of the wheel is an abstract electronic circuit board.", + "OPEN_SINCE" => "Open since", + "AGO" => "ago", + "SECOND" => "second", + "SECONDS" => "seconds", + "MINUTE" => "minute", + "MINUTES" => "minutes", + "HOUR" => "hour", + "HOURS" => "hours", + "CLOSED" => "Closed" ); } } diff --git a/language/language.php b/language/language.php index a615901..2a85cb4 100644 --- a/language/language.php +++ b/language/language.php @@ -1,11 +1,11 @@ languageCode = $languageCode; } @@ -14,6 +14,10 @@ class Language { } public static function getPreferredLanguage() { + if(isset(self::$obj)) { + return self::$obj; + } + if (empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])) { $language = "en"; } else { @@ -29,14 +33,18 @@ class Language { switch ($preferredLanguage) { case "nl": - return require_once("nl.php"); + self::$obj = require_once("nl.php"); + break; case "en": default: - return require_once("en.php"); + self::$obj = require_once("en.php"); break; } + + return self::$obj; } } +$lang = Language::getPreferredLanguage(); ?> diff --git a/language/nl.php b/language/nl.php index 2648fad..42ba7fb 100644 --- a/language/nl.php +++ b/language/nl.php @@ -7,7 +7,16 @@ class Dutch extends Language { $this->keys = array( "SHORT_DESCRIPTION_HEAD" => "TechInc is een hackerspace in Amsterdam.", "SHORT_DESCRIPTION_BODY" => 'TechInc is een hackerspace in Amsterdam.', - "LOGO_ALT_TEXT" => "Gestileerd stuurwiel van een boot. De handgrepen en spaken hebben verschillende kleuren, alsof het is versierd met RGB LED's. Op de as van het wiel zit een abstracte elektronische printplaat." + "LOGO_ALT_TEXT" => "Gestileerd stuurwiel van een boot. De handgrepen en spaken hebben verschillende kleuren, alsof het is versierd met RGB LED's. Op de as van het wiel zit een abstracte elektronische printplaat.", + "OPEN_SINCE" => "Open sinds", + "AGO" => "geleden", + "SECOND" => "seconde", + "SECONDS" => "seconden", + "MINUTE" => "minuut", + "MINUTES" => "minuten", + "HOUR" => "uur", + "HOURS" => "uur", + "CLOSED" => "Gesloten" ); } } diff --git a/space/spacestate.php b/space/spacestate.php new file mode 100644 index 0000000..cda4598 --- /dev/null +++ b/space/spacestate.php @@ -0,0 +1,71 @@ +requestJson(); + } + + public static function get() { + if(!isset(self::$obj)) { + self::$obj = new SpaceState(); + } + return self::$obj; + } + + public function formattedLastChange() { + global $lang; + $now = time(); + $diff = $now - $this->lastchange; + // One second ago + if ($diff == 1) { + return $diff." ".$lang->get("SECOND"); + // Less than a minute ago + } else if ($diff < 60) { + return $diff." ".$lang->get("SECONDS"); + // One minute ago + } else if ($diff < 120) { + return floor($diff / 60)." ".$lang->get("MINUTE"); + // Less than an hour ago + } else if ($diff < 3600) { + return floor($diff / 60)." ".$lang->get("MINUTES"); + // One hour ago + } else if ($diff < 7200) { + return floor($diff / 3600)." ".$lang->get("HOUR"); + // More than one hour ago + } else { + return floor($diff / 3600)." ".$lang->get("HOURS"); + } + } + + private function requestJson() { + $ch = curl_init(); + curl_setopt_array($ch, array( + CURLOPT_URL => "https://techinc.nl/space/spacestate.json", + CURLOPT_TIMEOUT => 1, + CURLOPT_FORBID_REUSE => true, + CURLOPT_RETURNTRANSFER => true + )); + $request = curl_exec($ch); + + if ($request === false) { + return; + } + + $json = json_decode($request); + if (is_null($json)) { + return; + } + + $this->open = $json?->open ?? false; + $this->lastchange = $json?->lastchange ?? time(); + } +} + +$spacestate = SpaceState::get(); + +?>