fixed order of achievement title and count

This commit is contained in:
Daniel 2014-04-28 14:32:05 +02:00
commit df3dd6466c
3459 changed files with 594367 additions and 0 deletions

View file

@ -0,0 +1,23 @@
# UserAgentParser
UserAgentParser is a php library to parse user agents,
and extracts browser name & version and operating system.
UserAgentParser is NOT designed to parse bots user agent strings;
UserAgentParser will only be accurate when parsing user agents
coming from Javascript Enabled browsers!
UserAgentParser is designed for simplicity, to accurately detect the
most used web browsers, and be regularly updated to detect new OS and browsers.
Potential limitations:
* it does NOT detect sub sub versions, ie. the "5" in 1.4.5; this is a design decision to simplify the version number
* it does NOT detect search engine, bots, etc. user agents; it's designed to detect browsers with javascript enabled
* it does NOT detect nested UA strings caused by some browser add-ons
Feature request:
* it could have the notion of operating system "types", ie "Windows". It currently only has "Windows XP", "Windows Vista", etc.
Feedback, patches: hello@piwik.org

View file

@ -0,0 +1,725 @@
<?php
/**
* Copyright 2009, 2010 Matthieu Aubry & Piwik team
* All rights reserved.
*
* @link https://github.com/piwik/piwik/tree/master/libs/UserAgentParser
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* * Neither the name of Matthieu Aubry nor the names of its contributors
* may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
* Example usage
*
* Browser info:
* var_dump(UserAgentParser::getBrowser($_SERVER['HTTP_USER_AGENT']));
*
* Outputs:
* array
* 'id' => 'FF'
* 'name' => 'Firefox'
* 'short_name' => 'Firefox'
* 'version' => '3.0'
* 'major_number' => '3'
* 'minor_number' => '0'
*
* Operating System info:
* var_dump(UserAgentParser::getOperatingSystem($_SERVER['HTTP_USER_AGENT']));
*
* Outputs:
* array
* 'id' => 'WXP'
* 'name' => 'Windows XP'
* 'short_name' => 'Win XP'
*
*/
class UserAgentParser
{
// browser regex => browser ID
// if there are aliases, the common name should be last
static protected $browsers = array(
'abrowse' => 'AB',
'amaya' => 'AM',
'amigavoyager' => 'AV',
'amiga-aweb' => 'AW',
'arora' => 'AR',
'beonex' => 'BE',
// BlackBerry smartphones and tablets
'blackberry' => 'BB', // BlackBerry 6 and PlayBook adopted webkit
'bb10' => 'B2', // BlackBerry 10
'playbook' => 'BP',
'browsex' => 'BX',
// Camino (and earlier incarnation)
'chimera' => 'CA',
'camino' => 'CA',
'cheshire' => 'CS',
// Chrome, Chromium, and ChromePlus
'crmo' => 'CH',
'chrome' => 'CH',
// Chrome Frame
'chromeframe' => 'CF',
'cometbird' => 'CO',
'dillo' => 'DI',
'elinks' => 'EL',
'epiphany' => 'EP',
'fennec' => 'FE',
// Dolfin (or Dolphin)
'dolfin' => 'DF',
// Firefox (in its many incarnations and rebranded versions)
'phoenix' => 'PX',
'mozilla firebird' => 'FB',
'firebird' => 'FB',
'bonecho' => 'FF',
'minefield' => 'FF',
'namoroka' => 'FF',
'shiretoko' => 'FF',
'granparadiso' => 'FF',
'iceweasel' => 'FF',
'icecat' => 'FF',
'firefox' => 'FF',
'thunderbird' => 'TB',
'flock' => 'FL',
'fluid' => 'FD',
'galeon' => 'GA',
'google earth' => 'GE',
'hana' => 'HA',
'hotjava' => 'HJ',
'ibrowse' => 'IB',
'icab' => 'IC',
// IE (including shells: Acoo, AOL, Avant, Crazy Browser, Green Browser, KKMAN, Maxathon)
'msie' => 'IE',
'trident' => 'IE',
'microsoft internet explorer' => 'IE',
'internet explorer' => 'IE',
'iron' => 'IR',
'kapiko' => 'KP',
'kazehakase' => 'KZ',
'k-meleon' => 'KM',
'konqueror' => 'KO',
'links' => 'LI',
'lynx' => 'LX',
'midori' => 'MI',
// SeaMonkey (formerly Mozilla Suite) (and rebranded versions)
'mozilla' => 'MO',
'gnuzilla' => 'SM',
'iceape' => 'SM',
'seamonkey' => 'SM',
// NCSA Mosaic (and incarnations)
'mosaic' => 'MC',
'ncsa mosaic' => 'MC',
// Netscape Navigator
'navigator' => 'NS',
'netscape6' => 'NS',
'netscape' => 'NS',
'nx' => 'NF',
'netfront' => 'NF',
'omniweb' => 'OW',
// Opera
'nitro) opera' => 'OP',
'opera' => 'OP',
'rekonq' => 'RK',
// Safari
'safari' => 'SF',
'applewebkit' => 'SF',
'titanium' => 'TI',
'webos' => 'WO',
'webpro' => 'WP',
);
// browser family (by layout engine)
static protected $browserType = array(
'ie' => array('IE'),
'gecko' => array('NS', 'PX', 'FF', 'FB', 'CA', 'GA', 'KM', 'MO', 'SM', 'CO', 'FE', 'KP', 'KZ', 'TB'),
'khtml' => array('KO'),
'webkit' => array('SF', 'CH', 'OW', 'AR', 'EP', 'FL', 'WO', 'AB', 'IR', 'CS', 'FD', 'HA', 'MI', 'GE', 'DF', 'BB', 'BP', 'TI', 'CF', 'RK', 'B2', 'NF'),
'opera' => array('OP'),
);
// WebKit version numbers to Apple Safari version numbers (if Version/X.Y.Z not present)
static protected $safariVersions = array(
'536.25' => array('6', '0'),
'534.48' => array('5', '1'),
'533.16' => array('5', '0'),
'533.4' => array('4', '1'),
'526.11.2' => array('4', '0'),
'525.26' => array('3', '2'),
'525.13' => array('3', '1'),
'522.11' => array('3', '0'),
'412' => array('2', '0'),
'312' => array('1', '3'),
'125' => array('1', '2'),
'100' => array('1', '1'),
'85' => array('1', '0'),
'73' => array('0', '9'),
'48' => array('0', '8'),
);
// OmniWeb build numbers to OmniWeb version numbers (if Version/X.Y.Z not present)
static protected $omniWebVersions = array(
'622.15' => array('5', '11'),
'622.10' => array('5', '10'),
'622.8' => array('5', '9'),
'622.3' => array('5', '8'),
'621' => array('5', '7'),
'613' => array('5', '6'),
'607' => array('5', '5'),
'563.34' => array('5', '1'),
'558.36' => array('5', '0'),
'496' => array('4', '5'),
);
// OS regex => OS ID
static protected $operatingSystems = array(
'Android' => 'AND',
'Maemo' => 'MAE',
'CrOS ' => 'LIN',
'Linux' => 'LIN',
'Xbox' => 'XBX',
// workaround for vendors who changed the WinPhone 7 user agent
'WP7' => 'WPH',
'CYGWIN_NT-6.2' => 'WI8',
'Windows NT 6.2' => 'WI8',
'Windows NT 6.3' => 'WI8',
'Windows 8' => 'WI8',
'CYGWIN_NT-6.1' => 'WI7',
'Windows NT 6.1' => 'WI7',
'Windows 7' => 'WI7',
'CYGWIN_NT-6.0' => 'WVI',
'Windows NT 6.0' => 'WVI',
'Windows Vista' => 'WVI',
'CYGWIN_NT-5.2' => 'WS3',
'Windows NT 5.2' => 'WS3',
'Windows Server 2003 / XP x64' => 'WS3',
'CYGWIN_NT-5.1' => 'WXP',
'Windows NT 5.1' => 'WXP',
'Windows XP' => 'WXP',
'CYGWIN_NT-5.0' => 'W2K',
'Windows NT 5.0' => 'W2K',
'Windows 2000' => 'W2K',
'CYGWIN_NT-4.0' => 'WNT',
'Windows NT 4.0' => 'WNT',
'WinNT' => 'WNT',
'Windows NT' => 'WNT',
'CYGWIN_ME-4.90' => 'WME',
'Win 9x 4.90' => 'WME',
'Windows ME' => 'WME',
'CYGWIN_98-4.10' => 'W98',
'Win98' => 'W98',
'Windows 98' => 'W98',
'CYGWIN_95-4.0' => 'W95',
'Win32' => 'W95',
'Win95' => 'W95',
'Windows 95' => 'W95',
// Windows Phone OS 7 and above
'Windows Phone OS' => 'WPH',
// Windows Mobile 6.x and some later versions of Windows Mobile 5
'IEMobile' => 'WMO', // fallback
'Windows Mobile' => 'WMO',
// Windows CE, Pocket PC, and Windows Mobile 5 are indistinguishable without vendor/device specific detection
'Windows CE' => 'WCE',
'iPod' => 'IPD',
'iPad' => 'IPA',
'iPhone' => 'IPH',
// 'iOS' => 'IOS',
'Darwin' => 'MAC',
'Macintosh' => 'MAC',
'Power Macintosh' => 'MAC',
'Mac_PowerPC' => 'MAC',
'Mac PPC' => 'MAC',
'PPC' => 'MAC',
'Mac PowerPC' => 'MAC',
'Mac OS' => 'MAC',
'webOS' => 'WOS',
'Palm webOS' => 'WOS',
'PalmOS' => 'POS',
'Palm OS' => 'POS',
'BB10' => 'BBX',
'BlackBerry' => 'BLB',
'RIM Tablet OS' => 'QNX',
'QNX' => 'QNX',
'SymbOS' => 'SYM',
'Symbian OS' => 'SYM',
'SymbianOS' => 'SYM',
'bada' => 'SBA',
'SunOS' => 'SOS',
'AIX' => 'AIX',
'HP-UX' => 'HPX',
'OpenVMS' => 'VMS',
'FreeBSD' => 'BSD',
'NetBSD' => 'NBS',
'OpenBSD' => 'OBS',
'DragonFly' => 'DFB',
'Syllable' => 'SYL',
'Nintendo WiiU' => 'WIU',
'Nintendo Wii' => 'WII',
'Nitro' => 'NDS',
'Nintendo DSi' => 'DSI',
'Nintendo DS' => 'NDS',
'Nintendo 3DS' => '3DS',
'PlayStation Vita' => 'PSV',
'PlayStation Portable' => 'PSP',
'PlayStation 3' => 'PS3',
'IRIX' => 'IRI',
'OSF1' => 'T64',
'OS/2' => 'OS2',
'BEOS' => 'BEO',
'Amiga' => 'AMI',
'AmigaOS' => 'AMI',
);
// os family
// NOTE: The keys in this array are used by plugins/UserSettings/functions.php . Any changes
// made here should also be made in that file.
static protected $osType = array(
'Windows' => array('WI8', 'WI7', 'WVI', 'WS3', 'WXP', 'W2K', 'WNT', 'WME', 'W98', 'W95'),
'Linux' => array('LIN'),
'Mac' => array('MAC'),
'iOS' => array('IPD', 'IPA', 'IPH'),
'Android' => array('AND'),
'Windows Mobile' => array('WPH', 'WMO', 'WCE'),
'Gaming Console' => array('WII', 'WIU', 'PS3', 'XBX'),
'Mobile Gaming Console' => array('PSP', 'PSV', 'NDS', 'DSI', '3DS'),
'Unix' => array('SOS', 'AIX', 'HP-UX', 'BSD', 'NBS', 'OBS', 'DFB', 'SYL', 'IRI', 'T64'),
'Other Mobile' => array('MAE', 'WOS', 'POS', 'BLB', 'QNX', 'SYM', 'SBA'),
'Other' => array('VMS', 'OS2', 'BEOS', 'AMI')
);
static protected $browserIdToName;
static protected $browserIdToShortName;
static protected $operatingSystemsIdToName;
static protected $operatingSystemsIdToShortName;
static private $init = false;
/**
* Returns an array of the OS for the submitted user agent
* 'id' => '',
* 'name' => '',
* 'short_name' => '',
*
* @param string $userAgent
* @return string false if OS couldn't be identified, or 3 letters ID (eg. WXP)
* @see UserAgentParser/OperatingSystems.php for the list of OS (also available in self::$operatingSystems)
*/
static public function getOperatingSystem($userAgent)
{
$userAgent = self::cleanupUserAgent($userAgent);
self::init();
$info = array(
'id' => '',
'name' => '',
'short_name' => '',
);
foreach (self::$operatingSystems as $key => $value) {
if (stristr($userAgent, $key) !== false) {
$info['id'] = $value;
break;
}
}
if (empty($info['id'])) {
return false;
}
$info['name'] = self::getOperatingSystemNameFromId($info['id']);
$info['short_name'] = self::getOperatingSystemShortNameFromId($info['id']);
return $info;
}
static protected function cleanupUserAgent($userAgent)
{
// in case value is URL encoded
return urldecode($userAgent);
}
/**
* Returns the browser information array, given a user agent string.
*
* @param string $userAgent
* @return array false if the browser is "unknown", or
* array( 'id' => '', // 2 letters ID, eg. FF
* 'name' => '', // 2 letters ID, eg. FF
* 'short_name' => '', // 2 letters ID, eg. FF
* 'major_number' => '', // 2 in firefox 2.0.12
* 'minor_number' => '', // 0 in firefox 2.0.12
* 'version' => '', // major_number.minor_number
* );
* @see self::$browsers for the list of OS
*/
static public function getBrowser($userAgent)
{
$userAgent = self::cleanupUserAgent($userAgent);
self::init();
$info = array(
'id' => '',
'name' => '',
'short_name' => '',
'major_number' => '',
'minor_number' => '',
'version' => '',
);
$browsers = self::$browsers;
// derivative browsers often clone the base browser's useragent
unset($browsers['firefox']);
unset($browsers['mozilla']);
unset($browsers['safari']);
unset($browsers['applewebkit']);
$browsersPattern = str_replace(')', '\)', implode('|', array_keys($browsers)));
$results = array();
// Misbehaving IE add-ons
$userAgent = preg_replace('/[; ]Mozilla\/[0-9.]+ \([^)]+\)/', '', $userAgent);
// Clean-up BlackBerry device UAs
$userAgent = preg_replace('~^BlackBerry\d+/~', 'BlackBerry/', $userAgent);
if (preg_match_all("/($browsersPattern)[\/\sa-z(]*([0-9]+)([\.0-9a-z]+)?/i", $userAgent, $results)
|| (strpos($userAgent, 'Shiira') === false && preg_match_all("/(firefox|thunderbird|safari)[\/\sa-z(]*([0-9]+)([\.0-9a-z]+)?/i", $userAgent, $results))
|| preg_match_all("/(applewebkit)[\/\sa-z(]*([0-9]+)([\.0-9a-z]+)?/i", $userAgent, $results)
|| preg_match_all("/^(mozilla)\/([0-9]+)([\.0-9a-z-]+)?(?: \[[a-z]{2}\])? (?:\([^)]*\))$/i", $userAgent, $results)
|| preg_match_all("/^(mozilla)\/[0-9]+(?:[\.0-9a-z-]+)?\s\(.* rv:([0-9]+)([.0-9a-z]+)\) gecko(\/[0-9]{8}|$)(?:.*)/i", $userAgent, $results)
|| (strpos($userAgent, 'Nintendo 3DS') !== false && preg_match_all("/^(mozilla).*version\/([0-9]+)([.0-9a-z]+)?/i", $userAgent, $results))
) {
// browser code (usually the first match)
$count = 0;
$info['id'] = self::$browsers[strtolower($results[1][0])];
// sometimes there's a better match at the end
if (strpos($userAgent, 'chromeframe') !== false) {
$count = count($results[0]) - 1;
$info['id'] = 'CF';
} elseif (($info['id'] == 'IE' || $info['id'] == 'LX') && (count($results[0]) > 1)) {
$count = count($results[0]) - 1;
$info['id'] = self::$browsers[strtolower($results[1][$count])];
}
// Netscape fix
if ($info['id'] == 'MO' && $count == 0) {
if (stripos($userAgent, 'PlayStation') !== false) {
return false;
}
if (strpos($userAgent, 'Nintendo 3DS') !== false) {
$info['id'] = 'NF';
} elseif (count($results) == 4) {
$info['id'] = 'NS';
}
} // BlackBerry devices
elseif (strpos($userAgent, 'BlackBerry') !== false) {
$info['id'] = 'BB';
} elseif (strpos($userAgent, 'RIM Tablet OS') !== false) {
$info['id'] = 'BP';
} elseif (strpos($userAgent, 'BB10') !== false) {
$info['id'] = 'B2';
} elseif (strpos($userAgent, 'Playstation Vita') !== false) {
$info['id'] = 'NF';
if (preg_match_all("/(silk)[\/\sa-z(]*([0-9]+)([\.0-9a-z]+)?/i", $userAgent, $newResults)) {
$results = $newResults;
$count = count($results[0]) - 1;
}
}
// Version/X.Y.Z override
if (preg_match_all("/(version)[\/\sa-z(]*([0-9]+)([\.0-9a-z]+)?/i", $userAgent, $newResults)) {
$results = $newResults;
$count = count($results[0]) - 1;
}
// major version number (1 in mozilla 1.7)
$info['major_number'] = $results[2][$count];
// is an minor version number ? If not, 0
$match = array();
preg_match('/([.\0-9]+)?([\.a-z0-9]+)?/i', $results[3][$count], $match);
if (isset($match[1])) {
// find minor version number (7 in mozilla 1.7, 9 in firefox 0.9.3)
$dot = strpos(substr($match[1], 1), '.');
if ($dot !== false) {
$info['minor_number'] = substr($match[1], 1, $dot);
} else {
$info['minor_number'] = substr($match[1], 1);
}
} else {
$info['minor_number'] = '0';
}
$info['version'] = $info['major_number'] . '.' . $info['minor_number'];
// IE compatibility mode
if ($info['id'] == 'IE'
&& (strncmp($userAgent, 'Mozilla/4.0', 11) == 0 || strncmp($userAgent, 'Mozilla/5.0', 11) == 0)
&& preg_match('~ Trident/([0-9]+)\.[0-9]+~', $userAgent, $tridentVersion)
) {
$info['major_number'] = $tridentVersion[1] + 4;
$info['minor_number'] = '0';
$info['version'] = $info['major_number'] . '.' . $info['minor_number'];
}
// Safari fix
if ($info['id'] == 'SF') {
foreach (self::$safariVersions as $buildVersion => $productVersion) {
if (version_compare($info['version'], $buildVersion) >= 0) {
$info['major_number'] = $productVersion[0];
$info['minor_number'] = $productVersion[1];
$info['version'] = $info['major_number'] . '.' . $info['minor_number'];
break;
}
}
}
// OmniWeb fix
if ($info['id'] == 'OW') {
foreach (self::$omniWebVersions as $buildVersion => $productVersion) {
if (version_compare($info['version'], $buildVersion) >= 0) {
$info['major_number'] = $productVersion[0];
$info['minor_number'] = $productVersion[1];
$info['version'] = $info['major_number'] . '.' . $info['minor_number'];
break;
}
}
}
// SeaMonkey fix
if ($info['id'] == 'MO' && $info['version'] == '1.9') {
$info['id'] = 'SM';
}
$info['name'] = self::getBrowserNameFromId($info['id']);
$info['short_name'] = self::getBrowserShortNameFromId($info['id']);
return $info;
}
return false;
}
static protected function init()
{
if (self::$init) {
return;
}
self::$init = true;
// init browser names and short names
self::$browserIdToName = array_map('ucwords', array_flip(self::$browsers));
self::$browserIdToName['AB'] = 'ABrowse';
self::$browserIdToName['AV'] = 'AmigaVoyager';
self::$browserIdToName['AW'] = 'Amiga AWeb';
self::$browserIdToName['BB'] = 'BlackBerry';
self::$browserIdToName['BP'] = 'PlayBook';
self::$browserIdToName['B2'] = 'BlackBerry';
self::$browserIdToName['BX'] = 'BrowseX';
self::$browserIdToName['CF'] = 'Chrome Frame';
self::$browserIdToName['CO'] = 'CometBird';
self::$browserIdToName['EL'] = 'ELinks';
self::$browserIdToName['FF'] = 'Firefox';
self::$browserIdToName['HJ'] = 'HotJava';
self::$browserIdToName['IB'] = 'IBrowse';
self::$browserIdToName['IC'] = 'iCab';
self::$browserIdToName['KM'] = 'K-Meleon';
self::$browserIdToName['MC'] = 'NCSA Mosaic';
self::$browserIdToName['NF'] = 'NetFront';
self::$browserIdToName['OW'] = 'OmniWeb';
self::$browserIdToName['SF'] = 'Safari';
self::$browserIdToName['SM'] = 'SeaMonkey';
self::$browserIdToName['WO'] = 'Palm webOS';
self::$browserIdToName['WP'] = 'WebPro';
self::$browserIdToShortName = self::$browserIdToName;
self::$browserIdToShortName['AW'] = 'AWeb';
self::$browserIdToShortName['FB'] = 'Firebird';
self::$browserIdToShortName['IE'] = 'IE';
self::$browserIdToShortName['MC'] = 'Mosaic';
self::$browserIdToShortName['BP'] = 'PlayBook';
self::$browserIdToShortName['WO'] = 'webOS';
// init OS names and short names
$operatingSystemsIdToName = array(
'IPD' => 'iPod',
'IPA' => 'iPad',
'WME' => 'Windows Me',
'BEO' => 'BeOS',
'T64' => 'Tru64',
'NDS' => 'Nintendo DS',
'WIU' => 'Nintendo Wii U',
'3DS' => 'Nintendo 3DS',
// These are for BC purposes only
'W75' => 'WinPhone 7.5',
'WP7' => 'WinPhone 7',
'W65' => 'WinMo 6.5',
'W61' => 'WinMo 6.1',
);
self::$operatingSystemsIdToName = array_merge(array_flip(self::$operatingSystems), $operatingSystemsIdToName);
$operatingSystemsIdToShortName = array(
'PS3' => 'PS3',
'PSP' => 'PSP',
'WII' => 'Wii',
'WIU' => 'Wii U',
'NDS' => 'DS',
'DSI' => 'DSi',
'3DS' => '3DS',
'PSV' => 'PS Vita',
'WI8' => 'Win 8',
'WI7' => 'Win 7',
'WVI' => 'Win Vista',
'WS3' => 'Win S2003',
'WXP' => 'Win XP',
'W98' => 'Win 98',
'W2K' => 'Win 2000',
'WNT' => 'Win NT',
'WME' => 'Win Me',
'W95' => 'Win 95',
'WPH' => 'WinPhone',
'WMO' => 'WinMo',
'WCE' => 'Win CE',
'WOS' => 'webOS',
'UNK' => 'Unknown',
);
self::$operatingSystemsIdToShortName = array_merge(self::$operatingSystemsIdToName, $operatingSystemsIdToShortName);
}
static public function getBrowserNameFromId($browserId)
{
self::init();
if (isset(self::$browserIdToName[$browserId])) {
return self::$browserIdToName[$browserId];
}
if(class_exists('DeviceDetector')) {
if( !empty(DeviceDetector::$browsers[$browserId])) {
return DeviceDetector::$browsers[$browserId];
}
}
return false;
}
static public function getBrowserShortNameFromId($browserId)
{
self::init();
if (isset(self::$browserIdToShortName[$browserId])) {
return self::$browserIdToShortName[$browserId];
}
return false;
}
static public function getBrowserFamilyFromId($browserId)
{
self::init();
$familyNameToUse = 'unknown';
foreach (self::$browserType as $familyName => $aBrowsers) {
if (in_array($browserId, $aBrowsers)) {
$familyNameToUse = $familyName;
break;
}
}
return $familyNameToUse;
}
static public function getOperatingSystemNameFromId($osId)
{
self::init();
if (isset(self::$operatingSystemsIdToName[$osId])) {
return self::$operatingSystemsIdToName[$osId];
}
if(class_exists('DeviceDetector')) {
return DeviceDetector::getOsNameFromId($osId);
}
return false;
}
static public function getOperatingSystemShortNameFromId($osId)
{
self::init();
if (isset(self::$operatingSystemsIdToShortName[$osId])) {
return self::$operatingSystemsIdToShortName[$osId];
}
return false;
}
static public function getOperatingSystemIdFromName($osName)
{
return isset(self::$operatingSystems[$osName]) ? self::$operatingSystems[$osName] : false;
}
static public function getOperatingSystemFamilyFromId($osId)
{
self::init();
foreach (self::$osType as $familyName => $aSystems) {
if (in_array($osId, $aSystems)) {
return $familyName;
}
}
return 'unknown';
}
}

