/sk.browser.php
PHP | 297 lines | 248 code | 32 blank | 17 comment | 96 complexity | 2272070050810b2b3eeca7f9d455adfd MD5 | raw file
Possible License(s): GPL-3.0
- <?php
- ### BEGIN LICENSE
- # Copyright (C) 2012 Brian Douglass
- # This program is free software: you can redistribute it and/or modify it
- # under the terms of the GNU General Public License version 3, as published
- # by the Free Software Foundation.
- #
- # This program is distributed in the hope that it will be useful, but
- # WITHOUT ANY WARRANTY; without even the implied warranties of
- # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
- # PURPOSE. See the GNU General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License along
- # with this program. If not, see <http://www.gnu.org/licenses/>.
- ### END LICENSE
- include_once("sk.config.php");
- if (isset($sidekick['browser']['autoDetect'])) {
- if ($sidekick['browser']['autoDetect']) {
- skbrowser::detect();
- }
- }
- class skbrowser {
- static private $user_agent = false;
- static private $name = false;
- static private $engine = false;
- static private $version = false;
- static private $platform = false;
- static private $platform_version = false;
- static function user_agent() {
- self::detect();
- return self::$user_agent;
- }
- static function name($ua = null) {
- self::detect($ua);
- return self::$name;
- }
- static function engine($ua = null) {
- self::detect($ua);
- return self::$engine;
- }
- static function version($ua = null) {
- self::detect($ua);
- return self::$version;
- }
- static function ver($ua = null) {
- return self::version($ua);
- }
- static function platform($ua = null) {
- self::detect($ua);
- return self::$platform;
- }
- static function os($ua = null) {
- return self::platform($ua);
- }
- static function platform_version($ua = null) {
- self::detect($ua);
- return self::$platform_version;
- }
- static function os_ver($ua = null) {
- return self::platform_version($ua);
- }
- static function mobile($ua = null) {
- self::detect($ua);
- return (self::$platform == 'mobile' || self::$platform == 'iphone' ||
- self::$platform == 'ipod' || self::$platform == 'android' ||
- self::$platform == 'palmos' || self::$platform == 'symbian' ||
- self::$platform == 'blackberry');
- }
- static function win($ua = null) {
- self::detect($ua);
- return (self::$platform == 'win' || self::$platform == 'windows');
- }
- static function mac($ua = null) {
- self::detect($ua);
- return self::$platform == 'mac';
- }
- static function linux($ua = null) {
- self::detect($ua);
- return (self::$platform == 'linux' || self::$platform == 'ubuntu');
- }
- static function ie($ua = null) {
- self::detect($ua);
- return self::$name == 'ie';
- }
- static function chrome($ua = null) {
- self::detect($ua);
- return self::$name == 'chrome';
- }
- static function firefox($ua = null) {
- self::detect($ua);
- return self::$name == 'firefox';
- }
- static function safari($ua = null) {
- self::detect($ua);
- return self::$name == 'safari';
- }
- static function opera($ua = null) {
- self::detect($ua);
- return self::$name == 'opera';
- }
- static function webkit($ua = null) {
- self::detect($ua);
- return self::$engine == 'webkit';
- }
- static function detect($ua = null) {
- if ($ua == null) {
- $ua = strtolower($_SERVER['HTTP_USER_AGENT']);
- }
- else {
- $ua = strtolower($ua);
- }
- //don't do the detection twice
- if(self::$user_agent == $ua) {
- return array(
- 'browser' => self::$name,
- 'engine' => self::$engine,
- 'version' => self::$version,
- 'platform' => self::$platform,
- 'platform_version' => self::$platform_version
- );
- }
- else {
- self::$user_agent = $ua;
- }
- self::$user_agent = self::$user_agent;
- self::$name = false;
- self::$engine = false;
- self::$version = false;
- self::$platform = false;
- self::$platform_version = false;
- //browser
- if(!preg_match('/opera|webtv/i', self::$user_agent) && preg_match('/msie\s(\d)/', self::$user_agent, $tmp)) {
- self::$version = $tmp[1];
- self::$name = 'ie';
- self::$engine = 'trident';
- }
- else if(strstr(self::$user_agent, 'firefox/3.6')) {
- self::$version = 3.6;
- self::$name = 'firefox';
- self::$engine = 'gecko';
- }
- else if (strstr(self::$user_agent, 'firefox/3.5')) {
- self::$version = 3.5;
- self::$name = 'firefox';
- self::$engine = 'gecko';
- }
- else if(preg_match('/firefox\/(\d+)/i', self::$user_agent, $tmp)) {
- self::$version = $tmp[1];
- self::$name = 'firefox';
- self::$engine = 'gecko';
- }
- else if(preg_match('/opera(\s|\/)(\d+)/', self::$user_agent, $tmp)) {
- self::$version = $tmp[2];
- self::$engine = 'presto';
- self::$name = 'opera';
- }
- else if(strstr(self::$user_agent, 'konqueror')) {
- self::$name = 'konqueror';
- self::$engine = 'webkit';
- }
- else if(strstr(self::$user_agent, 'iron')) {
- self::$name = 'iron';
- self::$engine = 'webkit';
- }
- else if(strstr(self::$user_agent, 'chrome')) {
- if(preg_match('/chrome\/(\d+)/i', self::$user_agent, $tmp)) {
- self::$version = $tmp[1];
- }
- self::$name = 'chrome';
- self::$engine = 'webkit';
- }
- else if(strstr(self::$user_agent, 'applewebkit/')) {
- if(preg_match('/version\/(\d+)/i', self::$user_agent, $tmp)) {
- self::$version = $tmp[1];
- }
- self::$name = 'safari';
- self::$engine = 'webkit';
- }
- else if(strstr(self::$user_agent, 'mozilla/')) {
- self::$engine = 'gecko';
- self::$name = 'mozilla';
- }
- //platform
- if(strstr(self::$user_agent, 'j2me')) {
- self::$platform = 'mobile';
- }
- else if(strstr(self::$user_agent, 'iphone')) {
- self::$platform = 'iphone';
- preg_match('/os ([0-9._]+)/i', self::$user_agent, $tmp);
- self::$platform_version = str_replace("_", ".", $tmp[1]);
- }
- else if(strstr(self::$user_agent, 'ipod')) {
- self::$platform = 'ipod';
- preg_match('/os ([0-9._]+)/i', self::$user_agent, $tmp);
- self::$platform_version = str_replace("_", ".", $tmp[1]);
- }
- else if(strstr(self::$user_agent, 'ipad')) {
- self::$platform = 'ipad';
- preg_match('/os ([0-9._]+)/i', self::$user_agent, $tmp);
- self::$platform_version = str_replace("_", ".", $tmp[1]);
- }
- else if(strstr(self::$user_agent, 'mac')) {
- self::$platform = 'mac';
- preg_match('/os x ([0-9._]+)/i', self::$user_agent, $tmp);
- self::$platform_version = str_replace("_", ".", $tmp[1]);
- }
- else if(strstr(self::$user_agent, 'darwin')) {
- self::$platform = 'mac';
- }
- else if(strstr(self::$user_agent, 'webtv')) {
- self::$platform = 'webtv';
- }
- else if(strstr(self::$user_agent, 'win')) {
- self::$platform = 'windows';
- preg_match('/nt (\d+)/i', self::$user_agent, $tmp);
- self::$platform_version = $tmp[1];
- if (self::$platform_version == 5.1 ||
- self::$platform_version == 5.2) {
- self::$platform_version = 'xp';
- }
- else if (self::$platform_version == 6.0) {
- self::$platform_version = 'vista';
- }
- else if (self::$platform_version == 6.1) {
- self::$platform_version = '7';
- }
- else if (self::$platform_version == 6.2) {
- self::$platform_version = '8';
- }
- }
- else if(strstr(self::$user_agent, 'freebsd')) {
- self::$platform = 'freebsd';
- }
- else if (strstr(self::$user_agent, 'palmos')) {
- self::$platform = 'palmos';
- }
- else if (strstr(self::$user_agent, 'symbos') || strstr(self::$user_agent, 'symbianos')) {
- self::$platform = 'symbian';
- }
- else if (strstr(self::$user_agent, 'blackberry')) {
- self::$platform = 'blackberry';
- }
- else if (strstr(self::$user_agent, 'android')) {
- self::$platform = 'android';
- preg_match('/android ([0-9._]+)/i', self::$user_agent, $tmp);
- self::$platform_version = $tmp[1];
- }
- else if (strstr(self::$user_agent, 'ubuntu')) {
- self::$platform = 'ubuntu';
- preg_match('/ubuntu\/([0-9._]+)/i', self::$user_agent, $tmp);
- self::$platform_version = $tmp[1];
- }
- else if(strstr(self::$user_agent, 'x11') || strstr(self::$user_agent, 'linux')) {
- self::$platform = 'linux';
- }
- return array(
- 'browser' => self::$name,
- 'engine' => self::$engine,
- 'version' => self::$version,
- 'platform' => self::$platform,
- 'platform_version' => self::$platform_version
- );
- }
- }
- ?>