Make WordPress Core

Ticket #5210: extract_plugin_activation_logic.2.diff

File extract_plugin_activation_logic.2.diff, 3.8 KB (added by Quandary, 19 years ago)

Moves the plugin (de)activation logic from wp-admin/plugins.php to wp-admins/includes/plugin.php

  • wp-admin/includes/plugin.php

     
    8686        return $wp_plugins;
    8787}
    8888
     89function activate_plugin($plugin) {
     90                $current = get_option('active_plugins');
     91                $plugin = trim($plugin);
     92
     93                if ( validate_file($plugin) )
     94                        return new WP_Error('plugin_invalid', __('Invalid plugin.'));
     95                if ( ! file_exists(ABSPATH . PLUGINDIR . '/' . $plugin) )
     96                        return new WP_Error('plugin_not_found', __('Plugin file does not exist.'));
     97
     98                if (!in_array($plugin, $current)) {
     99                        wp_redirect(add_query_arg('_error_nonce', wp_create_nonce('plugin-activation-error_' . $plugin), 'plugins.php?error=true&plugin=' . $plugin)); // we'll override this later if the plugin can be included without fatal error
     100                        ob_start();
     101                        @include(ABSPATH . PLUGINDIR . '/' . $plugin);
     102                        $current[] = $plugin;
     103                        sort($current);
     104                        update_option('active_plugins', $current);
     105                        do_action('activate_' . $plugin);
     106                        ob_end_clean();
     107                }
     108
     109                return null;
     110}
     111
     112function deactivate_plugins($plugins) {
     113        $current = get_option('active_plugins');
     114
     115        if(!is_array($plugins))
     116                $plugins = array($plugins);
     117
     118        foreach($plugins as $plugin) {
     119                array_splice($current, array_search( $plugin, $current), 1 ); // Array-fu!
     120                do_action('deactivate_' . trim( $plugin ));
     121        }
     122
     123        update_option('active_plugins', $current);
     124}
     125
     126function deactivate_all_plugins() {
     127        $current = get_option('active_plugins');
     128        deactivate_plugins($current);
     129}
     130
    89131//
    90132// Menu
    91133//
  • wp-admin/plugins.php

     
    44if ( isset($_GET['action']) ) {
    55        if ('activate' == $_GET['action']) {
    66                check_admin_referer('activate-plugin_' . $_GET['plugin']);
    7                 $current = get_option('active_plugins');
    8                 $plugin = trim($_GET['plugin']);
    9                 if ( validate_file($plugin) )
    10                         wp_die(__('Invalid plugin.'));
    11                 if ( ! file_exists(ABSPATH . PLUGINDIR . '/' . $plugin) )
    12                         wp_die(__('Plugin file does not exist.'));
    13                 if (!in_array($plugin, $current)) {
    14                         wp_redirect(add_query_arg('_error_nonce', wp_create_nonce('plugin-activation-error_' . $plugin), 'plugins.php?error=true&plugin=' . $plugin)); // we'll override this later if the plugin can be included without fatal error
    15                         ob_start();
    16                         @include(ABSPATH . PLUGINDIR . '/' . $plugin);
    17                         $current[] = $plugin;
    18                         sort($current);
    19                         update_option('active_plugins', $current);
    20                         do_action('activate_' . $plugin);
    21                         ob_end_clean();
    22                 }
     7                $result = activate_plugin($_GET['plugin']);
     8                if( is_wp_error( $result ) )
     9                        wp_die( $result->get_error_message() );
    2310                wp_redirect('plugins.php?activate=true'); // overrides the ?error=true one above
    2411        } elseif ('error_scrape' == $_GET['action']) {
    2512                $plugin = trim($_GET['plugin']);
     
    3118                include(ABSPATH . PLUGINDIR . '/' . $plugin);
    3219        } elseif ('deactivate' == $_GET['action']) {
    3320                check_admin_referer('deactivate-plugin_' . $_GET['plugin']);
    34                 $current = get_option('active_plugins');
    35                 array_splice($current, array_search( $_GET['plugin'], $current), 1 ); // Array-fu!
    36                 update_option('active_plugins', $current);
    37                 do_action('deactivate_' . trim( $_GET['plugin'] ));
     21                deactivate_plugins($_GET['plugin']);
    3822                wp_redirect('plugins.php?deactivate=true');
    3923        } elseif ($_GET['action'] == 'deactivate-all') {
    4024                check_admin_referer('deactivate-all');
    41                 $current = get_option('active_plugins');
    42 
    43                 foreach ($current as $plugin) {
    44                         array_splice($current, array_search($plugin, $current), 1);
    45                         do_action('deactivate_' . $plugin);
    46                 }
    47 
    48                 update_option('active_plugins', array());
     25                deactivate_all_plugins();
    4926                wp_redirect('plugins.php?deactivate-all=true');
    5027        }
    5128        exit;