#!/bin/bash
# slubmagic Ufftata, Autor: Stephan Wittig@knapp80ps.de, Dresden den 24. Februar 2007 - 17. Oktober 2008

# Anregungen, Wuensche und Verbesserungsvorschlaege zu slubmagic sind jederzeit willkommen!
# Bei Fragen bitte ich zuerst die FAQ unter http://www.knapp80ps.de/slubmagic_faq zu konsultieren.

# slubmagic ist ein Ersatz fuer den Benachrichtigungsdienst der Saechsischen Landes- und Universitaetsbibliothek Dresden
# http://www.slub-dresden.de
# Da die Email-Benachrichtigung der Slub Dresden ueber ablaufende Buecher unzuverlaessig arbeitete wurde
# sie Anfang 2007 kurzerhand abgeschaltet. Der Gerechtigkeit wegen.
# Vergessliche Naturen erhalten mit diesem Script die Moeglichkeit sich weiterhin per Email ueber ablaufende
# Buecher informieren zu lassen.
# Am einfachsten installiert man slubmagic auf einem der Login-Server der TU-Dresden. Auf diesen besitzt jeder
# Student und Mitarbeiter der TU Dresden einen Account.
# Das Script ist ins Homeverzeichnis auf dem Server zu kopieren und mit
# slubmagic.sh install
# aufzurufen. Die Installation erfolgt interaktiv. Benoetigt wird eine Emailadresse, an die die Benachrichtigung
# geschickt werden soll und die Benutzernummer (Slub-Ausweis) und Passwort fuer die Slub. Nach erfolgreicher
# Einrichtung informiert slubmagic bevor Buecher ablaufen. Zusaetzlich schickt es auf Wunsch eine woechentliche
# Zusammenfassung, welche Buecher in der folgenden Woche faellig werden.
# Mit der option uninstall kann slubmagic wieder entfernt werden.

# Disclaimer: Der Autor uebernimmt keine Haftung fuer verpasste Fristen abgelaufener Buecher, da auch slubmagic
# nicht vor Fehlern oder einem Serverausfall gefeit ist!
AUTORMAIL="slubmagic2008 / knapp80ps / de";

PATH=$PATH:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/global/bin:/global-common/scripts:/usr/sfw/bin:/opt/sfw/bin:/usr/ccs/bin:/usr/xpg4/bin:/opt/SUNWspro/bin:/usr/dt/bin:/usr/openwin/bin:/usr/ucb:/opt/bin

# Was wir am Anfang brauchen

SCRIPTNAME=$(echo $0 | sed -e 's/.*\///g');
DOMAIL="0";
VERSION="0.26";
VERS=26;
ME=$(whoami);
TMPPFAD=/tmp;
MYHOME=$(echo ~);
TEMPDATE='';

# und natuerlich die Nutzerdaten

USERDATAFILE=$MYHOME/.userdata;

if [[ -f $USERDATAFILE ]]; then
  source $USERDATAFILE;
else
  printf "#!/bin/bash\nEMAIL=''; # gueltige Email-Adresse\nUSERNUM=''; # Slub-Benutzernummer\nPASSWORT=''; # Slub-Passwort\nALARMTAGE='4'; # Alarmabstand\nWEEKLY='j'; # woechentlich\nAUTOVERS='j'; # Autoversionskontrolle\nDATE='date'; # Datumsprogramm\nWEBAPP=''; # Webapplikation\n" > $USERDATAFILE;
  chmod 750 $USERDATAFILE;
  source $USERDATAFILE;
fi

HEUTE=$($DATE +'%d %b %Y');

### SCRIPTFUNKTIONEN -----------------------------------------------------------------------------------------

error () {      # Ein Fehler ist aufgetreten

  ERROR=$1;
  SECOND=$2;
  THIRD=$3;
  case "$1" in
    empty_token)
                   ERRORMSG="Die Seite der Slub kann nicht erreicht werden! Ich werde erst morgen einen neuen Versuch unternehmen. Um meine Installation zu ueberpruefen, loggen Sie sich bitte auf $(uname -n) ein und testen sie meine Installation mit $SCRIPTNAME status!";
		     echo "$($DATE) [slubmagic] SLUB-Seite nicht erreichbar!" >> $MYHOME/slubmagic.log;
		   ;;
    no_cronjob)
                   ERRORMSG="Der CRONjob fuer slubmagic konnte nicht erzeugt werden! Bitte installieren sie $SCRIPTNAME erneut. Besteht das Problem weiterhin wenden Sie sich bitte unter $AUTORMAIL an den Autor des Scripts.";
		     echo "$($DATE) [slubmagic] CRONjobs konnten nicht erzeugt werden!" >> $MYHOME/slubmagic.log;
		   ;;
    no_npage)
                   ERRORMSG="Ihre Benutzerseite der Slub konnte nicht geladen werden! Ich werde erst morgen einen neuen Versuch unternehmen. Um meine Installation zu ueberpruefen, loggen Sie sich bitte auf $(uname -n) ein und testen sie meine Installation mit $SCRIPTNAME status!";
		     echo "$($DATE) [slubmagic] SLUB-Benutzerseite konnte nicht heruntergeladen werden!" >> $MYHOME/slubmagic.log;
		   ;;
    empty_npage)
                   ERRORMSG="Ihre Benutzerseite der Slub konnte nicht geladen werden! Evtl. ist Ihr Benutzerkonto bei der Slub gesperrt, bitte ueberpruefen Sie den Status ihres Slub-Benutzerkontos!";
		     echo "$($DATE) [slubmagic] SLUB-Seite nicht erreichbar, oder BEnutzerkonto gesperrt!" >> $MYHOME/slubmagic.log;
		   ;;
    mail_fail)
                   ERRORMSG="Mailtext konnte nicht gesendet werden! (Codierungsfehler -> bitte die SLUB-Benutzerseite zu debug-zwecken speichern und Support benachrichtigen!)";
                   echo "$($DATE) [slubmagic] Mail kann nicht gesendet werden - Mailfehler?";
                 ;;
    no_GNUdate)
                    ERRORMSG="Ein GNU-kompatibles date ist Vorraussetzung fuer $SCRIPTNAME. Das date auf diesem Computer erfuellt die diese nicht! $SCRIPTNAME kann auf diesem Computer leider nicht istalliert werden.";
                   echo "$($DATE) [slubmagic] Weder date noch gdate ist installiert (wird benoetigt)!" >> $MYHOME/slubmagic.log;
		   ;;
    *)
                   ERRORMSG="Es ist ein unbekannter Fehler aufgetreten! Um meine Installation zu ueberpruefen, loggen Sie sich bitte auf $(uname -n) ein und testen sie meine Installation mit $SCRIPTNAME status! Besteht das Problem weiter, wenden Sie sich bitte unter $AUTORMAIL an den Autor des Sripts";
		     echo "$($DATE) [slubmagic] Fehler, keine Ahnung was kaputt ist!" >> $MYHOME/slubmagic.log;
		   ;;
  esac
  if [ "$SECOND" = "domail" ]; then
    echo $ERRORMSG | mailx -s '[slubmagic] FEHLER!' $EMAIL;
  fi
  if [ "$THIRD" = "domail" ]; then
    echo $ERRORMSG | mailx -s '[slubmagic] FEHLER!' $EMAIL;
  fi

  if [ "$SECOND" = "doexit" ]; then
    exit 1;
  fi
  if [ "$THIRD" = "doexit" ]; then
    exit 1;
  fi

} # ende error

