Вход Регистрация
Файл: library/Zend/Http/UserAgent/AbstractDevice.php
Строк: 702
<?php
/**
 * Zend Framework
 *
 * LICENSE
 *
 * This source file is subject to the new BSD license that is bundled
 * with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://framework.zend.com/license/new-bsd
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@zend.com so we can send you a copy immediately.
 *
 * @category   Zend
 * @package    Zend_Http
 * @subpackage UserAgent
 * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
 * @license    http://framework.zend.com/license/new-bsd     New BSD License
 */

require_once 'Zend/Http/UserAgent/Device.php';

/**
 * Abstract Class to define a browser device.
 *
 * @category   Zend
 * @package    Zend_Http
 * @subpackage UserAgent
 * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
 * @license    http://framework.zend.com/license/new-bsd     New BSD License
 */
abstract class Zend_Http_UserAgent_AbstractDevice
    
implements Zend_Http_UserAgent_Device
{
    
/**
     * Browser signature
     *
     * @var string
     */
    
protected $_browser '';

    
/**
     * Browser version
     *
     * @var string
     */
    
protected $_browserVersion '';

    
/**
     * Configuration
     * 
     * @var array
     */
    
protected $_config;

    
/**
     * User Agent chain
     *
     * @var string
     */
    
protected $_userAgent;

    
/**
     * Server variable
     * 
     * @var array
     */
    
protected $_server;

    
/**
     * Image types
     * 
     * @var array
     */
    
protected $_images = array(
        
'jpeg'
        
'gif'
        
'png'
        
'pjpeg'
        
'x-png'
        
'bmp',
    );

    
/**
     * Browser/Device features
     *
     * @var array
     */
    
protected $_aFeatures = array();

    
/**
     * Browser/Device features groups
     *
     * @var array
     */
    
protected $_aGroup = array();

    
/**
     * Constructor
     *
     * @param  null|string|array $userAgent If array, restores from serialized version
     * @param  array $server 
     * @param  array $config 
     * @return void
     */
    
public function __construct($userAgent null, array $server = array(), array $config = array())
    {
        if (
is_array($userAgent)) {
            
// Restoring from serialized array
            
$this->_restoreFromArray($userAgent);
        } else {
            
// Constructing new object
            
$this->setUserAgent($userAgent);
            
$this->_server    $server;
            
$this->_config    $config;
            
$this->_getDefaultFeatures();
            
$this->_defineFeatures();
        }
    }

    
/**
     * Serialize object
     * 
     * @return string
     */
    
public function serialize()
    {
        
$spec = array(
            
'_aFeatures'      => $this->_aFeatures,
            
'_aGroup'         => $this->_aGroup,
            
'_browser'        => $this->_browser,
            
'_browserVersion' => $this->_browserVersion,
            
'_userAgent'      => $this->_userAgent,
            
'_images'         => $this->_images,
        );
        return 
serialize($spec);
    }

    
/**
     * Unserialize
     * 
     * @param  string $serialized 
     * @return void
     */
    
public function unserialize($serialized)
    {
        
$spec unserialize($serialized);
        
$this->_restoreFromArray($spec);
    }

    
/**
     * Restore object state from array
     * 
     * @param  array $spec 
     * @return void
     */
    
protected function _restoreFromArray(array $spec)
    {
        foreach (
$spec as $key => $value) {
            if (
property_exists($this$key)) {
                
$this->{$key} = $value;
            }
        }
    }

    
/**
     * Look for features
     *
     * @return array|null
     */
    
protected function _defineFeatures()
    {
        
$features $this->_loadFeaturesAdapter();

        if (
is_array($features)) {
            
$this->_aFeatures array_merge($this->_aFeatures$features);
        }
        
        return 
$this->_aFeatures;
    }

    
/**
     * Gets the browser type identifier
     *
     * @return string
     */
    
abstract public function getType();

    
/**
     * Check a feature for the current browser/device.
     *
     * @param  string $feature The feature to check.
     * @return bool
     */
    
public function hasFeature($feature)
    {
        return (!empty(
$this->_aFeatures[$feature]));
    }

    
/**
     * Gets the value of the current browser/device feature
     *
     * @param  string $feature Feature to search
     * @return string|null
     */
    
public function getFeature($feature)
    {
        if (
$this->hasFeature($feature)) {
            return 
$this->_aFeatures[$feature];
        }
    }

    
/**
     * Set a feature for the current browser/device.
     *
     * @param  string $feature The feature to set.
     * @param  string $value (option) feature value.
     * @param  string $group (option) Group to associate with the feature
     * @return Zend_Http_UserAgent_AbstractDevice
     */
    
public function setFeature($feature$value false$group '')
    {
        
$this->_aFeatures[$feature] = $value;
        if (!empty(
$group)) {
            
$this->setGroup($group$feature);
        }
        return 
$this;
    }

    
/**
     * Affects a feature to a group
     *
     * @param  string $group Group name
     * @param  string $feature Feature name
     * @return Zend_Http_UserAgent_AbstractDevice
     */
    
public function setGroup($group$feature)
    {
        if (!isset(
$this->_aGroup[$group])) {
            
$this->_aGroup[$group] = array();
        }
        if (!
in_array($feature$this->_aGroup[$group])) {
            
$this->_aGroup[$group][] = $feature;
        }
        return 
$this;
    }

    
/**
     * Gets an array of features associated to a group
     *
     * @param  string $group Group param
     * @return array
     */
    
public function getGroup($group)
    {
        return 
$this->_aGroup[$group];
    }

    
/**
     * Gets all the browser/device features
     *
     * @return array
     */
    
public function getAllFeatures()
    {
        return 
$this->_aFeatures;
    }

    
/**
     * Gets all the browser/device features' groups
     *
     * @return array
     */
    
public function getAllGroups()
    {
        return 
$this->_aGroup;
    }

    
/**
     * Sets all the standard features extracted from the User Agent chain and $this->_server
     * vars
     *
     * @return void
     */
    
protected function _getDefaultFeatures()
    {
        
$server = array();
        
        
// gets info from user agent chain 
        
$uaExtract $this->extractFromUserAgent($this->getUserAgent());
        
        if (
is_array($uaExtract)) {
            foreach (
$uaExtract as $key => $info) {
                
$this->setFeature($key$info'product_info');
            }
        }
        
        if (isset(
$uaExtract['browser_name'])) {
            
$this->_browser $uaExtract['browser_name'];
        }
        if (isset(
$uaExtract['browser_version'])) {
            
$this->_browserVersion $uaExtract['browser_version'];
        }
        if (isset(
$uaExtract['device_os'])) {
            
$this->device_os $uaExtract['device_os_name'];
        }
        
        
/* browser & device info */
        
$this->setFeature('is_wireless_device'false'product_info');
        
$this->setFeature('is_mobile'false'product_info');
        
$this->setFeature('is_desktop'false'product_info');
        
$this->setFeature('is_tablet'false'product_info');
        
$this->setFeature('is_bot'false'product_info');
        
$this->setFeature('is_email'false'product_info');
        
$this->setFeature('is_text'false'product_info');
        
$this->setFeature('device_claims_web_support'false'product_info');
        
        
$this->setFeature('is_' strtolower($this->getType()), true'product_info');
        
        
/* sets the browser name */
        
if (isset($this->list) && empty($this->_browser)) {
            
$lowerUserAgent strtolower($this->getUserAgent());
            foreach (
$this->list as $browser_signature) {
                if (
strpos($lowerUserAgent$browser_signature) !== false) {
                    
$this->_browser strtolower($browser_signature);
                    
$this->setFeature('browser_name'$this->_browser'product_info');
                }
            }
        }
        
        
/* sets the client IP */
        
if (isset($this->_server['remote_addr'])) {
            
$this->setFeature('client_ip'$this->_server['remote_addr'], 'product_info');
        } elseif (isset(
$this->_server['http_x_forwarded_for'])) {
            
$this->setFeature('client_ip'$this->_server['http_x_forwarded_for'], 'product_info');
        } elseif (isset(
$this->_server['http_client_ip'])) {
            
$this->setFeature('client_ip'$this->_server['http_client_ip'], 'product_info');
        }
        
        
/* sets the server infos */
        
if (isset($this->_server['server_software'])) {
            if (
strpos($this->_server['server_software'], 'Apache') !== false || strpos($this->_server['server_software'], 'LiteSpeed') !== false) {
                
$server['version'] = 1;
                if (
strpos($this->_server['server_software'], 'Apache/2') !== false) {
                    
$server['version'] = 2;
                }
                
$server['server'] = 'apache';
            }
            
            if (
strpos($this->_server['server_software'], 'Microsoft-IIS') !== false) {
                
$server['server'] = 'iis';
            }
            
            if (
strpos($this->_server['server_software'], 'Unix') !== false) {
                
$server['os'] = 'unix';
                if (isset(
$_ENV['MACHTYPE'])) {
                    if (
strpos($_ENV['MACHTYPE'], 'linux') !== false) {
                        
$server['os'] = 'linux';
                    }
                }
            } elseif (
strpos($this->_server['server_software'], 'Win') !== false) {
                
$server['os'] = 'windows';
            }
            
            if (
preg_match('/Apache/([0-9.]*)/'$this->_server['server_software'], $arr)) {
                if (
$arr[1]) {
                    
$server['version'] = $arr[1];
                    
$server['server']  = 'apache';
                }
            }
        }
        
        
$this->setFeature('php_version'phpversion(), 'server_info');
        if (isset(
$server['server'])) {
            
$this->setFeature('server_os'$server['server'], 'server_info');
        }
        if (isset(
$server['version'])) {
            
$this->setFeature('server_os_version'$server['version'], 'server_info');
        }
        if (isset(
$this->_server['http_accept'])) {
            
$this->setFeature('server_http_accept'$this->_server['http_accept'], 'server_info');
        }
        if (isset(
$this->_server['http_accept_language'])) {
            
$this->setFeature('server_http_accept_language'$this->_server['http_accept_language'], 'server_info');
        }
        if (isset(
$this->_server['server_addr'])) {
            
$this->setFeature('server_ip'$this->_server['server_addr'], 'server_info');
        }
        if (isset(
$this->_server['server_name'])) {
            
$this->setFeature('server_name'$this->_server['server_name'], 'server_info');
        }
    }

    
/**
     * Extract and sets informations from the User Agent chain
     *
     * @param  string $userAgent User Agent chain
     * @return array
     */
    
public static function extractFromUserAgent($userAgent)
    {
        
$userAgent trim($userAgent);
        
        
/**
         * @see http://www.texsoft.it/index.php?c=software&m=sw.php.useragent&l=it
         */
        
$pattern =  "(([^/s]*)(/(S*))?)(s*[[a-zA-Z][a-zA-Z]])?s*(\((([^()]|(\([^()]*\)))*)\))?s*";
        
preg_match("#^$pattern#"$userAgent$match);

        
$comment = array();
        if (isset(
$match[7])) {
            
$comment explode(';'$match[7]);
        }
        
        
// second part if exists
        
$end substr($userAgentstrlen($match[0]));
        if (!empty(
$end)) {
            
$result['others']['full'] = $end;
        }
        
        
$match2 = array();
        if (isset(
$result['others'])) {
            
preg_match_all('/(([^/s]*)(/)?([^/()s]*)?)(s((([^)]*)*)))?/i'$result['others']['full'], $match2);
        }
        
$result['user_agent']   = trim($match[1]);
        
$result['product_name'] = isset($match[2]) ? trim($match[2]) : '';
        
$result['browser_name'] = $result['product_name'];
        if (isset(
$match[4]) && trim($match[4])) {
            
$result['product_version'] = trim($match[4]);
            
$result['browser_version'] = trim($match[4]);
        }
        if (
count($comment) && !empty($comment[0])) {
            
$result['comment']['full']     = trim($match[7]);
            
$result['comment']['detail']   = $comment;
            
$result['compatibility_flag']  = trim($comment[0]);
            if (isset(
$comment[1])) {
                
$result['browser_token']   = trim($comment[1]);
            }
            if (isset(
$comment[2])) {
                
$result['device_os_token'] = trim($comment[2]);
            }
        }
        if (empty(
$result['device_os_token']) && !empty($result['compatibility_flag'])) {
            
// some browsers do not have a platform token
            
$result['device_os_token'] = $result['compatibility_flag'];
        }
        if (
$match2) {
            
$i 0;
            
$max count($match2[0]);
            for (
$i 0$i $max$i ++) {
                if (!empty(
$match2[0][$i])) {
                    
$result['others']['detail'][] = array(
                        
$match2[0][$i], 
                        
$match2[2][$i], 
                        
$match2[4][$i],
                    );
                }
            }
        }
        
        
/** Security level */
        
$security = array(
            
'N' => 'no security'
            
'U' => 'strong security'
            
'I' => 'weak security',
        );
        if (!empty(
$result['browser_token'])) {
            if (isset(
$security[$result['browser_token']])) {
                
$result['security_level'] = $security[$result['browser_token']];
                unset(
$result['browser_token']);
            }
        }
        
        
$product strtolower($result['browser_name']);
        
        
// Mozilla : true && false
        
$compatibleOrIe false;
        if (isset(
$result['compatibility_flag']) && isset($result['comment'])) {
            
$compatibleOrIe = ($result['compatibility_flag'] == 'compatible' || strpos($result['comment']['full'], "MSIE") !== false);
        }
        if (
$product == 'mozilla' && $compatibleOrIe) {
            if (!empty(
$result['browser_token'])) {
                
// Classic Mozilla chain
                
preg_match_all('/([^/s].*)(/|s)(.*)/i'$result['browser_token'], $real);
            } else {
                
// MSIE specific chain with 'Windows' compatibility flag
                
foreach ($result['comment']['detail'] as $v) {
                    if (
strpos($v'MSIE') !== false) {
                        
$real[0][1]               = trim($v);
                        
$result['browser_engine'] = "MSIE";
                        
$real[1][0]               = "Internet Explorer";
                        
$temp                     explode(' 'trim($v));
                        
$real[3][0]               = $temp[1];
                    
                    }
                    if (
strpos($v'Win') !== false) {
                        
$result['device_os_token'] = trim($v);
                    }
                }
            }
            
            if (!empty(
$real[0])) {
                
$result['browser_name']    = $real[1][0];
                
$result['browser_version'] = $real[3][0];
            } else {
                
$result['browser_name']    = $result['browser_token'];
                
$result['browser_version'] = '??';
            }
        } elseif (
$product == 'mozilla' && $result['browser_version'] < 5.0) {
            
// handles the real Mozilla (or old Netscape if version < 5.0)
            
$result['browser_name'] = 'Netscape';
        }
        
        
/** windows */
        
if ($result['browser_name'] == 'MSIE') {
            
$result['browser_engine'] = 'MSIE';
            
$result['browser_name']   = 'Internet Explorer';
        }
        if (isset(
$result['device_os_token'])) {
            if (
strpos($result['device_os_token'], 'Win') !== false) {
                
                
$windows = array(
                    
'Windows NT 6.1'          => 'Windows 7'
                    
'Windows NT 6.0'          => 'Windows Vista'
                    
'Windows NT 5.2'          => 'Windows Server 2003'
                    
'Windows NT 5.1'          => 'Windows XP'
                    
'Windows NT 5.01'         => 'Windows 2000 SP1'
                    
'Windows NT 5.0'          => 'Windows 2000'
                    
'Windows NT 4.0'          => 'Microsoft Windows NT 4.0'
                    
'WinNT'                   => 'Microsoft Windows NT 4.0'
                    
'Windows 98; Win 9x 4.90' => 'Windows Me'
                    
'Windows 98'              => 'Windows 98'
                    
'Win98'                   => 'Windows 98'
                    
'Windows 95'              => 'Windows 95'
                    
'Win95'                   => 'Windows 95'
                    
'Windows CE'              => 'Windows CE',
                );
                if (isset(
$windows[$result['device_os_token']])) {
                    
$result['device_os_name'] = $windows[$result['device_os_token']];
                } else {
                    
$result['device_os_name'] = $result['device_os_token'];
                }
            }
        }
        
        
// iphone 
        
$apple_device = array(
            
'iPhone'
            
'iPod'
            
'iPad',
        );
        if (isset(
$result['compatibility_flag'])) {
            if (
in_array($result['compatibility_flag'], $apple_device)) {
                
$result['device']           = strtolower($result['compatibility_flag']);
                
$result['device_os_token']  = 'iPhone OS';
                
$result['browser_language'] = trim($comment[3]);
                
$result['browser_version']  = $result['others']['detail'][1][2];
                if (!empty(
$result['others']['detail'][2])) {
                    
$result['firmware'] = $result['others']['detail'][2][2];
                }
                if (!empty(
$result['others']['detail'][3])) {
                    
$result['browser_name']  = $result['others']['detail'][3][1];
                    
$result['browser_build'] = $result['others']['detail'][3][2];
                }
            }
        }
        
        
// Safari
        
if (isset($result['others'])) {
            if (
$result['others']['detail'][0][1] == 'AppleWebKit') {
                
$result['browser_engine'] = 'AppleWebKit';
                if (
$result['others']['detail'][1][1] == 'Version') {
                    
$result['browser_version'] = $result['others']['detail'][1][2];
                } else {
                    
$result['browser_version'] = $result['others']['detail'][count($result['others']['detail']) - 1][2];
                }
                if (isset(
$comment[3])) {
                     
$result['browser_language'] = trim($comment[3]);
                }
                
                
$last $result['others']['detail'][count($result['others']['detail']) - 1][1];
                
                if (empty(
$result['others']['detail'][2][1]) || $result['others']['detail'][2][1] == 'Safari') {
                    
$result['browser_name']    = ($result['others']['detail'][1][1] && $result['others']['detail'][1][1] != 'Version' $result['others']['detail'][1][1] : 'Safari');
                    
$result['browser_version'] = ($result['others']['detail'][1][2] ? $result['others']['detail'][1][2] : $result['others']['detail'][0][2]);
                } else {
                    
$result['browser_name']    = $result['others']['detail'][2][1];
                    
$result['browser_version'] = $result['others']['detail'][2][2];
                    
                    
// mobile version
                    
if ($result['browser_name'] == 'Mobile') {
                        
$result['browser_name'] = 'Safari ' $result['browser_name'];
                        if (
$result['others']['detail'][1][1] == 'Version') {
                            
$result['browser_version'] = $result['others']['detail'][1][2];
                        }
                    }
                }
                
                
// For Safari < 2.2, AppleWebKit version gives the Safari version
                
if (strpos($result['browser_version'], '.') > || (int) $result['browser_version'] > 20) {
                    
$temp explode('.'$result['browser_version']);
                    
$build = (int) $temp[0];
                    
$awkVersion = array(
                        
48  => '0.8'
                        
73  => '0.9'
                        
85  => '1.0'
                        
103 => '1.1'
                        
124 => '1.2'
                        
300 => '1.3'
                        
400 => '2.0',
                    );
                    foreach (
$awkVersion as $k => $v) {
                        if (
$build >= $k) {
                            
$result['browser_version'] = $v;
                        }
                    }
                }
            }
            
            
// Gecko (Firefox or compatible)
            
if ($result['others']['detail'][0][1] == 'Gecko') {
                
$searchRV true;
                if (!empty(
$result['others']['detail'][1][1]) && !empty($result['others']['detail'][count($result['others']['detail']) - 1][2]) || strpos(strtolower($result['others']['full']), 'opera') !== false) {
                    
$searchRV false;
                    
$result['browser_engine'] = $result['others']['detail'][0][1];
                    
                    
// the name of the application is at the end indepenently 
                    // of quantity of information in $result['others']['detail']
                    
$last count($result['others']['detail']) - 1;
                    
                    
// exception : if the version of the last information is 
                    // empty we take the previous one
                    
if (empty($result['others']['detail'][$last][2])) {
                        
$last --;
                    }
                    
                    
// exception : if the last one is 'Red Hat' or 'Debian' => 
                    // use rv: to find browser_version */
                    
if (in_array($result['others']['detail'][$last][1], array(
                        
'Debian'
                        
'Hat',
                    ))) {
                        
$searchRV true;
                    }
                    
$result['browser_name']    = $result['others']['detail'][$last][1];
                    
$result['browser_version'] = $result['others']['detail'][$last][2];
                    if (isset(
$comment[4])) {
                        
$result['browser_build'] = trim($comment[4]);
                    }
                    
$result['browser_language'] = trim($comment[3]);
                    
                    
// Netscape
                    
if ($result['browser_name'] == 'Navigator' || $result['browser_name'] == 'Netscape6') {
                        
$result['browser_name'] = 'Netscape';
                    }
                }
                if (
$searchRV) {
                    
// Mozilla alone : the version is identified by rv:
                    
$result['browser_name'] = 'Mozilla';
                    if (isset(
$result['comment']['detail'])) {
                        foreach (
$result['comment']['detail'] as $rv) {
                            if (
strpos($rv'rv:') !== false) {
                                
$result['browser_version'] = trim(str_replace('rv:'''$rv));
                            }
                        }
                    }
                }
            }
            
            
// Netscape
            
if ($result['others']['detail'][0][1] == 'Netscape') {
                
$result['browser_name']    = 'Netscape';
                
$result['browser_version'] = $result['others']['detail'][0][2];
            }
            
            
// Opera 
            // Opera: engine Presto
            
if ($result['others']['detail'][0][1] == 'Presto') {
                
$result['browser_engine'] = 'Presto';
                if (!empty(
$result['others']['detail'][1][2])) {
                    
$result['browser_version'] = $result['others']['detail'][1][2];
                }
            }
            
            
// UA ends with 'Opera X.XX'
            
if ($result['others']['detail'][0][1] == 'Opera') {
                
$result['browser_name']    = $result['others']['detail'][0][1];
                
$result['browser_version'] = $result['others']['detail'][1][1];
            }
            
            
// Opera Mini
            
if (isset($result["browser_token"])) {
                if (
strpos($result["browser_token"], 'Opera Mini') !== false) {
                    
$result['browser_name'] = 'Opera Mini';
                }
            }
            
            
// Symbian
            
if ($result['others']['detail'][0][1] == 'SymbianOS') {
                
$result['device_os_token'] = 'SymbianOS';
            }
        }
        
        
// UA ends with 'Opera X.XX'
        
if (isset($result['browser_name']) && isset($result['browser_engine'])) {
            if (
$result['browser_name'] == 'Opera' && $result['browser_engine'] == 'Gecko' && empty($result['browser_version'])) {
                
$result['browser_version'] = $result['others']['detail'][count($result['others']['detail']) - 1][1];
            }
        }
        
        
// cleanup
        
if (isset($result['browser_version']) && isset($result['browser_build'])) {
            if (
$result['browser_version'] == $result['browser_build']) {
                unset(
$result['browser_build']);
            }
        }
        
        
// compatibility
        
$compatibility['AppleWebKit'] = 'Safari';
        
$compatibility['Gecko']       = 'Firefox';
        
$compatibility['MSIE']        = 'Internet Explorer';
        
$compatibility['Presto']      = 'Opera';
        if (!empty(
$result['browser_engine'])) {
            if (isset(
$compatibility[$result['browser_engine']])) {
                
$result['browser_compatibility'] = $compatibility[$result['browser_engine']];
            }
        }
        
        
ksort($result);
        return 
$result;
    }

    
/**
     * Loads the Features Adapter if it's defined in the $config array
     * Otherwise, nothing is done
     *
     * @param  string $browserType Browser type
     * @return array
     */
    
protected function _loadFeaturesAdapter()
    {
        
$config      $this->_config;
        
$browserType $this->getType();
        if (!isset(
$config[$browserType]) || !isset($config[$browserType]['features'])) {
            return array();
        }
        
$config $config[$browserType]['features'];

        if (empty(
$config['classname'])) {
            require_once 
'Zend/Http/UserAgent/Exception.php';
            throw new 
Zend_Http_UserAgent_Exception('The ' $this->getType() . ' features adapter must have a "classname" config parameter defined');
        }

        
$className $config['classname'];
        if (!
class_exists($className)) {
            if (isset(
$config['path'])) {
                
$path $config['path'];
            } else {
                require_once 
'Zend/Http/UserAgent/Exception.php';
                throw new 
Zend_Http_UserAgent_Exception('The ' $this->getType() . ' features adapter must have a "path" config parameter defined');
            }
            
            if (
false === include_once ($path)) {
                require_once 
'Zend/Http/UserAgent/Exception.php';
                throw new 
Zend_Http_UserAgent_Exception('The ' $this->getType() . ' features adapter path that does not exist');
            }
        }
        
        return 
call_user_func(array($className'getFromRequest'), $this->_server$this->_config);
    }

    
/**
     * Retrieve image format support
     *
     * @return array
     */
    
public function getImageFormatSupport()
    {
        return 
$this->_images;
    }

    
/**
     * Get maximum image height supported by this device
     *
     * @return int
     */
    
public function getMaxImageHeight()
    {
        return 
null;
    }

    
/**
     * Get maximum image width supported by this device
     *
     * @return int
     */
    
public function getMaxImageWidth()
    {
        return 
null;
    }

    
/**
     * Get physical screen height of this device
     *
     * @return int
     */
    
public function getPhysicalScreenHeight()
    {
        return 
null;
    }

    
/**
     * Get physical screen width of this device
     *
     * @return int
     */
    
public function getPhysicalScreenWidth()
    {
        return 
null;
    }

    
/**
     * Get preferred markup type
     *
     * @return string
     */
    
public function getPreferredMarkup()
    {
        return 
'xhtml';
    }

    
/**
     * Get supported X/HTML version
     *
     * @return int
     */
    
public function getXhtmlSupportLevel()
    {
        return 
4;
    }

    
/**
     * Does the device support Flash?
     *
     * @return bool
     */
    
public function hasFlashSupport()
    {
        return 
true;
    }

    
/**
     * Does the device support PDF?
     *
     * @return bool
     */
    
public function hasPdfSupport()
    {
        return 
true;
    }

    
/**
     * Does the device have a phone number associated with it?
     *
     * @return bool
     */
    
public function hasPhoneNumber()
    {
        return 
false;
    }

    
/**
     * Does the device support HTTPS?
     *
     * @return bool
     */
    
public function httpsSupport()
    {
        return 
true;
    }

    
/**
     * Get the browser type
     *
     * @return string
     */
    
public function getBrowser()
    {
        return 
$this->_browser;
    }

    
/**
     * Get the browser version
     *
     * @return string
     */
    
public function getBrowserVersion()
    {
        return 
$this->_browserVersion;
    }

    
/**
     * Get the user agent string
     *
     * @return string
     */
    
public function getUserAgent()
    {
        return 
$this->_userAgent;
    }

    
/**
     * @return the $_images
     */
    
public function getImages()
    {
        return 
$this->_images;
    }

    
/**
     * @param string $browser
     */
    
public function setBrowser($browser)
    {
        
$this->_browser $browser;
    }

    
/**
     * @param string $browserVersion
     */
    
public function setBrowserVersion($browserVersion)
    {
        
$this->_browserVersion $browserVersion;
    }

    
/**
     * @param string $userAgent
     */
    
public function setUserAgent($userAgent)
    {
        
$this->_userAgent $userAgent;
        return 
$this;
    }

    
/**
     * @param array $_images
     */
    
public function setImages($_images)
    {
        
$this->_images $_images;
    }

    
/**
     * Match a user agent string against a list of signatures
     * 
     * @param  string $userAgent 
     * @param  array $signatures 
     * @return bool
     */
    
protected static function _matchAgentAgainstSignatures($userAgent$signatures)
    {
        
$userAgent strtolower($userAgent);
        foreach (
$signatures as $signature) {
            if (!empty(
$signature)) {
                if (
strpos($userAgent$signature) !== false) {
                    
// Browser signature was found in user agent string
                    
return true;
                }
            }
        }
        return 
false;
    }
}
Онлайн: 5
Реклама