Changeset 2033061
- Timestamp:
- 02/18/2019 09:15:28 AM (7 years ago)
- Location:
- mobile-redirect-plus-lite/trunk
- Files:
-
- 3 added
- 6 edited
-
includes/Mobile_Detect.php (modified) (39 diffs)
-
includes/images/banner.jpg (modified) (previous)
-
includes/images/banner2.jpg (modified) (previous)
-
includes/mobile-plus-redirect-lite.css (added)
-
includes/mobile-plus-redirect-lite.js (added)
-
includes/settings.php (modified) (4 diffs)
-
languages (added)
-
mobi.php (modified) (2 diffs)
-
readme.txt (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
mobile-redirect-plus-lite/trunk/includes/Mobile_Detect.php
r1184365 r2033061 2 2 /** 3 3 * Mobile Detect Library 4 * =====================5 *6 4 * Motto: "Every business should have a mobile detection script to detect mobile readers" 7 5 * … … 9 7 * It uses the User-Agent string combined with specific HTTP headers to detect the mobile environment. 10 8 * 11 * @author Current authors: Serban Ghita <serbanghita@gmail.com> 12 * Nick Ilyin <nick.ilyin@gmail.com> 9 * Homepage: http://mobiledetect.net 10 * GitHub: https://github.com/serbanghita/Mobile-Detect 11 * README: https://github.com/serbanghita/Mobile-Detect/blob/master/README.md 12 * CONTRIBUTING: https://github.com/serbanghita/Mobile-Detect/blob/master/docs/CONTRIBUTING.md 13 * KNOWN LIMITATIONS: https://github.com/serbanghita/Mobile-Detect/blob/master/docs/KNOWN_LIMITATIONS.md 14 * EXAMPLES: https://github.com/serbanghita/Mobile-Detect/wiki/Code-examples 13 15 * 14 * Original author: Victor Stanciu <vic.stanciu@gmail.com> 16 * @license https://github.com/serbanghita/Mobile-Detect/blob/master/LICENSE.txt MIT License 17 * @author Serban Ghita <serbanghita@gmail.com> 18 * @author Nick Ilyin <nick.ilyin@gmail.com> 19 * Original author: Victor Stanciu <vic.stanciu@gmail.com> 15 20 * 16 * @license Code and contributions have 'MIT License' 17 * More details: https://github.com/serbanghita/Mobile-Detect/blob/master/LICENSE.txt 18 * 19 * @link Homepage: http://mobiledetect.net 20 * GitHub Repo: https://github.com/serbanghita/Mobile-Detect 21 * Google Code: http://code.google.com/p/php-mobile-detect/ 22 * README: https://github.com/serbanghita/Mobile-Detect/blob/master/README.md 23 * HOWTO: https://github.com/serbanghita/Mobile-Detect/wiki/Code-examples 24 * 25 * @version 2.8.15 21 * @version 2.8.33 26 22 */ 27 28 23 class Mobile_Detect_Plus_Lite 29 24 { … … 67 62 * Stores the version number of the current release. 68 63 */ 69 const VERSION = '2.8. 15';64 const VERSION = '2.8.33'; 70 65 71 66 /** … … 113 108 * The matches extracted from the regex expression. 114 109 * This is good for debug. 110 * 115 111 * @var string 116 112 */ … … 170 166 'iPhone' => '\biPhone\b|\biPod\b', // |\biTunes 171 167 'BlackBerry' => 'BlackBerry|\bBB10\b|rim[0-9]+', 172 'HTC' => 'HTC|HTC.*(Sensation|Evo|Vision|Explorer|6800|8100|8900|A7272|S510e|C110e|Legend|Desire|T8282)|APX515CKT|Qtek9090|APA9292KT|HD_mini|Sensation.*Z710e|PG86100|Z715e|Desire.*(A8181|HD)|ADR6200|ADR6400L|ADR6425|001HT|Inspire 4G|Android.*\bEVO\b|T-Mobile G1|Z520m ',168 'HTC' => 'HTC|HTC.*(Sensation|Evo|Vision|Explorer|6800|8100|8900|A7272|S510e|C110e|Legend|Desire|T8282)|APX515CKT|Qtek9090|APA9292KT|HD_mini|Sensation.*Z710e|PG86100|Z715e|Desire.*(A8181|HD)|ADR6200|ADR6400L|ADR6425|001HT|Inspire 4G|Android.*\bEVO\b|T-Mobile G1|Z520m|Android [0-9.]+; Pixel', 173 169 'Nexus' => 'Nexus One|Nexus S|Galaxy.*Nexus|Android.*Nexus.*Mobile|Nexus 4|Nexus 5|Nexus 6', 174 170 // @todo: Is 'Dell Streak' a tablet or a phone? ;) 175 'Dell' => 'Dell .*Streak|Dell.*Aero|Dell.*Venue|DELL.*Venue Pro|Dell Flash|Dell Smoke|Dell Mini 3iX|XCD28|XCD35|\b001DL\b|\b101DL\b|\bGS01\b',176 'Motorola' => 'Motorola|DROIDX|DROID BIONIC|\bDroid\b.*Build|Android.*Xoom|HRI39|MOT-|A1260|A1680|A555|A853|A855|A953|A955|A956|Motorola.*ELECTRIFY|Motorola.*i1|i867|i940|MB200|MB300|MB501|MB502|MB508|MB511|MB520|MB525|MB526|MB611|MB612|MB632|MB810|MB855|MB860|MB861|MB865|MB870|ME501|ME502|ME511|ME525|ME600|ME632|ME722|ME811|ME860|ME863|ME865|MT620|MT710|MT716|MT720|MT810|MT870|MT917|Motorola.*TITANIUM|WX435|WX445|XT300|XT301|XT311|XT316|XT317|XT319|XT320|XT390|XT502|XT530|XT531|XT532|XT535|XT603|XT610|XT611|XT615|XT681|XT701|XT702|XT711|XT720|XT800|XT806|XT860|XT862|XT875|XT882|XT883|XT894|XT901|XT907|XT909|XT910|XT912|XT928|XT926|XT915|XT919|XT925|XT1021|\bMoto E\b ',177 'Samsung' => ' Samsung|SM-G9250|GT-19300|SGH-I337|BGT-S5230|GT-B2100|GT-B2700|GT-B2710|GT-B3210|GT-B3310|GT-B3410|GT-B3730|GT-B3740|GT-B5510|GT-B5512|GT-B5722|GT-B6520|GT-B7300|GT-B7320|GT-B7330|GT-B7350|GT-B7510|GT-B7722|GT-B7800|GT-C3010|GT-C3011|GT-C3060|GT-C3200|GT-C3212|GT-C3212I|GT-C3262|GT-C3222|GT-C3300|GT-C3300K|GT-C3303|GT-C3303K|GT-C3310|GT-C3322|GT-C3330|GT-C3350|GT-C3500|GT-C3510|GT-C3530|GT-C3630|GT-C3780|GT-C5010|GT-C5212|GT-C6620|GT-C6625|GT-C6712|GT-E1050|GT-E1070|GT-E1075|GT-E1080|GT-E1081|GT-E1085|GT-E1087|GT-E1100|GT-E1107|GT-E1110|GT-E1120|GT-E1125|GT-E1130|GT-E1160|GT-E1170|GT-E1175|GT-E1180|GT-E1182|GT-E1200|GT-E1210|GT-E1225|GT-E1230|GT-E1390|GT-E2100|GT-E2120|GT-E2121|GT-E2152|GT-E2220|GT-E2222|GT-E2230|GT-E2232|GT-E2250|GT-E2370|GT-E2550|GT-E2652|GT-E3210|GT-E3213|GT-I5500|GT-I5503|GT-I5700|GT-I5800|GT-I5801|GT-I6410|GT-I6420|GT-I7110|GT-I7410|GT-I7500|GT-I8000|GT-I8150|GT-I8160|GT-I8190|GT-I8320|GT-I8330|GT-I8350|GT-I8530|GT-I8700|GT-I8703|GT-I8910|GT-I9000|GT-I9001|GT-I9003|GT-I9010|GT-I9020|GT-I9023|GT-I9070|GT-I9082|GT-I9100|GT-I9103|GT-I9220|GT-I9250|GT-I9300|GT-I9305|GT-I9500|GT-I9505|GT-M3510|GT-M5650|GT-M7500|GT-M7600|GT-M7603|GT-M8800|GT-M8910|GT-N7000|GT-S3110|GT-S3310|GT-S3350|GT-S3353|GT-S3370|GT-S3650|GT-S3653|GT-S3770|GT-S3850|GT-S5210|GT-S5220|GT-S5229|GT-S5230|GT-S5233|GT-S5250|GT-S5253|GT-S5260|GT-S5263|GT-S5270|GT-S5300|GT-S5330|GT-S5350|GT-S5360|GT-S5363|GT-S5369|GT-S5380|GT-S5380D|GT-S5560|GT-S5570|GT-S5600|GT-S5603|GT-S5610|GT-S5620|GT-S5660|GT-S5670|GT-S5690|GT-S5750|GT-S5780|GT-S5830|GT-S5839|GT-S6102|GT-S6500|GT-S7070|GT-S7200|GT-S7220|GT-S7230|GT-S7233|GT-S7250|GT-S7500|GT-S7530|GT-S7550|GT-S7562|GT-S7710|GT-S8000|GT-S8003|GT-S8500|GT-S8530|GT-S8600|SCH-A310|SCH-A530|SCH-A570|SCH-A610|SCH-A630|SCH-A650|SCH-A790|SCH-A795|SCH-A850|SCH-A870|SCH-A890|SCH-A930|SCH-A950|SCH-A970|SCH-A990|SCH-I100|SCH-I110|SCH-I400|SCH-I405|SCH-I500|SCH-I510|SCH-I515|SCH-I600|SCH-I730|SCH-I760|SCH-I770|SCH-I830|SCH-I910|SCH-I920|SCH-I959|SCH-LC11|SCH-N150|SCH-N300|SCH-R100|SCH-R300|SCH-R351|SCH-R400|SCH-R410|SCH-T300|SCH-U310|SCH-U320|SCH-U350|SCH-U360|SCH-U365|SCH-U370|SCH-U380|SCH-U410|SCH-U430|SCH-U450|SCH-U460|SCH-U470|SCH-U490|SCH-U540|SCH-U550|SCH-U620|SCH-U640|SCH-U650|SCH-U660|SCH-U700|SCH-U740|SCH-U750|SCH-U810|SCH-U820|SCH-U900|SCH-U940|SCH-U960|SCS-26UC|SGH-A107|SGH-A117|SGH-A127|SGH-A137|SGH-A157|SGH-A167|SGH-A177|SGH-A187|SGH-A197|SGH-A227|SGH-A237|SGH-A257|SGH-A437|SGH-A517|SGH-A597|SGH-A637|SGH-A657|SGH-A667|SGH-A687|SGH-A697|SGH-A707|SGH-A717|SGH-A727|SGH-A737|SGH-A747|SGH-A767|SGH-A777|SGH-A797|SGH-A817|SGH-A827|SGH-A837|SGH-A847|SGH-A867|SGH-A877|SGH-A887|SGH-A897|SGH-A927|SGH-B100|SGH-B130|SGH-B200|SGH-B220|SGH-C100|SGH-C110|SGH-C120|SGH-C130|SGH-C140|SGH-C160|SGH-C170|SGH-C180|SGH-C200|SGH-C207|SGH-C210|SGH-C225|SGH-C230|SGH-C417|SGH-C450|SGH-D307|SGH-D347|SGH-D357|SGH-D407|SGH-D415|SGH-D780|SGH-D807|SGH-D980|SGH-E105|SGH-E200|SGH-E315|SGH-E316|SGH-E317|SGH-E335|SGH-E590|SGH-E635|SGH-E715|SGH-E890|SGH-F300|SGH-F480|SGH-I200|SGH-I300|SGH-I320|SGH-I550|SGH-I577|SGH-I600|SGH-I607|SGH-I617|SGH-I627|SGH-I637|SGH-I677|SGH-I700|SGH-I717|SGH-I727|SGH-i747M|SGH-I777|SGH-I780|SGH-I827|SGH-I847|SGH-I857|SGH-I896|SGH-I897|SGH-I900|SGH-I907|SGH-I917|SGH-I927|SGH-I937|SGH-I997|SGH-J150|SGH-J200|SGH-L170|SGH-L700|SGH-M110|SGH-M150|SGH-M200|SGH-N105|SGH-N500|SGH-N600|SGH-N620|SGH-N625|SGH-N700|SGH-N710|SGH-P107|SGH-P207|SGH-P300|SGH-P310|SGH-P520|SGH-P735|SGH-P777|SGH-Q105|SGH-R210|SGH-R220|SGH-R225|SGH-S105|SGH-S307|SGH-T109|SGH-T119|SGH-T139|SGH-T209|SGH-T219|SGH-T229|SGH-T239|SGH-T249|SGH-T259|SGH-T309|SGH-T319|SGH-T329|SGH-T339|SGH-T349|SGH-T359|SGH-T369|SGH-T379|SGH-T409|SGH-T429|SGH-T439|SGH-T459|SGH-T469|SGH-T479|SGH-T499|SGH-T509|SGH-T519|SGH-T539|SGH-T559|SGH-T589|SGH-T609|SGH-T619|SGH-T629|SGH-T639|SGH-T659|SGH-T669|SGH-T679|SGH-T709|SGH-T719|SGH-T729|SGH-T739|SGH-T746|SGH-T749|SGH-T759|SGH-T769|SGH-T809|SGH-T819|SGH-T839|SGH-T919|SGH-T929|SGH-T939|SGH-T959|SGH-T989|SGH-U100|SGH-U200|SGH-U800|SGH-V205|SGH-V206|SGH-X100|SGH-X105|SGH-X120|SGH-X140|SGH-X426|SGH-X427|SGH-X475|SGH-X495|SGH-X497|SGH-X507|SGH-X600|SGH-X610|SGH-X620|SGH-X630|SGH-X700|SGH-X820|SGH-X890|SGH-Z130|SGH-Z150|SGH-Z170|SGH-ZX10|SGH-ZX20|SHW-M110|SPH-A120|SPH-A400|SPH-A420|SPH-A460|SPH-A500|SPH-A560|SPH-A600|SPH-A620|SPH-A660|SPH-A700|SPH-A740|SPH-A760|SPH-A790|SPH-A800|SPH-A820|SPH-A840|SPH-A880|SPH-A900|SPH-A940|SPH-A960|SPH-D600|SPH-D700|SPH-D710|SPH-D720|SPH-I300|SPH-I325|SPH-I330|SPH-I350|SPH-I500|SPH-I600|SPH-I700|SPH-L700|SPH-M100|SPH-M220|SPH-M240|SPH-M300|SPH-M305|SPH-M320|SPH-M330|SPH-M350|SPH-M360|SPH-M370|SPH-M380|SPH-M510|SPH-M540|SPH-M550|SPH-M560|SPH-M570|SPH-M580|SPH-M610|SPH-M620|SPH-M630|SPH-M800|SPH-M810|SPH-M850|SPH-M900|SPH-M910|SPH-M920|SPH-M930|SPH-N100|SPH-N200|SPH-N240|SPH-N300|SPH-N400|SPH-Z400|SWC-E100|SCH-i909|GT-N7100|GT-N7105|SCH-I535|SM-N900A|SGH-I317|SGH-T999L|GT-S5360B|GT-I8262|GT-S6802|GT-S6312|GT-S6310|GT-S5312|GT-S5310|GT-I9105|GT-I8510|GT-S6790N|SM-G7105|SM-N9005|GT-S5301|GT-I9295|GT-I9195|SM-C101|GT-S7392|GT-S7560|GT-B7610|GT-I5510|GT-S7582|GT-S7530E|GT-I8750|SM-G9006V|SM-G9008V|SM-G9009D|SM-G900A|SM-G900D|SM-G900F|SM-G900H|SM-G900I|SM-G900J|SM-G900K|SM-G900L|SM-G900M|SM-G900P|SM-G900R4|SM-G900S|SM-G900T|SM-G900V|SM-G900W8|SHV-E160K|SCH-P709|SCH-P729|SM-T2558|GT-I9205',178 'LG' => '\bLG\b;|LG[- ]?(C800|C900|E400|E610|E900|E-900|F160|F180K|F180L|F180S|730|855|L160|LS740|LS840|LS970|LU6200|MS690|MS695|MS770|MS840|MS870|MS910|P500|P700|P705|VM696|AS680|AS695|AX840|C729|E970|GS505|272|C395|E739BK|E960|L55C|L75C|LS696|LS860|P769BK|P350|P500|P509|P870|UN272|US730|VS840|VS950|LN272|LN510|LS670|LS855|LW690|MN270|MN510|P509|P769|P930|UN200|UN270|UN510|UN610|US670|US740|US760|UX265|UX840|VN271|VN530|VS660|VS700|VS740|VS750|VS910|VS920|VS930|VX9200|VX11000|AX840A|LW770|P506|P925|P999|E612|D955|D802 )',171 'Dell' => 'Dell[;]? (Streak|Aero|Venue|Venue Pro|Flash|Smoke|Mini 3iX)|XCD28|XCD35|\b001DL\b|\b101DL\b|\bGS01\b', 172 'Motorola' => 'Motorola|DROIDX|DROID BIONIC|\bDroid\b.*Build|Android.*Xoom|HRI39|MOT-|A1260|A1680|A555|A853|A855|A953|A955|A956|Motorola.*ELECTRIFY|Motorola.*i1|i867|i940|MB200|MB300|MB501|MB502|MB508|MB511|MB520|MB525|MB526|MB611|MB612|MB632|MB810|MB855|MB860|MB861|MB865|MB870|ME501|ME502|ME511|ME525|ME600|ME632|ME722|ME811|ME860|ME863|ME865|MT620|MT710|MT716|MT720|MT810|MT870|MT917|Motorola.*TITANIUM|WX435|WX445|XT300|XT301|XT311|XT316|XT317|XT319|XT320|XT390|XT502|XT530|XT531|XT532|XT535|XT603|XT610|XT611|XT615|XT681|XT701|XT702|XT711|XT720|XT800|XT806|XT860|XT862|XT875|XT882|XT883|XT894|XT901|XT907|XT909|XT910|XT912|XT928|XT926|XT915|XT919|XT925|XT1021|\bMoto E\b|XT1068|XT1092|XT1052', 173 'Samsung' => '\bSamsung\b|SM-G950F|SM-G955F|SM-G9250|GT-19300|SGH-I337|BGT-S5230|GT-B2100|GT-B2700|GT-B2710|GT-B3210|GT-B3310|GT-B3410|GT-B3730|GT-B3740|GT-B5510|GT-B5512|GT-B5722|GT-B6520|GT-B7300|GT-B7320|GT-B7330|GT-B7350|GT-B7510|GT-B7722|GT-B7800|GT-C3010|GT-C3011|GT-C3060|GT-C3200|GT-C3212|GT-C3212I|GT-C3262|GT-C3222|GT-C3300|GT-C3300K|GT-C3303|GT-C3303K|GT-C3310|GT-C3322|GT-C3330|GT-C3350|GT-C3500|GT-C3510|GT-C3530|GT-C3630|GT-C3780|GT-C5010|GT-C5212|GT-C6620|GT-C6625|GT-C6712|GT-E1050|GT-E1070|GT-E1075|GT-E1080|GT-E1081|GT-E1085|GT-E1087|GT-E1100|GT-E1107|GT-E1110|GT-E1120|GT-E1125|GT-E1130|GT-E1160|GT-E1170|GT-E1175|GT-E1180|GT-E1182|GT-E1200|GT-E1210|GT-E1225|GT-E1230|GT-E1390|GT-E2100|GT-E2120|GT-E2121|GT-E2152|GT-E2220|GT-E2222|GT-E2230|GT-E2232|GT-E2250|GT-E2370|GT-E2550|GT-E2652|GT-E3210|GT-E3213|GT-I5500|GT-I5503|GT-I5700|GT-I5800|GT-I5801|GT-I6410|GT-I6420|GT-I7110|GT-I7410|GT-I7500|GT-I8000|GT-I8150|GT-I8160|GT-I8190|GT-I8320|GT-I8330|GT-I8350|GT-I8530|GT-I8700|GT-I8703|GT-I8910|GT-I9000|GT-I9001|GT-I9003|GT-I9010|GT-I9020|GT-I9023|GT-I9070|GT-I9082|GT-I9100|GT-I9103|GT-I9220|GT-I9250|GT-I9300|GT-I9305|GT-I9500|GT-I9505|GT-M3510|GT-M5650|GT-M7500|GT-M7600|GT-M7603|GT-M8800|GT-M8910|GT-N7000|GT-S3110|GT-S3310|GT-S3350|GT-S3353|GT-S3370|GT-S3650|GT-S3653|GT-S3770|GT-S3850|GT-S5210|GT-S5220|GT-S5229|GT-S5230|GT-S5233|GT-S5250|GT-S5253|GT-S5260|GT-S5263|GT-S5270|GT-S5300|GT-S5330|GT-S5350|GT-S5360|GT-S5363|GT-S5369|GT-S5380|GT-S5380D|GT-S5560|GT-S5570|GT-S5600|GT-S5603|GT-S5610|GT-S5620|GT-S5660|GT-S5670|GT-S5690|GT-S5750|GT-S5780|GT-S5830|GT-S5839|GT-S6102|GT-S6500|GT-S7070|GT-S7200|GT-S7220|GT-S7230|GT-S7233|GT-S7250|GT-S7500|GT-S7530|GT-S7550|GT-S7562|GT-S7710|GT-S8000|GT-S8003|GT-S8500|GT-S8530|GT-S8600|SCH-A310|SCH-A530|SCH-A570|SCH-A610|SCH-A630|SCH-A650|SCH-A790|SCH-A795|SCH-A850|SCH-A870|SCH-A890|SCH-A930|SCH-A950|SCH-A970|SCH-A990|SCH-I100|SCH-I110|SCH-I400|SCH-I405|SCH-I500|SCH-I510|SCH-I515|SCH-I600|SCH-I730|SCH-I760|SCH-I770|SCH-I830|SCH-I910|SCH-I920|SCH-I959|SCH-LC11|SCH-N150|SCH-N300|SCH-R100|SCH-R300|SCH-R351|SCH-R400|SCH-R410|SCH-T300|SCH-U310|SCH-U320|SCH-U350|SCH-U360|SCH-U365|SCH-U370|SCH-U380|SCH-U410|SCH-U430|SCH-U450|SCH-U460|SCH-U470|SCH-U490|SCH-U540|SCH-U550|SCH-U620|SCH-U640|SCH-U650|SCH-U660|SCH-U700|SCH-U740|SCH-U750|SCH-U810|SCH-U820|SCH-U900|SCH-U940|SCH-U960|SCS-26UC|SGH-A107|SGH-A117|SGH-A127|SGH-A137|SGH-A157|SGH-A167|SGH-A177|SGH-A187|SGH-A197|SGH-A227|SGH-A237|SGH-A257|SGH-A437|SGH-A517|SGH-A597|SGH-A637|SGH-A657|SGH-A667|SGH-A687|SGH-A697|SGH-A707|SGH-A717|SGH-A727|SGH-A737|SGH-A747|SGH-A767|SGH-A777|SGH-A797|SGH-A817|SGH-A827|SGH-A837|SGH-A847|SGH-A867|SGH-A877|SGH-A887|SGH-A897|SGH-A927|SGH-B100|SGH-B130|SGH-B200|SGH-B220|SGH-C100|SGH-C110|SGH-C120|SGH-C130|SGH-C140|SGH-C160|SGH-C170|SGH-C180|SGH-C200|SGH-C207|SGH-C210|SGH-C225|SGH-C230|SGH-C417|SGH-C450|SGH-D307|SGH-D347|SGH-D357|SGH-D407|SGH-D415|SGH-D780|SGH-D807|SGH-D980|SGH-E105|SGH-E200|SGH-E315|SGH-E316|SGH-E317|SGH-E335|SGH-E590|SGH-E635|SGH-E715|SGH-E890|SGH-F300|SGH-F480|SGH-I200|SGH-I300|SGH-I320|SGH-I550|SGH-I577|SGH-I600|SGH-I607|SGH-I617|SGH-I627|SGH-I637|SGH-I677|SGH-I700|SGH-I717|SGH-I727|SGH-i747M|SGH-I777|SGH-I780|SGH-I827|SGH-I847|SGH-I857|SGH-I896|SGH-I897|SGH-I900|SGH-I907|SGH-I917|SGH-I927|SGH-I937|SGH-I997|SGH-J150|SGH-J200|SGH-L170|SGH-L700|SGH-M110|SGH-M150|SGH-M200|SGH-N105|SGH-N500|SGH-N600|SGH-N620|SGH-N625|SGH-N700|SGH-N710|SGH-P107|SGH-P207|SGH-P300|SGH-P310|SGH-P520|SGH-P735|SGH-P777|SGH-Q105|SGH-R210|SGH-R220|SGH-R225|SGH-S105|SGH-S307|SGH-T109|SGH-T119|SGH-T139|SGH-T209|SGH-T219|SGH-T229|SGH-T239|SGH-T249|SGH-T259|SGH-T309|SGH-T319|SGH-T329|SGH-T339|SGH-T349|SGH-T359|SGH-T369|SGH-T379|SGH-T409|SGH-T429|SGH-T439|SGH-T459|SGH-T469|SGH-T479|SGH-T499|SGH-T509|SGH-T519|SGH-T539|SGH-T559|SGH-T589|SGH-T609|SGH-T619|SGH-T629|SGH-T639|SGH-T659|SGH-T669|SGH-T679|SGH-T709|SGH-T719|SGH-T729|SGH-T739|SGH-T746|SGH-T749|SGH-T759|SGH-T769|SGH-T809|SGH-T819|SGH-T839|SGH-T919|SGH-T929|SGH-T939|SGH-T959|SGH-T989|SGH-U100|SGH-U200|SGH-U800|SGH-V205|SGH-V206|SGH-X100|SGH-X105|SGH-X120|SGH-X140|SGH-X426|SGH-X427|SGH-X475|SGH-X495|SGH-X497|SGH-X507|SGH-X600|SGH-X610|SGH-X620|SGH-X630|SGH-X700|SGH-X820|SGH-X890|SGH-Z130|SGH-Z150|SGH-Z170|SGH-ZX10|SGH-ZX20|SHW-M110|SPH-A120|SPH-A400|SPH-A420|SPH-A460|SPH-A500|SPH-A560|SPH-A600|SPH-A620|SPH-A660|SPH-A700|SPH-A740|SPH-A760|SPH-A790|SPH-A800|SPH-A820|SPH-A840|SPH-A880|SPH-A900|SPH-A940|SPH-A960|SPH-D600|SPH-D700|SPH-D710|SPH-D720|SPH-I300|SPH-I325|SPH-I330|SPH-I350|SPH-I500|SPH-I600|SPH-I700|SPH-L700|SPH-M100|SPH-M220|SPH-M240|SPH-M300|SPH-M305|SPH-M320|SPH-M330|SPH-M350|SPH-M360|SPH-M370|SPH-M380|SPH-M510|SPH-M540|SPH-M550|SPH-M560|SPH-M570|SPH-M580|SPH-M610|SPH-M620|SPH-M630|SPH-M800|SPH-M810|SPH-M850|SPH-M900|SPH-M910|SPH-M920|SPH-M930|SPH-N100|SPH-N200|SPH-N240|SPH-N300|SPH-N400|SPH-Z400|SWC-E100|SCH-i909|GT-N7100|GT-N7105|SCH-I535|SM-N900A|SGH-I317|SGH-T999L|GT-S5360B|GT-I8262|GT-S6802|GT-S6312|GT-S6310|GT-S5312|GT-S5310|GT-I9105|GT-I8510|GT-S6790N|SM-G7105|SM-N9005|GT-S5301|GT-I9295|GT-I9195|SM-C101|GT-S7392|GT-S7560|GT-B7610|GT-I5510|GT-S7582|GT-S7530E|GT-I8750|SM-G9006V|SM-G9008V|SM-G9009D|SM-G900A|SM-G900D|SM-G900F|SM-G900H|SM-G900I|SM-G900J|SM-G900K|SM-G900L|SM-G900M|SM-G900P|SM-G900R4|SM-G900S|SM-G900T|SM-G900V|SM-G900W8|SHV-E160K|SCH-P709|SCH-P729|SM-T2558|GT-I9205|SM-G9350|SM-J120F|SM-G920F|SM-G920V|SM-G930F|SM-N910C|SM-A310F|GT-I9190|SM-J500FN|SM-G903F|SM-J330F', 174 'LG' => '\bLG\b;|LG[- ]?(C800|C900|E400|E610|E900|E-900|F160|F180K|F180L|F180S|730|855|L160|LS740|LS840|LS970|LU6200|MS690|MS695|MS770|MS840|MS870|MS910|P500|P700|P705|VM696|AS680|AS695|AX840|C729|E970|GS505|272|C395|E739BK|E960|L55C|L75C|LS696|LS860|P769BK|P350|P500|P509|P870|UN272|US730|VS840|VS950|LN272|LN510|LS670|LS855|LW690|MN270|MN510|P509|P769|P930|UN200|UN270|UN510|UN610|US670|US740|US760|UX265|UX840|VN271|VN530|VS660|VS700|VS740|VS750|VS910|VS920|VS930|VX9200|VX11000|AX840A|LW770|P506|P925|P999|E612|D955|D802|MS323|M257)', 179 175 'Sony' => 'SonyST|SonyLT|SonyEricsson|SonyEricssonLT15iv|LT18i|E10i|LT28h|LT26w|SonyEricssonMT27i|C5303|C6902|C6903|C6906|C6943|D2533', 180 176 'Asus' => 'Asus.*Galaxy|PadFone.*Mobile', 177 'NokiaLumia' => 'Lumia [0-9]{3,4}', 181 178 // http://www.micromaxinfo.com/mobiles/smartphones 182 179 // Added because the codes might conflict with Acer Tablets. … … 191 188 'Fly' => 'IQ230|IQ444|IQ450|IQ440|IQ442|IQ441|IQ245|IQ256|IQ236|IQ255|IQ235|IQ245|IQ275|IQ240|IQ285|IQ280|IQ270|IQ260|IQ250', 192 189 // http://fr.wikomobile.com 193 'Wiko' => 'KITE 4G|HIGHWAY|GETAWAY|STAIRWAY|DARKSIDE|DARKFULL|DARKNIGHT|DARKMOON|SLIDE|WAX 4G|RAINBOW|BLOOM|SUNSET|GOA |LENNY|BARRY|IGGY|OZZY|CINK FIVE|CINK PEAX|CINK PEAX 2|CINK SLIM|CINK SLIM 2|CINK +|CINK KING|CINK PEAX|CINK SLIM|SUBLIM',190 'Wiko' => 'KITE 4G|HIGHWAY|GETAWAY|STAIRWAY|DARKSIDE|DARKFULL|DARKNIGHT|DARKMOON|SLIDE|WAX 4G|RAINBOW|BLOOM|SUNSET|GOA(?!nna)|LENNY|BARRY|IGGY|OZZY|CINK FIVE|CINK PEAX|CINK PEAX 2|CINK SLIM|CINK SLIM 2|CINK +|CINK KING|CINK PEAX|CINK SLIM|SUBLIM', 194 191 'iMobile' => 'i-mobile (IQ|i-STYLE|idea|ZAA|Hitz)', 195 192 // Added simvalley mobile just for fun. They have some interesting devices. … … 200 197 'Wolfgang' => 'AT-B24D|AT-AS50HD|AT-AS40W|AT-AS55HD|AT-AS45q2|AT-B26D|AT-AS50Q', 201 198 'Alcatel' => 'Alcatel', 202 'Nintendo' => 'Nintendo 3DS',199 'Nintendo' => 'Nintendo (3DS|Switch)', 203 200 // http://en.wikipedia.org/wiki/Amoi 204 201 'Amoi' => 'Amoi', 205 202 // http://en.wikipedia.org/wiki/INQ 206 203 'INQ' => 'INQ', 204 'OnePlus' => 'ONEPLUS', 207 205 // @Tapatalk is a mobile app; http://support.tapatalk.com/threads/smf-2-0-2-os-and-browser-detection-plugin-and-tapatalk.15565/#post-79039 208 206 'GenericPhone' => 'Tapatalk|PDA;|SAGEM|\bmmp\b|pocket|\bpsp\b|symbian|Smartphone|smartfon|treo|up.browser|up.link|vodafone|\bwap\b|nokia|Series40|Series60|S60|SonyEricsson|N900|MAUI.*WAP.*Browser', … … 215 213 */ 216 214 protected static $tabletDevices = array( 217 'iPad' => 'iPad|iPad.*Mobile', // @todo: check for mobile friendly emails topic. 218 'NexusTablet' => 'Android.*Nexus[\s]+(7|9|10)|^.*Android.*Nexus(?:(?!Mobile).)*$', 219 'SamsungTablet' => 'SAMSUNG.*Tablet|Galaxy.*Tab|SC-01C|GT-P1000|GT-P1003|GT-P1010|GT-P3105|GT-P6210|GT-P6800|GT-P6810|GT-P7100|GT-P7300|GT-P7310|GT-P7500|GT-P7510|SCH-I800|SCH-I815|SCH-I905|SGH-I957|SGH-I987|SGH-T849|SGH-T859|SGH-T869|SPH-P100|GT-P3100|GT-P3108|GT-P3110|GT-P5100|GT-P5110|GT-P6200|GT-P7320|GT-P7511|GT-N8000|GT-P8510|SGH-I497|SPH-P500|SGH-T779|SCH-I705|SCH-I915|GT-N8013|GT-P3113|GT-P5113|GT-P8110|GT-N8010|GT-N8005|GT-N8020|GT-P1013|GT-P6201|GT-P7501|GT-N5100|GT-N5105|GT-N5110|SHV-E140K|SHV-E140L|SHV-E140S|SHV-E150S|SHV-E230K|SHV-E230L|SHV-E230S|SHW-M180K|SHW-M180L|SHW-M180S|SHW-M180W|SHW-M300W|SHW-M305W|SHW-M380K|SHW-M380S|SHW-M380W|SHW-M430W|SHW-M480K|SHW-M480S|SHW-M480W|SHW-M485W|SHW-M486W|SHW-M500W|GT-I9228|SCH-P739|SCH-I925|GT-I9200|GT-P5200|GT-P5210|GT-P5210X|SM-T311|SM-T310|SM-T310X|SM-T210|SM-T210R|SM-T211|SM-P600|SM-P601|SM-P605|SM-P900|SM-P901|SM-T217|SM-T217A|SM-T217S|SM-P6000|SM-T3100|SGH-I467|XE500|SM-T110|GT-P5220|GT-I9200X|GT-N5110X|GT-N5120|SM-P905|SM-T111|SM-T2105|SM-T315|SM-T320|SM-T320X|SM-T321|SM-T520|SM-T525|SM-T530NU|SM-T230NU|SM-T330NU|SM-T900|XE500T1C|SM-P605V|SM-P905V|SM-T337V|SM-T537V|SM-T707V|SM-T807V|SM-P600X|SM-P900X|SM-T210X|SM-T230|SM-T230X|SM-T325|GT-P7503|SM-T531|SM-T330|SM-T530|SM-T705C|SM-T535|SM-T331|SM-T800|SM-T700|SM-T537|SM-T807|SM-P907A|SM-T337A|SM-T537A|SM-T707A|SM-T807A|SM-T237|SM-T807P|SM-P607T|SM-T217T|SM-T337T|SM-T807T|SM-T116NQ|SM-P550|SM-T350|SM-T550|SM-T9000|SM-P9000|SM-T705Y|SM-T805', // SCH-P709|SCH-P729|SM-T2558|GT-I9205 - Samsung Mega - treat them like a regular phone. 215 // @todo: check for mobile friendly emails topic. 216 'iPad' => 'iPad|iPad.*Mobile', 217 // Removed |^.*Android.*Nexus(?!(?:Mobile).)*$ 218 // @see #442 219 // @todo Merge NexusTablet into GoogleTablet. 220 'NexusTablet' => 'Android.*Nexus[\s]+(7|9|10)', 221 // https://en.wikipedia.org/wiki/Pixel_C 222 'GoogleTablet' => 'Android.*Pixel C', 223 'SamsungTablet' => 'SAMSUNG.*Tablet|Galaxy.*Tab|SC-01C|GT-P1000|GT-P1003|GT-P1010|GT-P3105|GT-P6210|GT-P6800|GT-P6810|GT-P7100|GT-P7300|GT-P7310|GT-P7500|GT-P7510|SCH-I800|SCH-I815|SCH-I905|SGH-I957|SGH-I987|SGH-T849|SGH-T859|SGH-T869|SPH-P100|GT-P3100|GT-P3108|GT-P3110|GT-P5100|GT-P5110|GT-P6200|GT-P7320|GT-P7511|GT-N8000|GT-P8510|SGH-I497|SPH-P500|SGH-T779|SCH-I705|SCH-I915|GT-N8013|GT-P3113|GT-P5113|GT-P8110|GT-N8010|GT-N8005|GT-N8020|GT-P1013|GT-P6201|GT-P7501|GT-N5100|GT-N5105|GT-N5110|SHV-E140K|SHV-E140L|SHV-E140S|SHV-E150S|SHV-E230K|SHV-E230L|SHV-E230S|SHW-M180K|SHW-M180L|SHW-M180S|SHW-M180W|SHW-M300W|SHW-M305W|SHW-M380K|SHW-M380S|SHW-M380W|SHW-M430W|SHW-M480K|SHW-M480S|SHW-M480W|SHW-M485W|SHW-M486W|SHW-M500W|GT-I9228|SCH-P739|SCH-I925|GT-I9200|GT-P5200|GT-P5210|GT-P5210X|SM-T311|SM-T310|SM-T310X|SM-T210|SM-T210R|SM-T211|SM-P600|SM-P601|SM-P605|SM-P900|SM-P901|SM-T217|SM-T217A|SM-T217S|SM-P6000|SM-T3100|SGH-I467|XE500|SM-T110|GT-P5220|GT-I9200X|GT-N5110X|GT-N5120|SM-P905|SM-T111|SM-T2105|SM-T315|SM-T320|SM-T320X|SM-T321|SM-T520|SM-T525|SM-T530NU|SM-T230NU|SM-T330NU|SM-T900|XE500T1C|SM-P605V|SM-P905V|SM-T337V|SM-T537V|SM-T707V|SM-T807V|SM-P600X|SM-P900X|SM-T210X|SM-T230|SM-T230X|SM-T325|GT-P7503|SM-T531|SM-T330|SM-T530|SM-T705|SM-T705C|SM-T535|SM-T331|SM-T800|SM-T700|SM-T537|SM-T807|SM-P907A|SM-T337A|SM-T537A|SM-T707A|SM-T807A|SM-T237|SM-T807P|SM-P607T|SM-T217T|SM-T337T|SM-T807T|SM-T116NQ|SM-T116BU|SM-P550|SM-T350|SM-T550|SM-T9000|SM-P9000|SM-T705Y|SM-T805|GT-P3113|SM-T710|SM-T810|SM-T815|SM-T360|SM-T533|SM-T113|SM-T335|SM-T715|SM-T560|SM-T670|SM-T677|SM-T377|SM-T567|SM-T357T|SM-T555|SM-T561|SM-T713|SM-T719|SM-T813|SM-T819|SM-T580|SM-T355Y?|SM-T280|SM-T817A|SM-T820|SM-W700|SM-P580|SM-T587|SM-P350|SM-P555M|SM-P355M|SM-T113NU|SM-T815Y|SM-T585|SM-T285|SM-T825|SM-W708|SM-T835', // SCH-P709|SCH-P729|SM-T2558|GT-I9205 - Samsung Mega - treat them like a regular phone. 220 224 // http://docs.aws.amazon.com/silk/latest/developerguide/user-agent.html 221 'Kindle' => 'Kindle|Silk.*Accelerated|Android.*\b(KFOT|KFTT|KFJWI|KFJWA|KFOTE|KFSOWI|KFTHWI|KFTHWA|KFAPWI|KFAPWA|WFJWAE|KFSAWA|KFSAWI|KFASWI )\b',225 'Kindle' => 'Kindle|Silk.*Accelerated|Android.*\b(KFOT|KFTT|KFJWI|KFJWA|KFOTE|KFSOWI|KFTHWI|KFTHWA|KFAPWI|KFAPWA|WFJWAE|KFSAWA|KFSAWI|KFASWI|KFARWI|KFFOWI|KFGIWI|KFMEWI)\b|Android.*Silk/[0-9.]+ like Chrome/[0-9.]+ (?!Mobile)', 222 226 // Only the Surface tablets with Windows RT are considered mobile. 223 227 // http://msdn.microsoft.com/en-us/library/ie/hh920767(v=vs.85).aspx … … 227 231 // Watch out for PadFone, see #132. 228 232 // http://www.asus.com/de/Tablets_Mobile/Memo_Pad_Products/ 229 'AsusTablet' => '^.*PadFone((?!Mobile).)*$|Transformer|TF101|TF101G|TF300T|TF300TG|TF300TL|TF700T|TF700KL|TF701T|TF810C|ME171|ME301T|ME302C|ME371MG|ME370T|ME372MG|ME172V|ME173X|ME400C|Slider SL101|\bK00F\b|\bK00C\b|\bK00E\b|\bK00L\b|TX201LA|ME176C|ME102A|\bM80TA\b|ME372CL|ME560CG|ME372CG|ME302KL| K010 | K01 7 |ME572C|ME103K|ME170C|ME171C|\bME70C\b|ME581C|ME581CL|ME8510C|ME181C',233 'AsusTablet' => '^.*PadFone((?!Mobile).)*$|Transformer|TF101|TF101G|TF300T|TF300TG|TF300TL|TF700T|TF700KL|TF701T|TF810C|ME171|ME301T|ME302C|ME371MG|ME370T|ME372MG|ME172V|ME173X|ME400C|Slider SL101|\bK00F\b|\bK00C\b|\bK00E\b|\bK00L\b|TX201LA|ME176C|ME102A|\bM80TA\b|ME372CL|ME560CG|ME372CG|ME302KL| K010 | K011 | K017 | K01E |ME572C|ME103K|ME170C|ME171C|\bME70C\b|ME581C|ME581CL|ME8510C|ME181C|P01Y|PO1MA|P01Z|\bP027\b|\bP024\b|\bP00C\b', 230 234 'BlackBerryTablet' => 'PlayBook|RIM Tablet', 231 235 'HTCtablet' => 'HTC_Flyer_P512|HTC Flyer|HTC Jetstream|HTC-P715a|HTC EVO View 4G|PG41200|PG09410', … … 237 241 // http://www.acer.de/ac/de/DE/content/models/tablets/ 238 242 // Can conflict with Micromax and Motorola phones codes. 239 'AcerTablet' => 'Android.*; \b(A100|A101|A110|A200|A210|A211|A500|A501|A510|A511|A700|A701|W500|W500P|W501|W501P|W510|W511|W700|G100|G100W|B1-A71|B1-710|B1-711|A1-810|A1-811|A1-830)\b|W3-810|\bA3-A10\b|\bA3-A11\b ',243 'AcerTablet' => 'Android.*; \b(A100|A101|A110|A200|A210|A211|A500|A501|A510|A511|A700|A701|W500|W500P|W501|W501P|W510|W511|W700|G100|G100W|B1-A71|B1-710|B1-711|A1-810|A1-811|A1-830)\b|W3-810|\bA3-A10\b|\bA3-A11\b|\bA3-A20\b|\bA3-A30', 240 244 // http://eu.computers.toshiba-europe.com/innovation/family/Tablets/1098744/banner_id/tablet_footerlink/ 241 245 // http://us.toshiba.com/tablets/tablet-finder … … 247 251 'FujitsuTablet' => 'Android.*\b(F-01D|F-02F|F-05E|F-10D|M532|Q572)\b', 248 252 // Prestigio Tablets http://www.prestigio.com/support 249 'PrestigioTablet' => 'PMP3170B|PMP3270B|PMP3470B|PMP7170B|PMP3370B|PMP3570C|PMP5870C|PMP3670B|PMP5570C|PMP5770D|PMP3970B|PMP3870C|PMP5580C|PMP5880D|PMP5780D|PMP5588C|PMP7280C|PMP7280C3G|PMP7280|PMP7880D|PMP5597D|PMP5597|PMP7100D|PER3464|PER3274|PER3574|PER3884|PER5274|PER5474|PMP5097CPRO|PMP5097|PMP7380D|PMP5297C|PMP5297C_QUAD ',253 'PrestigioTablet' => 'PMP3170B|PMP3270B|PMP3470B|PMP7170B|PMP3370B|PMP3570C|PMP5870C|PMP3670B|PMP5570C|PMP5770D|PMP3970B|PMP3870C|PMP5580C|PMP5880D|PMP5780D|PMP5588C|PMP7280C|PMP7280C3G|PMP7280|PMP7880D|PMP5597D|PMP5597|PMP7100D|PER3464|PER3274|PER3574|PER3884|PER5274|PER5474|PMP5097CPRO|PMP5097|PMP7380D|PMP5297C|PMP5297C_QUAD|PMP812E|PMP812E3G|PMP812F|PMP810E|PMP880TD|PMT3017|PMT3037|PMT3047|PMT3057|PMT7008|PMT5887|PMT5001|PMT5002', 250 254 // http://support.lenovo.com/en_GB/downloads/default.page?# 251 'LenovoTablet' => ' Idea(Tab|Pad)( A1|A10| K1|)|ThinkPad([ ]+)?Tablet|Lenovo.*(S2109|S2110|S5000|S6000|K3011|A3000|A3500|A1000|A2107|A2109|A1107|A5500|A7600|B6000|B8000|B8080)(-|)(FL|F|HV|H|)',255 'LenovoTablet' => 'Lenovo TAB|Idea(Tab|Pad)( A1|A10| K1|)|ThinkPad([ ]+)?Tablet|YT3-850M|YT3-X90L|YT3-X90F|YT3-X90X|Lenovo.*(S2109|S2110|S5000|S6000|K3011|A3000|A3500|A1000|A2107|A2109|A1107|A5500|A7600|B6000|B8000|B8080)(-|)(FL|F|HV|H|)|TB-X103F|TB-X304F|TB-X304L|TB-8703F|Tab2A7-10F|TB2-X30L', 252 256 // http://www.dell.com/support/home/us/en/04/Products/tab_mob/tablets 253 257 'DellTablet' => 'Venue 11|Venue 8|Venue 7|Dell Streak 10|Dell Streak 7', … … 255 259 'YarvikTablet' => 'Android.*\b(TAB210|TAB211|TAB224|TAB250|TAB260|TAB264|TAB310|TAB360|TAB364|TAB410|TAB411|TAB420|TAB424|TAB450|TAB460|TAB461|TAB464|TAB465|TAB467|TAB468|TAB07-100|TAB07-101|TAB07-150|TAB07-151|TAB07-152|TAB07-200|TAB07-201-3G|TAB07-210|TAB07-211|TAB07-212|TAB07-214|TAB07-220|TAB07-400|TAB07-485|TAB08-150|TAB08-200|TAB08-201-3G|TAB08-201-30|TAB09-100|TAB09-211|TAB09-410|TAB10-150|TAB10-201|TAB10-211|TAB10-400|TAB10-410|TAB13-201|TAB274EUK|TAB275EUK|TAB374EUK|TAB462EUK|TAB474EUK|TAB9-200)\b', 256 260 'MedionTablet' => 'Android.*\bOYO\b|LIFE.*(P9212|P9514|P9516|S9512)|LIFETAB', 257 'ArnovaTablet' => ' AN10G2|AN7bG3|AN7fG3|AN8G3|AN8cG3|AN7G3|AN9G3|AN7dG3|AN7dG3ST|AN7dG3ChildPad|AN10bG3|AN10bG3DT|AN9G2',261 'ArnovaTablet' => '97G4|AN10G2|AN7bG3|AN7fG3|AN8G3|AN8cG3|AN7G3|AN9G3|AN7dG3|AN7dG3ST|AN7dG3ChildPad|AN10bG3|AN10bG3DT|AN9G2', 258 262 // http://www.intenso.de/kategorie_en.php?kategorie=33 259 263 // @todo: http://www.nbhkdz.com/read/b8e64202f92a2df129126bff.html - investigate … … 267 271 'AllViewTablet' => 'Allview.*(Viva|Alldro|City|Speed|All TV|Frenzy|Quasar|Shine|TX1|AX1|AX2)', 268 272 // http://wiki.archosfans.com/index.php?title=Main_Page 269 'ArchosTablet' => '\b(101G9|80G9|A101IT)\b|Qilive 97R|Archos5|\bARCHOS (70|79|80|90|97|101|FAMILYPAD|)(b|)(G10| Cobalt| TITANIUM(HD|)| Xenon| Neon|XSK| 2| XS 2| PLATINUM| CARBON|GAMEPAD)\b', 273 // @note Rewrite the regex format after we add more UAs. 274 'ArchosTablet' => '\b(101G9|80G9|A101IT)\b|Qilive 97R|Archos5|\bARCHOS (70|79|80|90|97|101|FAMILYPAD|)(b|c|)(G10| Cobalt| TITANIUM(HD|)| Xenon| Neon|XSK| 2| XS 2| PLATINUM| CARBON|GAMEPAD)\b', 270 275 // http://www.ainol.com/plugin.php?identifier=ainol&module=product 271 276 'AinolTablet' => 'NOVO7|NOVO8|NOVO10|Novo7Aurora|Novo7Basic|NOVO7PALADIN|novo9-Spark', 277 'NokiaLumiaTablet' => 'Lumia 2520', 272 278 // @todo: inspect http://esupport.sony.com/US/p/select-system.pl?DIRECTOR=DRIVER 273 279 // Readers http://www.atsuhiro-me.net/ebook/sony-reader/sony-reader-web-browser 274 280 // http://www.sony.jp/support/tablet/ 275 'SonyTablet' => 'Sony.*Tablet|Xperia Tablet|Sony Tablet S|SO-03E|SGPT12|SGPT13|SGPT114|SGPT121|SGPT122|SGPT123|SGPT111|SGPT112|SGPT113|SGPT131|SGPT132|SGPT133|SGPT211|SGPT212|SGPT213|SGP311|SGP312|SGP321|EBRD1101|EBRD1102|EBRD1201|SGP351|SGP341|SGP511|SGP512|SGP521|SGP541|SGP551|SGP621|SGP6 12',281 'SonyTablet' => 'Sony.*Tablet|Xperia Tablet|Sony Tablet S|SO-03E|SGPT12|SGPT13|SGPT114|SGPT121|SGPT122|SGPT123|SGPT111|SGPT112|SGPT113|SGPT131|SGPT132|SGPT133|SGPT211|SGPT212|SGPT213|SGP311|SGP312|SGP321|EBRD1101|EBRD1102|EBRD1201|SGP351|SGP341|SGP511|SGP512|SGP521|SGP541|SGP551|SGP621|SGP641|SGP612|SOT31|SGP771|SGP611|SGP612|SGP712', 276 282 // http://www.support.philips.com/support/catalog/worldproducts.jsp?userLanguage=en&userCountry=cn&categoryid=3G_LTE_TABLET_SU_CN_CARE&title=3G%20tablets%20/%20LTE%20range&_dyncharset=UTF-8 277 283 'PhilipsTablet' => '\b(PI2010|PI3000|PI3100|PI3105|PI3110|PI3205|PI3210|PI3900|PI4010|PI7000|PI7100)\b', … … 281 287 'CobyTablet' => 'MID1042|MID1045|MID1125|MID1126|MID7012|MID7014|MID7015|MID7034|MID7035|MID7036|MID7042|MID7048|MID7127|MID8042|MID8048|MID8127|MID9042|MID9740|MID9742|MID7022|MID7010', 282 288 // http://www.match.net.cn/products.asp 283 'MIDTablet' => 'M9701|M9000|M9100|M806|M1052|M806|T703|MID701|MID713|MID710|MID727|MID760|MID830|MID728|MID933|MID125|MID810|MID732|MID120|MID930|MID800|MID731|MID900|MID100|MID820|MID735|MID980|MID130|MID833|MID737|MID960|MID135|MID860|MID736|MID140|MID930|MID835|MID733 ',289 'MIDTablet' => 'M9701|M9000|M9100|M806|M1052|M806|T703|MID701|MID713|MID710|MID727|MID760|MID830|MID728|MID933|MID125|MID810|MID732|MID120|MID930|MID800|MID731|MID900|MID100|MID820|MID735|MID980|MID130|MID833|MID737|MID960|MID135|MID860|MID736|MID140|MID930|MID835|MID733|MID4X10', 284 290 // http://www.msi.com/support 285 291 // @todo Research the Windows Tablets. … … 297 303 'FlyTablet' => 'IQ310|Fly Vision', 298 304 // http://www.bqreaders.com/gb/tablets-prices-sale.html 299 'bqTablet' => ' (bq)?.*(Elcano|Curie|Edison|Maxwell|Kepler|Pascal|Tesla|Hypatia|Platon|Newton|Livingstone|Cervantes|Avant|Aquaris E10)|Maxwell.*Lite|Maxwell.*Plus',305 'bqTablet' => 'Android.*(bq)?.*(Elcano|Curie|Edison|Maxwell|Kepler|Pascal|Tesla|Hypatia|Platon|Newton|Livingstone|Cervantes|Avant|Aquaris ([E|M]10|M8))|Maxwell.*Lite|Maxwell.*Plus', 300 306 // http://www.huaweidevice.com/worldwide/productFamily.do?method=index&directoryId=5011&treeId=3290 301 307 // http://www.huaweidevice.com/worldwide/downloadCenter.do?method=index&directoryId=3372&treeId=0&tb=1&type=software (including legacy tablets) 302 'HuaweiTablet' => 'MediaPad|MediaPad 7 Youth|IDEOS S7|S7-201c|S7-202u|S7-101|S7-103|S7-104|S7-105|S7-106|S7-201|S7-Slim ',308 'HuaweiTablet' => 'MediaPad|MediaPad 7 Youth|IDEOS S7|S7-201c|S7-202u|S7-101|S7-103|S7-104|S7-105|S7-106|S7-201|S7-Slim|M2-A01L|BAH-L09|BAH-W09', 303 309 // Nec or Medias Tab 304 310 'NecTablet' => '\bN-06D|\bN-08D', … … 332 338 'DanyTechTablet' => 'Genius Tab G3|Genius Tab S2|Genius Tab Q3|Genius Tab G4|Genius Tab Q4|Genius Tab G-II|Genius TAB GII|Genius TAB GIII|Genius Tab S1', 333 339 // http://www.galapad.net/product.html 334 'GalapadTablet' => 'Android.*\bG1\b ',340 'GalapadTablet' => 'Android.*\bG1\b(?!\))', 335 341 // http://www.micromaxinfo.com/tablet/funbook 336 342 'MicromaxTablet' => 'Funbook|Micromax.*\b(P250|P560|P360|P362|P600|P300|P350|P500|P275)\b', … … 356 362 // http://www.overmax.pl/pl/katalog-produktow,p8/tablety,c14/ 357 363 // @todo: add more tests. 358 'OvermaxTablet' => 'OV-(SteelCore|NewBase|Basecore|Baseone|Exellen|Quattor|EduTab|Solution|ACTION|BasicTab|TeddyTab|MagicTab|Stream|TB-08|TB-09) ',364 'OvermaxTablet' => 'OV-(SteelCore|NewBase|Basecore|Baseone|Exellen|Quattor|EduTab|Solution|ACTION|BasicTab|TeddyTab|MagicTab|Stream|TB-08|TB-09)|Qualcore 1027', 359 365 // http://hclmetablet.com/India/index.php 360 366 'HCLTablet' => 'HCL.*Tablet|Connect-3G-2.0|Connect-2G-2.0|ME Tablet U1|ME Tablet U2|ME Tablet G1|ME Tablet X1|ME Tablet Y2|ME Tablet Sync', … … 381 387 'StorexTablet' => 'eZee[_\']?(Tab|Go)[0-9]+|TabLC7|Looney Tunes Tab', 382 388 // Generic Vodafone tablets. 383 'VodafoneTablet' => 'SmartTab([ ]+)?[0-9]+|SmartTabII10|SmartTabII7 ',389 'VodafoneTablet' => 'SmartTab([ ]+)?[0-9]+|SmartTabII10|SmartTabII7|VF-1497', 384 390 // French tablets - Essentiel B http://www.boulanger.fr/tablette_tactile_e-book/tablette_tactile_essentiel_b/cl_68908.htm?multiChoiceToDelete=brand&mc_brand=essentielb 385 391 // Aka: http://www.essentielb.fr/ … … 400 406 'SkkTablet' => 'Android.* (SKYPAD|PHOENIX|CYCLOPS)', 401 407 // Tecno Mobile (only tablet) - http://www.tecno-mobile.com/index.php/product?filterby=smart&list_order=all&page=1 402 'TecnoTablet' => 'TECNO P9 ',408 'TecnoTablet' => 'TECNO P9|TECNO DP8D', 403 409 // JXD (consoles & tablets) - http://jxd.hk/products.asp?selectclassid=009008&clsid=3 404 'JXDTablet' => 'Android.* \b(F3000|A3300|JXD5000|JXD3000|JXD2000|JXD300B|JXD300|S5800|S7800|S602b|S5110b|S7300|S5300|S602|S603|S5100|S5110|S601|S7100a|P3000F|P3000s|P101|P200s|P1000m|P200m|P9100|P1000s|S6600b|S908|P1000|P300|S18|S6600|S9100)\b',410 'JXDTablet' => 'Android.* \b(F3000|A3300|JXD5000|JXD3000|JXD2000|JXD300B|JXD300|S5800|S7800|S602b|S5110b|S7300|S5300|S602|S603|S5100|S5110|S601|S7100a|P3000F|P3000s|P101|P200s|P1000m|P200m|P9100|P1000s|S6600b|S908|P1000|P300|S18|S6600|S9100)\b', 405 411 // i-Joy tablets - http://www.i-joy.es/en/cat/products/tablets/ 406 412 'iJoyTablet' => 'Tablet (Spirit 7|Essentia|Galatea|Fusion|Onix 7|Landa|Titan|Scooby|Deox|Stella|Themis|Argon|Unique 7|Sygnus|Hexen|Finity 7|Cream|Cream X2|Jade|Neon 7|Neron 7|Kandy|Scape|Saphyr 7|Rebel|Biox|Rebel|Rebel 8GB|Myst|Draco 7|Myst|Tab7-004|Myst|Tadeo Jones|Tablet Boing|Arrow|Draco Dual Cam|Aurix|Mint|Amity|Revolution|Finity 9|Neon 9|T9w|Amity 4GB Dual Cam|Stone 4GB|Stone 8GB|Andromeda|Silken|X2|Andromeda II|Halley|Flame|Saphyr 9,7|Touch 8|Planet|Triton|Unique 10|Hexen 10|Memphis 4GB|Memphis 8GB|Onix 10)', … … 412 418 // http://www1.viewsonic.com/products/computing/tablets/ 413 419 'ViewsonicTablet' => 'ViewPad 10pi|ViewPad 10e|ViewPad 10s|ViewPad E72|ViewPad7|ViewPad E100|ViewPad 7e|ViewSonic VB733|VB100a', 420 // https://www.verizonwireless.com/tablets/verizon/ 421 'VerizonTablet' => 'QTAQZ3|QTAIR7|QTAQTZ3|QTASUN1|QTASUN2|QTAXIA1', 414 422 // http://www.odys.de/web/internet-tablet_en.html 415 423 'OdysTablet' => 'LOOX|XENO10|ODYS[ -](Space|EVO|Xpress|NOON)|\bXELIO\b|Xelio10Pro|XELIO7PHONETAB|XELIO10EXTREME|XELIOPT2|NEO_QUAD10', … … 421 429 'TeclastTablet' => 'T98 4G|\bP80\b|\bX90HD\b|X98 Air|X98 Air 3G|\bX89\b|P80 3G|\bX80h\b|P98 Air|\bX89HD\b|P98 3G|\bP90HD\b|P89 3G|X98 3G|\bP70h\b|P79HD 3G|G18d 3G|\bP79HD\b|\bP89s\b|\bA88\b|\bP10HD\b|\bP19HD\b|G18 3G|\bP78HD\b|\bA78\b|\bP75\b|G17s 3G|G17h 3G|\bP85t\b|\bP90\b|\bP11\b|\bP98t\b|\bP98HD\b|\bG18d\b|\bP85s\b|\bP11HD\b|\bP88s\b|\bA80HD\b|\bA80se\b|\bA10h\b|\bP89\b|\bP78s\b|\bG18\b|\bP85\b|\bA70h\b|\bA70\b|\bG17\b|\bP18\b|\bA80s\b|\bA11s\b|\bP88HD\b|\bA80h\b|\bP76s\b|\bP76h\b|\bP98\b|\bA10HD\b|\bP78\b|\bP88\b|\bA11\b|\bA10t\b|\bP76a\b|\bP76t\b|\bP76e\b|\bP85HD\b|\bP85a\b|\bP86\b|\bP75HD\b|\bP76v\b|\bA12\b|\bP75a\b|\bA15\b|\bP76Ti\b|\bP81HD\b|\bA10\b|\bT760VE\b|\bT720HD\b|\bP76\b|\bP73\b|\bP71\b|\bP72\b|\bT720SE\b|\bC520Ti\b|\bT760\b|\bT720VE\b|T720-3GE|T720-WiFi', 422 430 // Onda - http://www.onda-tablet.com/buy-android-onda.html?dir=desc&limit=all&order=price 423 'OndaTablet' => '\b(V975i|Vi30|VX530|V701|Vi60|V701s|Vi50|V801s|V719|Vx610w|VX610W|V819i|Vi10|VX580W|Vi10|V711s|V813|V811|V820w|V820|Vi20|V711|VI30W|V712|V891w|V972|V819w|V820w|Vi60|V820w|V711|V813s|V801|V819|V975s|V801|V819|V819|V818|V811|V712|V975m|V101w|V961w|V812|V818|V971|V971s|V919|V989|V116w|V102w|V973|Vi40)\b[\s]+ ',431 'OndaTablet' => '\b(V975i|Vi30|VX530|V701|Vi60|V701s|Vi50|V801s|V719|Vx610w|VX610W|V819i|Vi10|VX580W|Vi10|V711s|V813|V811|V820w|V820|Vi20|V711|VI30W|V712|V891w|V972|V819w|V820w|Vi60|V820w|V711|V813s|V801|V819|V975s|V801|V819|V819|V818|V811|V712|V975m|V101w|V961w|V812|V818|V971|V971s|V919|V989|V116w|V102w|V973|Vi40)\b[\s]+|V10 \b4G\b', 424 432 'JaytechTablet' => 'TPC-PA762', 425 433 'BlaupunktTablet' => 'Endeavour 800NG|Endeavour 1010', … … 433 441 // @todo http://www.lavamobiles.com/tablets-data-cards 434 442 'LavaTablet' => 'QPAD E704|\bIvoryS\b|E-TAB IVORY|\bE-TAB\b', 443 // http://www.breezetablet.com/ 444 'AocTablet' => 'MW0811|MW0812|MW0922|MTK8382|MW1031|MW0831|MW0821|MW0931|MW0712', 445 // http://www.mpmaneurope.com/en/products/internet-tablets-14/android-tablets-14/ 446 'MpmanTablet' => 'MP11 OCTA|MP10 OCTA|MPQC1114|MPQC1004|MPQC994|MPQC974|MPQC973|MPQC804|MPQC784|MPQC780|\bMPG7\b|MPDCG75|MPDCG71|MPDC1006|MP101DC|MPDC9000|MPDC905|MPDC706HD|MPDC706|MPDC705|MPDC110|MPDC100|MPDC99|MPDC97|MPDC88|MPDC8|MPDC77|MP709|MID701|MID711|MID170|MPDC703|MPQC1010', 435 447 // https://www.celkonmobiles.com/?_a=categoryphones&sid=2 436 448 'CelkonTablet' => 'CT695|CT888|CT[\s]?910|CT7 Tab|CT9 Tab|CT3 Tab|CT2 Tab|CT1 Tab|C820|C720|\bCT-1\b', 437 449 // http://www.wolderelectronics.com/productos/manuales-y-guias-rapidas/categoria-2-miTab 438 450 'WolderTablet' => 'miTab \b(DIAMOND|SPACE|BROOKLYN|NEO|FLY|MANHATTAN|FUNK|EVOLUTION|SKY|GOCAR|IRON|GENIUS|POP|MINT|EPSILON|BROADWAY|JUMP|HOP|LEGEND|NEW AGE|LINE|ADVANCE|FEEL|FOLLOW|LIKE|LINK|LIVE|THINK|FREEDOM|CHICAGO|CLEVELAND|BALTIMORE-GH|IOWA|BOSTON|SEATTLE|PHOENIX|DALLAS|IN 101|MasterChef)\b', 451 'MediacomTablet' => 'M-MPI10C3G|M-SP10EG|M-SP10EGP|M-SP10HXAH|M-SP7HXAH|M-SP10HXBH|M-SP8HXAH|M-SP8MXA', 439 452 // http://www.mi.com/en 440 453 'MiTablet' => '\bMI PAD\b|\bHM NOTE 1W\b', … … 442 455 'NibiruTablet' => 'Nibiru M1|Nibiru Jupiter One', 443 456 // http://navroad.com/products/produkty/tablety/ 457 // http://navroad.com/products/produkty/tablety/ 444 458 'NexoTablet' => 'NEXO NOVA|NEXO 10|NEXO AVIO|NEXO FREE|NEXO GO|NEXO EVO|NEXO 3G|NEXO SMART|NEXO KIDDO|NEXO MOBI', 459 // http://leader-online.com/new_site/product-category/tablets/ 460 // http://www.leader-online.net.au/List/Tablet 461 'LeaderTablet' => 'TBLT10Q|TBLT10I|TBL-10WDKB|TBL-10WDKBO2013|TBL-W230V2|TBL-W450|TBL-W500|SV572|TBLT7I|TBA-AC7-8G|TBLT79|TBL-8W16|TBL-10W32|TBL-10WKB|TBL-W100', 445 462 // http://www.datawind.com/ubislate/ 446 463 'UbislateTablet' => 'UbiSlate[\s]?7C', 447 464 // http://www.pocketbook-int.com/ru/support 448 465 'PocketBookTablet' => 'Pocketbook', 466 // http://www.kocaso.com/product_tablet.html 467 'KocasoTablet' => '\b(TB-1207)\b', 468 // http://global.hisense.com/product/asia/tablet/Sero7/201412/t20141215_91832.htm 469 'HisenseTablet' => '\b(F5281|E2371)\b', 449 470 // http://www.tesco.com/direct/hudl/ 450 'Hudl' => 'Hudl HT7S3 ',471 'Hudl' => 'Hudl HT7S3|Hudl 2', 451 472 // http://www.telstra.com.au/home-phone/thub-2/ 452 473 'TelstraTablet' => 'T-Hub2', 453 'GenericTablet' => 'Android.*\b97D\b|Tablet(?!.*PC)|BNTV250A|MID-WCDMA|LogicPD Zoom2|\bA7EB\b|CatNova8|A1_07|CT704|CT1002|\bM721\b|rk30sdk|\bEVOTAB\b|M758A|ET904|ALUMIUM10|Smartfren Tab|Endeavour 1010|Tablet-PC-4|Tagi Tab|\bM6pro\b|CT1020W|arc 10HD|\b Jolla\b'474 'GenericTablet' => 'Android.*\b97D\b|Tablet(?!.*PC)|BNTV250A|MID-WCDMA|LogicPD Zoom2|\bA7EB\b|CatNova8|A1_07|CT704|CT1002|\bM721\b|rk30sdk|\bEVOTAB\b|M758A|ET904|ALUMIUM10|Smartfren Tab|Endeavour 1010|Tablet-PC-4|Tagi Tab|\bM6pro\b|CT1020W|arc 10HD|\bTP750\b|\bQTAQZ3\b|WVT101|TM1088|KT107' 454 475 ); 455 476 … … 470 491 // http://nicksnettravels.builttoroam.com/post/2011/01/10/Bogus-Windows-Phone-7-User-Agent-String.aspx 471 492 // http://msdn.microsoft.com/library/ms537503.aspx 472 'WindowsPhoneOS' => 'Windows Phone 8.1|Windows Phone 8.0|Windows Phone OS|XBLWP7|ZuneWP7|Windows NT 6.[23]; ARM;', 473 'iOS' => '\biPhone.*Mobile|\biPod|\biPad', 493 // https://msdn.microsoft.com/en-us/library/hh869301(v=vs.85).aspx 494 'WindowsPhoneOS' => 'Windows Phone 10.0|Windows Phone 8.1|Windows Phone 8.0|Windows Phone OS|XBLWP7|ZuneWP7|Windows NT 6.[23]; ARM;', 495 'iOS' => '\biPhone.*Mobile|\biPod|\biPad|AppleCoreMedia', 474 496 // http://en.wikipedia.org/wiki/MeeGo 475 497 // @todo: research MeeGo in UAs … … 487 509 * List of mobile User Agents. 488 510 * 511 * IMPORTANT: This is a list of only mobile browsers. 512 * Mobile Detect 2.x supports only mobile browsers, 513 * it was never designed to detect all browsers. 514 * The change will come in 2017 in the 3.x release for PHP7. 515 * 489 516 * @var array 490 517 */ 491 518 protected static $browsers = array( 519 //'Vivaldi' => 'Vivaldi', 492 520 // @reference: https://developers.google.com/chrome/mobile/docs/user-agent 493 521 'Chrome' => '\bCrMo\b|CriOS|Android.*Chrome/[.0-9]* (Mobile)?', 494 522 'Dolfin' => '\bDolfin\b', 495 'Opera' => 'Opera.*Mini|Opera.*Mobi|Android.*Opera|Mobile.*OPR/[0-9.]+ |Coast/[0-9.]+',523 'Opera' => 'Opera.*Mini|Opera.*Mobi|Android.*Opera|Mobile.*OPR/[0-9.]+$|Coast/[0-9.]+', 496 524 'Skyfire' => 'Skyfire', 525 'Edge' => 'Mobile Safari/[.0-9]* Edge', 497 526 'IE' => 'IEMobile|MSIEMobile', // |Trident/[.0-9]+ 498 'Firefox' => 'fennec|firefox.*maemo|(Mobile|Tablet).*Firefox|Firefox.*Mobile ',527 'Firefox' => 'fennec|firefox.*maemo|(Mobile|Tablet).*Firefox|Firefox.*Mobile|FxiOS', 499 528 'Bolt' => 'bolt', 500 529 'TeaShark' => 'teashark', … … 504 533 // http://en.wikipedia.org/wiki/Midori_(web_browser) 505 534 //'Midori' => 'midori', 506 'Tizen' => 'Tizen', 535 //'Tizen' => 'Tizen', 536 'WeChat' => '\bMicroMessenger\b', 507 537 'UCBrowser' => 'UC.*Browser|UCWEB', 508 538 'baiduboxapp' => 'baiduboxapp', … … 521 551 // http://en.wikipedia.org/wiki/Vision_Mobile_Browser 522 552 'GenericBrowser' => 'NokiaBrowser|OviBrowser|OneBrowser|TwonkyBeamBrowser|SEMC.*Browser|FlyFlow|Minimo|NetFront|Novarra-Vision|MQQBrowser|MicroMessenger', 553 // @reference: https://en.wikipedia.org/wiki/Pale_Moon_(web_browser) 554 'PaleMoon' => 'Android.*PaleMoon|Mobile.*PaleMoon', 523 555 ); 524 556 … … 533 565 // https://github.com/serbanghita/Mobile-Detect/issues/57#issuecomment-15024011 534 566 // https://developers.facebook.com/docs/sharing/best-practices 535 'Bot' => 'Googlebot|facebookexternalhit|AdsBot-Google|Google Keyword Suggestion|Facebot|YandexBot| bingbot|ia_archiver|AhrefsBot|Ezooms|GSLFbot|WBSearchBot|Twitterbot|TweetmemeBot|Twikle|PaperLiBot|Wotbox|UnwindFetchor',567 'Bot' => 'Googlebot|facebookexternalhit|AdsBot-Google|Google Keyword Suggestion|Facebot|YandexBot|YandexMobileBot|bingbot|ia_archiver|AhrefsBot|Ezooms|GSLFbot|WBSearchBot|Twitterbot|TweetmemeBot|Twikle|PaperLiBot|Wotbox|UnwindFetchor|Exabot|MJ12bot|YandexImages|TurnitinBot|Pingdom', 536 568 'MobileBot' => 'Googlebot-Mobile|AdsBot-Google-Mobile|YahooSeeker/M1A1-R2D2', 537 569 'DesktopMode' => 'WPDesktop', … … 539 571 'WebKit' => '(webkit)[ /]([\w.]+)', 540 572 // @todo: Include JXD consoles. 541 'Console' => '\b(Nintendo|Nintendo WiiU|Nintendo 3DS| PLAYSTATION|Xbox)\b',573 'Console' => '\b(Nintendo|Nintendo WiiU|Nintendo 3DS|Nintendo Switch|PLAYSTATION|Xbox)\b', 542 574 'Watch' => 'SM-V700', 543 575 ); … … 588 620 'Coast' => array('Coast/[VER]'), 589 621 'Dolfin' => 'Dolfin/[VER]', 590 // @reference: https://developer.mozilla.org/en-US/docs/ User_Agent_Strings_Reference591 'Firefox' => 'Firefox/[VER]',622 // @reference: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent/Firefox 623 'Firefox' => array('Firefox/[VER]', 'FxiOS/[VER]'), 592 624 'Fennec' => 'Fennec/[VER]', 593 625 // http://msdn.microsoft.com/en-us/library/ms537503(v=vs.85).aspx 594 626 // https://msdn.microsoft.com/en-us/library/ie/hh869301(v=vs.85).aspx 627 'Edge' => 'Edge/[VER]', 595 628 'IE' => array('IEMobile/[VER];', 'IEMobile [VER]', 'MSIE [VER];', 'Trident/[0-9.]+;.*rv:[VER]'), 596 629 // http://en.wikipedia.org/wiki/NetFront … … 600 633 'Opera Mini' => 'Opera Mini/[VER]', 601 634 'Opera Mobi' => 'Version/[VER]', 602 'UC Browser' => 'UC Browser[VER]',635 'UCBrowser' => array( 'UCWEB[VER]', 'UC.*Browser/[VER]' ), 603 636 'MQQBrowser' => 'MQQBrowser/[VER]', 604 637 'MicroMessenger' => 'MicroMessenger/[VER]', 605 638 'baiduboxapp' => 'baiduboxapp/[VER]', 606 639 'baidubrowser' => 'baidubrowser/[VER]', 640 'SamsungBrowser' => 'SamsungBrowser/[VER]', 607 641 'Iron' => 'Iron/[VER]', 608 642 // @note: Safari 7534.48.3 is actually Version 5.1. … … 612 646 'Tizen' => 'Tizen/[VER]', 613 647 'Webkit' => 'webkit[ /][VER]', 648 'PaleMoon' => 'PaleMoon/[VER]', 614 649 615 650 // Engine … … 617 652 'Trident' => 'Trident/[VER]', 618 653 'Presto' => 'Presto/[VER]', 654 'Goanna' => 'Goanna/[VER]', 619 655 620 656 // OS … … 668 704 * 669 705 * @param array $httpHeaders The headers to set. If null, then using PHP's _SERVER to extract 670 * the headers. The default null is left for backwards compatibil ty.706 * the headers. The default null is left for backwards compatibility. 671 707 */ 672 708 public function setHttpHeaders($httpHeaders = null) … … 749 785 } 750 786 751 787 752 788 /** 753 789 * Set CloudFront headers 754 790 * http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/header-caching.html#header-caching-web-device 755 * 791 * 756 792 * @param array $cfHeaders List of HTTP headers 757 793 * … … 791 827 792 828 /** 829 * @param string $userAgent 830 * @return string 831 */ 832 private function prepareUserAgent($userAgent) { 833 $userAgent = trim($userAgent); 834 $userAgent = substr($userAgent, 0, 500); 835 return $userAgent; 836 } 837 838 /** 793 839 * Set the User-Agent to be used. 794 840 * … … 803 849 804 850 if (false === empty($userAgent)) { 805 return $this->userAgent = $ userAgent;851 return $this->userAgent = $this->prepareUserAgent($userAgent); 806 852 } else { 807 853 $this->userAgent = null; … … 813 859 814 860 if (!empty($this->userAgent)) { 815 return $this->userAgent = trim($this->userAgent);861 return $this->userAgent = $this->prepareUserAgent($this->userAgent); 816 862 } 817 863 } … … 1070 1116 /** 1071 1117 * Search for a certain key in the rules array. 1072 * If the key is found the try to match the corresponding1118 * If the key is found then try to match the corresponding 1073 1119 * regex against the User-Agent. 1074 1120 * -
mobile-redirect-plus-lite/trunk/includes/settings.php
r1184365 r2033061 1 1 <?php 2 3 2 add_action( 'admin_menu', 'mobi_redirect_menu_lite' ); 4 3 function mobi_redirect_menu_lite(){ … … 8 7 ?> 9 8 <div class="wrap"> 10 <h2> WP Mobile Redirect Options</h2>11 <form action="options.php" method="POST" style="float: left; min-width: 800px;">9 <h2><?php _e('WP Mobile Redirect Options','mobiplus-lite');?></h2> 10 <form action="options.php" method="POST" class="mprl-form"> 12 11 <?php settings_fields( 'mobi-setting-group-lite' ); ?> 13 12 <?php do_settings_sections( 'mobi-redirect-plus-lite' ); ?> 14 13 <?php submit_button( ); ?> 15 14 </form> 16 <div style="float: left; max-width: 250px;">17 <a href="http ://bitly.com/redirect-plus"><?php echo '<img style="margin-top: 20px;" src="' . plugins_url( 'images/banner.jpg', __FILE__ ) . '" > '; ?></a>18 <a href="http ://bitly.com/redirect-plus"><?php echo '<img style="max-width: 250px; margin-top: 10px;" src="' . plugins_url( 'images/banner2.jpg', __FILE__ ) . '" > '; ?></a>15 <div class="mprl-premium"> 16 <a href="https://goo.gl/mCo9LJ"><?php echo '<img class="mprl-premium-1" src="' . plugins_url( 'images/banner.jpg', __FILE__ ) . '" > '; ?></a> 17 <a href="https://goo.gl/mCo9LJ"><?php echo '<img class="mprl-premium-2" src="' . plugins_url( 'images/banner2.jpg', __FILE__ ) . '" > '; ?></a> 19 18 </div> 20 19 <br/><br/> … … 26 25 function mobi_redirect_init_lite(){ 27 26 register_setting( 'mobi-setting-group-lite', 'mobi-setting-lite' ); 28 add_settings_section( 'section-main-lite', 'Main Settings', 'main_setting_callback_lite', 'mobi-redirect-plus-lite' ); 29 add_settings_field( 'mobi-plus-lite', 'Redirect To Mobile', 'redirect_mobile_callback_lite', 'mobi-redirect-plus-lite', 'section-main-lite' ); 30 add_settings_field( 'mobi-link-lite', 'Mobile Website Link', 'mobile_link_callback_lite', 'mobi-redirect-plus-lite', 'section-main-lite' ); 31 add_settings_field( 'mobi-tablet-lite', 'Exclude Tablets Redirect', 'redirect_tablet_callback_lite', 'mobi-redirect-plus-lite', 'section-main-lite' ); 32 add_settings_field( 'mobi-back-main-lite', 'Back to full version website', 'redirect_back_main_lite', 'mobi-redirect-plus-lite', 'section-main-lite' ); 27 add_settings_section( 'section-main-lite', __('Main Settings','mobiplus-lite'), 'main_setting_callback_lite', 'mobi-redirect-plus-lite' ); 28 add_settings_field( 'mobi-plus-lite', __('Redirect To Mobile','mobiplus-lite'), 'redirect_mobile_callback_lite', 'mobi-redirect-plus-lite', 'section-main-lite' ); 29 add_settings_field( 'mobi-specific-page-lite', __('Redirect page','mobiplus-lite'), 'redirect_specific_page_lite', 'mobi-redirect-plus-lite', 'section-main-lite' ); 30 add_settings_field( 'mobi-link-lite', __('Mobile Website Link','mobiplus-lite'), 'mobile_link_callback_lite', 'mobi-redirect-plus-lite', 'section-main-lite' ); 31 add_settings_field( 'mobi-tablet-lite', __('Exclude Tablets Redirect','mobiplus-lite'), 'redirect_tablet_callback_lite', 'mobi-redirect-plus-lite', 'section-main-lite' ); 32 add_settings_field( 'mobi-back-main-lite', __('Back to full version website','mobiplus-lite'), 'redirect_back_main_lite', 'mobi-redirect-plus-lite', 'section-main-lite' ); 33 33 34 34 35 35 function main_setting_callback_lite(){ 36 echo 'Active Radio button to enable/disable mobile redirection. Then enter your mobile site URL in the field below';36 _e('Active Radio button to enable/disable mobile redirection. Then enter your mobile site URL in the field below','mobiplus-lite'); 37 37 } 38 38 39 function redirect_mobile_callback_lite(){ 39 40 $setting = (array)get_option('mobi-setting-lite');?> 40 <input type="radio" name="mobi-setting-lite[redirect]" value="yes" <?php checked('yes', $setting['redirect']); ?> /> Active41 <input type="radio" name="mobi-setting-lite[redirect]" value="no" <?php checked('no', $setting['redirect']); ?> /> Inactive41 <input type="radio" name="mobi-setting-lite[redirect]" value="yes" <?php checked('yes', $setting['redirect']); ?> /><?php _e('Active','mobiplus-lite');?> 42 <input type="radio" name="mobi-setting-lite[redirect]" value="no" <?php checked('no', $setting['redirect']); ?> /><?php _e('Inactive','mobiplus-lite');?> 42 43 <?php 43 44 } … … 46 47 $link = esc_attr( $setting['link'] ); 47 48 echo "<input type='text' class='regular-text' name='mobi-setting-lite[link]' value='$link' />"; 48 echo '<p class="description"> Enter mobile site URL like http://m.google.com</p>';49 echo '<p class="description">'._('Enter mobile site URL like http://m.google.com','mobiplus-lite').'</p>'; 49 50 } 50 51 51 52 function redirect_tablet_callback_lite(){ 52 53 $setting = (array)get_option('mobi-setting-lite');?> 53 <input type="radio" name="mobi-setting-lite[redirect_tab]" value="yes" <?php checked('yes', $setting['redirect_tab']); ?> /> Yes54 <input type="radio" name="mobi-setting-lite[redirect_tab]" value="no" <?php checked('no', $setting['redirect_tab']); ?> /> No54 <input type="radio" name="mobi-setting-lite[redirect_tab]" value="yes" <?php checked('yes', $setting['redirect_tab']); ?> /><?php _e('Yes','mobiplus-lite');?> 55 <input type="radio" name="mobi-setting-lite[redirect_tab]" value="no" <?php checked('no', $setting['redirect_tab']); ?> /><?php _e('No','mobiplus-lite');?> 55 56 <?php 56 echo '<p class="description"> If you want to stop redirection for Tablet then check yes (default is no)</p>';57 echo '<p class="description">'._('If you want to stop redirection for Tablet then check yes (default is no)','mobiplus-lite').'</p>'; 57 58 } 59 60 //Redirect Page Option 61 function redirect_specific_page_lite(){ 62 $setting = (array)get_option('mobi-setting-lite'); 63 @$relink = esc_attr( $setting['redirect_page'] ); 64 if($relink === 'no'){ 65 $specific_class = 'mprl-specific-page'; 66 }else{ 67 $specific_class = ''; 68 } 69 ?> 70 <input type="radio" onclick="javascript:yesnoCheck();" id="yesCheck" name="mobi-setting-lite[redirect_page]" value="yes" <?php checked('yes', @$setting['redirect_page']); ?> /><?php _e('Full Website','mobiplus-lite');?> 71 <input type="radio" onclick="javascript:yesnoCheck();" id="noCheck" name="mobi-setting-lite[redirect_page]" value="no" <?php checked('no', @$setting['redirect_page']); ?> /><?php _e('Specific Page','mobiplus-lite');?> 72 <input type='text' class='regular-text mprl-none <?php echo $specific_class;?>' id="spacific-page" name='mobi-setting-lite[specific_page]' value='<?php echo @$setting['specific_page'];?>' /> 73 <?php 74 echo '<p class="description spefic-desc">'.__('Option for redirecting your Full website or A specific page. If you choose specific page, please add the page URL in the field','mobiplus-lite').'</p>'; 75 } 76 58 77 //full version website 59 78 function redirect_back_main_lite(){ 60 echo "<div style='background:#408CEA;color:#FFFFFF;font-weight:bold;min-height:21px;padding:3px 5px;width:338px;'>";79 echo "<div class='mprl-site-back'>"; 61 80 echo get_site_url(); 62 81 echo "/?main=true</div>"; 63 echo '<p class="description"> Place this link in mobile website for Redirect back mobile visitor to main website</p>';82 echo '<p class="description">'.__('Place this link in mobile website for Redirect back mobile visitor to main website','mobiplus-lite').'</p>'; 64 83 } 65 84 -
mobile-redirect-plus-lite/trunk/mobi.php
r1184365 r2033061 4 4 Plugin URI: http://wordpress.org/plugins/mobile-redirect-plus-lite/ 5 5 Description: Detect mobile device and redirect to mobile optimize website. You can also choose whether or not to redirect tablets by enabling or disabling the option. This plugin also gives you the ability to redirect back for viewing full version website. 6 Version: 2. 56 Version: 2.6 7 7 Author: Iqbal Bary <contact@iqbalbary.com> 8 8 Author URI: http://iqbalbary.com … … 11 11 require_once 'includes/settings.php'; 12 12 13 add_action('init', 'mobi_plus_redirect_lite'); 14 function mobi_plus_redirect_lite() { 15 //call the script 16 require_once 'includes/Mobile_Detect.php'; 17 $detect_lite = new Mobile_Detect_Plus_Lite; 13 if ( ! function_exists( 'mobi_plus_redirect_lite' ) ){ 14 function mobi_plus_redirect_lite() { 15 //textdomain 16 load_plugin_textdomain( 'mobiplus-lite', false, dirname(plugin_basename(__FILE__)). '/languages/' ); 17 //call the script 18 require_once 'includes/Mobile_Detect.php'; 19 $detect_lite = new Mobile_Detect_Plus_Lite; 18 20 19 //Get all option for Redirect setting20 $red_plus_lite = (array)get_option('mobi-setting-lite');21 //Get all option for Redirect setting 22 $red_plus_lite = (array)get_option('mobi-setting-lite'); 21 23 22 //Check the session23 $session_check_lite = $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];24 if(substr_count($session_check_lite, 'main=true')>0){25 setcookie('fullsite','true');26 return;27 }24 //Check the session 25 $session_check_lite = $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; 26 if(substr_count($session_check_lite, 'main=true')>0){ 27 setcookie('fullsite','true'); 28 return; 29 } 28 30 29 //Check and Redirect 30 if(!isset($_COOKIE['fullsite']) && $red_plus_lite['redirect'] === 'yes'){ 31 //Check Tablet 32 if($detect_lite->isTablet()){ 33 if($red_plus_lite['redirect_tab'] === 'yes'){ 34 return; 35 }else{ 31 //Check Specific Page 32 $check_url_lite = str_replace('http://', '', $session_check_lite); 33 $check_url_lite = str_replace('https://', '', $check_url_lite); 34 $check_url_lite = str_replace('www.', '', $check_url_lite); 35 36 @$specific_page_lite = str_replace('http://', '', $red_plus_lite['specific_page']); 37 @$specific_page_lite = str_replace('https://', '', $specific_page_lite); 38 @$specific_page_lite = str_replace('www.', '', $specific_page_lite); 39 40 if(@$red_plus_lite['redirect_page'] === 'no' && $check_url_lite != $specific_page_lite ){ 41 return; 42 } 43 44 //Check and Redirect 45 if(!isset($_COOKIE['fullsite']) && $red_plus_lite['redirect'] === 'yes'){ 46 //Check Tablet 47 if($detect_lite->isTablet()){ 48 if($red_plus_lite['redirect_tab'] === 'yes'){ 49 return; 50 }else{ 51 $link_redirect_lite = $red_plus_lite['link']; 52 wp_redirect( $link_redirect_lite, 302 ); 53 exit(); 54 } 55 } 56 57 //Check mobile 58 if($detect_lite->isMobile()){ 36 59 $link_redirect_lite = $red_plus_lite['link']; 37 60 wp_redirect( $link_redirect_lite, 302 ); 38 exit(); 61 exit(); 39 62 } 40 63 } 64 } 41 65 42 //Check mobile 43 if($detect_lite->isMobile()){ 44 $link_redirect_lite = $red_plus_lite['link']; 45 wp_redirect( $link_redirect_lite, 302 ); 46 exit(); 47 } 48 } 66 add_action('init', 'mobi_plus_redirect_lite'); 49 67 } 68 69 70 function mobile_plus_redirect_lite_scripts($hook) { 71 if ( 'settings_page_mobile-redirect-plus-lite' != $hook ) { 72 return; 73 } 74 wp_enqueue_style('mobile_plus_redirect_lite', plugins_url('includes/mobile-plus-redirect-lite.css', __FILE__)); 75 wp_enqueue_script( 'mobile_plus_redirect_lite_script', plugins_url('includes/mobile-plus-redirect-lite.js', __FILE__)); 76 } 77 add_action( 'admin_enqueue_scripts', 'mobile_plus_redirect_lite_scripts' ); -
mobile-redirect-plus-lite/trunk/readme.txt
r1184365 r2033061 3 3 Plugin Name: WP Mobile Redirect 4 4 Plugin URI: http://iqbalbary.com/item/wp-redirect/ 5 Tags: redirect, mobile redirect, tablet redirect, wp mobile, android redirect, iphone redirect, ipad redirect, wordpress mobile5 Tags: redirect, mobile redirect, tablet redirect, android redirect, iphone redirect 6 6 Author URI: http://iqbalbary.com 7 7 Author: Iqbal Bary 8 8 Requires at least: 3.0.1 9 Tested up to: 4.2.210 Stable tag: 2. 59 Tested up to: 5.0.3 10 Stable tag: 2.6 11 11 License: GPLv2 or later 12 12 License URI: http://www.gnu.org/licenses/gpl-2.0.html … … 16 16 == Description == 17 17 18 Detect mobile device and redirect to mobile optimize website. You can also choose whether or not to redirect tablets by enabling or disabling the check-box option. This plugin also gives you the ability to redirect back for viewing full version website. Place a link "http://example.com/?main=true" in your mobile website for that. 18 Detect mobile device and redirect to mobile optimize website. You can also choose whether or not to redirect tablets by enabling or disabling the check-box option. 19 20 This plugin also gives you the ability to redirect back for viewing full version website. Place a link `http://example.com/?main=true` in your mobile website for that. 21 22 = Features = 23 * Redirect Full website to mobile optimized website 24 * Redirect One Specific page to mobile optimzed website 25 * Redirect within same WordPress website 26 * Exclude or include Tablets redirection 27 * Google recommended 302 redirects 28 * Option to view full site for your mobile user. 19 29 20 30 == Installation == … … 29 39 == Frequently Asked Questions == 30 40 41 = I activated the plugin and nothing happened? = 42 Please setup the mobile redirect setting first and it will redirect mobile users. 43 44 = I setup the settings but still not working? = 45 It might be a caching issue. Please clear your cache and try again. If still not working, please contact us for suppport. 46 47 = I have mobile page within same WordPress site. Is it possible to redirect within my WordPress site? = 48 Yes, you can redirect within same WordPress site but for that you have to select `specific page` as 'Redirect page' and `Mobile Website Link` link will be your destination page. 49 50 = How can I give my users the option to view the full site = 51 Please place this link `http://yourdomain.com/?main=true` on your mobile page and your visitor can check full website via this link. 52 31 53 32 54 == Screenshots == … … 36 58 == Changelog == 37 59 60 = 2.6 = 61 * Bug Fix & Script Update 38 62 = 2.5 = 39 63 * Bug Fix
Note: See TracChangeset
for help on using the changeset viewer.