commit d206c242ca436ea81431fbd572cd5e341d2d666b Author: root Date: Thu May 17 15:35:25 2018 +0200 initial commit diff --git a/chch-calendar.sh b/chch-calendar.sh new file mode 100755 index 0000000..f533750 --- /dev/null +++ b/chch-calendar.sh @@ -0,0 +1,16 @@ +#! /bin/bash + +CHCH_ICAL_SRC="https://cloud.chch.it/remote.php/dav/public-calendars/KVJE5OXYIY9B9V5C?export" +CHCH_ICAL="/var/www/chch_api/chch.ical" +RAND="$(date +%s)$RANDOM$RANDOM$RANDOM" + +rm -rf /tmp/chch_*.ical +wget "$CHCH_ICAL_SRC" -O /tmp/chch_$RAND.ical -q -T 45 +if [ $? -ne 0 ]; then + echo "ERROR: wget failed to download calendar" >&2 +else + mv /tmp/chch_$RAND.ical $CHCH_ICAL +fi + +head $CHCH_ICAL -n1 >/dev/null 2>&1 && php /etc/chch/chch_ical2mediawiki.php $CHCH_ICAL 2>/dev/null | php /var/www/chch/maintenance/edit.php -m -b --no-rc -s "automatische Aktualisierung aus dem ical feed" "Aktuelle_ChCh-Termine" >/dev/null 2>&1 +echo "Hauptseite" | php /var/www/chch/maintenance/purgeList.php --purge > /dev/null 2>&1 diff --git a/chch-status.sh b/chch-status.sh new file mode 100755 index 0000000..f4cc432 --- /dev/null +++ b/chch-status.sh @@ -0,0 +1,91 @@ +#!/bin/bash + +SSH_IP="127.0.0.1" +SSHPORT="2322" +SSH_USER="command" +SSH_SUCCESS_FILE="/tmp/chch-status_ssh-success" +JSON_FILE="/var/www/chch_api/chch.json" +JSON_FILE_TEMPL="/etc/chch/chch.json.template" +JSON_FILE_TMP="$(mktemp)" +STATUS_FILE="/tmp/chch-status" +STATUS_OPEN="geöffnet" +STATUS_CLOSED="geschlossen" +STATUS_NULL="unbekannt" +STATUS_NULL_DELAY_MINUTES=10 +STATUS_NULL_TIMEOUT_MINUTES=180 +STATUS_MSG_CLOSED="Geschlossen | Closed" +STATUS_MSG_OPEN="Geöffnet | Open" +WIKI_PATH="/var/www/chch/" +WIKI_IMAGE_CLOSED="ChCh_Logo_closed.png" +WIKI_IMAGE_OPEN="ChCh_Logo_open.png" +WIKI_MAIN_PAGE="Hauptseite" +WIKI_STATUS_PAGE="Aktueller_ChCh-Öffnungsstatus" + +find "$SSH_SUCCESS_FILE" -mmin +$STATUS_NULL_TIMEOUT_MINUTES -exec rm "$STATUS_FILE" \; 2>/dev/null + +OLD_STATUS="$(cat "$STATUS_FILE" 2>/dev/null)" +STATUS="$(echo status | ssh -q -p $SSHPORT $SSH_USER@$SSH_IP 2>/dev/null)" + +if [ -z "$STATUS" ]; then + if [ -f "$SSH_SUCCESS_FILE" ] && test $(find "$SSH_SUCCESS_FILE" -mmin -$STATUS_NULL_DELAY_MINUTES -mmin +0); then + STATUS="$OLD_STATUS" + [ -z "$STATUS" ] && STATUS="$STATUS_NULL" + else + STATUS="$STATUS_NULL" + fi +else + touch $SSH_SUCCESS_FILE +fi + +TIMESTAMP_LASTCHANGE=$(stat -c '%Y' "$STATUS_FILE" 2>/dev/null) || TIMESTAMP_LASTCHANGE=$(date +%s) +[ "$STATUS" != "$STATUS_NULL" ] && printf "%s\n" "$STATUS" > "$STATUS_FILE" +if [ "$STATUS" == "$OLD_STATUS" -o "$STATUS" == "$STATUS_NULL" ]; then + touch --date=@$TIMESTAMP_LASTCHANGE "$STATUS_FILE" +else + TIMESTAMP_LASTCHANGE=$(stat -c '%Y' "$STATUS_FILE" 2>/dev/null) +fi +TIMESTAMP_LASTCHANGE_DATE="$(date -d "@$TIMESTAMP_LASTCHANGE" "+%H:%M (%d.%m.%Y)")" + +API_STATUS="null" +API_STATUS_MSG="$STATUS_MSG_CLOSED" +WIKI_STATUS="[[File:$WIKI_IMAGE_CLOSED|link=|right|frame|'''unbekannt'''
seit $TIMESTAMP_LASTCHANGE_DATE]]" +case $STATUS in + $STATUS_OPEN) + API_STATUS="true" + WIKI_STATUS="[[File:$WIKI_IMAGE_OPEN|link=|right|frame|'''$STATUS'''
seit $TIMESTAMP_LASTCHANGE_DATE]]" + API_STATUS_MSG="$STATUS_MSG_OPEN" + ;; + $STATUS_CLOSED) + API_STATUS="false" + API_STATUS_MSG="$STATUS_MSG_CLOSED" + WIKI_STATUS="[[File:$WIKI_IMAGE_CLOSED|link=|right|frame|'''$STATUS'''
seit $TIMESTAMP_LASTCHANGE_DATE]]" + ;; + $STATUS_NULL) + API_STATUS="null" + STATUS_="'''Öffnungsstatus unbekannt'''" + IMAGE="ChCh_Logo_closed.png" + if [ -f "$STATUS_FILE" ]; then + case $(head -n1 "$STATUS_FILE") in + $STATUS_OPEN) + STATUS_="'''unbekannt'''
zuletzt war $STATUS_OPEN" + IMAGE="$WIKI_IMAGE_OPEN" + ;; + $STATUS_CLOSED) + STATUS_="'''unbekannt'''
zuletzt war $STATUS_CLOSED" + IMAGE="$STATUS_MSG_CLOSED" + ;; + esac + fi + API_STATUS_MSG="$STATUS_MSG_CLOSED" + WIKI_STATUS="[[File:$IMAGE|link=|right|frame|$STATUS_
seit $TIMESTAMP_LASTCHANGE_DATE]]" + ;; +esac + +# The status file for spaceapi.ccc.de and for our IRC bot. +sed "s/%%STATUS%%/${API_STATUS}/;s/%%MESSAGE%%/${API_STATUS_MSG}/;s/%%LASTCHANGE%%/${TIMESTAMP_LASTCHANGE}/" $JSON_FILE_TEMPL > $JSON_FILE_TMP +chown --reference=$JSON_FILE_TEMPL $JSON_FILE_TMP +chmod --reference=$JSON_FILE_TEMPL $JSON_FILE_TMP +mv $JSON_FILE_TMP $JSON_FILE + +echo -n "$WIKI_STATUS" | php "$WIKI_PATH/maintenance/edit.php" -m -b --no-rc -s "$STATUS" "$WIKI_STATUS_PAGE" >> /dev/null 2>&1 +echo "$WIKI_MAIN_PAGE" | php "$WIKI_PATH/maintenance/purgeList.php" --purge >> /dev/null 2>&1 diff --git a/chch-status_test.sh b/chch-status_test.sh new file mode 100755 index 0000000..618f84e --- /dev/null +++ b/chch-status_test.sh @@ -0,0 +1,92 @@ +#!/bin/bash + +SSH_IP="127.0.0.1" +SSHPORT="0000" +SSH_USER="command" +SSH_SUCCESS_FILE="/tmp/test_chch-status_ssh-success" +JSON_FILE="/tmp/test_chch.json" +JSON_FILE_TEMPL="/var/www/chch_api/chch.json.template" +JSON_FILE_TMP="$(mktemp)" +STATUS_FILE="/tmp/test_chch-status" +STATUS_OPEN="geöffnet" +STATUS_CLOSED="geschlossen" +STATUS_NULL="unbekannt" +STATUS_NULL_DELAY_MINUTES=10 +STATUS_NULL_TIMEOUT_MINUTES=180 +STATUS_MSG_CLOSED="Geschlossen | Closed" +STATUS_MSG_OPEN="Geöffnet | Open" +WIKI_PATH="" +WIKI_IMAGE_CLOSED="ChCh_Logo_closed.png" +WIKI_IMAGE_OPEN="ChCh_Logo_open.png" +WIKI_MAIN_PAGE="Hauptseite" +WIKI_STATUS_PAGE="Aktueller_ChCh-Öffnungsstatus" + +find "$SSH_SUCCESS_FILE" -mmin +$STATUS_NULL_TIMEOUT_MINUTES -exec rm "$STATUS_FILE" \; 2>/dev/null + +OLD_STATUS="$(cat "$STATUS_FILE" 2>/dev/null)" +#STATUS="$(echo status | ssh -q -p $SSHPORT $SSH_USER@$SSH_IP 2>/dev/null)" +STATUS="$(echo status | cat /tmp/test_chch_fake_status 2>/dev/null)" + +if [ -z "$STATUS" ]; then + if [ -f "$SSH_SUCCESS_FILE" ] && test $(find "$SSH_SUCCESS_FILE" -mmin -$STATUS_NULL_DELAY_MINUTES -mmin +0); then + STATUS="$OLD_STATUS" + [ -z "$STATUS" ] && STATUS="$STATUS_NULL" + else + STATUS="$STATUS_NULL" + fi +else + touch $SSH_SUCCESS_FILE +fi + +TIMESTAMP_LASTCHANGE=$(stat -c '%Y' "$STATUS_FILE" 2>/dev/null) || TIMESTAMP_LASTCHANGE=$(date +%s) +[ "$STATUS" != "$STATUS_NULL" ] && printf "%s\n" "$STATUS" > "$STATUS_FILE" +if [ "$STATUS" == "$OLD_STATUS" -o "$STATUS" == "$STATUS_NULL" ]; then + touch --date=@$TIMESTAMP_LASTCHANGE "$STATUS_FILE" +else + TIMESTAMP_LASTCHANGE=$(stat -c '%Y' "$STATUS_FILE" 2>/dev/null) +fi +TIMESTAMP_LASTCHANGE_DATE="$(date -d "@$TIMESTAMP_LASTCHANGE" "+%H:%M (%d.%m.%Y)")" + +API_STATUS="null" +API_STATUS_MSG="$STATUS_MSG_CLOSED" +WIKI_STATUS="[[File:$WIKI_IMAGE_CLOSED|link=|right|frame|'''unbekannt'''
seit $TIMESTAMP_LASTCHANGE_DATE]]" +case $STATUS in + $STATUS_OPEN) + API_STATUS="true" + WIKI_STATUS="[[File:$WIKI_IMAGE_OPEN|link=|right|frame|'''$STATUS'''
seit $TIMESTAMP_LASTCHANGE_DATE]]" + API_STATUS_MSG="$STATUS_MSG_OPEN" + ;; + $STATUS_CLOSED) + API_STATUS="false" + API_STATUS_MSG="$STATUS_MSG_CLOSED" + WIKI_STATUS="[[File:$WIKI_IMAGE_CLOSED|link=|right|frame|'''$STATUS'''
seit $TIMESTAMP_LASTCHANGE_DATE]]" + ;; + $STATUS_NULL) + API_STATUS="null" + STATUS_="'''Öffnungsstatus unbekannt'''" + IMAGE="ChCh_Logo_closed.png" + if [ -f "$STATUS_FILE" ]; then + case $(head -n1 "$STATUS_FILE") in + $STATUS_OPEN) + STATUS_="'''unbekannt'''
zuletzt war $STATUS_OPEN" + IMAGE="$WIKI_IMAGE_OPEN" + ;; + $STATUS_CLOSED) + STATUS_="'''unbekannt'''
zuletzt war $STATUS_CLOSED" + IMAGE="$STATUS_MSG_CLOSED" + ;; + esac + fi + API_STATUS_MSG="$STATUS_MSG_CLOSED" + WIKI_STATUS="[[File:$IMAGE|link=|right|frame|$STATUS_
seit $TIMESTAMP_LASTCHANGE_DATE]]" + ;; +esac + +# The status file for spaceapi.ccc.de and for our IRC bot. +sed "s/%%STATUS%%/${API_STATUS}/;s/%%MESSAGE%%/${API_STATUS_MSG}/;s/%%LASTCHANGE%%/${TIMESTAMP_LASTCHANGE}/" $JSON_FILE_TEMPL > $JSON_FILE_TMP +chown --reference=$JSON_FILE_TEMPL $JSON_FILE_TMP +chmod --reference=$JSON_FILE_TEMPL $JSON_FILE_TMP +mv $JSON_FILE_TMP $JSON_FILE + +echo -n "$WIKI_STATUS" #| php "$WIKI_PATH/maintenance/edit.php" -m -b --no-rc -s "$STATUS" "$WIKI_STATUS_PAGE" >> /dev/null 2>&1 +#echo "$WIKI_MAIN_PAGE" | php "$WIKI_PATH/maintenance/purgeList.php" --purge >> /dev/null 2>&1 diff --git a/chch.json.template b/chch.json.template new file mode 100644 index 0000000..7230e48 --- /dev/null +++ b/chch.json.template @@ -0,0 +1,40 @@ +{ + "api": "0.13", + "space": "Chaostreff Chemnitz", + "logo": "http://chaoschemnitz.de/chch_logo.png", + "url": "https://chaoschemnitz.de", + "location": { + "address": "Augustusburger Str. 102, 09126 Chemnitz, Germany", + "lon": 12.939537, + "lat": 50.830659 + }, + "contact": { + "ml": "kontakt@chaoschemnitz.de", + "phone": "+49 37 1337 18088", + "irc": "irc://irc.hackint.eu/#ChaosChemnitz", + "facebook": "https://www.facebook.com/ChaosChemnitz", + "twitter": "@ChaosChemnitz", + "issue_mail": "florz@florz.net" + }, + "issue_report_channels": [ + "ml", + "issue_mail" + ], + "open": %%STATUS%%, + "state": { + "open": %%STATUS%%, + "lastchange": %%LASTCHANGE%%, + "message": "%%MESSAGE%%", + "icon": { + "open": "http://chaoschemnitz.de/chch_open.png", + "closed": "http://chaoschemnitz.de/chch_closed.png" + } + }, + "feeds": { + "calendar": { + "type": "ical", + "url": "http://chaoschemnitz.de/chch.ical" + } + }, + "ext_ccc": "chaostreff" +} diff --git a/chch_ical2mediawiki.php b/chch_ical2mediawiki.php new file mode 100644 index 0000000..7c7f23d --- /dev/null +++ b/chch_ical2mediawiki.php @@ -0,0 +1,43 @@ + +{| class="wikitable" +|- +! scope="col" rowspan="2"| Datum +! scope="col"| Titel +! scope="col"| Ort +|- +! scope="col" colspan="2"| Beschreibung +|- +parseFile("$ical_file"); + +foreach ($cal->getSortedEvents() as $r) { + if($r['DTEND']->getTimestamp()>(time()-$backward_seconds) and $r['DTSTART']->getTimestamp()<(time()+$preview_seconds)) { + if($r['DTSTART']->format('d.m.Y')!=$r['DTEND']->format('d.m.Y') and $r['DTEND']->format('H:i')=="00:00") { + $chch_end_date=date('d.m.Y' ,$r['DTEND']->getTimestamp()-1); + $chch_end_time="23:59"; + } else { + $chch_end_date=$r['DTEND']->format('d.m.Y'); + $chch_end_time=$r['DTEND']->format('H:i'); + } + echo sprintf('|rowspan="2" style="text-align:center;"|%s %s
-
%s %s' . PHP_EOL . + '|\'\'\'%s\'\'\'' . PHP_EOL . + '|%s ' . PHP_EOL . + '|-' . PHP_EOL . + '|colspan="2"|%s ' . PHP_EOL . + '|-' . PHP_EOL, + $r['DTSTART']->format('d.m.Y'), $r['DTSTART']->format('H:i'), $chch_end_date, $chch_end_time, + $r['SUMMARY'], + $r['LOCATION'], + $r['DESCRIPTION']); + } +} +?> +|}