function get_sec()
{    # Unixsekunden aus dem Datum Tag Monat Jahr ermitteln (zum Beispiel 29 Feb 2007)
# date funktioniert nicht ueberall gleich, weswegen ich die Umrechnung hier von Hand machen muss!

  local DOM=$1 # Tag des Monats
  local MON=$2 # Monat
  local YEA=$3 # Jahr

  local DSEC=''
  local MSEC=''
  local YSEC=''

  if [ "${DOM:0:1}" = "0" ]; then
    DOM=${DOM:1:1};
  fi

  ((DSEC=DOM*86400))

  case $MON in   # Monatssekunden errechnen
   Jan) ((MSEC=0))
        ;;
   Feb) ((MSEC=31*86400))
        ;;
   Mar) ((MSEC=31*86400+28*86400))
        ;;
   MÃ¤r) ((MSEC=31*86400+28*86400))
        ;;
   Apr) ((MSEC=2*31*86400+28*86400))
        ;;
   Mai) ((MSEC=2*31*86400+28*86400+1*30*86400))
        ;;
   May) ((MSEC=2*31*86400+28*86400+1*30*86400))
        ;;
   Jun) ((MSEC=3*31*86400+28*86400+1*30*86400))
        ;;
   Jul) ((MSEC=3*31*86400+28*86400+2*30*86400))
        ;;
   Aug) ((MSEC=4*31*86400+28*86400+2*30*86400))
        ;;
   Sep) ((MSEC=4*31*86400+28*86400+3*30*86400))
        ;;
   Okt) ((MSEC=5*31*86400+28*86400+3*30*86400))
        ;;
   Oct) ((MSEC=5*31*86400+28*86400+3*30*86400))
        ;;
   Nov) ((MSEC=5*31*86400+28*86400+4*30*86400))
        ;;
   Dez) ((MSEC=6*31*86400+28*86400+4*30*86400))
        ;;
   Dec) ((MSEC=6*31*86400+28*86400+4*30*86400))
        ;;
   *)   ((MSEC=0))
        ;;
  esac

  case $YEA in
   2007) ((YSEC=1167606000))
         ;;
   2008) ((YSEC=1199142000))
         ;;
   2009) ((YSEC=1230764400))
         ;;
   2010) ((YSEC=1262300400))
         ;;
   2011) ((YSEC=1293836400))
         ;;
   2099) ((YSEC=9999999999))
         ((MSEC=0))
         ((DSEC=0))
         ;;
   *)    ((YSEC=0))
         ((MSEC=0))
         ((DSEC=0))
         ;;
  esac

  ((TEMPDATE=YSEC+MSEC+DSEC))

} # end get_sec


get_token () {    # gueltige SessionID fuer den Slub-Login beschaffen -> Extraktion aus der Loginseite
  # fuer den korrekten Zugriff auf unseren slub-account benoetigen wir eine SessionID - hier Token genannt
  case "$WEBAPP" in
    lynx)    TOKEN=$(lynx -source 'http://webopac.slub-dresden.de/libero/WebOpac.cls?login=member' | grep '<meta http\-equiv.*refresh' | sed 's/.*TOKEN=//g' | sed 's/\&amp.*//g' );
             ;;
    *)       TOKEN=$(wget -qO - 'http://webopac.slub-dresden.de/libero/WebOpac.cls?login=member' | grep '<meta http\-equiv.*refresh' | sed 's/.*TOKEN=//g' | sed 's/\&amp.*//g' );
             ;;
  esac
  #echo "TOKEN: $TOKEN"; # Fuer DEBUGzwecke
} # end get_token


get_booklist () {    # Buecherliste laden und Erfolg pruefen -> haben wir die Liste oder eine Fehlermeldung? Sind Buecher in der Liste oder ist sie leer?
  case "$WEBAPP" in
    lynx)    lynx -source 'http://webopac.slub-dresden.de/libero/WebOpac.cls?MGWCHD=0&TOKEN='$TOKEN'&TOKENX='$TOKEN'&DATA=SLU&usercode=&VERSION=2&RSN=&BARCODE=&TOKENZ='$TOKEN'&ACTION=MEMLOGIN&usernum='$USERNUM'&password='$PASSWORT'&login=LOGIN' > $TMPPFAD/$ME.nutzerpage.html;
             ;;
    *)       wget -qO $TMPPFAD/$ME.nutzerpage.html 'http://webopac.slub-dresden.de/libero/WebOpac.cls?MGWCHD=0&TOKEN='$TOKEN'&TOKENX='$TOKEN'&DATA=SLU&usercode=&VERSION=2&RSN=&BARCODE=&TOKENZ='$TOKEN'&ACTION=MEMLOGIN&usernum='$USERNUM'&password='$PASSWORT'&login=LOGIN';
             ;;
  esac

  if [ -e $TMPPFAD/$ME.nutzerpage.html ]; then
    # Berechtigung setzen
    chmod 660 $TMPPFAD/$ME.nutzerpage.html;
    # ist es eine Systemmeldung?
    SYSTEMMELDUNG=$(cat $TMPPFAD/$ME.nutzerpage.html | grep Systemmeldung);
    if [[ -n $SYSTEMMELDUNG ]]; then
      return 1;
    else
      return 0;
    fi
  fi

}  # end get_booklist


appendbookfromto () {

  local FILE=$2;
  local FROM=$1;
  # Ablaufdatum th1_4
  cat $FROM | sed -ne '/headers\=.th1\_4.>/,1p;/headers\=.th1\_4.>/q' | sed -e 's/.*headers=.th1_4.>\ *//g;s/<\/td>//g' | tr -d '\r' | tr '\n' ' ' >> $FILE;
  # Buch-Barcode th1_1
  cat $FROM | sed -ne '/headers\=.th1\_1.>/,1p;/headers\=.th1\_1.>/q' | sed -e 's/.*headers=.th1\_1.>\ *//g;s/\ *<\/th>.*//g' | tr -d '\r' | tr '\n' ' ' >> $FILE;
  # Autor th1_3
  cat $FROM | sed -ne '/headers\=.th1\_3.>/,1p;/headers\=.th1\_3.>/q' | sed -e 's/.*headers=.th1\_3.>\ *//g;s/\ *<\/td>.*//g' | tr -d '\r' | tr '\n' ' ' >> $FILE;
  # Titel th1_2
  printf '"' >> $FILE;
  cat $FROM | sed -ne '/headers\=.th1\_2.>/,1p;/headers\=.th1\_2.>/q' | sed -e 's/.*headers=.th1\_2.>\ *//g;s/.br.*ItemNotesLeader.*//g;s/<\/td>//g' | tr -d '\r' | tr -d '\n' >> $FILE;
  printf '"\n' >> $FILE;

} # end appendbookfromto


reASCII () { # bevor eine Mail gesendet werden kann, muss sicher gestellt sein, dass nur ASCII drin ist!

  local FROM=$1;

  cp $FROM $FROM.temp;
  cat $FROM.temp | sed -e 's/\Ã\¼/ue/g;s/\Ã\œ/UE/g;s/\Ã\¶/oe/g;s/\Ã\–/OE/g;s/\Ã\¤/ae/g;s/\Ã\„/AE/g;s/\Ã\Ÿ/sz/g;s/\Â\¬//g;' > $FROM;
  #iconv -f UTF8 -t ISO885915 -o $FROM $FROM.temp;
  rm $FROM.temp;

} # end reASCII


