X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=plugins%2FEmailSummary%2Fuseremailsummaryhandler.php;h=2c8c0d9039e1afd6c1d68fb3579c704848e049ed;hb=2640232c68223f98f08ad7c5fc06ec4b8e99f5e5;hp=b1ebd0c425ac79f37c0c16c7b270be47d84df849;hpb=2b0d1d9fc4cc2f8d297a14ed0708bcb64a1f070d;p=quix0rs-gnu-social.git diff --git a/plugins/EmailSummary/useremailsummaryhandler.php b/plugins/EmailSummary/useremailsummaryhandler.php index b1ebd0c425..2c8c0d9039 100644 --- a/plugins/EmailSummary/useremailsummaryhandler.php +++ b/plugins/EmailSummary/useremailsummaryhandler.php @@ -1,7 +1,7 @@ send_summary) { - common_log(LOG_INFO, sprintf('Not sending email summary for user %s by request.', $user_id)); - return true; - } - - $since_id = null; - - if (!empty($ess)) { - $since_id = $ess->last_summary_id; - } - - $user = User::staticGet('id', $user_id); - - if (empty($user)) { - common_log(LOG_INFO, sprintf('Not sending email summary for user %s; no such user.', $user_id)); - return true; - } - - if (empty($user->email)) { - common_log(LOG_INFO, sprintf('Not sending email summary for user %s; no email address.', $user_id)); - return true; - } - - $profile = $user->getProfile(); - - if (empty($profile)) { - common_log(LOG_WARNING, sprintf('Not sending email summary for user %s; no profile.', $user_id)); - return true; - } - - $notice = $user->ownFriendsTimeline(0, self::MAX_NOTICES, $since_id); - - if (empty($notice) || $notice->N == 0) { - common_log(LOG_WARNING, sprintf('Not sending email summary for user %s; no notices.', $user_id)); - return true; - } - - // XXX: This is risky fingerpoken in der objektvars, but I didn't feel like - // figuring out a better way. -ESP - - $new_top = null; - - if ($notice instanceof ArrayWrapper) { - $new_top = $notice->_items[0]->id; - } - - $out = new XMLStringer(); - - $out->raw(sprintf(_('

Recent updates from %1s for %2s:

'), - common_config('site', 'name'), - $profile->getBestName())); - - - $out->elementStart('table', array('width' => '541px', 'style' => 'border: none')); - - while ($notice->fetch()) { - - $profile = Profile::staticGet('id', $notice->profile_id); - - if (empty($profile)) { - continue; - } - - $avatar = $profile->getAvatar(AVATAR_STREAM_SIZE); - - $out->elementStart('tr'); - $out->elementStart('td', array('width' => AVATAR_STREAM_SIZE, - 'height' => AVATAR_STREAM_SIZE, - 'align' => 'left', - 'valign' => 'top')); - $out->element('img', array('src' => ($avatar) ? - $avatar->displayUrl() : - Avatar::defaultImage($avatar_size), - 'class' => 'avatar photo', - 'width' => AVATAR_STREAM_SIZE, - 'height' => AVATAR_STREAM_SIZE, - 'alt' => $profile->getBestName())); - $out->elementEnd('td'); - $out->elementStart('td', array('align' => 'left', - 'valign' => 'top')); - $out->element('a', array('href' => $profile->profileurl), - $profile->nickname); - $out->text(' '); - $out->raw($notice->rendered); - $out->element('br'); // yeah, you know it. I just wrote a
in the middle of my table layout. - $noticeurl = $notice->bestUrl(); - // above should always return an URL - assert(!empty($noticeurl)); - $out->elementStart('a', array('rel' => 'bookmark', - 'class' => 'timestamp', - 'href' => $noticeurl)); - $dt = common_date_iso8601($notice->created); - $out->element('abbr', array('class' => 'published', - 'title' => $dt), - common_date_string($notice->created)); - $out->elementEnd('a'); - if ($notice->hasConversation()) { - $conv = Conversation::staticGet('id', $notice->conversation); - $convurl = $conv->uri; - if (!empty($convurl)) { - $out->text(' '); - $out->element('a', - array('href' => $convurl.'#notice-'.$notice->id, - 'class' => 'response'), - _('in context')); - } - } - $out->elementEnd('td'); - $out->elementEnd('tr'); - } - - $out->elementEnd('table'); - - $out->raw(sprintf(_('

change your email settings for %2s

