diff options
| -rw-r--r-- | fml/lib/FML/Command/Admin/digest.pm | 177 |
1 files changed, 98 insertions, 79 deletions
diff --git a/fml/lib/FML/Command/Admin/digest.pm b/fml/lib/FML/Command/Admin/digest.pm index 1f9e03eb..8519ff90 100644 --- a/fml/lib/FML/Command/Admin/digest.pm +++ b/fml/lib/FML/Command/Admin/digest.pm @@ -4,18 +4,18 @@ # All rights reserved. This program is free software; you can # redistribute it and/or modify it under the same terms as Perl itself. # -# $FML$ +# $FML: digest.pm,v 1.1 2002/11/19 16:11:22 tmu Exp $ # package FML::Command::Admin::digest; use strict; -use vars qw(@ISA @EXPORT @EXPORT_OK $AUTOLOAD); use Carp; +use vars qw(@ISA @EXPORT @EXPORT_OK $AUTOLOAD); =head1 NAME -FML::Command::Admin::digest - change on or off digest mode +FML::Command::Admin::digest - toggle digest mode off/on =head1 SYNOPSIS @@ -23,7 +23,7 @@ See C<FML::Command> for more details. =head1 DESCRIPTION -change on or off digest mode address. +change digest mode for the specified address to off/on. =head1 METHODS @@ -58,123 +58,142 @@ sub need_lock { 1;} sub process { my ($self, $curproc, $command_args) = @_; - my $config = $curproc->{ config }; + my $config = $curproc->config(); + my $options = $command_args->{ options } || []; + my $address = $command_args->{ command_data } || $options->[ 0 ] || undef; + my $mode = $options->[ 1 ] || ''; + + # maps my $primary_recipient_map = $config->{ primary_recipient_map }; - my @recipient_map = split(/\s+/, $config->{ recipient_maps }); - my $digest_recipient_map = $config->{ digest_recipient_maps }; - my $options = $command_args->{ options }; - my $address = $command_args->{ command_data } || $options->[ 0 ]; - my $mode = $options->[ 1 ]; + my $recipient_maps = $config->get_as_array_ref('recipient_maps'); + my $digest_recipient_map = $config->{ primary_digest_recipient_map }; + my $digest_recipient_maps = + $config->get_as_array_ref('digest_recipient_maps'); # fundamental check - croak("address is not specified") unless defined $address; - croak("\@recipient_map is not specified") unless @recipient_map; - - if ($mode eq "on") { - $self->_on($curproc, $command_args); + croak("address is not specified") unless defined $address; + croak("primary_recipient_map not defined") + unless defined $primary_recipient_map; + croak("recipient_maps not defined") unless defined $recipient_maps; + croak("digest_recipient_map not defined") + unless defined $digest_recipient_map; + croak("digest_recipient_maps not definde") + unless defined $digest_recipient_maps; + + my $digest_args = { + address => $address, + mode => $mode, + primary_recipient_map => $primary_recipient_map, + recipient_maps => $recipient_maps, + primary_digest_recipient_map => $digest_recipient_map, + digest_recipient_maps => $digest_recipient_maps, + }; + + if ($mode) { + $mode =~ tr/A-Z/a-z/; + + if ($mode eq "on") { + $self->_digest_on($curproc, $command_args, $digest_args); + } + elsif ($mode eq "off") { + $self->_digest_off($curproc, $command_args, $digest_args); + } + else { + croak("unknown mode: mode is off or on"); + } } - if ($mode eq "off") { - $self->_off($curproc, $command_args); + else { + croak("specify mode: off or on"); } } + # Descriptions: change to on mode # Arguments: OBJ($self) OBJ($curproc) HASH_REF($command_args) # Side Effects: update $recipient_map -sub _on +sub _digest_on { - my ($self, $curproc, $command_args) = @_; - my $config = $curproc->{ config }; - my $primary_recipient_map = $config->{ primary_recipient_map }; - my @recipient_map = split(/\s+/, $config->{ recipient_maps }); - my $digest_recipient_map = $config->{ digest_recipient_maps }; - my $options = $command_args->{ options }; - my $address = $command_args->{ command_data } || $options->[ 0 ]; - - # fundamental check - croak("address is not specified") unless defined $address; - croak("\@recipient_map is not specified") unless @recipient_map; - - # FML::Command::UserControl specific parameters - # delete from normal recipient_map - my $uc_args = { + my ($self, $curproc, $command_args, $dargs) = @_; + my $address = $dargs->{ address }; + my $mode = $dargs->{ mode }; + my $primary_recipient_map = $dargs->{ primary_recipient_map }; + my $recipient_maps = $dargs->{ recipient_maps }; + my $digest_recipient_map = $dargs->{ primary_digest_recipient_map }; + my $digest_recipient_maps = $dargs->{ digest_recipient_maps }; + + # move $address from normal $recipient_maps to $digest_recipient_maps + my $uc_normal_args = { address => $address, - maplist => [ @recipient_map ], - }; - my $r = ''; - - eval q{ - use FML::Command::UserControl; - my $obj = new FML::Command::UserControl; - $obj->userdel($curproc, $command_args, $uc_args); + maplist => $recipient_maps, }; - if ($r = $@) { - croak($r); - } - # add from digest recipient_map - $uc_args = { + my $uc_digest_args = { address => $address, maplist => [ $digest_recipient_map ], }; - $r = ''; - eval q{ - use FML::Command::UserControl; - my $obj = new FML::Command::UserControl; - $obj->useradd($curproc, $command_args, $uc_args); - }; - if ($r = $@) { - croak($r); - } + $self->_userdel($curproc, $command_args, $uc_normal_args); + $self->_useradd($curproc, $command_args, $uc_digest_args); } + # Descriptions: change to off mode # Arguments: OBJ($self) OBJ($curproc) HASH_REF($command_args) # Side Effects: update $recipient_map -sub _off +sub _digest_off { - my ($self, $curproc, $command_args) = @_; - my $config = $curproc->{ config }; - my $primary_recipient_map = $config->{ primary_recipient_map }; - my @recipient_map = split(/\s+/, $config->{ recipient_maps }); - my $digest_recipient_map = $config->{ digest_recipient_maps }; - my $options = $command_args->{ options }; - my $address = $command_args->{ command_data } || $options->[ 0 ]; - - # fundamental check - croak("address is not specified") unless defined $address; - croak("\@recipient_map is not specified") unless @recipient_map; + my ($self, $curproc, $command_args, $dargs) = @_; + my $address = $dargs->{ address }; + my $mode = $dargs->{ mode }; + my $primary_recipient_map = $dargs->{ primary_recipient_map }; + my $recipient_maps = $dargs->{ recipient_maps }; + my $digest_recipient_map = $dargs->{ primary_digest_recipient_map }; + my $digest_recipient_maps = $dargs->{ digest_recipient_maps }; + + # move $address from normal $digest_recipient_maps to $prmary_recipient_map + my $uc_normal_args = { + address => $address, + maplist => [ $primary_recipient_map ], + }; - # FML::Command::UserControl specific parameters - # delete from digest recipient_map - my $uc_args = { + my $uc_digest_args = { address => $address, - maplist => [ $digest_recipient_map ], + maplist => $digest_recipient_maps, }; + + $self->_userdel($curproc, $command_args, $uc_digest_args); + $self->_useradd($curproc, $command_args, $uc_normal_args); +} + + +sub _useradd +{ + my ($self, $curproc, $command_args, $uc_args) = @_; my $r = ''; eval q{ use FML::Command::UserControl; my $obj = new FML::Command::UserControl; - $obj->userdel($curproc, $command_args, $uc_args); + $obj->useradd($curproc, $command_args, $uc_args); }; + if ($r = $@) { croak($r); } +} - # add from normal recipient_map - $uc_args = { - address => $address, - maplist => [ $primary_recipient_map ], - }; - $r = ''; + +sub _userdel +{ + my ($self, $curproc, $command_args, $uc_args) = @_; + my $r = ''; eval q{ use FML::Command::UserControl; my $obj = new FML::Command::UserControl; - $obj->useradd($curproc, $command_args, $uc_args); + $obj->userdel($curproc, $command_args, $uc_args); }; + if ($r = $@) { croak($r); } |
