Changeset 6037
- Timestamp:
- 10/16/2017 10:32:50 PM (8 years ago)
- Location:
- sites/trunk/api.wordpress.org/public_html/core/browse-happy/1.0
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
sites/trunk/api.wordpress.org/public_html/core/browse-happy/1.0/parse.php
r6021 r6037 5 5 6 6 require dirname( __FILE__ ) . '/browsers.php'; 7 8 /** 9 * Returns an associative array of explicit browser token names and their 10 * associated info. 11 * 12 * Explicit tokens are tokens that, if present, indicate a specific browser. 13 * 14 * If a browser is not identified by an explicit token, or requires special 15 * handling not supported by the default handler, then a new conditional block 16 * for the browser instead needs to be added in browsehappy_parse_user_agent(). 17 * 18 * In any case, the browser token name also needs to be added to the regex for 19 * browser tokens in browsehappy_parse_user_agent(). 20 * 21 * @return array { 22 * Associative array of browser tokens and their associated data. 23 * 24 * @type array $data { 25 * Associative array of browser data. All are optional. 26 * 27 * @type string $name Name of browser, if it differs from the 28 * token name. Default is token name. 29 * @type bool $use_version Should the 'Version' token, if present, 30 * supercede the version associated with the 31 * browser token? Default false. 32 * @type bool $mobile Does the browser signify the platform is 33 * mobile (for situations where it may no 34 * already be apparent)? Default false. 35 * @type string $platform The name of the platform, to supercede 36 * whatever platform may have been detected. 37 * Default empty string. 38 * } 39 * } 40 */ 41 function browsehappy_get_explicit_browser_tokens() { 42 return array( 43 'Camino' => array(), 44 'Chromium' => array(), 45 'Edge' => array( 46 'name' => 'Microsoft Edge', 47 ), 48 'Kindle' => array( 49 'name' => 'Kindle Browser', 50 'use_version' => true, 51 ), 52 'Konqueror' => array(), 53 'konqueror' => array( 54 'name' => 'Konqueror', 55 ), 56 'NokiaBrowser' => array( 57 'name' => 'Nokia Browser', 58 'mobile' => true, 59 ), 60 'Opera Mini' => array( // Must be before 'Opera' 61 'mobile' => true, 62 'use_version' => true, 63 ), 64 'Opera' => array( 65 'use_version' => true, 66 ), 67 'OPR' => array( 68 'name' => 'Opera', 69 'use_version' => true, 70 ), 71 'PaleMoon' => array( 72 'name' => 'Pale Moon', 73 ), 74 'QQBrowser' => array( 75 'name' => 'QQ Browser', 76 ), 77 'RockMelt' => array(), 78 'SamsungBrowser' => array( 79 'name' => 'Samsung Browser', 80 ), 81 'SeaMonkey' => array(), 82 'Silk' => array( 83 'name' => 'Amazon Silk', 84 ), 85 'S40OviBrowser' => array( 86 'name' => 'Ovi Browser', 87 'mobile' => true, 88 'platform' => 'Symbian', 89 ), 90 'UCBrowser' => array( // Must be before 'UCWEB' 91 'name' => 'UC Browser', 92 ), 93 'UCWEB' => array( 94 'name' => 'UC Browser', 95 ), 96 'Vivaldi' => array(), 97 'IEMobile' => array( // Keep last just in case 98 'name' => 'Internet Explorer Mobile', 99 ), 100 ); 101 } 7 102 8 103 /** … … 105 200 } 106 201 202 $explicit_tokens = browsehappy_get_explicit_browser_tokens(); 203 107 204 // No indentifiers provided 108 205 if ( empty( $result['name'] ) ) { … … 113 210 } 114 211 } 115 // Opera 116 elseif ( 117 false !== ( $key = array_search( 'Opera Mini', $result['name'] ) ) 118 || 119 false !== ( $key = array_search( 'Opera', $result['name'] ) ) 120 || 121 false !== ( $key = array_search( 'OPR', $result['name'] ) ) 122 ) { 123 $data['name'] = $result['name'][ $key ]; 124 if ( 'OPR' === $data['name'] ) { 125 $data['name'] = 'Opera'; 126 } elseif ( 'Opera Mini' === $data['name'] ) { 212 // Explicitly identified browser (info defined above in $explicit_tokens). 213 elseif ( $found = array_intersect( array_keys( $explicit_tokens ), $result['name'] ) ) { 214 $tokens = array_combine( $result['name'], $result['version'] ); 215 $token = reset( $found ); 216 217 $data['name'] = $explicit_tokens[ $token ]['name'] ?? $token; 218 $data['version'] = $tokens[ $token ]; 219 if ( empty( $explicit_tokens[ $token ]['use_version'] ) ) { 220 $version = ''; 221 } 222 if ( ! empty( $explicit_tokens[ $token ]['mobile'] ) ) { 127 223 $data['mobile'] = true; 128 224 } 129 $data['version'] = $result['version'][ $key ]; 130 } 131 // UC Browser 132 elseif ( 133 false !== ( $key = array_search( 'UCBrowser', $result['name'] ) ) 134 || 135 false !== ( $key = array_search( 'UCWEB', $result['name'] ) ) 136 ) { 137 $data['name'] = 'UC Browser'; 138 $data['version'] = $result['version'][ $key ]; 139 $version = ''; 140 } 141 // QQ Browser 142 elseif ( false !== ( $key = array_search( 'QQBrowser', $result['name'] ) ) ) { 143 $data['name'] = 'QQ Browser'; 144 $data['version'] = $result['version'][ $key ]; 145 $version = ''; 146 } 147 // Nokia Browser 148 elseif ( false !== ( $key = array_search( 'NokiaBrowser', $result['name'] ) ) ) { 149 $data['name'] = 'Nokia Browser'; 150 $data['version'] = $result['version'][ $key ]; 151 $data['mobile'] = true; 152 } 153 // Amazon Silk 154 elseif ( false !== ( $key = array_search( 'Silk', $result['name'] ) ) ) { 155 $data['name'] = 'Amazon Silk'; 156 $data['version'] = $result['version'][ $key ]; 157 $version = ''; 158 } 159 // Kindle Browser 160 elseif ( false !== ( $key = array_search( 'Kindle', $result['name'] ) ) ) { 161 $data['name'] = 'Kindle Browser'; 162 $data['version'] = $result['version'][ $key ]; 163 } 164 // Samsung Browser 165 elseif ( false !== ( $key = array_search( 'SamsungBrowser', $result['name'] ) ) ) { 166 $data['name'] = 'Samsung Browser'; 167 $data['version'] = $result['version'][ $key ]; 168 } 169 // Chromium 170 elseif ( false !== ( $key = array_search( 'Chromium', $result['name'] ) ) ) { 171 $data['name'] = 'Chromium'; 172 $data['version'] = $result['version'][ $key ]; 173 } 174 // Konqueror 175 elseif ( 176 false !== ( $key = array_search( 'Konqueror', $result['name'] ) ) 177 || 178 false !== ( $key = array_search( 'konqueror', $result['name'] ) ) 179 ) { 180 $data['name'] = 'Konqueror'; 181 $data['version'] = $result['version'][ $key ]; 182 } 183 // Pale Moon 184 elseif ( false !== ( $key = array_search( 'PaleMoon', $result['name'] ) ) ) { 185 $data['name'] = 'Pale Moon'; 186 $data['version'] = $result['version'][ $key ]; 225 if ( ! empty( $explicit_tokens[ $token ]['platform'] ) ) { 226 $data['platform'] = $explicit_tokens[ $token ]['platform']; 227 } 187 228 } 188 229 // Puffin … … 197 238 } 198 239 } 199 // SeaMonkey200 elseif ( false !== ( $key = array_search( 'SeaMonkey', $result['name'] ) ) ) {201 $data['name'] = 'SeaMonkey';202 $data['version'] = $result['version'][ $key ];203 }204 // Vivaldi205 elseif ( false !== ( $key = array_search( 'Vivaldi', $result['name'] ) ) ) {206 $data['name'] = 'Vivaldi';207 $data['version'] = $result['version'][ $key ];208 }209 240 // Trident (Internet Explorer) 210 241 elseif ( false !== ( $key = array_search( 'Trident', $result['name'] ) ) ) { … … 212 243 // IE 11 uses Trident token without an MSIE token. 213 244 // https://msdn.microsoft.com/library/hh869301(v=vs.85).aspx 214 if ( false !== ( $key2 = array_search( 'IEMobile', $result['name'] ) ) ) { 215 $data['name'] = 'Internet Explorer Mobile'; 216 $data['version'] = $result['version'][ $key2 ]; 217 } else { 218 $data['name'] = 'Internet Explorer'; 219 $trident_ie_mapping = array( 220 '4.0' => '8.0', 221 '5.0' => '9.0', 222 '6.0' => '10.0', 223 '7.0' => '11.0', 224 ); 225 $ver = $result['version'][ $key ]; 226 $data['version'] = $trident_ie_mapping[ $ver ] ?? $ver; 227 } 245 $data['name'] = 'Internet Explorer'; 246 $trident_ie_mapping = array( 247 '4.0' => '8.0', 248 '5.0' => '9.0', 249 '6.0' => '10.0', 250 '7.0' => '11.0', 251 ); 252 $ver = $result['version'][ $key ]; 253 $data['version'] = $trident_ie_mapping[ $ver ] ?? $ver; 228 254 } 229 255 // Internet Explorer (pre v8.0) 230 256 elseif ( false !== ( $key = array_search( 'MSIE', $result['name'] ) ) ) { 231 if ( false !== ( $key = array_search( 'IEMobile', $result['name'] ) ) ) { 232 $data['name'] = 'Internet Explorer Mobile'; 233 } else { 234 $data['name'] = 'Internet Explorer'; 235 $key = 0; 236 } 257 $data['name'] = 'Internet Explorer'; 258 $key = 0; 237 259 $data['version'] = $result['version'][ $key ]; 238 260 } 239 261 // AppleWebKit-emulating browsers 240 262 elseif ( false !== ( $key = array_search( 'AppleWebKit', $result['name'] ) ) ) { 241 if ( false !== ( $key = array_search( 'Edge', $result['name'] ) ) ) { 242 $data['name'] = 'Microsoft Edge'; 243 } elseif ( false !== ( $key = array_search( 'Mobile Safari', $result['name'] ) ) ) { 263 if ( false !== ( $key = array_search( 'Mobile Safari', $result['name'] ) ) ) { 244 264 if ( false !== ( $key2 = array_search( 'Chrome', $result['name'] ) ) ) { 245 265 $data['name'] = 'Chrome'; … … 261 281 } 262 282 // } elseif ( ( 'Android' == $data['platform'] && !($key = 0) ) || $key = array_search( 'Chrome', $result['name'] ) ) { 263 } elseif ( false !== ( $key = array_search( 'RockMelt', $result['name'] ) ) ) {264 $data['name'] = 'RockMelt';265 283 } elseif ( false !== ( $key = array_search( 'Chrome', $result['name'] ) ) ) { 266 284 $data['name'] = 'Chrome'; … … 285 303 $data['version'] = $result['version'][ $key ]; 286 304 } 287 // Ovi Browser288 elseif ( false !== ( $key = array_search( 'S40OviBrowser', $result['name'] ) ) ) {289 $data['name'] = 'Ovi Browser';290 $data['version'] = $result['version'][ $key ];291 $data['platform'] = 'Symbian';292 $data['mobile'] = true;293 }294 305 // Fall back to whatever is being reported. 295 306 else { -
sites/trunk/api.wordpress.org/public_html/core/browse-happy/1.0/tests/phpunit/tests/browse-happy.php
r6021 r6037 866 866 } 867 867 868 function test_browsehappy_get_explicit_browser_tokens() { 869 $tokens = browsehappy_get_explicit_browser_tokens(); 870 871 $this->assertTrue( is_array( $tokens ) ); 872 873 $this->assertArrayHasKey( 'Camino', $tokens ); 874 $this->assertEmpty( $tokens['Camino'] ); 875 876 $this->assertArrayHasKey( 'S40OviBrowser', $tokens ); 877 $this->assertArrayHasKey( 'name', $tokens['S40OviBrowser'] ); 878 $this->assertEquals( 'Ovi Browser', $tokens['S40OviBrowser']['name'] ); 879 $this->assertArrayHasKey( 'mobile', $tokens['S40OviBrowser'] ); 880 $this->assertTrue( $tokens['S40OviBrowser']['mobile'] ); 881 $this->assertArrayHasKey( 'platform', $tokens['S40OviBrowser'] ); 882 $this->assertEquals( 'Symbian', $tokens['S40OviBrowser']['platform'] ); 883 } 884 868 885 }
Note: See TracChangeset
for help on using the changeset viewer.