*/
class EmailRegistrationPlugin extends Plugin
{
+ const CONFIRMTYPE = 'register';
+
function onAutoload($cls)
{
$dir = dirname(__FILE__);
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',
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);
-
- 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);
- }
+ EmailRegistrationPlugin::sendConfirmEmail($confirm);
- $this->sendConfirmEmail($confirm);
+ // 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);
$this->complete = $prompt;
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);
}
/**
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;
$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";