2, 'defaultTimeZone' => 'Europe/Berlin', 'defaultWeekStart' => 'MO', 'filterDaysBefore' => '1', )); if (is_file($ICAL_CACHE_FILE)){ error_log('is file'); $mtime = filemtime($ICAL_CACHE_FILE); $time_diff = time() - $mtime; error_log(sprintf('%d',$time_diff)); if ($time_diff >= $ICAL_STALE_SECONDS){ $data = file_get_contents($ICAL_URL); file_put_contents($ICAL_CACHE_FILE); $ical->initString($data); } else { $ical->initFile() } // Else get state from network every time (inefficient!) } else { $state = get_state('https://chaosdorf.de/raumstatus/status.png'); } if () $ical->initUrl($ICAL_URL, $acceptLanguage = 'de'); $events = $ical->eventsFromInterval('2 week'); $first_event = $events[0]; $events = array_slice($events, 1); } /** * @param $url * @return int */ function get_state($url): int { $hash = hash('crc32b', file_get_contents($url)); switch($hash){ case '1ac9394d': return State::STATE_UNKNOWN; case 'bf48d8e5': return State::STATE_OPEN; case 'beab4306': return State::STATE_MAYBE_OPEN; case '4e7e398a': return State::STATE_CLOSED; case '5503654a': return State::STATE_PRIVATE; default: error_log('Default state called in get_state(): hash '. $hash); return State::STATE_ERROR; } } abstract class State{ // php doesn't have enums const STATE_CLOSED = 0; const STATE_OPEN = 1; const STATE_MAYBE_OPEN = 2; const STATE_PRIVATE = 3; const STATE_UNKNOWN = 4; const STATE_ERROR = -1; } class FormattingInfo{ function __construct($state) { switch($state){ case State::STATE_CLOSED: $this->color = 'red'; $this->svg = 'lock'; $this->state_string = 'Das Dorf ist gerade geschlossen.'; $this->img_alt = 'geschlossen'; break; case State::STATE_MAYBE_OPEN: $this->color = 'brown'; $this->svg = 'done'; $this->state_string = 'Das Dorf ist gerade vielleicht geöffnet:

Der Clubraum ist offen, aber es findet keine Veranstaltung statt.

Der Status kann sich also kurzfristig ändern.'; $this->img_alt = 'vielleicht geöffnet'; break; case State::STATE_OPEN: $this->color = 'green'; $this->svg = 'done'; $this->state_string = 'Das Dorf ist gerade geöffnet.

Komm gerne vorbei.'; $this->img_alt = 'geöffnet'; break; case State::STATE_PRIVATE: $this->color = 'fdd835'; $this->svg = 'lock'; $this->state_string = '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).'; $this->img_alt = 'privat'; break; case State::STATE_UNKNOWN: $this->color = 'orange'; $this->svg = 'warning'; $this->state_string = 'Der Status vom Dorf ist gerade unbekannt'; $this->img_alt = 'unbekannt'; case State::STATE_ERROR: $this->color = 'blue'; $this->svg = 'error'; $this->state_string = 'Der Server konnte den Status vom Dorf nicht ermitteln. Sorry.'; $this->img_alt = 'konnte nicht abgerufen werden'; break; } } public $svg; public $img_alt; public $state_string; public $color; } if (! $DORF_IN_LOCKDOWN){ // Try to acquire state locally, but *only* if STATE_FILE exists if (is_file($STATE_FILE)){ error_log('is file'); $mtime = filemtime($STATE_FILE); $time_diff = time() - $mtime; error_log(sprintf('%d',$time_diff)); if ($time_diff >= $STATE_STALE_SECONDS){ $state = get_state('https://chaosdorf.de/raumstatus/status.png'); $result = file_put_contents($STATE_FILE, sprintf('%d',$state)); } else { $state = sscanf(file_get_contents($STATE_FILE),'%d')[0]; } // Else get state from network every time (inefficient!) } else { $state = get_state('https://chaosdorf.de/raumstatus/status.png'); } $fmt = new FormattingInfo($state); } function format_event($event): string{ global $DATE_FORMAT, $ical; $startdate_loop = $ical->iCalDateToDateTime($event->dtstart_array[3]); $startdate_str = $startdate_loop->format($DATE_FORMAT); $interval_loop = new DateInterval($event->duration); if ($interval_loop->d != 0 || $interval_loop->h >= 24){ $enddate_str = $startdate_loop->add($interval_loop)->format($DATE_FORMAT); }else{ $enddate_str = $startdate_loop->add($interval_loop)->format('H:i'); } return $startdate_str . ' – ' . $enddate_str; } $v = file_get_contents($VISITORS_FILE); ?> Was geht im Dorf.jetzt?

Das Chaosdorf ist geschlossen

Das Chaosdorf ist aufgrund eines Beschlusses des Vereins geschlossen.

Das gilt bis auf Weiteres.

Natürlich hört das Chaosdorfleben nicht auf, kommt uns gerne im VirtualSpace besuchen.

Türstatus

<?= $fmt->img_alt ?>

state_string ?>

Events

Nächste Veranstaltung

summary, ENT_QUOTES, 'UTF-8') ?>

Danach:

summary) ?> Details
Event-Kalender

Aktuell keine Veranstaltungen.

Es stehen aktuell keine Veranstaltungen an.

// // ?>