use warnings; use strict; =head1 NAME Jifty::Plugin::Authentication::Password::Action::SendAccountConfirmation - send confirmation for an email =cut package Jifty::Plugin::Authentication::Password::Action::SendAccountConfirmation; use base qw/Jifty::Action/; __PACKAGE__->mk_accessors(qw(user_object)); =head2 arguments The field for C is: =over 4 =item address: the email address =back =cut sub arguments { return ( { address => { label => _('email address'), mandatory => 1, default_value => "", }, } ); } =head2 setup Create an empty user object to work with =cut sub setup { my $self = shift; my $LoginUser = Jifty->app_class('Model', 'User'); my $CurrentUser = Jifty->app_class('CurrentUser'); $self->user_object( $LoginUser->new( current_user => $CurrentUser->superuser ) ); } =head2 validate_address Make sure their email address is an unconfirmed user. =cut sub validate_address { my $self = shift; my $email = shift; my $LoginUser = Jifty->app_class('Model', 'User'); my $CurrentUser = Jifty->app_class('CurrentUser'); return $self->validation_error( address => _("That doesn't look like an email address.") ) unless ( $email =~ /\S\@\S/ ); $self->user_object( $LoginUser->new( current_user => $CurrentUser->superuser ) ); $self->user_object->load_by_cols( email => $email ); return $self->validation_error( address => _("It doesn't look like there's an account by that name.") ) unless ( $self->user_object->id ); return $self->validation_error( address => _("It looks like you're already confirmed.") ) if ( $self->user_object->email_confirmed ); return $self->validation_ok('address'); } =head2 take_action Create a new unconfirmed user and send out a confirmation email. =cut sub take_action { my $self = shift; Jifty::Plugin::Authentication::Password::Notification::ConfirmAddress->new( to => $self->user_object )->send; return $self->result->message(_("Confirmation resent.")); } 1;