test_booklist () {    # Buecher ermitteln, die als naechstes ablaufen

  TAGE=$1
  ((BALD=HEUTE+(86400*TAGE)))
  ((GESTERN=HEUTE-(86400*TAGE)))
  EINTAG=0;

  # ------ Ablaufdatum der Benutzerkarte ------ MemStatMembCapt
  cat $TMPPFAD/$ME.nutzerpage.html | sed -e '1,/MemStatMembCapt.>/d;/<\/fieldset>/,3000d' > $TMPPFAD/$ME.temp.html;
#  cat $TMPPFAD/$ME.nutzerpage.html | sed -ne '/MemStatMembCapt/,1000p' > $TMPPFAD/$ME.temp.html;
  echo "Hallo, hier ist slubmagic!" > $TMPPFAD/$ME.slubmagicmail.txt;
  printf "Heute ist der $($DATE +'%d %b %Y'). " >> $TMPPFAD/$ME.slubmagicmail.txt;
  printf "Ablaufdatum der Benutzerkarte: $(cat $TMPPFAD/$ME.temp.html | sed -ne '/MemStatMembDet.>Ablau/,1p' | sed -e 's/.*MemStatMembDet.>.*\&nbsp\;\ *//g;s/<\/div>.*//g')\n" >> $TMPPFAD/$ME.slubmagicmail.txt;
  echo "------------------------------------------------------------------------"  >> $TMPPFAD/$ME.slubmagicmail.txt;
  # ------ Ausgeliehene Medien ------ MemStatLoanCapt
  cat $TMPPFAD/$ME.nutzerpage.html | sed -e '1,/MemStatLoanCapt.>/d;1,/<\/thead>/d;/<\/table>/,3000d' > $TMPPFAD/$ME.temp.html;
  DoAppend="0";
  echo "Folgende Buecher laufen demnaechst ab:" > $TMPPFAD/$ME.slubmagictemp.txt;
  while [[ "$(cat $TMPPFAD/$ME.temp.html | wc -l)" -gt "4" ]]; do
    ABLAUFDAT=$( cat $TMPPFAD/$ME.temp.html | sed -ne '/headers\=.th1\_4.>/,1p;/headers\=.th1\_4.>/q' | sed -e 's/.*headers=.th1_4.>\ *//g;s/<\/td>//g' | tr -d '\r' | tr -d '\n'); #Unglaublich Wichtig: Carriage Return (\r) unbedingt entfernen!!!
    get_sec $ABLAUFDAT;
    ABLAUF=$TEMPDATE;
    if [ -z $ABLAUF ]; then ABLAUF=9999999999; fi
    if [[ $ABLAUF -le $BALD ]]; then
      appendbookfromto $TMPPFAD/$ME.temp.html $TMPPFAD/$ME.slubmagictemp.txt;
      if [[ $ABLAUF -eq $HEUTE ]]; then EINTAG=1; fi # laufen heute Buecher ab?
      DOMAIL="1"; DoAppend="1";
    fi
    cp $TMPPFAD/$ME.temp.html $TMPPFAD/$ME.temp2.html;
    cat $TMPPFAD/$ME.temp2.html | sed -e '1,/<\/tr>/d' > $TMPPFAD/$ME.temp.html;
    rm $TMPPFAD/$ME.temp2.html;
    #cat $TMPPFAD/$ME.slubmagictemp.txt;
  done

  echo "------------------------------------------------------------------------" >> $TMPPFAD/$ME.slubmagictemp.txt;
  if [[ $DoAppend -eq "1" ]]; then cat $TMPPFAD/$ME.slubmagictemp.txt >> $TMPPFAD/$ME.slubmagicmail.txt; fi

#  # ------ Vorbestellte Medien ------ MemStatLoanCapt (bereit liegende Buecher laufen im Jahr 2099 ab
#  cat $TMPPFAD/$ME.nutzerpage.html | sed -e '1,/MemStatLoanCapt/d;/<\/table>/,3000d' | sed -e '1,7d;' > $TMPPFAD/$ME.temp.html;
#  DoAppend="0";
#  echo "Folgende Vorbestellungen liegen bereit:" > $TMPPFAD/$ME.slubmagictemp.txt;
#  while [[ "$(cat $TMPPFAD/$ME.temp.html | wc -l)" -gt "4" ]]; do
#    ABLAUFDAT=$( cat $TMPPFAD/$ME.temp.html | sed -ne '/MemStatLoanDue\"*> /p;/MemStatLoanDue\"*> /q' | sed -e 's/.*Due\"*>\ //g;s/<\/td>.*//g'  | tr '\r' ' ' | tr '\n' ' '); #Unglaublich Wichtig: Carriage Return (\r) unbedingt entfernen!!!
#    get_sec $ABLAUFDAT;
#    ABLAUF=$TEMPDATE;
#    if [ -z $ABLAUF ]; then
#      ABLAUF=9999999999;
#      # Ablaufdatum MemStatLoanDue
#      cat $TMPPFAD/$ME.temp.html | sed -ne '/.*MemStatLoanDue\"*>/p;/MemStatLoanDue\"*>/q' | sed -e 's/.*MemStatLoanDue\"*>//g;s/\ *<\/td>.*//g' >> $TMPPFAD/$ME.slubmagictemp.txt;
#      # Buch-Barcode MemStatLoanBarc
#      cat $TMPPFAD/$ME.temp.html | sed -ne '/.*MemStatLoanBarc\"*>/p;/MemStatLoanBarc\"*>/q' | sed -e 's/.*MemStatLoanBarc\"*>//g;s/\ *<\/td>.*//g' >> $TMPPFAD/$ME.slubmagictemp.txt;
#      # Autor MemStatLoanAut
#      cat $TMPPFAD/$ME.temp.html | sed -ne '/.*MemStatLoanAut\"*>/p;/MemStatLoanAut\"*>/q' | sed -e 's/.*MemStatLoanAut\"*>//g;s/\ *<\/td>.*//g' | tr '\n' ': ' >> $TMPPFAD/$ME.slubmagictemp.txt;
#      # Titel MemStatLoanTit
#      cat $TMPPFAD/$ME.temp.html | sed -ne '/.*MemStatLoanTit\"*>/p;/MemStatLoanTit\"*>/q' | sed -e 's/.*MemStatLoanTit\"*>//g;s/\ *<\/td>.*//g' >> $TMPPFAD/$ME.slubmagictemp.txt;
#      DOMAIL="1"; DoAppend="1";
#    fi
#    cp $TMPPFAD/$ME.temp.html $TMPPFAD/$ME.temp2.html;
#    cat $TMPPFAD/$ME.temp2.html | sed -e '1,/<\/tr>/d' > $TMPPFAD/$ME.temp.html;  # Loeschen bis zum nächsten </tr>
#    rm $TMPPFAD/$ME.temp2.html;
#  done
#  echo "------------------------------------------------------------------------" >> $TMPPFAD/$ME.slubmagictemp.txt;
#  if [[ $DoAppend -eq "1" ]]; then cat $TMPPFAD/$ME.slubmagictemp.txt >> $TMPPFAD/$ME.slubmagicmail.txt; fi

  # ------ Systemnachrichten ------ SysMsgShortTable
#  cat $TMPPFAD/$ME.nutzerpage.html | sed -e '1,/SysMsgShortTable/d;/<\/table>/,3000d' | sed -e '1,2d;' > $TMPPFAD/$ME.temp.html;
#  DoAppend="0";
#  echo "Systemnachrichten:" > $TMPPFAD/$ME.slubmagictemp.txt;
#  while [[ "$(cat $TMPPFAD/$ME.temp.html | wc -l)" -gt "2" ]]; do
#    ABLAUFDAT=$( cat $TMPPFAD/$ME.temp.html | sed -ne '/.*SysMsgShortTableContext1.>/p;/SysMsgShortTableContext1.>/q' | sed -e 's/.*SysMsgShortTableContext1.>\ //g;s/.......<\/td>.*//g'  | tr '\r' ' ' | tr '\n' ' '); #Unglaublich Wichtig: Carriage Return (\r) unbedingt entfernen!!!
#    get_sec $ABLAUFDAT;
#    ABLAUF=$TEMPDATE;
#    if [[ $ABLAUF -eq $HEUTE ]] || [[ $ABLAUF -eq $GESTERN ]]; then
#      # SysMsgShortTableContext1
#      cat $TMPPFAD/$ME.temp.html | sed -ne '/.*SysMsgShortTableContext1.>/p;/SysMsgShortTableContext1.>/q' | sed -e 's/.*SysMsgShortTableContext1.>//g;s/\ *<\/td>.*//g' >> $TMPPFAD/$ME.slubmagictemp.txt;
#      # SysMsgShortTableContext2
#      cat $TMPPFAD/$ME.temp.html | sed -ne '/.*SysMsgShortTableContext2.>/p;/SysMsgShortTableContext2.>/q' | sed -e 's/.*SysMsgShortTableContext2.>//g;s/\ *<\/td>.*//g' | sed -e 's/<br>/\; /g' >> $TMPPFAD/$ME.slubmagictemp.txt;
#      DOMAIL="1"; DoAppend="1";
#    fi
#    cp $TMPPFAD/$ME.temp.html $TMPPFAD/$ME.temp2.html;
#    cat $TMPPFAD/$ME.temp2.html | sed -e '1,/<\/tr>/d' > $TMPPFAD/$ME.temp.html;  # Loeschen bis zum nächsten </tr>
#    rm $TMPPFAD/$ME.temp2.html;
#  done

#  echo "------------------------------------------------------------------------" >> $TMPPFAD/$ME.slubmagictemp.txt;
#  if [[ $DoAppend -eq "1" ]]; then cat $TMPPFAD/$ME.slubmagictemp.txt >> $TMPPFAD/$ME.slubmagicmail.txt; fi
#
  if [[ $DOMAIL -eq "1" ]]; then
    # ------ Gebuehrenstatus ------ Totalsrow
    cat $TMPPFAD/$ME.nutzerpage.html | sed -e '1,/TotalsRow/d;/<\/table>/,3000d' > $TMPPFAD/$ME.temp.html;
    printf "Offener Gesamtbetrag: " >> $TMPPFAD/$ME.slubmagicmail.txt;
    # outstanding th14_8
    cat $TMPPFAD/$ME.temp.html | sed -ne '/headers\=.th14\_8.>/,1p;/headers\=.th14\_8.>/q' | sed -e 's/.*headers=.th14\_8.>\ *//g;s/\ *<\/td>.*//g' >> $TMPPFAD/$ME.slubmagicmail.txt;
  fi

  if [[ $EINTAG -gt "0" ]]; then
    #set_cronurgent;
    echo "------------------------------------------------------------------------" >> $TMPPFAD/$ME.slubmagicmail.txt;
    echo "HEUTE LAUFEN BUECHER AB!" >> $TMPPFAD/$ME.slubmagicmail.txt;
#    echo "HEUTE LAUFEN BUECHER AB! Sollten die Buecher nicht verlaengert oder" >> $TMPPFAD/$ME.slubmagicmail.txt;
#    echo "zurueckgegeben werden, versuche ich sie selbst zu verlaengern." >> $TMPPFAD/$ME.slubmagicmail.txt;
  fi # heute laufen Buecher ab -> autoverlaengern
  echo "" >> $TMPPFAD/$ME.slubmagicmail.txt;
  echo "Ende" >> $TMPPFAD/$ME.slubmagicmail.txt;

  if [ -e $TMPPFAD/$ME.slubmagictemp.txt ]; then rm $TMPPFAD/$ME.slubmagictemp.txt; fi
  if [ -e $TMPPFAD/$ME.temp.html ]; then rm $TMPPFAD/$ME.temp.html; fi
} # end test_booklist


