DiscussionModel::bookmarkDiscussion PHP Method

bookmarkDiscussion() public method

Events: AfterBookmarkDiscussion.
public bookmarkDiscussion ( integer $DiscussionID, integer $UserID, &$Discussion = null ) : boolean
$DiscussionID integer Unique ID of discussion to (un)bookmark.
$UserID integer Unique ID of user doing the (un)bookmarking.
return boolean Current state of the bookmark (TRUE for bookmarked, FALSE for unbookmarked).
    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;
    }