PageRenderTime 51ms CodeModel.GetById 25ms RepoModel.GetById 0ms app.codeStats 0ms

/inc/popoon/classes/browser.php

https://github.com/chregu/fluxcms
PHP | 257 lines | 201 code | 45 blank | 11 comment | 39 complexity | 5f57a7eef076540d8b833ec902b29f8d MD5 | raw file
Possible License(s): GPL-2.0, BSD-3-Clause, Apache-2.0, LGPL-2.1
  1. <?php
  2. class popoon_classes_browser {
  3. static private $BrowserName = "Unknown";
  4. static private $BrowserSubName = "None";
  5. static private $Version = "Unknown";
  6. static private $Platform = "Unknown";
  7. static private $UserAgent = "Not reported";
  8. static private $isMobile = null;
  9. static private $initialized = false;
  10. static private $parsed = false;
  11. private function __construct() {}
  12. static function init() {
  13. if (!self::$initialized) {
  14. if (isset( $_SERVER['HTTP_USER_AGENT'])) {
  15. self::$UserAgent = $_SERVER['HTTP_USER_AGENT'];
  16. }
  17. self::$initialized = true;
  18. }
  19. }
  20. static function isMozilla() {
  21. return( self::getName() == "mozilla");
  22. }
  23. static function isMozillaAndHasMidas() {
  24. if (self::getName() == "mozilla") {
  25. if (stripos(self::$UserAgent,"camino/0.8.")) {
  26. return false;
  27. } else {
  28. return true;
  29. }
  30. }
  31. return false;
  32. }
  33. static function hasContentEditable() {
  34. return (self::isMozillaAndHasMidas() || self::isMSIEWin());
  35. }
  36. static function hasBadCss() {
  37. self::init();
  38. $name = self::getName();
  39. $version = self::getVersion();
  40. if ($name == "opera" && $version < 8) {
  41. return true;
  42. }
  43. if ($name == "mozilla" && $version < 5) {
  44. return true;
  45. }
  46. return false;
  47. }
  48. static function isPalm() {
  49. return (self::getPlatform()=="palm");
  50. }
  51. static function isMobile() {
  52. // creating the WURFL object
  53. if (self::$isMobile === null) {
  54. require_once(BX_INCLUDE_DIR.'/wurfl_config.php');
  55. require_once(BX_INCLUDE_DIR.'/wurfl_class.php');
  56. $myDevice = new wurfl_class($wurfl, $wurfl_agents);
  57. $myDevice->GetDeviceCapabilitiesFromAgent($_SERVER["HTTP_USER_AGENT"]);
  58. if($myDevice->capabilities['xhtml_ui']['html_wi_w3_xhtmlbasic']){
  59. self::$isMobile = true;
  60. }
  61. else{
  62. self::$isMobile = false;
  63. }
  64. }
  65. return self::$isMobile;
  66. }
  67. static function supportedByFCK() {
  68. return (self::isMozilla() || self::isMSIEWin() || self::isSafari3() || self::isOpera95());
  69. }
  70. static function isMSIEWin() {
  71. return( self::getName() == "msie" && self::getPlatform()=="windows");
  72. }
  73. static function isSafari() {
  74. return( self::getName() == "safari" );
  75. }
  76. static function isSafari3() {
  77. return( self::getName() == "safari" && self::getVersion() >= 3);
  78. }
  79. static function isOpera8() {
  80. return( self::getName() == "opera" && self::getVersion() >= 8);
  81. }
  82. static function isOpera95() {
  83. return( self::getName() == "opera" && self::getVersion() >= 9.5);
  84. }
  85. static function isKonqueror34() {
  86. return( self::getName() == "konqueror" && self::getVersion() >= 3.4);
  87. }
  88. static function getName() {
  89. self::parse();
  90. return self::$BrowserName;
  91. }
  92. static function getSubName() {
  93. self::parse();
  94. return self::$BrowserSubName;
  95. }
  96. static function getVersion() {
  97. self::parse();
  98. return self::$Version;
  99. }
  100. static function getPlatform() {
  101. self::parse();
  102. return self::$Platform;
  103. }
  104. static function getAgent() {
  105. self::init();
  106. return self::$UserAgent;
  107. }
  108. static function parse(){
  109. if (!self::$parsed) {
  110. self::init();
  111. $agent = self::$UserAgent;
  112. // initialize properties
  113. $bd['platform'] = "Unknown";
  114. $bd['browser'] = "Unknown";
  115. $bd['version'] = "Unknown";
  116. // find operating system
  117. $OSs = array(
  118. 'win' => 'windows',
  119. 'mac' => 'macintosh',
  120. 'linux' => 'linux',
  121. 'os/2' => 'os/2',
  122. 'beos' => 'beos',
  123. 'palm' => 'palm',
  124. );
  125. foreach ($OSs as $OS => $OSname) {
  126. if (stripos($agent, $OS) !== false) {
  127. $bd['platform'] = $OSname;
  128. break;
  129. }
  130. }
  131. // test for Opera
  132. if ($val = stristr($agent, "opera")) {
  133. if (stripos($val, '/') !== false) {
  134. $val = explode("/",$val);
  135. $bd['browser'] = $val[0];
  136. $val = explode(" ",$val[1]);
  137. $bd['version'] = $val[0];
  138. }else{
  139. $val = explode(" ",stristr($val,"opera"));
  140. $bd['browser'] = $val[0];
  141. $bd['version'] = $val[1];
  142. }
  143. // test for WebTV
  144. }elseif(stripos($agent, 'msie') !== false){
  145. $val = explode(" ",stristr($agent,"msie"));
  146. $bd['browser'] = $val[0];
  147. $bd['version'] = $val[1];
  148. }elseif(stripos($agent, 'galeon') !== false){
  149. $val = explode(" ",stristr($agent,"galeon"));
  150. $val = explode("/",$val[0]);
  151. $bd['browser'] = "Mozilla";
  152. $bd['version'] = $val[1];
  153. $bd['subbrowser']=$val[0];
  154. // test for Konqueror
  155. }elseif(stripos($agent, 'konqueror') !== false){
  156. $val = explode(" ",stristr($agent,"Konqueror"));
  157. $val = explode("/",$val[0]);
  158. $bd['browser'] = $val[0];
  159. $bd['version'] = $val[1];
  160. }elseif(stripos($agent, 'firebird') !== false){
  161. $bd['browser']="Mozilla";
  162. $bd['subbrowser']="Firefox";
  163. $val = stristr($agent, "Firebird");
  164. $val = explode("/",$val);
  165. $bd['version'] = $val[1];
  166. // test for Firefox
  167. }elseif(stripos($agent, 'firefox') !== false){
  168. $bd['browser']="Mozilla";
  169. $bd['subbrowser'] = "Firefox";
  170. $val = stristr($agent, "Firefox");
  171. $val = explode("/",$val);
  172. $bd['version'] = $val[1];
  173. }elseif(stripos($agent, 'mozilla') !== false && preg_match('/rv:[0-9]\.[0-9]/i', $agent) && stripos($agent, 'netscape' === false)){
  174. $bd['browser'] = "Mozilla";
  175. $bd['subbrowser'] = "Mozilla";
  176. $val = explode(" ",stristr($agent,"rv:"));
  177. preg_match('/rv:[0-9]\.[0-9]\.[0-9]/i',$agent, $val);
  178. $bd['version'] = str_replace("rv:","",$val[0]);
  179. }elseif(stripos($agent, 'safari') !== false){
  180. $bd['browser'] = "Safari";
  181. $val = substr($agent,strpos($agent,"Safari/") + 7);
  182. $bd['version'] = $val;
  183. // remaining two tests are for Netscape
  184. }elseif(stripos($agent, 'netscape') !== false){
  185. $val = explode(" ",stristr($agent,"netscape"));
  186. $val = explode("/",$val[0]);
  187. $bd['browser'] = $val[0];
  188. $bd['version'] = $val[1];
  189. }elseif(stripos($agent, 'mozilla') !== false && !preg_match('/rv:[0-9]\.[0-9]\.[0-9]/i', $agent)){
  190. $val = explode(" ",stristr($agent,"mozilla"));
  191. $val = explode("/",$val[0]);
  192. $bd['browser'] = "Mozilla";
  193. $bd['subbrowser'] = "Netscape";
  194. if (isset($val[1])) {
  195. $bd['version'] = $val[1];
  196. }
  197. }
  198. // clean up extraneous garbage that may be in the name
  199. $bd['browser'] = preg_replace('/[^a-zA-Z]/', '', $bd['browser']);
  200. // clean up extraneous garbage that may be in the version
  201. $bd['version'] = preg_replace('/[^0-9.a-zA-Z]/', '', $bd['version']);
  202. // finally assign our properties
  203. self::$BrowserName = strtolower($bd['browser']);
  204. if (isset($bd['subbrowser'])) {
  205. self::$BrowserSubName = strtolower($bd['subbrowser']);
  206. }
  207. self::$Version = $bd['version'];
  208. self::$Platform = $bd['platform'];
  209. self::$parsed = true;
  210. }
  211. }
  212. }