'), - common_local_url('emailsettings'), - common_config('site', 'name'))); - - $body = $out->getString(); - - // FIXME: do something for people who don't like HTML email - - mail_to_user($user, _('Updates from your network'), $body, - array('Content-Type' => 'text/html; charset=UTF-8')); - - if (empty($ess)) { - - $ess = new Email_summary_status(); - - $ess->user_id = $user_id; - $ess->created = common_sql_now(); - $ess->last_summary_id = $new_top; - $ess->modified = common_sql_now(); - - $ess->insert(); - - } else { - - $orig = clone($ess); - - $ess->last_summary_id = $new_top; - $ess->modified = common_sql_now(); - - $ess->update($orig); - } - - return true; + // Skip if they've asked not to get summaries + + $ess = Email_summary_status::staticGet('user_id', $user_id); + + if (!empty($ess) && !$ess->send_summary) { + common_log(LOG_INFO, sprintf('Not sending email summary for user %s by request.', $user_id)); + return true; + } + + $since_id = null; + + if (!empty($ess)) { + $since_id = $ess->last_summary_id; + } + + $user = User::staticGet('id', $user_id); + + if (empty($user)) { + common_log(LOG_INFO, sprintf('Not sending email summary for user %s; no such user.', $user_id)); + return true; + } + + if (empty($user->email)) { + common_log(LOG_INFO, sprintf('Not sending email summary for user %s; no email address.', $user_id)); + return true; + } + + $profile = $user->getProfile(); + + if (empty($profile)) { + common_log(LOG_WARNING, sprintf('Not sending email summary for user %s; no profile.', $user_id)); + return true; + } + + $notice = $user->ownFriendsTimeline(0, self::MAX_NOTICES, $since_id); + + if (empty($notice) || $notice->N == 0) { + common_log(LOG_WARNING, sprintf('Not sending email summary for user %s; no notices.', $user_id)); + return true; + } + + // XXX: This is risky fingerpoken in der objektvars, but I didn't feel like + // figuring out a better way. -ESP + + $new_top = null; + + if ($notice instanceof ArrayWrapper) { + $new_top = $notice->_items[0]->id; + } + + $out = new XMLStringer(); + + $out->elementStart('div', array('width' => '100%', + 'style' => 'background-color: #ffffff; border: 4px solid #4c609a; padding: 10px;')); + + $out->elementStart('div', array('style' => 'color: #ffffff; background-color: #4c609a; font-weight: bold; margin-bottom: 10px; padding: 4px;')); + // TRANS: Text in e-mail summary. + // TRANS: %1$s is the StatusNet sitename, %2$s is the recipient's profile name. + $out->raw(sprintf(_m('Recent updates from %1$s for %2s:'), + common_config('site', 'name'), + $profile->getBestName())); + $out->elementEnd('div'); + + $out->elementStart('table', array('width' => '550px', + 'style' => 'border: none; border-collapse: collapse;', 'cellpadding' => '6')); + + while ($notice->fetch()) { + $profile = Profile::staticGet('id', $notice->profile_id); + + if (empty($profile)) { + continue; + } + + $avatar = $profile->getAvatar(AVATAR_STREAM_SIZE); + + $out->elementStart('tr'); + $out->elementStart('td', array('width' => AVATAR_STREAM_SIZE, + 'height' => AVATAR_STREAM_SIZE, + 'align' => 'left', + 'valign' => 'top', + 'style' => 'border-bottom: 1px dotted #C5CEE3; padding: 10px 6px 10px 6px;')); + $out->element('img', array('src' => ($avatar) ? + $avatar->displayUrl() : + Avatar::defaultImage(AVATAR_STREAM_SIZE), + 'width' => AVATAR_STREAM_SIZE, + 'height' => AVATAR_STREAM_SIZE, + 'alt' => $profile->getBestName())); + $out->elementEnd('td'); + $out->elementStart('td', array('align' => 'left', + 'valign' => 'top', + 'style' => 'border-bottom: 1px dotted #C5CEE3; padding: 10px 6px 10px 6px;')); + $out->element('a', array('href' => $profile->profileurl), + $profile->nickname); + $out->text(' '); + $out->raw($notice->rendered); + $out->elementStart('div', array('style' => 'font-size: 0.8em; padding-top: 4px;')); + $noticeurl = $notice->bestUrl(); + // above should always return an URL + assert(!empty($noticeurl)); + $out->elementStart('a', array('rel' => 'bookmark', + 'href' => $noticeurl)); + $dt = common_date_iso8601($notice->created); + $out->element('abbr', array('style' => 'border-bottom: none;', + 'title' => $dt), + common_date_string($notice->created)); + $out->elementEnd('a'); + if ($notice->hasConversation()) { + $conv = Conversation::staticGet('id', $notice->conversation); + $convurl = $conv->uri; + if (!empty($convurl)) { + $out->text(' '); + $out->element('a', + array('href' => $convurl.'#notice-'.$notice->id), + _m('in context')); + } + } + $out->elementEnd('div'); + $out->elementEnd('td'); + $out->elementEnd('tr'); + } + + $out->elementEnd('table'); + + $out->raw(sprintf(_m('

change your email settings for %2s

'), + common_local_url('emailsettings'), + common_config('site', 'name'))); + + $out->elementEnd('div'); + + $body = $out->getString(); + + // FIXME: do something for people who don't like HTML email + + mail_to_user($user, _m('Updates from your network'), $body, + array('Content-Type' => 'text/html; charset=UTF-8')); + + if (empty($ess)) { + $ess = new Email_summary_status(); + + $ess->user_id = $user_id; + $ess->created = common_sql_now(); + $ess->last_summary_id = $new_top; + $ess->modified = common_sql_now(); + + $ess->insert(); + } else { + $orig = clone($ess); + + $ess->last_summary_id = $new_top; + $ess->modified = common_sql_now(); + + $ess->update($orig); + } + + return true; } }