From 9cdb242250336005002e7cc7ffa4d8c3316db30b Mon Sep 17 00:00:00 2001 From: marcus Date: Wed, 25 Jun 2008 18:04:12 +0000 Subject: Refs #79 git-svn-id: https://code.elgg.org/elgg/trunk@1133 36083f99-b078-4883-b0ff-0f9b5a30f544 --- actions/email/confirm.php | 38 +++++++++++++++++++++++++++ engine/lib/users.php | 66 +++++++++++++++++++++++++++++++++++++++++++++-- languages/en.php | 12 +++++++++ 3 files changed, 114 insertions(+), 2 deletions(-) create mode 100644 actions/email/confirm.php diff --git a/actions/email/confirm.php b/actions/email/confirm.php new file mode 100644 index 000000000..d967f7c1e --- /dev/null +++ b/actions/email/confirm.php @@ -0,0 +1,38 @@ + \ No newline at end of file diff --git a/engine/lib/users.php b/engine/lib/users.php index 3bd87dbff..5dc382670 100644 --- a/engine/lib/users.php +++ b/engine/lib/users.php @@ -749,6 +749,67 @@ return get_data($query, "entity_row_to_elggstar"); } + + /** + * Generate a validation code for a given user's email address. + * + * @param int $user_guid The user id + * @param string $email_address The email address + */ + function generate_email_validation_code($user_guid, $email_address) + { + global $CONFIG; + + return md5($user_guid . $email_address . $CONFIG->site->url); // Note I bind to site URL, this is important on multisite! + } + + /** + * Send out a validation request for a given user. + * This function assumes that a user has already been created and that the email address has been + * saved in the email field in the database. + * + * @param int $user_guid The user. + * @return bool + */ + function request_email_validation($user_guid) + { + global $CONFIG; + + $user_guid = (int)$user_guid; + + $user = get_entity($user_guid); + if (($user) && ($user instanceof ElggUser)) + { + // Clear existing status + $user->validated_email = false; + + // Work out validate link + $link = $CONFIG->site->url . "action/email/confirm/?u=$user_guid&c=" . generate_email_validation_code($user_guid, $user->email); + + // Send validation email + return notify_user($user->guid, $CONFIG->site_guid, elgg_echo('email:validate:subject'), sprintf(elgg_echo('email:validate:body'), $user->username, $link), NULL, 'email'); + + } + + return false; + } + + /** + * Validate a user email address against the code provided, and if valid set the appropriate flag + * + * @param int $user_guid User GUID + * @param string $code The code provided on validation. + */ + function validate_email($user_guid, $code) + { + $user = get_entity($user_guid); + + $valid = ($code == generate_email_validation_code($user_guid, $user->email)); + if ($valid) + $user->validated_email = true; + + return $valid; + } /** * Registers a user, returning false if the username already exists @@ -794,10 +855,11 @@ $user->admin = true; datalist_set('admin_registered',1); } + + // Send email validation request + request_email_validation($user->getGUID()); return $user->getGUID(); - - } /** diff --git a/languages/en.php b/languages/en.php index 13b661209..cf94ecd1a 100644 --- a/languages/en.php +++ b/languages/en.php @@ -442,6 +442,9 @@ Alternatively, you can enter your database settings below and we will try and do /** * Emails */ + 'email:confirm:success' => "You have confirmed your email address!", + 'email:confirm:fail' => "Your email address could not be verified...", + 'friend:newfriend:subject' => "%s has made you a friend!", 'friend:newfriend:body' => "%s has made you a friend! @@ -449,6 +452,15 @@ Check them out: %s You cannot reply to this email.", + + 'email:validate:subject' => "Please confirm your email address!", + 'email:validate:body' => "Hi %s, + +Please confirm your email address by clicking on the link below: + +%s +", + /** * XML-RPC */ -- cgit v1.2.3