123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- <?php
- /**
- * Helper functions
- *
- * @package Elgg.Core.Plugin
- * @subpackage UserValidationByEmail
- */
- /**
- * Generate an email activation code.
- *
- * @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) {
- // Note: binding to site URL for multisite.
- $site_url = elgg_get_site_url();
- return elgg_build_hmac([(int)$user_guid, $email_address, $site_url])->getToken();
- }
- /**
- * Request user validation email.
- * Send email out to the address and request a confirmation.
- *
- * @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, $admin_requested = 'deprecated') {
- if ($admin_requested != 'deprecated') {
- elgg_deprecated_notice('Second param $admin_requested no more used in uservalidationbyemail_request_validation function', 1.9);
- }
- $site = elgg_get_site_entity();
- $user_guid = (int)$user_guid;
- $user = get_entity($user_guid);
- if (($user) && ($user instanceof ElggUser)) {
- // Work out validate link
- $code = uservalidationbyemail_generate_code($user_guid, $user->email);
- $link = "{$site->url}uservalidationbyemail/confirm?u=$user_guid&c=$code";
- // Get email to show in the next page
- elgg_get_session()->set('emailsent', $user->email);
- $subject = elgg_echo('email:validate:subject', array(
- $user->name,
- $site->name
- ), $user->language
- );
- $body = elgg_echo('email:validate:body', array(
- $user->name,
- $site->name,
- $link,
- $site->name,
- $site->url
- ), $user->language
- );
- // Send validation email
- $result = notify_user($user->guid, $site->guid, $subject, $body, array(), 'email');
- return $result;
- }
- return FALSE;
- }
- /**
- * Validate a user
- *
- * @param int $user_guid
- * @param string $code
- * @return bool
- */
- function uservalidationbyemail_validate_email($user_guid, $code) {
- $user = get_entity($user_guid);
- $site_url = elgg_get_site_url();
- $matches = elgg_build_hmac([(int)$user_guid, $user->email, $site_url])->matchesToken($code);
- if (!$matches) {
- return false;
- }
- return elgg_set_user_validation_status($user_guid, true, 'email');
- }
- /**
- * Return a where clause to get entities
- *
- * "Unvalidated" means metadata of validated is not set or not truthy.
- * 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".
- *
- * @return array
- */
- function uservalidationbyemail_get_unvalidated_users_sql_where() {
- $db_prefix = elgg_get_config('dbprefix');
- $validated_id = elgg_get_metastring_id('validated');
- $one_id = elgg_get_metastring_id('1');
- // thanks to daveb@freenode for the SQL tips!
- $wheres = array();
- $wheres[] = "e.enabled='no'";
- $wheres[] = "NOT EXISTS (
- SELECT 1 FROM {$db_prefix}metadata md
- WHERE md.entity_guid = e.guid
- AND md.name_id = $validated_id
- AND md.value_id = $one_id)";
- return $wheres;
- }
|