UserModel::mergeStart PHP Method

mergeStart() private method

Start merging user accounts.
private mergeStart ( integer $OldUserID, integer $NewUserID ) : integer | null
$OldUserID integer The ID of the old user.
$NewUserID integer The ID of the new user.
return integer | null Returns the merge table ID of the merge.
    private function mergeStart($OldUserID, $NewUserID)
    {
        $Model = new Gdn_Model('UserMerge');
        // Grab the users.
        $OldUser = $this->getID($OldUserID, DATASET_TYPE_ARRAY);
        $NewUser = $this->getID($NewUserID, DATASET_TYPE_ARRAY);
        // First see if there is a record with the same merge.
        $Row = $Model->getWhere(['OldUserID' => $OldUserID, 'NewUserID' => $NewUserID])->firstRow(DATASET_TYPE_ARRAY);
        if ($Row) {
            $MergeID = $Row['MergeID'];
            // Save this merge in the log.
            if ($Row['Attributes']) {
                $Attributes = dbdecode($Row['Attributes']);
            } else {
                $Attributes = [];
            }
            $Attributes['Log'][] = ['UserID' => Gdn::session()->UserID, 'Date' => Gdn_Format::toDateTime()];
            $Row = ['MergeID' => $MergeID, 'Attributes' => $Attributes];
        } else {
            $Row = ['OldUserID' => $OldUserID, 'NewUserID' => $NewUserID];
        }
        $UserSet = [];
        $OldUserSet = [];
        if (dateCompare($OldUser['DateFirstVisit'], $NewUser['DateFirstVisit']) < 0) {
            $UserSet['DateFirstVisit'] = $OldUser['DateFirstVisit'];
        }
        if (!isset($Row['Attributes']['User']['CountVisits'])) {
            $UserSet['CountVisits'] = $OldUser['CountVisits'] + $NewUser['CountVisits'];
            $OldUserSet['CountVisits'] = 0;
        }
        if (!empty($UserSet)) {
            // Save the user information on the merge record.
            foreach ($UserSet as $Key => $Value) {
                // Only save changed values that aren't already there from a previous merge.
                if ($NewUser[$Key] != $Value && !isset($Row['Attributes']['User'][$Key])) {
                    $Row['Attributes']['User'][$Key] = $NewUser[$Key];
                }
            }
        }
        $MergeID = $Model->save($Row);
        if (val('MergeID', $Row)) {
            $MergeID = $Row['MergeID'];
        }
        if (!$MergeID) {
            throw new Gdn_UserException($Model->Validation->resultsText());
        }
        // Update the user with the new user-level data.
        $this->setField($NewUserID, $UserSet);
        if (!empty($OldUserSet)) {
            $this->setField($OldUserID, $OldUserSet);
        }
        return $MergeID;
    }
UserModel