
#!/bin/bash
# File	: chk_reminders.sh
# By	: M. de Boer, 070719
# Subject	: Reminder controle script
# 0.1	: Vanuit chk_bthdays
#	: Met grep -v \^# aanpassingen bij lists/* & users/*
# 0.2	: Nieuwe FROMNAME
# 0.3	: From:, ${SUBJECT} added, $FROM removed, renamed to chk_reminders.sh
# 0.4	: Allen nog gisteren (-1)
# 0.5	: /bin/bash in stead of /bin/sh for at stratoserver.net
# 0.6	: Add planning/
# 0.7	: Some ${MAILFILE} mod.s
# 0.8	: Mod USAGE. CHKDATE
# 0.9	: Mod signature
# 0.10	: Mod signature
# 0.11	: Mod ViJoS tekst
# 0.12	: Add list of previous plannings from PLAN-file
# 0.13	: Add planning URL
#0.14,171014	: Add seizoen & upd WWWPLANNING
#(0.15),171015	: Added PDF-link
#(0.16),180325	: Added Agrarix-IT
#(0.17).180928	: Added FILTER
#(0.18),190307	: Mod. output of mail to std
# http://www.vijos.nl/download/Oud_papier_wijk_vijos_1e_woensdag.pdf
# Oud_papier_wijk_vijos_2e_zaterdag.pdf
# Oud_papier_wijk_vijos_3e_woensdag.pdf
#
PGM="`basename $0|cut -d\. -f1`"
VERSION="0.18"
BASEDIR="${HOME}/reminders"
TMP="/tmp/${PGM}.$$"
LOG="${BASEDIR}/log/${PGM}.log"
MAILFILE="${TMP}.mailfile"
MAILTO="maarten@agrarix.nl"
REPLYTO="reminders@agrarix.nl"
FROM="Agrarix reminders <reminders@agrarix.nl>"
V=""  # VERBOSE
MAIL=""
CHKDATE=""
FN=""
CC=""
SMS=""
VERSIONINFO=""
SENDEMPTY=""
DOSEND=""
BCC="reminders@agrarix.nl"
SENDTESTMAIL=""
DOS2UNIX=""
SENDMAIL="/usr/sbin/sendmail"
#FROMNAME="Agrarix herinnering"
SUBJECT="Herinnering(en)"
PLANNING=""
DSTR="now"
FILTER="[?]*"
WWWPLANNING="http://www.agrarix.com/planning"
WWWDOWNLOAD="http://www.vijos.nl/download"

export MAIL

USAGE()
{
  echo "$PGM"
  echo "  -h               : This help"
  echo "  -d <DATE> (dd-mm-yyyy)"
  echo "  -f <name_filter> : Filter a name"
  echo "  -m               : send Mail"
  echo "  -p               : check Planning"
  echo "  -s               : send SMS"
  echo "  -v               : Verbose"
  echo "  -V               : Version"
  echo "  --day            : 1 day upfront"
  echo "  --week           : 1 week upfront"
  echo "  --month          : 1 month upfront"
  echo "  --test           : send test mail"
}

while [ $# -gt 0 ]
do
  case "$1" in
    '-d')  if [ "$2" != "" ]; then
             CHKDATE=$2
           else
             CHKDATE="`date +%d-%m-%Y`"
           fi
           shift ;;
    '-f')  FILTER=${2}; shift ;;
    '-m')  MAIL=1 ;;
    '-s')  SMS=1 ;;
    '-p')  PLANNING=1 ;;
    '--day')  DSTR="+1 day" ;;
    '--week')  DSTR="+1 week" ;;
    '--month')  DSTR="+1 month" ;;
    '-h')  USAGE ;;
    '-v')  V=1 ;;
    '-x')  set -x ;;
    '-V')  echo "Version=$VERSION" ; exit 2 ;;
    '--test')  SENDTESTMAIL=1 ;;
    *) echo "Option $1 not found." ; USAGE; exit 1 ;;
  esac 
  shift
done

