PageRenderTime 40ms CodeModel.GetById 11ms RepoModel.GetById 0ms app.codeStats 0ms

/sk.browser.php

https://github.com/bhdouglass/sidekick-php
PHP | 297 lines | 248 code | 32 blank | 17 comment | 96 complexity | 2272070050810b2b3eeca7f9d455adfd MD5 | raw file
Possible License(s): GPL-3.0
  1. <?php
  2. ### BEGIN LICENSE
  3. # Copyright (C) 2012 Brian Douglass
  4. # This program is free software: you can redistribute it and/or modify it
  5. # under the terms of the GNU General Public License version 3, as published
  6. # by the Free Software Foundation.
  7. #
  8. # This program is distributed in the hope that it will be useful, but
  9. # WITHOUT ANY WARRANTY; without even the implied warranties of
  10. # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
  11. # PURPOSE. See the GNU General Public License for more details.
  12. #
  13. # You should have received a copy of the GNU General Public License along
  14. # with this program. If not, see <http://www.gnu.org/licenses/>.
  15. ### END LICENSE
  16. include_once("sk.config.php");
  17. if (isset($sidekick['browser']['autoDetect'])) {
  18. if ($sidekick['browser']['autoDetect']) {
  19. skbrowser::detect();
  20. }
  21. }
  22. class skbrowser {
  23. static private $user_agent = false;
  24. static private $name = false;
  25. static private $engine = false;
  26. static private $version = false;
  27. static private $platform = false;
  28. static private $platform_version = false;
  29. static function user_agent() {
  30. self::detect();
  31. return self::$user_agent;
  32. }
  33. static function name($ua = null) {
  34. self::detect($ua);
  35. return self::$name;
  36. }
  37. static function engine($ua = null) {
  38. self::detect($ua);
  39. return self::$engine;
  40. }
  41. static function version($ua = null) {
  42. self::detect($ua);
  43. return self::$version;
  44. }
  45. static function ver($ua = null) {
  46. return self::version($ua);
  47. }
  48. static function platform($ua = null) {
  49. self::detect($ua);
  50. return self::$platform;
  51. }
  52. static function os($ua = null) {
  53. return self::platform($ua);
  54. }
  55. static function platform_version($ua = null) {
  56. self::detect($ua);
  57. return self::$platform_version;
  58. }
  59. static function os_ver($ua = null) {
  60. return self::platform_version($ua);
  61. }
  62. static function mobile($ua = null) {
  63. self::detect($ua);
  64. return (self::$platform == 'mobile' || self::$platform == 'iphone' ||
  65. self::$platform == 'ipod' || self::$platform == 'android' ||
  66. self::$platform == 'palmos' || self::$platform == 'symbian' ||
  67. self::$platform == 'blackberry');
  68. }
  69. static function win($ua = null) {
  70. self::detect($ua);
  71. return (self::$platform == 'win' || self::$platform == 'windows');
  72. }
  73. static function mac($ua = null) {
  74. self::detect($ua);
  75. return self::$platform == 'mac';
  76. }
  77. static function linux($ua = null) {
  78. self::detect($ua);
  79. return (self::$platform == 'linux' || self::$platform == 'ubuntu');
  80. }
  81. static function ie($ua = null) {
  82. self::detect($ua);
  83. return self::$name == 'ie';
  84. }
  85. static function chrome($ua = null) {
  86. self::detect($ua);
  87. return self::$name == 'chrome';
  88. }
  89. static function firefox($ua = null) {
  90. self::detect($ua);
  91. return self::$name == 'firefox';
  92. }
  93. static function safari($ua = null) {
  94. self::detect($ua);
  95. return self::$name == 'safari';
  96. }
  97. static function opera($ua = null) {
  98. self::detect($ua);
  99. return self::$name == 'opera';
  100. }
  101. static function webkit($ua = null) {
  102. self::detect($ua);
  103. return self::$engine == 'webkit';
  104. }
  105. static function detect($ua = null) {
  106. if ($ua == null) {
  107. $ua = strtolower($_SERVER['HTTP_USER_AGENT']);
  108. }
  109. else {
  110. $ua = strtolower($ua);
  111. }
  112. //don't do the detection twice
  113. if(self::$user_agent == $ua) {
  114. return array(
  115. 'browser' => self::$name,
  116. 'engine' => self::$engine,
  117. 'version' => self::$version,
  118. 'platform' => self::$platform,
  119. 'platform_version' => self::$platform_version
  120. );
  121. }
  122. else {
  123. self::$user_agent = $ua;
  124. }
  125. self::$user_agent = self::$user_agent;
  126. self::$name = false;
  127. self::$engine = false;
  128. self::$version = false;
  129. self::$platform = false;
  130. self::$platform_version = false;
  131. //browser
  132. if(!preg_match('/opera|webtv/i', self::$user_agent) && preg_match('/msie\s(\d)/', self::$user_agent, $tmp)) {
  133. self::$version = $tmp[1];
  134. self::$name = 'ie';
  135. self::$engine = 'trident';
  136. }
  137. else if(strstr(self::$user_agent, 'firefox/3.6')) {
  138. self::$version = 3.6;
  139. self::$name = 'firefox';
  140. self::$engine = 'gecko';
  141. }
  142. else if (strstr(self::$user_agent, 'firefox/3.5')) {
  143. self::$version = 3.5;
  144. self::$name = 'firefox';
  145. self::$engine = 'gecko';
  146. }
  147. else if(preg_match('/firefox\/(\d+)/i', self::$user_agent, $tmp)) {
  148. self::$version = $tmp[1];
  149. self::$name = 'firefox';
  150. self::$engine = 'gecko';
  151. }
  152. else if(preg_match('/opera(\s|\/)(\d+)/', self::$user_agent, $tmp)) {
  153. self::$version = $tmp[2];
  154. self::$engine = 'presto';
  155. self::$name = 'opera';
  156. }
  157. else if(strstr(self::$user_agent, 'konqueror')) {
  158. self::$name = 'konqueror';
  159. self::$engine = 'webkit';
  160. }
  161. else if(strstr(self::$user_agent, 'iron')) {
  162. self::$name = 'iron';
  163. self::$engine = 'webkit';
  164. }
  165. else if(strstr(self::$user_agent, 'chrome')) {
  166. if(preg_match('/chrome\/(\d+)/i', self::$user_agent, $tmp)) {
  167. self::$version = $tmp[1];
  168. }
  169. self::$name = 'chrome';
  170. self::$engine = 'webkit';
  171. }
  172. else if(strstr(self::$user_agent, 'applewebkit/')) {
  173. if(preg_match('/version\/(\d+)/i', self::$user_agent, $tmp)) {
  174. self::$version = $tmp[1];
  175. }
  176. self::$name = 'safari';
  177. self::$engine = 'webkit';
  178. }
  179. else if(strstr(self::$user_agent, 'mozilla/')) {
  180. self::$engine = 'gecko';
  181. self::$name = 'mozilla';
  182. }
  183. //platform
  184. if(strstr(self::$user_agent, 'j2me')) {
  185. self::$platform = 'mobile';
  186. }
  187. else if(strstr(self::$user_agent, 'iphone')) {
  188. self::$platform = 'iphone';
  189. preg_match('/os ([0-9._]+)/i', self::$user_agent, $tmp);
  190. self::$platform_version = str_replace("_", ".", $tmp[1]);
  191. }
  192. else if(strstr(self::$user_agent, 'ipod')) {
  193. self::$platform = 'ipod';
  194. preg_match('/os ([0-9._]+)/i', self::$user_agent, $tmp);
  195. self::$platform_version = str_replace("_", ".", $tmp[1]);
  196. }
  197. else if(strstr(self::$user_agent, 'ipad')) {
  198. self::$platform = 'ipad';
  199. preg_match('/os ([0-9._]+)/i', self::$user_agent, $tmp);
  200. self::$platform_version = str_replace("_", ".", $tmp[1]);
  201. }
  202. else if(strstr(self::$user_agent, 'mac')) {
  203. self::$platform = 'mac';
  204. preg_match('/os x ([0-9._]+)/i', self::$user_agent, $tmp);
  205. self::$platform_version = str_replace("_", ".", $tmp[1]);
  206. }
  207. else if(strstr(self::$user_agent, 'darwin')) {
  208. self::$platform = 'mac';
  209. }
  210. else if(strstr(self::$user_agent, 'webtv')) {
  211. self::$platform = 'webtv';
  212. }
  213. else if(strstr(self::$user_agent, 'win')) {
  214. self::$platform = 'windows';
  215. preg_match('/nt (\d+)/i', self::$user_agent, $tmp);
  216. self::$platform_version = $tmp[1];
  217. if (self::$platform_version == 5.1 ||
  218. self::$platform_version == 5.2) {
  219. self::$platform_version = 'xp';
  220. }
  221. else if (self::$platform_version == 6.0) {
  222. self::$platform_version = 'vista';
  223. }
  224. else if (self::$platform_version == 6.1) {
  225. self::$platform_version = '7';
  226. }
  227. else if (self::$platform_version == 6.2) {
  228. self::$platform_version = '8';
  229. }
  230. }
  231. else if(strstr(self::$user_agent, 'freebsd')) {
  232. self::$platform = 'freebsd';
  233. }
  234. else if (strstr(self::$user_agent, 'palmos')) {
  235. self::$platform = 'palmos';
  236. }
  237. else if (strstr(self::$user_agent, 'symbos') || strstr(self::$user_agent, 'symbianos')) {
  238. self::$platform = 'symbian';
  239. }
  240. else if (strstr(self::$user_agent, 'blackberry')) {
  241. self::$platform = 'blackberry';
  242. }
  243. else if (strstr(self::$user_agent, 'android')) {
  244. self::$platform = 'android';
  245. preg_match('/android ([0-9._]+)/i', self::$user_agent, $tmp);
  246. self::$platform_version = $tmp[1];
  247. }
  248. else if (strstr(self::$user_agent, 'ubuntu')) {
  249. self::$platform = 'ubuntu';
  250. preg_match('/ubuntu\/([0-9._]+)/i', self::$user_agent, $tmp);
  251. self::$platform_version = $tmp[1];
  252. }
  253. else if(strstr(self::$user_agent, 'x11') || strstr(self::$user_agent, 'linux')) {
  254. self::$platform = 'linux';
  255. }
  256. return array(
  257. 'browser' => self::$name,
  258. 'engine' => self::$engine,
  259. 'version' => self::$version,
  260. 'platform' => self::$platform,
  261. 'platform_version' => self::$platform_version
  262. );
  263. }
  264. }
  265. ?>