Changeset 6208
- Timestamp:
- 12/03/2017 05:28:28 PM (7 years ago)
- Location:
- sites/trunk/api.wordpress.org/public_html/events/1.0
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
sites/trunk/api.wordpress.org/public_html/events/1.0/index.php
r6179 r6208 161 161 return compact( 'error', 'location', 'events' ); 162 162 163 } 164 165 /** 166 * Determine if the client making the API request is WordPress Core. 167 * 168 * This can be used to limit the effects of some data processing to just the Events Widget in 169 * Core. Otherwise, those changes would result in unexpected data for other clients, like 170 * having WordCamps stuck to the end of the request by `stick_wordcamps()`. 171 * 172 * Ideally this would be isolated to Core itself, and exclude plugins using `wp_remote_get()`. 173 * There isn't a good way to do that, though, so plugins will still get unexpected results. 174 * They can set a custom user agent to get the raw data, though. 175 * 176 * @param string $user_agent 177 * 178 * @return bool 179 */ 180 function is_client_core( $user_agent ) { 181 // This doesn't simply return the value of `strpos()` because `0` means `true` in this context 182 if ( false === strpos( $user_agent, 'WordPress/' ) ) { 183 return false; 184 } 185 186 return true; 163 187 } 164 188 … … 732 756 $regional_wordcamps = array(); 733 757 734 /* 735 * Limit effects to the Events Widget in Core. 736 * Otherwise this would return unexpected results to other clients. 737 * 738 * This is the closest we can get to detecting Core, so it'll still distort results for any 739 * plugins that are fetching events with `wp_remote_get()`. 740 */ 741 if ( false === strpos( $user_agent, 'WordPress/' ) ) { 758 if ( ! is_client_core( $user_agent ) ) { 742 759 return $local_events; 743 760 } -
sites/trunk/api.wordpress.org/public_html/events/1.0/tests/test-index.php
r6180 r6208 22 22 $tests_failed += test_add_regional_wordcamps(); 23 23 $tests_failed += test_build_response(); 24 $tests_failed += test_is_client_core(); 24 25 $query_count = count( $wpdb->queries ); 25 26 $query_time = array_sum( array_column( $wpdb->queries, 1 ) ); … … 1021 1022 1022 1023 /** 1024 * Test `is_client_core()`. 1025 * 1026 * @return int 1027 */ 1028 function test_is_client_core() { 1029 $failed = 0; 1030 $cases = array( 1031 '' => false, 1032 'Contains WordPress but no slash' => false, 1033 'WordPress/4.9; https://example.org' => true, 1034 'WordPress/10.0' => true, 1035 ); 1036 1037 printf( "\n\nRunning %d is_client_core() tests\n", count( $cases ) ); 1038 1039 foreach ( $cases as $user_agent => $expected_result ) { 1040 $actual_result = is_client_core( $user_agent ); 1041 1042 $passed = $expected_result === $actual_result; 1043 1044 output_results( $user_agent, $passed, $expected_result, $actual_result ); 1045 1046 if ( ! $passed ) { 1047 $failed++; 1048 } 1049 } 1050 1051 return $failed; 1052 } 1053 1054 /** 1023 1055 * Test `add_regional_events()` 1024 1056 *
Note: See TracChangeset
for help on using the changeset viewer.