/**
* Queue a notification for sending.
*
* @since 2.0.17
* @access public
* @param int $ActivityID
* @param string $Story
* @param string $Position
* @param bool $Force
*/
public function queueNotification($ActivityID, $Story = '', $Position = 'last', $Force = false)
{
$Activity = $this->getID($ActivityID);
if (!is_object($Activity)) {
return;
}
$Story = Gdn_Format::text($Story == '' ? $Activity->Story : $Story, false);
// If this is a comment on another activity, fudge the activity a bit so that everything appears properly.
if (is_null($Activity->RegardingUserID) && $Activity->CommentActivityID > 0) {
$CommentActivity = $this->getID($Activity->CommentActivityID);
$Activity->RegardingUserID = $CommentActivity->RegardingUserID;
$Activity->Route = '/activity/item/' . $Activity->CommentActivityID;
}
$User = Gdn::userModel()->getID($Activity->RegardingUserID, DATASET_TYPE_OBJECT);
//$this->SQL->select('UserID, Name, Email, Preferences')->from('User')->where('UserID', $Activity->RegardingUserID)->get()->firstRow();
if ($User) {
if ($Force) {
$Preference = $Force;
} else {
// $Preferences = Gdn_Format::Unserialize($User->Preferences);
$ConfigPreference = c('Preferences.Email.' . $Activity->ActivityType, '0');
if ($ConfigPreference !== false) {
$Preference = val('Email.' . $Activity->ActivityType, $User->Preferences, $ConfigPreference);
} else {
$Preference = false;
}
}
if ($Preference) {
$ActivityHeadline = Gdn_Format::text(Gdn_Format::activityHeadline($Activity, $Activity->ActivityUserID, $Activity->RegardingUserID), false);
$Email = new Gdn_Email();
$Email->subject(sprintf(t('[%1$s] %2$s'), Gdn::config('Garden.Title'), $ActivityHeadline));
$Email->to($User);
$url = externalUrl(val('Route', $Activity) == '' ? '/' : val('Route', $Activity));
$emailTemplate = $Email->getEmailTemplate()->setButton($url, t('Check it out'))->setTitle(Gdn_Format::plainText(val('Headline', $Activity)));
if ($message = val('Story', $Activity)) {
$emailTemplate->setMessage($message, true);
}
$Email->setEmailTemplate($emailTemplate);
if (!array_key_exists($User->UserID, $this->_NotificationQueue)) {
$this->_NotificationQueue[$User->UserID] = array();
}
$Notification = array('ActivityID' => $ActivityID, 'User' => $User, 'Email' => $Email, 'Route' => $Activity->Route, 'Story' => $Story, 'Headline' => $ActivityHeadline, 'Activity' => $Activity);
if ($Position == 'first') {
$this->_NotificationQueue[$User->UserID] = array_merge(array($Notification), $this->_NotificationQueue[$User->UserID]);
} else {
$this->_NotificationQueue[$User->UserID][] = $Notification;
}
}
}
}