Changeset 38252
- Timestamp:
- 08/13/2016 04:01:09 PM (8 years ago)
- Location:
- branches/4.6
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/4.6
-
branches/4.6/src/wp-includes/plugin.php
r38224 r38252 1002 1002 } 1003 1003 } 1004 1005 /**1006 * Backs up global variables used for actions and filters.1007 *1008 * Prevents redefinition of these globals in advanced-cache.php from accidentally1009 * destroying existing data.1010 *1011 * @since 4.6.01012 * @access private1013 *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 */1022 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 }1039 1040 /**1041 * Safely restores backed up global variables used for actions and filters.1042 *1043 * @since 4.6.01044 * @access private1045 *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 */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 } -
branches/4.6/src/wp-settings.php
r38224 r38252 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 -
branches/4.6/tests/phpunit/tests/actions.php
r38224 r38252 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;
Note: See TracChangeset
for help on using the changeset viewer.