diff options
Diffstat (limited to 'mod/uservalidationbyemail')
12 files changed, 337 insertions, 280 deletions
diff --git a/mod/uservalidationbyemail/actions/delete.php b/mod/uservalidationbyemail/actions/delete.php index 14d40e89c..b076d3048 100644 --- a/mod/uservalidationbyemail/actions/delete.php +++ b/mod/uservalidationbyemail/actions/delete.php @@ -25,9 +25,8 @@ foreach ($user_guids as $guid) { } // don't delete validated users - $is_validated = uservalidationbyemail_get_user_validation_status($guid); - - if ($is_validated || !$user->delete()) { + $is_validated = elgg_get_user_validation_status($guid); + if ($is_validated !== FALSE || !$user->delete()) { $error = TRUE; continue; } diff --git a/mod/uservalidationbyemail/actions/resend_validation.php b/mod/uservalidationbyemail/actions/resend_validation.php index 70c2244b9..586509b13 100644 --- a/mod/uservalidationbyemail/actions/resend_validation.php +++ b/mod/uservalidationbyemail/actions/resend_validation.php @@ -25,9 +25,8 @@ foreach ($user_guids as $guid) { } // don't resend emails to validated users - $is_validated = uservalidationbyemail_get_user_validation_status($guid); - - if ($is_validated || !uservalidationbyemail_request_validation($guid)) { + $is_validated = elgg_get_user_validation_status($guid); + if ($is_validated !== FALSE || !uservalidationbyemail_request_validation($guid, true)) { $error = TRUE; continue; } diff --git a/mod/uservalidationbyemail/actions/validate.php b/mod/uservalidationbyemail/actions/validate.php index cc4554722..d6be9cfe5 100644 --- a/mod/uservalidationbyemail/actions/validate.php +++ b/mod/uservalidationbyemail/actions/validate.php @@ -25,10 +25,10 @@ foreach ($user_guids as $guid) { } // only validate if not validated - $is_validated = uservalidationbyemail_get_user_validation_status($guid); - $validate_success = uservalidationbyemail_set_user_validation_status($guid, TRUE); + $is_validated = elgg_get_user_validation_status($guid); + $validate_success = elgg_set_user_validation_status($guid, TRUE, 'manual'); - if ($is_validated || !($validate_success && $user->enable())) { + if ($is_validated !== FALSE || !($validate_success && $user->enable())) { $error = TRUE; continue; } diff --git a/mod/uservalidationbyemail/languages/en.php b/mod/uservalidationbyemail/languages/en.php index 31dec24a3..df576a0e0 100644 --- a/mod/uservalidationbyemail/languages/en.php +++ b/mod/uservalidationbyemail/languages/en.php @@ -7,6 +7,8 @@ */ $english = array( + 'admin:users:unvalidated' => 'Unvalidated', + 'email:validate:subject' => "%s please confirm your email address for %s!", 'email:validate:body' => "%s, @@ -25,6 +27,7 @@ If you can't click on the link, copy and paste it to your browser manually. 'email:confirm:fail' => "Your email address could not be verified...", 'uservalidationbyemail:registerok' => "To activate your account, please confirm your email address by clicking on the link we just sent you.", + 'uservalidationbyemail:login:fail' => "Your account is not validated so the log in attempt failed. Another validation email has been sent.", 'uservalidationbyemail:admin:no_unvalidated_users' => 'No unvalidated users.', @@ -36,7 +39,10 @@ If you can't click on the link, copy and paste it to your browser manually. 'uservalidationbyemail:confirm_validate_user' => 'Validate %s?', 'uservalidationbyemail:confirm_resend_validation' => 'Resend validation email to %s?', 'uservalidationbyemail:confirm_delete' => 'Delete %s?', - 'uservalidationbyemail:admin:with_checked' => 'With checked:', + 'uservalidationbyemail:confirm_validate_checked' => 'Validate checked users?', + 'uservalidationbyemail:confirm_resend_validation_checked' => 'Resend validation to checked users?', + 'uservalidationbyemail:confirm_delete_checked' => 'Delete checked users?', + 'uservalidationbyemail:check_all' => 'All', 'uservalidationbyemail:errors:unknown_users' => 'Unknown users', 'uservalidationbyemail:errors:could_not_validate_user' => 'Could not validate user.', diff --git a/mod/uservalidationbyemail/lib/functions.php b/mod/uservalidationbyemail/lib/functions.php index 92b37c843..f3091f94d 100644 --- a/mod/uservalidationbyemail/lib/functions.php +++ b/mod/uservalidationbyemail/lib/functions.php @@ -9,26 +9,29 @@ /** * Generate an email activation code. * - * @param int $user_guid The guid of the user + * @param int $user_guid The guid of the user * @param string $email_address Email address * @return string */ function uservalidationbyemail_generate_code($user_guid, $email_address) { - global $CONFIG; + + $site_url = elgg_get_site_url(); // Note I bind to site URL, this is important on multisite! - return md5($user_guid . $email_address . $CONFIG->site->url . get_site_secret()); + return md5($user_guid . $email_address . $site_url . get_site_secret()); } /** * Request user validation email. * Send email out to the address and request a confirmation. * - * @param int $user_guid The user + * @param int $user_guid The user's GUID + * @param bool $admin_requested Was it requested by admin * @return mixed */ -function uservalidationbyemail_request_validation($user_guid) { - global $CONFIG; +function uservalidationbyemail_request_validation($user_guid, $admin_requested = FALSE) { + + $site = elgg_get_site_entity(); $user_guid = (int)$user_guid; $user = get_entity($user_guid); @@ -36,15 +39,15 @@ function uservalidationbyemail_request_validation($user_guid) { if (($user) && ($user instanceof ElggUser)) { // Work out validate link $code = uservalidationbyemail_generate_code($user_guid, $user->email); - $link = "{$CONFIG->site->url}pg/uservalidationbyemail/confirm?u=$user_guid&c=$code"; - $site = $CONFIG->site; + $link = "{$site->url}uservalidationbyemail/confirm?u=$user_guid&c=$code"; + // Send validation email - $subject = sprintf(elgg_echo('email:validate:subject'), $user->name, $site->name); - $body = sprintf(elgg_echo('email:validate:body'), $user->name, $site->name, $link, $site->name, $site->url); - $result = notify_user($user->guid, $CONFIG->site->guid, $subject, $body, NULL, 'email'); + $subject = elgg_echo('email:validate:subject', array($user->name, $site->name)); + $body = elgg_echo('email:validate:body', array($user->name, $site->name, $link, $site->name, $site->url)); + $result = notify_user($user->guid, $site->guid, $subject, $body, NULL, 'email'); - if ($result) { + if ($result && !$admin_requested) { system_message(elgg_echo('uservalidationbyemail:registerok')); } @@ -57,93 +60,49 @@ function uservalidationbyemail_request_validation($user_guid) { /** * Validate a user * - * @param unknown_type $user_guid - * @param unknown_type $code - * @return unknown + * @param int $user_guid + * @param string $code + * @return bool */ function uservalidationbyemail_validate_email($user_guid, $code) { $user = get_entity($user_guid); if ($code == uservalidationbyemail_generate_code($user_guid, $user->email)) { - return uservalidationbyemail_set_user_validation_status($user_guid, true, 'email'); + return elgg_set_user_validation_status($user_guid, true, 'email'); } return false; } /** - * Set the validation status for a user. - * - * @param bool $status Validated (true) or false - * @param string $method Optional method to say how a user was validated - * @return bool - */ -function uservalidationbyemail_set_user_validation_status($user_guid, $status, $method = '') { - if (!$status) { - $method = ''; - } - - if ($status) { - if ( - (create_metadata($user_guid, 'validated', $status,'', 0, ACCESS_PUBLIC)) && - (create_metadata($user_guid, 'validated_method', $method,'', 0, ACCESS_PUBLIC)) - ) { - return TRUE; - } - } else { - $validated = get_metadata_byname($user_guid, 'validated'); - $validated_method = get_metadata_byname($user_guid, 'validated_method'); - - if ( - ($validated) && - ($validated_method) && - (delete_metadata($validated->id)) && - (delete_metadata($validated_method->id)) - ) - return TRUE; - } - - return FALSE; -} - -/** - * Returns the validation status of a user. - * - * @param unknown_type $user_guid - * @return int|null - */ -function uservalidationbyemail_get_user_validation_status($user_guid) { - $md = get_metadata_byname($user_guid, 'validated'); - - if ($md && $md->value) { - return TRUE; - } - - return FALSE; -} - -/** - * Returns all users who haven't been validated. + * Return a where clause to get entities * * "Unvalidated" means metadata of validated is not set or not truthy. - * We can't use the elgg_get_entities_from_metadata() because you can't say + * We can't use elgg_get_entities_from_metadata() because you can't say * "where the entity has metadata set OR it's not equal to 1". * - * This doesn't include any security, so should be called ONLY be admin users! * @return array */ function uservalidationbyemail_get_unvalidated_users_sql_where() { global $CONFIG; $validated_id = get_metastring_id('validated'); - $one_id = get_metastring_id(1); + if ($validated_id === false) { + $validated_id = add_metastring('validated'); + } + $one_id = get_metastring_id('1'); + if ($one_id === false) { + $one_id = add_metastring('1'); + } // thanks to daveb@freenode for the SQL tips! - $where = "NOT EXISTS ( + $wheres = array(); + $wheres[] = "e.enabled='no'"; + $wheres[] = "NOT EXISTS ( SELECT 1 FROM {$CONFIG->dbprefix}metadata md WHERE md.entity_guid = e.guid AND md.name_id = $validated_id AND md.value_id = $one_id)"; - return $where; + return $wheres; }
\ No newline at end of file diff --git a/mod/uservalidationbyemail/manifest.xml b/mod/uservalidationbyemail/manifest.xml index 8e29a1bbf..800dd2641 100644 --- a/mod/uservalidationbyemail/manifest.xml +++ b/mod/uservalidationbyemail/manifest.xml @@ -1,12 +1,17 @@ <?xml version="1.0" encoding="UTF-8"?> -<plugin_manifest> - <field key="author" value="Curverider Ltd" /> - <field key="version" value="1.7" /> - <field key="description" value="Simple user account validation via email." /> - <field key="website" value="http://www.elgg.org/" /> - <field key="copyright" value="(C) Curverider 2008-2010" /> - <field key="licence" value="GNU Public License version 2" /> - <field key="elgg_version" value="2009033101" /> - <field key="elgg_install_state" value="enabled" /> - <field key="admin_interface" value="advanced" /> +<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8"> + <name>User Validation by Email</name> + <author>Core developers</author> + <version>1.8</version> + <category>bundled</category> + <category>security</category> + <description>Simple user account validation via email.</description> + <website>http://www.elgg.org/</website> + <copyright>See COPYRIGHT.txt</copyright> + <license>GNU General Public License version 2</license> + <requires> + <type>elgg_release</type> + <version>1.8</version> + </requires> + <activate_on_install>true</activate_on_install> </plugin_manifest> diff --git a/mod/uservalidationbyemail/start.php b/mod/uservalidationbyemail/start.php index 4596fd7d6..f44d2ab50 100644 --- a/mod/uservalidationbyemail/start.php +++ b/mod/uservalidationbyemail/start.php @@ -7,67 +7,82 @@ * @subpackage UserValidationByEmail */ +elgg_register_event_handler('init', 'system', 'uservalidationbyemail_init'); + function uservalidationbyemail_init() { - global $CONFIG; require_once dirname(__FILE__) . '/lib/functions.php'; // Register page handler to validate users // This doesn't need to be an action because security is handled by the validation codes. - register_page_handler('uservalidationbyemail', 'uservalidationbyemail_page_handler'); + elgg_register_page_handler('uservalidationbyemail', 'uservalidationbyemail_page_handler'); // mark users as unvalidated and disable when they register - register_plugin_hook('register', 'user', 'uservalidationbyemail_disable_new_user'); + elgg_register_plugin_hook_handler('register', 'user', 'uservalidationbyemail_disable_new_user'); // canEdit override to allow not logged in code to disable a user - register_plugin_hook('permissions_check', 'user', 'uservalidationbyemail_allow_new_user_can_edit'); + elgg_register_plugin_hook_handler('permissions_check', 'user', 'uservalidationbyemail_allow_new_user_can_edit'); // prevent users from logging in if they aren't validated - register_plugin_hook('action', 'login', 'uservalidationbyemail_check_login_attempt'); + register_pam_handler('uservalidationbyemail_check_auth_attempt', "required"); // when requesting a new password - register_plugin_hook('action', 'user/requestnewpassword', 'uservalidationbyemail_check_request_password'); + elgg_register_plugin_hook_handler('action', 'user/requestnewpassword', 'uservalidationbyemail_check_request_password'); // prevent the engine from logging in users via login() - register_elgg_event_handler('login', 'user', 'uservalidationbyemail_check_manual_login'); + elgg_register_event_handler('login', 'user', 'uservalidationbyemail_check_manual_login'); // make admin users always validated - register_elgg_event_handler('make_admin', 'user', 'uservalidationbyemail_validate_new_admin_user'); + elgg_register_event_handler('make_admin', 'user', 'uservalidationbyemail_validate_new_admin_user'); // register Walled Garden public pages - register_plugin_hook('public_pages', 'walled_garden', 'uservalidationbyemail_public_pages'); + elgg_register_plugin_hook_handler('public_pages', 'walled_garden', 'uservalidationbyemail_public_pages'); // admin interface to manually validate users - elgg_add_admin_submenu_item('unvalidated', elgg_echo('uservalidationbyemail:admin:unvalidated'), 'users'); + elgg_register_admin_menu_item('administer', 'unvalidated', 'users'); + + elgg_extend_view('css/admin', 'uservalidationbyemail/css'); + elgg_extend_view('js/elgg', 'uservalidationbyemail/js'); $action_path = dirname(__FILE__) . '/actions'; - register_action('uservalidationbyemail/validate', FALSE, "$action_path/validate.php", TRUE); - register_action('uservalidationbyemail/resend_validation', FALSE, "$action_path/resend_validation.php", TRUE); - register_action('uservalidationbyemail/delete', FALSE, "$action_path/delete.php", TRUE); - register_action('uservalidationbyemail/bulk_action', FALSE, "$action_path/bulk_action.php", TRUE); + elgg_register_action('uservalidationbyemail/validate', "$action_path/validate.php", 'admin'); + elgg_register_action('uservalidationbyemail/resend_validation', "$action_path/resend_validation.php", 'admin'); + elgg_register_action('uservalidationbyemail/delete', "$action_path/delete.php", 'admin'); + elgg_register_action('uservalidationbyemail/bulk_action', "$action_path/bulk_action.php", 'admin'); } /** * Disables a user upon registration. * - * @param unknown_type $hook - * @param unknown_type $type - * @param unknown_type $value - * @param unknown_type $params + * @param string $hook + * @param string $type + * @param bool $value + * @param array $params + * @return bool */ function uservalidationbyemail_disable_new_user($hook, $type, $value, $params) { - $user = elgg_get_array_value('user', $params); + $user = elgg_extract('user', $params); // no clue what's going on, so don't react. if (!$user instanceof ElggUser) { - return NULL; + return; + } + + // another plugin is requesting that registration be terminated + // no need for uservalidationbyemail + if (!$value) { + return $value; + } + + // has the user already been validated? + if (elgg_get_user_validation_status($user->guid) == true) { + return $value; } // disable user to prevent showing up on the site - // set context to our canEdit() override works - $context = get_context(); - set_context('uservalidationbyemail_new_user'); + // set context so our canEdit() override works + elgg_push_context('uservalidationbyemail_new_user'); $hidden_entities = access_get_show_hidden_status(); access_show_hidden_entities(TRUE); @@ -78,85 +93,77 @@ function uservalidationbyemail_disable_new_user($hook, $type, $value, $params) { $user->disable('uservalidationbyemail_new_user', FALSE); // set user as unvalidated and send out validation email - uservalidationbyemail_set_user_validation_status($user->guid, FALSE); + elgg_set_user_validation_status($user->guid, FALSE); uservalidationbyemail_request_validation($user->guid); - set_context($context); + elgg_pop_context(); access_show_hidden_entities($hidden_entities); - return TRUE; + return $value; } /** * Override the canEdit() call for if we're in the context of registering a new user. * + * @param string $hook + * @param string $type + * @param bool $value + * @param array $params + * @return bool|null */ function uservalidationbyemail_allow_new_user_can_edit($hook, $type, $value, $params) { // $params['user'] is the user to check permissions for. // we want the entity to check, which is a user. - $user = elgg_get_array_value('entity', $params); + $user = elgg_extract('entity', $params); if (!($user instanceof ElggUser)) { - return NULL; + return; } - $context = get_context(); - if ($context == 'uservalidationbyemail_new_user' || $context = 'uservalidationbyemail_validate_user') { + $context = elgg_get_context(); + if ($context == 'uservalidationbyemail_new_user' || $context == 'uservalidationbyemail_validate_user') { return TRUE; } - return NULL; + return; } /** - * Checks if a login failed because the user hasn't validated his account. + * Checks if an account is validated * - * @param unknown_type $hook - * @param unknown_type $type - * @param unknown_type $value - * @param unknown_type $params + * @params array $credentials The username and password + * @return bool */ -function uservalidationbyemail_check_login_attempt($hook, $type, $value, $params) { - // everything is only stored in the input at this point - $username = get_input('username'); - $password = get_input("password"); +function uservalidationbyemail_check_auth_attempt($credentials) { - if (empty($username) || empty($password)) { - // return true to let the original login action deal with it. - return TRUE; + if (!isset($credentials['username'])) { + return; } - // see if we need to resolve an email address to a username - if (strpos($username, '@') !== FALSE && ($users = get_user_by_email($username))) { - $username = $users[0]->username; - } + $username = $credentials['username']; - // See the users exists and isn't validated + // See if the user exists and isn't validated $access_status = access_get_show_hidden_status(); access_show_hidden_entities(TRUE); $user = get_user_by_username($username); - - // only resend validation if the password is correct - if ($user && authenticate($username, $password) && !$user->validated) { + if ($user && isset($user->validated) && !$user->validated) { // show an error and resend validation email uservalidationbyemail_request_validation($user->guid); - // halt action - $value = FALSE; + access_show_hidden_entities($access_status); + throw new LoginException(elgg_echo('uservalidationbyemail:login:fail')); } access_show_hidden_entities($access_status); - - return $value; } /** * Checks sent passed validation code and user guids and validates the user. * * @param array $page + * @return bool */ function uservalidationbyemail_page_handler($page) { - global $CONFIG; if (isset($page[0]) && $page[0] == 'confirm') { $code = sanitise_string(get_input('c', FALSE)); @@ -168,19 +175,20 @@ function uservalidationbyemail_page_handler($page) { $user = get_entity($user_guid); - if (($code) && ($user)) { + if ($code && $user) { if (uservalidationbyemail_validate_email($user_guid, $code)) { - $context = get_context(); - set_context('uservalidationbyemail_validate_user'); - + elgg_push_context('uservalidationbyemail_validate_user'); system_message(elgg_echo('email:confirm:success')); - $user = get_entity($user_guid); $user->enable(); + elgg_pop_context(); - set_context($context); - login($user); + try { + login($user); + } catch(LoginException $e){ + register_error($e->getMessage()); + } } else { register_error(elgg_echo('email:confirm:fail')); } @@ -193,84 +201,55 @@ function uservalidationbyemail_page_handler($page) { register_error(elgg_echo('email:confirm:fail')); } - forward(); + // forward to front page + forward(''); } /** * Make sure any admin users are automatically validated * - * @param unknown_type $event - * @param unknown_type $type - * @param unknown_type $object + * @param string $event + * @param string $type + * @param ElggUser $user */ function uservalidationbyemail_validate_new_admin_user($event, $type, $user) { if ($user instanceof ElggUser && !$user->validated) { - uservalidationbyemail_set_user_validation_status($user->guid, TRUE, 'admin_user'); + elgg_set_user_validation_status($user->guid, TRUE, 'admin_user'); } - - return TRUE; } /** - * Registers public pages to allow in the case Private Network has been enabled. + * Registers public pages to allow in the case walled garden has been enabled. */ function uservalidationbyemail_public_pages($hook, $type, $return_value, $params) { - $return_value[] = 'pg/uservalidationbyemail/confirm'; + $return_value[] = 'uservalidationbyemail/confirm'; return $return_value; } /** * Prevent a manual code login with login(). * - * @param unknown_type $event - * @param unknown_type $type - * @param unknown_type $user - */ -function uservalidationbyemail_check_manual_login($event, $type, $user) { - $access_status = access_get_show_hidden_status(); - access_show_hidden_entities(TRUE); - - // @todo register_error()? - $return = ($user instanceof ElggUser && !$user->isEnabled() && !$user->validated) ? FALSE : NULL; - - access_show_hidden_entities($access_status); - - return $return; -} - -/** - * Deny requests to change password if the account isn't validated. - * - * @todo This is needed because changing the password requires the entity to be enabled. + * @param string $event + * @param string $type + * @param ElggUser $user + * @return bool * - * @param unknown_type $hook - * @param unknown_type $type - * @param unknown_type $value - * @param unknown_type $params + * @throws LoginException */ -function uservalidationbyemail_check_request_password($hook, $type, $value, $params) { - $username = get_input('username'); - - // see if we need to resolve an email address to a username - if (strpos($username, '@') !== FALSE && ($users = get_user_by_email($username))) { - $username = $users[0]->username; - } - - // See the users exists and isn't validated +function uservalidationbyemail_check_manual_login($event, $type, $user) { $access_status = access_get_show_hidden_status(); access_show_hidden_entities(TRUE); - $user = get_user_by_username($username); - - // resend validation instead of resetting password - if ($user && !$user->validated) { - uservalidationbyemail_request_validation($user->guid); - $value = FALSE; + if (($user instanceof ElggUser) && !$user->isEnabled() && !$user->validated) { + // send new validation email + uservalidationbyemail_request_validation($user->getGUID()); + + // restore hidden entities settings + access_show_hidden_entities($access_status); + + // throw error so we get a nice error message + throw new LoginException(elgg_echo('uservalidationbyemail:login:fail')); } access_show_hidden_entities($access_status); - - return $value; } - -register_elgg_event_handler('init', 'system', 'uservalidationbyemail_init');
\ No newline at end of file diff --git a/mod/uservalidationbyemail/views/default/admin/users/unvalidated.php b/mod/uservalidationbyemail/views/default/admin/users/unvalidated.php index 999eab44f..62a35d0bb 100644 --- a/mod/uservalidationbyemail/views/default/admin/users/unvalidated.php +++ b/mod/uservalidationbyemail/views/default/admin/users/unvalidated.php @@ -1,48 +1,9 @@ <?php /** - * Admin area to view, validate, resend validation email, or delete unvalidated users. - * - * @package Elgg.Core.Plugin - * @subpackage UserValidationByEmail.Administration + * List of unvalidated users */ -// @todo pagination would be nice. -// can't use elgg_list_entities() and friends because we don't use the default view for users. -$ia = elgg_set_ignore_access(TRUE); -$hidden_entities = access_get_show_hidden_status(); -access_show_hidden_entities(TRUE); - -$users = elgg_get_entities(array( - 'type' => 'user', - 'wheres' => array(uservalidationbyemail_get_unvalidated_users_sql_where()), - 'limit' => 9999, +echo elgg_view_form('uservalidationbyemail/bulk_action', array( + 'id' => 'uservalidationbyemail-form', + 'action' => 'action/uservalidationbyemail/bulk_action' )); - -access_show_hidden_entities($hidden_entities); -elgg_set_ignore_access($ia); - -if ($users) { - foreach ($users as $user) { - $form_body .= elgg_view('uservalidationbyemail/unvalidated_user', array('user' => $user)); - } -} else { - echo elgg_echo('uservalidationbyemail:admin:no_unvalidated_users'); - return; -} - -$form_body .= elgg_echo('uservalidationbyemail:admin:with_checked') . elgg_view('input/pulldown', array( - 'internalname' => 'action_type', - 'options_values' => array( - 'validate' => elgg_echo('uservalidationbyemail:admin:validate'), - 'resend_validation' => elgg_echo('uservalidationbyemail:admin:resend_validation'), - 'delete' => elgg_echo('uservalidationbyemail:admin:delete'), - ), - 'value' => 'resend_validation', -)); - -$form_body .= '<br />' . elgg_view('input/button', array('value' => elgg_echo('submit'))); - -echo elgg_view('input/form', array( - 'action' => elgg_get_site_url() . 'action/uservalidationbyemail/bulk_action', - 'body' => $form_body -));
\ No newline at end of file diff --git a/mod/uservalidationbyemail/views/default/forms/uservalidationbyemail/bulk_action.php b/mod/uservalidationbyemail/views/default/forms/uservalidationbyemail/bulk_action.php new file mode 100644 index 000000000..9199922d6 --- /dev/null +++ b/mod/uservalidationbyemail/views/default/forms/uservalidationbyemail/bulk_action.php @@ -0,0 +1,112 @@ +<?php +/** + * Admin area to view, validate, resend validation email, or delete unvalidated users. + * + * @package Elgg.Core.Plugin + * @subpackage UserValidationByEmail.Administration + */ + +$limit = get_input('limit', 10); +$offset = get_input('offset', 0); + +// can't use elgg_list_entities() and friends because we don't use the default view for users. +$ia = elgg_set_ignore_access(TRUE); +$hidden_entities = access_get_show_hidden_status(); +access_show_hidden_entities(TRUE); + +$options = array( + 'type' => 'user', + 'wheres' => uservalidationbyemail_get_unvalidated_users_sql_where(), + 'limit' => $limit, + 'offset' => $offset, + 'count' => TRUE, +); +$count = elgg_get_entities($options); + +if (!$count) { + access_show_hidden_entities($hidden_entities); + elgg_set_ignore_access($ia); + + echo elgg_autop(elgg_echo('uservalidationbyemail:admin:no_unvalidated_users')); + return TRUE; +} + +$options['count'] = FALSE; + +$users = elgg_get_entities($options); + +access_show_hidden_entities($hidden_entities); +elgg_set_ignore_access($ia); + +// setup pagination +$pagination = elgg_view('navigation/pagination',array( + 'base_url' => 'admin/users/unvalidated', + 'offset' => $offset, + 'count' => $count, + 'limit' => $limit, +)); + +$bulk_actions_checkbox = '<label><input type="checkbox" id="uservalidationbyemail-checkall" />' + . elgg_echo('uservalidationbyemail:check_all') . '</label>'; + +$validate = elgg_view('output/url', array( + 'href' => 'action/uservalidationbyemail/validate/', + 'text' => elgg_echo('uservalidationbyemail:admin:validate'), + 'title' => elgg_echo('uservalidationbyemail:confirm_validate_checked'), + 'class' => 'uservalidationbyemail-submit', + 'is_action' => true, + 'is_trusted' => true, +)); + +$resend_email = elgg_view('output/url', array( + 'href' => 'action/uservalidationbyemail/resend_validation/', + 'text' => elgg_echo('uservalidationbyemail:admin:resend_validation'), + 'title' => elgg_echo('uservalidationbyemail:confirm_resend_validation_checked'), + 'class' => 'uservalidationbyemail-submit', + 'is_action' => true, + 'is_trusted' => true, +)); + +$delete = elgg_view('output/url', array( + 'href' => 'action/uservalidationbyemail/delete/', + 'text' => elgg_echo('uservalidationbyemail:admin:delete'), + 'title' => elgg_echo('uservalidationbyemail:confirm_delete_checked'), + 'class' => 'uservalidationbyemail-submit', + 'is_action' => true, + 'is_trusted' => true, +)); + +$bulk_actions = <<<___END + <ul class="elgg-menu elgg-menu-general elgg-menu-hz float-alt"> + <li>$resend_email</li><li>$validate</li><li>$delete</li> + </ul> + + $bulk_actions_checkbox +___END; + +if (is_array($users) && count($users) > 0) { + $html = '<ul class="elgg-list elgg-list-distinct">'; + foreach ($users as $user) { + $html .= "<li id=\"unvalidated-user-{$user->guid}\" class=\"elgg-item uservalidationbyemail-unvalidated-user-item\">"; + $html .= elgg_view('uservalidationbyemail/unvalidated_user', array('user' => $user)); + $html .= '</li>'; + } + $html .= '</ul>'; +} + +echo <<<___END +<div class="elgg-module elgg-module-inline uservalidation-module"> + <div class="elgg-head"> + $bulk_actions + </div> + <div class="elgg-body"> + $html + </div> +</div> +___END; + +if ($count > 5) { + echo $bulk_actions; +} + +echo $pagination; diff --git a/mod/uservalidationbyemail/views/default/uservalidationbyemail/css.php b/mod/uservalidationbyemail/views/default/uservalidationbyemail/css.php new file mode 100644 index 000000000..afe334713 --- /dev/null +++ b/mod/uservalidationbyemail/views/default/uservalidationbyemail/css.php @@ -0,0 +1,12 @@ +<?php +/** + * CSS for user validation by email + */ +?> + +.uservalidation-module > .elgg-head * { + color: white; +} +.uservalidation-module > .elgg-body * { + color: #333; +}
\ No newline at end of file diff --git a/mod/uservalidationbyemail/views/default/uservalidationbyemail/js.php b/mod/uservalidationbyemail/views/default/uservalidationbyemail/js.php new file mode 100644 index 000000000..948a54651 --- /dev/null +++ b/mod/uservalidationbyemail/views/default/uservalidationbyemail/js.php @@ -0,0 +1,28 @@ + +elgg.provide('elgg.uservalidationbyemail'); + +elgg.uservalidationbyemail.init = function() { + $('#uservalidationbyemail-checkall').click(function() { + var checked = $(this).attr('checked') == 'checked'; + $('#uservalidationbyemail-form .elgg-body').find('input[type=checkbox]').attr('checked', checked); + }); + + $('.uservalidationbyemail-submit').click(function(event) { + var $form = $('#uservalidationbyemail-form'); + event.preventDefault(); + + // check if there are selected users + if ($('#uservalidationbyemail-form .elgg-body').find('input[type=checkbox]:checked').length < 1) { + return false; + } + + // confirmation + if (!confirm($(this).attr('title'))) { + return false; + } + + $form.attr('action', $(this).attr('href')).submit(); + }); +}; + +elgg.register_hook_handler('init', 'system', elgg.uservalidationbyemail.init); diff --git a/mod/uservalidationbyemail/views/default/uservalidationbyemail/unvalidated_user.php b/mod/uservalidationbyemail/views/default/uservalidationbyemail/unvalidated_user.php index dbfc0ac66..5c652a637 100644 --- a/mod/uservalidationbyemail/views/default/uservalidationbyemail/unvalidated_user.php +++ b/mod/uservalidationbyemail/views/default/uservalidationbyemail/unvalidated_user.php @@ -6,48 +6,45 @@ * @subpackage UserValidationByEmail.Administration */ -$user = elgg_get_array_value('user', $vars); +$user = elgg_extract('user', $vars); -// doesn't work. -//$checkbox = elgg_view('input/checkboxes', array( -// 'internalname' => 'user_guids', -// 'options' => array("$user->username - \"$user->name\" <$user->email>" => $user->guid) -//)); -$checkbox = "<label><input type=\"checkbox\" value=\"$user->guid\" class=\"input_checkboxes\" name=\"user_guids[]\">" - . "$user->username - \"$user->name\" <$user->email></label>"; +$checkbox = elgg_view('input/checkbox', array( + 'name' => 'user_guids[]', + 'value' => $user->guid, + 'default' => false, +)); -$created = sprintf(elgg_echo('uservalidationbyemail:admin:user_created'), elgg_view_friendly_time($user->time_created)); +$created = elgg_echo('uservalidationbyemail:admin:user_created', array(elgg_view_friendly_time($user->time_created))); $validate = elgg_view('output/confirmlink', array( - 'confirm' => sprintf(elgg_echo('uservalidationbyemail:confirm_validate_user'), $user->username), - 'href' => elgg_get_site_url() . "action/uservalidationbyemail/validate/?user_guids[]=$user->guid", + 'confirm' => elgg_echo('uservalidationbyemail:confirm_validate_user', array($user->username)), + 'href' => "action/uservalidationbyemail/validate/?user_guids[]=$user->guid", 'text' => elgg_echo('uservalidationbyemail:admin:validate') )); $resend_email = elgg_view('output/confirmlink', array( - 'confirm' => sprintf(elgg_echo('uservalidationbyemail:confirm_resend_validation'), $user->username), - 'href' => elgg_get_site_url() . "action/uservalidationbyemail/resend_validation/?user_guids[]=$user->guid", + 'confirm' => elgg_echo('uservalidationbyemail:confirm_resend_validation', array($user->username)), + 'href' => "action/uservalidationbyemail/resend_validation/?user_guids[]=$user->guid", 'text' => elgg_echo('uservalidationbyemail:admin:resend_validation') )); $delete = elgg_view('output/confirmlink', array( - 'confirm' => sprintf(elgg_echo('uservalidationbyemail:confirm_delete'), $user->username), - 'href' => elgg_get_site_url() . "action/uservalidationbyemail/delete/?user_guids[]=$user->guid", + 'confirm' => elgg_echo('uservalidationbyemail:confirm_delete', array($user->username)), + 'href' => "action/uservalidationbyemail/delete/?user_guids[]=$user->guid", 'text' => elgg_echo('uservalidationbyemail:admin:delete') )); - -// @todo All of these hard coded styles need to be removed. -// they're here because you can't currently extend the admin css. -?> - -<div class="admin_settings radius8" style="border: 1px solid black; padding: 5px;"> - <?php echo $checkbox; ?><br /> - - <div class="uservalidationbyemail_unvalidated_controls" style="float: right"> - <?php echo "$resend_email | $validate | $delete"; ?> +$menu = 'test'; +$block = <<<___END + <label>$user->username: "$user->name" <$user->email></label> + <div class="uservalidationbyemail-unvalidated-user-details"> + $created </div> +___END; - <div class="uservalidationbyemail_unvalidated_user_details" style="margin-left: 15px; font-size: smaller;"> - <?php echo $created; ?> - </div> -</div> +$menu = <<<__END + <ul class="elgg-menu elgg-menu-general elgg-menu-hz float-alt"> + <li>$resend_email</li><li>$validate</li><li>$delete</li> + </ul> +__END; + +echo elgg_view_image_block($checkbox, $block, array('image_alt' => $menu)); |
