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); ?>
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.
=format_event($event)?> | = htmlspecialchars($event->summary) ?> | Details |
---|
Es stehen aktuell keine Veranstaltungen an.