Make WordPress Core

Changeset 29818


Ignore:
Timestamp:
10/02/2014 03:55:51 PM (12 years ago)
Author:
wonderboymusic
Message:

In activate_plugin(), do not re-run the activation routine for already-active network-wide plugins.

Adds unit test.

Props jbrinley.
Fixes #28651.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-admin/includes/plugin.php

    r29789 r29818  
    534534                return $valid;
    535535
    536         if ( !in_array($plugin, $current) ) {
     536        if ( ( $network_wide && ! isset( $current[ $plugin ] ) ) || ( ! $network_wide && ! in_array( $plugin, $current ) ) ) {
    537537                if ( !empty($redirect) )
    538538                        wp_redirect(add_query_arg('_error_nonce', wp_create_nonce('plugin-activation-error_' . $plugin), $redirect)); // we'll override this later if the plugin can be included without fatal error
  • trunk/tests/phpunit/tests/ms.php

    r29747 r29818  
    302302        }
    303303
     304        /**
     305         * @ticket 28651
     306         */
     307        function test_duplicate_network_active_plugin() {
     308                $path = "hello.php";
     309                $mock = new MockAction();
     310                add_action( 'activate_' . $path, array ( $mock, 'action' ) );
     311
     312                // should activate on the first try
     313                activate_plugin( $path, '', true );
     314                $active_plugins = wp_get_active_network_plugins();
     315                $this->assertCount( 1, $active_plugins );
     316                $this->assertEquals( 1, $mock->get_call_count() );
     317
     318                // should do nothing on the second try
     319                activate_plugin( $path, '', true );
     320                $active_plugins = wp_get_active_network_plugins();
     321                $this->assertCount( 1, $active_plugins );
     322                $this->assertEquals( 1, $mock->get_call_count() );
     323
     324                remove_action( 'activate_' . $path, array ( $mock, 'action' ) );
     325        }
     326
    304327        function _helper_deactivate_hook() {
    305328                $this->plugin_hook_count++;
Note: See TracChangeset for help on using the changeset viewer.