Changeset 1184365
- Timestamp:
- 06/19/2015 06:06:09 PM (11 years ago)
- Location:
- mobile-redirect-plus-lite/trunk
- Files:
-
- 3 added
- 4 edited
-
includes/Mobile_Detect.php (modified) (45 diffs)
-
includes/images (added)
-
includes/images/banner.jpg (added)
-
includes/images/banner2.jpg (added)
-
includes/settings.php (modified) (1 diff)
-
mobi.php (modified) (2 diffs)
-
readme.txt (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
mobile-redirect-plus-lite/trunk/includes/Mobile_Detect.php
r983434 r1184365 9 9 * It uses the User-Agent string combined with specific HTTP headers to detect the mobile environment. 10 10 * 11 * @author Current authors: Serban Ghita <serbanghita@gmail.com>, Nick Ilyin <nick.ilyin@gmail.com> 11 * @author Current authors: Serban Ghita <serbanghita@gmail.com> 12 * Nick Ilyin <nick.ilyin@gmail.com> 13 * 12 14 * Original author: Victor Stanciu <vic.stanciu@gmail.com> 13 15 * … … 21 23 * HOWTO: https://github.com/serbanghita/Mobile-Detect/wiki/Code-examples 22 24 * 23 * @version 2.8. 325 * @version 2.8.15 24 26 */ 25 27 … … 65 67 * Stores the version number of the current release. 66 68 */ 67 const VERSION = '2.8. 3';69 const VERSION = '2.8.15'; 68 70 69 71 /** … … 76 78 */ 77 79 const VERSION_TYPE_FLOAT = 'float'; 80 81 /** 82 * A cache for resolved matches 83 * @var array 84 */ 85 protected $cache = array(); 78 86 79 87 /** … … 88 96 */ 89 97 protected $httpHeaders = array(); 98 99 /** 100 * CloudFront headers. E.g. CloudFront-Is-Desktop-Viewer, CloudFront-Is-Mobile-Viewer & CloudFront-Is-Tablet-Viewer. 101 * @var array 102 */ 103 protected $cloudfrontHeaders = array(); 104 105 /** 106 * The matching Regex. 107 * This is good for debug. 108 * @var string 109 */ 110 protected $matchingRegex = null; 111 112 /** 113 * The matches extracted from the regex expression. 114 * This is good for debug. 115 * @var string 116 */ 117 protected $matchesArray = null; 90 118 91 119 /** … … 128 156 // Reported by Verizon, Vodafone proxy system. 129 157 'HTTP_X_MOBILE_GATEWAY' => null, 130 // Seen d this on HTC Sensation. @ref:SensationXE_Beats_Z715e.158 // Seen this on HTC Sensation. SensationXE_Beats_Z715e. 131 159 'HTTP_X_ATT_DEVICEID' => null, 132 160 // Seen this on a HTC. … … 140 168 */ 141 169 protected static $phoneDevices = array( 142 'iPhone' => '\biPhone .*|\biPod', // |\biTunes170 'iPhone' => '\biPhone\b|\biPod\b', // |\biTunes 143 171 'BlackBerry' => 'BlackBerry|\bBB10\b|rim[0-9]+', 144 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', 145 'Nexus' => 'Nexus One|Nexus S|Galaxy.*Nexus|Android.*Nexus.*Mobile ',173 'Nexus' => 'Nexus One|Nexus S|Galaxy.*Nexus|Android.*Nexus.*Mobile|Nexus 4|Nexus 5|Nexus 6', 146 174 // @todo: Is 'Dell Streak' a tablet or a phone? ;) 147 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', 148 '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 ',149 'Samsung' => 'Samsung|S GH-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',150 'LG' => '\bLG\b;|LG[- ]?(C800|C900|E400|E610|E900|E-900|F160|F180K|F180L|F180S|730|855|L160|LS 840|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)',151 'Sony' => 'SonyST|SonyLT|SonyEricsson|SonyEricssonLT15iv|LT18i|E10i|LT28h|LT26w|SonyEricssonMT27i ',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)', 179 'Sony' => 'SonyST|SonyLT|SonyEricsson|SonyEricssonLT15iv|LT18i|E10i|LT28h|LT26w|SonyEricssonMT27i|C5303|C6902|C6903|C6906|C6943|D2533', 152 180 'Asus' => 'Asus.*Galaxy|PadFone.*Mobile', 153 // @ref:http://www.micromaxinfo.com/mobiles/smartphones181 // http://www.micromaxinfo.com/mobiles/smartphones 154 182 // Added because the codes might conflict with Acer Tablets. 155 183 'Micromax' => 'Micromax.*\b(A210|A92|A88|A72|A111|A110Q|A115|A116|A110|A90S|A26|A51|A35|A54|A25|A27|A89|A68|A65|A57|A90)\b', 156 'Palm' => 'PalmSource|Palm', // avantgo|blazer|elaine|hiptop|plucker|xiino ; @todo - complete the regex. 184 // @todo Complete the regex. 185 'Palm' => 'PalmSource|Palm', // avantgo|blazer|elaine|hiptop|plucker|xiino ; 157 186 'Vertu' => 'Vertu|Vertu.*Ltd|Vertu.*Ascent|Vertu.*Ayxta|Vertu.*Constellation(F|Quest)?|Vertu.*Monika|Vertu.*Signature', // Just for fun ;) 158 // @ref:http://www.pantech.co.kr/en/prod/prodList.do?gbrand=VEGA (PANTECH)187 // http://www.pantech.co.kr/en/prod/prodList.do?gbrand=VEGA (PANTECH) 159 188 // Most of the VEGA devices are legacy. PANTECH seem to be newer devices based on Android. 160 189 'Pantech' => 'PANTECH|IM-A850S|IM-A840S|IM-A830L|IM-A830K|IM-A830S|IM-A820L|IM-A810K|IM-A810S|IM-A800S|IM-T100K|IM-A725L|IM-A780L|IM-A775C|IM-A770K|IM-A760S|IM-A750K|IM-A740S|IM-A730S|IM-A720L|IM-A710K|IM-A690L|IM-A690S|IM-A650S|IM-A630K|IM-A600S|VEGA PTL21|PT003|P8010|ADR910L|P6030|P6020|P9070|P4100|P9060|P5000|CDM8992|TXT8045|ADR8995|IS11PT|P2030|P6010|P8000|PT002|IS06|CDM8999|P9050|PT001|TXT8040|P2020|P9020|P2000|P7040|P7000|C790', 161 // @ref:http://www.fly-phone.com/devices/smartphones/ ; Included only smartphones.190 // http://www.fly-phone.com/devices/smartphones/ ; Included only smartphones. 162 191 'Fly' => 'IQ230|IQ444|IQ450|IQ440|IQ442|IQ441|IQ245|IQ256|IQ236|IQ255|IQ235|IQ245|IQ275|IQ240|IQ285|IQ280|IQ270|IQ260|IQ250', 163 'iMobile' => 'i-mobile (IQ|i-STYLE|idea|ZAA|Hitz)', 192 // 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', 194 'iMobile' => 'i-mobile (IQ|i-STYLE|idea|ZAA|Hitz)', 164 195 // Added simvalley mobile just for fun. They have some interesting devices. 165 // @ref:http://www.simvalley.fr/telephonie---gps-_22_telephonie-mobile_telephones_.html196 // http://www.simvalley.fr/telephonie---gps-_22_telephonie-mobile_telephones_.html 166 197 'SimValley' => '\b(SP-80|XT-930|SX-340|XT-930|SX-310|SP-360|SP60|SPT-800|SP-120|SPT-800|SP-140|SPX-5|SPX-8|SP-100|SPX-8|SPX-12)\b', 198 // Wolfgang - a brand that is sold by Aldi supermarkets. 199 // http://www.wolfgangmobile.com/ 200 'Wolfgang' => 'AT-B24D|AT-AS50HD|AT-AS40W|AT-AS55HD|AT-AS45q2|AT-B26D|AT-AS50Q', 167 201 'Alcatel' => 'Alcatel', 168 // @ref: http://en.wikipedia.org/wiki/Amoi 202 'Nintendo' => 'Nintendo 3DS', 203 // http://en.wikipedia.org/wiki/Amoi 169 204 'Amoi' => 'Amoi', 170 // @ref:http://en.wikipedia.org/wiki/INQ205 // http://en.wikipedia.org/wiki/INQ 171 206 'INQ' => 'INQ', 172 // @Tapatalk is a mobile app; @ref:http://support.tapatalk.com/threads/smf-2-0-2-os-and-browser-detection-plugin-and-tapatalk.15565/#post-79039207 // @Tapatalk is a mobile app; http://support.tapatalk.com/threads/smf-2-0-2-os-and-browser-detection-plugin-and-tapatalk.15565/#post-79039 173 208 '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', 174 209 ); … … 181 216 protected static $tabletDevices = array( 182 217 'iPad' => 'iPad|iPad.*Mobile', // @todo: check for mobile friendly emails topic. 183 'NexusTablet' => 'Android.*Nexus[\s]+(7| 10)|^.*Android.*Nexus(?:(?!Mobile).)*$',184 '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- I9205|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-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', // SCH-P709|SCH-P729|SM-T2558- Samsung Mega - treat them like a regular phone.185 // @reference: http://www.labnol.org/software/kindle-user-agent-string/20378/186 'Kindle' => 'Kindle|Silk.*Accelerated|Android.*\b(KFOT|KFTT|KFJWI|KFJWA|KFOTE|KFSOWI|KFTHWI|KFTHWA|KFAPWI|KFAPWA|WFJWAE )\b',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. 220 // 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', 187 222 // Only the Surface tablets with Windows RT are considered mobile. 188 // @ref:http://msdn.microsoft.com/en-us/library/ie/hh920767(v=vs.85).aspx189 'SurfaceTablet' => 'Windows NT [0-9.]+; ARM; ',190 // @ref:http://shopping1.hp.com/is-bin/INTERSHOP.enfinity/WFS/WW-USSMBPublicStore-Site/en_US/-/USD/ViewStandardCatalog-Browse?CatalogCategoryID=JfIQ7EN5lqMAAAEyDcJUDwMT223 // http://msdn.microsoft.com/en-us/library/ie/hh920767(v=vs.85).aspx 224 'SurfaceTablet' => 'Windows NT [0-9.]+; ARM;.*(Tablet|ARMBJS)', 225 // http://shopping1.hp.com/is-bin/INTERSHOP.enfinity/WFS/WW-USSMBPublicStore-Site/en_US/-/USD/ViewStandardCatalog-Browse?CatalogCategoryID=JfIQ7EN5lqMAAAEyDcJUDwMT 191 226 'HPTablet' => 'HP Slate (7|8|10)|HP ElitePad 900|hp-tablet|EliteBook.*Touch|HP 8|Slate 21|HP SlateBook 10', 192 // @note: watch out for PadFone, see #132 193 '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|TX201LA', 227 // Watch out for PadFone, see #132. 228 // 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 | K017 |ME572C|ME103K|ME170C|ME171C|\bME70C\b|ME581C|ME581CL|ME8510C|ME181C', 194 230 'BlackBerryTablet' => 'PlayBook|RIM Tablet', 195 'HTCtablet' => 'HTC Flyer|HTC Jetstream|HTC-P715a|HTC EVO View 4G|PG41200',231 'HTCtablet' => 'HTC_Flyer_P512|HTC Flyer|HTC Jetstream|HTC-P715a|HTC EVO View 4G|PG41200|PG09410', 196 232 'MotorolaTablet' => 'xoom|sholest|MZ615|MZ605|MZ505|MZ601|MZ602|MZ603|MZ604|MZ606|MZ607|MZ608|MZ609|MZ615|MZ616|MZ617', 197 233 'NookTablet' => 'Android.*Nook|NookColor|nook browser|BNRV200|BNRV200A|BNTV250|BNTV250A|BNTV400|BNTV600|LogicPD Zoom2', 198 // @ref: http://www.acer.ro/ac/ro/RO/content/drivers 199 // @ref: http://www.packardbell.co.uk/pb/en/GB/content/download (Packard Bell is part of Acer) 200 // @ref: http://us.acer.com/ac/en/US/content/group/tablets 201 // @note: Can conflict with Micromax and Motorola phones codes. 202 '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', 203 // @ref: http://eu.computers.toshiba-europe.com/innovation/family/Tablets/1098744/banner_id/tablet_footerlink/ 204 // @ref: http://us.toshiba.com/tablets/tablet-finder 205 // @ref: http://www.toshiba.co.jp/regza/tablet/ 234 // http://www.acer.ro/ac/ro/RO/content/drivers 235 // http://www.packardbell.co.uk/pb/en/GB/content/download (Packard Bell is part of Acer) 236 // http://us.acer.com/ac/en/US/content/group/tablets 237 // http://www.acer.de/ac/de/DE/content/models/tablets/ 238 // 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', 240 // http://eu.computers.toshiba-europe.com/innovation/family/Tablets/1098744/banner_id/tablet_footerlink/ 241 // http://us.toshiba.com/tablets/tablet-finder 242 // http://www.toshiba.co.jp/regza/tablet/ 206 243 'ToshibaTablet' => 'Android.*(AT100|AT105|AT200|AT205|AT270|AT275|AT300|AT305|AT1S5|AT500|AT570|AT700|AT830)|TOSHIBA.*FOLIO', 207 // @ref:http://www.nttdocomo.co.jp/english/service/developer/smart_phone/technical_info/spec/index.html208 // @ref:http://www.lg.com/us/tablets209 'LGTablet' => '\bL-06C|LG-V90 0|LG-V500|LG-V909|LG-V500|LG-V510|LG-VK810\b',244 // http://www.nttdocomo.co.jp/english/service/developer/smart_phone/technical_info/spec/index.html 245 // http://www.lg.com/us/tablets 246 'LGTablet' => '\bL-06C|LG-V909|LG-V900|LG-V700|LG-V510|LG-V500|LG-V410|LG-V400|LG-VK810\b', 210 247 'FujitsuTablet' => 'Android.*\b(F-01D|F-02F|F-05E|F-10D|M532|Q572)\b', 211 248 // Prestigio Tablets http://www.prestigio.com/support 212 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', 213 // @ref: http://support.lenovo.com/en_GB/downloads/default.page?# 214 'LenovoTablet' => 'Idea(Tab|Pad)( A1|A10| K1|)|ThinkPad([ ]+)?Tablet|Lenovo.*(S2109|S2110|S5000|S6000|K3011|A3000|A3500|A1000|A2107|A2109|A1107|A7600|B6000|B8000|B8080)(-|)(FL|F|HV|H|)', 215 // @ref: http://www.yarvik.com/en/matrix/tablets/ 250 // 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|)', 252 // http://www.dell.com/support/home/us/en/04/Products/tab_mob/tablets 253 'DellTablet' => 'Venue 11|Venue 8|Venue 7|Dell Streak 10|Dell Streak 7', 254 // http://www.yarvik.com/en/matrix/tablets/ 216 255 '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', 217 256 'MedionTablet' => 'Android.*\bOYO\b|LIFE.*(P9212|P9514|P9516|S9512)|LIFETAB', 218 'ArnovaTablet' => 'AN10G2|AN7bG3|AN7fG3|AN8G3|AN8cG3|AN7G3|AN9G3|AN7dG3|AN7dG3ST|AN7dG3ChildPad|AN10bG3|AN10bG3DT ',257 'ArnovaTablet' => 'AN10G2|AN7bG3|AN7fG3|AN8G3|AN8cG3|AN7G3|AN9G3|AN7dG3|AN7dG3ST|AN7dG3ChildPad|AN10bG3|AN10bG3DT|AN9G2', 219 258 // http://www.intenso.de/kategorie_en.php?kategorie=33 220 259 // @todo: http://www.nbhkdz.com/read/b8e64202f92a2df129126bff.html - investigate … … 223 262 'IRUTablet' => 'M702pro', 224 263 'MegafonTablet' => 'MegaFon V9|\bZTE V9\b|Android.*\bMT7A\b', 225 // @ref:http://www.e-boda.ro/tablete-pc.html264 // http://www.e-boda.ro/tablete-pc.html 226 265 'EbodaTablet' => 'E-Boda (Supreme|Impresspeed|Izzycomm|Essential)', 227 // @ref:http://www.allview.ro/produse/droseries/lista-tablete-pc/266 // http://www.allview.ro/produse/droseries/lista-tablete-pc/ 228 267 'AllViewTablet' => 'Allview.*(Viva|Alldro|City|Speed|All TV|Frenzy|Quasar|Shine|TX1|AX1|AX2)', 229 // @reference:http://wiki.archosfans.com/index.php?title=Main_Page268 // http://wiki.archosfans.com/index.php?title=Main_Page 230 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', 231 // @ref:http://www.ainol.com/plugin.php?identifier=ainol&module=product270 // http://www.ainol.com/plugin.php?identifier=ainol&module=product 232 271 'AinolTablet' => 'NOVO7|NOVO8|NOVO10|Novo7Aurora|Novo7Basic|NOVO7PALADIN|novo9-Spark', 233 272 // @todo: inspect http://esupport.sony.com/US/p/select-system.pl?DIRECTOR=DRIVER 234 // @ref: Readers http://www.atsuhiro-me.net/ebook/sony-reader/sony-reader-web-browser 235 // @ref: http://www.sony.jp/support/tablet/ 236 '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', 237 // @ref: db + http://www.cube-tablet.com/buy-products.html 273 // Readers http://www.atsuhiro-me.net/ebook/sony-reader/sony-reader-web-browser 274 // 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|SGP612', 276 // 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 'PhilipsTablet' => '\b(PI2010|PI3000|PI3100|PI3105|PI3110|PI3205|PI3210|PI3900|PI4010|PI7000|PI7100)\b', 278 // db + http://www.cube-tablet.com/buy-products.html 238 279 'CubeTablet' => 'Android.*(K8GT|U9GT|U10GT|U16GT|U17GT|U18GT|U19GT|U20GT|U23GT|U30GT)|CUBE U8GT', 239 // @ref:http://www.cobyusa.com/?p=pcat&pcat_id=3001280 // http://www.cobyusa.com/?p=pcat&pcat_id=3001 240 281 'CobyTablet' => 'MID1042|MID1045|MID1125|MID1126|MID7012|MID7014|MID7015|MID7034|MID7035|MID7036|MID7042|MID7048|MID7127|MID8042|MID8048|MID8127|MID9042|MID9740|MID9742|MID7022|MID7010', 241 // @ref:http://www.match.net.cn/products.asp282 // http://www.match.net.cn/products.asp 242 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', 243 // @ref: http://pdadb.net/index.php?m=pdalist&list=SMiT (NoName Chinese Tablets) 244 // @ref: http://www.imp3.net/14/show.php?itemid=20454 284 // http://www.msi.com/support 285 // @todo Research the Windows Tablets. 286 'MSITablet' => 'MSI \b(Primo 73K|Primo 73L|Primo 81L|Primo 77|Primo 93|Primo 75|Primo 76|Primo 73|Primo 81|Primo 91|Primo 90|Enjoy 71|Enjoy 7|Enjoy 10)\b', 287 // @todo http://www.kyoceramobile.com/support/drivers/ 288 // 'KyoceraTablet' => null, 289 // @todo http://intexuae.com/index.php/category/mobile-devices/tablets-products/ 290 // 'IntextTablet' => null, 291 // http://pdadb.net/index.php?m=pdalist&list=SMiT (NoName Chinese Tablets) 292 // http://www.imp3.net/14/show.php?itemid=20454 245 293 'SMiTTablet' => 'Android.*(\bMID\b|MID-560|MTV-T1200|MTV-PND531|MTV-P1101|MTV-PND530)', 246 // @ref:http://www.rock-chips.com/index.php?do=prod&pid=2294 // http://www.rock-chips.com/index.php?do=prod&pid=2 247 295 'RockChipTablet' => 'Android.*(RK2818|RK2808A|RK2918|RK3066)|RK2738|RK2808A', 248 // @ref:http://www.fly-phone.com/devices/tablets/ ; http://www.fly-phone.com/service/296 // http://www.fly-phone.com/devices/tablets/ ; http://www.fly-phone.com/service/ 249 297 'FlyTablet' => 'IQ310|Fly Vision', 250 // @ref:http://www.bqreaders.com/gb/tablets-prices-sale.html251 'bqTablet' => ' bq.*(Elcano|Curie|Edison|Maxwell|Kepler|Pascal|Tesla|Hypatia|Platon|Newton|Livingstone|Cervantes|Avant)|Maxwell.*Lite|Maxwell.*Plus',252 // @ref:http://www.huaweidevice.com/worldwide/productFamily.do?method=index&directoryId=5011&treeId=3290253 // @ref:http://www.huaweidevice.com/worldwide/downloadCenter.do?method=index&directoryId=3372&treeId=0&tb=1&type=software (including legacy tablets)298 // 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', 300 // http://www.huaweidevice.com/worldwide/productFamily.do?method=index&directoryId=5011&treeId=3290 301 // http://www.huaweidevice.com/worldwide/downloadCenter.do?method=index&directoryId=3372&treeId=0&tb=1&type=software (including legacy tablets) 254 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', 255 303 // Nec or Medias Tab … … 259 307 // Broncho Tablets: http://www.broncho.cn/ (hard to find) 260 308 'BronchoTablet' => 'Broncho.*(N701|N708|N802|a710)', 261 // @ref:http://versusuk.com/support.html309 // http://versusuk.com/support.html 262 310 'VersusTablet' => 'TOUCHPAD.*[78910]|\bTOUCHTAB\b', 263 // @ref:http://www.zync.in/index.php/our-products/tablet-phablets311 // http://www.zync.in/index.php/our-products/tablet-phablets 264 312 'ZyncTablet' => 'z1000|Z99 2G|z99|z930|z999|z990|z909|Z919|z900', 265 // @ref:http://www.positivoinformatica.com.br/www/pessoal/tablet-ypy/313 // http://www.positivoinformatica.com.br/www/pessoal/tablet-ypy/ 266 314 'PositivoTablet' => 'TB07STA|TB10STA|TB07FTA|TB10FTA', 267 // @ref:https://www.nabitablet.com/315 // https://www.nabitablet.com/ 268 316 'NabiTablet' => 'Android.*\bNabi', 269 317 'KoboTablet' => 'Kobo Touch|\bK080\b|\bVox\b Build|\bArc\b Build', … … 272 320 // Texet Tablets and Readers http://www.texet.ru/tablet/ 273 321 'TexetTablet' => 'NaviPad|TB-772A|TM-7045|TM-7055|TM-9750|TM-7016|TM-7024|TM-7026|TM-7041|TM-7043|TM-7047|TM-8041|TM-9741|TM-9747|TM-9748|TM-9751|TM-7022|TM-7021|TM-7020|TM-7011|TM-7010|TM-7023|TM-7025|TM-7037W|TM-7038W|TM-7027W|TM-9720|TM-9725|TM-9737W|TM-1020|TM-9738W|TM-9740|TM-9743W|TB-807A|TB-771A|TB-727A|TB-725A|TB-719A|TB-823A|TB-805A|TB-723A|TB-715A|TB-707A|TB-705A|TB-709A|TB-711A|TB-890HD|TB-880HD|TB-790HD|TB-780HD|TB-770HD|TB-721HD|TB-710HD|TB-434HD|TB-860HD|TB-840HD|TB-760HD|TB-750HD|TB-740HD|TB-730HD|TB-722HD|TB-720HD|TB-700HD|TB-500HD|TB-470HD|TB-431HD|TB-430HD|TB-506|TB-504|TB-446|TB-436|TB-416|TB-146SE|TB-126SE', 274 // @note:Avoid detecting 'PLAYSTATION 3' as mobile.322 // Avoid detecting 'PLAYSTATION 3' as mobile. 275 323 'PlaystationTablet' => 'Playstation.*(Portable|Vita)', 276 // @ref:http://www.trekstor.de/surftabs.html324 // http://www.trekstor.de/surftabs.html 277 325 'TrekstorTablet' => 'ST10416-1|VT10416-1|ST70408-1|ST702xx-1|ST702xx-2|ST80208|ST97216|ST70104-2|VT10416-2|ST10216-2A|SurfTab', 278 // @ref:http://www.pyleaudio.com/Products.aspx?%2fproducts%2fPersonal-Electronics%2fTablets326 // http://www.pyleaudio.com/Products.aspx?%2fproducts%2fPersonal-Electronics%2fTablets 279 327 'PyleAudioTablet' => '\b(PTBL10CEU|PTBL10C|PTBL72BC|PTBL72BCEU|PTBL7CEU|PTBL7C|PTBL92BC|PTBL92BCEU|PTBL9CEU|PTBL9CUK|PTBL9C)\b', 280 // @ref:http://www.advandigital.com/index.php?link=content-product&jns=JP001281 // @Note:because of the short codenames we have to include whitespaces to reduce the possible conflicts.328 // http://www.advandigital.com/index.php?link=content-product&jns=JP001 329 // because of the short codenames we have to include whitespaces to reduce the possible conflicts. 282 330 'AdvanTablet' => 'Android.* \b(E3A|T3X|T5C|T5B|T3E|T3C|T3B|T1J|T1F|T2A|T1H|T1i|E1C|T1-E|T5-A|T4|E1-B|T2Ci|T1-B|T1-D|O1-A|E1-A|T1-A|T3A|T4i)\b ', 283 // @ref:http://www.danytech.com/category/tablet-pc331 // http://www.danytech.com/category/tablet-pc 284 332 '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', 285 // @ref:http://www.galapad.net/product.html333 // http://www.galapad.net/product.html 286 334 'GalapadTablet' => 'Android.*\bG1\b', 287 // @ref:http://www.micromaxinfo.com/tablet/funbook335 // http://www.micromaxinfo.com/tablet/funbook 288 336 'MicromaxTablet' => 'Funbook|Micromax.*\b(P250|P560|P360|P362|P600|P300|P350|P500|P275)\b', 289 337 // http://www.karbonnmobiles.com/products_tablet.php 290 338 'KarbonnTablet' => 'Android.*\b(A39|A37|A34|ST8|ST10|ST7|Smart Tab3|Smart Tab2)\b', 291 // @ref:http://www.myallfine.com/Products.asp339 // http://www.myallfine.com/Products.asp 292 340 'AllFineTablet' => 'Fine7 Genius|Fine7 Shine|Fine7 Air|Fine8 Style|Fine9 More|Fine10 Joy|Fine11 Wide', 293 // @ref:http://www.proscanvideo.com/products-search.asp?itemClass=TABLET&itemnmbr=341 // http://www.proscanvideo.com/products-search.asp?itemClass=TABLET&itemnmbr= 294 342 'PROSCANTablet' => '\b(PEM63|PLT1023G|PLT1041|PLT1044|PLT1044G|PLT1091|PLT4311|PLT4311PL|PLT4315|PLT7030|PLT7033|PLT7033D|PLT7035|PLT7035D|PLT7044K|PLT7045K|PLT7045KB|PLT7071KG|PLT7072|PLT7223G|PLT7225G|PLT7777G|PLT7810K|PLT7849G|PLT7851G|PLT7852G|PLT8015|PLT8031|PLT8034|PLT8036|PLT8080K|PLT8082|PLT8088|PLT8223G|PLT8234G|PLT8235G|PLT8816K|PLT9011|PLT9045K|PLT9233G|PLT9735|PLT9760G|PLT9770G)\b', 295 // @ref:http://www.yonesnav.com/products/products.php343 // http://www.yonesnav.com/products/products.php 296 344 'YONESTablet' => 'BQ1078|BC1003|BC1077|RK9702|BC9730|BC9001|IT9001|BC7008|BC7010|BC708|BC728|BC7012|BC7030|BC7027|BC7026', 297 // @ref:http://www.cjshowroom.com/eproducts.aspx?classcode=004001001345 // http://www.cjshowroom.com/eproducts.aspx?classcode=004001001 298 346 // China manufacturer makes tablets for different small brands (eg. http://www.zeepad.net/index.html) 299 347 'ChangJiaTablet' => 'TPC7102|TPC7103|TPC7105|TPC7106|TPC7107|TPC7201|TPC7203|TPC7205|TPC7210|TPC7708|TPC7709|TPC7712|TPC7110|TPC8101|TPC8103|TPC8105|TPC8106|TPC8203|TPC8205|TPC8503|TPC9106|TPC9701|TPC97101|TPC97103|TPC97105|TPC97106|TPC97111|TPC97113|TPC97203|TPC97603|TPC97809|TPC97205|TPC10101|TPC10103|TPC10106|TPC10111|TPC10203|TPC10205|TPC10503', 300 // @ref:http://www.gloryunion.cn/products.asp301 // @ref:http://www.allwinnertech.com/en/apply/mobile.html302 // @ref:http://www.ptcl.com.pk/pd_content.php?pd_id=284 (EVOTAB)348 // http://www.gloryunion.cn/products.asp 349 // http://www.allwinnertech.com/en/apply/mobile.html 350 // http://www.ptcl.com.pk/pd_content.php?pd_id=284 (EVOTAB) 303 351 // @todo: Softwiner tablets? 304 352 // aka. Cute or Cool tablets. Not sure yet, must research to avoid collisions. 305 353 'GUTablet' => 'TX-A1301|TX-M9002|Q702|kf026', // A12R|D75A|D77|D79|R83|A95|A106C|R15|A75|A76|D71|D72|R71|R73|R77|D82|R85|D92|A97|D92|R91|A10F|A77F|W71F|A78F|W78F|W81F|A97F|W91F|W97F|R16G|C72|C73E|K72|K73|R96G 306 // @ref:http://www.pointofview-online.com/showroom.php?shop_mode=product_listing&category_id=118354 // http://www.pointofview-online.com/showroom.php?shop_mode=product_listing&category_id=118 307 355 'PointOfViewTablet' => 'TAB-P506|TAB-navi-7-3G-M|TAB-P517|TAB-P-527|TAB-P701|TAB-P703|TAB-P721|TAB-P731N|TAB-P741|TAB-P825|TAB-P905|TAB-P925|TAB-PR945|TAB-PL1015|TAB-P1025|TAB-PI1045|TAB-P1325|TAB-PROTAB[0-9]+|TAB-PROTAB25|TAB-PROTAB26|TAB-PROTAB27|TAB-PROTAB26XL|TAB-PROTAB2-IPS9|TAB-PROTAB30-IPS9|TAB-PROTAB25XXL|TAB-PROTAB26-IPS10|TAB-PROTAB30-IPS10', 308 // @ref:http://www.overmax.pl/pl/katalog-produktow,p8/tablety,c14/356 // http://www.overmax.pl/pl/katalog-produktow,p8/tablety,c14/ 309 357 // @todo: add more tests. 310 358 'OvermaxTablet' => 'OV-(SteelCore|NewBase|Basecore|Baseone|Exellen|Quattor|EduTab|Solution|ACTION|BasicTab|TeddyTab|MagicTab|Stream|TB-08|TB-09)', 311 // @ref:http://hclmetablet.com/India/index.php359 // http://hclmetablet.com/India/index.php 312 360 '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', 313 // @ref:http://www.edigital.hu/Tablet_es_e-book_olvaso/Tablet-c18385.html361 // http://www.edigital.hu/Tablet_es_e-book_olvaso/Tablet-c18385.html 314 362 'DPSTablet' => 'DPS Dream 9|DPS Dual 7', 315 // @ref:http://www.visture.com/index.asp363 // http://www.visture.com/index.asp 316 364 'VistureTablet' => 'V97 HD|i75 3G|Visture V4( HD)?|Visture V5( HD)?|Visture V10', 317 // @ref:http://www.mijncresta.nl/tablet365 // http://www.mijncresta.nl/tablet 318 366 'CrestaTablet' => 'CTP(-)?810|CTP(-)?818|CTP(-)?828|CTP(-)?838|CTP(-)?888|CTP(-)?978|CTP(-)?980|CTP(-)?987|CTP(-)?988|CTP(-)?989', 319 367 // MediaTek - http://www.mediatek.com/_en/01_products/02_proSys.php?cata_sn=1&cata1_sn=1&cata2_sn=309 … … 341 389 // i-mobile http://product.i-mobilephone.com/Mobile_Device 342 390 'iMobileTablet' => 'i-mobile i-note', 343 // @ref:http://www.tolino.de/de/vergleichen/391 // http://www.tolino.de/de/vergleichen/ 344 392 'TolinoTablet' => 'tolino tab [0-9.]+|tolino shine', 345 393 // AudioSonic - a Kmart brand … … 365 413 'ViewsonicTablet' => 'ViewPad 10pi|ViewPad 10e|ViewPad 10s|ViewPad E72|ViewPad7|ViewPad E100|ViewPad 7e|ViewSonic VB733|VB100a', 366 414 // http://www.odys.de/web/internet-tablet_en.html 367 'OdysTablet' => 'LOOX|XENO10|ODYS ( Space|-EVO|-Xpress)|Xelio( |)(10|7|)( |)(Pro|EXTREME|PHONETAB|PT2|)|NEO_QUAD10',415 'OdysTablet' => 'LOOX|XENO10|ODYS[ -](Space|EVO|Xpress|NOON)|\bXELIO\b|Xelio10Pro|XELIO7PHONETAB|XELIO10EXTREME|XELIOPT2|NEO_QUAD10', 368 416 // http://www.captiva-power.de/products.html#tablets-en 369 417 'CaptivaTablet' => 'CAPTIVA PAD', 370 418 // IconBIT - http://www.iconbit.com/products/tablets/ 371 419 'IconbitTablet' => 'NetTAB|NT-3702|NT-3702S|NT-3702S|NT-3603P|NT-3603P|NT-0704S|NT-0704S|NT-3805C|NT-3805C|NT-0806C|NT-0806C|NT-0909T|NT-0909T|NT-0907S|NT-0907S|NT-0902S|NT-0902S', 372 // @ref: http://www.tesco.com/direct/hudl/373 ' Hudl' => 'Hudl HT7S3',374 // @ref: http://www.telstra.com.au/home-phone/thub-2/375 ' TelstraTablet' => 'T-Hub2',420 // http://www.teclast.com/topic.php?channelID=70&topicID=140&pid=63 421 '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 // 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]+', 376 424 'JaytechTablet' => 'TPC-PA762', 377 425 'BlaupunktTablet' => 'Endeavour 800NG|Endeavour 1010', 378 '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|Tablet-PC-4|Tagi Tab', 426 // http://www.digma.ru/support/download/ 427 // @todo: Ebooks also (if requested) 428 'DigmaTablet' => '\b(iDx10|iDx9|iDx8|iDx7|iDxD7|iDxD8|iDsQ8|iDsQ7|iDsQ8|iDsD10|iDnD7|3TS804H|iDsQ11|iDj7|iDs10)\b', 429 // http://www.evolioshop.com/ro/tablete-pc.html 430 // http://www.evolio.ro/support/downloads_static.html?cat=2 431 // @todo: Research some more 432 'EvolioTablet' => 'ARIA_Mini_wifi|Aria[ _]Mini|Evolio X10|Evolio X7|Evolio X8|\bEvotab\b|\bNeura\b', 433 // @todo http://www.lavamobiles.com/tablets-data-cards 434 'LavaTablet' => 'QPAD E704|\bIvoryS\b|E-TAB IVORY|\bE-TAB\b', 435 // https://www.celkonmobiles.com/?_a=categoryphones&sid=2 436 'CelkonTablet' => 'CT695|CT888|CT[\s]?910|CT7 Tab|CT9 Tab|CT3 Tab|CT2 Tab|CT1 Tab|C820|C720|\bCT-1\b', 437 // http://www.wolderelectronics.com/productos/manuales-y-guias-rapidas/categoria-2-miTab 438 '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', 439 // http://www.mi.com/en 440 'MiTablet' => '\bMI PAD\b|\bHM NOTE 1W\b', 441 // http://www.nbru.cn/index.html 442 'NibiruTablet' => 'Nibiru M1|Nibiru Jupiter One', 443 // http://navroad.com/products/produkty/tablety/ 444 'NexoTablet' => 'NEXO NOVA|NEXO 10|NEXO AVIO|NEXO FREE|NEXO GO|NEXO EVO|NEXO 3G|NEXO SMART|NEXO KIDDO|NEXO MOBI', 445 // http://www.datawind.com/ubislate/ 446 'UbislateTablet' => 'UbiSlate[\s]?7C', 447 // http://www.pocketbook-int.com/ru/support 448 'PocketBookTablet' => 'Pocketbook', 449 // http://www.tesco.com/direct/hudl/ 450 'Hudl' => 'Hudl HT7S3', 451 // http://www.telstra.com.au/home-phone/thub-2/ 452 '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|\bJolla\b' 379 454 ); 380 455 … … 394 469 // http://wifeng.cn/?r=blog&a=view&id=106 395 470 // http://nicksnettravels.builttoroam.com/post/2011/01/10/Bogus-Windows-Phone-7-User-Agent-String.aspx 396 'WindowsPhoneOS' => 'Windows Phone 8.0|Windows Phone OS|XBLWP7|ZuneWP7', 471 // 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;', 397 473 'iOS' => '\biPhone.*Mobile|\biPod|\biPad', 398 474 // http://en.wikipedia.org/wiki/MeeGo … … 425 501 'Blazer' => 'Blazer', 426 502 // @reference: http://developer.apple.com/library/safari/#documentation/AppleApplications/Reference/SafariWebContent/OptimizingforSafarioniPhone/OptimizingforSafarioniPhone.html#//apple_ref/doc/uid/TP40006517-SW3 427 'Safari' => 'Version.*Mobile.*Safari|Safari.*Mobile ',428 // @ref:http://en.wikipedia.org/wiki/Midori_(web_browser)503 'Safari' => 'Version.*Mobile.*Safari|Safari.*Mobile|MobileSafari', 504 // http://en.wikipedia.org/wiki/Midori_(web_browser) 429 505 //'Midori' => 'midori', 430 506 'Tizen' => 'Tizen', … … 432 508 'baiduboxapp' => 'baiduboxapp', 433 509 'baidubrowser' => 'baidubrowser', 434 // @ref:https://github.com/serbanghita/Mobile-Detect/issues/7510 // https://github.com/serbanghita/Mobile-Detect/issues/7 435 511 'DiigoBrowser' => 'DiigoBrowser', 436 512 // http://www.puffinbrowser.com/index.php 437 513 'Puffin' => 'Puffin', 438 // @ref:http://mercury-browser.com/index.html514 // http://mercury-browser.com/index.html 439 515 'Mercury' => '\bMercury\b', 440 // @ref:http://en.wikipedia.org/wiki/Obigo_Browser516 // http://en.wikipedia.org/wiki/Obigo_Browser 441 517 'ObigoBrowser' => 'Obigo', 442 // @ref:http://en.wikipedia.org/wiki/NetFront518 // http://en.wikipedia.org/wiki/NetFront 443 519 'NetFront' => 'NF-Browser', 444 520 // @reference: http://en.wikipedia.org/wiki/Minimo … … 454 530 protected static $utilities = array( 455 531 // Experimental. When a mobile device wants to switch to 'Desktop Mode'. 456 // @ref: http://scottcate.com/technology/windows-phone-8-ie10-desktop-or-mobile/ 457 // @ref: https://github.com/serbanghita/Mobile-Detect/issues/57#issuecomment-15024011 532 // http://scottcate.com/technology/windows-phone-8-ie10-desktop-or-mobile/ 533 // https://github.com/serbanghita/Mobile-Detect/issues/57#issuecomment-15024011 534 // 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', 536 'MobileBot' => 'Googlebot-Mobile|AdsBot-Google-Mobile|YahooSeeker/M1A1-R2D2', 458 537 'DesktopMode' => 'WPDesktop', 459 538 'TV' => 'SonyDTV|HbbTV', // experimental 460 539 'WebKit' => '(webkit)[ /]([\w.]+)', 461 'Bot' => 'Googlebot|DoCoMo|YandexBot|bingbot|ia_archiver|AhrefsBot|Ezooms|GSLFbot|WBSearchBot|Twitterbot|TweetmemeBot|Twikle|PaperLiBot|Wotbox|UnwindFetchor|facebookexternalhit',462 'MobileBot' => 'Googlebot-Mobile|DoCoMo|YahooSeeker/M1A1-R2D2',463 540 // @todo: Include JXD consoles. 464 'Console' => '\b(Nintendo|Nintendo WiiU| PLAYSTATION|Xbox)\b',541 'Console' => '\b(Nintendo|Nintendo WiiU|Nintendo 3DS|PLAYSTATION|Xbox)\b', 465 542 'Watch' => 'SM-V700', 466 543 ); … … 514 591 'Firefox' => 'Firefox/[VER]', 515 592 'Fennec' => 'Fennec/[VER]', 516 // @reference: http://msdn.microsoft.com/en-us/library/ms537503(v=vs.85).aspx 517 'IE' => array('IEMobile/[VER];', 'IEMobile [VER]', 'MSIE [VER];'), 593 // http://msdn.microsoft.com/en-us/library/ms537503(v=vs.85).aspx 594 // https://msdn.microsoft.com/en-us/library/ie/hh869301(v=vs.85).aspx 595 'IE' => array('IEMobile/[VER];', 'IEMobile [VER]', 'MSIE [VER];', 'Trident/[0-9.]+;.*rv:[VER]'), 518 596 // http://en.wikipedia.org/wiki/NetFront 519 597 'NetFront' => 'NetFront/[VER]', … … 527 605 'baiduboxapp' => 'baiduboxapp/[VER]', 528 606 'baidubrowser' => 'baidubrowser/[VER]', 607 'Iron' => 'Iron/[VER]', 529 608 // @note: Safari 7534.48.3 is actually Version 5.1. 530 609 // @note: On BlackBerry the Version is overwriten by the OS. … … 540 619 541 620 // OS 542 'iOS' => ' \b OS\b [VER]',621 'iOS' => ' \bi?OS\b [VER][ ;]{1}', 543 622 'Android' => 'Android [VER]', 544 623 'BlackBerry' => array('BlackBerry[\w]+/[VER]', 'BlackBerry.*Version/[VER]', 'Version/[VER]'), … … 593 672 public function setHttpHeaders($httpHeaders = null) 594 673 { 595 // use global _SERVER if $httpHeaders aren't defined674 // use global _SERVER if $httpHeaders aren't defined 596 675 if (!is_array($httpHeaders) || !count($httpHeaders)) { 597 676 $httpHeaders = $_SERVER; 598 677 } 599 678 600 // clear existing headers679 // clear existing headers 601 680 $this->httpHeaders = array(); 602 681 603 // Only save HTTP headers. In PHP land, that means only _SERVER vars that604 // start with HTTP_.682 // Only save HTTP headers. In PHP land, that means only _SERVER vars that 683 // start with HTTP_. 605 684 foreach ($httpHeaders as $key => $value) { 606 if (substr($key, 0,5)== 'HTTP_') {685 if (substr($key, 0, 5) === 'HTTP_') { 607 686 $this->httpHeaders[$key] = $value; 608 687 } 609 688 } 689 690 // In case we're dealing with CloudFront, we need to know. 691 $this->setCfHeaders($httpHeaders); 610 692 } 611 693 … … 632 714 public function getHttpHeader($header) 633 715 { 634 // are we using PHP-flavored headers?716 // are we using PHP-flavored headers? 635 717 if (strpos($header, '_') === false) { 636 718 $header = str_replace('-', '_', $header); … … 638 720 } 639 721 640 // test the alternate, too722 // test the alternate, too 641 723 $altHeader = 'HTTP_' . $header; 642 724 … … 667 749 } 668 750 751 752 /** 753 * Set CloudFront headers 754 * http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/header-caching.html#header-caching-web-device 755 * 756 * @param array $cfHeaders List of HTTP headers 757 * 758 * @return boolean If there were CloudFront headers to be set 759 */ 760 public function setCfHeaders($cfHeaders = null) { 761 // use global _SERVER if $cfHeaders aren't defined 762 if (!is_array($cfHeaders) || !count($cfHeaders)) { 763 $cfHeaders = $_SERVER; 764 } 765 766 // clear existing headers 767 $this->cloudfrontHeaders = array(); 768 769 // Only save CLOUDFRONT headers. In PHP land, that means only _SERVER vars that 770 // start with cloudfront-. 771 $response = false; 772 foreach ($cfHeaders as $key => $value) { 773 if (substr(strtolower($key), 0, 16) === 'http_cloudfront_') { 774 $this->cloudfrontHeaders[strtoupper($key)] = $value; 775 $response = true; 776 } 777 } 778 779 return $response; 780 } 781 782 /** 783 * Retrieves the cloudfront headers. 784 * 785 * @return array 786 */ 787 public function getCfHeaders() 788 { 789 return $this->cloudfrontHeaders; 790 } 791 669 792 /** 670 793 * Set the User-Agent to be used. … … 676 799 public function setUserAgent($userAgent = null) 677 800 { 678 if (!empty($userAgent)) { 801 // Invalidate cache due to #375 802 $this->cache = array(); 803 804 if (false === empty($userAgent)) { 679 805 return $this->userAgent = $userAgent; 680 806 } else { 681 682 807 $this->userAgent = null; 683 684 808 foreach ($this->getUaHttpHeaders() as $altHeader) { 685 if ( !empty($this->httpHeaders[$altHeader])) { // @todo: should use getHttpHeader(), but it would be slow. (Serban)809 if (false === empty($this->httpHeaders[$altHeader])) { // @todo: should use getHttpHeader(), but it would be slow. (Serban) 686 810 $this->userAgent .= $this->httpHeaders[$altHeader] . " "; 687 811 } 688 812 } 689 813 690 return $this->userAgent = (!empty($this->userAgent) ? trim($this->userAgent) : null); 691 692 } 814 if (!empty($this->userAgent)) { 815 return $this->userAgent = trim($this->userAgent); 816 } 817 } 818 819 if (count($this->getCfHeaders()) > 0) { 820 return $this->userAgent = 'Amazon CloudFront'; 821 } 822 return $this->userAgent = null; 693 823 } 694 824 … … 718 848 } 719 849 720 if ($type != self::DETECTION_TYPE_MOBILE && $type != self::DETECTION_TYPE_EXTENDED) {850 if ($type !== self::DETECTION_TYPE_MOBILE && $type !== self::DETECTION_TYPE_EXTENDED) { 721 851 return; 722 852 } 723 853 724 854 $this->detectionType = $type; 855 } 856 857 public function getMatchingRegex() 858 { 859 return $this->matchingRegex; 860 } 861 862 public function getMatchesArray() 863 { 864 return $this->matchesArray; 725 865 } 726 866 … … 864 1004 865 1005 foreach ($this->getMobileHeaders() as $mobileHeader => $matchType) { 866 if ( isset($this->httpHeaders[$mobileHeader])) {867 if ( is_array($matchType['matches'])) {1006 if (isset($this->httpHeaders[$mobileHeader])) { 1007 if (is_array($matchType['matches'])) { 868 1008 foreach ($matchType['matches'] as $_match) { 869 if ( strpos($this->httpHeaders[$mobileHeader], $_match) !== false) {1009 if (strpos($this->httpHeaders[$mobileHeader], $_match) !== false) { 870 1010 return true; 871 1011 } … … 894 1034 public function __call($name, $arguments) 895 1035 { 896 // make sure the name starts with 'is', otherwise897 if (substr($name, 0, 2) != 'is') {1036 // make sure the name starts with 'is', otherwise 1037 if (substr($name, 0, 2) !== 'is') { 898 1038 throw new BadMethodCallException("No such method exists: $name"); 899 1039 } … … 909 1049 * Find a detection rule that matches the current User-agent. 910 1050 * 911 * @param null$userAgent deprecated1051 * @param null $userAgent deprecated 912 1052 * @return boolean 913 1053 */ … … 919 1059 continue; 920 1060 } 1061 921 1062 if ($this->match($_regex, $userAgent)) { 922 1063 return true; … … 930 1071 * Search for a certain key in the rules array. 931 1072 * If the key is found the try to match the corresponding 932 * regex agains the User-Agent.1073 * regex against the User-Agent. 933 1074 * 934 1075 * @param string $key 935 * @param null $userAgent deprecated936 * @return mixed937 */ 938 protected function matchUAAgainstKey($key , $userAgent = null)1076 * 1077 * @return boolean 1078 */ 1079 protected function matchUAAgainstKey($key) 939 1080 { 940 1081 // Make the keys lowercase so we can match: isIphone(), isiPhone(), isiphone(), etc. 941 1082 $key = strtolower($key); 942 943 //change the keys to lower case 944 $_rules = array_change_key_case($this->getRules());945 946 if (array_key_exists($key, $_rules)) { 947 if ( empty($_rules[$key])) {948 return null;1083 if (false === isset($this->cache[$key])) { 1084 1085 // change the keys to lower case 1086 $_rules = array_change_key_case($this->getRules()); 1087 1088 if (false === empty($_rules[$key])) { 1089 $this->cache[$key] = $this->match($_rules[$key]); 949 1090 } 950 1091 951 return $this->match($_rules[$key], $userAgent); 952 } 953 954 return false; 1092 if (false === isset($this->cache[$key])) { 1093 $this->cache[$key] = false; 1094 } 1095 } 1096 1097 return $this->cache[$key]; 955 1098 } 956 1099 … … 958 1101 * Check if the device is mobile. 959 1102 * Returns true if any type of mobile device detected, including special ones 960 * @param null $userAgentdeprecated961 * @param null $httpHeaders deprecated1103 * @param null $userAgent deprecated 1104 * @param null $httpHeaders deprecated 962 1105 * @return bool 963 1106 */ … … 971 1114 if ($userAgent) { 972 1115 $this->setUserAgent($userAgent); 1116 } 1117 1118 // Check specifically for cloudfront headers if the useragent === 'Amazon CloudFront' 1119 if ($this->getUserAgent() === 'Amazon CloudFront') { 1120 $cfHeaders = $this->getCfHeaders(); 1121 if(array_key_exists('HTTP_CLOUDFRONT_IS_MOBILE_VIEWER', $cfHeaders) && $cfHeaders['HTTP_CLOUDFRONT_IS_MOBILE_VIEWER'] === 'true') { 1122 return true; 1123 } 973 1124 } 974 1125 … … 993 1144 public function isTablet($userAgent = null, $httpHeaders = null) 994 1145 { 1146 // Check specifically for cloudfront headers if the useragent === 'Amazon CloudFront' 1147 if ($this->getUserAgent() === 'Amazon CloudFront') { 1148 $cfHeaders = $this->getCfHeaders(); 1149 if(array_key_exists('HTTP_CLOUDFRONT_IS_TABLET_VIEWER', $cfHeaders) && $cfHeaders['HTTP_CLOUDFRONT_IS_TABLET_VIEWER'] === 'true') { 1150 return true; 1151 } 1152 } 1153 995 1154 $this->setDetectionType(self::DETECTION_TYPE_MOBILE); 996 1155 … … 1009 1168 * @todo: The httpHeaders part is not yet used. 1010 1169 * 1011 * @param string$key1012 * @param string $userAgent deprecated1013 * @param string $httpHeaders deprecated1170 * @param string $key 1171 * @param string $userAgent deprecated 1172 * @param string $httpHeaders deprecated 1014 1173 * @return bool|int|null 1015 1174 */ … … 1047 1206 public function match($regex, $userAgent = null) 1048 1207 { 1049 // Escape the special character which is the delimiter. 1050 $regex = str_replace('/', '\/', $regex); 1051 1052 return (bool) preg_match('/'.$regex.'/is', (!empty($userAgent) ? $userAgent : $this->userAgent)); 1208 $match = (bool) preg_match(sprintf('#%s#is', $regex), (false === empty($userAgent) ? $userAgent : $this->userAgent), $matches); 1209 // If positive match is found, store the results for debug. 1210 if ($match) { 1211 $this->matchingRegex = $regex; 1212 $this->matchesArray = $matches; 1213 } 1214 1215 return $match; 1053 1216 } 1054 1217 … … 1103 1266 } 1104 1267 1105 // set the $type to the default if we don't recognize the type1106 if ($type != self::VERSION_TYPE_STRING && $type != self::VERSION_TYPE_FLOAT) {1268 // set the $type to the default if we don't recognize the type 1269 if ($type !== self::VERSION_TYPE_STRING && $type !== self::VERSION_TYPE_FLOAT) { 1107 1270 $type = self::VERSION_TYPE_STRING; 1108 1271 } … … 1111 1274 1112 1275 // Check if the property exists in the properties array. 1113 if ( array_key_exists($propertyName, $properties)) {1276 if (true === isset($properties[$propertyName])) { 1114 1277 1115 1278 // Prepare the pattern to be matched. … … 1121 1284 $propertyPattern = str_replace('[VER]', self::VER, $propertyMatchString); 1122 1285 1123 // Escape the special character which is the delimiter.1124 $propertyPattern = str_replace('/', '\/', $propertyPattern);1125 1126 1286 // Identify and extract the version. 1127 preg_match( '/'.$propertyPattern.'/is', $this->userAgent, $match);1128 1129 if ( !empty($match[1])) {1130 $version = ( $type == self::VERSION_TYPE_FLOAT ? $this->prepareVersionNo($match[1]) : $match[1]);1287 preg_match(sprintf('#%s#is', $propertyPattern), $this->userAgent, $match); 1288 1289 if (false === empty($match[1])) { 1290 $version = ($type == self::VERSION_TYPE_FLOAT ? $this->prepareVersionNo($match[1]) : $match[1]); 1131 1291 1132 1292 return $version; … … 1150 1310 1151 1311 if ( 1152 // Apple iOS 3.2-5.1 - Tested on the original iPad (4.3 / 5.0), iPad 2 (4.3), iPad 3 (5.1), original iPhone (3.1), iPhone 3 (3.2), 3GS (4.3), 4 (4.3 / 5.0), and 4S (5.1)1153 $this->is IOS() && $this->version('iPad', self::VERSION_TYPE_FLOAT)>=4.3 ||1154 $this->is IOS() && $this->version('iPhone', self::VERSION_TYPE_FLOAT)>=3.1||1155 $this->is IOS() && $this->version('iPod', self::VERSION_TYPE_FLOAT)>=3.1||1312 // Apple iOS 4-7.0 – Tested on the original iPad (4.3 / 5.0), iPad 2 (4.3 / 5.1 / 6.1), iPad 3 (5.1 / 6.0), iPad Mini (6.1), iPad Retina (7.0), iPhone 3GS (4.3), iPhone 4 (4.3 / 5.1), iPhone 4S (5.1 / 6.0), iPhone 5 (6.0), and iPhone 5S (7.0) 1313 $this->is('iOS') && $this->version('iPad', self::VERSION_TYPE_FLOAT) >= 4.3 || 1314 $this->is('iOS') && $this->version('iPhone', self::VERSION_TYPE_FLOAT) >= 4.3 || 1315 $this->is('iOS') && $this->version('iPod', self::VERSION_TYPE_FLOAT) >= 4.3 || 1156 1316 1157 1317 // Android 2.1-2.3 - Tested on the HTC Incredible (2.2), original Droid (2.2), HTC Aria (2.1), Google Nexus S (2.3). Functional on 1.5 & 1.6 but performance may be sluggish, tested on Google G1 (1.5) … … 1161 1321 ( $this->version('Android', self::VERSION_TYPE_FLOAT)>2.1 && $this->is('Webkit') ) || 1162 1322 1163 // Windows Phone 7-7.5 - Tested on the HTC Surround (7.0) HTC Trophy (7.5), LG-E900 (7.5), Nokia Lumia 800 1164 $this->version('Windows Phone OS', self::VERSION_TYPE_FLOAT)>=7.0 || 1165 1166 // Blackberry 7 - Tested on BlackBerry Torch 9810 1167 // Blackberry 6.0 - Tested on the Torch 9800 and Style 9670 1168 $this->is('BlackBerry') && $this->version('BlackBerry', self::VERSION_TYPE_FLOAT)>=6.0 || 1323 // Windows Phone 7.5-8 - Tested on the HTC Surround (7.5), HTC Trophy (7.5), LG-E900 (7.5), Nokia 800 (7.8), HTC Mazaa (7.8), Nokia Lumia 520 (8), Nokia Lumia 920 (8), HTC 8x (8) 1324 $this->version('Windows Phone OS', self::VERSION_TYPE_FLOAT) >= 7.5 || 1325 1326 // Tested on the Torch 9800 (6) and Style 9670 (6), BlackBerry® Torch 9810 (7), BlackBerry Z10 (10) 1327 $this->is('BlackBerry') && $this->version('BlackBerry', self::VERSION_TYPE_FLOAT) >= 6.0 || 1169 1328 // Blackberry Playbook (1.0-2.0) - Tested on PlayBook 1170 1329 $this->match('Playbook.*Tablet') || 1171 1330 1172 // Palm WebOS (1.4- 2.0) - Tested on the Palm Pixi (1.4), Pre (1.4), Pre 2 (2.0)1173 ( $this->version('webOS', self::VERSION_TYPE_FLOAT) >=1.4 && $this->match('Palm|Pre|Pixi') ) ||1331 // Palm WebOS (1.4-3.0) - Tested on the Palm Pixi (1.4), Pre (1.4), Pre 2 (2.0), HP TouchPad (3.0) 1332 ( $this->version('webOS', self::VERSION_TYPE_FLOAT) >= 1.4 && $this->match('Palm|Pre|Pixi') ) || 1174 1333 // Palm WebOS 3.0 - Tested on HP TouchPad 1175 1334 $this->match('hp.*TouchPad') || 1176 1335 1177 // Firefox Mobile (12 Beta) - Tested on Android 2.3 device1178 ( $this->is('Firefox') && $this->version('Firefox', self::VERSION_TYPE_FLOAT) >=12) ||1336 // Firefox Mobile 18 - Tested on Android 2.3 and 4.1 devices 1337 ( $this->is('Firefox') && $this->version('Firefox', self::VERSION_TYPE_FLOAT) >= 18 ) || 1179 1338 1180 1339 // Chrome for Android - Tested on Android 4.0, 4.1 device 1181 ( $this->is('Chrome') && $this->is('AndroidOS') && $this->version('Android', self::VERSION_TYPE_FLOAT) >=4.0 ) ||1340 ( $this->is('Chrome') && $this->is('AndroidOS') && $this->version('Android', self::VERSION_TYPE_FLOAT) >= 4.0 ) || 1182 1341 1183 1342 // Skyfire 4.1 - Tested on Android 2.3 device 1184 ( $this->is('Skyfire') && $this->version('Skyfire', self::VERSION_TYPE_FLOAT) >=4.1 && $this->is('AndroidOS') && $this->version('Android', self::VERSION_TYPE_FLOAT)>=2.3 ) ||1343 ( $this->is('Skyfire') && $this->version('Skyfire', self::VERSION_TYPE_FLOAT) >= 4.1 && $this->is('AndroidOS') && $this->version('Android', self::VERSION_TYPE_FLOAT) >= 2.3 ) || 1185 1344 1186 1345 // Opera Mobile 11.5-12: Tested on Android 2.3 1187 ( $this->is('Opera') && $this->version('Opera Mobi', self::VERSION_TYPE_FLOAT) >11&& $this->is('AndroidOS') ) ||1346 ( $this->is('Opera') && $this->version('Opera Mobi', self::VERSION_TYPE_FLOAT) >= 11.5 && $this->is('AndroidOS') ) || 1188 1347 1189 1348 // Meego 1.2 - Tested on Nokia 950 and N9 … … 1195 1354 // Samsung Bada 2.0 - Tested on a Samsung Wave 3, Dolphin browser 1196 1355 // @todo: more tests here! 1197 $this->is('Dolfin') && $this->version('Bada', self::VERSION_TYPE_FLOAT) >=2.0 ||1356 $this->is('Dolfin') && $this->version('Bada', self::VERSION_TYPE_FLOAT) >= 2.0 || 1198 1357 1199 1358 // UC Browser - Tested on Android 2.3 device 1200 ( ($this->is('UC Browser') || $this->is('Dolfin')) && $this->version('Android', self::VERSION_TYPE_FLOAT) >=2.3 ) ||1359 ( ($this->is('UC Browser') || $this->is('Dolfin')) && $this->version('Android', self::VERSION_TYPE_FLOAT) >= 2.3 ) || 1201 1360 1202 1361 // Kindle 3 and Fire - Tested on the built-in WebKit browser for each 1203 1362 ( $this->match('Kindle Fire') || 1204 $this->is('Kindle') && $this->version('Kindle', self::VERSION_TYPE_FLOAT) >=3.0 ) ||1363 $this->is('Kindle') && $this->version('Kindle', self::VERSION_TYPE_FLOAT) >= 3.0 ) || 1205 1364 1206 1365 // Nook Color 1.4.1 - Tested on original Nook Color, not Nook Tablet 1207 1366 $this->is('AndroidOS') && $this->is('NookTablet') || 1208 1367 1209 // Chrome Desktop 1 1-21- Tested on OS X 10.7 and Windows 71210 $this->version('Chrome', self::VERSION_TYPE_FLOAT) >=11&& !$isMobile ||1211 1212 // Safari Desktop 4-5- Tested on OS X 10.7 and Windows 71213 $this->version('Safari', self::VERSION_TYPE_FLOAT) >=5.0 && !$isMobile ||1214 1215 // Firefox Desktop 4-13- Tested on OS X 10.7 and Windows 71216 $this->version('Firefox', self::VERSION_TYPE_FLOAT) >=4.0 && !$isMobile ||1368 // Chrome Desktop 16-24 - Tested on OS X 10.7 and Windows 7 1369 $this->version('Chrome', self::VERSION_TYPE_FLOAT) >= 16 && !$isMobile || 1370 1371 // Safari Desktop 5-6 - Tested on OS X 10.7 and Windows 7 1372 $this->version('Safari', self::VERSION_TYPE_FLOAT) >= 5.0 && !$isMobile || 1373 1374 // Firefox Desktop 10-18 - Tested on OS X 10.7 and Windows 7 1375 $this->version('Firefox', self::VERSION_TYPE_FLOAT) >= 10.0 && !$isMobile || 1217 1376 1218 1377 // Internet Explorer 7-9 - Tested on Windows XP, Vista and 7 1219 $this->version(' MSIE', self::VERSION_TYPE_FLOAT)>=7.0 && !$isMobile ||1378 $this->version('IE', self::VERSION_TYPE_FLOAT) >= 7.0 && !$isMobile || 1220 1379 1221 1380 // Opera Desktop 10-12 - Tested on OS X 10.7 and Windows 7 1222 // @reference: http://my.opera.com/community/openweb/idopera/ 1223 $this->version('Opera', self::VERSION_TYPE_FLOAT)>=10 && !$isMobile 1224 1381 $this->version('Opera', self::VERSION_TYPE_FLOAT) >= 10 && !$isMobile 1225 1382 ){ 1226 1383 return self::MOBILE_GRADE_A; … … 1228 1385 1229 1386 if ( 1230 $this->is IOS() && $this->version('iPad', self::VERSION_TYPE_FLOAT)<4.3 ||1231 $this->is IOS() && $this->version('iPhone', self::VERSION_TYPE_FLOAT)<3.1||1232 $this->is IOS() && $this->version('iPod', self::VERSION_TYPE_FLOAT)<3.1||1387 $this->is('iOS') && $this->version('iPad', self::VERSION_TYPE_FLOAT)<4.3 || 1388 $this->is('iOS') && $this->version('iPhone', self::VERSION_TYPE_FLOAT)<4.3 || 1389 $this->is('iOS') && $this->version('iPod', self::VERSION_TYPE_FLOAT)<4.3 || 1233 1390 1234 1391 // Blackberry 5.0: Tested on the Storm 2 9550, Bold 9770 1235 $this->is('Blackberry') && $this->version('BlackBerry', self::VERSION_TYPE_FLOAT) >=5 && $this->version('BlackBerry', self::VERSION_TYPE_FLOAT)<6 ||1392 $this->is('Blackberry') && $this->version('BlackBerry', self::VERSION_TYPE_FLOAT) >= 5 && $this->version('BlackBerry', self::VERSION_TYPE_FLOAT)<6 || 1236 1393 1237 1394 //Opera Mini (5.0-6.5) - Tested on iOS 3.2/4.3 and Android 2.3 1238 ( $this->version('Opera Mini', self::VERSION_TYPE_FLOAT)>=5.0 && $this->version('Opera Mini', self::VERSION_TYPE_FLOAT)<=6.5&&1239 ($this->version('Android', self::VERSION_TYPE_FLOAT) >=2.3 || $this->is('iOS')) ) ||1395 ($this->version('Opera Mini', self::VERSION_TYPE_FLOAT) >= 5.0 && $this->version('Opera Mini', self::VERSION_TYPE_FLOAT) <= 7.0 && 1396 ($this->version('Android', self::VERSION_TYPE_FLOAT) >= 2.3 || $this->is('iOS')) ) || 1240 1397 1241 1398 // Nokia Symbian^3 - Tested on Nokia N8 (Symbian^3), C7 (Symbian^3), also works on N97 (Symbian^1) … … 1243 1400 1244 1401 // @todo: report this (tested on Nokia N71) 1245 $this->version('Opera Mobi', self::VERSION_TYPE_FLOAT) >=11 && $this->is('SymbianOS')1402 $this->version('Opera Mobi', self::VERSION_TYPE_FLOAT) >= 11 && $this->is('SymbianOS') 1246 1403 ){ 1247 1404 return self::MOBILE_GRADE_B; … … 1250 1407 if ( 1251 1408 // Blackberry 4.x - Tested on the Curve 8330 1252 $this->version('BlackBerry', self::VERSION_TYPE_FLOAT) <5.0 ||1409 $this->version('BlackBerry', self::VERSION_TYPE_FLOAT) <= 5.0 || 1253 1410 // Windows Mobile - Tested on the HTC Leo (WinMo 5.2) 1254 $this->match('MSIEMobile|Windows CE.*Mobile') || $this->version('Windows Mobile', self::VERSION_TYPE_FLOAT)<=5.2 1255 1411 $this->match('MSIEMobile|Windows CE.*Mobile') || $this->version('Windows Mobile', self::VERSION_TYPE_FLOAT) <= 5.2 || 1412 1413 // Tested on original iPhone (3.1), iPhone 3 (3.2) 1414 $this->is('iOS') && $this->version('iPad', self::VERSION_TYPE_FLOAT) <= 3.2 || 1415 $this->is('iOS') && $this->version('iPhone', self::VERSION_TYPE_FLOAT) <= 3.2 || 1416 $this->is('iOS') && $this->version('iPod', self::VERSION_TYPE_FLOAT) <= 3.2 || 1417 1418 // Internet Explorer 7 and older - Tested on Windows XP 1419 $this->version('IE', self::VERSION_TYPE_FLOAT) <= 7.0 && !$isMobile 1256 1420 ){ 1257 1421 return self::MOBILE_GRADE_C; 1258 1422 } 1259 1423 1260 // All older smartphone platforms and featurephones - Any device that doesn't support media queries1261 // will receive the basic, C grade experience.1424 // All older smartphone platforms and featurephones - Any device that doesn't support media queries 1425 // will receive the basic, C grade experience. 1262 1426 return self::MOBILE_GRADE_C; 1263 1427 } -
mobile-redirect-plus-lite/trunk/includes/settings.php
r1013589 r1184365 9 9 <div class="wrap"> 10 10 <h2>WP Mobile Redirect Options</h2> 11 <form action="options.php" method="POST" >11 <form action="options.php" method="POST" style="float: left; min-width: 800px;"> 12 12 <?php settings_fields( 'mobi-setting-group-lite' ); ?> 13 13 <?php do_settings_sections( 'mobi-redirect-plus-lite' ); ?> 14 14 <?php submit_button( ); ?> 15 15 </form> 16 <hr/> 17 <h2><a href="http://bitly.com/redirect-plus" style="float: left;">Check out Mobile Redirect Plus Pro Feature!!!</a></h2> 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> 19 </div> 18 20 <br/><br/> 19 21 </div> -
mobile-redirect-plus-lite/trunk/mobi.php
r1013589 r1184365 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. 46 Version: 2.5 7 7 Author: Iqbal Bary <contact@iqbalbary.com> 8 8 Author URI: http://iqbalbary.com … … 22 22 //Check the session 23 23 $session_check_lite = $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; 24 if(substr_count($session_check , 'main=true')>0){24 if(substr_count($session_check_lite, 'main=true')>0){ 25 25 setcookie('fullsite','true'); 26 26 return; -
mobile-redirect-plus-lite/trunk/readme.txt
r1013579 r1184365 7 7 Author: Iqbal Bary 8 8 Requires at least: 3.0.1 9 Tested up to: 4. 010 Stable tag: 2. 49 Tested up to: 4.2.2 10 Stable tag: 2.5 11 11 License: GPLv2 or later 12 12 License URI: http://www.gnu.org/licenses/gpl-2.0.html … … 36 36 == Changelog == 37 37 38 = 2.5 = 39 * Bug Fix 40 = 2.4 = 41 * Bug Fix 38 42 = 2.3 = 39 43 * Initial Release
Note: See TracChangeset
for help on using the changeset viewer.