test_dateprog () {
  TESTDATE=$(gdate +'%s' 2> /dev/null); # Aktuelles Datum in Unixsekunden
  if [ $? != "0" ]; then
    TESTDATE=$(date +'%s' 2> /dev/null);
    if  [ $? != "0" ]; then
      error no_GNUdate;
      echo $ERRORMSG;
      exit 1;
    else
      DATE="date";
    fi
  else
    DATE="gdate";
  fi

} # end test_dateprog


test_webapp () {     # nachschauen, ob wir wget haben, oder was wir sonst verwenden koennen

  wget -V 2>&1> /dev/null;
  if  [ $? != "0" ]; then
    lynx -version 2>&1> /dev/null;
    if  [ $? != "0" ]; then
      echo "Leider sind weder lynx noch wget installiert. Mindestens eines von beiden muss vorhanden sein, damit $SCRIPTNAME funktioniert! Sorry."
      exit 1;
    else
      WEBAPP="lynx";
    fi
  else
    WEBAPP="wget";
  fi

} # end test_webapp


set_crontab () {    # Cronjob zu zufaelliger Zeit erzeugen, andere cronjobs werden beachtet

# Da slubmagic evtl. mehrfach auf den Servern der TU Dresden installiert wird, muss dafuer Sorge getragen werden
# dass es nicht von allen Nutzern gleichzeitig ausgefuehrt wird: Eine Pseudorandom-Zeit muss fuer jeden Nutzer
# erzeugt werden. In slubmagic basteln wir sie uns aus der aktuellen Zeit.

  # Alte CRONjobs loeschen
  crontab -l 2>&1> /dev/null;

  if [ "$?" = "0" ]; then
    CRONTABLINES=$(crontab -l | sed -e '/^#.*/d' | sed -e '/#\ slubmagic$/!d' | wc -l);
  fi
  if [ "$CRONTABLINES" -gt "0" ]; then
    crontab -l | sed -e '/^#.*/d' | sed -e '/#\ slubmagic$/d' > $TMPPFAD/$ME.slubmagiccrontabtemp.txt;
    crontab $TMPPFAD/$ME.slubmagiccrontabtemp.txt;
    rm $TMPPFAD/$ME.slubmagiccrontabtemp.txt;
  fi

  JETZT=$($DATE +%s); # aktuelle Zeit

  CRONMINUTE=${JETZT:8:2}
  CRONMINUTEW=${JETZT:7:2}
  CRONSTUNDE=${JETZT:7:1}
  if [[ $CRONMINUTE -gt "59" ]]; then
    (( CRONMINUTE=CRONMINUTE-40 ))
    if [[ $CRONMINUTE -lt "10" ]]; then
      CRONMINUTE=${JETZT:9:1}
    fi
  fi
  if [[ $CRONMINUTEW -gt "59" ]]; then
    (( CRONMINUTEW=CRONMINUTEW-40 ))
    if [[ $CRONMINUTEW -lt "10" ]]; then
      CRONMINUTEW=${JETZT:8:1}
    fi
  fi
  if [[ "$CRONSTUNDE" -gt "5" ]]; then
    (( CRONSTUNDE=CRONSTUNDE-5 ))
  fi

  CRONTABLINES=$(crontab -l | sed -e '/^#.*/d' | wc -l);
  if [[ $CRONTABLINES -gt "0" ]]; then
    crontab -l | sed -e '/^#.*/d' > $TMPPFAD/$ME.slubmagiccrontabtemp.txt;
  fi

  echo "$CRONMINUTE $CRONSTUNDE  * * *  $MYHOME/$SCRIPTNAME daily  # slubmagic" >> $TMPPFAD/$ME.slubmagiccrontabtemp.txt;
  if [ "$WEEKLY" = "j" ]; then
    echo "$CRONMINUTEW $CRONSTUNDE  * * 6  $MYHOME/$SCRIPTNAME weekly  # slubmagic" >> $TMPPFAD/$ME.slubmagiccrontabtemp.txt;
  fi

  crontab $TMPPFAD/$ME.slubmagiccrontabtemp.txt 1> /dev/null;
  if [ $? != "0" ]; then
    error no_cronjob;
    echo "$ERRORMSG";
  fi
  rm $TMPPFAD/$ME.slubmagiccrontabtemp.txt;

}  # end set_crontab


set_cronurgent () {    # Cronjob zu zufaelliger Zeit erzeugen, andere cronjobs werden beachtet

# set_cronurgent erzeugt den cronjob um faellige Buecher rechtzeitig zu verlaengern, sollte man auch die
# letzte Chance dazu verpasst haben. Es wird ein Cronjob erzeugt, der slubmagic zwischen 23:00 und 24:00 Uhr
# aufruft und die am naechsten Tag faelligen Buecher verlaengern laesst.
# Diese Prozedur funktioniert mit den gleichen Mechanismen wie set_crontab.

  # Alte CRONjobs loeschen
  crontab -l 2>&1> /dev/null;
  if [ "$?" = "0" ]; then
    CRONTABLINES=$(crontab -l | sed -e '/^#.*/d' | sed -e '/#\ sluburgent$/!d' | wc -l);
  fi
  if [ "$CRONTABLINES" -gt "0" ]; then
    crontab -l | sed -e '/^#.*/d' | sed -e '/#\ sluburgent$/d' > $TMPPFAD/$ME.slubmagiccrontabtemp.txt;
    crontab $TMPPFAD/$ME.slubmagiccrontabtemp.txt;
    rm $TMPPFAD/$ME.slubmagiccrontabtemp.txt;
  fi

  JETZT=$($DATE +%s); # aktuelle Zeit

  CRONMINUTE=${JETZT:8:2}
  if [[ $CRONMINUTE -gt "59" ]]; then
    (( CRONMINUTE=CRONMINUTE-40 ))
    if [[ $CRONMINUTE -lt "10" ]]; then
      CRONMINUTE=${JETZT:9:1}
    fi
  fi

  CRONTABLINES=$(crontab -l | sed -e '/^#.*/d' | wc -l);
  if [[ $CRONTABLINES -gt "0" ]]; then
    crontab -l | sed -e '/^#.*/d' > $TMPPFAD/$ME.slubmagiccrontabtemp.txt;
  fi

  echo "$CRONMINUTE 23  * * *  $MYHOME/$SCRIPTNAME urgent  # sluburgent" >> $TMPPFAD/$ME.slubmagiccrontabtemp.txt

  crontab $TMPPFAD/$ME.slubmagiccrontabtemp.txt 1> /dev/null;
  echo "$($DATE) [slubmagic] Last minute Verlaengerung gesetzt" >> $MYHOME/slubmagic.log;
  if [ $? != "0" ]; then
    error no_cronjob;
    echo "$ERRORMSG";
  fi
  rm $TMPPFAD/$ME.slubmagiccrontabtemp.txt;

}  # end set_cronurgent


test_vers () {     # pruefen, ob eine neue Version von Slubmagic verfuegbar ist

  case "$WEBAPP" in
    lynx)    lynx -source 'http://wwwpub.zih.tu-dresden.de/~stwittig/slubmagic/currvers' > $TMPPFAD/$ME.currvers;
             ;;
    *)       wget -qO $TMPPFAD/$ME.currvers 'http://wwwpub.zih.tu-dresden.de/~stwittig/slubmagic/currvers';
             ;;
  esac
  NEWVERS=$(cat $TMPPFAD/$ME.currvers | sed -e '1q');
  UPDATEDAY=$(cat $TMPPFAD/$ME.currvers | sed -ne '2p');
  if [[ $UPDATEDAY -ge $HEUTE ]]; then
    if [[ $VERS -lt $NEWVERS ]]; then
      cp $TMPPFAD/$ME.currvers $TMPPFAD/$ME.currvers2;
      cat $TMPPFAD/$ME.currvers2 | sed -ne '3,20p' > $TMPPFAD/$ME.currvers;
      rm $TMPPFAD/$ME.currvers2;
      echo "Aktuell ist Slubmagic in der Version $VERSION installiert." >> $TMPPFAD/$ME.currvers;
      return 1;
      echo "$($DATE) [slubmagic] es gibt ein Update" >> $MYHOME/slubmagic.log;
    else
      return 0;
    fi
  fi
}      # end test_vers


