View source
<?php
class MessageDigest extends MessageNotifierBase {
public function deliver(array $output = array()) {
$message = $this->message;
$plugin = $this->plugin;
$message_digest = array(
'receiver' => $message->uid,
'gid' => !empty($message->gid) ? $message->gid : 0,
'notifier' => $plugin['name'],
'sent' => FALSE,
'timestamp' => $message->timestamp,
);
$mid = isset($message->mid) ? $message->mid : NULL;
if (empty($mid)) {
$mid = db_select('message', 'm')
->fields('m', array(
'mid',
))
->condition('timestamp', $message->timestamp)
->condition('type', $message->type)
->execute()
->fetchField();
}
if (!empty($mid)) {
$message_digest['mid'] = $mid;
}
drupal_write_record('message_digest', $message_digest);
return TRUE;
}
public function getInterval() {
return '1 day';
}
public function aggregate() {
$interval = $this
->getInterval();
$start = strtotime('-' . $interval);
$message_groups = array();
$query = db_select('message_digest', 'md');
$query
->fields('md');
$query
->condition('timestamp', $start, '>');
$query
->condition('sent', FALSE);
$query
->condition('notifier', $this->plugin['name']);
$result = $query
->execute();
foreach ($result as $row) {
$gid = $row->gid;
if (empty($gid)) {
$gid = 0;
}
$account = user_load($row->receiver);
$context = array(
'account' => $account,
'data' => $row,
'gid' => $gid,
'plugin' => $this->plugin,
);
drupal_alter('message_digest_aggregate', $context);
if (!empty($context['data']->mid)) {
$message_groups[$context['data']->receiver][$context['gid']][] = $context['data']->mid;
}
}
return $message_groups;
}
public function format($digest, $view_modes) {
$output_array = array();
foreach ($digest as $mid) {
$message = message_load($mid);
if (empty($message) || !is_object($message)) {
continue;
}
$rows = array();
foreach ($view_modes as $view_mode_name => $view_mode) {
$content = $message
->buildContent($view_mode_name);
$rows[$view_mode_name] = render($content);
}
$output_array[] = theme('message_digest_row', array(
'rows' => $rows,
'plugin' => $this->plugin,
'message' => $message,
));
}
return theme('message_digest', array(
'messages' => $output_array,
'plugin' => $this->plugin,
));
}
public function deliverDigest($uid, $gid, $formatted_message) {
$account = user_load($uid);
$lang = !empty($account->language) && $account->language != LANGUAGE_NONE ? $languages[$account->language] : language_default();
$params = array(
'body' => $formatted_message,
'gid' => $gid,
);
drupal_mail('message_digest', 'digest', $account->mail, $lang, $params);
}
public function markSent($uid, $plugin_name) {
$num_rows = db_update('message_digest')
->fields(array(
'sent' => TRUE,
))
->condition('receiver', $uid)
->condition('notifier', $plugin_name)
->execute();
}
}