$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,
* 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
+ * @param User $rcpt The user whose notice was faved
+ * @param Profile $sender The user who faved the notice
+ * @param Notice $notice The notice that was faved
*
* @return void
*/
-function mail_notify_fave($other, $user, $notice)
+function mail_notify_fave(User $rcpt, Profile $sender, Notice $notice)
{
- if (!$user->hasRight(Right::EMAILONFAVE)) {
+ if (!$sender->hasRight(Right::EMAILONFAVE)) {
return;
}
- $profile = $user->getProfile();
- if ($other->hasBlocked($profile)) {
+ if ($rcpt->hasBlocked($sender)) {
// If the author has blocked us, don't spam them with a notification.
return;
}
- $bestname = $profile->getBestName();
+ if (!$rcpt->getPref('email', 'notify_fave', 1)) {
+ return;
+ }
+
+ $bestname = $sender->getBestName();
- common_switch_locale($other->language);
+ common_switch_locale($rcpt->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);
+ $subject = sprintf(_('%1$s (@%2$s) added your notice as a favorite'), $bestname, $sender->getNickname());
// 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,
array('notice' => $notice->id)),
$notice->content,
common_local_url('showfavorites',
- array('nickname' => $user->nickname)),
+ array('nickname' => $sender->getNickname())),
common_config('site', 'name'),
- $user->nickname) .
+ $sender->getNickname()) .
mail_footer_block();
- $headers = _mail_prepare_headers('fave', $other->nickname, $user->nickname);
+ $headers = _mail_prepare_headers('fave', $rcpt->getNickname(), $sender->getNickname());
common_switch_locale();
- mail_to_user($other, $subject, $body, $headers);
+ mail_to_user($rcpt, $subject, $body, $headers);
}
/**