### Hauptfunktionen -----------------------------------------------------------------------------


status () {     # cronjob installiert? Login Slub funktioniert? Welche Buecher laufen aus?

  get_sec $HEUTE;
  HEUTE=$TEMPDATE;

  echo "Hallo! Ich bin $SCRIPTNAME."
  echo "Mein Status ist:";

  # existiert der cronjob?
  CRONTABLINES=$(crontab -l | sed -e '/^#.*/d' | sed -e '/#\ slubmagic$/!d' | wc -l);
  case "$CRONTABLINES" in
    0)
         echo "- Mein CRONjob ist NICHT installiert!";
	 ;;
    1)
         echo "* Mein CRONjob ist installiert.";
	 ;;
    *)   echo "* Meine CRONjobs sind installiert.";
         ;;
  esac

  get_token;      # SessionID beschaffen
  if [ -z "$TOKEN" ]; then
    echo "- Ich kann die Seiten der Slub NICHT erreichen!";
  else
    echo "* Ich kann die Seiten der Slub erreichen.";
  fi

  get_booklist;      # Buecherlist runterladen, konnte ich mich bei der slub anmelden?
  RET=$?;
  if [ "$RET" = "0" ]; then  # konnte ich die Buecherliste herunterladen?
    echo "* Ich kann die Slub-Benutzerseite herunterladen.";
  else
    echo "- Ich kann die Slub-Benutzerseite NICHT herunterladen!";
    echo "  Entweder sind Ihre Nutzerdaten nicht korrekt oder Ihr Konto ist gesperrt!";
    error no_npage doexit;
  fi

  test_booklist $ALARMTAGE;   # nach ablaufenden Buechern suchen
  echo "";
  if [ "$DOMAIL" != "0" ]; then
    cat $TMPPFAD/$ME.slubmagicmail.txt;
  else
    echo "Hurra, keine ablaufenden Buecher!";
    echo "";
    ((BALD=HEUTE+(8640000)))
    cat $TMPPFAD/$ME.nutzerpage.html | sed -e '1,/MemStatLoanCapt.>/d;1,/<\/thead>/d;/<\/table>/,3000d' > $TMPPFAD/$ME.temp.html;
    echo "Sie haben folgende Buecher ausgeliehen:" > $TMPPFAD/$ME.slubmagictemp.txt;
    while [[ "$(cat $TMPPFAD/$ME.temp.html | wc -l)" -gt "4" ]]; do
      appendbookfromto $TMPPFAD/$ME.temp.html $TMPPFAD/$ME.slubmagictemp.txt;
      cp $TMPPFAD/$ME.temp.html $TMPPFAD/$ME.temp2.html;
      cat $TMPPFAD/$ME.temp2.html | sed -e '1,/<\/tr>/d' > $TMPPFAD/$ME.temp.html;
      rm $TMPPFAD/$ME.temp2.html;
    done
    if [[ "$(cat $TMPPFAD/$ME.slubmagictemp.txt | wc -l)" -gt "1" ]]; then
      reASCII $TMPPFAD/$ME.slubmagictemp.txt;
      cat $TMPPFAD/$ME.slubmagictemp.txt;
    else
      echo "Sie haben keine Buecher ausgeliehen.";
    fi
  fi
  if [ "$AUTOVERS" = "j" ]; then
    test_vers;
    if [ $? = "1" ]; then cat $TMPPFAD/$ME.currvers; echo ""; fi
  fi

  if [ -e $TMPPFAD/$ME.temp.html ]; then rm $TMPPFAD/$ME.temp.html; fi
  if [ -e $TMPPFAD/$ME.slubmagictemp.txt ]; then rm $TMPPFAD/$ME.slubmagictemp.txt; fi
  if [ -e $TMPPFAD/$ME.slubmagicmail.txt ]; then rm $TMPPFAD/$ME.slubmagicmail.txt; fi
  if [ -e $TMPPFAD/$ME.currvers ]; then rm $TMPPFAD/$ME.currvers; fi
  if [ -e $TMPPFAD/$ME.nutzerpage.html ]; then rm $TMPPFAD/$ME.nutzerpage.html; fi # Heruntergeladene Slub-Nutzerseite loeschen

} # end status


install () {    # Email-Adresse und Slub-Account abfragen, cronjob einrichten.

  get_sec $HEUTE;
  HEUTE=$TEMPDATE;

  echo "Alle benutzerspezifischen Angaben werden allein von $SCRIPTNAME verwendet und nicht an dritte Weitergegeben!";
  echo "";
  echo "Eingaben, die bereits einen Wert besitzen koennen einfach mit Enter bestaetigt werden!";

  # Emailadresse abfragen
  if [ -n "$EMAIL" ]; then
    echo "Bitte Ihre gueltige Email-Adresse angeben (derzeit $EMAIL):"
    read NEWEMAIL
    if [ -n "$NEWEMAIL" ]; then
      EMAIL=$(echo $NEWEMAIL | sed -e 's/\@/\\\@/g');
    fi
  else
    while [ -z "$EMAIL" ]; do
      echo "Bitte Ihre gueltige Email-Adresse angeben:";
      read EMAIL;
    done
  fi

  # Slub-Usernummer fragen
  if [ -n "$USERNUM" ]; then
    echo "Bitte Ihre Slub-Benutzernummer angeben (derzeit $USERNUM):";
    read NEWUSERNUM;
    if [ -n "$NEWUSERNUM" ]; then
      USERNUM=$NEWUSERNUM;
    fi
  else
    while [ -z "$USERNUM" ]; do
      echo "Bitte Ihre Slub-Benutzernummer angeben:";
      read USERNUM;
    done
  fi

  # Slub Passwort
  if [ -n "$PASSWORT" ]; then
    echo "Bitte Ihr Slub-Passwort angeben (derzeit $PASSWORT):"
    read NEWPASSWORT
    if [ -n "$NEWPASSWORT" ]; then
      PASSWORT=$NEWPASSWORT;
    fi
  else
    while [ -z "$PASSWORT" ]; do
      echo "Bitte Ihr Slub-Passwort angeben:";
      read PASSWORT;
    done
  fi

  # Wieviel Tage im vorraus benachrichtigen?
  if [ -n "$ALARMTAGE" ]; then
    NEWALARMTAGE=$ALARMTAGE; ALARMTAGE="";
    while [ -z $(echo $ALARMTAGE | sed -ne '/[1-4]/p' ) ]; do
      echo "Wieviele Tage vor Ablauf eines Buches moechten Sie informiert werden? (1|2|3|4) (derzeit $NEWALARMTAGE):";
      read ALARMTAGE;
      if [ -z "$ALARMTAGE" ]; then
        ALARMTAGE=$NEWALARMTAGE;
      else
        ALARMTAGE=$(echo $ALARMTAGE | sed -ne '/[1-4]/p' );
      fi
    done
  else
    while [ -z "$ALARMTAGE" ] | [ -z $(echo $ALARMTAGE | sed -ne '/[1-4]/p' ) ]; do
      echo "Wieviele Tage vor Ablauf eines Buches moechten Sie informiert werden? (1|2|3|4):";
      read ALARMTAGE;
    done
  fi

  # Wochenzusammenfassung?
  if [ -n "$WEEKLY" ]; then
    NEWWEEKLY=$WEEKLY; WEEKLY="";
    while [ -z $(echo $WEEKLY | sed -ne '/[j,J,y,Y,n,N]/p' ) ]; do
      echo "Moechten Sie eine woechentliche Zusammenfassung erhalten? (j/n) (derzeit $NEWWEEKLY):";
      read WEEKLY;
      if [ -z "$WEEKLY" ]; then
        WEEKLY=$NEWWEEKLY;
      else
        WEEKLY=$(echo $WEEKLY | sed -ne '/[j,J,y,Y,n,N]/p');
      fi
    done
  else
    while [ -z "$WEEKLY" ] | [ -z $(echo $WEEKLY | sed -ne '/[j,J,y,Y,n,N]/p') ]; do
      echo "Moechten Sie eine woechentliche Vorschau erhalten? (j/n):";
      read WEEKLY;
    done
  fi
  # Das Konstrukt " ! -z" ist notwendig, da -n auch einen Zeilenumbruch beruecksichtigt
  if [ ! -z $(echo $WEEKLY | sed -ne '/[J,j,y,Y]/p') ]; then WEEKLY="j"; fi
  if [ ! -z $(echo $WEEKLY | sed -ne '/[N,n]/p') ]; then WEEKLY="n"; fi

  # Automatische Versionskontrolle
  if [ -n "$AUTOVERS" ]; then
    NEWAUTOVERS=$AUTOVERS; AUTOVERS="";
    while [ -z $(echo $AUTOVERS | sed -ne '/[j,J,y,Y,n,N]/p' ) ]; do
      echo "Moechten Sie, dass $SCRIPT Sie automatisch ueber neue Versionen informiert? (j/n) (derzeit $NEWAUTOVERS):";
      read AUTOVERS;
      if [ -z "$AUTOVERS" ]; then
        AUTOVERS=$NEWAUTOVERS;
      else
        AUTOVERS=$(echo $AUTOVERS | sed -ne '/[j,J,y,Y,n,N]/p');
      fi
    done
  else
    while [ -z "$AUTOVERS" ] | [ -z $(echo $AUTOVERS | sed -ne '/[j,J,y,Y,n,N]/p') ]; do
      echo "Moechten Sie, dass $SCRIPT Sie automatisch ueber neue Versionen informiert? (j/n)";
      read AUTOVERS;
    done
  fi
  # Das Konstrukt " ! -z" ist notwendig, da -n auch einen Zeilenumbruch beruecksichtigt
  if [ ! -z $(echo $AUTOVERS | sed -ne '/[J,j,y,Y]/p') ]; then AUTOVERS="j"; fi
  if [ ! -z $(echo $AUTOVERS | sed -ne '/[N,n]/p') ]; then AUTOVERS="n"; fi

  set_crontab;
  if [[ -f $USERDATAFILE ]]; then
    cp $USERDATAFILE $USERDATAFILE.bak;
    cat $USERDATAFILE.bak | sed -e s/.*\#\ gueltige\ Email-Adresse/EMAIL\=\'$EMAIL\'\;\ #\ gueltige\ Email-Adresse/g | sed -e s/.*\#\ Slub-Benutzernummer/USERNUM\=\'$USERNUM\'\;\ #\ Slub-Benutzernummer/g | sed -e s/.*\#\ Slub-Passwort/PASSWORT\=\'$PASSWORT\'\;\ #\ Slub-Passwort/g  | sed -e s/.*\#\ Alarmabstand/ALARMTAGE\=\'$ALARMTAGE\'\;\ #\ Alarmabstand/g | sed -e s/.*\#\ woechentlich/WEEKLY\=\'$WEEKLY\'\;\ #\ woechentlich/g | sed -e  s/.*\#\ Autoversionskontrolle/AUTOVERS\=\'$AUTOVERS\'\;\ #\ Autoversionskontrolle/g | sed -e  s/.*\#\ Datumsprogramm/DATE\=\'$DATE\'\;\ #\ Datumsprogramm/g | sed -e s/.*\#\ Webapplikation/WEBAPP\=\'$WEBAPP\'\;\ \#\ Webapplikation/g > $USERDATAFILE;
    rm $USERDATAFILE.bak;
  fi

  echo "Die Installation von $SCRIPTNAME ist abgeschlossen.";
  echo "Zur UEberpruefung der Installation wird jetzt der Status des Scripts aufgerufen";
  echo "Um es selbst zu ueberpruefen bitte   ./$SCRIPTNAME status   aufrufen!";
  ./$SCRIPTNAME status;
  exit 0;

} # end install


