|
|
(2 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) |
Zeile 1: |
Zeile 1: |
| Dieses Script ermittelt durch Ausnutzen von Seiteneffekten die [[UUGRN:Stammtisch|Stammtischtermine]] in Mannheim und Heidelberg und gibt passenden SQL-Code für die Kalender-Tabelle aus. | | Dieses Script ermittelt die [[UUGRN:Stammtisch|Stammtischtermine]] und [[UUGRN:FIXME Treffen]] und gibt passenden SQL-Code für die Kalender-Tabelle aus. |
|
| |
|
| == Funktionsweise == | | == Script == |
| Mittels [[gdate|GNU date]] wird für alle in Frage kommenden Tage der Wochentag ''%u'' ausgegeben, dieser wird von folgenden [[sed]]-Ausdruck mit 3 für Mittwoch = Heidelberg und 4 für Donnerstag = Mannheim umgewandelt. Durch die ''for D''-Schleife werden nur die in Frage kommenden Tage durchlaufen, daher kann es keine ''false positives'' geben.
| | <code><pre> |
| | #! /bin/sh |
|
| |
|
| Die abschließende ''while''-Schleife übernimmt die Ausgabe von ''sed'' und erzeugt das passende, hier ''unix epoch''-Zeitformat und die restlichen Felder.
| | YEAR=${1:-$(date +%Y)} |
| | test "${YEAR}" -gt 2000 -a "${YEAR}" -lt 2038 || YEAR="$(date +%Y)" |
|
| |
|
| == Script ==
| | for MONTH in $(gseq -w 01 12); do for DAY in $(gseq -w 01 31); do |
| 1 #! /bin/sh
| | gdate "+%u|%d|%F" --date "${YEAR}-${MONTH}-${DAY}" 2>/dev/null |
| 2 #
| | done; done | |
| 3 # Berechnet die UUGRN-Stammtische und erzeugt das SQL für die Datenbank
| | while IFS='|' read DOW DOM DATE; do |
| 4 #
| | case ${DOM} in |
| 5 # Jeden 2. Donnerstag im Monat um 19 Uhr in Mannheim (ORT=5)
| | 01|02|03|04|05|06|07) NIM=1 ;; |
| 6 # Jeden 4. Mittwoch im Monat um 20 Uhr in Heidelberg (ORT=6)
| | 08|09|10|11|12|13|14) NIM=2 ;; |
| 7 #
| | 15|16|17|18|19|20|21) NIM=3 ;; |
| 8 # Das Scriptgeht von der Annahme aus, dass der 2. Donnerstag im Monat immer zwischen dem 8. und 14. liegen muss
| | 22|23|24|25|26|27|28) NIM=4 ;; |
| 9 # und dass der 4. Mittwoch im Monat immer zwischen 22. und 28. liegt.
| | 29|30|31) NIM=5 ;; |
| 10 # Die Schleifen als auch der egrep | sed Ausdruck gehen direkt darauf ein.
| | *) NIM="0" ;; |
| 11 #
| | esac |
| 12 #
| | |
| 13 # Raphael.Becker <rabe@uugrn.org>
| | SQL="insert into KALENDER set ID=0" |
| 14
| | SQL2="" |
| 15 JAHR=2007
| | case ${NIM}-${DOW} in |
| 16
| | 1-5) # 1. Freitag |
| 17 for M in 01 02 03 04 05 06 07 08 09 10 11 12; do
| | SQL2=", DATUM='${DATE} 20:00:00', ORT_ID=11, TEXT='FIXME', EVENT_LINK='http://fixme.uugrn.org/'" |
| 18 for D in 08 09 10 11 12 13 14 22 23 24 25 26 27 28 ; do
| | ;; |
| 19 gdate "+%u %d %Y-%m-%d" --date "$JAHR-$M-$D" | | 3-1) # 3. Montag |
| 20 done
| | SQL2=", DATUM='${DATE} 20:00:00', ORT_ID=12, TEXT='UnixStammtisch', EVENT_LINK='http://stammtisch.uugrn.org/'" |
| 21 done |
| | ;; |
| 22 egrep "^(4 [01]|3 2)" | | | esac |
| 23 sed -e 's,^3 [0-9]* ,20:00:00|6|"kleiner" Stammtisch|,; | | |
| 24 s,^4 [0-9]* ,19:00:00|5|Stammtisch|,;' | | | if [ -n "${SQL2}" ]; then |
| 25 while IFS='|' read ZEIT ORT BEZ DATUM junk; do | | echo "${SQL}${SQL2};" |
| 26 echo "insert into KALENDER set ID=0, DATUM=$(gdate +%s --date "$DATUM $ZEIT"), ORT_ID=$ORT, TEXT='$BEZ';"
| | fi |
| 27 done | | done |
| | </pre></code> |
| | |
| | === Variablen === |
| | ;YEAR,MONTH,DAY: Iteriert über alle Kalendertage des angegebenen Jahres |
| | ;DOW: day-of-week [1..7], 1=Montag |
| | ;DOM: day-of-month [1..31] |
| | ;NIM: Nth-in-month [1..5] |
|
| |
|
| == Ausgabe für 2007 ==
| |
| $ '''bin/uugrn_stammtischkalender.sh'''
| |
| insert into KALENDER set ID=0, DATUM=1168538400, ORT_ID=5, TEXT='Stammtisch';
| |
| insert into KALENDER set ID=0, DATUM=1169665200, ORT_ID=6, TEXT='"kleiner" Stammtisch';
| |
| insert into KALENDER set ID=0, DATUM=1170957600, ORT_ID=5, TEXT='Stammtisch';
| |
| insert into KALENDER set ID=0, DATUM=1172689200, ORT_ID=6, TEXT='"kleiner" Stammtisch';
| |
| insert into KALENDER set ID=0, DATUM=1173376800, ORT_ID=5, TEXT='Stammtisch';
| |
| insert into KALENDER set ID=0, DATUM=1175104800, ORT_ID=6, TEXT='"kleiner" Stammtisch';
| |
| insert into KALENDER set ID=0, DATUM=1176397200, ORT_ID=5, TEXT='Stammtisch';
| |
| insert into KALENDER set ID=0, DATUM=1177524000, ORT_ID=6, TEXT='"kleiner" Stammtisch';
| |
| insert into KALENDER set ID=0, DATUM=1178816400, ORT_ID=5, TEXT='Stammtisch';
| |
| insert into KALENDER set ID=0, DATUM=1179943200, ORT_ID=6, TEXT='"kleiner" Stammtisch';
| |
| insert into KALENDER set ID=0, DATUM=1181840400, ORT_ID=5, TEXT='Stammtisch';
| |
| insert into KALENDER set ID=0, DATUM=1182967200, ORT_ID=6, TEXT='"kleiner" Stammtisch';
| |
| insert into KALENDER set ID=0, DATUM=1184259600, ORT_ID=5, TEXT='Stammtisch';
| |
| insert into KALENDER set ID=0, DATUM=1185386400, ORT_ID=6, TEXT='"kleiner" Stammtisch';
| |
| insert into KALENDER set ID=0, DATUM=1186678800, ORT_ID=5, TEXT='Stammtisch';
| |
| insert into KALENDER set ID=0, DATUM=1187805600, ORT_ID=6, TEXT='"kleiner" Stammtisch';
| |
| insert into KALENDER set ID=0, DATUM=1189702800, ORT_ID=5, TEXT='Stammtisch';
| |
| insert into KALENDER set ID=0, DATUM=1190829600, ORT_ID=6, TEXT='"kleiner" Stammtisch';
| |
| insert into KALENDER set ID=0, DATUM=1192122000, ORT_ID=5, TEXT='Stammtisch';
| |
| insert into KALENDER set ID=0, DATUM=1193248800, ORT_ID=6, TEXT='"kleiner" Stammtisch';
| |
| insert into KALENDER set ID=0, DATUM=1194544800, ORT_ID=5, TEXT='Stammtisch';
| |
| insert into KALENDER set ID=0, DATUM=1196276400, ORT_ID=6, TEXT='"kleiner" Stammtisch';
| |
| insert into KALENDER set ID=0, DATUM=1197568800, ORT_ID=5, TEXT='Stammtisch';
| |
| insert into KALENDER set ID=0, DATUM=1198695600, ORT_ID=6, TEXT='"kleiner" Stammtisch';
| |
|
| |
|
| [[Kategorie:Script]] | | [[Kategorie:Script]] |
| [[Kategorie:Verein]] | | [[Kategorie:UUGRN|Stammtischkalender]] |
Dieses Script ermittelt die Stammtischtermine und UUGRN:FIXME Treffen und gibt passenden SQL-Code für die Kalender-Tabelle aus.
#! /bin/sh
YEAR=${1:-$(date +%Y)}
test "${YEAR}" -gt 2000 -a "${YEAR}" -lt 2038 || YEAR="$(date +%Y)"
for MONTH in $(gseq -w 01 12); do for DAY in $(gseq -w 01 31); do
gdate "+%u|%d|%F" --date "${YEAR}-${MONTH}-${DAY}" 2>/dev/null
done; done |
while IFS='|' read DOW DOM DATE; do
case ${DOM} in
01|02|03|04|05|06|07) NIM=1 ;;
08|09|10|11|12|13|14) NIM=2 ;;
15|16|17|18|19|20|21) NIM=3 ;;
22|23|24|25|26|27|28) NIM=4 ;;
29|30|31) NIM=5 ;;
*) NIM="0" ;;
esac
SQL="insert into KALENDER set ID=0"
SQL2=""
case ${NIM}-${DOW} in
1-5) # 1. Freitag
SQL2=", DATUM='${DATE} 20:00:00', ORT_ID=11, TEXT='FIXME', EVENT_LINK='http://fixme.uugrn.org/'"
;;
3-1) # 3. Montag
SQL2=", DATUM='${DATE} 20:00:00', ORT_ID=12, TEXT='UnixStammtisch', EVENT_LINK='http://stammtisch.uugrn.org/'"
;;
esac
if [ -n "${SQL2}" ]; then
echo "${SQL}${SQL2};"
fi
done
- YEAR,MONTH,DAY
- Iteriert über alle Kalendertage des angegebenen Jahres
- DOW
- day-of-week [1..7], 1=Montag
- DOM
- day-of-month [1..31]
- NIM
- Nth-in-month [1..5]