Move business logic of email registration to plugin
Moved the main business logic of email registration to the EmailRegistrationPlugin. That lets us register from a script, from the emailregister account, or (hopefully) from the signup page.
This commit is contained in:
parent
2e93d5e551
commit
10cffa8afa
@ -47,6 +47,8 @@ if (!defined('STATUSNET')) {
|
||||
*/
|
||||
class EmailRegistrationPlugin extends Plugin
|
||||
{
|
||||
const CONFIRMTYPE = 'register';
|
||||
|
||||
function onAutoload($cls)
|
||||
{
|
||||
$dir = dirname(__FILE__);
|
||||
@ -98,6 +100,90 @@ class EmailRegistrationPlugin extends Plugin
|
||||
return true;
|
||||
}
|
||||
|
||||
static function registerEmail($email)
|
||||
{
|
||||
$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 '.
|
||||
'<a href="%s">password recovery</a> 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::staticGet('nickname', $nickname)) {
|
||||
$n++;
|
||||
$nickname = $original . $n;
|
||||
}
|
||||
|
||||
return $nickname;
|
||||
}
|
||||
|
||||
static function sendConfirmEmail($confirm)
|
||||
{
|
||||
$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('Confirm your registration on %s'), $sitename);
|
||||
|
||||
$confirmUrl = common_local_url('register', array('code' => $confirm->code));
|
||||
|
||||
// TRANS: Body for confirmation e-mail.
|
||||
// TRANS: %1$s is the StatusNet sitename, %2$s is the confirmation URL.
|
||||
$body = sprintf(_m('Someone (probably you) has requested an account on %1$s using this email address.'.
|
||||
"\n".
|
||||
'To confirm the address, click the following URL or copy it into the address bar of your browser.'.
|
||||
"\n".
|
||||
'%2$s'.
|
||||
"\n".
|
||||
'If it was not you, you can safely ignore this message.'),
|
||||
$sitename,
|
||||
$confirmUrl);
|
||||
|
||||
mail_send($recipients, $headers, $body);
|
||||
}
|
||||
|
||||
function onPluginVersion(&$versions)
|
||||
{
|
||||
$versions[] = array('name' => 'EmailRegistration',
|
||||
|
@ -201,53 +201,20 @@ class EmailregisterAction extends Action
|
||||
|
||||
function registerUser()
|
||||
{
|
||||
$old = User::staticGet('email', $this->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.
|
||||
$this->error = sprintf(_m('A user with that email address already exists. You can use the '.
|
||||
'<a href="%s">password recovery</a> tool to recover a missing password.'),
|
||||
common_local_url('recoverpassword'));
|
||||
$this->showRegistrationForm();
|
||||
return;
|
||||
}
|
||||
|
||||
$valid = false;
|
||||
|
||||
try {
|
||||
if (Event::handle('StartValidateUserEmail', array(null, $this->email, &$valid))) {
|
||||
$valid = Validate::email($this->email, common_config('email', 'check_domain'));
|
||||
Event::handle('EndValidateUserEmail', array(null, $this->email, &$valid));
|
||||
}
|
||||
if (!$valid) {
|
||||
// TRANS: Error text when trying to register with an invalid e-mail address.
|
||||
$this->error = _m('Not a valid email address.');
|
||||
$this->showRegistrationForm();
|
||||
return;
|
||||
}
|
||||
} catch (ClientException $e) {
|
||||
$this->error = $e->getMessage();
|
||||
$confirm = EmailRegistrationPlugin::registerEmail($this->email);
|
||||
} catch (ClientException $ce) {
|
||||
$this->error = $ce->getMessage();
|
||||
$this->showRegistrationForm();
|
||||
return;
|
||||
}
|
||||
|
||||
$confirm = Confirm_address::getAddress($this->email, self::CONFIRMTYPE);
|
||||
EmailRegistrationPlugin::sendConfirmEmail($confirm);
|
||||
|
||||
if (empty($confirm)) {
|
||||
$confirm = Confirm_address::saveNew(null, $this->email, 'register');
|
||||
// TRANS: Confirmation text after initial registration.
|
||||
// TRANS: %s an e-mail address.
|
||||
$prompt = sprintf(_m('An email was sent to %s to confirm that address. Check your email inbox for instructions.'),
|
||||
$this->email);
|
||||
} else {
|
||||
// TRANS: Confirmation text after re-requesting an e-mail confirmation code.
|
||||
// TRANS: %s is an e-mail address.
|
||||
$prompt = sprintf(_m('The address %s was already registered but not confirmed. The confirmation code was resent.'),
|
||||
$this->email);
|
||||
}
|
||||
|
||||
$this->sendConfirmEmail($confirm);
|
||||
|
||||
$this->complete = $prompt;
|
||||
|
||||
@ -411,24 +378,7 @@ class EmailregisterAction extends Action
|
||||
|
||||
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;
|
||||
return EmailRegistrationPlugin::nicknameFromEmail($email);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -21,7 +21,11 @@
|
||||
define('INSTALLDIR', realpath(dirname(__FILE__) . '/../../..'));
|
||||
|
||||
$helptext = <<<END_OF_REGISTEREMAILUSER_HELP
|
||||
registeremailuser.php [options] <email>
|
||||
registeremailuser.php [options] <email address>
|
||||
|
||||
Options:
|
||||
-e --email Send a confirmation message to the email address
|
||||
|
||||
register a new user by email address.
|
||||
|
||||
END_OF_REGISTEREMAILUSER_HELP;
|
||||
@ -35,6 +39,11 @@ if (count($args) == 0) {
|
||||
$email = $args[0];
|
||||
|
||||
$confirm = EmailRegistrationPlugin::registerEmail($email);
|
||||
|
||||
if (have_option('e', 'email')) {
|
||||
EmailRegistrationPlugin::sendConfirmEmail($confirm);
|
||||
}
|
||||
|
||||
$confirmUrl = common_local_url('register', array('code' => $confirm->code));
|
||||
|
||||
print $confirmUrl."\n";
|
||||
|
Loading…
Reference in New Issue
Block a user