CakeDC\Users\Model\Behavior\SocialBehavior::_populateUser PHP Метод

_populateUser() защищенный Метод

Build new user entity either by using an existing user or extracting the data from the social login data to create a new one
protected _populateUser ( array $data, Cake\Datasource\EntityInterface $existingUser, string $useEmail, string $validateEmail, string $tokenExpiration ) : Cake\Datasource\EntityInterface
$data array Array social login.
$existingUser Cake\Datasource\EntityInterface user data.
$useEmail string email to use.
$validateEmail string email to validate.
$tokenExpiration string token_expires data.
Результат Cake\Datasource\EntityInterface
    protected function _populateUser($data, $existingUser, $useEmail, $validateEmail, $tokenExpiration)
    {
        $accountData['username'] = Hash::get($data, 'username');
        $accountData['reference'] = Hash::get($data, 'id');
        $accountData['avatar'] = Hash::get($data, 'avatar');
        $accountData['link'] = Hash::get($data, 'link');
        $accountData['avatar'] = str_replace('normal', 'square', $accountData['avatar']);
        $accountData['description'] = Hash::get($data, 'bio');
        $accountData['token'] = Hash::get($data, 'credentials.token');
        $accountData['token_secret'] = Hash::get($data, 'credentials.secret');
        $expires = Hash::get($data, 'credentials.expires');
        if (!empty($expires)) {
            $expiresTime = new DateTime();
            $accountData['token_expires'] = $expiresTime->setTimestamp($expires)->format('Y-m-d H:i:s');
        } else {
            $accountData['token_expires'] = null;
        }
        $accountData['data'] = serialize(Hash::get($data, 'raw'));
        $accountData['active'] = true;
        $dataValidated = Hash::get($data, 'validated');
        if (empty($existingUser)) {
            $firstName = Hash::get($data, 'first_name');
            $lastName = Hash::get($data, 'last_name');
            if (!empty($firstName) && !empty($lastName)) {
                $userData['first_name'] = $firstName;
                $userData['last_name'] = $lastName;
            } else {
                $name = explode(' ', Hash::get($data, 'full_name'));
                $userData['first_name'] = Hash::get($name, 0);
                array_shift($name);
                $userData['last_name'] = implode(' ', $name);
            }
            $userData['username'] = Hash::get($data, 'username');
            $username = Hash::get($userData, 'username');
            if (empty($username)) {
                $dataEmail = Hash::get($data, 'email');
                if (!empty($dataEmail)) {
                    $email = explode('@', $dataEmail);
                    $userData['username'] = Hash::get($email, 0);
                } else {
                    $firstName = Hash::get($userData, 'first_name');
                    $lastName = Hash::get($userData, 'last_name');
                    $userData['username'] = strtolower($firstName . $lastName);
                    $userData['username'] = preg_replace('/[^A-Za-z0-9]/i', '', Hash::get($userData, 'username'));
                }
            }
            $userData['username'] = $this->generateUniqueUsername(Hash::get($userData, 'username'));
            if ($useEmail) {
                $userData['email'] = Hash::get($data, 'email');
                if (empty($dataValidated)) {
                    $accountData['active'] = false;
                }
            }
            $userData['password'] = $this->randomString();
            $userData['avatar'] = Hash::get($data, 'avatar');
            $userData['validated'] = !empty($dataValidated);
            $userData['tos_date'] = date("Y-m-d H:i:s");
            $userData['gender'] = Hash::get($data, 'gender');
            $userData['social_accounts'][] = $accountData;
            $user = $this->_table->newEntity($userData);
            $user = $this->_updateActive($user, false, $tokenExpiration);
        } else {
            if ($useEmail && empty($dataValidated)) {
                $accountData['active'] = false;
            }
            $user = $existingUser;
        }
        $socialAccount = $this->_table->SocialAccounts->newEntity($accountData);
        //ensure provider is present in Entity
        $socialAccount['provider'] = Hash::get($data, 'provider');
        $user['social_accounts'] = [$socialAccount];
        return $user;
    }