WordPress.org

Make WordPress Core

Ticket #4176: reactivate-plugins+output2.diff

File reactivate-plugins+output2.diff, 4.3 KB (added by DD32, 11 years ago)

Reactivate All Plugins(And also catch non-fatal errors)

  • wp-admin/plugins.php

     
    3636                update_option('active_plugins', $current);
    3737                do_action('deactivate_' . trim( $_GET['plugin'] ));
    3838                wp_redirect('plugins.php?deactivate=true');
    39         } elseif ($_GET['action'] == 'deactivate-all') {
     39        } elseif ('deactivate-all' == $_GET['action']) {
    4040                check_admin_referer('deactivate-all');
    4141                $current = get_option('active_plugins');
    4242
    4343                foreach ($current as $plugin) {
    44                         array_splice($current, array_search($plugin, $current), 1);
    4544                        do_action('deactivate_' . $plugin);
    4645                }
    47 
     46               
     47                update_option('deactivated_plugins', $current);
    4848                update_option('active_plugins', array());
    4949                wp_redirect('plugins.php?deactivate-all=true');
     50        } elseif ('reactivate-all' == $_GET['action']) {
     51                check_admin_referer('reactivate-all');
     52                $prev_plugins = get_option('deactivated_plugins');
     53                $current = array();
     54                $errors = array();
     55               
     56                // We'll keep track of errors in the $errors array,
     57                // and report them after we're done.
     58                foreach ($prev_plugins as $plugin) {
     59                        if ( validate_file($plugin) )
     60                                $errors[$plugin] = __('Invalid plugin.');
     61                        elseif ( ! file_exists(ABSPATH . PLUGINDIR . '/' . $plugin) )
     62                                $errors[$plugin] = __('Plugin file does not exist.');
     63                        elseif (!in_array($plugin, $current)) {
     64                                // A fatal error in any one plugin means NO
     65                                // plugins will be reactivated. Sorry, but that's
     66                                // just the way it is. :-/
     67                                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
     68                                $errors[$plugin] = __('Plugin generated a fatal error.'); // we'll override this later if the plugin can be included without fatal error
     69                                ob_start();
     70                                @include(ABSPATH . PLUGINDIR . '/' . $plugin);
     71                                $current[] = $plugin;
     72                                do_action('activate_' . $plugin);
     73                                unset($errors[$plugin]);
     74                                $output = ob_get_clean();
     75                                if( ! empty($output) ){
     76                                        $errors[$plugin] = $output;
     77                                }
     78                        }
     79                }
     80               
     81                sort($current);
     82               
     83                update_option('deactivated_plugins', array());
     84                update_option('active_plugins', $current);
     85                update_option('problem_plugins', $errors);
     86                wp_redirect('plugins.php?reactivate-all=true'); // overrides the ?error=true one above
    5087        }
    5188        exit;
    5289}
     
    96133        <div id="message" class="updated fade"><p><?php _e('Plugin <strong>deactivated</strong>.') ?></p></div>
    97134<?php elseif (isset($_GET['deactivate-all'])) : ?>
    98135        <div id="message" class="updated fade"><p><?php _e('All plugins <strong>deactivated</strong>.'); ?></p></div>
     136<?php elseif (isset($_GET['reactivate-all'])) : ?>
     137        <div id="message" class="updated fade">
     138                <p><?php _e('All plugins <strong>reactivated</strong>.'); ?></p>
     139                <?php
     140                $errors = get_option('problem_plugins');
     141                if (! empty($errors)) {
     142                // Display any errors:
     143                ?>
     144                <p><?php _e('The following plugins generated errors:'); ?></p>
     145                <ul>
     146                <?php foreach ($errors as $plugin => $errmsg) { ?>
     147                        <li><?php echo $plugin . ': ' . $errmsg ?></li>
     148                <?php } ?>
     149                </ul>
     150                <?php
     151                }
     152                ?>
     153        </div>
    99154<?php endif; ?>
    100155
    101156<div class="wrap">
     
    169224
    170225<tr>
    171226        <td colspan="3">&nbsp;</td>
    172         <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>
     227        <td colspan="2" style="width:12em;">
     228        <?php 
     229        $inactive = get_option('deactivated_plugins');
     230        if (!empty($current_plugins)) { ?>
     231                <a href="<?php echo wp_nonce_url('plugins.php?action=deactivate-all', 'deactivate-all'); ?>" class="delete"><?php _e('Deactivate All Plugins'); ?></a>
     232        <?php } elseif (empty($active) && !empty($inactive)) { ?>
     233                <a href="<?php echo wp_nonce_url('plugins.php?action=reactivate-all', 'reactivate-all'); ?>" class="delete"><?php _e('Reactivate All Plugins'); ?></a>
     234        <?php
     235        } // endif active/inactive plugin check
     236        ?>
     237        </td>
    173238</tr>
    174239
    175240</table>
     
    187252
    188253<?php
    189254include('admin-footer.php');
    190 ?>
     255?>
     256 No newline at end of file