#!/usr/bin/perl
# --------------------------------------------------------------------------
# COPYRIGHT (C) 2000
# ENSIM CORPORATION - ALL RIGHTS RESERVED
# --------------------------------------------------------------------------
# $Id: create_mlist,v 1.1.2.1 2001/09/11 19:44:45 jdeleon Exp $
# $Name:  $
# --------------------------------------------------------------------------
# create_mlist: Creates a new mailing list
# Usage: create_mlist <encoded args>
# -------------------------------------------------------

#push @INC, ($ENV{'OPCENTER_PATH'} || "/usr/lib/opcenter")."/apache";
push @INC, ($ENV{'OPCENTER_PATH'} || "/usr/lib/opcenter")."/cmdline_common";

require '/usr/lib/opcenter/cmdline_common/CmdLineCoder.pm';
require '/usr/lib/opcenter/majordomo/mymajordomo-lib.pl';
require '/usr/lib/opcenter/majordomo/majordomo.pm';
require '/usr/lib/opcenter/majordomo/ctime.pl';

local $in;
local %in;
# Decode the string argument before performing any vodoo on it
&CmdLineCoder::decode_args();
$in = $ARGV[0];

#%access = &get_module_acl();
#$access{'create'} || &error("You are not allowed to create new lists");

# get the initial set configuration (includes the right majordomo paths etc)
$conf = &get_config();
$aliases_files = [$config{'aliases_file'}];

#$ldir = &perl_var_replace(&find_value("listdir", $conf), $conf);
$ldir = '/var/lib/majordomo/lists';

# convert the form-parameters back into a dictionary structure from a string
%in = &majordomo::stringToDict($in);

# do our own validation for the parameters passed
local $err = &majordomo::validateInput(%in);

# Create list members file
local $name = $in{'name'};

open(MEMS, ">$ldir/$in{'name'}");
close(MEMS);
&set_permissions("$ldir/$in{'name'}");

$whereami = `hostname`;

# Have majordomo create the new config file, by fooling the wrapper
# into thinking it has ==received an email with a config command
open(WRAPPER, "|$config{'program_dir'}/wrapper majordomo >/dev/null 2>&1");
print WRAPPER "From: root\@$whereami\n\n";
print WRAPPER "config $in{'name'} $in{'name'}.admin\n\n";
close(WRAPPER);

# create the intro file ( Welcome message)
open(INTRO,">$ldir/$in{'name'}.intro");
print INTRO $in{'introductoryMessage'};
close(INTRO)
&set_permissions("$ldir/$in{'name'}.intro");


# create the .info file
$lfile = "$ldir/$in{'name'}.config";
$list = &get_list_config($lfile);
chop($ctime = ctime(time()));
$updated = "[Last updated on: $ctime]\n";
open(INFO, ">$ldir/$in{'name'}.info");

if (&find_value("date_info", $list) eq "yes") {
	print INFO $updated;
}
print INFO $in{'info'};
close(INFO);
&set_permissions("$ldir/$in{'name'}.info");



# Create aliases for the new list
chomp($whereami) ;
&newlist_alias($in{'name'}, "\"|$config{'program_dir'}/wrapper ".
                                      "resend -l $in{'name'} -h $whereami $in{'name'}-outgoing\"");
&newlist_alias($in{'name'}."-outgoing", ":include:$ldir/$in{'name'}");
&newlist_alias($in{'name'}."-list", ":include:$ldir/$in{'name'}");
&newlist_alias("owner-".$in{'name'}, $in{'owner'});
&newlist_alias($in{'name'}."-owner", $in{'owner'});
&newlist_alias($in{'name'}."-approval", $in{'owner'});
&newlist_alias($in{'name'}."-request", "\"|$config{'program_dir'}/wrapper ".
				       "majordomo -l $in{'name'}\"", 1);

# Update the new config file
&save_list_directive($list, $lfile, "description", $in{'description'});
&save_list_directive($list, $lfile, "admin_passwd", $in{'password'});
&save_list_directive($list, $lfile, "approve_passwd", $in{'password'});
&save_list_directive($list, $lfile, "message_footer", $in{'footer'}, 1);
#&save_list_directive($list, $lfile, "moderate", $in{'moderate'});
#&save_list_directive($list, $lfile, "moderator",
#		     $in{'moderator_def'} ? "" : $in{'moderator'});
&flush_file_lines();

sub newlist_alias()
{
    local $al = { 'name' => $_[0],
	          'values' => [ $_[1] ],
	          'enabled' => 1 };
    &majordomo::sendmail_call('create_alias', $al, $aliases_files);
}
