WordPress.org

Make WordPress Core

Ticket #4176: reactivate-plugins.2.diff

File reactivate-plugins.2.diff, 5.6 KB (added by DD32, 11 years ago)

Reactivate All Plugins against 2.3beta

  • wp-admin/plugins.php

     
    1111                if ( ! file_exists(ABSPATH . PLUGINDIR . '/' . $plugin) )
    1212                        wp_die(__('Plugin file does not exist.'));
    1313                if (!in_array($plugin, $current)) {
    14                         wp_redirect('plugins.php?error=true'); // we'll override this later if the plugin can be included without fatal error
     14                        wp_redirect('plugins.php?error=true&plugin='.urlencode($plugin)); // we'll override this later if the plugin can be included without fatal error
    1515                        ob_start();
    1616                        @include(ABSPATH . PLUGINDIR . '/' . $plugin);
    1717                        $current[] = $plugin;
     
    2121                        ob_end_clean();
    2222                }
    2323                wp_redirect('plugins.php?activate=true'); // overrides the ?error=true one above
    24         } else if ('deactivate' == $_GET['action']) {
     24        } elseif ('deactivate' == $_GET['action']) {
    2525                check_admin_referer('deactivate-plugin_' . $_GET['plugin']);
    2626                $current = get_option('active_plugins');
    2727                array_splice($current, array_search( $_GET['plugin'], $current), 1 ); // Array-fu!
    2828                update_option('active_plugins', $current);
    2929                do_action('deactivate_' . trim( $_GET['plugin'] ));
    3030                wp_redirect('plugins.php?deactivate=true');
    31         } elseif ($_GET['action'] == 'deactivate-all') {
     31        } elseif ('deactivate-all' == $_GET['action']) {
    3232                check_admin_referer('deactivate-all');
    3333                $current = get_option('active_plugins');
    3434               
    3535                foreach ($current as $plugin) {
    36                         array_splice($current, array_search($plugin, $current), 1);
    3736                        do_action('deactivate_' . $plugin);
    3837                }
    3938               
    4039                update_option('active_plugins', array());
     40                update_option('deactivated_plugins', $current);
    4141                wp_redirect('plugins.php?deactivate-all=true');
     42        } elseif ('reactivate-all' == $_GET['action']) {
     43                check_admin_referer('reactivate-all');
     44                $prev_plugins = get_option('deactivated_plugins');
     45                $current = array();
     46                $errors = array();
     47               
     48                // We'll keep track of errors in the $errors array,
     49                // and report them after we're done.
     50                foreach ($prev_plugins as $plugin) {
     51                        if ( validate_file($plugin) )
     52                                $errors[$plugin] = __('Invalid plugin.');
     53                        elseif ( ! file_exists(ABSPATH . PLUGINDIR . '/' . $plugin) )
     54                                $errors[$plugin] = __('Plugin file does not exist.');
     55                        elseif (!in_array($plugin, $current)) {
     56                                // A fatal error in any one plugin means NO
     57                                // plugins will be reactivated. Sorry, but that's
     58                                // just the way it is. :-/
     59                                wp_redirect('plugins.php?error=true&plugin='.urlencode($plugin)); // we'll override this later if the plugin can be included without fatal error
     60                                $errors[$plugin] = __('Plugin generated a fatal error.'); // we'll override this later if the plugin can be included without fatal error
     61                                ob_start();
     62                                @include(ABSPATH . PLUGINDIR . '/' . $plugin);
     63                                $current[] = $plugin;
     64                                do_action('activate_' . $plugin);
     65                                unset($errors[$plugin]);
     66                                ob_end_clean();
     67                        }
     68                }
     69               
     70                sort($current);
     71               
     72                update_option('deactivated_plugins', array());
     73                update_option('active_plugins', $current);
     74                update_option('problem_plugins', $errors);
     75                wp_redirect('plugins.php?reactivate-all=true'); // overrides the ?error=true one above
     76       
    4277        }
    4378        exit;
    4479}
     
    73108?>
    74109
    75110<?php if ( isset($_GET['error']) ) : ?>
    76         <div id="message" class="updated fade"><p><?php _e('Plugin could not be activated because it triggered a <strong>fatal error</strong>.') ?></p></div>
     111        <?php
     112        $plugin = $_GET['plugin'];
     113        $plugin = wp_specialchars($plugin);
     114        ?>
     115        <div id="message" class="updated fade"><p><?php _e('Plugin could not be activated because it triggered a <strong>fatal error</strong>. ('. $plugin . ')') ?></p></div>
    77116<?php elseif ( isset($_GET['activate']) ) : ?>
    78117        <div id="message" class="updated fade"><p><?php _e('Plugin <strong>activated</strong>.') ?></p></div>
    79118<?php elseif ( isset($_GET['deactivate']) ) : ?>
    80119        <div id="message" class="updated fade"><p><?php _e('Plugin <strong>deactivated</strong>.') ?></p></div>
    81120<?php elseif (isset($_GET['deactivate-all'])) : ?>
    82121        <div id="message" class="updated fade"><p><?php _e('All plugins <strong>deactivated</strong>.'); ?></p></div>
     122<?php elseif (isset($_GET['reactivate-all'])) : ?>
     123        <div id="message" class="updated fade">
     124        <p><?php _e('All plugins <strong>reactivated</strong>.'); ?></p>
     125<?php
     126 $errors = get_option('problem_plugins');
     127 if (! empty($errors)) {
     128        // Display any errors:
     129        ?>
     130        <p><?php _e('The following plugins generated errors:'); ?></p>
     131        <ul>
     132        <?php foreach ($errors as $plugin => $errmsg) {
     133        ?>
     134        <li><?php echo $plugin . ': ' . $errmsg ?></li>
     135        <?php
     136        }
     137        ?>
     138        </ul>
     139        <?php
     140 }
     141?>
     142        </div>
    83143<?php endif; ?>
    84144
    85145<div class="wrap">
     
    152212
    153213<tr>
    154214        <td colspan="3">&nbsp;</td>
    155         <td colspan="2" style="width:12em;"><a href="<?php echo wp_nonce_url('plugins.php?action=deactivate-all', 'deactivate-all'); ?>" class="delete"><?php _e('Deactivate All Plugins'); ?></a></td>
     215        <td colspan="2" style="width:12em;">
     216        <?php
     217        $active = get_option('active_plugins');
     218        $inactive = get_option('deactivated_plugins');
     219        if (!empty($active)) {
     220        ?>
     221        <a href="<?php echo wp_nonce_url('plugins.php?action=deactivate-all', 'deactivate-all'); ?>" class="delete"><?php _e('Deactivate All Plugins'); ?></a>
     222        <?php
     223        } elseif (empty($active) && !empty($inactive)) {
     224        ?>
     225        <a href="<?php echo wp_nonce_url('plugins.php?action=reactivate-all', 'reactivate-all'); ?>" class="delete"><?php _e('Reactivate All Plugins'); ?></a>
     226        <?php
     227        } // endif active/inactive plugin check
     228        ?>
     229        </td>
    156230</tr>
    157231
    158232</table>