summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Almdal <tnalmdal@shaw.ca>2008-11-12 21:42:40 +0000
committerTim Almdal <tnalmdal@shaw.ca>2008-11-12 21:42:40 +0000
commit74216a3c636673fd49e82a7c31c0c9ed1de60e7f (patch)
treea09449d8944175fc9a612bf207d350c98572de5a
parent2a9f8b5bcd6de819e461583bde1641aad3055d27 (diff)
The login processing is starting to take shape. Login_Form is gone. The html for the login form is retrieve via an ajax call when the user clicks on login. Can't login with a valid id yet, but you certainly get error messages when things are wrong :-)
-rw-r--r--modules/user/controllers/login.php29
-rw-r--r--modules/user/libraries/Login_Form.php44
-rw-r--r--modules/user/views/login.html.php41
-rw-r--r--themes/default/css/screen.css6
-rw-r--r--themes/default/js/login.js37
-rw-r--r--themes/default/views/header.html.php3
6 files changed, 83 insertions, 77 deletions
diff --git a/modules/user/controllers/login.php b/modules/user/controllers/login.php
index e6f10ec8..991fa73b 100644
--- a/modules/user/controllers/login.php
+++ b/modules/user/controllers/login.php
@@ -19,24 +19,41 @@
*/
class Login_Controller extends Controller {
public function index() {
- $this->template->title = "User Login";
+ Kohana::log("debug", "Login_Controller/index");
+ $form = new Forge();
+ $form->input("username")->rules("required|length[4,32]");
+ $form->password("password")->rules("required|length[5,40]");
+ $form->submit("Login");
+ print $form->render("login.html", true);
+ }
+
+ public function process() {
+ Kohana::log("debug", "Login_Controller/process");
- $form = new Login_Form();
+ Kohana::log("debug", print_r($_POST, true));
+ $form = new Forge("login.html", true);
+ $form->input("username")->rules("required|length[4,32]");
+ $form->password("password")->rules("required|length[5,40]");
+ $form->submit("Login");
+ $response = array();
if ($form->validate()) {
// Load the user
$user = ORM::factory("user")->where("name", $form->username->value)->find();
if (!$user->loaded) {
- $form->error_message = "Invalid username or password";
+ $response["error_message"] = "Invalid username or password";
} else {
if (user::is_correct_password($user,$form->password->value)) {
user::login($user);
- url::redirect("user/success.html");
+ $response["error_message"] = "";
} else {
- $form->error_message = "Invalid username or password";
+ $response["error_message"] = "Invalid username or password";
}
}
+ } else {
+ $response["error_message"] = "Invalid username or password";
}
- $form->render();
+
+ print json_encode($response);
}
} \ No newline at end of file
diff --git a/modules/user/libraries/Login_Form.php b/modules/user/libraries/Login_Form.php
deleted file mode 100644
index 6874cbd4..00000000
--- a/modules/user/libraries/Login_Form.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php defined("SYSPATH") or die("No direct script access.");
-/**
- * Gallery - a web based photo album viewer and editor
- * Copyright (C) 2000-2008 Bharat Mediratta
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
- */
-class Login_Form_Core extends Forge {
- protected $error_message;
-
- public static function factory() {
- return new Login_Form();
- }
-
- public function __construct() {
- parent::__construct("login.html");
- $this->legend="Login";
- $this->input("username")->rules("required|length[4,32]");
- $this->password("password")->rules("required|length[5,40]");
- $this->submit("Login");
- }
-
- public function render($template = 'login.html', $custom = true) {
- $form = parent::render($template, $custom);
- $form->error_message = $this->error_message;
- return $form;
- }
-
- public function __set($key, $value) {
- $this->$key = $value;
- }
-} \ No newline at end of file
diff --git a/modules/user/views/login.html.php b/modules/user/views/login.html.php
index 58df6024..fb770f3f 100644
--- a/modules/user/views/login.html.php
+++ b/modules/user/views/login.html.php
@@ -1,24 +1,23 @@
<? defined("SYSPATH") or die("No direct script access."); ?>
-<fieldset id="gLogin">
- <legend>Login</legend>
- <ul>
- <li>
- <label for="username">Username</label>
- <input type="text" class="text" id="username" />
- </li>
- <li>
- <label for="password">Password</label>
- <input type="password" class="password" id="password" />
- </li>
- <li>
- <input type="submit" class="submit" value="<?= _("Login")?>" />
- </li>
- <? if (!empty($error_message)): ?>
+<form id="gLogin" action="<?= url::site("login/process") ?>">
+ <fieldset>
+ <legend>Login</legend>
+ <ul>
<li>
- <p class="error" id="login_message">
- <?= $error_message ?>
- </p>
+ <label for="username">Username</label>
+ <input type="text" id="gUsername" />
</li>
- <? endif;?>
- </ul>
-</fieldset>
+ <li>
+ <label for="password">Password</label>
+ <input type="password" id="gPassword" />
+ </li>
+ <li>
+ <input type="submit" class="submit" value="<?= _("Login")?>" />
+ </li>
+ </ul>
+ </fieldset>
+ <fieldset>
+ <div class="gStatus gError gDisplayNone" id="gLoginMessage">
+ </div>
+ </fieldset>
+</form>
diff --git a/themes/default/css/screen.css b/themes/default/css/screen.css
index 5e37e8e9..a00ed05a 100644
--- a/themes/default/css/screen.css
+++ b/themes/default/css/screen.css
@@ -272,7 +272,7 @@ table.gMetadata td.toggle {
}
.gError {
-
+ color: red;
}
.gWarning {
@@ -392,8 +392,8 @@ table.gMetadata td.toggle {
list-style-type: none;
}
-#gLoginMenu li input.text,
-#gLoginMenu li input.password {
+#gLoginMenu li input#gUsername,
+#gLoginMenu li input#gPassword {
padding: 0 0 .1em 0;
width: 80px;
}
diff --git a/themes/default/js/login.js b/themes/default/js/login.js
index a598f39a..6c017a47 100644
--- a/themes/default/js/login.js
+++ b/themes/default/js/login.js
@@ -1,11 +1,46 @@
+$(document).ready(function() {
+ $("#gLoginForm").submit(function() {
+ process_login();
+ return false;
+ });
+});
+
function show_login() {
$("#gLoginLink").css({display: "none"});
- $("#gLoginForm").css({display: "block"});
$("#gLoginClose").css({display: "inline"});
+ var url = $("#gLoginForm").attr("formSrc");
+ $.get(url, null, function(data, textStatus) {
+ $("#gLoginForm").html(data);
+ $("#gLoginForm").css({display: "block"});
+ });
}
function close_login() {
$("#gLoginLink").css({display: "inline"});
$("#gLoginForm").css({display: "none"});
+ $("#gLoginForm").html("");
$("#gLoginClose").css({display: "none"});
+ $("input#gUsername").val("");
+ $("input#gPassword").val("");
+}
+
+function process_login() {
+ var username = $("input#gUsername").val();
+ var password = $("input#gPassword").val();
+ var data = 'username=' + username + '&password=' + password;
+ $.ajax({
+ url: $("#gLogin").attr("action"),
+ type: "POST",
+ data: data,
+ dataType: "json",
+ error: function(XMLHttpRequest, textStatus, errorThrown) {
+ alert("textStatus: " + textStatus + "\nerrorThrown: " + errorThrown);
+ },
+ success: function(data, textStatus) {
+ if (data.error_message != "") {
+ $("#gLoginMessage").html(data.error_message);
+ $("#gLoginMessage").css({display: "block"});
+ }
+ }
+ });
} \ No newline at end of file
diff --git a/themes/default/views/header.html.php b/themes/default/views/header.html.php
index ba16a5fb..52c3992b 100644
--- a/themes/default/views/header.html.php
+++ b/themes/default/views/header.html.php
@@ -16,8 +16,7 @@
<?= _("Login") ?> | <a href="javascript:close_login()">X</a>
</span>
<? endif; ?>
- <span id="gLoginForm" class="gDisplayNone" >
- <?= Login_Form::factory() ?>
+ <span id="gLoginForm" class="gDisplayNone" formSrc="<?= url::site("login") ?>" >
</span>
</div>
<ul id="gSiteMenu">