uninstall () {    # slubmagic Cronjobs entfernen

  #Nutzerdaten loeschen
  while [ -z "$DELUD" ] | [ -z $(echo $DELUD | sed -ne '/[j,J,y,Y,n,N]/p') ]; do
    echo "Sollen die Nutzerdaten geloescht werden? (j/n):";
    read DELUD;
  done
  if [ ! -z $(echo $DELUD | sed -ne '/[J,j,y,Y]/p') ]; then rm $USERDATAFILE; fi

  #cronjob loeschen
  CRONTABLINES=$(crontab -l | sed -e '/^#.*/d' | sed -e '/#\ slubmagic$/!d' | wc -l);
  if [ "$CRONTABLINES" -gt "0" ]; then
    crontab -l | sed -e '/^#.*/d' | sed -e '/#\ slubmagic$/d' | sed -e '/#\ sluburgent$/d' > $TMPPFAD/$ME.slubmagiccrontabtemp.txt;
    crontab $TMPPFAD/$ME.slubmagiccrontabtemp.txt;
    rm $TMPPFAD/$ME.slubmagiccrontabtemp.txt;
  fi
  echo "Es wurden $CRONTABLINES CRONjobs fuer slubmagic geloescht.";
  echo "Das Script $SCRIPTNAME kann jetzt geloescht werden.";

} # end uninstall


daily () {    # taegliches Ausfuehren von slubmagic durch cron

  get_sec $HEUTE;
  HEUTE=$TEMPDATE;

  if [ "$AUTOVERS" = "j" ]; then
    test_vers;
    if [ $? = "1" ]; then mailx -s '[slubmagic] UPDATE!' $EMAIL < $TMPPFAD/$ME.currvers; fi
  fi

  get_token;                  # SessionID beschaffen
  if [ -z "$TOKEN" ]; then    # kann ich mich bei der slub anmelden?
    error empty_token domail doexit;
  fi

  get_booklist;                        # Buecherlist runterladen
  RET=$?;
  if [ "$RET" = "1" ]; then
    error empty_npage domail doexit;
  fi

  if [ ! -e $TMPPFAD/$ME.nutzerpage.html ]; then    # kann ich die Buecherliste herunterladen?
    error no_npage domail doexit;
  fi

  test_booklist $ALARMTAGE;   # nach ablaufenden Buechern suchen

  if [ "$DOMAIL" != "0" ]; then
    reASCII $TMPPFAD/$ME.slubmagicmail.txt;
    mailx -s '[slubmagic] Es laufen Buecher ab!' $EMAIL < $TMPPFAD/$ME.slubmagicmail.txt;
    if [ $? != "0" ]; then error mail_fail domail; fi
  else
    echo "uname -a: $(uname -a)" > $TMPPFAD/$ME.slubmagicmail.txt;
    cat $TMPPFAD/$ME.nutzerpage.html | sed -e '1,/MemStatLoanCapt.>/d;1,/<\/thead>/d;/<\/table>/,3000d' > $TMPPFAD/$ME.temp.html;
    echo "Sie haben folgende Buecher ausgeliehen:" > $TMPPFAD/$ME.slubmagictemp.txt;
    while [[ "$(cat $TMPPFAD/$ME.temp.html | wc -l)" -gt "4" ]]; do
      appendbookfromto $TMPPFAD/$ME.temp.html $TMPPFAD/$ME.slubmagictemp.txt;
      cp $TMPPFAD/$ME.temp.html $TMPPFAD/$ME.temp2.html;
      cat $TMPPFAD/$ME.temp2.html | sed -e '1,/<\/tr>/d' > $TMPPFAD/$ME.temp.html;
      rm $TMPPFAD/$ME.temp2.html;
    done
    if [[ "$(cat $TMPPFAD/$ME.slubmagictemp.txt | wc -l)" -gt "1" ]]; then
      cat $TMPPFAD/$ME.slubmagictemp.txt >> $TMPPFAD/$ME.slubmagicmail.txt;
    else
      echo "Sie haben keine Buecher ausgeliehen." >> $TMPPFAD/$ME.slubmagicmail.txt;
    fi
    echo "Ende" >> $TMPPFAD/$ME.slubmagicmail.txt;
    reASCII $TMPPFAD/$ME.slubmagicmail.txt;
    mailx -s '[slubmagic] Hurra, keine ablaufenden Buecher!' $EMAIL < $TMPPFAD/$ME.slubmagicmail.txt;
    if [ $? != "0" ]; then error mail_fail domail; fi
  fi

  if [ -e $TMPPFAD/$ME.slubmagicmail.txt ]; then rm $TMPPFAD/$ME.slubmagicmail.txt; fi
  if [ -e $TMPPFAD/$ME.currvers ]; then rm $TMPPFAD/$ME.currvers; fi
  if [ -e $TMPPFAD/$ME.nutzerpage.html ]; then rm $TMPPFAD/$ME.nutzerpage.html; fi # Heruntergeladene Slub-Nutzerseite loeschen

} # end daily


