Ticket #36819: 36819.7.diff
File 36819.7.diff, 6.3 KB (added by , 8 years ago) |
---|
-
tests/phpunit/tests/actions.php
328 328 $this->assertFalse( doing_filter( 'testing' ) ); // No longer doing this filter 329 329 } 330 330 331 /**332 * @ticket 36819333 */334 function test_backup_plugin_globals_returns_filters() {335 $backup = _backup_plugin_globals( true );336 $this->assertArrayHasKey( 'backup_wp_filter', $backup );337 $this->assertArrayHasKey( 'backup_wp_actions', $backup );338 $this->assertArrayHasKey( 'backup_wp_current_filter', $backup );339 $this->assertArrayHasKey( 'backup_merged_filters', $backup );340 }341 342 /**343 * @ticket 36819344 */345 function test_backup_plugin_globals_returns_filters_from_first_time_called() {346 $backup = _backup_plugin_globals( true );347 348 $a = new MockAction();349 $tag = rand_str();350 351 add_action($tag, array(&$a, 'action'));352 353 $new_backup = _backup_plugin_globals( false );354 $this->assertEquals( $backup, $new_backup );355 }356 357 /**358 * @ticket 36819359 */360 function test_restore_plugin_globals_from_stomp() {361 global $wp_actions;362 $original_actions = $wp_actions;363 364 _backup_plugin_globals( true );365 366 $wp_actions = array();367 368 $this->assertEmpty( $wp_actions );369 _restore_plugin_globals();370 371 $this->assertEquals( $GLOBALS['wp_actions'], $original_actions );372 }373 374 /**375 * @ticket 36819376 */377 function test_restore_plugin_globals_includes_additions() {378 global $wp_filter;379 $original_filter = $wp_filter;380 381 $backup = _backup_plugin_globals( true );382 383 $a = new MockAction();384 $tag = rand_str();385 add_action($tag, array(&$a, 'action'));386 387 $this->assertNotEquals( $GLOBALS['wp_filter'], $original_filter );388 389 _restore_plugin_globals();390 391 $this->assertNotEquals( $GLOBALS['wp_filter'], $original_filter );392 }393 394 /**395 * @ticket 36819396 */397 function test_applied_actions_are_counted_after_restore() {398 global $wp_actions;399 400 $action_name = 'this_is_a_fake_action_name';401 $this->assertArrayNotHasKey( $action_name, $wp_actions );402 403 do_action( $action_name );404 405 $this->assertEquals( 1, $wp_actions[ $action_name ] );406 407 _backup_plugin_globals( true );408 do_action( $action_name );409 _restore_plugin_globals();410 411 $this->assertEquals( 2, $wp_actions[ $action_name ] );412 }413 414 331 function apply_testing_filter() { 415 332 $this->apply_testing_filter = true; 416 333 -
src/wp-includes/plugin.php
1003 1003 } 1004 1004 1005 1005 /** 1006 * Backs up global variables used for actions and filters.1006 * NOOP 1007 1007 * 1008 * Prevents redefinition of these globals in advanced-cache.php from accidentally1009 * destroying existing data.1010 *1011 1008 * @since 4.6.0 1012 1009 * @access private 1013 1010 * 1014 * @global array $wp_filter Stores all filters and actions.1015 * @global array $wp_actions Stores the amount of times an action was triggered.1016 * @global array $merged_filters Merges the filter hooks using this function.1017 * @global array $wp_current_filter Stores the list of current filters with the current one last.1018 * @staticvar array $backup_globals Backed up globals.1019 *1020 * @return array the staticvar from the first time it is set.1021 1011 */ 1022 1012 function _backup_plugin_globals( $backup = true ) { 1023 global $wp_filter, $wp_actions, $merged_filters, $wp_current_filter;1024 1025 static $backup_globals = array();1026 1027 if ( $backup ) {1028 $backup_globals = array(1029 'backup_wp_filter' => $wp_filter,1030 'backup_wp_actions' => $wp_actions,1031 'backup_merged_filters' => $merged_filters,1032 'backup_wp_current_filter' => $wp_current_filter,1033 );1034 1035 $wp_filter = $wp_actions = array();1036 }1037 return $backup_globals;1038 1013 } 1039 1014 1040 1015 /** 1041 * Safely restores backed up global variables used for actions and filters.1016 * NOOP 1042 1017 * 1043 1018 * @since 4.6.0 1044 1019 * @access private 1045 1020 * 1046 * @global array $wp_filter Stores all filters and actions.1047 * @global array $wp_actions Stores the amount of times an action was triggered.1048 * @global array $merged_filters Merges the filter hooks using this function.1049 * @global array $wp_current_filter Stores the list of current filters with the current one last.1050 * @staticvar array $backup_globals Backed up globals.1051 1021 */ 1052 function _restore_plugin_globals() { 1053 global $wp_filter, $wp_actions, $merged_filters, $wp_current_filter; 1054 1055 $backup_globals = _backup_plugin_globals( false ); 1056 1057 if ( empty( $wp_filter ) ) { 1058 $wp_filter = $backup_globals['backup_wp_filter']; 1059 } else { 1060 $added_filters = $wp_filter; 1061 $wp_filter = $backup_globals['backup_wp_filter']; 1062 1063 foreach ( $added_filters as $tag => $callback_groups ) { 1064 // Loop through callback groups. 1065 foreach ( $callback_groups as $priority => $callbacks ) { 1066 1067 // Loop through callbacks. 1068 foreach ( $callbacks as $cb ) { 1069 add_filter( $tag, $cb['function'], $priority, $cb['accepted_args'] ); 1070 } 1071 } 1072 } 1073 } 1074 1075 if ( empty ( $wp_actions ) ) { 1076 $wp_actions = $backup_globals['backup_wp_actions']; 1077 } else { 1078 $run_actions = $wp_actions; 1079 $wp_actions = $backup_globals['backup_wp_actions']; 1080 1081 foreach( $run_actions as $action => $count ) { 1082 if ( ! isset( $wp_actions[ $action ] ) ) { 1083 $wp_actions[ $action ] = 0; 1084 } 1085 1086 $wp_actions[ $action ] += $count; 1087 } 1088 } 1089 1090 if ( $merged_filters !== $backup_globals['backup_merged_filters'] ) { 1091 $merged_filters = array_merge_recursive( $merged_filters, $backup_globals['backup_merged_filters'] ); 1092 } 1093 1094 if ( $wp_current_filter !== $backup_globals['backup_wp_current_filter'] ) { 1095 $wp_current_filter = array_merge_recursive( $wp_current_filter, $backup_globals['backup_wp_current_filter'] ); 1096 } 1097 } 1022 function _restore_plugin_globals() {} -
src/wp-settings.php
83 83 */ 84 84 if ( WP_CACHE && apply_filters( 'enable_loading_advanced_cache_dropin', true ) ) { 85 85 // For an advanced caching plugin to use. Uses a static drop-in because you would only want one. 86 _backup_plugin_globals( true );87 86 WP_DEBUG ? include( WP_CONTENT_DIR . '/advanced-cache.php' ) : @include( WP_CONTENT_DIR . '/advanced-cache.php' ); 88 _restore_plugin_globals();89 87 } 90 88 91 89 // Define WP_LANG_DIR if not set.