/** * Setup the visitor singleton. * * @param integer $userId User ID to setup as * @param array $options * * @return XenForo_Visitor */ public static function setup($userId, array $options = array()) { $userId = intval($userId); $options = array_merge(array('languageId' => 0, 'permissionUserId' => 0), $options); /* @var $userModel XenForo_Model_User */ $userModel = XenForo_Model::create('XenForo_Model_User'); $object = new self(); if ($userId && ($user = $userModel->getVisitingUserById($userId))) { if ($user['is_admin'] && $options['permissionUserId']) { // force permissions for testing $user = $userModel->setPermissionsFromUserId($user, $options['permissionUserId']); } $object->_user = $user; } else { $object->_user = $userModel->getVisitingGuestUser(); if ($options['languageId']) { $object->_user['language_id'] = $options['languageId']; } } $object->_user['referer'] = !empty($options['referer']) ? $options['referer'] : null; $object->_user['from_search'] = !empty($options['fromSearch']); $object->_user['is_robot'] = !empty($options['isRobot']); $object->_user['permissions'] = XenForo_Permission::unserializePermissions($object->_user['global_permission_cache']); $object->setVisitorLanguage($object->_user['language_id']); XenForo_Locale::setDefaultTimeZone($object->_user['timezone']); self::$_instance = $object; XenForo_CodeEvent::fire('visitor_setup', array(&self::$_instance)); return self::$_instance; }