weekly () { # einmal woechentliches Ausfuehren von slubmagic durch cron

  get_sec $HEUTE;
  HEUTE=$TEMPDATE;

  get_token;                  # SessionID beschaffen
  if [ -z "$TOKEN" ]; then    # kann ich mich bei der slub anmelden?
    error empty_token domail doexit;
  fi

  get_booklist;                        # Buecherlist runterladen
  RET=$?;
  if [ "$RET" = "1" ]; then
    error empty_npage domail doexit;
  fi
  if [ ! -e $TMPPFAD/$ME.nutzerpage.html ]; then    # kann ich die Buecherliste herunterladen?
    error no_npage domail doexit;
  fi

  test_booklist "7";   # nach ablaufenden Buechern suchen

  if [ "$DOMAIL" != "0" ]; then
    reASCII $TMPPFAD/$ME.slubmagicmail.txt;
    mailx  -s '[slubmagic] Kommende Woche laufen Buecher ab!' $EMAIL < $TMPPFAD/$ME.slubmagicmail.txt;
    if [ $? != "0" ]; then error mail_fail domail; fi
  else
    echo "Heute ist der $($DATE +'%d. %b %Y'), es laufen naechste Woche keine Buecher ab." > $TMPPFAD/$ME.slubmagicmail.txt;
    echo "------------------------------------------------------------------------"  >> $TMPPFAD/$ME.slubmagicmail.txt;
    cat $TMPPFAD/$ME.nutzerpage.html | sed -e '1,/MemStatLoanCapt.>/d;1,/<\/thead>/d;/<\/table>/,3000d' > $TMPPFAD/$ME.temp.html;
    echo "Sie haben folgende Buecher ausgeliehen:" > $TMPPFAD/$ME.slubmagictemp.txt;
    while [[ "$(cat $TMPPFAD/$ME.temp.html | wc -l)" -gt "4" ]]; do
      appendbookfromto $TMPPFAD/$ME.temp.html $TMPPFAD/$ME.slubmagictemp.txt;
      cp $TMPPFAD/$ME.temp.html $TMPPFAD/$ME.temp2.html;
      cat $TMPPFAD/$ME.temp2.html | sed -e '1,/<\/tr>/d' > $TMPPFAD/$ME.temp.html;
      rm $TMPPFAD/$ME.temp2.html;
    done
    if [[ "$(cat $TMPPFAD/$ME.slubmagictemp.txt | wc -l)" -gt "1" ]]; then
      cat $TMPPFAD/$ME.slubmagictemp.txt >> $TMPPFAD/$ME.slubmagicmail.txt;
    else
      echo "Sie haben keine Buecher ausgeliehen." >> $TMPPFAD/$ME.slubmagicmail.txt;
    fi
    echo "Ende" >> $TMPPFAD/$ME.slubmagicmail.txt;
    reASCII $TMPPFAD/$ME.slubmagicmail.txt;
    mailx -s '[slubmagic] Ich lebe noch.' $EMAIL < $TMPPFAD/$ME.slubmagicmail.txt;
    if [ $? != "0" ]; then error mail_fail domail; fi
  fi

  if [ -e $TMPPFAD/$ME.temp.html ]; then rm $TMPPFAD/$ME.temp.html; fi
  if [ -e $TMPPFAD/$ME.slubmagictemp.txt ]; then rm $TMPPFAD/$ME.slubmagictemp.txt; fi
  if [ -e $TMPPFAD/$ME.slubmagicmail.txt ]; then rm $TMPPFAD/$ME.slubmagicmail.txt; fi
  if [ -e $TMPPFAD/$ME.nutzerpage.html ]; then rm $TMPPFAD/$ME.nutzerpage.html; fi # Heruntergeladene Slub-Nutzerseite loeschen

} # end weekly


debug () { # debugging

  HEUTE="02 Nov 2008"; echo $HEUTE;
  get_sec $HEUTE;
  HEUTE=$TEMPDATE;
  echo $HEUTE;

  cp ./Georg/webopac2.htm $TMPPFAD/$ME.nutzerpage.html;

  if [ ! -e $TMPPFAD/$ME.nutzerpage.html ]; then
    error no_npage domail doexit;
  fi

  test_booklist $ALARMTAGE;   # nach ablaufenden Buechern suchen

  if [ "$DOMAIL" != "0" ]; then
    reASCII $TMPPFAD/$ME.slubmagicmail.txt;
    mailx -s '[slubmagic] Es laufen Buecher ab!' $EMAIL < $TMPPFAD/$ME.slubmagicmail.txt;
    if [ $? != "0" ]; then error mail_fail domail; fi
    cat $TMPPFAD/$ME.slubmagicmail.txt;
  else
    echo "Heute ist der $($DATE +'%d. %b %Y'), es laufen naechste Woche keine Buecher ab." > $TMPPFAD/$ME.slubmagicmail.txt;
    echo "------------------------------------------------------------------------"  >> $TMPPFAD/$ME.slubmagicmail.txt;
    cat $TMPPFAD/$ME.nutzerpage.html | sed -e '1,/MemStatLoanCapt.>/d;1,/<\/thead>/d;/<\/table>/,3000d' > $TMPPFAD/$ME.temp.html;
    echo "Sie haben folgende Buecher ausgeliehen:" > $TMPPFAD/$ME.slubmagictemp.txt;
    while [[ "$(cat $TMPPFAD/$ME.temp.html | wc -l)" -gt "4" ]]; do
      appendbookfromto $TMPPFAD/$ME.temp.html $TMPPFAD/$ME.slubmagictemp.txt;
      cp $TMPPFAD/$ME.temp.html $TMPPFAD/$ME.temp2.html;
      cat $TMPPFAD/$ME.temp2.html | sed -e '1,/<\/tr>/d' > $TMPPFAD/$ME.temp.html;
      rm $TMPPFAD/$ME.temp2.html;
    done
    if [[ "$(cat $TMPPFAD/$ME.slubmagictemp.txt | wc -l)" -gt "1" ]]; then
      cat $TMPPFAD/$ME.slubmagictemp.txt >> $TMPPFAD/$ME.slubmagicmail.txt;
    else
      echo "Sie haben keine Buecher ausgeliehen." >> $TMPPFAD/$ME.slubmagicmail.txt;
    fi
    echo '[slubmagic] Hurra, keine ablaufenden Buecher!';
    reASCII $TMPPFAD/$ME.slubmagictemp.txt;
    cat $TMPPFAD/$ME.slubmagictemp.txt;
  fi

  if [ "$AUTOVERS" = "j" ]; then
    test_vers;
    if [ $? = "1" ]; then mailx -s '[slubmagic] UPDATE!' $EMAIL < $TMPPFAD/$ME.currvers; fi
  fi

  if [ -e $TMPPFAD/$ME.temp.html ]; then rm $TMPPFAD/$ME.temp.html; fi
  if [ -e $TMPPFAD/$ME.slubmagictemp.txt ]; then rm $TMPPFAD/$ME.slubmagictemp.txt; fi
  if [ -e $TMPPFAD/$ME.slubmagicmail.txt ]; then rm $TMPPFAD/$ME.slubmagicmail.txt; fi
  if [ -e $TMPPFAD/$ME.currvers ]; then rm $TMPPFAD/$ME.currvers; fi
  if [ -e $TMPPFAD/$ME.nutzerpage.html ]; then rm $TMPPFAD/$ME.nutzerpage.html; fi # Heruntergeladene Slub-Nutzerseite loeschen

} # ende debugging


