Changeset 6010
- Timestamp:
- 10/09/2017 05:27:45 PM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sites/trunk/api.wordpress.org/public_html/core/browse-happy/1.0/parse.php
r5995 r6010 40 40 $mobile_device = ''; 41 41 42 // Identify platform/OS in user-agent string. 42 43 if ( preg_match( 43 44 '/^.+?(?P<platform>Windows Phone( OS)?|Android|iPhone|iPad|Windows|Linux|Macintosh|RIM Tablet OS|PlayBook)(?: (NT|zvav))*(?: [ix]?[0-9._]+)*(;|\))/im', … … 47 48 $data['platform'] = $regs['platform']; 48 49 } 50 51 // Find tokens of interest in user-agent string. 52 preg_match_all( 53 '%(?P<name>Opera Mini|Opera|OPR|Edge|UCBrowser|UCWEB|QQBrowser|Trident|Silk|Camino|Kindle|Firefox|SamsungBrowser|(?:Mobile )?Safari|NokiaBrowser|MSIE|RockMelt|AppleWebKit|Chrome|IEMobile|Version)(?:[/ ])(?P<version>[0-9.]+)%im', 54 $user_agent, 55 $result, 56 PREG_PATTERN_ORDER 57 ); 49 58 50 59 // Properly set platform if Android is actually being reported. … … 75 84 } 76 85 77 preg_match_all(78 '%(?P<name>Opera Mini|Opera|OPR|Edge|UCBrowser|UCWEB|QQBrowser|Trident|Silk|Camino|Kindle|Firefox|SamsungBrowser|(?:Mobile )?Safari|NokiaBrowser|MSIE|RockMelt|AppleWebKit|Chrome|IEMobile|Version)(?:[/ ])(?P<version>[0-9.]+)%im',79 $user_agent,80 $result,81 PREG_PATTERN_ORDER82 );83 84 86 // If Version/x.x.x was specified in UA string store it and ignore it 85 if ( $key = array_search( 'Version', $result['name']) ) {87 if ( false !== ( $key = array_search( 'Version', $result['name'] ) ) ) { 86 88 $version = $result['version'][ $key ]; 87 89 unset( $result['name'][ $key ] ); … … 151 153 $data['version'] = $result['version'][ $key ]; 152 154 } 155 // Trident (Internet Explorer) 156 elseif ( false !== ( $key = array_search( 'Trident', $result['name'] ) ) ) { 157 // IE 8-10 more reliably report version via Trident token than MSIE token. 158 // IE 11 uses Trident token without an MSIE token. 159 // https://msdn.microsoft.com/library/hh869301(v=vs.85).aspx 160 if ( false !== ( $key2 = array_search( 'IEMobile', $result['name'] ) ) ) { 161 $data['name'] = 'Internet Explorer Mobile'; 162 $data['version'] = $result['version'][ $key2 ]; 163 } else { 164 $data['name'] = 'Internet Explorer'; 165 $trident_ie_mapping = array( 166 '4.0' => '8.0', 167 '5.0' => '9.0', 168 '6.0' => '10.0', 169 '7.0' => '11.0', 170 ); 171 $ver = $result['version'][ $key ]; 172 $data['version'] = $trident_ie_mapping[ $ver ] ?? $ver; 173 } 174 } 175 // Internet Explorer (pre v8.0) 176 elseif ( false !== ( $key = array_search( 'MSIE', $result['name'] ) ) ) { 177 if ( false !== ( $key = array_search( 'IEMobile', $result['name'] ) ) ) { 178 $data['name'] = 'Internet Explorer Mobile'; 179 } else { 180 $data['name'] = 'Internet Explorer'; 181 $key = 0; 182 } 183 $data['version'] = $result['version'][ $key ]; 184 } 153 185 // AppleWebKit-emulating browsers 154 elseif ( 'AppleWebKit' == $result['name'][0]) {155 if ( $key = array_search( 'Edge', $result['name']) ) {186 elseif ( false !== ( $key = array_search( 'AppleWebKit', $result['name'] ) ) ) { 187 if ( false !== ( $key = array_search( 'Edge', $result['name'] ) ) ) { 156 188 $data['name'] = 'Microsoft Edge'; 157 } elseif ( $key = array_search( 'Mobile Safari', $result['name']) ) {158 if ( $key2 = array_search( 'Chrome', $result['name']) ) {189 } elseif ( false !== ( $key = array_search( 'Mobile Safari', $result['name'] ) ) ) { 190 if ( false !== ( $key2 = array_search( 'Chrome', $result['name'] ) ) ) { 159 191 $data['name'] = 'Chrome'; 160 192 $version = $result['version'][ $key2 ]; … … 175 207 } 176 208 // } elseif ( ( 'Android' == $data['platform'] && !($key = 0) ) || $key = array_search( 'Chrome', $result['name'] ) ) { 177 } elseif ( $key = array_search( 'RockMelt', $result['name']) ) {209 } elseif ( false !== ( $key = array_search( 'RockMelt', $result['name'] ) ) ) { 178 210 $data['name'] = 'RockMelt'; 179 } elseif ( $key = array_search( 'Chrome', $result['name']) ) {211 } elseif ( false !== ( $key = array_search( 'Chrome', $result['name'] ) ) ) { 180 212 $data['name'] = 'Chrome'; 181 213 $version = ''; 182 214 } elseif ( ! empty( $data['platform'] ) && 'PlayBook' == $data['platform'] ) { 183 215 $data['name'] = 'PlayBook'; 184 } elseif ( $key = array_search( 'Safari', $result['name']) ) {216 } elseif ( false !== ( $key = array_search( 'Safari', $result['name'] ) ) ) { 185 217 if ( 'Android' === $data['platform'] ) { 186 218 $data['name'] = 'Android Browser'; … … 193 225 $result['version'][ $key ] = ''; 194 226 $version = ''; 195 }196 $data['version'] = $result['version'][ $key ];197 }198 // Trident (Internet Explorer)199 elseif ( false !== ( $key = array_search( 'Trident', $result['name'] ) ) ) {200 // IE 8-10 more reliably report version via Trident token than MSIE token.201 // IE 11 uses Trident token without an MSIE token.202 // https://msdn.microsoft.com/library/hh869301(v=vs.85).aspx203 if ( $key2 = array_search( 'IEMobile', $result['name'] ) ) {204 $data['name'] = 'Internet Explorer Mobile';205 $data['version'] = $result['version'][ $key2 ];206 } else {207 $data['name'] = 'Internet Explorer';208 $trident_ie_mapping = array(209 '4.0' => '8.0',210 '5.0' => '9.0',211 '6.0' => '10.0',212 '7.0' => '11.0',213 );214 $ver = $result['version'][ $key ];215 $data['version'] = $trident_ie_mapping[ $ver ] ?? $ver;216 }217 }218 // Internet Explorer (pre v8.0)219 elseif ( 'MSIE' == $result['name'][0] ) {220 if ( $key = array_search( 'IEMobile', $result['name'] ) ) {221 $data['name'] = 'Internet Explorer Mobile';222 } else {223 $data['name'] = 'Internet Explorer';224 $key = 0;225 227 } 226 228 $data['version'] = $result['version'][ $key ];
Note: See TracChangeset
for help on using the changeset viewer.