Siesta
view release on metacpan or search on metacpan
lib/Siesta/List.pm view on Meta::CPAN
use base 'Siesta::DBI';
use Carp qw( croak );
use POSIX qw( strftime );
__PACKAGE__->set_up_table('list');
__PACKAGE__->load_alias('name');
__PACKAGE__->has_a( owner => 'Siesta::Member' );
__PACKAGE__->has_many( members => [ 'Siesta::Subscription' => 'member' ] );
# this is a bit funny, never mind
__PACKAGE__->has_many( _plugins => 'Siesta::Plugin', 'list',
{ sort => 'rank' } );
=head1 NAME
Siesta::List - manipulate a list
=head1 METHODS
=head2 ->new ( %hash )
=cut
sub new { shift->create({ @_ }) }
=head2 ->name
the short name of the list
=head2 ->owner
the owner (a Siesta::Member)
=head2 ->post_address
the email address that people post to send to this list.
=cut
# the address to use to post to pipline $foo
sub address {
my $self = shift;
my $pipeline = shift;
# XXX - hacky
my $address = $self->post_address;
return $address if !$pipeline || $pipeline eq 'post';
$address =~ s/\@/-$pipeline\@/;
return $address;
}
=head2 ->return_path
the email address that bounces should come back to
=head2 ->members
all of the L<Siesta::Member>s subscribed to this list
=head2 ->prefs
all of the preferences associated with this list
=head2 ->is_member( $member )
Returns true or false depending if member is a member of this
list. This can take either a Member object or an email address.
=cut
sub is_member {
my $self = shift;
my $member = shift;
$member = Siesta::Member->load( $member ) unless ref $member;
return unless $member;
Siesta::Subscription->search( member => $member, list => $self );
}
=head2 ->add_member( $member )
Adds a member to a list. This can take either a Member object
or an email address.
=cut
sub add_member {
my $self = shift;
my $member = shift;
$member = Siesta::Member->find_or_create({ email => $member })
unless ref $member;
return if $self->is_member( $member );
Siesta::Subscription->create({ member => $member, list => $self });
}
=head2 ->remove_member( $member )
Removes a member from a list. This can take either a Member
object or an email address.
=cut
sub remove_member {
my $self = shift;
my $member = shift;
$member = Siesta::Member->load( $member ) unless ref $member;
return unless $member;
my ($record) = Siesta::Subscription->search( member => $member,
list => $self );
return unless $record;
$record->delete;
return 1;
}
=head2 ->members
( run in 1.044 second using v1.01-cache-2.11-cpan-98e64b0badf )