Вход Регистрация
Файл: library/XenForo/Model/UserExternal.php
Строк: 119
<?php

/**
 * Model for external user authentication (eg, Facebook).
 *
 * @package XenForo_User
 */
class XenForo_Model_UserExternal extends XenForo_Model
{
    
/**
     * Updates the specified provider association for the given user.
     *
     * @param string $provider
     * @param string $providerKey
     * @param string $userId
     * @param array $extra Array of extra data to store
     */
    
public function updateExternalAuthAssociation($provider$providerKey$userId, array $extra null)
    {
        
$db $this->_getDb();

        
$existing $this->getExternalAuthAssociation($provider$providerKey);
        if (
$existing && $existing['user_id'] != $userId)
        {
            
$this->deleteExternalAuthAssociation($provider$providerKey$existing['user_id']);
        }

        
$db->query('
            INSERT INTO xf_user_external_auth
                (provider, provider_key, user_id, extra_data)
            VALUES
                (?, ?, ?, ?)
            ON DUPLICATE KEY UPDATE
                provider = VALUES(provider),
                provider_key = VALUES(provider_key),
                user_id = VALUES(user_id),
                extra_data = VALUES(extra_data)
        '
, array($provider$providerKey$userIdserialize($extra)));

        
$this->rebuildExternalAuthCache($userId);
    }

    public function 
updateExternalAuthAssociationExtra($userId$provider, array $extra null)
    {
        
$db $this->_getDb();
        
$db->update('xf_user_external_auth',
            array(
'extra_data' => serialize($extra)),
            
'user_id = ' $db->quote($userId) . ' AND provider = ' $db->quote($provider)
        );
    }

    
/**
     * Deletes the external auth association for the given key.
     *
     * @param string $provider
     * @param string $providerKey
     * @param integer|null $userId If null, finds the user that has this key.
     *
     * @return boolean
     */
    
public function deleteExternalAuthAssociation($provider$providerKey$userId null)
    {
        if (
$userId === null)
        {
            
$existing $this->getExternalAuthAssociation($provider$providerKey);
            if (!
$existing)
            {
                return 
false;
            }
            
$userId $existing['user_id'];
        }

        
$db $this->_getDb();

        
$db->query('
            DELETE FROM xf_user_external_auth
            WHERE provider = ?
                AND provider_key = ?
                AND user_id = ?
        '
, array($provider$providerKey$userId));

        
$this->rebuildExternalAuthCache($userId);

        return 
true;
    }

    
/**
     * Deletes the external auth association for the given user.
     *
     * @param string $provider
     * @param integer $userId
     *
     * @return boolean
     */
    
public function deleteExternalAuthAssociationForUser($provider$userId)
    {
        
$db $this->_getDb();

        
$db->query('
            DELETE FROM xf_user_external_auth
            WHERE provider = ?
                AND user_id = ?
        '
, array($provider$userId));

        
$this->rebuildExternalAuthCache($userId);

        return 
true;
    }

    
/**
     * Rebuilds the external auth cache for a user.
     *
     * @param integer $userId
     *
     * @return array
     */
    
public function rebuildExternalAuthCache($userId)
    {
        
$cache = array();
        foreach (
$this->getExternalAuthAssociationsForUser($userId) AS $provider)
        {
            
$cache[$provider['provider']] = $provider['provider_key'];
        }

        
$this->_getDb()->update('xf_user_profile', array(
            
'external_auth' => serialize($cache)
        ), 
'user_id = ' $this->_getDb()->quote($userId));

        return 
$cache;
    }

    
/**
     * Gets the external auth association record for the specified provider and key.
     *
     * @param string $provider
     * @param string $providerKey
     *
     * @return array|false
     */
    
public function getExternalAuthAssociation($provider$providerKey)
    {
        return 
$this->_getDb()->fetchRow('
            SELECT *
            FROM xf_user_external_auth
            WHERE provider = ?
                AND provider_key = ?
        '
, array($provider$providerKey));
    }

    
/**
     * Gets the external auth association record for the specified  provider and user
     *
     * @param string $provider
     * @param string $userId
     *
     * @return array|false
     */
    
public function getExternalAuthAssociationForUser($provider$userId)
    {
        return 
$this->_getDb()->fetchRow('
            SELECT *
            FROM xf_user_external_auth
            WHERE provider = ?
                AND user_id = ?
        '
, array($provider$userId));
    }

    
/**
     * Gets all external auth assocations for a user.
     *
     * @param integer $userId
     *
     * @return array
     */
    
public function getExternalAuthAssociationsForUser($userId)
    {
        return 
$this->fetchAllKeyed("
            SELECT *
            FROM xf_user_external_auth
            WHERE user_id = ?
            ORDER BY provider
        "
'provider'$userId);
    }
}
Онлайн: 2
Реклама