View file

@ -0,0 +1,56 @@
<?php
if (!isset($_GET['setUserAgent']) && !isset($_SERVER['HTTP_USER_AGENT'])) die;
require_once dirname(__FILE__) . '/UserAgentParser.php';
echo "<h2>UserAgentParser php library test</h2>";
$testUserAgent = array(
'my user agent' => '',
'ie8 on win7' => 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET CLR 3.0.04506; .NET CLR 3.5.21022; InfoPath.2; SLCC1; Zune 3.0)',
'ie8 on vista (compatibility view)' => 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/4.0)',
'ie8 on vista' => 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)',
'chrome on winxp' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.48 Safari/525.19',
'IE6 on winxp' => 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648)',
'safari on winxp' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Version/3.1.2 Safari/525.21',
'FF3 on winxp' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6',
'opera 9.63 on winxp' => 'Opera/9.63 (Windows NT 5.1; U; en) Presto/2.1.1',
'Blackberry' => 'BlackBerry8700/4.1.0 Profile/MIDP-2.0 Configuration/CLDC-1.1',
'opera 9.30 on Nintendo Wii' => 'Opera/9.30 (Nintendo Wii; U; ; 2047-7; en)',
'iphone' => 'Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_2 like Mac OS X; en-us) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5G77 Safari/525.20',
'iPod touch' => 'Mozilla/5.0 (iPod; U; CPU like Mac OS X; en) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/3A100a Safari/419.3',
'iPod' => 'Mozilla/5.0 (iPod; U; CPU iPhone OS 2_2_1 like Mac OS X; en-us) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5H11a Safari/525.20',
'Android' => 'Mozilla/5.0 (Linux; U; Android 1.1; en-us; dream) AppleWebKit/525.10+ (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2',
'PalmOS' => 'Mozilla/5.0 [en] (PalmOS; U; WebPro/3.5; Palm-Zi72) ',
'safari on mac os X' => 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_5; en-us) AppleWebKit/527.3+ (KHTML, like Gecko) Version/3.1.2 Safari/525.20.1',
'opera 9.64 on win ME' => 'Opera/9.64 (Windows ME; U; en) Presto/2.1.1',
'opera 10.00 on XP' => 'Opera/9.80 (Windows NT 5.1; U; en) Presto/2.2.15 Version/10.00',
'iron on win7' => 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/531.0 (KHTML, like Gecko) Iron/3.0.189.0 Safari/531.0',
'firefox 3.6 alpha on vista' => 'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.2a2pre) Gecko/20090826 Namoroka/3.6a2pre',
'firefox 3.5 alpha on win7' => 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1b4pre) Gecko/20090420 Shiretoko/3.5b4pre (.NET CLR 3.5.30729)',
'firefox nightly build' => 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:2.0a1pre) Gecko/2008060602 Minefield/4.0a1pre',
'thunderbird 14.0 with lightning 1.6' => 'Mozilla/5.0 (Windows NT 5.1; rv:14.0) Gecko/20120713 Thunderbird/14.0 Lightning/1.6',
'Windows 8' => 'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko',
);
echo "Test with another user agent: ";
foreach ($testUserAgent as $name => $userAgent) {
echo "<a href='?setUserAgent=" . urlencode($userAgent) . "'>$name</a>, ";
}
echo "<hr>";
if (isset($_GET['setUserAgent']) && !empty($_GET['setUserAgent'])) {
echo "User Agent:";
$userAgent = urldecode($_GET['setUserAgent']);
} else {
echo "Your user agent:";
$userAgent = $_SERVER['HTTP_USER_AGENT'];
}
echo " <b>" . htmlentities($userAgent) . "</b><br><br>";
echo "Browser info:<pre>";
var_dump(UserAgentParser::getBrowser($userAgent));
echo "</pre>";
echo "Operating System info:<pre>";
var_dump(UserAgentParser::getOperatingSystem($userAgent));
echo "</pre>";
echo "<br><br><i>UserAgentParser doesn't detect your Operating System or Browser properly? <br>Please submit your user agent string and the expected result to hello at piwik.org. Patches are also welcome :-) Thanks!</i>";