public function bookmarkDiscussion($DiscussionID, $UserID, &$Discussion = null)
{
$State = '1';
$DiscussionData = $this->SQL->select('d.*')->select('w.DateLastViewed, w.Dismissed, w.Bookmarked')->select('w.CountComments', '', 'CountCommentWatch')->select('w.UserID', '', 'WatchUserID')->select('w.Participated')->select('d.DateLastComment', '', 'LastDate')->select('d.LastCommentUserID', '', 'LastUserID')->select('lcu.Name', '', 'LastName')->from('Discussion d')->join('UserDiscussion w', "d.DiscussionID = w.DiscussionID and w.UserID = {$UserID}", 'left')->join('User lcu', 'd.LastCommentUserID = lcu.UserID', 'left')->where('d.DiscussionID', $DiscussionID)->get();
$this->addDiscussionColumns($DiscussionData);
$Discussion = $DiscussionData->firstRow();
if ($Discussion->WatchUserID == '') {
$this->SQL->options('Ignore', true);
$this->SQL->insert('UserDiscussion', ['UserID' => $UserID, 'DiscussionID' => $DiscussionID, 'Bookmarked' => $State]);
$Discussion->Bookmarked = true;
} else {
$State = $Discussion->Bookmarked == '1' ? '0' : '1';
$this->SQL->update('UserDiscussion')->set('Bookmarked', $State)->where('UserID', $UserID)->where('DiscussionID', $DiscussionID)->put();
$Discussion->Bookmarked = $State;
}
// Update the cached bookmark count on the discussion
$BookmarkCount = $this->bookmarkCount($DiscussionID);
$this->SQL->update('Discussion')->set('CountBookmarks', $BookmarkCount)->where('DiscussionID', $DiscussionID)->put();
$this->CountDiscussionBookmarks = $BookmarkCount;
// Prep and fire event
$this->EventArguments['Discussion'] = $Discussion;
$this->EventArguments['State'] = $State;
$this->fireEvent('AfterBookmarkDiscussion');
return $State == '1' ? true : false;
}