9 class BlogSubscriptionManager
11 var $daily_digest = array();
12 var $weekly_digest = array();
16 function BlogSubscriptionManager()
18 $this->subscribers = Query::create(
BlogSubscriber,
"WHERE subscription_type IN ('daily', 'weekly') AND blog_id IN (SELECT blog_id FROM blog WHERE published=true)")->execute();
20 $numSubscribers = count($this->subscribers);
21 trace(pluralize($numSubscribers.
" blog subscriber", $numSubscribers).
" found", 3);
22 $this->daily_digest = $this->getDailyDigest();
23 $this->weekly_digest = $this->getWeeklyDigest();
26 static function generateToken()
31 function getDailyDigest()
33 $today =
new DateTime(today() .
"00:00:00");
37 $articles = Query::create(
Article,
"WHERE published=true AND publish_date=:yesterday")
38 ->bind(
":yesterday",
$yesterday->format(
"Y-m-d H:i:s"))
43 $daily_digest = array();
50 if(!array_key_exists(
$blog->blog_id, $this->blogs))
60 function getWeeklyDigest()
62 $today =
new DateTime(now());
65 if(
$today->format(
"D") != $start_of_week)
71 $last_week->modify(
"-7 days");
73 $articles = Query::create(
Article,
"WHERE published=true AND publish_date BETWEEN :last_week AND :today")
74 ->bind(
":last_week", $last_week->format(
"Y-m-d"),
":today",
$today->format(
"Y-m-d"))
79 $weekly_digest = array();
86 if(!array_key_exists(
$blog->blog_id, $this->blogs))
93 return $weekly_digest;
96 function sendDigests()
98 if(!count($this->subscribers))
return;
111 if((
$subscriber->subscription_type ==
"daily" && !array_key_exists(
$blog_id, $this->daily_digest)) ||
112 (
$subscriber->subscription_type ==
"weekly" && !array_key_exists(
$blog_id, $this->weekly_digest)))
117 echo
$subscriber->format(
"Sending {subscription_type} digest to {subscriber_email}\n");
122 $label =
$subscriber->format(
"{subscription_type:prettify}");
124 $subject =
"{$sitename} $label Digest for {$blog->title}";
137 $message .= formatItems(
$articles,
"{BlogSubscriptionManager::formatArticleMessage}",
"\n<br/><hr/><br/>\n");
141 $emailHandler->send();
150 static function formatArticleMessage(
$article)
152 $authorName =
$article->getAuthorName();
156 $author =
"<br><label>Author </label>$authorName";
161 $publisher =
" {$article->publication}";
167 return $article->format(
"<h3>{title}</h3><br>{message}<br><br>{$url}?article_id={article_id}{$author}<br><label>Published </label> {publish_date:short}{$publisher}");
170 function formatUnsubscribeMessageFooter(
$subscriber)
174 $url =
"http://" .
$config[
"http_host"] .
"/blog_subscription_preferences?subscription_token={subscription_token}";
175 $messageFooter =
$subscriber->format(
"</br></br>To unsubscribe to these messages or change your subscription preferences, go to $url\n\n");
191 $subscriber->filter =
new InclusionFilter(
"subscription_type");
208 $out =
$blog->format(
"<a href='$url'>{title:65}</a>");
221 $subscriptionTypes[
"unsubscribe"] =
"Unsubscribe";
225 unset($subscriptionTypes[
"daily"]);
226 unset($subscriptionTypes[
"weekly"]);
229 if(!array_key_exists(
$blogSubscriber->subscription_type, $subscriptionTypes))
237 foreach($subscriptionTypes as $value =>
$name)
239 $selected = ($current == $value) ?
" checked" :
"";
240 $field =
"blog_subscriber_id_{$blog_subscriber_id}[$value]";
241 $html .=
"<input style='border: none' type='radio' id='{$field}' name='{$blog_subscriber_id}[]' value='$value' $selected>$name</option><br>\n";
247 static function writeSubscriptionPreferenceScript(
$div_id)
251 <script type=
"text/javascript" src=
"/components/blog/js/blog_subscriber_preference_manager.js"></script>
252 <script type=
"text/javascript">
253 var blogSubscriberMgr;
255 window.addEvent(
'domready',
function()
257 blogSubscriberMgr =
new BlogSubscriberPreferenceManager(
'<?php echo $div_id ?>');
Defines the Article class.
static $subscriptionTypes
static using()
Import the datamodels, views and manifest for the specified component(s).
static getValue($component, $name)
Retrieve the value of the specified Setting.
const subscription_unsubscribe