use warnings;
use strict;
=head1 NAME
Jifty::Plugin::Authentication::Password::Action::Signup - signup for an account
=cut
package Jifty::Plugin::Authentication::Password::Action::Signup;
our @ISA;
{
my $class = Jifty->app_class('Action', 'CreateUser');
push @ISA, $class;
}
=head2 arguments
The fields for C<Signup> are:
=over 4
=item email: the email address
=item password and password_confirm: the requested password
=item name: your full name
=back
=cut
sub arguments {
my $self = shift;
my $args = $self->SUPER::arguments();
my %fields = (
name => 1,
email => 1,
password => 1,
password_confirm => 1,
);
for (keys %$args){
delete $args->{$_} unless $fields{$_};
}
$args->{'email'}{'ajax_validates'} = 1;
$args->{'email'}{'mandatory'} = 1;
$args->{'name'}{'ajax_validates'} = 1;
$args->{'password_confirm'}{'label'} = _("Type that again?");
return $args;
}
=head2 validate_email
Make sure their email address looks sane
=cut
sub validate_email {
my $self = shift;
my $email = shift;
my $LoginUser = Jifty->app_class('Model', 'User');
my $CurrentUser = Jifty->app_class('CurrentUser');
return $self->validation_error( email => _("That doesn't look like an email address.") ) unless ( $email =~ /\S\@\S/ );
my $u = $LoginUser->new( current_user => $CurrentUser->superuser );
$u->load_by_cols( email => $email );
if ( $u->id ) {
return $self->validation_error( email => _('It looks like you already have an account. Perhaps you want to <a href="/login">log in</a> instead?')
);
}
return $self->validation_ok('email');
}
=head2 take_action
Overrides the virtual C<take_action> method on L<Jifty::Action> to call
the appropriate C<Jifty::Record>'s C<create> method when the action is
run, thus creating a new object in the database.
Makes sure that the user only specifies things we want them to.
=cut
sub take_action {
my $self = shift;
my $LoginUser = Jifty->app_class('Model', 'User');
my $CurrentUser = Jifty->app_class('CurrentUser');
my $record = $LoginUser->new( current_user => $CurrentUser->superuser );
my %values;
$values{$_} = $self->argument_value($_) for grep {
defined $self->record->column($_) and defined $self->argument_value($_)
} $self->argument_names;
my ($id, $msg) = $record->create(%values);
# Handle errors?
unless ( $record->id ) {
$self->result->error( _("Something bad happened and we couldn't create your account: %1", $msg).' '. _("Try again later. We're really, really sorry.")
);
return;
}
$self->result->message( _("Welcome to %1, %2.", Jifty->config->framework('ApplicationName'), $record->name)
. ' ' . _("We've sent a confirmation message to your email box.") );
return 1;
}
1;