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

namespace WhichBrowserAnalyserHeaderUseragent;

use 
WhichBrowserConstants;
use 
WhichBrowserData;
use 
WhichBrowserModelFamily;
use 
WhichBrowserModelUsing;
use 
WhichBrowserModelVersion;

trait 
Application
{
    private function &
detectApplication($ua)
    {
        
/* Detect applications */
        
$this->detectSpecificApplications($ua);
        
$this->detectRemainingApplications($ua);

        return 
$this;
    }



    private function 
detectSpecificApplications($ua)
    {
        
/* Sony Updatecenter */

        
if (preg_match('/^(.*) Build/.* (?:com.sonyericsson.updatecenter|UpdateCenter)/[A-Z0-9.]+$/iu'$ua$match)) {
            
$this->data->browser->name 'Sony Update Center';
            
$this->data->browser->version null;
            
$this->data->browser->type ConstantsBrowserType::APP;

            
$this->data->os->reset([
                
'name'      => 'Android'
            
]);

            
$this->data->device->model $match[1];
            
$this->data->device->identified |= ConstantsId::PATTERN;
            
$this->data->device->type ConstantsDeviceType::MOBILE;

            
$device DataDeviceModels::identify('android'$match[1]);
            if (
$device->identified) {
                
$device->identified |= $this->data->device->identified;
                
$this->data->device $device;
            }
        }

        
/* Sony Select SDK */

        
if (preg_match('/Android [0-9.]+; (.*) Sony/.*SonySelectSDK/([0-9.]+)/iu'$ua$match)) {
            
$this->data->browser->reset();
            
$this->data->browser->type ConstantsBrowserType::APP;
            
$this->data->browser->using = new WhichBrowserModelUsing([
                
'name' => 'Sony Select SDK',
                
'version' => new Version([ 'value' => $match[2], 'details' => ])
            ]);

            
$this->data->device->model $match[1];
            
$this->data->device->identified |= ConstantsId::PATTERN;
            
$this->data->device->type ConstantsDeviceType::MOBILE;

            
$device DataDeviceModels::identify('android'$match[1]);
            if (
$device->identified) {
                
$device->identified |= $this->data->device->identified;
                
$this->data->device $device;
            }
        }

        
/* Samsung Mediahub */

        
if (preg_match('/^Stamhub [^/]+/([^;]+);.*:([0-9.]+)/[^/]+/[^:]+:user/release-keys$/iu'$ua$match)) {
            
$this->data->browser->name 'Mediahub';
            
$this->data->browser->version null;
            
$this->data->browser->type ConstantsBrowserType::APP_MEDIAPLAYER;

            
$this->data->os->reset([
                
'name'      => 'Android',
                
'version'   => new Version([ 'value' => $match[2] ])
            ]);

            
$this->data->device->model $match[1];
            
$this->data->device->identified |= ConstantsId::PATTERN;
            
$this->data->device->type ConstantsDeviceType::MOBILE;

            
$device DataDeviceModels::identify('android'$match[1]);
            if (
$device->identified) {
                
$device->identified |= $this->data->device->identified;
                
$this->data->device $device;
            }
        }

        
/* "Android Application" */

        
if (preg_match('/Android Application/iu'$ua)) {
            if (
preg_match('/^(.+) Android Application ([0-9]+, .+ v[0-9.]+) - [a-z-]+ (.*) [a-z_-]+ - [0-9A-F]{8,8}-[0-9A-F]{4,4}-[0-9A-F]{4,4}-[0-9A-F]{4,4}-[0-9A-F]{12,12}$/iu'$ua$match)) {
                
$this->data->browser->name $match[1];
                
$this->data->browser->version null;
                
$this->data->browser->type ConstantsBrowserType::APP;

                
$this->data->os->reset([
                    
'name'      => 'Android'
                
]);

                
$this->data->device->model $match[2];
                
$this->data->device->identified |= ConstantsId::PATTERN;
                
$this->data->device->type ConstantsDeviceType::MOBILE;

                
$device DataDeviceModels::identify('android'$match[2]);
                if (
$device->identified) {
                    
$device->identified |= $this->data->device->identified;
                    
$this->data->device $device;
                }
            }

            if (
preg_match('/^(.+) Android Application - (.*) Build/(.+)  - [0-9A-F]{8,8}-[0-9A-F]{4,4}-[0-9A-F]{4,4}-[0-9A-F]{4,4}-[0-9A-F]{12,12}$/iu'$ua$match)) {
                
$this->data->browser->name $match[1];
                
$this->data->browser->version null;
                
$this->data->browser->type ConstantsBrowserType::APP;

                
$this->data->os->reset([
                    
'name'      => 'Android'
                
]);

                
$version DataBuildIds::identify($match[3]);
                if (
$version) {
                    
$this->data->os->version $version;
                }

                
$this->data->device->model $match[2];
                
$this->data->device->identified |= ConstantsId::PATTERN;
                
$this->data->device->type ConstantsDeviceType::MOBILE;

                
$device DataDeviceModels::identify('android'$match[2]);
                if (
$device->identified) {
                    
$device->identified |= $this->data->device->identified;
                    
$this->data->device $device;
                }
            }

            if (
preg_match('/^(.+) Android Application - [a-z-]+ (.*) [a-z_-]+$/iu'$ua$match)) {
                
$this->data->browser->name $match[1];
                
$this->data->browser->version null;
                
$this->data->browser->type ConstantsBrowserType::APP;

                
$this->data->os->reset([
                    
'name'      => 'Android'
                
]);

                
$this->data->device->model $match[2];
                
$this->data->device->identified |= ConstantsId::PATTERN;
                
$this->data->device->type ConstantsDeviceType::MOBILE;

                
$device DataDeviceModels::identify('android'$match[2]);
                if (
$device->identified) {
                    
$device->identified |= $this->data->device->identified;
                    
$this->data->device $device;
                }
            }
        }

        
/* AiMeiTuan */

        
if (preg_match('/^AiMeiTuan /[^-]+-([0-9.]+)-(.*)-[0-9]+x[0-9]+-/iu'$ua$match)) {
            
$this->data->browser->name 'AiMeiTuan';
            
$this->data->browser->version null;
            
$this->data->browser->type ConstantsBrowserType::APP;

            
$this->data->os->reset([
                
'name'      => 'Android',
                
'version'   => new Version([ 'value' => $match[1] ])
            ]);

            
$this->data->device->model $match[2];
            
$this->data->device->identified |= ConstantsId::PATTERN;
            
$this->data->device->type ConstantsDeviceType::MOBILE;

            
$device DataDeviceModels::identify('android'$match[2]);
            if (
$device->identified) {
                
$device->identified |= $this->data->device->identified;
                
$this->data->device $device;
            }
        }

        
/* Instagram */

        
if (preg_match('/^Instagram ([0-9.]+) Android (?:IC )?([0-9]+/([0-9.]+); [0-9]+dpi; [0-9]+x[0-9]+; [^;]+; ([^;]*);/iu'$ua$match)) {
            
$this->data->browser->name 'Instagram';
            
$this->data->browser->version = new Version([ 'value' => $match[1] ]);
            
$this->data->browser->type ConstantsBrowserType::APP_SOCIAL;

            
$this->data->os->reset([
                
'name'      => 'Android',
                
'version'   => new Version([ 'value' => $match[2] ])
            ]);

            
$this->data->device->model $match[3];
            
$this->data->device->identified |= ConstantsId::PATTERN;
            
$this->data->device->type ConstantsDeviceType::MOBILE;

            
$device DataDeviceModels::identify('android'$match[3]);
            if (
$device->identified) {
                
$device->identified |= $this->data->device->identified;
                
$this->data->device $device;
            }
        }

        
/* Pinterest */

        
if (preg_match('/^Pinterest for Android( Tablet)?/([0-9.]+) (([^;]+); ([0-9.]+))/iu'$ua$match)) {
            
$this->data->browser->name 'Pinterest';
            
$this->data->browser->version = new Version([ 'value' => $match[2] ]);
            
$this->data->browser->type ConstantsBrowserType::APP_SOCIAL;

            
$this->data->os->reset([
                
'name'      => 'Android',
                
'version'   => new Version([ 'value' => $match[4] ])
            ]);

            
$this->data->device->model $match[3];
            
$this->data->device->identified |= ConstantsId::PATTERN;
            
$this->data->device->type $match[1] == ' Tablet' ConstantsDeviceType::TABLET ConstantsDeviceType::MOBILE;

            
$device DataDeviceModels::identify('android'$match[3]);
            if (
$device->identified) {
                
$device->identified |= $this->data->device->identified;
                
$this->data->device $device;
            }
        }

        
/* Dr. Web Anti-Virus */

        
if (preg_match('/Dr.Web anti-virus Light Version: ([0-9.]+) Device model: (.*) Firmware version: ([0-9.]+)/u'$ua$match)) {
            
$this->data->browser->name 'Dr. Web Light';
            
$this->data->browser->version = new Version([ 'value' => $match[1], 'details' => ]);
            
$this->data->browser->type ConstantsBrowserType::APP_ANTIVIRUS;

            
$this->data->os->reset([
                
'name'      => 'Android',
                
'version'   => new Version([ 'value' => $match[3] ])
            ]);

            
$this->data->device->type ConstantsDeviceType::MOBILE;

            
$device DataDeviceModels::identify('android'$match[2]);
            if (
$device->identified) {
                
$device->identified |= $this->data->device->identified;
                
$this->data->device $device;
            }
        }

        
/* Google Earth */

        
if (preg_match('/GoogleEarth/([0-9.]+)(Android;Android ((.+)-[^-]+-user-([0-9.]+));/u'$ua$match)) {
            
$this->data->browser->name 'Google Earth';
            
$this->data->browser->version = new Version([ 'value' => $match[1], 'details' => ]);
            
$this->data->browser->type ConstantsBrowserType::APP;

            
$this->data->os->reset([
                
'name'      => 'Android',
                
'version'   => new Version([ 'value' => $match[3] ])
            ]);

            
$this->data->device->type ConstantsDeviceType::MOBILE;

            
$device DataDeviceModels::identify('android'$match[2]);
            if (
$device->identified) {
                
$device->identified |= $this->data->device->identified;
                
$this->data->device $device;
            }
        }

        
/* Groupon */

        
if (preg_match('/Groupon/([0-9.]+) (Android ([0-9.]+); [^/]+ / [A-Z][a-z]+ ([^;]*);/u'$ua$match)) {
            
$this->data->browser->name 'Groupon';
            
$this->data->browser->version = new Version([ 'value' => $match[1], 'details' => ]);
            
$this->data->browser->type ConstantsBrowserType::APP_SHOPPING;

            
$this->data->os->reset([
                
'name'      => 'Android',
                
'version'   => new Version([ 'value' => $match[2] ])
            ]);

            
$this->data->device->type ConstantsDeviceType::MOBILE;
            
$this->data->device->model $match[3];

            
$device DataDeviceModels::identify('android'$match[3]);
            if (
$device->identified) {
                
$device->identified |= $this->data->device->identified;
                
$this->data->device $device;
            }
        }

        
/* Whatsapp */

        
if (preg_match('/WhatsApp+?/([0-9.]+) (Android|S60Version|WP7)/([0-9._]+) Device/([^-]+)-(.*)(?:-([0-9]+.[0-9]+))?(?:-H[0-9]+.[0-9]+.[0-9]+.[0-9]+)?$/uU'$ua$match)) {
            
$this->data->browser->name 'WhatsApp';
            
$this->data->browser->version = new Version([ 'value' => $match[1], 'details' => ]);
            
$this->data->browser->type ConstantsBrowserType::APP_CHAT;

            
$this->data->device->type ConstantsDeviceType::MOBILE;
            
$this->data->device->manufacturer $match[4];
            
$this->data->device->model $match[5];
            
$this->data->device->identified |= ConstantsId::PATTERN;

            if (
$match[2] == 'Android') {
                
$this->data->os->reset([
                    
'name'      => 'Android',
                    
'version'   => new Version([ 'value' => str_replace('_''.'$match[3]) ])
                ]);

                
$device DataDeviceModels::identify('android'$match[5]);
                if (
$device->identified) {
                    
$device->identified |= $this->data->device->identified;
                    
$this->data->device $device;
                }
            }

            if (
$match[2] == 'WP7') {
                
$this->data->os->reset([
                    
'name'      => 'Windows Phone',
                    
'version'   => new Version([ 'value' => $match[3], 'details' => ])
                ]);

                
$device DataDeviceModels::identify('wp'$match[5]);
                if (
$device->identified) {
                    
$device->identified |= $this->data->device->identified;
                    
$this->data->device $device;
                }
            }

            if (
$match[2] == 'S60Version') {
                
$this->data->os->reset([
                    
'name'      => 'Series60',
                    
'version'   => new Version([ 'value' => $match[3] ]),
                    
'family'    => new Family([ 'name' => 'Symbian' ])
                ]);

                
$device DataDeviceModels::identify('symbian'$match[5]);
                if (
$device->identified) {
                    
$device->identified |= $this->data->device->identified;
                    
$this->data->device $device;
                }
            }

            if (
$match[2] == 'WP7') {
                
$this->data->os->reset([
                    
'name'      => 'Windows Phone',
                    
'version'   => new Version([ 'value' => $match[3], 'details' => ])
                ]);

                
$device DataDeviceModels::identify('wp'$match[5]);
                if (
$device->identified) {
                    
$device->identified |= $this->data->device->identified;
                    
$this->data->device $device;
                }
            }
        }

        
/* Yahoo */

        
if (preg_match('/YahooMobile(?:Messenger|Mail|Weather)/1.0 (Android (Messenger|Mail|Weather); ([0-9.]+)) ([^;]+; ?[^;]+; ?([^;]+); ?([0-9.]+)/[^;)/]+)/u'$ua$match)) {
            
$this->data->browser->name 'Yahoo ' $match[1];
            
$this->data->browser->version = new Version([ 'value' => $match[2], 'details' => ]);

            switch (
$match[1]) {
                case 
'Messenger':
                    
$this->data->browser->type ConstantsBrowserType::APP_CHAT;
                    break;
                case 
'Mail':
                    
$this->data->browser->type ConstantsBrowserType::APP_EMAIL;
                    break;
                case 
'Weather':
                    
$this->data->browser->type ConstantsBrowserType::APP_NEWS;
                    break;
            }

            
$this->data->os->reset([
                
'name'      => 'Android',
                
'version'   => new Version([ 'value' => $match[4] ])
            ]);

            
$this->data->device->type ConstantsDeviceType::MOBILE;

            
$device DataDeviceModels::identify('android'$match[3]);
            if (
$device->identified) {
                
$device->identified |= $this->data->device->identified;
                
$this->data->device $device;
            }
        }

        
/* Yahoo Mobile App */

        
if (preg_match('/YahooJMobileApp/[0-9.]+ (Android [a-z]+; ([0-9.]+)) ([^;]+; ?[^;]+; ?[^;]+; ?([^;]+); ?([0-9.]+)/[^;)/]+)/u'$ua$match)) {
            
$this->data->browser->name 'Yahoo Mobile';
            
$this->data->browser->version = new Version([ 'value' => $match[1], 'details' => ]);
            
$this->data->browser->type ConstantsBrowserType::APP_SEARCH;

            
$this->data->os->reset([
                
'name'      => 'Android',
                
'version'   => new Version([ 'value' => $match[3] ])
            ]);

            
$this->data->device->type ConstantsDeviceType::MOBILE;

            
$device DataDeviceModels::identify('android'$match[2]);
            if (
$device->identified) {
                
$device->identified |= $this->data->device->identified;
                
$this->data->device $device;
            }
        }

        
/* ICQ */

        
if (preg_match('/ICQ_Android/([0-9.]+) (Android; [0-9]+; ([0-9.]+); [^;]+; ([^;]+);/u'$ua$match)) {
            
$this->data->browser->name 'ICQ';
            
$this->data->browser->version = new Version([ 'value' => $match[1], 'details' => ]);
            
$this->data->browser->type ConstantsBrowserType::APP_CHAT;

            
$this->data->os->reset([
                
'name'      => 'Android',
                
'version'   => new Version([ 'value' => $match[2] ])
            ]);

            
$this->data->device->type ConstantsDeviceType::MOBILE;

            
$device DataDeviceModels::identify('android'$match[3]);
            if (
$device->identified) {
                
$device->identified |= $this->data->device->identified;
                
$this->data->device $device;
            }
        }

        
/* Facebook for Android */

        
if (preg_match('/^[FBAN/(FB4A|PAAA);.*FBDV/([^;]+);.*FBSV/([0-9.]+);/u'$ua$match)) {
            if (
$match[1] == 'FB4A') {
                
$this->data->browser->name 'Facebook';
                
$this->data->browser->version null;
                
$this->data->browser->type ConstantsBrowserType::APP_SOCIAL;
            }

            if (
$match[1] == 'PAAA') {
                
$this->data->browser->name 'Facebook Pages';
                
$this->data->browser->version null;
                
$this->data->browser->type ConstantsBrowserType::APP_SOCIAL;
            }

            
$this->data->os->reset([
                
'name'      => 'Android',
                
'version'   => new Version([ 'value' => $match[3] ])
            ]);

            
$this->data->device->type ConstantsDeviceType::MOBILE;

            
$device DataDeviceModels::identify('android'$match[2]);
            if (
$device->identified) {
                
$device->identified |= $this->data->device->identified;
                
$this->data->device $device;
            }
        }

        
/* VK */

        
if (preg_match('/^VKAndroidApp/([0-9.]+)-[0-9]+ (Android ([^;]+); SDK [^;]+; [^;]+; [a-z]+ ([^;]+);/iu'$ua$match)) {
            
$this->data->browser->name 'VK';
            
$this->data->browser->version = new Version([ 'value' => $match[1], 'details' => ]);
            
$this->data->browser->type ConstantsBrowserType::APP_SOCIAL;

            
$this->data->os->reset([
                
'name'      => 'Android',
                
'version'   => new Version([ 'value' => $match[2] ])
            ]);

            
$this->data->device->model $match[3];
            
$this->data->device->identified |= ConstantsId::PATTERN;
            
$this->data->device->type ConstantsDeviceType::MOBILE;

            
$device DataDeviceModels::identify('android'$match[3]);
            if (
$device->identified) {
                
$device->identified |= $this->data->device->identified;
                
$this->data->device $device;
            }
        }
    }

    private function 
detectRemainingApplications($ua)
    {
        if (
$data DataApplications::identifyOther($ua)) {
            
$this->data->browser->set($data['browser']);

            if (!empty(
$data['device'])) {
                
$this->data->device->set($data['device']);
            }
        }
    }
}
Онлайн: 2
Реклама