diff --git a/composer.json b/composer.json index 0cfa4c9f06221a15ab0b41bdf04b95659723df29..eef9ed3d8e8244c29a91caa05d4feb1292ea0f16 100644 --- a/composer.json +++ b/composer.json @@ -25,7 +25,7 @@ "symfony/console": ">=v2.3.5", "tedivm/jshrink": "v0.5.1", "mustangostang/spyc": "0.5.*", - "piwik/device-detector": "1.0" + "piwik/device-detector": "dev-master" }, "require-dev": { "phpunit/phpunit": "4.*" diff --git a/core/Tracker/Visit.php b/core/Tracker/Visit.php index b2a65cf39f305c5880eeef1f817b1bed8983881b..7411b3a4a1fd7bbe839dcf2c0271102acac87fd8 100644 --- a/core/Tracker/Visit.php +++ b/core/Tracker/Visit.php @@ -9,7 +9,7 @@ namespace Piwik\Tracker; -use DeviceDetector; +use DeviceDetector\DeviceDetector; use Piwik\Common; use Piwik\Config; use Piwik\IP; @@ -602,7 +602,11 @@ class Visit implements VisitInterface $deviceDetector = new DeviceDetector($userAgent); $deviceDetector->parse(); - $aBrowserInfo = $deviceDetector->getBrowser(); + $aBrowserInfo = $deviceDetector->getClient(); + if ($aBrowserInfo['type'] != 'browser') { + // for now only track browsers + unset($aBrowserInfo); + } $browserName = !empty($aBrowserInfo['short_name']) ? $aBrowserInfo['short_name'] : 'UNK'; $browserVersion = !empty($aBrowserInfo['version']) ? $aBrowserInfo['version'] : ''; diff --git a/libs/UserAgentParser/UserAgentParser.php b/libs/UserAgentParser/UserAgentParser.php index a57554e4daea6fe8128a712e72fbf9be9e25c2cc..4f85951c9309a046e0ce505dd79e5d4642d3c140 100644 --- a/libs/UserAgentParser/UserAgentParser.php +++ b/libs/UserAgentParser/UserAgentParser.php @@ -655,9 +655,9 @@ class UserAgentParser if (isset(self::$browserIdToName[$browserId])) { return self::$browserIdToName[$browserId]; } - if(class_exists('DeviceDetector')) { - if( !empty(DeviceDetector::$browsers[$browserId])) { - return DeviceDetector::$browsers[$browserId]; + if(class_exists('DeviceDetector\\Parser\\Client\\Browser')) { + if( array_key_exists($browserId, DeviceDetector\Parser\Client\Browser::getAvailableBrowsers())) { + return DeviceDetector\Parser\Client\Browser::getAvailableBrowsers()[$browserId]; } } return false; @@ -692,8 +692,8 @@ class UserAgentParser return self::$operatingSystemsIdToName[$osId]; } - if(class_exists('DeviceDetector')) { - return DeviceDetector::getOsNameFromId($osId); + if(class_exists('DeviceDetector\\Parser\\OperatingSystem')) { + return DeviceDetector\Parser\OperatingSystem::getNameFromId($osId); } return false; } diff --git a/piwik.php b/piwik.php index 18f5b22a542e770cd002f50efefe4fa2e3e67f1e..00c2041a52eca28a9244e536444fe321a1178d57 100644 --- a/piwik.php +++ b/piwik.php @@ -91,8 +91,6 @@ if (file_exists(PIWIK_INCLUDE_PATH . '/vendor/autoload.php')) { $vendorDirectory = PIWIK_INCLUDE_PATH . '/../..'; } require_once $vendorDirectory . '/autoload.php'; -require_once $vendorDirectory . '/mustangostang/spyc/Spyc.php'; -require_once $vendorDirectory . '/piwik/device-detector/DeviceDetector.php'; session_cache_limiter('nocache'); @date_default_timezone_set('UTC'); diff --git a/plugins/API/API.php b/plugins/API/API.php index 6d2b0e4e461565d28b7aa471a2a79c44a57edc43..94a39e0186c4db8a8bf5d4e5c9e5cc82977cbd7e 100644 --- a/plugins/API/API.php +++ b/plugins/API/API.php @@ -714,11 +714,11 @@ class Plugin extends \Piwik\Plugin if (empty($_SERVER['HTTP_USER_AGENT'])) { return; } - if (!class_exists("DeviceDetector")) { + if (!class_exists("DeviceDetector\\DeviceDetector")) { throw new \Exception("DeviceDetector could not be found, maybe you are using Piwik from git and need to have update Composer. <br>php composer.phar update"); } - $ua = new \DeviceDetector($_SERVER['HTTP_USER_AGENT']); + $ua = new \DeviceDetector\DeviceDetector($_SERVER['HTTP_USER_AGENT']); $ua->parse(); $os = $ua->getOs('short_name'); if ($os && in_array($os, array('AND', 'IOS'))) { diff --git a/plugins/DevicesDetection/Controller.php b/plugins/DevicesDetection/Controller.php index 12b5750dcf732b772d7e905bf89db328ddd6b0ba..2f50ca79f9a4ab8036e4048b6bcb13def72767c0 100644 --- a/plugins/DevicesDetection/Controller.php +++ b/plugins/DevicesDetection/Controller.php @@ -8,7 +8,7 @@ */ namespace Piwik\Plugins\DevicesDetection; -use DeviceDetector; +use DeviceDetector\DeviceDetector; use Piwik\Common; use Piwik\Db; use Piwik\Piwik; @@ -74,26 +74,27 @@ class Controller extends \Piwik\Plugin\Controller $userAgent = Common::getRequestVar('ua', $_SERVER['HTTP_USER_AGENT'], 'string'); - $parsedUA = DeviceDetector::getInfoFromUserAgent($userAgent); + $uaParser = new DeviceDetector($userAgent); + $uaParser->parse(); $view->userAgent = $userAgent; - $view->browser_name = $parsedUA['browser']['name']; - $view->browser_short_name = $parsedUA['browser']['short_name']; - $view->browser_version = $parsedUA['browser']['version']; - $view->browser_logo = getBrowserLogoExtended($parsedUA['browser']['short_name']); - $view->browser_family = $parsedUA['browser_family']; - $view->browser_family_logo = getBrowserFamilyLogoExtended($parsedUA['browser_family']); - $view->os_name = $parsedUA['os']['name']; - $view->os_logo = getOsLogoExtended($parsedUA['os']['short_name']); - $view->os_short_name = $parsedUA['os']['short_name']; - $view->os_family = $parsedUA['os_family']; - $view->os_family_logo = getOsFamilyLogoExtended($parsedUA['os_family']); - $view->os_version = $parsedUA['os']['version']; - $view->device_type = getDeviceTypeLabel($parsedUA['device']['type']); - $view->device_type_logo = getDeviceTypeLogo($parsedUA['device']['type']); - $view->device_model = $parsedUA['device']['model']; - $view->device_brand = getDeviceBrandLabel($parsedUA['device']['brand']); - $view->device_brand_logo = getBrandLogo($view->device_brand); + $view->browser_name = $uaParser->getClient('name'); + $view->browser_short_name = $uaParser->getClient('short_name'); + $view->browser_version = $uaParser->getClient('version'); + $view->browser_logo = getBrowserLogoExtended($uaParser->getClient('short_name')); + $view->browser_family = \DeviceDetector\Parser\Client\Browser::getBrowserFamily($uaParser->getClient('short_name')); + $view->browser_family_logo = getBrowserFamilyLogoExtended($view->browser_family); + $view->os_name = $uaParser->getOs('name'); + $view->os_logo = getOsLogoExtended($uaParser->getOs('short_name')); + $view->os_short_name = $uaParser->getOs('short_name'); + $view->os_family = \DeviceDetector\Parser\OperatingSystem::getOsFamily($uaParser->getOs('short_name')); + $view->os_family_logo = getOsFamilyLogoExtended($view->os_family); + $view->os_version = $uaParser->getOs('version'); + $view->device_type = getDeviceTypeLabel($uaParser->getDeviceName()); + $view->device_type_logo = getDeviceTypeLogo($uaParser->getDeviceName()); + $view->device_model = $uaParser->getModel(); + $view->device_brand = getDeviceBrandLabel($uaParser->getBrand()); + $view->device_brand_logo = getBrandLogo($uaParser->getBrand()); return $view->render(); } @@ -110,7 +111,7 @@ class Controller extends \Piwik\Plugin\Controller switch ($type) { case 'brands': - $availableBrands = DeviceDetector::$deviceBrands; + $availableBrands = \DeviceDetector\Parser\Device\DeviceParserAbstract::$deviceBrands; foreach ($availableBrands AS $short => $name) { if ($name != 'Unknown') { @@ -120,7 +121,7 @@ class Controller extends \Piwik\Plugin\Controller break; case 'browsers': - $availableBrowsers = DeviceDetector::$browsers; + $availableBrowsers = \DeviceDetector\Parser\Client\Browser::getAvailableBrowsers(); foreach ($availableBrowsers AS $short => $name) { $list[$name] = getBrowserLogoExtended($short); @@ -128,7 +129,7 @@ class Controller extends \Piwik\Plugin\Controller break; case 'browserfamilies': - $availableBrowserFamilies = DeviceDetector::$browserFamilies; + $availableBrowserFamilies = \DeviceDetector\Parser\Client\Browser::getAvailableBrowserFamilies(); foreach ($availableBrowserFamilies AS $name => $browsers) { $list[$name] = getBrowserFamilyLogoExtended($name); @@ -136,9 +137,9 @@ class Controller extends \Piwik\Plugin\Controller break; case 'os': - $availableOSs = DeviceDetector::$osShorts; + $availableOSs = \DeviceDetector\Parser\OperatingSystem::getAvailableOperatingSystems(); - foreach ($availableOSs AS $name => $short) { + foreach ($availableOSs AS $short => $name) { if ($name != 'Bot') { $list[$name] = getOsLogoExtended($short); } @@ -146,7 +147,7 @@ class Controller extends \Piwik\Plugin\Controller break; case 'osfamilies': - $osFamilies = DeviceDetector::$osFamilies; + $osFamilies = \DeviceDetector\Parser\OperatingSystem::getAvailableOperatingSystemFamilies(); foreach ($osFamilies AS $name => $oss) { if ($name != 'Bot') { @@ -156,9 +157,9 @@ class Controller extends \Piwik\Plugin\Controller break; case 'devicetypes': - $deviceTypes = DeviceDetector::$deviceTypes; + $deviceTypes = \DeviceDetector\Parser\Device\DeviceParserAbstract::getAvailableDeviceTypes(); - foreach ($deviceTypes AS $name) { + foreach ($deviceTypes AS $name => $id) { $list[$name] = getDeviceTypeLogo($name); } break; diff --git a/plugins/DevicesDetection/DevicesDetection.php b/plugins/DevicesDetection/DevicesDetection.php index a6b8b451496c16bfb1d2d3971f1568f8fe7fe15a..65e805a8a5207272075cc13142a47b60a03818b8 100644 --- a/plugins/DevicesDetection/DevicesDetection.php +++ b/plugins/DevicesDetection/DevicesDetection.php @@ -9,7 +9,8 @@ namespace Piwik\Plugins\DevicesDetection; -use DeviceDetector; +use DeviceDetector\Parser\Device\DeviceParserAbstract AS DeviceParser; +use DeviceDetector\DeviceDetector; use Exception; use Piwik\ArchiveProcessor; use Piwik\CacheFile; @@ -58,10 +59,10 @@ class DevicesDetection extends \Piwik\Plugin protected function getRawMetadataDeviceType() { - $deviceTypeList = implode(", ", DeviceDetector::$deviceTypes); + $deviceTypeList = implode(", ", DeviceParser::getAvailableDeviceTypeNames()); $deviceTypeLabelToCode = function ($type) use ($deviceTypeList) { - $index = array_search(strtolower(trim(urldecode($type))), DeviceDetector::$deviceTypes); + $index = array_search(strtolower(trim(urldecode($type))), DeviceParser::getAvailableDeviceTypeNames()); if ($index === false) { throw new Exception("deviceType segment must be one of: $deviceTypeList"); } @@ -257,10 +258,10 @@ class DevicesDetection extends \Piwik\Plugin $userAgent = $request->getUserAgent(); $UAParser = new DeviceDetector($userAgent); - $UAParser->setCache(new CacheFile('tracker', 86400)); + #$UAParser->setCache(new CacheFile('tracker', 86400)); $UAParser->parse(); - $deviceInfo['config_browser_name'] = $UAParser->getBrowser("short_name"); - $deviceInfo['config_browser_version'] = $UAParser->getBrowser("version"); + $deviceInfo['config_browser_name'] = $UAParser->getClient("type") == 'browser' ? $UAParser->getClient("short_name") : 'UNK'; + $deviceInfo['config_browser_version'] = $UAParser->getClient("type") == 'browser' ? $UAParser->getClient("version") : 'UNK'; $deviceInfo['config_os'] = $UAParser->getOs("short_name"); $deviceInfo['config_os_version'] = $UAParser->getOs("version"); $deviceInfo['config_device_type'] = $UAParser->getDevice(); diff --git a/plugins/DevicesDetection/functions.php b/plugins/DevicesDetection/functions.php index 895b0ed33cae0ce6e3a700c8f02d4b245a3cb1b2..7858b439703f68650f3dba6c88636abbf03192b5 100644 --- a/plugins/DevicesDetection/functions.php +++ b/plugins/DevicesDetection/functions.php @@ -9,8 +9,10 @@ namespace Piwik\Plugins\DevicesDetection; -use DeviceDetector; use Piwik\Piwik; +use DeviceDetector\Parser\OperatingSystem AS OperatingSystemParser; +use DeviceDetector\Parser\Device\DeviceParserAbstract AS DeviceParser; +use DeviceDetector\Parser\Client\Browser AS BrowserParser; function getBrandLogo($label) { @@ -25,7 +27,7 @@ function getBrandLogo($label) function getBrowserFamilyFullNameExtended($label) { - foreach (DeviceDetector::$browserFamilies as $name => $family) { + foreach (BrowserParser::getAvailableBrowserFamilies() as $name => $family) { if (in_array($label, $family)) { return $name; } @@ -35,8 +37,8 @@ function getBrowserFamilyFullNameExtended($label) function getBrowserFamilyLogoExtended($label) { - if (array_key_exists($label, DeviceDetector::$browserFamilies)) { - return getBrowserLogoExtended(DeviceDetector::$browserFamilies[$label][0]); + if (!empty($label) && array_key_exists($label, BrowserParser::getAvailableBrowserFamilies())) { + return getBrowserLogoExtended(BrowserParser::getAvailableBrowserFamilies()[$label][0]); } return getBrowserLogoExtended($label); } @@ -45,8 +47,8 @@ function getBrowserNameExtended($label) { $short = substr($label, 0, 2); $ver = substr($label, 3, 10); - if (array_key_exists($short, DeviceDetector::$browsers)) { - return trim(ucfirst(DeviceDetector::$browsers[$short]) . ' ' . $ver); + if (array_key_exists($short, BrowserParser::getAvailableBrowsers())) { + return trim(ucfirst(BrowserParser::getAvailableBrowsers()[$short]) . ' ' . $ver); } else { return Piwik::translate('General_Unknown'); } @@ -70,8 +72,8 @@ function getBrowserLogoExtended($short) // If name is given instead of short code, try to find matching shortcode if (strlen($short) > 2) { - if (in_array($short, DeviceDetector::$browsers)) { - $flippedBrowsers = array_flip(DeviceDetector::$browsers); + if (in_array($short, BrowserParser::getAvailableBrowsers())) { + $flippedBrowsers = array_flip(BrowserParser::getAvailableBrowsers()); $short = $flippedBrowsers[$short]; } else { $short = substr($short, 0, 2); @@ -80,18 +82,18 @@ function getBrowserLogoExtended($short) $family = getBrowserFamilyFullNameExtended($short); - if (array_key_exists($short, DeviceDetector::$browsers) && file_exists(PIWIK_INCLUDE_PATH.'/'.sprintf($path, $short))) { + if (!empty($short) && array_key_exists($short, BrowserParser::getAvailableBrowsers()) && file_exists(PIWIK_INCLUDE_PATH.'/'.sprintf($path, $short))) { return sprintf($path, $short); - } elseif (array_key_exists($family, DeviceDetector::$browserFamilies) && file_exists(PIWIK_INCLUDE_PATH.'/'.sprintf($path, DeviceDetector::$browserFamilies[$family][0]))) { - return sprintf($path, DeviceDetector::$browserFamilies[$family][0]); + } elseif (!empty($short) && array_key_exists($family, BrowserParser::getAvailableBrowserFamilies()) && file_exists(PIWIK_INCLUDE_PATH.'/'.sprintf($path, BrowserParser::getAvailableBrowserFamilies()[$family][0]))) { + return sprintf($path, BrowserParser::getAvailableBrowserFamilies()[$family][0]); } return sprintf($path, 'UNK'); } function getDeviceBrandLabel($label) { - if (array_key_exists($label, DeviceDetector::$deviceBrands)) { - return ucfirst(DeviceDetector::$deviceBrands[$label]); + if (array_key_exists($label, DeviceParser::$deviceBrands)) { + return ucfirst(DeviceParser::$deviceBrands[$label]); } else { return Piwik::translate('General_Unknown'); } @@ -110,8 +112,8 @@ function getDeviceTypeLabel($label) 'smart display' => 'DevicesDetection_SmartDisplay', 'camera' => 'DevicesDetection_Camera' ); - if (isset(DeviceDetector::$deviceTypes[$label]) && isset($translations[DeviceDetector::$deviceTypes[$label]])) { - return Piwik::translate($translations[DeviceDetector::$deviceTypes[$label]]); + if (in_array($label, DeviceParser::getAvailableDeviceTypes()) && isset($translations[array_search($label, DeviceParser::getAvailableDeviceTypes())])) { + return Piwik::translate($translations[array_search($label, DeviceParser::getAvailableDeviceTypes())]); } else if (isset($translations[$label])) { return Piwik::translate($translations[$label]); } else { @@ -121,8 +123,8 @@ function getDeviceTypeLabel($label) function getDeviceTypeLogo($label) { - if (is_numeric($label) && isset(DeviceDetector::$deviceTypes[$label])) { - $label = DeviceDetector::$deviceTypes[$label]; + if (is_numeric($label) && in_array($label, DeviceParser::getAvailableDeviceTypes())) { + $label = array_search($label, DeviceParser::getAvailableDeviceTypes()); } $label = strtolower($label); @@ -156,7 +158,7 @@ function getModelName($label) function getOSFamilyFullNameExtended($label) { - $label = DeviceDetector::getOsFamily($label); + $label = OperatingSystemParser::getOsFamily($label); if($label !== false) { return $label; } @@ -165,8 +167,8 @@ function getOSFamilyFullNameExtended($label) function getOsFamilyLogoExtended($label) { - if (array_key_exists($label, DeviceDetector::$osFamilies)) { - return getOsLogoExtended(DeviceDetector::$osFamilies[$label][0]); + if (!empty($label) && array_key_exists($label, OperatingSystemParser::getAvailableOperatingSystemFamilies())) { + return getOsLogoExtended(OperatingSystemParser::getAvailableOperatingSystemFamilies()[$label][0]); } return getOsLogoExtended($label); } @@ -176,7 +178,7 @@ function getOsFullNameExtended($label) if (!empty($label) && $label != ";") { $os = substr($label, 0, 3); $ver = substr($label, 4, 15); - $name = DeviceDetector::getOsNameFromId($os, $ver); + $name = OperatingSystemParser::getNameFromId($os, $ver); if (!empty($name)) { return $name; } @@ -202,8 +204,8 @@ function getOsLogoExtended($short) // If name is given instead of short code, try to find matching shortcode if (strlen($short) > 3) { - if (array_key_exists($short, DeviceDetector::$osShorts)) { - $short = DeviceDetector::$osShorts[$short]; + if (in_array($short, OperatingSystemParser::getAvailableOperatingSystems())) { + $short = array_search($short, OperatingSystemParser::getAvailableOperatingSystems()); } else { $short = substr($short, 0, 3); } @@ -211,10 +213,10 @@ function getOsLogoExtended($short) $family = getOsFamilyFullNameExtended($short); - if (in_array($short, DeviceDetector::$osShorts) && file_exists(PIWIK_INCLUDE_PATH.'/'.sprintf($path, $short))) { + if (!empty($short) && array_key_exists($short, OperatingSystemParser::getAvailableOperatingSystems()) && file_exists(PIWIK_INCLUDE_PATH.'/'.sprintf($path, $short))) { return sprintf($path, $short); - } elseif (array_key_exists($family, DeviceDetector::$osFamilies) && file_exists(PIWIK_INCLUDE_PATH.'/'.sprintf($path, DeviceDetector::$osFamilies[$family][0]))) { - return sprintf($path, DeviceDetector::$osFamilies[$family][0]); + } elseif (!empty($family) && array_key_exists($family, OperatingSystemParser::getAvailableOperatingSystemFamilies()) && file_exists(PIWIK_INCLUDE_PATH.'/'.sprintf($path, OperatingSystemParser::getAvailableOperatingSystemFamilies()[$family][0]))) { + return sprintf($path, OperatingSystemParser::getAvailableOperatingSystemFamilies()[$family][0]); } return sprintf($path, 'UNK'); }