-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathclassMobile.php
More file actions
179 lines (141 loc) · 14 KB
/
Copy pathclassMobile.php
File metadata and controls
179 lines (141 loc) · 14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
<?php
class Mobile {
/**************************************************************************
* Eigenschaften *
**************************************************************************/
var $mobileBrowser;
var $status;
var $forcedLayout;
/**************************************************************************
* Konstruktor und Destruktor *
**************************************************************************/
/**
* @brief Konstruktor
* @param $forcedLayoutExpireTime Cookie-Vorhaltezeit (optional)
*/
function __construct($forcedLayoutExpireTime = 2592000) {
// Pruefen, ob das Anzeigeraet mobil ist:
$this->checkMobile();
// Pruefen, ob der Benutzer ein Layout erzwingen moechte:
$this->checkForcedLayout($forcedLayoutExpireTime);
}
/**************************************************************************
* Methoden *
**************************************************************************/
/**
* @brief Getter-Methode
* @return true, wenn die Seite von einem mobilen Endgeraet aufgerufen
* wurde, false sonst.
*/
function getMobileBrowser() {return $this->mobileBrowser;}
/**
* @brief Getter-Methode
* @return true, wenn die Seite von einem mobilen Endgeraet aufgerufen
* wurde und der Benutzer trotzdem die Desktop-Ansicht wuenscht,
* false sonst.
*/
function getForcedLayout() {return $this->forcedLayout;}
/**************************************************************************
* Hilfsfunktionen *
**************************************************************************/
/**
* @brief Wurde das Layout auf User-Wunsch geaendert?
*/
private function checkForcedLayout($forcedLayoutExpireTime) {
// Standardwert setzen:
$this->forcedLayout = false;
// Abbrechen, wenn kein mobiles Geraet erkannt wurde:
if (!$this->mobileBrowser) return;
$forcedLayout = '';
// Cookie auslesen:
if (isset($_COOKIE['forcedLayout'])){
$forcedLayout = $_COOKIE['forcedLayout'];
}
// Cookie setzen auf User-Wunsch:
if (isset($_GET['forced_layout'])) {
$forcedLayout = ($_GET['forced_layout'] == 'mobile')?'mobile':'desktop';
setcookie('forcedLayout', $forcedLayout, time() + $forcedLayoutExpireTime);
}
// Wurde ein Benutzerwert gesetzt?
$this->forcedLayout = ($forcedLayout != '');
// Auf Desktop umschalten, wenn der Benutzer das wuenscht:
if ($forcedLayout == 'desktop') {
$this->mobileBrowser = false;
}
}
/**
* @brief Pruefen, ob die Seite von einem mobilen Endgeraet aufgeruft wurde.
*/
private function checkMobile() {
// Standardwerte setzen:
$this->mobileBrowser = false;
$this->status = '';
// Server-Variablen auslesen:
$userAgent = $_SERVER['HTTP_USER_AGENT'];
$accept = $_SERVER['HTTP_ACCEPT'];
// Moegliche Werte ueberpruefen:
switch(true) {
// Das Wort "ipad" wurde im User-Agent gefunden:
case (preg_match('/ipad/i', $userAgent));
$this->mobileBrowser = true;
$this->status = 'Apple iPad';
break;
// Die Woerter "iphone" oder "ipod" wurden im User-Agent gefunden:
case (preg_match('/ipod/i', $userAgent) || preg_match('/iphone/i', $userAgent));
$this->mobileBrowser = true;
$this->status = 'Apple';
break;
// Das Wort "android" befindet sich im User-Agent:
case (preg_match('/android/i', $userAgent));
if (preg_match('/mobile/i', $userAgent)) {
$this->mobileBrowser = true;
$this->status = 'Android';
} else {
$this->mobileBrowser = true;
$this->status = 'Android Tab';
}
break;
// Das Wort "opera mini" befindet sich im User-Agent:
case (preg_match('/opera mini/i', $userAgent));
$this->mobileBrowser = true;
$this->status = 'Opera';
break;
// Das Wort "blackberry" befindet sich im User-Agent:
case (preg_match('/blackberry/i', $userAgent));
$this->mobileBrowser = true;
$this->status = 'Blackberry';
break;
// Das Wort "palm os" befindet sich im User-Agent:
case (preg_match('/(pre\/|palm os|palm|hiptop|avantgo|plucker|xiino|blazer|elaine)/i', $userAgent));
$this->mobileBrowser = true;
$this->status = 'Palm';
break;
// Das Wort "windows mobile" befindet sich im User-Agent:
case (preg_match('/(iris|3g_t|windows ce|opera mobi|windows ce; smartphone;|windows ce; iemobile)/i', $userAgent));
$this->mobileBrowser = true;
$this->status = 'Windows Smartphone';
break;
// Sonstige Werte pruefen:
case (preg_match('/(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)/i', $userAgent));
$this->mobileBrowser = true;
$this->status = 'Mobile matched on piped preg_match';
break;
// Enthaelt das Geraet Anzeichen von "text/vnd.wap.wml" oder "application/vnd.wap.xhtml+xml"?
case ((strpos($accept,'text/vnd.wap.wml') > 0) || (strpos($accept, 'application/vnd.wap.xhtml+xml') > 0));
$this->mobileBrowser = true;
$this->status = 'Mobile matched on content accept header';
break;
// Gibt das Geraet einen HTTP_X_WAP_PROFILE oder HTTP_PROFILE Header zurueck?
case (isset($_SERVER['HTTP_X_WAP_PROFILE']) || isset($_SERVER['HTTP_PROFILE']));
$this->mobileBrowser = true;
$this->status = 'Mobile matched on profile headers being set';
break;
// Weitere Werte ueberpruefen;
case (in_array(strtolower(substr($userAgent, 0, 4)), array('1207' => '1207', '3gso' => '3gso', '4thp' => '4thp', '501i' => '501i', '502i' => '502i', '503i' => '503i', '504i' => '504i', '505i' => '505i', '506i' => '506i', '6310' => '6310', '6590' => '6590', '770s' => '770s', '802s' => '802s', 'a wa' => 'a wa', 'acer' => 'acer', 'acs-' => 'acs-', 'airn' => 'airn', 'alav' => 'alav', 'asus' => 'asus', 'attw' => 'attw', 'au-m' => 'au-m', 'aur ' => 'aur ', 'aus ' => 'aus ', 'abac' => 'abac', 'acoo' => 'acoo', 'aiko' => 'aiko', 'alco' => 'alco', 'alca' => 'alca', 'amoi' => 'amoi', 'anex' => 'anex', 'anny' => 'anny', 'anyw' => 'anyw', 'aptu' => 'aptu', 'arch' => 'arch', 'argo' => 'argo', 'bell' => 'bell', 'bird' => 'bird', 'bw-n' => 'bw-n', 'bw-u' => 'bw-u', 'beck' => 'beck', 'benq' => 'benq','bilb' => 'bilb','blac' => 'blac','c55/' => 'c55/','cdm-' => 'cdm-','chtm' => 'chtm','capi' => 'capi','cond' => 'cond','craw' => 'craw','dall' => 'dall','dbte' => 'dbte','dc-s' => 'dc-s','dica' => 'dica','ds-d' => 'ds-d','ds12' => 'ds12','dait' => 'dait','devi' => 'devi','dmob' => 'dmob','doco' => 'doco','dopo' => 'dopo','el49' => 'el49','erk0' => 'erk0','esl8' => 'esl8','ez40' => 'ez40','ez60' => 'ez60','ez70' => 'ez70','ezos' => 'ezos','ezze' => 'ezze','elai' => 'elai','emul' => 'emul','eric' => 'eric','ezwa' => 'ezwa','fake' => 'fake','fly-' => 'fly-','fly_' => 'fly_','g-mo' => 'g-mo','g1 u' => 'g1 u','g560' => 'g560','gf-5' => 'gf-5','grun' => 'grun','gene' => 'gene','go.w' => 'go.w','good' => 'good','grad' => 'grad','hcit' => 'hcit','hd-m' => 'hd-m','hd-p' => 'hd-p','hd-t' => 'hd-t','hei-' => 'hei-','hp i' => 'hp i','hpip' => 'hpip','hs-c' => 'hs-c','htc ' => 'htc ','htc-' => 'htc-','htca' => 'htca','htcg' => 'htcg','htcp' => 'htcp','htcs' => 'htcs','htct' => 'htct','htc_' => 'htc_','haie' => 'haie','hita' => 'hita','huaw' => 'huaw','hutc' => 'hutc','i-20' => 'i-20','i-go' => 'i-go','i-ma' => 'i-ma','i230' => 'i230','iac' => 'iac','iac-' => 'iac-','iac/' => 'iac/','ig01' => 'ig01','im1k' => 'im1k','inno' => 'inno','iris' => 'iris','jata' => 'jata','java' => 'java','kddi' => 'kddi','kgt' => 'kgt','kgt/' => 'kgt/','kpt ' => 'kpt ','kwc-' => 'kwc-','klon' => 'klon','lexi' => 'lexi','lg g' => 'lg g','lg-a' => 'lg-a','lg-b' => 'lg-b','lg-c' => 'lg-c','lg-d' => 'lg-d','lg-f' => 'lg-f','lg-g' => 'lg-g','lg-k' => 'lg-k','lg-l' => 'lg-l','lg-m' => 'lg-m','lg-o' => 'lg-o','lg-p' => 'lg-p','lg-s' => 'lg-s','lg-t' => 'lg-t','lg-u' => 'lg-u','lg-w' => 'lg-w','lg/k' => 'lg/k','lg/l' => 'lg/l','lg/u' => 'lg/u','lg50' => 'lg50','lg54' => 'lg54','lge-' => 'lge-','lge/' => 'lge/','lynx' => 'lynx','leno' => 'leno','m1-w' => 'm1-w','m3ga' => 'm3ga','m50/' => 'm50/','maui' => 'maui','mc01' => 'mc01','mc21' => 'mc21','mcca' => 'mcca','medi' => 'medi','meri' => 'meri','mio8' => 'mio8','mioa' => 'mioa','mo01' => 'mo01','mo02' => 'mo02','mode' => 'mode','modo' => 'modo','mot ' => 'mot ','mot-' => 'mot-','mt50' => 'mt50','mtp1' => 'mtp1','mtv ' => 'mtv ','mate' => 'mate','maxo' => 'maxo','merc' => 'merc','mits' => 'mits','mobi' => 'mobi','motv' => 'motv','mozz' => 'mozz','n100' => 'n100','n101' => 'n101','n102' => 'n102','n202' => 'n202','n203' => 'n203','n300' => 'n300','n302' => 'n302','n500' => 'n500','n502' => 'n502','n505' => 'n505','n700' => 'n700','n701' => 'n701','n710' => 'n710','nec-' => 'nec-','nem-' => 'nem-','newg' => 'newg','neon' => 'neon','netf' => 'netf','noki' => 'noki','nzph' => 'nzph','o2 x' => 'o2 x','o2-x' => 'o2-x','opwv' => 'opwv','owg1' => 'owg1','opti' => 'opti','oran' => 'oran','p800' => 'p800','pand' => 'pand','pg-1' => 'pg-1','pg-2' => 'pg-2','pg-3' => 'pg-3','pg-6' => 'pg-6','pg-8' => 'pg-8','pg-c' => 'pg-c','pg13' => 'pg13','phil' => 'phil','pn-2' => 'pn-2','pt-g' => 'pt-g','palm' => 'palm','pana' => 'pana','pire' => 'pire','pock' => 'pock','pose' => 'pose','psio' => 'psio','qa-a' => 'qa-a','qc-2' => 'qc-2','qc-3' => 'qc-3','qc-5' => 'qc-5','qc-7' => 'qc-7','qc07' => 'qc07','qc12' => 'qc12','qc21' => 'qc21','qc32' => 'qc32','qc60' => 'qc60','qci-' => 'qci-','qwap' => 'qwap','qtek' => 'qtek','r380' => 'r380','r600' => 'r600','raks' => 'raks','rim9' => 'rim9','rove' => 'rove','s55/' => 's55/','sage' => 'sage','sams' => 'sams','sc01' => 'sc01','sch-' => 'sch-','scp-' => 'scp-','sdk/' => 'sdk/','se47' => 'se47','sec-' => 'sec-','sec0' => 'sec0','sec1' => 'sec1','semc' => 'semc','sgh-' => 'sgh-','shar' => 'shar','sie-' => 'sie-','sk-0' => 'sk-0','sl45' => 'sl45','slid' => 'slid','smb3' => 'smb3','smt5' => 'smt5','sp01' => 'sp01','sph-' => 'sph-','spv ' => 'spv ','spv-' => 'spv-','sy01' => 'sy01','samm' => 'samm','sany' => 'sany','sava' => 'sava','scoo' => 'scoo','send' => 'send','siem' => 'siem','smar' => 'smar','smit' => 'smit','soft' => 'soft','sony' => 'sony','t-mo' => 't-mo','t218' => 't218','t250' => 't250','t600' => 't600','t610' => 't610','t618' => 't618','tcl-' => 'tcl-','tdg-' => 'tdg-','telm' => 'telm','tim-' => 'tim-','ts70' => 'ts70','tsm-' => 'tsm-','tsm3' => 'tsm3','tsm5' => 'tsm5','tx-9' => 'tx-9','tagt' => 'tagt','talk' => 'talk','teli' => 'teli','topl' => 'topl','hiba' => 'hiba','up.b' => 'up.b','upg1' => 'upg1','utst' => 'utst','v400' => 'v400','v750' => 'v750','veri' => 'veri','vk-v' => 'vk-v','vk40' => 'vk40','vk50' => 'vk50','vk52' => 'vk52','vk53' => 'vk53','vm40' => 'vm40','vx98' => 'vx98','virg' => 'virg','vite' => 'vite','voda' => 'voda','vulc' => 'vulc','w3c ' => 'w3c ','w3c-' => 'w3c-','wapj' => 'wapj','wapp' => 'wapp','wapu' => 'wapu','wapm' => 'wapm','wig ' => 'wig ','wapi' => 'wapi','wapr' => 'wapr','wapv' => 'wapv','wapy' => 'wapy','wapa' => 'wapa','waps' => 'waps','wapt' => 'wapt','winc' => 'winc','winw' => 'winw','wonu' => 'wonu','x700' => 'x700','xda2' => 'xda2','xdag' => 'xdag','yas-' => 'yas-','your' => 'your','zte-' => 'zte-','zeto' => 'zeto','acs-' => 'acs-','alav' => 'alav','alca' => 'alca','amoi' => 'amoi','aste' => 'aste','audi' => 'audi','avan' => 'avan','benq' => 'benq','bird' => 'bird','blac' => 'blac','blaz' => 'blaz','brew' => 'brew','brvw' => 'brvw','bumb' => 'bumb','ccwa' => 'ccwa','cell' => 'cell','cldc' => 'cldc','cmd-' => 'cmd-','dang' => 'dang','doco' => 'doco','eml2' => 'eml2','eric' => 'eric','fetc' => 'fetc','hipt' => 'hipt','http' => 'http','ibro' => 'ibro','idea' => 'idea','ikom' => 'ikom','inno' => 'inno','ipaq' => 'ipaq','jbro' => 'jbro','jemu' => 'jemu','java' => 'java','jigs' => 'jigs','kddi' => 'kddi','keji' => 'keji','kyoc' => 'kyoc','kyok' => 'kyok','leno' => 'leno','lg-c' => 'lg-c','lg-d' => 'lg-d','lg-g' => 'lg-g','lge-' => 'lge-','libw' => 'libw','m-cr' => 'm-cr','maui' => 'maui','maxo' => 'maxo','midp' => 'midp','mits' => 'mits','mmef' => 'mmef','mobi' => 'mobi','mot-' => 'mot-','moto' => 'moto','mwbp' => 'mwbp','mywa' => 'mywa','nec-' => 'nec-','newt' => 'newt','nok6' => 'nok6','noki' => 'noki','o2im' => 'o2im','opwv' => 'opwv','palm' => 'palm','pana' => 'pana','pant' => 'pant','pdxg' => 'pdxg','phil' => 'phil','play' => 'play','pluc' => 'pluc','port' => 'port','prox' => 'prox','qtek' => 'qtek','qwap' => 'qwap','rozo' => 'rozo','sage' => 'sage','sama' => 'sama','sams' => 'sams','sany' => 'sany','sch-' => 'sch-','sec-' => 'sec-','send' => 'send','seri' => 'seri','sgh-' => 'sgh-','shar' => 'shar','sie-' => 'sie-','siem' => 'siem','smal' => 'smal','smar' => 'smar','sony' => 'sony','sph-' => 'sph-','symb' => 'symb','t-mo' => 't-mo','teli' => 'teli','tim-' => 'tim-','tosh' => 'tosh','treo' => 'treo','tsm-' => 'tsm-','upg1' => 'upg1','upsi' => 'upsi','vk-v' => 'vk-v','voda' => 'voda','vx52' => 'vx52','vx53' => 'vx53','vx60' => 'vx60','vx61' => 'vx61','vx70' => 'vx70','vx80' => 'vx80','vx81' => 'vx81','vx83' => 'vx83','vx85' => 'vx85','wap-' => 'wap-','wapa' => 'wapa','wapi' => 'wapi','wapp' => 'wapp','wapr' => 'wapr','webc' => 'webc','whit' => 'whit','winw' => 'winw','wmlb' => 'wmlb','xda-' => 'xda-')));
$this->mobileBrowser = true;
$this->status = 'Mobile matched on in_array';
break;
}
}
}
?>