New onsite patient portal, take 4.
[openemr.git] / portal / patient / fwk / libs / verysimple / HTTP / BrowserDevice.php
blob3d97adebecaf43eb9e710a921625c99472219e7e
1 <?php
2 /** @package verysimple::HTTP */
4 /**
5 * BrowserDevice represents a device used when browsing (or executing)
6 * the current code.
7 * This is a Singleton pattern, cannot be
8 * instantiated directly.
10 * TODO: this only has minimal support and basically only supplies
11 * information about whether the device is mobile or not, and if so
12 * it supplies the major vendor name.
14 * Usage:
15 * $browser = BrowserDevice::GetInstance();
16 * if ($device->IsMobile()) dosomething();
18 * @package verysimple::HTTP
19 * @author VerySimple Inc.
20 * @copyright 1997-2007 VerySimple, Inc. http://www.verysimple.com
21 * @license http://www.gnu.org/licenses/lgpl.html LGPL
22 * @version 1.0
24 class BrowserDevice {
26 /**
27 * patters to search for devices
29 * @var Array
31 static $DESKTOP_DEVICE_PATTERNS = Array (
32 'AdobeAIR' => 'AdobeAIR',
33 'chrome' => 'google',
34 'firefox' => 'mozilla',
35 'MSIE' => 'microsoft',
36 'safari' => 'apple'
39 /**
40 * patters to search for devices
42 * @var Array
44 static $MOBILE_DEVICE_PATTERNS = Array (
45 '(ipad|ipod|iphone)' => 'apple',
46 'android' => 'android',
47 'opera mini' => 'opera',
48 'blackberry' => 'blackberry',
49 '(pre\/|palm os|palm|hiptop|avantgo|plucker|xiino|blazer|elaine)' => 'palm',
50 '(iris|3g_t|windows ce|opera mobi|windows ce; smartphone;|windows ce; iemobile)' => 'windows',
51 '(mini 9.5|vx1000|lge |m800|e860|u940|ux840|compal|wireless| mobi|ahong|lg380|lgku|lgu900|lg210|lg47|lg920|lg840|lg370|sam-r|mg50|s55|g83|t66|vx400|mk99|d615|d763|el370|sl900|mp500|samu3|samu4|vx10|xda_|samu5|samu6|samu7|samu9|a615|b832|m881|s920|n210|s700|c-810|_h797|mob-x|sk16d|848b|mowser|s580|r800|471x|v120|rim8|c500foma:|160x|x160|480x|x640|t503|w839|i250|sprint|w398samr810|m5252|c7100|mt126|x225|s5330|s820|htil-g1|fly v71|s302|-x113|novarra|k610i|-three|8325rc|8352rc|sanyo|vx54|c888|nx250|n120|mtk |c5588|s710|t880|c5005|i;458x|p404i|s210|c5100|teleca|s940|c500|s590|foma|samsu|vx8|vx9|a1000|_mms|myx|a700|gu1100|bc831|e300|ems100|me701|me702m-three|sd588|s800|8325rc|ac831|mw200|brew |d88|htc\/|htc_touch|355x|m50|km100|d736|p-9521|telco|sl74|ktouch|m4u\/|me702|8325rc|kddi|phone|lg |sonyericsson|samsung|240x|x320|vx10|nokia|sony cmd|motorola|up.browser|up.link|mmp|symbian|smartphone|midp|wap|vodafone|o2|pocket|kindle|mobile|psp|treo)' => 'unknown'
53 private static $instance;
54 public $UserAgent;
55 public $IsWAP;
56 public $IsMobile;
57 public $IsTablet;
58 public $IsConsole;
59 public $Vendor;
60 public $SupportsJS;
61 public $SupportsCSS;
62 public $IsNativeDevice;
63 public $NativeClientVersion;
65 /**
66 * Private constructor enforces the Singleton pattern
68 private function __construct() {
69 // do nothing
72 /**
73 * Parse the user agent and detect the browser, populating
74 * all internal properties accordingly
76 public function Detect() {
77 // RESET DEFAULT VALUES
78 $this->IsWAP = false;
79 $this->IsMobile = false;
80 $this->IsTablet = false;
81 $this->IsConsole = false;
82 $this->Vendor = 'unknown';
83 $this->SupportsJS = true;
84 $this->SupportsCSS = true;
86 $this->UserAgent = isset ( $_SERVER ['HTTP_USER_AGENT'] ) ? $_SERVER ['HTTP_USER_AGENT'] : "";
87 $wap = isset ( $_SERVER ['HTTP_X_WAP_PROFILE'] ) ? $_SERVER ['HTTP_X_WAP_PROFILE'] : "";
89 if (! $this->UserAgent) {
90 $this->IsConsole = true;
91 } else {
92 foreach ( BrowserDevice::$MOBILE_DEVICE_PATTERNS as $key => $val ) {
93 if (preg_match ( '/' . $key . '/i', $this->UserAgent )) {
94 $this->IsMobile = true;
95 $this->Vendor = $val;
96 break;
100 if ($this->IsMobile == false) {
102 foreach ( BrowserDevice::$DESKTOP_DEVICE_PATTERNS as $key => $val ) {
103 if (preg_match ( '/' . $key . '/i', $this->UserAgent )) {
104 $this->Vendor = $val;
105 break;
113 * Returns an instance of a BrowserDevice populated based on the
114 * server variables provided
116 * @return BrowserDevice
118 public static function GetInstance() {
119 if (! isset ( self::$instance )) {
120 $c = __CLASS__;
121 self::$instance = new $c ();
122 self::$instance->Detect ();
125 return self::$instance;