diff options
-rw-r--r-- | modules/user/controllers/admin_users.php | 16 | ||||
-rw-r--r-- | modules/user/controllers/password.php | 12 | ||||
-rw-r--r-- | modules/user/controllers/users.php | 9 | ||||
-rw-r--r-- | modules/user/css/progressImg1.png | bin | 0 -> 390 bytes | |||
-rw-r--r-- | modules/user/css/user.css | 36 | ||||
-rw-r--r-- | modules/user/helpers/user_installer.php | 12 | ||||
-rw-r--r-- | modules/user/helpers/user_theme.php | 2 | ||||
-rw-r--r-- | modules/user/js/password_strength.js | 39 | ||||
-rw-r--r-- | modules/user/module.info | 2 | ||||
-rw-r--r-- | modules/user/views/user_form.html.php | 7 |
10 files changed, 122 insertions, 13 deletions
diff --git a/modules/user/controllers/admin_users.php b/modules/user/controllers/admin_users.php index 4d80521e..ac5dc33c 100644 --- a/modules/user/controllers/admin_users.php +++ b/modules/user/controllers/admin_users.php @@ -63,7 +63,9 @@ class Admin_Users_Controller extends Admin_Controller { } public function add_user_form() { - print $this->_get_user_add_form_admin(); + $v = new View("user_form.html"); + $v->form = $this->_get_user_add_form_admin(); + print $v; } public function delete_user($id) { @@ -156,12 +158,13 @@ class Admin_Users_Controller extends Admin_Controller { kohana::show_404(); } - $form = $this->_get_user_edit_form_admin($user); + $v = new View("user_form.html"); + $v->form = $this->_get_user_edit_form_admin($user); // Don't allow the user to control their own admin bit, else you can lock yourself out if ($user->id == identity::active_user()->id) { - $form->edit_user->admin->disabled(1); + $v->form->edit_user->admin->disabled(1); } - print $form; + print $v; } public function add_user_to_group($user_id, $group_id) { @@ -308,7 +311,6 @@ class Admin_Users_Controller extends Admin_Controller { $group->input("url")->label(t("URL"))->id("g-url")->value($user->url); $group->checkbox("admin")->label(t("Admin"))->id("g-admin")->checked($user->admin); $form->add_rules_from($user); - $form->edit_user->password->rules("-required"); module::event("user_edit_form_admin", $user, $form); $group->submit("")->value(t("Modify User")); @@ -330,6 +332,10 @@ class Admin_Users_Controller extends Admin_Controller { $group->checkbox("admin")->label(t("Admin"))->id("g-admin"); $form->add_rules_from(ORM::factory("user")); + $minimum_length = module::get_var("user", "mininum_password_length", 5); + $form->add_user->password + ->rules($minimum_length ? "length[$minimum_length, 40]" : "length[40]"); + module::event("user_add_form_admin", $user, $form); $group->submit("")->value(t("Add User")); return $form; diff --git a/modules/user/controllers/password.php b/modules/user/controllers/password.php index 477651bf..5f36b554 100644 --- a/modules/user/controllers/password.php +++ b/modules/user/controllers/password.php @@ -101,27 +101,29 @@ class Password_Controller extends Controller { if (!empty($hash)) { $hidden->value($hash); } - $group->password("password")->label(t("Password"))->id("g-password") - ->rules("required|length[1,40]"); + $minimum_length = module::get_var("user", "mininum_password_length", 5); + $input_password = $group->password("password")->label(t("Password"))->id("g-password") + ->rules($minimum_length ? "required|length[$minimum_length, 40]" : "length[40]"); $group->password("password2")->label(t("Confirm Password"))->id("g-password2") ->matches($group->password); $group->inputs["password2"]->error_messages( "mistyped", t("The password and the confirm password must match")); $group->submit("")->value(t("Update")); - $template->content = $form; + $template->content = new View("user_form.html"); + $template->content->form = $form; return $template; } private function _change_password() { $view = $this->_new_password_form(); - if ($view->content->validate()) { + if ($view->content->form->validate()) { $user = user::lookup_by_hash(Input::instance()->post("hash")); if (empty($user)) { throw new Exception("@todo FORBIDDEN", 503); } - $user->password = $view->content->reset->password->value; + $user->password = $view->content->form->reset->password->value; $user->hash = null; $user->save(); message::success(t("Password reset successfully")); diff --git a/modules/user/controllers/users.php b/modules/user/controllers/users.php index 28164e9c..7bcc74d7 100644 --- a/modules/user/controllers/users.php +++ b/modules/user/controllers/users.php @@ -63,7 +63,9 @@ class Users_Controller extends Controller { access::forbidden(); } - print $this->_get_edit_form($user); + $v = new View("user_form.html"); + $v->form = $this->_get_edit_form($user); + print $v; } private function _get_edit_form($user) { @@ -78,6 +80,11 @@ class Users_Controller extends Controller { $group->input("url")->label(t("URL"))->id("g-url")->value($user->url); $form->add_rules_from($user); + $minimum_length = module::get_var("user", "mininum_password_length", 5); + $form->edit_user->password + ->rules($minimum_length ? "length[$minimum_length, 40]" : "length[40]"); + + module::event("user_edit_form", $user, $form); $group->submit("")->value(t("Save")); return $form; diff --git a/modules/user/css/progressImg1.png b/modules/user/css/progressImg1.png Binary files differnew file mode 100644 index 00000000..a9093647 --- /dev/null +++ b/modules/user/css/progressImg1.png diff --git a/modules/user/css/user.css b/modules/user/css/user.css index 3b5e7ac2..67d4f196 100644 --- a/modules/user/css/user.css +++ b/modules/user/css/user.css @@ -54,3 +54,39 @@ li.g-group .g-user .g-button { li.g-default-group h4, li.g-default-group .g-user { color: gray; } + +.g-password-strength0 { + background: url(progressImg1.png) no-repeat 0 0; + width: 138px; + height: 7px; +} +.g-password-strength10 { + background-position:0 -7px; +} +.g-password-strength20 { + background-position:0 -14px; +} +.g-password-strength30 { + background-position:0 -21px; +} +.g-password-strength40 { + background-position:0 -28px; +} +.g-password-strength50 { + background-position:0 -35px; +} +.g-password-strength60 { + background-position:0 -42px; +} +.g-password-strength70 { + background-position:0 -49px; +} +.g-password-strength80 { + background-position:0 -56px; +} +.g-password-strength90 { + background-position:0 -63px; +} +.g-password-strength100 { + background-position:0 -70px; +} diff --git a/modules/user/helpers/user_installer.php b/modules/user/helpers/user_installer.php index cc8e71ea..9aad4130 100644 --- a/modules/user/helpers/user_installer.php +++ b/modules/user/helpers/user_installer.php @@ -80,7 +80,17 @@ class user_installer { access::allow($registered, "view", $root); access::allow($registered, "view_full", $root); - module::set_version("user", 1); + module::set_var("user", "mininum_password_length", 5); + + module::set_version("user", 2); + } + + static function upgrade($version) { + if ($version == 1) { + module::set_var("user", "mininum_password_length", 5); + + module::set_version("user", $version = 2); + } } static function uninstall() { diff --git a/modules/user/helpers/user_theme.php b/modules/user/helpers/user_theme.php index 191fd15a..31e2e8c0 100644 --- a/modules/user/helpers/user_theme.php +++ b/modules/user/helpers/user_theme.php @@ -20,9 +20,11 @@ class user_theme_Core { static function head($theme) { $theme->css("user.css"); + $theme->script("password_strength.js"); } static function admin_head($theme) { $theme->css("user.css"); + $theme->script("password_strength.js"); } }
\ No newline at end of file diff --git a/modules/user/js/password_strength.js b/modules/user/js/password_strength.js new file mode 100644 index 00000000..2442b8de --- /dev/null +++ b/modules/user/js/password_strength.js @@ -0,0 +1,39 @@ +(function($) { + // Based on the Password Strength Indictor By Benjamin Sterling + // http://benjaminsterling.com/password-strength-indicator-and-generator/ + $.widget("ui.user_password_strength", { + _init: function() { + var self = this; + $(this.element).keyup(function() { + var strength = self.calculateStrength (this.value); + var index = Math.min(Math.floor( strength / 10 ), 10); + $("#g-password-gauge") + .removeAttr('class') + .addClass( "g-password-strength0" ) + .addClass( self.options.classes[ index ] ); + }).after("<div id='g-password-gauge' class='g-password-strength0'></div>"); + }, + + calculateStrength: function(value) { + // Factor in the length of the password + var strength = Math.min(5, value.length) * 10 - 20; + // Factor in the number of numbers + strength += Math.min(3, value.length - value.replace(/[0-9]/g,"").length) * 10; + // Factor in the number of non word characters + strength += Math.min(3, value.length - value.replace(/\W/g,"").length) * 15; + // Factor in the number of Upper case letters + strength += Math.min(3, value.length - value.replace(/[A-Z]/g,"").length) * 10; + + // Normalizxe between 0 and 100 + return Math.max(0, Math.min(100, strength)); + } + }); + $.extend($.ui.user_password_strength, { + defaults: { + classes : ['g-password-strength10', 'g-password-strength20', 'g-password-strength30', + 'g-password-strength40', 'g-password-strength50', 'g-password-strength60', + 'g-password-strength70',' g-password-strength80',' g-password-strength90', + 'g-password-strength100'] + } + }); + })(jQuery); diff --git a/modules/user/module.info b/modules/user/module.info index 36a2179a..7178f108 100644 --- a/modules/user/module.info +++ b/modules/user/module.info @@ -1,6 +1,6 @@ name = "Users and Groups" description = "Gallery 3 user and group management" -version = 1 +version = 2 ; Don't show this module on the module administration screen no_module_admin = 1 diff --git a/modules/user/views/user_form.html.php b/modules/user/views/user_form.html.php new file mode 100644 index 00000000..039ae8a5 --- /dev/null +++ b/modules/user/views/user_form.html.php @@ -0,0 +1,7 @@ +<?php defined("SYSPATH") or die("No direct script access.") ?> +<script type="text/javascript"> + $("form").ready(function(){ + $('input[name="password"]').user_password_strength(); + }); +</script> +<?= $form ?> |