]> Dogcows Code - chaz/chatty/blobdiff - lib/Chatty/Controller/Root.pm
better client-side form validation; layout tweaks
[chaz/chatty] / lib / Chatty / Controller / Root.pm
index ab0bfcd8ee1e07d6f48e1cbad556553552f10e30..f526d4152aa3e4e2a76e19d866604573fc96b737 100644 (file)
@@ -10,6 +10,8 @@ BEGIN { extends 'Catalyst::Controller' }
 #
 __PACKAGE__->config(namespace => '');
 
+use JSON 'encode_json';
+
 use Chatty::Form::Login;
 use Chatty::Form::Register;
 
@@ -44,7 +46,9 @@ The root page (/)
 =cut
 
 sub index :Path :Args(0) {
-       my ( $self, $c ) = @_;
+       my ($self, $c) = @_;
+       $c->go('/chat/list') if ($c->user_exists);
+       $c->go('login');
 }
 
 =head2 login
@@ -68,13 +72,12 @@ sub login :Local :Args(0) {
                        $c->change_session_id;
                        my $user = $c->user->get('username');
                        $c->flash->{message} .= "Hi, $user! You are now logged in.";
-                       $c->response->redirect($c->uri_for('/'));
+                       $c->res->redirect($c->uri_for_action('index'));
+                       return;
                }
-               else {
-                       $c->flash->{error} = "Log-in failed! Try again, I guess.";
-                       $c->response->redirect($c->uri_for('login'));
-               }
-       }
+       };
+       $c->flash->{error} = "Log-in failed! Try again, I guess.";
+       $c->res->redirect($c->uri_for_action('login'));
 }
 
 =head2 logout
@@ -89,7 +92,7 @@ sub logout :Local :Args(0) {
                $c->logout;
                $c->flash->{message} = "Goodbye! You have been logged out.";
        }
-       $c->response->redirect($c->uri_for('/'));
+       $c->res->redirect($c->uri_for_action('index'));
 }
 
 =head2 register
@@ -109,12 +112,71 @@ sub register :Local :Args(0) {
                params  => $c->req->params
        );
 
-       return unless $self->register_form->is_valid;
+       if (!$self->register_form->is_valid) {
+               if ($c->req->method eq 'POST') {
+                       $c->stash->{error} = "The form has a validation error. Try again...";
+               }
+               return;
+       }
 
        $c->flash->{message} = "Registration complete. ";
        $c->forward('login');
 }
 
+=head2 register_validate
+
+Check whether or not a username is available.
+
+=cut
+
+sub register_validate :Local :Args(0) {
+       my ($self, $c) = @_;
+
+       my $id = $c->req->param('fieldId');
+       my $username = $c->req->param('fieldValue');
+
+       my $json_arr = [];
+
+       if ($username) {
+               my $account = $c->model('DB::Account')->find({username => $username});
+               if (!$account) {
+                       $json_arr = ["$id", 1, "This username is available. Nice!"];
+               }
+               else {
+                       $json_arr = ["$id", 0, "This username is taken."];
+               }
+       }
+       else {
+               $json_arr = ["$id", 0, "Invalid arguments to check script."];
+       }
+       $c->res->content_type("application/json");
+       $c->res->body(encode_json($json_arr));
+}
+
+=head2 access_denied
+
+Standard 403 error page
+
+=cut
+
+sub access_denied :Private {
+       my ($self, $c) = @_;
+       $c->res->body('Access denied.');
+       $c->res->status(403);
+}
+
+=head2 missing
+
+Standard 404 error page
+
+=cut
+
+sub missing :Private {
+       my ($self, $c) = @_;
+       $c->res->body('Page not found.');
+       $c->res->status(404);
+}
+
 =head2 default
 
 Standard 404 error page
@@ -123,8 +185,7 @@ Standard 404 error page
 
 sub default :Path {
        my ($self, $c) = @_;
-       $c->response->body('Page not found.');
-       $c->response->status(404);
+       $c->detach('missing');
 }
 
 =head2 end
This page took 0.020797 seconds and 4 git commands to generate.