diff options
| author | fukachan <fukachan> | 2002-03-19 10:12:44 +0000 |
|---|---|---|
| committer | fukachan <fukachan> | 2002-03-19 10:12:44 +0000 |
| commit | 31c70b1e3cd0d7f800386fc61bbf6ac552fec24b (patch) | |
| tree | 8aa584c82973b9ab1b84c7085fbe2a8b0e1c5cd5 | |
| parent | 3329f6529d627b784c80d2268453a993e923c4c0 (diff) | |
| download | fml8-31c70b1e3cd0d7f800386fc61bbf6ac552fec24b.tar.gz fml8-31c70b1e3cd0d7f800386fc61bbf6ac552fec24b.tar.bz2 fml8-31c70b1e3cd0d7f800386fc61bbf6ac552fec24b.zip | |
define FML::Command::UserControl class to share user control codes.
modified Admin::{subscribe,unsubscribe} commands to use it.
| -rw-r--r-- | fml/lib/FML/Command/Admin/subscribe.pm | 39 | ||||
| -rw-r--r-- | fml/lib/FML/Command/Admin/unsubscribe.pm | 29 | ||||
| -rw-r--r-- | fml/lib/FML/Command/UserControl.pm | 128 |
3 files changed, 160 insertions, 36 deletions
diff --git a/fml/lib/FML/Command/Admin/subscribe.pm b/fml/lib/FML/Command/Admin/subscribe.pm index b38da245..6075b98d 100644 --- a/fml/lib/FML/Command/Admin/subscribe.pm +++ b/fml/lib/FML/Command/Admin/subscribe.pm @@ -4,7 +4,7 @@ # All rights reserved. This program is free software; you can # redistribute it and/or modify it under the same terms as Perl itself. # -# $FML: subscribe.pm,v 1.12 2002/03/17 05:27:31 fukachan Exp $ +# $FML: subscribe.pm,v 1.13 2002/03/19 08:00:18 fukachan Exp $ # package FML::Command::Admin::subscribe; @@ -66,31 +66,24 @@ sub process my $address = $command_args->{ command_data } || $options->[ 0 ]; # fundamental check - croak("address is not specified") unless defined $address; + croak("address is not specified") unless defined $address; croak("\$member_map is not specified") unless $member_map; croak("\$recipient_map is not specified") unless $recipient_map; - use IO::Adapter; - use FML::Credential; - use FML::Log qw(Log LogWarn LogError); - - for my $map ($member_map, $recipient_map) { - my $cred = new FML::Credential; - unless ($cred->has_address_in_map($map, $address)) { - my $obj = new IO::Adapter $map; - $obj->touch(); - $obj->add( $address ); - unless ($obj->error()) { - Log("add $address to map=$map"); - } - else { - croak("fail to add $address to map=$map"); - } - } - else { - croak( "$address is already member (map=$map)" ); - return undef; - } + # FML::Command::UserControl specific parameters + my $uc_args = { + address => $address, + maplist => [ $recipient_map, $member_map ], + }; + my $r = ''; + + eval q{ + use FML::Command::UserControl; + my $obj = new FML::Command::UserControl; + $obj->useradd($curproc, $command_args, $uc_args); + }; + if ($r = $@) { + croak($r); } } diff --git a/fml/lib/FML/Command/Admin/unsubscribe.pm b/fml/lib/FML/Command/Admin/unsubscribe.pm index 0f74b53c..1f8eb469 100644 --- a/fml/lib/FML/Command/Admin/unsubscribe.pm +++ b/fml/lib/FML/Command/Admin/unsubscribe.pm @@ -4,7 +4,7 @@ # All rights reserved. This program is free software; you can # redistribute it and/or modify it under the same terms as Perl itself. # -# $FML: unsubscribe.pm,v 1.9 2002/03/17 05:27:31 fukachan Exp $ +# $FML: unsubscribe.pm,v 1.10 2002/03/19 08:00:18 fukachan Exp $ # package FML::Command::Admin::unsubscribe; @@ -66,21 +66,24 @@ sub process my $address = $command_args->{ command_data } || $options->[ 0 ]; # fundamental check + croak("address is not specified") unless defined $address; croak("\$member_map is not specified") unless $member_map; croak("\$recipient_map is not specified") unless $recipient_map; - use IO::Adapter; - use FML::Log qw(Log LogWarn LogError); - - for my $map ($member_map, $recipient_map) { - my $obj = new IO::Adapter $map; - $obj->delete( $address ); - unless ($obj->error()) { - Log("removed $address from map=$map"); - } - else { - LogError("fail to remove $address from map=$map"); - } + # FML::Command::UserControl specific parameters + my $uc_args = { + address => $address, + maplist => [ $recipient_map, $member_map ], + }; + my $r = ''; + + eval q{ + use FML::Command::UserControl; + my $obj = new FML::Command::UserControl; + $obj->userdel($curproc, $command_args, $uc_args); + }; + if ($r = $@) { + croak($r); } } diff --git a/fml/lib/FML/Command/UserControl.pm b/fml/lib/FML/Command/UserControl.pm new file mode 100644 index 00000000..99937b0c --- /dev/null +++ b/fml/lib/FML/Command/UserControl.pm @@ -0,0 +1,128 @@ +#-*- perl -*- +# +# Copyright (C) 2002 Ken'ichi Fukamachi +# All rights reserved. This program is free software; you can +# redistribute it and/or modify it under the same terms as Perl itself. +# +# $FML: UserControl.pm,v 1.13 2002/02/23 10:22:16 fukachan Exp $ +# + +package FML::Command::UserControl; +use strict; +use vars qw(@ISA @EXPORT @EXPORT_OK $AUTOLOAD); +use Carp; +use File::Spec; +use FML::Log qw(Log LogWarn LogError); + +=head1 NAME + +FML::Command::UserControl - utility functions to send back file(s) + +=head1 SYNOPSIS + +=head1 DESCRIPTION + +=head1 METHODS + +=cut + +use IO::Adapter; +use FML::Credential; +use FML::Log qw(Log LogWarn LogError); + + +# Descriptions: standard constructor +# Arguments: OBJ($self) +# Side Effects: none +# Return Value: OBJ +sub new +{ + my ($self) = @_; + my ($type) = ref($self) || $self; + my $me = {}; + return bless $me, $type; +} + + +# Descriptions: add user +# Arguments: OBJ($self) +# HASH_REF($curproc) HASH_REF($command_args) HASH_REF($uc_args) +# Side Effects: update maps +# Return Value: none +sub useradd +{ + my ($self, $curproc, $command_args, $uc_args) = @_; + my $address = $uc_args->{ address }; + my $maplist = $uc_args->{ maplist }; + + for my $map (@$maplist) { + my $cred = new FML::Credential; + unless ($cred->has_address_in_map($map, $address)) { + my $obj = new IO::Adapter $map; + $obj->touch(); + $obj->add( $address ); + unless ($obj->error()) { + Log("add $address to map=$map"); + } + else { + croak("fail to add $address to map=$map"); + } + } + else { + croak( "$address is already member (map=$map)" ); + return undef; + } + } +} + + +# Descriptions: remove user +# Arguments: OBJ($self) +# HASH_REF($curproc) HASH_REF($command_args) HASH_REF($uc_args) +# Side Effects: update maps +# Return Value: none +sub userdel +{ + my ($self, $curproc, $command_args, $uc_args) = @_; + my $address = $uc_args->{ address }; + my $maplist = $uc_args->{ maplist }; + + for my $map (@$maplist) { + my $cred = new FML::Credential; + if ($cred->has_address_in_map($map, $address)) { + my $obj = new IO::Adapter $map; + $obj->delete( $address ); + unless ($obj->error()) { + Log("removed $address from map=$map"); + } + else { + croak("fail to remove $address from map=$map"); + } + } + else { + LogWarn("no such user in map=$map"); + } + } +} + + +=head1 AUTHOR + +Ken'ichi Fukamachi + +=head1 COPYRIGHT + +Copyright (C) 2002 Ken'ichi Fukamachi + +All rights reserved. This program is free software; you can +redistribute it and/or modify it under the same terms as Perl itself. + +=head1 HISTORY + +FML::Command::UserControl appeared in fml5 mailing list driver package. +See C<http://www.fml.org/> for more details. + +=cut + + +1; |
