Commit 6ec72b29 authored by mmn's avatar mmn

Move mail_confirm_address out of mail.php

parent 47ae21c0
...@@ -369,8 +369,7 @@ class EmailsettingsAction extends SettingsAction ...@@ -369,8 +369,7 @@ class EmailsettingsAction extends SettingsAction
throw new ServerException(_('Could not insert confirmation code.')); throw new ServerException(_('Could not insert confirmation code.'));
} }
common_debug('Sending confirmation address for user '.$user->getID().' to email '.$email); $confirm->sendConfirmation();
mail_confirm_address($user, $confirm->code, $user->getNickname(), $email);
Event::handle('EndAddEmailAddress', array($user, $email)); Event::handle('EndAddEmailAddress', array($user, $email));
} }
......
...@@ -35,18 +35,18 @@ class Confirm_address extends Managed_DataObject ...@@ -35,18 +35,18 @@ class Confirm_address extends Managed_DataObject
); );
} }
static function getAddress($address, $addressType) static function getByAddress($address, $addressType)
{ {
$ca = new Confirm_address(); $ca = new Confirm_address();
$ca->address = $address; $ca->address = $address;
$ca->address_type = $addressType; $ca->address_type = $addressType;
if ($ca->find(true)) { if (!$ca->find(true)) {
return $ca; throw new NoResultException($ca);
} }
return null; return $ca;
} }
static function saveNew($user, $address, $addressType, $extra=null) static function saveNew($user, $address, $addressType, $extra=null)
...@@ -67,6 +67,85 @@ class Confirm_address extends Managed_DataObject ...@@ -67,6 +67,85 @@ class Confirm_address extends Managed_DataObject
return $ca; return $ca;
} }
public function getAddress()
{
return $this->address;
}
public function getAddressType()
{
return $this->address_type;
}
public function getCode()
{
return $this->code;
}
public function getProfile()
{
return Profile::getByID($this->user_id);
}
public function getUrl()
{
return common_local_url('confirmaddress', array('code' => $this->code));
}
/**
* Supply arguments in $args. Currently known args:
* headers Array with headers (only used for email)
* nickname How we great the user (defaults to nickname, but can be any string)
* sitename Name we sign the email with (defaults to sitename, but can be any string)
* url The confirmation address URL.
*/
public function sendConfirmation(array $args=array())
{
common_debug('Sending confirmation URL for user '._ve($this->user_id).' using '._ve($this->address_type));
$defaults = [
'headers' => array(),
'nickname' => $this->getProfile()->getNickname(),
'sitename' => common_config('site', 'name'),
'url' => $this->getUrl(),
];
foreach (array_keys($defaults) as $key) {
if (!isset($args[$key])) {
$args[$key] = $defaults[$key];
}
}
switch ($this->getAddressType()) {
case 'email':
$this->sendEmailConfirmation($args);
break;
default:
throw ServerException('Unable to handle confirm_address address type: '._ve($this->address_type));
}
}
public function sendEmailConfirmation(array $args=array())
{
// TRANS: Subject for address confirmation email.
$subject = _('Email address confirmation');
// TRANS: Body for address confirmation email.
// TRANS: %1$s is the addressed user's nickname, %2$s is the StatusNet sitename,
// TRANS: %3$s is the URL to confirm at.
$body = sprintf(_("Hey, %1\$s.\n\n".
"Someone just entered this email address on %2\$s.\n\n" .
"If it was you, and you want to confirm your entry, ".
"use the URL below:\n\n\t%3\$s\n\n" .
"If not, just ignore this message.\n\n".
"Thanks for your time, \n%2\$s\n"),
$args['nickname'],
$args['sitename'],
$args['url']);
require_once(INSTALLDIR . '/lib/mail.php');
return mail_to_user($this->getProfile()->getUser(), $subject, $body, $args['headers'], $this->getAddress());
}
public function delete($useWhere=false) public function delete($useWhere=false)
{ {
$result = parent::delete($useWhere); $result = parent::delete($useWhere);
......
...@@ -384,8 +384,7 @@ class User extends Managed_DataObject ...@@ -384,8 +384,7 @@ class User extends Managed_DataObject
if (!empty($email) && empty($user->email)) { if (!empty($email) && empty($user->email)) {
try { try {
require_once(INSTALLDIR . '/lib/mail.php'); $confirm->sendConfirmation();
mail_confirm_address($user, $confirm->code, $profile->getNickname(), $email);
} catch (EmailException $e) { } catch (EmailException $e) {
common_log(LOG_ERR, "Could not send user registration email for user id=={$profile->getID()}: {$e->getMessage()}"); common_log(LOG_ERR, "Could not send user registration email for user id=={$profile->getID()}: {$e->getMessage()}");
if (!$accept_email_fail) { if (!$accept_email_fail) {
......
...@@ -144,7 +144,7 @@ function mail_notify_from() ...@@ -144,7 +144,7 @@ function mail_notify_from()
* *
* @return boolean success flag * @return boolean success flag
*/ */
function mail_to_user(&$user, $subject, $body, $headers=array(), $address=null) function mail_to_user($user, $subject, $body, $headers=array(), $address=null)
{ {
if (!$address) { if (!$address) {
$address = $user->email; $address = $user->email;
...@@ -161,45 +161,6 @@ function mail_to_user(&$user, $subject, $body, $headers=array(), $address=null) ...@@ -161,45 +161,6 @@ function mail_to_user(&$user, $subject, $body, $headers=array(), $address=null)
return mail_send($recipients, $headers, $body); return mail_send($recipients, $headers, $body);
} }
/**
* Send an email to confirm a user's control of an email address
*
* @param User $user User claiming the email address
* @param string $code Confirmation code
* @param string $nickname Nickname of user
* @param string $address email address to confirm
*
* @see common_confirmation_code()
*
* @return success flag
*/
function mail_confirm_address($user, $code, $nickname, $address, $url=null)
{
if (empty($url)) {
$url = common_local_url('confirmaddress', array('code' => $code));
}
// TRANS: Subject for address confirmation email.
$subject = _('Email address confirmation');
// TRANS: Body for address confirmation email.
// TRANS: %1$s is the addressed user's nickname, %2$s is the StatusNet sitename,
// TRANS: %3$s is the URL to confirm at.
$body = sprintf(_("Hey, %1\$s.\n\n".
"Someone just entered this email address on %2\$s.\n\n" .
"If it was you, and you want to confirm your entry, ".
"use the URL below:\n\n\t%3\$s\n\n" .
"If not, just ignore this message.\n\n".
"Thanks for your time, \n%2\$s\n"),
$nickname,
common_config('site', 'name'),
$url);
$headers = array();
return mail_to_user($user, $subject, $body, $headers, $address);
}
/** /**
* notify a user of subscription by another user * notify a user of subscription by another user
* *
......
...@@ -106,9 +106,9 @@ class EmailRegistrationPlugin extends Plugin ...@@ -106,9 +106,9 @@ class EmailRegistrationPlugin extends Plugin
throw new ClientException(_m('Not a valid email address.')); throw new ClientException(_m('Not a valid email address.'));
} }
$confirm = Confirm_address::getAddress($email, self::CONFIRMTYPE); try {
$confirm = Confirm_address::getByAddress($email, self::CONFIRMTYPE);
if (empty($confirm)) { } catch (NoResultException $e) {
$confirm = Confirm_address::saveNew(null, $email, 'register'); $confirm = Confirm_address::saveNew(null, $email, 'register');
} }
......
...@@ -41,15 +41,15 @@ if (count($args) == 0) { ...@@ -41,15 +41,15 @@ if (count($args) == 0) {
$email = $args[0]; $email = $args[0];
$confirm = Confirm_address::getAddress($email, EmailRegistrationPlugin::CONFIRMTYPE); try {
$confirm = Confirm_address::getByAddress($email, EmailRegistrationPlugin::CONFIRMTYPE);
if (!empty($confirm)) {
if (have_option('d', 'dryrun')) { if (have_option('d', 'dryrun')) {
print "[Dry run mode] Deleted confirmation code {$confirm->code} for {$confirm->address}.\n"; print "[Dry run mode] Deleted confirmation code {$confirm->code} for {$confirm->address}.\n";
} else { } else {
$confirm->delete(); $confirm->delete();
print "Deleted confirmation code {$confirm->code} for {$confirm->address}.\n"; print "Deleted confirmation code {$confirm->code} for {$confirm->address}.\n";
} }
} else { } catch (NoResultException $e) {
print "Couldn't find an email registration code for {$email}.\n"; print "Exception thrown for {$email}: {$e->getMessage()}";
} }
...@@ -73,8 +73,4 @@ $url = common_local_url('confirmfirstemail', ...@@ -73,8 +73,4 @@ $url = common_local_url('confirmfirstemail',
print "$url\n"; print "$url\n";
mail_confirm_address($user, $confirm->sendConfirmation(['url'=>$url]);
$confirm->code,
$user->nickname,
$email,
$url);
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment