diff options
Diffstat (limited to 'modules/user')
-rw-r--r-- | modules/user/controllers/login.php | 45 | ||||
-rw-r--r-- | modules/user/controllers/logout.php | 4 | ||||
-rw-r--r-- | modules/user/controllers/user.php | 76 | ||||
-rw-r--r-- | modules/user/models/user.php | 5 | ||||
-rw-r--r-- | modules/user/views/login.html.php | 21 | ||||
-rw-r--r-- | modules/user/views/user.html.php | 34 |
6 files changed, 86 insertions, 99 deletions
diff --git a/modules/user/controllers/login.php b/modules/user/controllers/login.php index 7c70bb0f..a0e9f403 100644 --- a/modules/user/controllers/login.php +++ b/modules/user/controllers/login.php @@ -19,38 +19,29 @@ */ class Login_Controller extends Controller { public function 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() { - $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"); + $form = new Forge("login", "", "post", array("id" => "gLogin")); + $group = $form->group(_("Login")); + $group->input("name")->label(_("Name"))->id("gName")->class(null); + $group->password("password")->label(_("Password"))->id("gPassword")->class(null); + $group->submit(_("Login")); + $form->hidden("continue")->value($this->input->get("continue")); + $group->inputs["name"]->error_messages("invalid_login", _("Invalid name or password")); - $response = array(); if ($form->validate()) { - // Load the user - $user = ORM::factory("user")->where("name", $form->username->value)->find(); - if (!$user->loaded) { - $response["error_message"] = _("Invalid username or password"); - } else { - if (user::is_correct_password($user, $form->password->value)) { - user::login($user); - $response["error_message"] = ""; - } else { - $response["error_message"] = _("Invalid username or password"); + $user = ORM::factory("user")->where("name", $group->inputs["name"]->value)->find(); + if ($user->loaded && + user::is_correct_password($user, $group->password->value)) { + user::login($user); + $continue = $form->hidden["continue"]->value; + if ($continue) { + url::redirect($form->hidden["continue"]->value); } + return; + } else { + $group->inputs["name"]->add_error("invalid_login", 1); } - } else { - $response["error_message"] = _("Invalid username or password"); } - print json_encode($response); + print $form->render("form.html", false); } - }
\ No newline at end of file diff --git a/modules/user/controllers/logout.php b/modules/user/controllers/logout.php index 34f27fff..524c79f8 100644 --- a/modules/user/controllers/logout.php +++ b/modules/user/controllers/logout.php @@ -24,6 +24,8 @@ class Logout_Controller extends Controller { } catch (Exception $e) { Kohana::log("error", $e); } - print json_encode(array("logout" => true)); + if ($this->input->get("continue")) { + url::redirect($this->input->get("continue")); + } } }
\ No newline at end of file diff --git a/modules/user/controllers/user.php b/modules/user/controllers/user.php index 41cb9da5..a1085ae5 100644 --- a/modules/user/controllers/user.php +++ b/modules/user/controllers/user.php @@ -21,24 +21,58 @@ class User_Controller extends REST_Controller { protected $resource_type = "user"; /** + * Return the form for creating / modifying users. + */ + private function _get_form($user) { + $form = new Forge("user/{$user->id}", "", "post", array("id" => "gUser")); + $group = $form->group(_("User Info")); + $group->input("name") + ->label(_("Name")) + ->id("gName") + ->class(null) + ->value($user->name); + $group->input("display_name") + ->label(_("Display Name")) + ->id("gDisplayName") + ->class(null) + ->value($user->display_name); + $group->password("password") + ->label(_("Password")) + ->id("gPassword") + ->class(null); + $group->input("email") + ->label(_("Email")) + ->id("gEmail") + ->class(null) + ->value($user->email); + $group->submit(_("Modify")); + $form->hidden("continue")->value($this->input->get("continue")); + + $this->_add_validation_rules(ORM::factory("user")->validation_rules, $form); + + return $form; + } + + /** + * @todo Refactor this into a more generic location + */ + private function _add_validation_rules($rules, $form) { + foreach ($form->inputs as $name => $input) { + if (isset($input->inputs)) { + $this->_add_validation_rules($rules, $input); + } + if (isset($rules[$name])) { + $input->rules($rules[$name]); + } + } + } + + /** * @see Rest_Controller::_get($resource) */ public function _get($user) { - $userView = new View("user.html"); - if (empty($user)) { - // @todo remove this when rest_controller is changed to handle a post with no id - $user = ORM::factory("user"); - $user->save(); - // @todo remove this when rest_controller is changed to handle a post with no id ^ - $userView->user_id = $user->id; - $userView->action = _("User Registration"); - $userView->button_text = _("Register"); - } else { - $userView->user_id = $user->id; - $userView->action = _("User Modify"); - $userView->button_text = _("Modify"); - } - print $userView; + $form = $this->_get_form($user); + print $form->render("form.html", false); } /** @@ -51,7 +85,17 @@ class User_Controller extends REST_Controller { /** * @see Rest_Controller::_post($resource) */ - public function _post($resource) { + public function _post($user) { + $form = $this->_get_form($user); + if ($form->validate()) { + // @todo if we use the Validation class here, the ORM can just read the inputs directly. We + // need to investigate that. + // + // @todo + // Verify the user input, store it in the object. + // Show errors on validation failure. + // On success, redirect if there's a form->continue, else show an empty page. + } throw new Exception("@todo User_Controller::_post NOT IMPLEMENTED"); } diff --git a/modules/user/models/user.php b/modules/user/models/user.php index b09af033..1c56b34e 100644 --- a/modules/user/models/user.php +++ b/modules/user/models/user.php @@ -20,6 +20,11 @@ class User_Model extends ORM { protected $has_and_belongs_to_many = array("groups"); + var $validation_rules = array( + "name" => "required|length[4,32]", + "email" => "valid_email", + "password" => "required|length[5,40]"); + public function __set($column, $value) { switch ($column) { case "password": diff --git a/modules/user/views/login.html.php b/modules/user/views/login.html.php deleted file mode 100644 index 78e03b46..00000000 --- a/modules/user/views/login.html.php +++ /dev/null @@ -1,21 +0,0 @@ -<? defined("SYSPATH") or die("No direct script access."); ?> -<form id="gLogin" action="<?= url::site("login/process") ?>"> - <fieldset> - <legend><?= _("Login") ?></legend> - <ul> - <li> - <label for="gUsername"><?= _("Username") ?></label> - <input type="text" name="username" id="gUsername" /> - </li> - <li> - <label for="gPassword"><?= _("Password") ?></label> - <input type="password" name="password" id="gPassword" /> - </li> - <li> - <input type="submit" value="<?= _("Login")?>" /> - </li> - </ul> - <div id="gLoginMessage" class="gStatus gError gDisplayNone"> - </div> - </fieldset> -</form> diff --git a/modules/user/views/user.html.php b/modules/user/views/user.html.php deleted file mode 100644 index 614645e5..00000000 --- a/modules/user/views/user.html.php +++ /dev/null @@ -1,34 +0,0 @@ -<? defined("SYSPATH") or die("No direct script access."); ?> -<form id="gUser" action="<?= url::site("user/dispatch/$user_id") ?>"> - <fieldset> - <legend><?= $action ?></legend> - <ul> - <li> - <label for="gUsername"><?= _("Username") ?></label> - <input type="text" id="gUsername" /> - <span id="gUsername_error" class="gStatus gError gDisplayNone"></span> - </li> - <li> - <label for="gPassword"><?= _("Password") ?></label> - <input type="password" id="gPassword" /> - <span id="gPassword_error" class="gStatus gError gDisplayNone"></span> - </li> - <li> - <label for="gPassword_confirm"><?= _("Confirm Password") ?></label> - <input type="password" id="gPassword_confirm" /> - </li> - <li> - <label for="gEmail"><?= _("Password") ?></label> - <input type="password" id="gEmail" /> - <span id="gEmail_error" class="gStatus gError gDisplayNone"></span> - </li> - <li> - <label for="gEmail_confirm"><?= _("Confirm Email") ?></label> - <input type="password" id="gEmaild_confirm" /> - </li> - <li> - <input type="submit" value="<?=$button_text?>" /> - </li> - </ul> - </fieldset> -</form> |