#!/bin/sh
#
# Author: Petter Reinholdtsen
# Date:   2006-01-22
#
# Detect changes in member mailing lists, and email the changes to the
# people administrating the registers.  Run from cron once per day.

mailto="pere@hungry.com atluxity@nuug.no"

majlister="annonsering"

# echo $(/usr/lib/mailman/bin/list_lists |grep " - "|awk '{print $1}')|tr A-Z a-z
# Remember to update below too.
mmlister="aktive dugnadsnett fiksgatami frikanalen frikanalen-styret interesserte jobbmarked kart mailman medlemmer mimesbronn nuug-commits patent patent-core sekretariat-intern stavanger styrelisten video"

listdir=/usr/local/majordomo/lists

backupdir=/var/tmp/mailingliste-diff
logfile=$backupdir/output-$$

exec > $logfile < /dev/null

list_subscribers() {
    liste=$1
    case $liste in
        # Mailman lists
        aktive|dugnadsnett|fiksgatami|frikanalen|frikanalen-styret|interesserte|jobbmarked|kart|mailman|medlemmer|mimesbronn|nuug-commits|patent|patent-core|sekretariat-intern|stavanger|styrelisten|video)
            /usr/lib/mailman/bin/list_members $liste
            ;;
        *)
            cat $listdir/$liste
            ;;
    esac
}

if [ ! -d $backupdir ] ; then
    echo "Status directory '$backupdir' is missing.  Please create it."
    exit 1
fi

for liste in $majlister; do
    cp $listdir/$liste $backupdir/$liste.new
    lister="$lister $liste"
done

for liste in $mmlister ; do
    /usr/lib/mailman/bin/list_members $liste > $backupdir/$liste.new
    lister="$lister $liste"
done

changes=no
for liste in $lister; do
    if diff -u $backupdir/$liste $backupdir/$liste.new ; then
	rm $backupdir/$liste.new
    else
	mv $backupdir/$liste.new $backupdir/$liste
	changes=yes
    fi
done

if [ yes = $changes ] ; then
    hostname="`uname -n`"
    (
	for list in $majlister $mmlister ; do
	    echo -n "$list: "
	    list_subscribers $list | wc -l
	done
	cat $logfile
	echo
	echo "Mail fra $0 på $hostname"
    ) | mail -s "Endringer i NUUGS mailinglister siste 24 timer" $mailto
fi

rm -f $logfile
