#!/usr/bin/perl -w
#----------------------------------------------------------------------
# copyright (C) 2001 Mitel Networks Corporation
# 
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
# 		
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 		
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
# 
# Technical support for this program is available from Mitel Networks 
# Please visit our web site www.e-smith.com for details.
#----------------------------------------------------------------------
# cp user-create-sherpath /etc/e-smith/events/actions
# chmod 554 /etc/e-smith/events/actions/user-create-sherpath
# chown root.root /etc/e-smith/events/actions/user-create-sherpath
# ln -s ../actions/user-create-sherpath /etc/e-smith/events/user-create/S20user-create-sherpath
package esmith;

use strict;
use Errno;
use esmith::config;
use esmith::util;
use esmith::db;
use File::Path;
use DBI;

my %conf;
tie %conf, 'esmith::config';

my %accounts;
tie %accounts, 'esmith::config', '/home/e-smith/accounts';

sub getGroups($);

if (db_get(\%conf, 'CreateSherpathAccountsWithSME') ne 'yes')
{
exit (0);	
}

my $event = $ARGV [0];
my $account = $ARGV [1];

my $dbase='Sherpath';
my $dbserver='localhost';
my $dbadmin = 'root';
my $dbpwd=esmith::util::LdapPassword();

my $fname = db_get_prop(\%accounts, $account, "FirstName");
my $lname = db_get_prop(\%accounts, $account, "LastName");
my $dept = db_get_prop(\%accounts, $account, "Dept");
my $comp = db_get_prop(\%accounts, $account, "Company");
my $address = db_get_prop(\%accounts, $account, "Street");
my $city = db_get_prop(\%accounts, $account, "City");
my $phone = db_get_prop(\%accounts, $account, "Phone");
my $email = ( 
		(db_get_prop(\%accounts, $account, "EmailForward") =~ m/(local|both)/)
		? ( $account.'@'.$conf{'DomainName'})
		: (db_get_prop(\%accounts, $account, "ForwardAddress"))
	     );
my @groups = getGroups ($account);

my $db = "dbi:mysql:$dbase:$dbserver:3306";
my $dbh = DBI->connect($db, $dbadmin, $dbpwd);
if (not $dbh){die "$DBI::errstr\n";}


## Database : `Sherpath`
## table `shx_users`
#INSERT INTO shx_users 
#VALUES (
#id        1, 
#username  'admin', 
#password  '212f9a5a5a701fc3', 
#firstname 'admin', 
#lastname  'admin', 
#email     'admin@files0', 
#company   '', 
#home_phone'', 
#work_phone'', 
#mobile    '', 
#fax       '', 
#address   '', 
#city      '', 
#state     '', 
#zipcode   '', 
#country   '', 
#job       NULL, 
#job_title NULL, 
#home_email'', 
#home_fax  '', 
#mail_host '', 
#smtp_host '', 
#ftp_host  '', 
#ftpm_host '');

my $list = $dbh->prepare("INSERT INTO shx_users VALUES ('', 
'$account', 
'2378312336d6f6ef42321585001fc3', 
'$fname', 
'$lname', 
'$email', 
'$comp', 
'', 
'$phone', 
'', 
'', 
'$address', 
'$city', 
'', 
'', 
'', 
'', 
'', 
'', 
'', 
'', 
'', 
'', 
'')");

$list->execute();

# 1 is the only group 'users' that exist from the begining
$list = $dbh->prepare("INSERT INTO shx_usrgrp_memb VALUES (1, '$account')");
$list->execute();

$list->finish() or die "Cannot create Sherpath account for \"$account\"";
$dbh->disconnect();


exit (0);

#========================================================

sub getGroups ($)
{
    my ($user) = @_;

    my $key;
    my $value;

    my @groups = ();
    my @selected = ();

    foreach (sort keys %accounts)
    {
	if (db_get_type(\%accounts, $_) eq "group")
	{
	    push @groups, $_;
	    if ($user ne '')
	    {
		my @members =
		    split (/,/, db_get_prop(\%accounts, $_, "Members"));

		if (grep (/^$user$/, @members))
		{
		    push @selected, $_;
		}
	    }
	}
    }

    @groups = sort @groups;
    my $count = scalar @groups;

    my @MyGroups=();

    if ($count > 0)
    {
	my $group;
	foreach $group (@groups)
	{
	    if (grep (/^$group$/, @selected))
	    {		
		push(@MyGroups,$group);
	    }	    
	}
    }   

    return @MyGroups;
}
