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
|
class EmailRegistrationPlugin extends Plugin
|
||||||
{
|
{
|
||||||
|
const CONFIRMTYPE = 'register';
|
||||||
|
|
||||||
function onAutoload($cls)
|
function onAutoload($cls)
|
||||||
{
|
{
|
||||||
$dir = dirname(__FILE__);
|
$dir = dirname(__FILE__);
|
||||||
@ -98,6 +100,90 @@ class EmailRegistrationPlugin extends Plugin
|
|||||||
return true;
|
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)
|
function onPluginVersion(&$versions)
|
||||||
{
|
{
|
||||||
$versions[] = array('name' => 'EmailRegistration',
|
$versions[] = array('name' => 'EmailRegistration',
|
||||||
|
@ -201,53 +201,20 @@ class EmailregisterAction extends Action
|
|||||||
|
|
||||||
function registerUser()
|
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 {
|
try {
|
||||||
if (Event::handle('StartValidateUserEmail', array(null, $this->email, &$valid))) {
|
$confirm = EmailRegistrationPlugin::registerEmail($this->email);
|
||||||
$valid = Validate::email($this->email, common_config('email', 'check_domain'));
|
} catch (ClientException $ce) {
|
||||||
Event::handle('EndValidateUserEmail', array(null, $this->email, &$valid));
|
$this->error = $ce->getMessage();
|
||||||
}
|
|
||||||
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();
|
|
||||||
$this->showRegistrationForm();
|
$this->showRegistrationForm();
|
||||||
return;
|
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: Confirmation text after initial registration.
|
||||||
// TRANS: %s an e-mail address.
|
// 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.'),
|
$prompt = sprintf(_m('An email was sent to %s to confirm that address. Check your email inbox for instructions.'),
|
||||||
$this->email);
|
$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;
|
$this->complete = $prompt;
|
||||||
|
|
||||||
@ -411,24 +378,7 @@ class EmailregisterAction extends Action
|
|||||||
|
|
||||||
function nicknameFromEmail($email)
|
function nicknameFromEmail($email)
|
||||||
{
|
{
|
||||||
$parts = explode('@', $email);
|
return EmailRegistrationPlugin::nicknameFromEmail($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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -21,7 +21,11 @@
|
|||||||
define('INSTALLDIR', realpath(dirname(__FILE__) . '/../../..'));
|
define('INSTALLDIR', realpath(dirname(__FILE__) . '/../../..'));
|
||||||
|
|
||||||
$helptext = <<<END_OF_REGISTEREMAILUSER_HELP
|
$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.
|
register a new user by email address.
|
||||||
|
|
||||||
END_OF_REGISTEREMAILUSER_HELP;
|
END_OF_REGISTEREMAILUSER_HELP;
|
||||||
@ -35,6 +39,11 @@ if (count($args) == 0) {
|
|||||||
$email = $args[0];
|
$email = $args[0];
|
||||||
|
|
||||||
$confirm = EmailRegistrationPlugin::registerEmail($email);
|
$confirm = EmailRegistrationPlugin::registerEmail($email);
|
||||||
|
|
||||||
|
if (have_option('e', 'email')) {
|
||||||
|
EmailRegistrationPlugin::sendConfirmEmail($confirm);
|
||||||
|
}
|
||||||
|
|
||||||
$confirmUrl = common_local_url('register', array('code' => $confirm->code));
|
$confirmUrl = common_local_url('register', array('code' => $confirm->code));
|
||||||
|
|
||||||
print $confirmUrl."\n";
|
print $confirmUrl."\n";
|
||||||
|
Loading…
Reference in New Issue
Block a user