X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=plugins%2FEmailRegistration%2FEmailRegistrationPlugin.php;h=9e0fd58856758894884d2692ee409de6e2c19f51;hb=b8bca62e3b4b139fac5d1bb69bf683882b799d86;hp=3d868da69f58582b7f7cca1340b9744db1fb90de;hpb=064ed69446a00773ee2c3f49391905332def1550;p=quix0rs-gnu-social.git diff --git a/plugins/EmailRegistration/EmailRegistrationPlugin.php b/plugins/EmailRegistration/EmailRegistrationPlugin.php index 3d868da69f..9e0fd58856 100644 --- a/plugins/EmailRegistration/EmailRegistrationPlugin.php +++ b/plugins/EmailRegistration/EmailRegistrationPlugin.php @@ -45,54 +45,142 @@ 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 { - function onAutoload($cls) + const CONFIRMTYPE = 'register'; + + function onArgsInitialize(&$args) { - $dir = dirname(__FILE__); + if (array_key_exists('action', $args) && $args['action'] == 'register') { + // YOINK! + $args['action'] = 'emailregister'; + } + return true; + } - switch ($cls) - { - case 'EmailregisterAction': - include_once $dir . '/' . strtolower(mb_substr($cls, 0, -6)) . '.php'; + function onLoginAction($action, &$login) + { + if ($action == 'emailregister') { + $login = true; return false; - default: - return true; } + return true; } - /** - * Hijack main/register - */ - - function onStartConnectPath(&$path, &$defaults, &$rules, &$result) + function onStartLoadDoc(&$title, &$output) { - static $toblock = array('main/register', 'main/register/:code'); + $dir = dirname(__FILE__); + + // @todo FIXME: i18n issue. + $docFile = DocFile::forTitle($title, $dir.'/doc-src/'); - if (in_array($path, $toblock) && $defaults['action'] != 'emailregister') { + if (!empty($docFile)) { + $output = $docFile->toHTML(); return false; } return true; } - function onStartInitializeRouter($m) + static function registerEmail($email) + { + $old = User::getKV('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 (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::getKV('nickname', $nickname)) { + $n++; + $nickname = $original . $n; + } + + return $nickname; + } + + 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; } - function onPluginVersion(&$versions) + function onPluginVersion(array &$versions) { $versions[] = array('name' => 'EmailRegistration', - 'version' => STATUSNET_VERSION, + 'version' => GNUSOCIAL_VERSION, '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; } }