diff --git a/app/State.php b/app/State.php new file mode 100644 index 0000000..62b8aac --- /dev/null +++ b/app/State.php @@ -0,0 +1,20 @@ +description = $description; + $this->svg_name = $svg_name; + $this->color = $color; + } + +} diff --git a/composer.json b/composer.json index 637934d..08b1ed5 100644 --- a/composer.json +++ b/composer.json @@ -1,4 +1,9 @@ { + "autoload": { + "psr-4": { + "DorfJetzt\\": "app/" + } + }, "require": { "johngrogg/ics-parser": "^3", "symfony/http-client": "^6.2", diff --git a/index.php b/index.php index 05fec6d..ee7fc4d 100644 --- a/index.php +++ b/index.php @@ -9,12 +9,17 @@ use Symfony\Component\HttpClient\HttpClient; use Symfony\Component\HttpKernel\HttpCache\Store; use Twig\TwigFilter; use Twig\NodeVisitor\OptimizerNodeVisitor; +use DorfJetzt\State; +#region Configuration const VISITORS_FILE = '/opt/dorf.jetzt_visitors'; const ICAL_URL = 'https://chaosdorf.de/~derf/cccd_all.ics'; const HTTP_CACHE = '/tmp/dorf.jetzt/http_cache'; const TMPL_CACHE = '/tmp/dorf.jetzt/twig_cache'; const ROOM_STATE_URL = 'https://chaosdorf.de/raumstatus/status.png'; +const DEFAULT_TZ = 'Europe/Berlin'; +#endregion + const INVALID_UAS = [ "AhrefsBot", @@ -38,41 +43,44 @@ const HASH_TO_STATE = [ '0' => 'error', ]; -$STATE_MAP = [ - 'closed' => (object) [ - 'state_string' => 'Das Dorf ist gerade geschlossen.', - 'svg' => 'lock', - 'color' => 'red', - ], - 'maybe_open' => (object) [ - 'state_string' => 'Das Dorf ist gerade vielleicht geöffnet:
Der Clubraum ist offen, aber es findet keine Veranstaltung statt.
+function stateMap(string $state): State +{ + return match ($state) { + 'closed' => new State( + 'Das Dorf ist gerade geschlossen.', + 'lock', + 'red', + ), + 'maybe_open' => new State( + 'Das Dorf ist gerade vielleicht geöffnet:
Der Clubraum ist offen, aber es findet keine Veranstaltung statt.
Der Status kann sich also kurzfristig ändern.', - 'svg' => 'done', - 'color' => 'brown', - ], - 'open' => (object) [ - 'state_string' => 'Das Dorf ist gerade geöffnet.
+ 'done', + 'brown', + ), + 'open' => new State( + 'Das Dorf ist gerade geöffnet.
Komm gerne vorbei.', - 'svg' => 'done', - 'color' => 'green', - ], - 'private' => (object) [ - 'state_string' => 'Das Dorf ist gerade privat:
Es sind Leute da, aber der Clubraum ist nicht geöffnet.
+ 'done', + 'green', + ), + 'private' => new State( + 'Das Dorf ist gerade privat:
Es sind Leute da, aber der Clubraum ist nicht geöffnet.
Komm gerne vorbei (aber frag lieber vorher, wie lange noch Leute da sind).',
- 'svg' => 'lock',
- 'color' => 'fdd835',
- ],
- 'unknown' => (object) [
- 'state_string' => 'Der Status vom Dorf ist gerade unbekannt',
- 'svg' => 'warning',
- 'color' => 'orange',
- ],
- 'error' => (object) [
- 'state_string' => 'Der Server konnte den Status vom Dorf nicht abrufen.',
- 'svg' => 'error',
- 'color' => 'blue',
- ],
-];
+ 'lock',
+ 'fdd835',
+ ),
+ 'unknown' => new State(
+ 'Der Status vom Dorf ist gerade unbekannt',
+ 'warning',
+ 'orange',
+ ),
+ 'error' => new State(
+ 'Der Server konnte den Status vom Dorf nicht abrufen.',
+ 'error',
+ 'blue',
+ ),
+ };
+}
function hasValidUa(): bool
{
@@ -85,22 +93,25 @@ function hasValidUa(): bool
return false;
}
-function dateTimeFromEvent(ICal $ical, object $event): DateTimeImmutable {
+function dateTimeFromEvent(ICal $ical, object $event): DateTimeImmutable
+{
return DateTimeImmutable::createFromMutable($ical->iCalDateToDateTime($event->dtstart_array[3]));
}
/**
- * @return array