if [ $V ] ; then
  echo "PGM=$PGM"
  echo "VERSION=$VERSION"
  echo "TMP=$TMP"
  echo "LOG=$LOG"
  echo "FILTER=$FILTER"
  echo "MAILFILE=${MAILFILE}"
  echo "DAYFILE=$DAYFILE"
  echo "MAILTO=$MAILTO"
  echo "FROM=$FROM"
  echo "CHKDATE=$CHKDATE"
  echo "SMS=$SMS"
  echo "REPLYTO=$REPLYTO"
  echo "SENDTESTMAIL=$SENDTESTMAIL"
#  echo "FROMNAME=$FROMNAME"
  echo "BASEDIR=$BASEDIR"
  echo "PLANNING=$PLANNING"
fi

export GINNR SMSSTR

touch ${LOG} 
echo "`date` ${PGM} (v${VERSION}) running for ${CHKDATE}" | tee -a $LOG

DOS2UNIX="`type -P dos2unix`"
if [ "${DOS2UNIX}" = "" ]; then
  echo "`date` No dos2unix found (cat will be used). " | tee -a $LOG
  DOS2UNIX="cat"
fi

if [ ! -x ${SENDMAIL} ]; then
  echo "`date` No sendmail found. Exiting ... " | tee -a $LOG
  exit 3
fi

touch ${TMP} ${MAILFILE} 

if [ ${PLANNING} ]; then
  echo "PLANNING"
  BCC="planning@agrarix.nl"
  REPLYTO="planning@agrarix.nl"
  cd $BASEDIR/planning
  if [ "${CHKDATE}" = "" ]; then
    CHKDATE="`date --date \"$DSTR\" +%d-%m-%Y`"
  fi
  for PLAN in `ls -1 *`
  do
    echo "CHKDATE=${CHKDATE} -> ${PLAN}" | tee -a ${LOG}
# Added FILTER
    cat "${PLAN}" |grep -v \^#|grep ${CHKDATE}|grep "${FILTER}"| while read LINE
    do
# Per line (date; e-mail-address;)
# Get (first)name
      FN="`echo ${LINE}|cut -d\; -f2|cut -d\< -f1`"
# Get User-e-mailaddress
      USER="`echo ${LINE}|cut -d\; -f2|cut -d\< -f2|cut -d\> -f1`"
# Get PLAN-filename without '_' for subject text
      PLAN2="`echo ${PLAN} | sed 's/_/ /g'`"
      echo "USER=${USER} FN=${FN}"

  echo "From: ${FROM}" > ${MAILFILE}
  echo "To: ${USER}" >> ${MAILFILE}
  echo "Cc: ${CC}" >> ${MAILFILE}
  echo "Bcc: ${BCC}" >> ${MAILFILE}
  echo "Reply-to: ${REPLYTO}" >> ${MAILFILE}
  echo "Subject: Herinnering; ${PLAN2}" >> ${MAILFILE}

  echo "Beste $FN," >> ${MAILFILE}
  echo "Op ${CHKDATE} sta je op de planning voor ${PLAN2}." >> ${MAILFILE}

# Add all (#cnt) planningdates
  CNT="`grep ${USER} ${PLAN}|grep -v ^#|awk -F\; '{print $1}'|wc -l`"
  echo "Alle, ${CNT}, datum(s) in dit seizoen (van sep. t/m aug.):" >> ${MAILFILE}
  grep ${USER} ${PLAN}|grep -v ^#|awk -F\; '{print $1}' >> ${MAILFILE}

