Вход Регистрация
Файл: vendor/whichbrowser/parser/src/Analyser/Header/UCBrowserNew.php
Строк: 120
<?php

namespace WhichBrowserAnalyserHeader;

use 
WhichBrowserData;
use 
WhichBrowserModelFamily;
use 
WhichBrowserModelVersion;

class 
UCBrowserNew
{
    public function 
__construct($header, &$data)
    {
        
$this->data =& $data;

        if (
preg_match('/pr(UCBrowser/u', $header)) {
            if (!
$this->data->isBrowser('UC Browser')) {
                
$this->data->browser->name = 'UC Browser';
                
$this->data->browser->stock = false;
                
$this->data->browser->version = null;

                if (
preg_match('/pr(UCBrowser(?:/([0-9.]+))/u', $header, $match)) {
                    
$this->data->browser->version = new Version([ 'value' => $match[1], 'details' => 2 ]);
                }
            }
        }

        
/* Find os */
        
if (preg_match('/pf(Java)/u', $header)) {
            if (
preg_match('/dv(([^)]*))/u', $header, $match)) {
                if (
$this->identifyBasedOnModel($match[1])) {
                    return;
                }
            }
        }

        if (
preg_match('/pf(Linux)/u', $header) && preg_match('/ov((?:Android )?([0-9.]+)/u', $header, $match)) {
            
$this->data->os->name = 'Android';
            
$this->data->os->version = new Version([ 'value' => $match[1] ]);
        }

        if (
preg_match('/pf(Symbian)/u', $header) && preg_match('/ov(S60V([0-9])/u', $header, $match)) {
            if (!
$this->data->isOs('Series60')) {
                
$this->data->os->name = 'Series60';
                
$this->data->os->version = new Version([ 'value' => $match[1] ]);
            }
        }

        if (
preg_match('/pf(Windows)/u', $header) && preg_match('/ov(wds ([0-9]+.[0-9]+)/u', $header, $match)) {
            if (!
$this->data->isOs('Windows Phone')) {
                
$this->data->os->name = 'Windows Phone';

                switch (
$match[1]) {
                    case 
'7.1':
                        
$this->data->os->version = new Version([ 'value' => '7.5' ]);
                        break;
                    case 
'8.0':
                        
$this->data->os->version = new Version([ 'value' => '8.0' ]);
                        break;
                    case 
'8.1':
                        
$this->data->os->version = new Version([ 'value' => '8.1' ]);
                        break;
                    case 
'10.0':
                        
$this->data->os->version = new Version([ 'value' => '10.0' ]);
                        break;
                }
            }
        }

        if (
preg_match('/pf((?:42|44))/u', $header) && preg_match('/ov((?:iPh OS )?(?:iOS )?([0-9_]+)/u', $header, $match)) {
            if (!
$this->data->isOs('iOS')) {
                
$this->data->os->name = 'iOS';
                
$this->data->os->version = new Version([ 'value' => str_replace('_', '.', $match[1]) ]);
            }
        }

        
/* Find engine */
        
if (preg_match('/re(AppleWebKit/([0-9.]+)/u', $header, $match)) {
            
$this->data->engine->name = 'Webkit';
            
$this->data->engine->version = new Version([ 'value' => $match[1] ]);
        }

        
/* Find device */
        
if ($this->data->isOs('Android')) {
            if (
preg_match('/dv((.*))/uU', $header, $match)) {
                
$match[1] = preg_replace("/s+Build/u", '', $match[1]);
                
$device = DataDeviceModels::identify('android', $match[1]);

                if (
$device) {
                    
$this->data->device = $device;
                }
            }
        }

        if (
$this->data->isOs('Series60')) {
            if (
preg_match('/dv((?:Nokia)?([^)]*))/iu', $header, $match)) {
                
$device = DataDeviceModels::identify('symbian', $match[1]);

                if (
$device) {
                    
$this->data->device = $device;
                }
            }
        }

        if (
$this->data->isOs('Windows Phone')) {
            if (
preg_match('/dv(([^)]*))/u', $header, $match)) {
                
$device = DataDeviceModels::identify('wp', substr(strstr($match[1], ' '), 1));

                if (
$device) {
                    
$this->data->device = $device;
                }
            }
        }

        if (
$this->data->isOs('iOS')) {
            if (
preg_match('/dv(([^)]*))/u', $header, $match)) {
                
$device = DataDeviceModels::identify('ios', $match[1]);

                if (
$device) {
                    
$this->data->device = $device;
                }
            }
        }
    }

    private function 
identifyBasedOnModel($model)
    {
        
$model = preg_replace('/^Nokia/iu', '', $model);

        
$device = DataDeviceModels::identify('symbian', $model);
        if (
$device->identified) {
            
$device->identified |= $this->data->device->identified;
            
$this->data->device = $device;

            if (!isset(
$this->data->os->name) || $this->data->os->name != 'Series60') {
                
$this->data->os->name = 'Series60';
                
$this->data->os->version = null;
                
$this->data->os->family = new Family([ 'name' => 'Symbian' ]);
            }

            return 
true;
        }

        
$device = DataDeviceModels::identify('s40', $model);
        if (
$device->identified) {
            
$device->identified |= $this->data->device->identified;
            
$this->data->device = $device;

            if (!isset(
$this->data->os->name) || $this->data->os->name != 'Series40') {
                
$this->data->os->name = 'Series40';
                
$this->data->os->version = null;
            }

            return 
true;
        }

        
$device = DataDeviceModels::identify('bada', $model);
        if (
$device->identified) {
            
$device->identified |= $this->data->device->identified;
            
$this->data->device = $device;

            if (!isset(
$this->data->os->name) || $this->data->os->name != 'Bada') {
                
$this->data->os->name = 'Bada';
                
$this->data->os->version = null;
            }

            return 
true;
        }

        
$device = DataDeviceModels::identify('touchwiz', $model);
        if (
$device->identified) {
            
$device->identified |= $this->data->device->identified;
            
$this->data->device = $device;

            if (!isset(
$this->data->os->name) || $this->data->os->name != 'Touchwiz') {
                
$this->data->os->name = 'Touchwiz';
                
$this->data->os->version = null;
            }

            return 
true;
        }
    }
}
Онлайн: 1
Реклама