Changeset 9422
- Timestamp:
- 01/23/2020 11:43:29 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sites/trunk/api.wordpress.org/public_html/core/browse-happy/1.0/parse.php
r6039 r9422 180 180 ); 181 181 182 // Create associative array with tokens as keys and versions as values. 183 $tokens = array_combine( array_reverse( $result['name'] ), array_reverse( $result['version'] ) ); 184 182 185 // Properly set platform if Android is actually being reported. 183 186 if ( 'Linux' === $data['platform'] && false !== strpos( $user_agent, 'Android' ) ) { … … 196 199 in_array( $data['platform'], array( 'Symbian', 'SymbOS' ) ) 197 200 || 198 false !== ( $key = array_search( 'SymbianOS', $result['name'] ))201 ! empty( $tokens['SymbianOS'] ) 199 202 || 200 false !== ( $key = array_search( 'Symbian', $result['name'] ))203 ! empty( $tokens['Symbian'] ) 201 204 ) { 202 205 if ( ! in_array( $data['platform'], array( 'Symbian', 'SymbOS' ) ) ) { 203 unset( $ result['name'][ $key] );204 unset( $ result['version'][ $key] );206 unset( $tokens['SymbianOS'] ); 207 unset( $tokens['Symbian'] ); 205 208 } 206 209 $data['platform'] = 'Symbian'; … … 222 225 223 226 // If Version/x.x.x was specified in UA string store it and ignore it 224 if ( false !== ( $key = array_search( 'Version', $result['name'] ) ) ) { 225 $version = $result['version'][ $key ]; 226 unset( $result['name'][ $key ] ); 227 unset( $result['version'][ $key ] ); 227 if ( ! empty( $tokens['Version'] ) ) { 228 $version = $tokens['Version']; 229 unset( $tokens['Version'] ); 228 230 } 229 231 … … 231 233 232 234 // No indentifiers provided 233 if ( empty( $result['name'] )) {235 if ( ! $tokens ) { 234 236 if ( 'BlackBerry' === $mobile_device ) { 235 237 $data['name'] = 'BlackBerry Browser'; … … 239 241 } 240 242 // Explicitly identified browser (info defined above in $explicit_tokens). 241 elseif ( $found = array_intersect( array_keys( $explicit_tokens ), $result['name'] ) ) { 242 $tokens = array_combine( $result['name'], $result['version'] ); 243 elseif ( $found = array_intersect( array_keys( $explicit_tokens ), array_keys( $tokens ) ) ) { 243 244 $token = reset( $found ); 244 245 … … 256 257 } 257 258 // Puffin 258 elseif ( false !== ( $key = array_search( 'Puffin', $result['name'] )) ) {259 elseif ( ! empty( $tokens['Puffin'] ) ) { 259 260 $data['name'] = 'Puffin'; 260 $data['version'] = $ result['version'][ $key];261 $data['version'] = $tokens['Puffin']; 261 262 $version = ''; 262 263 // If not an already-identified mobile platform, set it as such. … … 267 268 } 268 269 // Trident (Internet Explorer) 269 elseif ( false !== ( $key = array_search( 'Trident', $result['name'] )) ) {270 elseif ( ! empty( $tokens['Trident'] ) ) { 270 271 // IE 8-10 more reliably report version via Trident token than MSIE token. 271 272 // IE 11 uses Trident token without an MSIE token. … … 278 279 '7.0' => '11.0', 279 280 ); 280 $ver = $ result['version'][ $key];281 $ver = $tokens['Trident']; 281 282 $data['version'] = $trident_ie_mapping[ $ver ] ?? $ver; 282 283 } 283 284 // Internet Explorer (pre v8.0) 284 elseif ( false !== ( $key = array_search( 'MSIE', $result['name'] )) ) {285 elseif ( ! empty( $tokens['MSIE'] ) ) { 285 286 $data['name'] = 'Internet Explorer'; 286 $key = 0; 287 $data['version'] = $result['version'][ $key ]; 287 $data['version'] = $tokens['MSIE']; 288 288 } 289 289 // AppleWebKit-emulating browsers 290 elseif ( false !== ( $key = array_search( 'AppleWebKit', $result['name'] )) ) {291 if ( false !== ( $key = array_search( 'Mobile Safari', $result['name'] )) ) {292 if ( false !== ( $key2 = array_search( 'Chrome', $result['name'] )) ) {290 elseif ( ! empty( $tokens['AppleWebKit'] ) ) { 291 if ( ! empty( $tokens['Mobile Safari'] ) ) { 292 if ( ! empty( $tokens['Chrome'] ) ) { 293 293 $data['name'] = 'Chrome'; 294 $version = $ result['version'][ $key2];294 $version = $tokens['Chrome']; 295 295 } elseif ( 'Android' === $data['platform'] ) { 296 296 $data['name'] = 'Android Browser'; … … 302 302 303 303 if ( false !== stripos( $user_agent, 'BB10' ) ) { 304 $ result['version'][ $key] = '';304 $tokens['Mobile Safari'] = ''; 305 305 $version = ''; 306 306 } … … 308 308 $data['name'] = 'Mobile Safari'; 309 309 } 310 // } elseif ( ( 'Android' == $data['platform'] && !($key = 0) ) || $key = array_search( 'Chrome', $result['name'] ) ) { 311 } elseif ( false !== ( $key = array_search( 'Chrome', $result['name'] ) ) ) { 310 } elseif ( ! empty( $tokens['Chrome'] ) ) { 312 311 $data['name'] = 'Chrome'; 313 312 $version = ''; 314 313 } elseif ( ! empty( $data['platform'] ) && 'PlayBook' == $data['platform'] ) { 315 314 $data['name'] = 'PlayBook'; 316 } elseif ( false !== ( $key = array_search( 'Safari', $result['name'] )) ) {315 } elseif ( ! empty( $tokens['Safari'] ) ) { 317 316 if ( 'Android' === $data['platform'] ) { 318 317 $data['name'] = 'Android Browser'; 319 318 } elseif ( 'Symbian' === $data['platform'] ) { 320 319 $data['name'] = 'Nokia Browser'; 321 $ result['version'][ $key] = '';320 $tokens['Safari'] = ''; 322 321 } else { 323 322 $data['name'] = 'Safari'; 324 323 } 325 324 } else { 326 $key = 0;327 325 $data['name'] = 'unknown'; 328 $ result['version'][ $key] = '';326 $tokens['AppleWebKit'] = ''; 329 327 $version = ''; 330 328 } 331 $data['version'] = $ result['version'][ $key ];329 $data['version'] = $tokens[ $data['name'] ] ?? ''; 332 330 } 333 331 // Fall back to whatever is being reported. 334 332 else { 335 $data['name'] = $result['name'][0]; 336 $data['version'] = $result['version'][0]; 333 $ordered_tokens = array_reverse( $tokens ); 334 $data['version'] = reset( $ordered_tokens ); 335 $data['name'] = key( $ordered_tokens ); 337 336 } 338 337
Note: See TracChangeset
for help on using the changeset viewer.