# Footer
  echo "" >> ${MAILFILE}
  echo "Kan je niet, dan zelf ruilen. Hieronder de link van de lijst van anderen die de komende periode ook lopen. Misschien kan daarmee geruild worden." >> ${MAILFILE}
  echo "${WWWPLANNING}/${PLAN}/" >> ${MAILFILE}
  echo "Gelieve dat even door te geven. Dat kan met een reply op deze mail." >> ${MAILFILE}
  echo "" >> ${MAILFILE}
  echo "Zoals eerder is geschreven, zijn wij nu in het bezit van nieuwe veiligheidshesjes met het ViJoS logo erop." >> ${MAILFILE}
  echo "De hesjes kunnen gebruikt worden bij de begeleiding van optredens en bij het krantenlopen. " >> ${MAILFILE}
  echo "Voor het krantenlopen op de woensdagavond, kun je maandags al een hesje meenemen. We verzoeken je het hesje op de donderdag weer terug te hangen, zodat de volgende hier weer gebruik van kan maken." >> ${MAILFILE}
  echo "De hesjes dienen te allen tijden retour naar ViJoS te gaan en zullen daar bewaart worden. " >> ${MAILFILE}
  echo "Wijk1(1e wo-avond): http://www.vijos.nl/download/Oud_papier_wijk_vijos_1e_woensdag.pdf" >> ${MAILFILE}
  echo "Wijk2(2e za-ochtend): http://www.vijos.nl/download/Oud_papier_wijk_vijos_2e_zaterdag.pdf" >> ${MAILFILE}
  echo "Wijk3(3e wo-avond): http://www.vijos.nl/download/Oud_papier_wijk_vijos_3e_woensdag.pdf" >> ${MAILFILE}
  echo "" >> ${MAILFILE}
  echo "Met vriendelijke groet, " >> ${MAILFILE}
  echo "Maarten de Boer" >> ${MAILFILE}
  echo "" >> ${MAILFILE}
  echo "Deze mail is verzorgd door Reminder at Agrarix. Onderdeel van Agrarix-IT." >> ${MAILFILE}
  echo "Meer informatie te vinden op http://www.agrarix.it" >> ${MAILFILE}

      DOSEND=1
      if [ $MAIL ] && [ $DOSEND ]; then
        echo "Sending mailto $USER (From:${FROM} CC:$CC BCC:${BCC}) ..." | tee -a $LOG
#        cat ${MAILFILE} | ${DOS2UNIX} | /usr/sbin/sendmail -t -F"${FROMNAME}"
        cat ${MAILFILE} | ${DOS2UNIX} | /usr/sbin/sendmail -t
#      else
####### Do not send, but display
#        cat ${MAILFILE} 
      fi


    done  # cat $PLAN

  done  # PLAN

else  # $PLANNING

cd $BASEDIR/users
for USER in `ls -1 *`
do
  echo ""
  GINNR=""
  SMSSTR=""
  touch $TMP ${MAILFILE} $DAYFILE
  USERFILE="$BASEDIR/lists/$USER"
  FN="`grep -v \^# ${USER}|grep FULLNAME| cut -d\= -f2`" > /dev/null
  CC="`grep -v \^# ${USER}|grep MAILCC| cut -d\= -f2`" > /dev/null
  BCC="`grep -v \^# ${USER}|grep MAILBCC| cut -d\= -f2`" > /dev/null
  GINNR="`grep -v \^# ${USER}|grep GINNR| cut -d\= -f2`" > /dev/null
  VERSIONINFO="`grep -v \^# ${USER}|grep VERSIONINFO| cut -d\= -f2`" > /dev/null
  SENDEMPTY="`grep -v \^# ${USER}|grep SENDEMPTY| cut -d\= -f2`" > /dev/null
  echo "User:${USER}, Name:${FN}, MailCC:${CC}, MailBCC:${BCC} GINNR:${GINNR}| VERSIONINFO=${VERSIONINFO}" | tee -a ${LOG}

  if [ ${SENDTESTMAIL} ]; then
    DOSEND=1
    MAIL=1
    USER="agrarix@xs4all.nl"
#    USER="maarten@agrarix.nl"
    CC=""
    BCC=""
  fi  # $SENDTESTMAIL

# HDR of MAILFILE
  echo "From: ${FROM}" >> ${MAILFILE}
  echo "To: ${USER}" >> ${MAILFILE}
  echo "Cc: ${CC}" >> ${MAILFILE}
  echo "Bcc: ${BCC}" >> ${MAILFILE}
  echo "Reply-to: ${REPLYTO}" >> ${MAILFILE}
  echo "Subject: ${SUBJECT}" >> ${MAILFILE}

  echo "Beste $FN," >> ${MAILFILE}
