MojoMojo
view release on metacpan or search on metacpan
lib/MojoMojo/Controller/User.pm view on Meta::CPAN
$c->stash->{template} ||= "user/login.tt";
}
=head2 logout ( /.logout )
Log out the user.
=cut
sub logout : Global {
my ( $self, $c ) = @_;
$c->logout;
undef $c->stash->{user};
$c->response->redirect( $c->uri_for('view') );
}
=head2 users ( /.users )
Show a list of the active users with links to the pages they edited.
=cut
sub users : Global {
my ( $elf, $c ) = @_;
my $res = $c->model("DBIC::Person")->search(
{ active => 1 },
{
page => $c->req->param('page') || 1,
rows => 20,
order_by => 'login'
}
);
$c->stash->{users} = $res;
$c->stash->{pager} = $res->pager;
$c->stash->{template} = 'user/list.tt';
}
=head2 page_user
Show a user's preferences
=cut
sub page_user : Private {
my ( $self, $c ) = @_;
my $user = $c->stash->{user};
my $login = (
$c->stash->{proto_pages}[-1]
? $c->stash->{proto_pages}[-1]->{name} # FIXME: why not ->{name_orig}, like in editprofile() ?
: $c->stash->{page}->name
);
my $page_user = $c->model("DBIC::Person")->get_user($login);
if (
$page_user
&& $user
&& ( $page_user->id eq $user->id || $user->is_admin() )
)
{
$c->stash->{template} = 'user/prefs.tt';
$c->stash->{page_user} = $page_user;
}
else {
$c->stash->{message} = $c->loc('User not found: x', $login);
$c->stash->{template} = 'message.tt';
}
}
=head2 prefs ( .prefs )
Main user preferences screen.
=cut
sub prefs : Global FormConfig {
my ( $self, $c ) = @_;
my $form = $c->stash->{form};
$c->forward('page_user');
my $page_user = $c->stash->{page_user};
$form->model->default_values( $c->stash->{user} );
if ( $form->submitted_and_valid ) {
my $old_email = $page_user->email;
$form->model->update($page_user);
$c->stash->{message} = $c->loc('Updated preferences');
if ( $form->params->{email} ne $old_email ) {
$page_user->active(-1);
$page_user->update;
$c->forward( 'do_register', [$page_user] );
}
}
}
=head2 password ( .prefs/password )
Change password action.
B<template:> user/password.tt
=cut
sub password : Path('/prefs/password') FormConfig {
my ( $self, $c ) = @_;
$c->forward('page_user');
my $page_user = $c->stash->{page_user};
my $form = $c->stash->{form};
if ( $form->submitted_and_valid ) {
# FIXME: Should be moved into a formfu validator
unless ( $page_user->valid_pass( $form->params->{current} ) ) {
$c->stash->{message} = $c->loc('Invalid password');
return;
}
$page_user->pass( $form->params->{pass} );
$page_user->update();
$c->stash->{message} = $c->loc('Your password has been updated');
}
}
=head2 recover_pass
Email a user a new password
=cut
sub recover_pass : Global {
my ( $self, $c ) = @_;
return unless ( $c->req->method eq 'POST' );
my $id = $c->req->param('recover');
my $user =
$c->model('DBIC::Person')->search( [ email => $id, login => $id ] )
->first;
unless ( $user ) {
$c->flash->{message} = $c->loc('Could not recover password');
return $c->res->redirect( $c->uri_for('login') );
}
$c->stash(
user => $user,
password => Text::Password::Pronounceable->generate(6, 10),
email => {
from => $c->config->{system_mail},
to => $user->login . ' <' . $user->email . '>',
subject => $c->loc('Your new password on x', $c->pref('name')),
template => 'reset_password.tt',
},
);
$c->forward( $c->view('Email') );
if ( scalar( @{ $c->error } ) ) {
$c->clear_errors;
$c->stash->{message} =
$c->loc('Error occurred while emailing you your new password.');
}
else {
$user->pass( $c->stash->{password} );
$user->update();
$c->flash->{message} = $c->loc('Emailed you your new password.');
return $c->res->redirect( $c->uri_for('login') );
}
}
( run in 2.015 seconds using v1.01-cache-2.11-cpan-8f98c5d2c55 )