WordPress.org

Making WordPress.org

Changeset 9422


Ignore:
Timestamp:
01/23/2020 11:43:29 PM (2 years ago)
Author:
coffee2code
Message:

Browse Happy API: Simplify some code for browser token and version handling.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sites/trunk/api.wordpress.org/public_html/core/browse-happy/1.0/parse.php

    r6039 r9422  
    180180    );
    181181
     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
    182185    // Properly set platform if Android is actually being reported.
    183186    if ( 'Linux' === $data['platform'] && false !== strpos( $user_agent, 'Android' ) ) {
     
    196199        in_array( $data['platform'], array( 'Symbian', 'SymbOS' ) )
    197200    ||
    198         false !== ( $key = array_search( 'SymbianOS', $result['name'] ) )
     201        ! empty( $tokens['SymbianOS'] )
    199202    ||
    200         false !== ( $key = array_search( 'Symbian', $result['name'] ) )
     203        ! empty( $tokens['Symbian'] )
    201204    ) {
    202205        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'] );
    205208        }
    206209        $data['platform'] = 'Symbian';
     
    222225
    223226    // 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'] );
    228230    }
    229231
     
    231233
    232234    // No indentifiers provided
    233     if ( empty( $result['name'] ) ) {
     235    if ( ! $tokens ) {
    234236        if ( 'BlackBerry' === $mobile_device ) {
    235237            $data['name'] = 'BlackBerry Browser';
     
    239241    }
    240242    // 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 ) ) ) {
    243244        $token = reset( $found );
    244245
     
    256257    }
    257258    // Puffin
    258     elseif ( false !== ( $key = array_search( 'Puffin', $result['name'] ) ) ) {
     259    elseif ( ! empty( $tokens['Puffin'] ) ) {
    259260        $data['name']     = 'Puffin';
    260         $data['version']  = $result['version'][ $key ];
     261        $data['version']  = $tokens['Puffin'];
    261262        $version          = '';
    262263        // If not an already-identified mobile platform, set it as such.
     
    267268    }
    268269    // Trident (Internet Explorer)
    269     elseif ( false !== ( $key = array_search( 'Trident', $result['name'] ) ) ) {
     270    elseif ( ! empty( $tokens['Trident'] ) ) {
    270271        // IE 8-10 more reliably report version via Trident token than MSIE token.
    271272        // IE 11 uses Trident token without an MSIE token.
     
    278279            '7.0' => '11.0',
    279280        );
    280         $ver = $result['version'][ $key ];
     281        $ver = $tokens['Trident'];
    281282        $data['version'] = $trident_ie_mapping[ $ver ] ?? $ver;
    282283    }
    283284    // Internet Explorer (pre v8.0)
    284     elseif ( false !== ( $key = array_search( 'MSIE', $result['name'] ) ) ) {
     285    elseif ( ! empty( $tokens['MSIE'] ) ) {
    285286        $data['name'] = 'Internet Explorer';
    286         $key = 0;
    287         $data['version'] = $result['version'][ $key ];
     287        $data['version'] = $tokens['MSIE'];
    288288    }
    289289    // 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'] ) ) {
    293293                $data['name'] = 'Chrome';
    294                 $version = $result['version'][ $key2 ];
     294                $version = $tokens['Chrome'];
    295295            } elseif ( 'Android' === $data['platform'] ) {
    296296                $data['name'] = 'Android Browser';
     
    302302
    303303                if ( false !== stripos( $user_agent, 'BB10' ) ) {
    304                     $result['version'][ $key ] = '';
     304                    $tokens['Mobile Safari'] = '';
    305305                    $version = '';
    306306                }
     
    308308                $data['name'] = 'Mobile Safari';
    309309            }
    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'] ) ) {
    312311            $data['name'] = 'Chrome';
    313312            $version = '';
    314313        } elseif ( ! empty( $data['platform'] ) && 'PlayBook' == $data['platform'] ) {
    315314            $data['name'] = 'PlayBook';
    316         } elseif ( false !== ( $key = array_search( 'Safari', $result['name'] ) ) ) {
     315        } elseif ( ! empty( $tokens['Safari'] ) ) {
    317316            if ( 'Android' === $data['platform'] ) {
    318317                $data['name'] = 'Android Browser';
    319318            } elseif ( 'Symbian' === $data['platform'] ) {
    320319                $data['name'] = 'Nokia Browser';
    321                 $result['version'][ $key ] = '';
     320                $tokens['Safari'] = '';
    322321            } else {
    323322                $data['name'] = 'Safari';
    324323            }
    325324        } else {
    326             $key = 0;
    327325            $data['name'] = 'unknown';
    328             $result['version'][ $key ] = '';
     326            $tokens['AppleWebKit'] = '';
    329327            $version = '';
    330328        }
    331         $data['version'] = $result['version'][ $key ];
     329        $data['version'] = $tokens[ $data['name'] ] ?? '';
    332330    }
    333331    // Fall back to whatever is being reported.
    334332    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 );
    337336    }
    338337
Note: See TracChangeset for help on using the changeset viewer.