initial commit

This commit is contained in:
root 2018-05-17 15:35:25 +02:00
commit d206c242ca
5 changed files with 282 additions and 0 deletions

16
chch-calendar.sh Executable file
View File

@ -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

91
chch-status.sh Executable file
View File

@ -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'''<br>seit $TIMESTAMP_LASTCHANGE_DATE]]"
case $STATUS in
$STATUS_OPEN)
API_STATUS="true"
WIKI_STATUS="[[File:$WIKI_IMAGE_OPEN|link=|right|frame|'''$STATUS'''<br>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'''<br>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'''<br>zuletzt war $STATUS_OPEN"
IMAGE="$WIKI_IMAGE_OPEN"
;;
$STATUS_CLOSED)
STATUS_="'''unbekannt'''<br>zuletzt war $STATUS_CLOSED"
IMAGE="$STATUS_MSG_CLOSED"
;;
esac
fi
API_STATUS_MSG="$STATUS_MSG_CLOSED"
WIKI_STATUS="[[File:$IMAGE|link=|right|frame|$STATUS_<br>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

92
chch-status_test.sh Executable file
View File

@ -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'''<br>seit $TIMESTAMP_LASTCHANGE_DATE]]"
case $STATUS in
$STATUS_OPEN)
API_STATUS="true"
WIKI_STATUS="[[File:$WIKI_IMAGE_OPEN|link=|right|frame|'''$STATUS'''<br>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'''<br>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'''<br>zuletzt war $STATUS_OPEN"
IMAGE="$WIKI_IMAGE_OPEN"
;;
$STATUS_CLOSED)
STATUS_="'''unbekannt'''<br>zuletzt war $STATUS_CLOSED"
IMAGE="$STATUS_MSG_CLOSED"
;;
esac
fi
API_STATUS_MSG="$STATUS_MSG_CLOSED"
WIKI_STATUS="[[File:$IMAGE|link=|right|frame|$STATUS_<br>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

40
chch.json.template Normal file
View File

@ -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"
}

43
chch_ical2mediawiki.php Normal file
View File

@ -0,0 +1,43 @@
<?php
$ical_file=$argv[1];
$backward_seconds=60*60*6;
$preview_seconds=60*60*24*60;
?>
{| class="wikitable"
|-
! scope="col" rowspan="2"| Datum
! scope="col"| Titel
! scope="col"| Ort
|-
! scope="col" colspan="2"| Beschreibung
|-
<?php
require_once __DIR__ . '/icalparser/src/IcalParser.php';
require_once __DIR__ . '/icalparser/src/Recurrence.php';
require_once __DIR__ . '/icalparser/src/Freq.php';
$cal = new \om\IcalParser();
$results = $cal->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&nbsp;%s<br>-<br>%s&nbsp;%s' . PHP_EOL .
'|\'\'\'%s\'\'\'' . PHP_EOL .
'|%s&nbsp;' . PHP_EOL .
'|-' . PHP_EOL .
'|colspan="2"|%s&nbsp;' . 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']);
}
}
?>
|}