197 lines
7.3 KiB
PHP
197 lines
7.3 KiB
PHP
<?php
|
|
/**
|
|
* @version $Id: RokBrowserCheck.php 4585 2012-10-27 01:44:54Z btowles $
|
|
* @author RocketTheme http://www.rockettheme.com
|
|
* @copyright Copyright (C) 2007 - 2013 RocketTheme, LLC
|
|
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPLv2 only
|
|
*/
|
|
|
|
if (!class_exists('RokBrowserCheck')) {
|
|
|
|
class RokBrowserCheck {
|
|
var $_ua;
|
|
|
|
var $name;
|
|
var $version;
|
|
var $shortversion;
|
|
var $platform;
|
|
var $engine;
|
|
var $_checks = array();
|
|
|
|
function __construct() {
|
|
$this->_ua = $_SERVER['HTTP_USER_AGENT'];
|
|
$this->_checkPlatform();
|
|
$this->_checkBrowser();
|
|
$this->_checkEngine();
|
|
|
|
// add short version
|
|
if ($this->version != 'unknown') $this->shortversion = substr($this->version, 0, strpos($this->version, '.'));
|
|
else $this->shortversion = 'unknown';
|
|
|
|
$this->_createChecks();
|
|
}
|
|
|
|
function _checkPlatform() {
|
|
if (preg_match("/iPhone/", $this->_ua) || preg_match("/iPod/", $this->_ua)) {
|
|
$this->platform = "iphone";
|
|
}
|
|
elseif (preg_match("/iPad/", $this->_ua)) {
|
|
$this->platform = "ipad";
|
|
}
|
|
elseif (preg_match("/Android/", $this->_ua)) {
|
|
$this->platform = "android";
|
|
}
|
|
elseif (preg_match("/Mobile/i", $this->_ua)) {
|
|
$this->platform = "mobile";
|
|
}
|
|
elseif (preg_match("/win/i", $this->_ua)) {
|
|
$this->platform = "win";
|
|
}
|
|
elseif (preg_match("/mac/i", $this->_ua)) {
|
|
$this->platform = "mac";
|
|
}
|
|
elseif (preg_match("/linux/i", $this->_ua)) {
|
|
$this->platform = "linux";
|
|
} else {
|
|
$this->platform = "unknown";
|
|
}
|
|
|
|
return $this->platform;
|
|
}
|
|
|
|
function _checkEngine() {
|
|
switch ($this->name) {
|
|
case 'ie':
|
|
$this->engine = 'trident';
|
|
break;
|
|
case 'firefox':
|
|
$this->engine = 'gecko';
|
|
break;
|
|
case 'android':
|
|
case 'ipad':
|
|
case 'iphone':
|
|
case 'chrome':
|
|
case 'safari':
|
|
$this->engine = 'webkit';
|
|
break;
|
|
case 'opera':
|
|
$this->engine = 'presto';
|
|
break;
|
|
default:
|
|
$this->engine = 'unknown';
|
|
break;
|
|
}
|
|
}
|
|
|
|
function _checkBrowser() {
|
|
// IE
|
|
if (preg_match('/msie/i', $this->_ua) && !preg_match('/opera/i', $this->_ua)) {
|
|
$result = explode(' ', stristr(str_replace(';', ' ', $this->_ua), 'msie'));
|
|
$this->name = 'ie';
|
|
$this->version = $result[1];
|
|
}
|
|
// Firefox
|
|
elseif (preg_match('/Firefox/', $this->_ua)) {
|
|
$result = explode('/', stristr($this->_ua, 'Firefox'));
|
|
$version = explode(' ', $result[1]);
|
|
$this->name = 'firefox';
|
|
$this->version = $version[0];
|
|
}
|
|
// Chrome
|
|
elseif (preg_match('/Chrome/', $this->_ua)) {
|
|
$result = explode('/', stristr($this->_ua, 'Chrome'));
|
|
$version = explode(' ', $result[1]);
|
|
$this->name = 'chrome';
|
|
$this->version = $version[0];
|
|
}
|
|
//Safari
|
|
elseif (preg_match('/Safari/', $this->_ua) && !preg_match('/iPhone/', $this->_ua) && !preg_match('/iPod/', $this->_ua) && !preg_match('/iPad/', $this->_ua)) {
|
|
$result = explode('/', stristr($this->_ua, 'Version'));
|
|
$this->name = 'safari';
|
|
if (isset ($result[1])) {
|
|
$version = explode(' ', $result[1]);
|
|
$this->version = $version[0];
|
|
} else {
|
|
$this->version = 'unknown';
|
|
}
|
|
}
|
|
// Opera
|
|
elseif (preg_match('/opera/i', $this->_ua)) {
|
|
$result = stristr($this->_ua, 'opera');
|
|
|
|
if (preg_match('/\//', $result)) {
|
|
$result = explode('/', $result);
|
|
$version = explode(' ', $result[1]);
|
|
$this->name = 'opera';
|
|
$this->version = $version[0];
|
|
} else {
|
|
$version = explode(' ', stristr($result, 'opera'));
|
|
$this->name = 'opera';
|
|
$this->version = $version[1];
|
|
}
|
|
}
|
|
// iPhone/iPod
|
|
elseif (preg_match('/iPhone/', $this->_ua) || preg_match('/iPod/', $this->_ua)) {
|
|
$result = explode('/', stristr($this->_ua, 'Version'));
|
|
$this->name = 'iphone';
|
|
if (isset ($result[1])) {
|
|
$version = explode(' ', $result[1]);
|
|
$this->version = $version[0];
|
|
} else {
|
|
$this->version = 'unknown';
|
|
}
|
|
}
|
|
// iPad
|
|
elseif (preg_match('/iPad/', $this->_ua)) {
|
|
$result = explode('/', stristr($this->_ua, 'Version'));
|
|
$this->name = 'ipad';
|
|
if (isset ($result[1])) {
|
|
$version = explode(' ', $result[1]);
|
|
$this->version = $version[0];
|
|
} else {
|
|
$this->version = 'unknown';
|
|
}
|
|
}
|
|
// Android
|
|
elseif (preg_match('/Android/', $this->_ua)) {
|
|
$result = explode('/', stristr($this->_ua, 'Version'));
|
|
$this->name = 'android';
|
|
if (isset ($result[1])) {
|
|
$version = explode(' ', $result[1]);
|
|
$this->version = $version[0];
|
|
} else {
|
|
$this->version = "unknown";
|
|
}
|
|
} else {
|
|
$this->name = "unknown";
|
|
$this->version = "unknown";
|
|
}
|
|
}
|
|
|
|
function _createChecks() {
|
|
$this->_checks = array(
|
|
$this->name, // browser check
|
|
$this->platform, // platform check
|
|
$this->engine, // render engine
|
|
$this->name . '-' . $this->platform, // browser + platform check
|
|
$this->name . $this->shortversion, // short browser version check
|
|
$this->name . $this->version, // longbrowser version check
|
|
$this->name . $this->shortversion . '-' . $this->platform, // short browser version + platform check
|
|
$this->name . $this->version . '-' . $this->platform // longbrowser version + platform check
|
|
);
|
|
}
|
|
|
|
function getChecks($file, $keep_path = false) {
|
|
$checkfiles = array();
|
|
$ext = substr($file, strrpos($file, '.'));
|
|
$path = ($keep_path) ? dirname($file) . '/' : '';
|
|
$filename = basename($file, $ext);
|
|
$checkfiles[] = $path . $filename . $ext;
|
|
foreach ($this->_checks as $suffix) {
|
|
$checkfiles[] = $path . $filename . '-' . $suffix . $ext;
|
|
}
|
|
return $checkfiles;
|
|
}
|
|
}
|
|
}
|