vlw.se/api/endpoints/about/languages/GET.php
Victor Westerlund e25b1b6689 feat: add language chart to about page (#14)
Replaces this section on the `/about` page:
![image](/attachments/67ac2f42-3784-4c69-9240-0a7961afb47d)
with:
![image](/attachments/fa073c9c-a016-4281-a3fb-30b7be95881f)

I will replace and fix the colors of the buttons after #15 is merged.

Reviewed-on: https://codeberg.org/vlw/vlw.se/pulls/14
2025-01-28 14:45:52 +00:00

51 lines
No EOL
1.2 KiB
PHP

<?php
use Reflect\Call;
use Reflect\Path;
use Reflect\Response;
use ReflectRules\Type;
use ReflectRules\Rules;
use ReflectRules\Ruleset;
use VLW\API\Endpoints;
require_once Path::root("src/Endpoints.php");
const PARM_FORCE_RECACHE = "force_recache";
class GET_AboutLanguages {
protected Ruleset $ruleset;
public function __construct() {
$this->ruleset = new Ruleset(strict: true);
$this->ruleset->GET([
(new Rules(PARM_FORCE_RECACHE))
->type(Type::BOOLEAN)
->default(false)
]);
$this->ruleset->validate_or_exit();
}
private static function cache_exists(): bool {
return file_exists($_ENV["forgejo_languages"]["cache_file"]);
}
private static function load_cache(): array {
return json_decode(file_get_contents($_ENV["forgejo_languages"]["cache_file"]), true);
}
public function main(): Response {
// Delete cache file if force flag is set
if ($_GET[PARM_FORCE_RECACHE]) {
(new Call(Endpoints::ABOUT_LANGUAGES->value))->delete();
}
return self::cache_exists()
// Return languages from cache
? new Response(self::load_cache())
// Fetch and return languages (and generate cache file if enabled)
: new Response((new Call(Endpoints::ABOUT_LANGUAGES->value))->post());
}
}