## Delta-DAY loop met DeltaDAY

#for DDAY in -2 -1 0 +1 +2 +3
for DDAY in -1 0 +1 +2 +3
do
  case $DDAY in
#  -2) DAYSTR="voor eergisteren"; DSTR="2 days ago";;
  -1) DAYSTR="voor gisteren"; DSTR="yesterday";;
  0) DAYSTR="voor vandaag"; DSTR="now" ;;
  +1) DAYSTR="voor morgen"; DSTR="tomorrow" ;;
  +2) DAYSTR="voor overmorgen"; DSTR="2 days" ;;
  +3) DAYSTR="voor over-overmorgen"; DSTR="3 days" ;;
  esac
  CHKDATE="`date --date \"$DSTR\" +%d-%m-%Y`"
#  echo $DDAY $DAYSTR $CHKDATE
  cat $USERFILE | grep -v \^#|grep $CHKDATE | while read LINE
  do
    ACTION="`echo $LINE | cut -d\; -f2`" 
    echo "- ${ACTION} ${DAYSTR} (${CHKDATE})." >> ${TMP}

  done  # while read LINE
done  # for DDAY ...
## End DeltaDAY-loop

# If $TMP(file) is not empty (birthdays found) 
if [ -s $TMP ]; then
  echo "De volgende herinnering(en);" >> ${MAILFILE}
  cat $TMP >> ${MAILFILE}
  DOSEND="1"
else
  DOSEND=""
  if [ $SENDEMPTY ]; then  # Do send if empty
    CHKDATE="`date +%d-%m-%Y`"
    echo "In deze periode ($CHKDATE) geen herinnering(en)." >> ${MAILFILE}
    DOSEND="1"
  fi
fi  

# Footer
  echo "" >> ${MAILFILE}
  echo "" >> ${MAILFILE}
  echo "" >> ${MAILFILE}
  echo "Deze mail is verzorgd door Reminder at Agrarix." >> ${MAILFILE}
  echo "Meer informatie te vinden op http://www.agrarix.com/reminders ." >> ${MAILFILE}
  echo "Afmelden door 'reminders@agrarix.nl?subject=Unsubscribe-${USER}' te sturen." >> ${MAILFILE}

#  MAILNAME="`echo ${USER} |cut -d\@ -f1`"
#  MAILDOMAIN="`echo ${USER} |cut -d\@ -f2`"
#  echo "Actie lijst opvragen http://www.agrarix.com/mail_bthday_list.php?name=${MAILNAME}&domain=${MAILDOMAIN}&Submit=Verzenden " >> ${MAILFILE}

  echo "" >> ${MAILFILE}
  if [ $VERSIONINFO ]; then
    echo "By ${PGM} v${VERSION} @ `hostname`" >> ${MAILFILE}
  fi

  if [ $V ]; then
    echo "-------"
    cat ${MAILFILE}
    echo "-------"
    echo "DOSEND=${DOSEND}"
  fi

  if [ $MAIL ] && [ $DOSEND ]; then
    echo "Sending mailto $USER (From:${FROM} CC:$CC BCC:${BCC}) ..." | tee -a $LOG
#    cat ${MAILFILE} | ${DOS2UNIX} | /usr/sbin/sendmail -t -F"${FROMNAME}"
    cat ${MAILFILE} | ${DOS2UNIX} | /usr/sbin/sendmail -t
  fi

  if [ "$SMSSTR" != "" ] && [ $SMS ]; then
    echo "SMS-ing:$SMSSTR|"| tee -a $LOG
    mailx -s "$SMSSTR" $GINNR < /dev/null
    SMSSTR=""
  fi

  rm ${TMP} ${MAILFILE} ${DAYFILE}
done  # for USER

fi  # else $PLANNING

echo "`date` ${PGM} ready " | tee -a ${LOG}
echo "." 
exit 0

