Use formhandler for forms. WIP.

Needs adaptions to stylesheets to format error messages properly.
agranig/1_0_subfix
Andreas Granig 12 years ago
parent 76e9d458d4
commit be3a9f6521

@ -4,6 +4,8 @@ use Moose;
use namespace::autoclean;
BEGIN { extends 'Catalyst::Controller'; }
use NGCP::Panel::Form::Login;
=head1 NAME
NGCP::Panel::Controller::Login - Catalyst Controller
@ -28,11 +30,16 @@ sub index :Path Form {
$realm = 'subscriber'
unless($realm and ($realm eq 'admin' or $realm eq 'reseller'));
my $user = $c->request->param('username');
my $pass = $c->request->param('password');
$c->log->debug("*** Login::index user=$user, pass=$pass, realm=$realm");
my $form = NGCP::Panel::Form::Login->new;
$form->process(
posted => ($c->req->method eq 'POST'),
params => $c->request->params,
);
if($user && $pass) {
if($form->validated) {
print ">>>>>> login form validated\n";
my $user = $form->field('username');
my $pass = $form->field('password');
$c->log->debug("*** Login::index user=$user, pass=$pass, realm=$realm");
if($c->authenticate({ username => $user, password => $pass }, $realm)) {
# auth ok
@ -44,12 +51,14 @@ sub index :Path Form {
$c->log->debug("*** Login::index auth failed");
$c->stash->{error}->{message} = 'login failed';
}
} elsif($c->req->method eq 'POST') {
print ">>>>>> login form NOT validated\n";
$c->stash->{error}->{message} = 'invalid form';
} else {
if($user || $pass) {
$c->stash->{error}->{message} = 'invalid form';
}
# initial get
}
$c->stash(form => $form);
$c->stash(realm => $realm);
$c->stash(template => 'login.tt');
}

@ -0,0 +1,35 @@
package NGCP::Panel::Form::Login;
use HTML::FormHandler::Moose;
extends 'HTML::FormHandler';
use Moose::Util::TypeConstraints;
has_field 'username' => (
type => 'Text',
required => 1,
element_attr => { placeholder => 'Username' },
element_class => [qw/login username-field/],
wrapper_class => [qw/field/],
error_class => [qw/foobar error/],
messages => {
required => 'Please provide a username'
},
);
has_field 'password' => (
type => 'Password',
required => 1,
element_attr => { placeholder => 'Password' },
element_class => [qw/login password-field/],
wrapper_class => [qw/field/],
error_class => [qw/foobar error/],
messages => {
required => 'Please provide a password'
},
);
1;
# vim: set tabstop=4 expandtab:

@ -1,4 +1,10 @@
<body class="login">
<!--
[%
USE Dumper;
Dumper.dump(form);
%]
-->
[% IF error.message -%]
<div class="alert alert-error">
<span>[% error.message -%]</span>
@ -6,25 +12,16 @@
[% END -%]
<div class="account-container login stacked">
<div class="content clearfix">
<form method="post" action="[% c.uri_for("/login/$realm") %]" novalidate="novalidate">
<form method="post" action="[% c.uri_for("/login/$realm") %]">
<h1>Sign In</h1>
<div class="login-fields">
<p>Sign in with your [% realm %] credentials:</p>
<div class="field">
<label for="username">Username:</label>
<input type="text" id="username" name="username" value="" placeholder="Username" class="login username-field" />
</div>
<div class="field">
<label for="password">Password:</label>
<input type="password" id="password" name="password" value="" placeholder="Password" class="login password-field"/>
</div>
[% FOREACH f IN form.sorted_fields -%]
[% f.render -%]
[% END -%]
</div>
<div class="login-actions">
<span class="login-checkbox">
<input id="Field" name="Field" type="checkbox" class="field login-checkbox" value="First Choice" tabindex="4" />
<label class="choice" for="Field">Keep me signed in</label>
</span>
<button class="button btn btn-primary btn-large">Sign In</button>
<button id="submit" name="submit" class="button btn btn-primary btn-large">Sign In</button>
</div>
</form>
</div>

Loading…
Cancel
Save