From 736d74d05f70be5b72e44eafe2cc8efae52b0af7 Mon Sep 17 00:00:00 2001 From: Bharat Mediratta Date: Mon, 16 Mar 2009 04:33:45 +0000 Subject: Clean up the login, maintenance login and required-top-level-login code. We now have two clear and separate login approaches: login/ajax login/html Choose the one that's appropriate. Totally simplified the maintenance page to be separate from the theme and dead simple, and use login/html approach there. Totally simplified the top level login (login_page.html.php) to just be a login page, not the rest of the chrome on the page and use the login/ajax approach there. Don't use access::required in albums and then catch the exception, instead use access::can and check the return code. Improve the text for maintenance mode. --- modules/user/controllers/login.php | 58 ++++++++++++++++---------------- modules/user/helpers/user.php | 10 ++++++ modules/user/views/login.html.php | 2 +- modules/user/views/login_prompt.html.php | 44 ------------------------ 4 files changed, 40 insertions(+), 74 deletions(-) delete mode 100644 modules/user/views/login_prompt.html.php (limited to 'modules') diff --git a/modules/user/controllers/login.php b/modules/user/controllers/login.php index 62420ab1..12301ce5 100644 --- a/modules/user/controllers/login.php +++ b/modules/user/controllers/login.php @@ -18,23 +18,41 @@ * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ class Login_Controller extends Controller { - public function index() { - if (request::method() == "post") { - $this->_try_login(); + + public function ajax() { + $view = new View("login_ajax.html"); + $view->form = user::get_login_form("login/auth_ajax"); + print $view; + } + + public function auth_ajax() { + list ($valid, $form) = $this->_auth(); + if ($valid) { + print json_encode( + array("result" => "success", + "location" => url::site(""))); } else { - print $this->_login_form(); + print json_encode( + array("result" => "error", + "form" => $form->__toString())); } } - public function page() { - $view = new Theme_View("login_page.html"); - $view->page_type = "login"; - print $view; + public function html() { + print user::get_login_form("login/auth_html"); } - private function _try_login() { - $form = $this->_login_form()->form; + public function auth_html() { + list ($valid, $form) = $this->_auth(); + if ($valid) { + url::redirect("albums/1"); + } else { + print $form; + } + } + private function _auth() { + $form = user::get_login_form(); $valid = $form->validate(); if ($valid) { $user = ORM::factory("user")->where("name", $form->login->inputs["name"]->value)->find(); @@ -49,26 +67,8 @@ class Login_Controller extends Controller { if ($valid) { user::login($user); log::info("user", t("User %name logged in", array("name" => $user->name))); - print json_encode( - array("result" => "success", - "location" => url::site(""))); - } else { - print json_encode( - array("result" => "error", - "form" => $form->__toString())); } - } - - private function _login_form() { - $view = new View("login_prompt.html"); - - $view->form = new Forge(url::current(true), "", "post", array("id" => "gLoginForm")); - $group = $view->form->group("login")->label(t("Login")); - $group->input("name")->label(t("Name"))->id("gName")->class(null); - $group->password("password")->label(t("Password"))->id("gPassword")->class(null); - $group->inputs["name"]->error_messages("invalid_login", t("Invalid name or password")); - $group->submit("")->value(t("Login")); - return $view; + return array($valid, $form); } } \ No newline at end of file diff --git a/modules/user/helpers/user.php b/modules/user/helpers/user.php index a15fa463..dbb9b613 100644 --- a/modules/user/helpers/user.php +++ b/modules/user/helpers/user.php @@ -99,6 +99,16 @@ class user_Core { return $form; } + static function get_login_form($url) { + $form = new Forge($url, "", "post", array("id" => "gLoginForm")); + $group = $form->group("login")->label(t("Login")); + $group->input("name")->label(t("Name"))->id("gName")->class(null); + $group->password("password")->label(t("Password"))->id("gPassword")->class(null); + $group->inputs["name"]->error_messages("invalid_login", t("Invalid name or password")); + $group->submit("")->value(t("Login")); + return $form; + } + /** * Make sure that we have a session and group_ids cached in the session. */ diff --git a/modules/user/views/login.html.php b/modules/user/views/login.html.php index d06f2a45..27373f02 100644 --- a/modules/user/views/login.html.php +++ b/modules/user/views/login.html.php @@ -1,7 +1,7 @@