WordPress.org

Make WordPress Core

Ticket #4176: reactivate-plugins+output2.diff

File reactivate-plugins+output2.diff, 4.3 KB (added by DD32, 7 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