aboutsummaryrefslogtreecommitdiff
path: root/mod/uservalidationbyemail
diff options
context:
space:
mode:
Diffstat (limited to 'mod/uservalidationbyemail')
-rw-r--r--mod/uservalidationbyemail/actions/delete.php5
-rw-r--r--mod/uservalidationbyemail/actions/resend_validation.php5
-rw-r--r--mod/uservalidationbyemail/actions/validate.php6
-rw-r--r--mod/uservalidationbyemail/languages/en.php8
-rw-r--r--mod/uservalidationbyemail/lib/functions.php105
-rw-r--r--mod/uservalidationbyemail/manifest.xml25
-rw-r--r--mod/uservalidationbyemail/start.php209
-rw-r--r--mod/uservalidationbyemail/views/default/admin/users/unvalidated.php47
-rw-r--r--mod/uservalidationbyemail/views/default/forms/uservalidationbyemail/bulk_action.php112
-rw-r--r--mod/uservalidationbyemail/views/default/uservalidationbyemail/css.php12
-rw-r--r--mod/uservalidationbyemail/views/default/uservalidationbyemail/js.php28
-rw-r--r--mod/uservalidationbyemail/views/default/uservalidationbyemail/unvalidated_user.php55
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\" &lt;$user->email&gt;" => $user->guid)
-//));
-$checkbox = "<label><input type=\"checkbox\" value=\"$user->guid\" class=\"input_checkboxes\" name=\"user_guids[]\">"
- . "$user->username - \"$user->name\" &lt;$user->email&gt;</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" &lt;$user->email&gt;</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));