CommentModel::recordAdvancedNotications PHP Method

recordAdvancedNotications() public method

Record advanced notifications for users.
public recordAdvancedNotications ( ActivityModel $ActivityModel, array $Activity, array $Discussion )
$ActivityModel ActivityModel
$Activity array
$Discussion array
    public function recordAdvancedNotications($ActivityModel, $Activity, $Discussion)
    {
        if (is_numeric($Discussion)) {
            $Discussion = $this->getID($Discussion);
        }
        $CategoryID = val('CategoryID', $Discussion);
        // Figure out the category that governs this notification preference.
        $i = 0;
        $Category = CategoryModel::categories($CategoryID);
        if (!$Category) {
            return;
        }
        while ($Category['Depth'] > 2 && $i < 20) {
            if (!$Category || $Category['Archived']) {
                return;
            }
            $i++;
            $Category = CategoryModel::categories($Category['ParentCategoryID']);
        }
        // Grab all of the users that need to be notified.
        $Data = $this->SQL->whereIn('Name', array('Preferences.Email.NewComment.' . $Category['CategoryID'], 'Preferences.Popup.NewComment.' . $Category['CategoryID']))->get('UserMeta')->resultArray();
        $NotifyUsers = array();
        foreach ($Data as $Row) {
            if (!$Row['Value']) {
                continue;
            }
            $UserID = $Row['UserID'];
            // Check user can still see the discussion.
            $discussionModel = new DiscussionModel();
            if (!$discussionModel->canView($Discussion, $UserID)) {
                continue;
            }
            $Name = $Row['Name'];
            if (strpos($Name, '.Email.') !== false) {
                $NotifyUsers[$UserID]['Emailed'] = ActivityModel::SENT_PENDING;
            } elseif (strpos($Name, '.Popup.') !== false) {
                $NotifyUsers[$UserID]['Notified'] = ActivityModel::SENT_PENDING;
            }
        }
        foreach ($NotifyUsers as $UserID => $Prefs) {
            $Activity['NotifyUserID'] = $UserID;
            $Activity['Emailed'] = val('Emailed', $Prefs, false);
            $Activity['Notified'] = val('Notified', $Prefs, false);
            $ActivityModel->Queue($Activity);
        }
    }