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

/**
 * Controller for online users list.
 *
 * @package XenForo_Online
 */
class XenForo_ControllerPublic_Online extends XenForo_ControllerPublic_Abstract
{
    
/**
     * List of currently online users.
     *
     * @return XenForo_ControllerResponse_Abstract
     */
    
public function actionIndex()
    {
        
$sessionModel $this->_getSessionModel();

        
$page $this->_input->filterSingle('page'XenForo_Input::UINT);
        
$userPerPage XenForo_Application::get('options')->membersPerPage;

        
$bypassUserPrivacy $this->_getUserModel()->canBypassUserPrivacy();
        
$userLimit $this->_input->filterSingle('type'XenForo_Input::STRING);

        
$conditions = array(
            
'userLimit' => $userLimit,
            
'cutOff' => array('>'$sessionModel->getOnlineStatusTimeout()),
            
'getInvisible' => $bypassUserPrivacy,
            
'getUnconfirmed' => $bypassUserPrivacy,

            
// allow force including of self, even if invisible
            
'forceInclude' => ($bypassUserPrivacy false XenForo_Visitor::getUserId())
        );

        
$onlineUsers $sessionModel->getSessionActivityRecords($conditions, array(
            
'perPage' => $userPerPage,
            
'page' => $page,
            
'join' => XenForo_Model_Session::FETCH_USER,
            
'order' => 'view_date'
        
));
        
$session XenForo_Application::getSession();
        foreach (
$onlineUsers AS &$online)
        {
            if (
$online['robot_key'])
            {
                
$online['robotInfo'] = $session->getRobotInfo($online['robot_key']);
            }
            
$online['ipHex'] = bin2hex($online['ip']);
        }

        
$visitor XenForo_Visitor::getInstance();

        
//TODO: this is taken directly from the forum list, could be faster if just counts
        
$onlineTotals $sessionModel->getSessionActivityQuickList(
            
$visitor->toArray(),
            array(
'cutOff' => array('>'$sessionModel->getOnlineStatusTimeout())),
            (
$visitor['user_id'] ? $visitor->toArray() : null)
        );

        
$viewParams = array(
            
'onlineUsers' => $sessionModel->addSessionActivityDetailsToList($onlineUsers),
            
'totalOnlineUsers' => $sessionModel->countSessionActivityRecords($conditions),
            
'userLimit' => $userLimit,

            
'page' => $page,
            
'usersPerPage' => $userPerPage,

            
'canViewIps' => $this->_getUserModel()->canViewIps(),

            
'onlineTotals' => $onlineTotals
        
);

        return 
$this->responseView('XenForo_ViewPublic_Online_List''online_list'$viewParams);
    }

    
/**
     * Fetch the current IP for the specified online user
     *
     * @return XenForo_ControllerResponse_Abstract
     */
    
public function actionUserIp()
    {
        if (!
$this->_getUserModel()->canViewIps($errorPhraseKey))
        {
            throw 
$this->getErrorOrNoPermissionResponseException($errorPhraseKey);
        }

        
$userId $this->_input->filterSingle('user_id'XenForo_Input::UINT);
        
$user $this->_getUserModel()->getUserById($userId, array('join' => XenForo_Model_User::FETCH_LAST_ACTIVITY));

        if (!
$user || !$user['ip'])
        {
            return 
$this->responseError(new XenForo_Phrase('no_ip_information_available'));
        }

        
$viewParams = array(
            
'user' => $user,
            
'ipInfo' => $this->getModelFromCache('XenForo_Model_Ip')->getOnlineUserIp($user)
        );

        return 
$this->responseView('XenForo_ViewPublic_Online_UserIp''online_user_ip'$viewParams);
    }

    
/**
     * Fetches the current IP for the specified online guest
     *
     * @return XenForo_ControllerResponse_Abstract
     */
    
public function actionGuestIp()
    {
        if (!
$this->_getUserModel()->canViewIps($errorPhraseKey))
        {
            throw 
$this->getErrorOrNoPermissionResponseException($errorPhraseKey);
        }

        
$ip preg_replace('#[^0-9a-f]#'''$this->_input->filterSingle('ip'XenForo_Input::STRING));

        try
        {
            
$ip XenForo_Helper_Ip::convertIpBinaryToString(
                
XenForo_Helper_Ip::convertHexToBin($ip)
            );
        }
        catch (
Exception $e)
        {
            
$ip false;
        }

        if (!
$ip)
        {
            
// likely given an invalid IP
            
return $this->responseError(new XenForo_Phrase('unexpected_error_occurred'));
        }

        
$viewParams = array(
            
'ip' => $ip,
            
'host' => XenForo_Model_Ip::getHost($ip)
        );

        return 
$this->responseView('XenForo_ViewPublic_Online_GuestIp''online_guest_ip'$viewParams);
    }

    
/**
     * Session activity details.
     * @see XenForo_Controller::getSessionActivityDetailsForList()
     */
    
public static function getSessionActivityDetailsForList(array $activities)
    {
        return new 
XenForo_Phrase('viewing_list_of_online_members');
    }

    
/**
     * @return XenForo_Model_User
     */
    
protected function _getUserModel()
    {
        return 
$this->getModelFromCache('XenForo_Model_User');
    }

    
/**
     * @return XenForo_Model_Session
     */
    
protected function _getSessionModel()
    {
        return 
$this->getModelFromCache('XenForo_Model_Session');
    }
}
Онлайн: 0
Реклама