#!/usr/bin/perl -w
# vim: ft=perl ts=4 sw=4 et:

use strict ;
use esmith::util;
use esmith::ConfigDB ;
use esmith::AccountsDB ;

my $db = esmith::ConfigDB->open_ro
    or die "Can't open the Config database : $!\n" ;
my $accountdb = esmith::AccountsDB->open_ro
    or die "Can't open the Account database : $!\n" ;

my @users ;
my $fetchmail = $db->get('FetchMails') ;
my $FMStatus = 'disabled' ;
if ( defined $fetchmail ) {
    $FMStatus = $fetchmail->prop('status') || 'disabled' ;
}
# print "$FMStatus\n" ;
# as of version 1.3.4-04, the offending fm% prefix becomes fm_fm-
# PS Apr 30, 2005
# no need to have any .qmail-fm% or .qmail-fm_fm- files
# it's better to suppress all aliases files, in case of
# a user deletion. 
# The whole file are recreated after anyway.
opendir ( DIR, "/var/qmail/alias" ) ;
foreach my $fic ( grep( /^.qmail-(fm%|fm_fm-)/, readdir DIR) ) {
    unlink "/var/qmail/alias/$fic" ;
}
closedir ( DIR ) ;

if ( $FMStatus eq 'enabled' ) {
    my @users = $accountdb->get('admin');
    push @users, $accountdb->users();
    foreach my $u ( @users ) {
        # print $u->key ;
        my $MailCopyTo = '' ;
        $MailCopyTo = $u->prop( 'FM-MailCopyTo' ) if ( defined $u->prop( 'FM-MailCopyTo' ) ) ;
        my $TransName = '' ;
        if ( defined $u->prop( 'FM-TransName' ) ) {
            $TransName  = $u->prop( 'FM-TransName'  ) ;
        }
        if ( $TransName ne '' ) {
            $TransName =~ s/\s//g ;
            $TransName =~ s/:/,/g ;
            if ( $MailCopyTo eq '' ) { $MailCopyTo = $TransName }
            else                     { $MailCopyTo = $MailCopyTo . "," . $TransName }
        } 
        # print "$MailCopyTo\n" ;
        if ( $MailCopyTo ne '' ) {
            # add the local account only if the account is not a Ghost account
            if ( ( $u->prop( 'FM-Ghost' ) || 'NO' ) ne 'YES' ) {
                $MailCopyTo = $u->key . "," . $MailCopyTo ;
            }
            my $Group = "fm_fm-" . $u->key ;
            # PS Oct 25, 2006 : in SME 7, names can contain dot. But Qmail doesn't like dots
            # in group filename.
            # borrowed in /etc/e-smith/events/actions/qmail-update-group :
            # $groupName =~ s/\./:/g;
            $Group =~ s/\./:/g;

            esmith::util::processTemplate(
                {
                    CONFREF =>
                        {
                            Members => $MailCopyTo,
                        },
    
                    TEMPLATE_PATH =>
                        "/var/qmail/alias/.qmail-group",
    
                    OUTPUT_FILENAME => "/var/qmail/alias/.qmail-$Group",
                }
            );
        }
    }
}

