$recipients = $address;
$profile = $user->getProfile();
+ $headers['Date'] = date("r", time());
$headers['From'] = mail_notify_from();
$headers['To'] = $profile->getBestName() . ' <' . $address . '>';
$headers['Subject'] = $subject;
$user = new User();
$UT = common_config('db','type')=='pgsql'?'"user"':'user';
+ $replies = $notice->getReplies();
$user->query('SELECT nickname, smsemail, incomingemail ' .
- "FROM $UT JOIN subscription " .
+ "FROM $UT LEFT OUTER JOIN subscription " .
"ON $UT.id = subscription.subscriber " .
- 'WHERE subscription.subscribed = ' . $notice->profile_id . ' ' .
+ 'AND subscription.subscribed = ' . $notice->profile_id . ' ' .
'AND subscription.subscribed != subscription.subscriber ' .
+ // Users (other than the sender) who `want SMS notices':
+ "WHERE $UT.id != " . $notice->profile_id . ' ' .
"AND $UT.smsemail IS NOT null " .
"AND $UT.smsnotify = 1 " .
- 'AND subscription.sms = 1 ');
+ // ... where either the user _is_ subscribed to the sender
+ // (any of the "subscription" fields IS NOT null)
+ // and wants to get SMS for all of this scribe's notices...
+ 'AND (subscription.sms = 1 ' .
+ // ... or where the user was mentioned in
+ // or replied-to with the notice:
+ ($replies ? sprintf("OR $UT.id in (%s)",
+ implode(',', $replies))
+ : '') .
+ ')');
while ($user->fetch()) {
common_log(LOG_INFO,
return mail_to_user($to, $subject, $body, $headers);
}
-/**
- * Notify a user that one of their notices has been chosen as a 'fave'
- *
- * Doesn't check that the user has an email address nor if they
- * want to receive notification of faves. Maybe this happens higher
- * up the stack...?
- *
- * @param User $other The user whose notice was faved
- * @param User $user The user who faved the notice
- * @param Notice $notice The notice that was faved
- *
- * @return void
- */
-function mail_notify_fave($other, $user, $notice)
-{
- if (!$user->hasRight(Right::EMAILONFAVE)) {
- return;
- }
-
- $profile = $user->getProfile();
- if ($other->hasBlocked($profile)) {
- // If the author has blocked us, don't spam them with a notification.
- return;
- }
-
- $bestname = $profile->getBestName();
-
- common_switch_locale($other->language);
-
- // TRANS: Subject for favorite notification e-mail.
- // TRANS: %1$s is the adding user's long name, %2$s is the adding user's nickname.
- $subject = sprintf(_('%1$s (@%2$s) added your notice as a favorite'), $bestname, $user->nickname);
-
- // TRANS: Body for favorite notification e-mail.
- // TRANS: %1$s is the adding user's long name, $2$s is the date the notice was created,
- // TRANS: %3$s is a URL to the faved notice, %4$s is the faved notice text,
- // TRANS: %5$s is a URL to all faves of the adding user, %6$s is the StatusNet sitename,
- // TRANS: %7$s is the adding user's nickname.
- $body = sprintf(_("%1\$s (@%7\$s) just added your notice from %2\$s".
- " as one of their favorites.\n\n" .
- "The URL of your notice is:\n\n" .
- "%3\$s\n\n" .
- "The text of your notice is:\n\n" .
- "%4\$s\n\n" .
- "You can see the list of %1\$s's favorites here:\n\n" .
- "%5\$s"),
- $bestname,
- common_exact_date($notice->created),
- common_local_url('shownotice',
- array('notice' => $notice->id)),
- $notice->content,
- common_local_url('showfavorites',
- array('nickname' => $user->nickname)),
- common_config('site', 'name'),
- $user->nickname) .
- mail_footer_block();
-
- $headers = _mail_prepare_headers('fave', $other->nickname, $user->nickname);
-
- common_switch_locale();
- mail_to_user($other, $subject, $body, $headers);
-}
-
/**
* Notify a user that they have received an "attn:" message AKA "@-reply"
*
*/
function mail_notify_attn($user, $notice)
{
- if (!$user->email || !$user->emailnotifyattn) {
+ if (!$user->receivesEmailNotifications()) {
return;
}
return;
}
+ // See if the notice's author who mentions this user is sandboxed
if (!$sender->hasRight(Right::EMAILONREPLY)) {
return;
}
+ // If the author has blocked the author, don't spam them with a notification.
if ($user->hasBlocked($sender)) {
- // If the author has blocked us, don't spam them with a notification.
return;
}