X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=plugins%2FEmailRegistration%2FEmailRegistrationPlugin.php;h=8759614129b8f1feb8ed1926e4ea4733475bcc38;hb=7f1a30dc40ac772247425a49498d7f5d4550e01f;hp=44bd95e7b08373bfc39da32fc90c86f05b52b9cd;hpb=daadb7905b2863bf48aade7537f23a1b645d7d5d;p=quix0rs-gnu-social.git diff --git a/plugins/EmailRegistration/EmailRegistrationPlugin.php b/plugins/EmailRegistration/EmailRegistrationPlugin.php index 44bd95e7b0..8759614129 100644 --- a/plugins/EmailRegistration/EmailRegistrationPlugin.php +++ b/plugins/EmailRegistration/EmailRegistrationPlugin.php @@ -45,9 +45,10 @@ if (!defined('STATUSNET')) { * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 * @link http://status.net/ */ - class EmailRegistrationPlugin extends Plugin { + const CONFIRMTYPE = 'register'; + function onAutoload($cls) { $dir = dirname(__FILE__); @@ -57,45 +58,135 @@ class EmailRegistrationPlugin extends Plugin case 'EmailregisterAction': include_once $dir . '/' . strtolower(mb_substr($cls, 0, -6)) . '.php'; return false; + case 'EmailRegistrationForm': + case 'ConfirmRegistrationForm': + include_once $dir . '/' . strtolower($cls) . '.php'; + return false; default: return true; } } - /** - * Hijack main/register - */ + function onArgsInitialize(&$args) + { + if (array_key_exists('action', $args) && $args['action'] == 'register') { + // YOINK! + $args['action'] = 'emailregister'; + } + return true; + } - function onStartConnectPath(&$path, &$defaults, &$rules, &$result) + function onLoginAction($action, &$login) { - static $toblock = array('main/register', 'main/register/:code'); - - if (in_array($path, $toblock)) { - common_debug("Request came in for $path"); - if ($defaults['action'] != 'emailregister') { - common_debug("Action is {$defaults['action']}, so: rejected."); - $result = false; - return false; - } + if ($action == 'emailregister') { + $login = true; + return false; + } + return true; + } + + function onStartLoadDoc(&$title, &$output) + { + $dir = dirname(__FILE__); + + // @todo FIXME: i18n issue. + $docFile = DocFile::forTitle($title, $dir.'/doc-src/'); + + if (!empty($docFile)) { + $output = $docFile->toHTML(); + return false; } return true; } - function onEndConnectPath($path, $defaults, $rules, $result) + static function registerEmail($email) { - static $toblock = array('main/register', 'main/register/:code'); + $old = User::staticGet('email', $email); + + if (!empty($old)) { + // TRANS: Error text when trying to register with an already registered e-mail address. + // TRANS: %s is the URL to recover password at. + throw new ClientException(sprintf(_m('A user with that email address already exists. You can use the '. + 'password recovery tool to recover a missing password.'), + common_local_url('recoverpassword'))); + } + + $valid = false; + + if (Event::handle('StartValidateUserEmail', array(null, $email, &$valid))) { + $valid = Validate::email($email, common_config('email', 'check_domain')); + Event::handle('EndValidateUserEmail', array(null, $email, &$valid)); + } + + if (!$valid) { + // TRANS: Error text when trying to register with an invalid e-mail address. + throw new ClientException(_m('Not a valid email address.')); + } + + $confirm = Confirm_address::getAddress($email, self::CONFIRMTYPE); - if (in_array($path, $toblock) && $defaults['action'] == 'emailregister') { - common_debug("for email register got " . print_r($result, true)); + if (empty($confirm)) { + $confirm = Confirm_address::saveNew(null, $email, 'register'); } + + return $confirm; + } + + static function nicknameFromEmail($email) + { + $parts = explode('@', $email); + + $nickname = $parts[0]; + + $nickname = preg_replace('/[^A-Za-z0-9]/', '', $nickname); + + $nickname = Nickname::normalize($nickname); + + $original = $nickname; + + $n = 0; + + while (User::staticGet('nickname', $nickname)) { + $n++; + $nickname = $original . $n; + } + + return $nickname; } - function onStartInitializeRouter($m) + static function sendConfirmEmail($confirm, $title=null) { - $m->connect('main/register', array('action' => 'emailregister')); - $m->connect('main/register/:code', array('action' => 'emailregister')); + $sitename = common_config('site', 'name'); + $recipients = array($confirm->address); + + $headers['From'] = mail_notify_from(); + $headers['To'] = trim($confirm->address); + // TRANS: Subject for confirmation e-mail. + // TRANS: %s is the StatusNet sitename. + $headers['Subject'] = sprintf(_m('Welcome to %s'), $sitename); + $headers['Content-Type'] = 'text/html; charset=UTF-8'; + + $confirmUrl = common_local_url('register', array('code' => $confirm->code)); + + if (empty($title)) { + $title = 'confirmemailreg'; + } + + $confirmTemplate = DocFile::forTitle($title, DocFile::mailPaths()); + + $body = $confirmTemplate->toHTML(array('confirmurl' => $confirmUrl)); + + mail_send($recipients, $headers, $body); + } + + function onEndDocFileForTitle($title, $paths, &$filename) + { + if ($title == 'confirmemailreg' && empty($filename)) { + $filename = dirname(__FILE__).'/mail-src/'.$title; + return false; + } return true; } @@ -106,7 +197,8 @@ class EmailRegistrationPlugin extends Plugin 'author' => 'Evan Prodromou', 'homepage' => 'http://status.net/wiki/Plugin:EmailRegistration', 'rawdescription' => - _m('Use email only for registration')); + // TRANS: Plugin description. + _m('Use email only for registration.')); return true; } }