Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsgiehl <stefan@piwik.org>2014-05-24 20:37:04 +0400
committersgiehl <stefan@piwik.org>2014-05-24 20:37:04 +0400
commitcef2d69f76320d8f02cea2418a4bf5d506aee513 (patch)
treec3a362a861346fc4fb32be6f1864b8cc9f27b3ce
parentcbde69956082195aa04439deb269181f5fdd8759 (diff)
starting to implement new DeviceDetector structure
-rw-r--r--composer.json2
-rw-r--r--core/Tracker/Visit.php8
-rw-r--r--libs/UserAgentParser/UserAgentParser.php10
-rw-r--r--piwik.php2
-rw-r--r--plugins/API/API.php4
-rw-r--r--plugins/DevicesDetection/Controller.php55
-rw-r--r--plugins/DevicesDetection/DevicesDetection.php13
-rw-r--r--plugins/DevicesDetection/functions.php54
8 files changed, 77 insertions, 71 deletions
diff --git a/composer.json b/composer.json
index 0cfa4c9f06..eef9ed3d8e 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 b2a65cf39f..7411b3a4a1 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 a57554e4da..4f85951c93 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 18f5b22a54..00c2041a52 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 6d2b0e4e46..94a39e0186 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 12b5750dcf..2f50ca79f9 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 a6b8b45149..65e805a8a5 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 895b0ed33c..7858b43970 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');
}