urgent () { # automatisches Verlaengern faelliger Buecher durch cron

  get_sec $HEUTE;
  HEUTE=$TEMPDATE;

  get_token;                  # SessionID beschaffen
  echo $TOKEN;
  if [ -z "$TOKEN" ]; then    # kann ich mich bei der slub anmelden?
    error empty_token domail doexit;
  fi

  get_booklist;                        # Buecherlist runterladen
  RET=$?;
  if [ "$RET" = "1" ]; then
    error empty_npage domail doexit;
  fi
  if [ ! -e $TMPPFAD/$ME.nutzerpage.html ]; then    # kann ich die Buecherliste herunterladen?
    error no_npage domail doexit;
  fi

  ((BALD=HEUTE+86410))
  VERLAENGERN='';
  cat $TMPPFAD/$ME.nutzerpage.html | sed -e '1,/MemStatLoanCapt.>/d;1,/<\/thead>/d;/<\/table>/,3000d' > $TMPPFAD/$ME.temp.html;

  while [[ "$(cat $TMPPFAD/$ME.temp.html | wc -l)" -gt "4" ]]; do
    ABLAUFDAT=$( cat $TMPPFAD/$ME.temp.html | sed -ne '/headers\=.th1\_4.>/,1p;/headers\=.th1\_4.>/q' | sed -e 's/.*headers=.th1_4.>\ *//g;s/<\/td>//g' | tr '\r' ' ' | tr '\n' ' '); #Unglaublich Wichtig: Carriage Return (\r) unbedingt entfernen!!!
    get_sec $ABLAUFDAT;
    ABLAUF=$TEMPDATE;
    if [ -z $ABLAUF ]; then ABLAUF=9999999999; fi
    if [[ $ABLAUF -lt $BALD ]]; then
      # Verlaengern th1_7
      VERLAENGERN=$VERLAENGERN"&"$(cat $TMPPFAD/$ME.temp.html | sed -ne '/headers\=.th1\_7.>/,1p;/headers\=.th1\_7.>/q' | sed -e 's/.*headers=.th1\_7.>.*name[\=].//g;s/.\/><\/td.*//g' | tr -d '\r' | tr -d '\n')"=1";
    fi
    # Loeschen bis zum nächsten </tr>
    cp $TMPPFAD/$ME.temp.html $TMPPFAD/$ME.temp2.html;
    cat $TMPPFAD/$ME.temp2.html | sed -e '1,/<\/tr>/d' > $TMPPFAD/$ME.temp.html;
  done

  case "$WEBAPP" in
    lynx)    lynx -source 'http://webopac.slub-dresden.de/libero/WebOpac.cls?MGWCHD=0&TOKEN='$TOKEN'&TOKENX='$TOKEN'&DATA=SLU&usercode=&VERSION=2&bno='$USERNUM'&mid=11420&ACTION=MEMSLFISS&SubmitIssued=Senden'$VERLAENGERN > /dev/null;
             ;;
    *)       wget -qO /dev/null 'http://webopac.slub-dresden.de/libero/WebOpac.cls?MGWCHD=0&TOKEN='$TOKEN'&TOKENX='$TOKEN'&DATA=SLU&usercode=&VERSION=2&bno='$USERNUM'&mid=11420&ACTION=MEMSLFISS&SubmitIssued=Senden'$VERLAENGERN;
             ;;
  esac

  if [ -e $TMPPFAD/$ME.nutzerpage.html ]; then rm $TMPPFAD/$ME.nutzerpage.html; fi # Heruntergeladene Slub-Nutzerseite loeschen
  if [ -e $TMPPFAD/$ME.temp.html ]; then rm $TMPPFAD/$ME.temp.html; fi
  if [ -e $TMPPFAD/$ME.temp2.html ]; then rm $TMPPFAD/$ME.temp2.html; fi

  # Urgent-Cronjob loeschen
  CRONTABLINES=$(crontab -l | sed -e '/^#.*/d' | sed -e '/#\ sluburgent$/!d' | wc -l);
  if [ "$CRONTABLINES" -gt "0" ]; then
    crontab -l | sed -e '/^#.*/d' | sed -e '/#\ sluburgent$/d' > $TMPPFAD/$ME.slubmagiccrontabtemp.txt;
    crontab $TMPPFAD/$ME.slubmagiccrontabtemp.txt;
    rm $TMPPFAD/$ME.slubmagiccrontabtemp.txt;
  fi

  # pruefen, ob alle Buecher verlaengert wurden:

  get_booklist;                        # Buecherlist runterladen
  RET=$?;
  if [ "$RET" = "1" ]; then
    error empty_npage domail doexit;
  fi
  if [ ! -e $TMPPFAD/$ME.nutzerpage.html ]; then    # kann ich die Buecherliste herunterladen?
    error no_npage domail doexit;
  fi

  # Konnten alle Bücher verlängert werden?

  ((BALD=HEUTE+86410))
  cat $TMPPFAD/$ME.nutzerpage.html | sed -e '1,/MemStatMembCapt.>/d;/<\/fieldset>/,3000d' > $TMPPFAD/$ME.temp.html;
  printf "Hallo, hier ist slubmagic!\nAblaufdatum der Benutzerkarte: $(cat $TMPPFAD/$ME.temp.html | sed -ne '/MemStatMembDet.>Ablau/,1p' | sed -e 's/.*MemStatMembDet.>.*\&nbsp\;\ *//g;s/<\/div>.*//g')\n" > $TMPPFAD/$ME.slubmagicmail.txt;

  # ------ Ausgeliehene Medien ------ MemStatLoanCapt
  cat $TMPPFAD/$ME.nutzerpage.html | sed -e '1,/MemStatLoanCapt.>/d;1,/<\/thead>/d;/<\/table>/,3000d' > $TMPPFAD/$ME.temp.html;
  DoAppend="0";
  echo "Heute ist der $($DATE +'%d %b %Y'), folgende Buecher konnten leider nicht verlaengert werden:" >> $TMPPFAD/$ME.slubmagicmail.txt;
  while [[ "$(cat $TMPPFAD/$ME.temp.html | wc -l)" -gt "4" ]]; do
    ABLAUFDAT=$( cat $TMPPFAD/$ME.temp.html | sed -ne '/headers\=.th1\_4.>/,1p;/headers\=.th1\_4.>/q' | sed -e 's/.*headers=.th1_4.>\ *//g;s/<\/td>//g' | tr '\r' ' ' | tr '\n' ' '); #Unglaublich Wichtig: Carriage Return (\r) unbedingt entfernen!!!
    get_sec $ABLAUFDAT;
    ABLAUF=$TEMPDATE;
    if [ -z $ABLAUF ]; then ABLAUF=9999999999; fi
    if [[ $ABLAUF -lt $BALD ]]; then
      appendbookfromto $TMPPFAD/$ME.temp.html $TMPPFAD/$ME.slubmagictemp.txt;
      DOMAIL="1";
    fi
    cp $TMPPFAD/$ME.temp.html $TMPPFAD/$ME.temp2.html;
    cat $TMPPFAD/$ME.temp2.html | sed -e '1,/<\/tr>/d' > $TMPPFAD/$ME.temp.html;
    #cat $TMPPFAD/$ME.slubmagictemp.txt;
  done

  if [ "$DOMAIL" != "0" ]; then
    echo "Ende" >> $TMPPFAD/$ME.slubmagicmail.txt;
    reASCII $TMPPFAD/$ME.slubmagicmail.txt;
    mailx -s '[slubmagic] NICHT ALLE BUECHER KONNTEN VERLEANGERT WERDEN!' $EMAIL < $TMPPFAD/$ME.slubmagicmail.txt;
  else
    echo "Heute ist der $($DATE +'%d %b %Y'). Alle Buecher konnten verlaengert werden." > $TMPPFAD/$ME.slubmagicmail.txt;
    mailx -s '[slubmagic] Hurra, alle fealligen Buecher wurden verlaengert!' $EMAIL < $TMPPFAD/$ME.slubmagicmail.txt;
  fi

  if [ -e $TMPPFAD/$ME.slubmagicmail.txt ]; then rm $TMPPFAD/$ME.slubmagicmail.txt; fi
  if [ -e $TMPPFAD/$ME.currvers ]; then rm $TMPPFAD/$ME.currvers; fi
  if [ -e $TMPPFAD/$ME.nutzerpage.html ]; then rm $TMPPFAD/$ME.nutzerpage.html; fi # Heruntergeladene Slub-Nutzerseite loeschen
  if [ -e $TMPPFAD/$ME.temp.html ]; then rm $TMPPFAD/$ME.temp.html; fi # temporaere Auswertedatei loeschen
  if [ -e $TMPPFAD/$ME.temp2.html ]; then rm $TMPPFAD/$ME.temp2.html; fi # temporaere Auswertedatei loeschen
} # ende urgent


###  Hauptprogramm -----------------------------------------------


case "$1" in
 install)
	   test_dateprog;
	   test_webapp;
	   install;
	   ;;
 uninstall)
           uninstall;
	   ;;
 status)
           status;
	   ;;
 daily)

       CRONP=$RANDOM;      # Diese drei Zeilen sorgen dafuer, dass slubmagic zufaellig zwischen 0 und 60 Sekunden vor der Ausfuehrung pausiert.
       let "CRONP %= 60";  # Das soll verhindern, dass bei einer hohen Nutzerzahl von slubmagic auf dem selben Server zu jeder vollen Minute viele Instanzen von slubmagic gleichzeitig auf die Webseiten der Slub zugreifen.
       sleep $CRONP;
       daily;
       echo "$($DATE) [slubmagic] daily fertig" >> $MYHOME/slubmagic.log;
	   ;;
 weekly)
       CRONP=$RANDOM;
       let "CRONP %= 60";
       sleep $CRONP;
       weekly;
       echo "$($DATE) [slubmagic] weekly fertig" >> $MYHOME/slubmagic.log;
	   ;;
 urgent)
       CRONP=$RANDOM;
       let "CRONP %= 60";
       sleep $CRONP;
       urgent;
       echo "$($DATE) [slubmagic] Auto-Verlaengerung fertig" >> $MYHOME/slubmagic.log;
       ;;
 debug)
       debug;
       echo "Fertig";
       ;;
 v)
       echo "slubmagic-version $VERSION von Stephan Wittig";
	   echo "Kontakt: $AUTORMAIL - DIESE VERSION IST BETA!";
	   exit 0;
	   ;;
 *)
       echo "Usage: $SCRIPTNAME {status|install|uninstall}" >&2
	   echo "slubmagic-version $VERSION von Stephan Wittig";
	   echo "Kontakt: $AUTORMAIL - DIESE VERSION IST BETA!";
           exit 1;
           ;;
esac


