#!/bin/bash
#
# Programm, um die technikum29.de-Seiten offline lesbar
# zu machen (fuer Museumspraesentation)
#
# enthält Routinen zum Runterladen und die entsprechende
# Verwertung (ganz unten)
#
# geschrieben am 22.12.2007, 20:00,
# erweitert auf jetzigen stand am 25.03.2008, 03:00
#   von Sven (@technikum29.de).
# bugfixes am 17.08.2008, 17:47 von Sven
#
# Verwenden sie den Quelltext als Gemeinfrei (ohne Lizenz,
# public domain).
#
# Dieses Programm laeuft auf dem technikum29-Server einfach
# als cronjob:
#    .... download.sh > last.log
#
#


############################ KONSTANTEN ############################

# der Server, von dem runtergeladen werden soll
# (z.B. lokal oder der echte), inkl. trailing slash bitte
T29SERVER="http://www.technikum29.de/"

# zusaetzliche globale wget-Parameter
# mit diesem Parameter kann man in den Logs nachvollziehen,
# woher z.B. dieser Traffic kommt (sic).
WGETPARAMS="--user-agent=\"wget/t29 mirroring\""

# der Text, der jeder Seite angehaengt werden soll
INFOTEXT=$(cat << INFOTEXT
<!-- Notitz automatisch hinzugefuegt vom technikum29-Mirrorprogramm -->
<div style="border: 1px solid red; background-color: white; padding: 20px; margin: 40px;">
    Dies ist eine <b>lokale Kopie</b> von <a href="${T29SERVER}">${T29SERVER}</a>;
    erstellt am <b>`date`</b> mit der Hilfe des
    <a href="http://dev.technikum29.de/wiki/Homepage/Offline-Reading">technikum29 Mirror-Programms</a>
</div>
INFOTEXT
)

# Dateinameschema: [Parameter=Ordner]/[FILE_PREFIX].[tar.bzip|7z|...]
FILE_PREFIX="technikum29"


############################ PROGRAMMBEGINN ############################

if [[ -z $1 || $1 = "-h" || $h = "--help" ]];
    then echo "$0: Loads down everything from $T29SERVER to some files in the target directory"
         echo "Usage: $0 [target directory]" 
         exit
fi


function download() {
    # erwartet Variable TARGETDIR
    pushd ${TARGETDIR} > /dev/null

    # Inhaltsseiten + Inhaltsbilder runterladen
    echo Lade Inhaltsseiten runter...
    wget --no-verbose --mirror --no-host-directories \
        --page-requisites --convert-links "$WGETPARAMS" \
        --html-extension ${T29SERVER} 2>&1
    # wget gibt auf stderr aus, deswegen zu stdout umleiten.


    # Designbilder runterladen (werden nur per CSS eingebunden und
    # von wget nicht erfasst)
    echo Lade Designelemente runter...
    wget --no-verbose --no-host-directories --no-parent "$WGETPARAMS" \
        -A".png,.jpg,.jpeg" --mirror ${T29SERVER}shared/img/  2>&1

    # bloede Individualloesung fuer das Script der Startseite
    # --- braucht kein Mensch mehr da Startseite weg -- 30.04.09
    #T29STARTSCRIPT="shared/js/startseite.js"
    #echo Schreibe Script ${T29STARTSCRIPT} um...
    #sed 's#"/"+lang\[this.langcounter\]+"/"#lang[this.langcounter]+"/index.html"#' \
    #    ${T29STARTSCRIPT} > ${T29STARTSCRIPT}.tmp
    #mv -f ${T29STARTSCRIPT}.tmp ${T29STARTSCRIPT}

    # Alle HTML-Dateien mit Notiz anreichern
    echo Fuege allen HTML-Dateien Mirror-Notiz an...
    find . -name '*.html' | while read FILE
            # 13.12.10: absolute startseite gibts nicht mehr
            do echo ${INFOTEXT} >> $FILE
            #do if [[ $FILE != "./index.html" ]]; # bei absoluter Startseite nichts machen
            #        then echo ${INFOTEXT} >> $FILE
            #fi
    done

    # zurück weil fertig
    popd > /dev/null
}

############################ PERSOENLICHE AUSLEGUNG ############################

# etwas ausfuehrlich :-)
echo "technikum29 Mirrorprogram transaction log"
echo "Gestartet am `date`."
start_date=`date +%s`
echo

# wir wollen alles in ein Tempdir laden und dann Tarballs/etc. machen
TEMPDIR=$(mktemp -d)
echo Nutze ${TEMPDIR} zum Download...

TARGETDIR="${TEMPDIR}"
download

TARBALL=${1}/${FILE_PREFIX}.tar.bzip
echo Erstelle Tarball ${TARBALL}...
tar -jcf "${TARBALL}" --directory="${TEMPDIR}" .

ZIP=${1}/${FILE_PREFIX}.7z
echo Erstelle 7zip-Archiv ${ZIP}...
# 7z-Bug: Altes Archiv vorher loeschen.
# vgl. http://nopaste.org/p/a2gKf3Ql9 (Ausgabe ohne rm -f)
rm -f "${ZIP}"
7z a "${ZIP}" "${TEMPDIR}/*"

echo Fertig. Leere TMPDIR...
rm -r ${TEMPDIR}

end_date=`date +%s`
time_span=$[ $end_date - $start_date ];
echo
echo "Fertig um $end_date"
echo "Komplettlaufzeit: $time_span Sekunden"

# EOF 

