summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfukachan <fukachan>2002-03-19 10:12:44 +0000
committerfukachan <fukachan>2002-03-19 10:12:44 +0000
commit31c70b1e3cd0d7f800386fc61bbf6ac552fec24b (patch)
tree8aa584c82973b9ab1b84c7085fbe2a8b0e1c5cd5
parent3329f6529d627b784c80d2268453a993e923c4c0 (diff)
downloadfml8-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.pm39
-rw-r--r--fml/lib/FML/Command/Admin/unsubscribe.pm29
-rw-r--r--fml/lib/FML/Command/UserControl.pm128
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;