WordPress.org

Make WordPress Core

Ticket #39766: 39766.0.diff

File 39766.0.diff, 2.7 KB (added by westonruter, 4 months ago)
  • src/wp-admin/includes/plugin.php

    diff --git src/wp-admin/includes/plugin.php src/wp-admin/includes/plugin.php
    index 7d804e1c66..c38dd832d3 100644
    function activate_plugin( $plugin, $redirect = '', $network_wide = false, $silen 
    557557                ob_start(); 
    558558                wp_register_plugin_realpath( WP_PLUGIN_DIR . '/' . $plugin ); 
    559559                $_wp_plugin_file = $plugin; 
     560 
     561                if ( ! defined( 'WP_ADMIN' ) ) { 
     562                        define( 'WP_ADMIN', true ); 
     563                } 
     564 
    560565                include_once( WP_PLUGIN_DIR . '/' . $plugin ); 
     566 
     567                // Trigger key actions that are done on the plugin editor to cause the relevant plugin hooks to fire and potentially cause errors. 
     568                do_action( 'init' ); 
     569                do_action( 'admin_init' ); 
     570 
    561571                $plugin = $_wp_plugin_file; // Avoid stomping of the $plugin variable in a plugin. 
    562572 
    563573                if ( ! $silent ) { 
  • src/wp-admin/plugin-editor.php

    diff --git src/wp-admin/plugin-editor.php src/wp-admin/plugin-editor.php
    index 14d2b65039..c986824e6c 100644
    if ( isset( $_REQUEST['plugin'] ) ) { 
    4646 
    4747if ( empty( $plugin ) ) { 
    4848        if ( $file ) { 
    49                 $plugin = $file; 
     49 
     50                // Locate the plugin for a given plugin file being edited. 
     51                $file_dirname = dirname( $file ); 
     52                foreach ( array_keys( $plugins ) as $plugin_candidate ) { 
     53                        if ( $plugin_candidate === $file || ( '.' !== $file_dirname && dirname( $plugin_candidate ) === $file_dirname ) ) { 
     54                                $plugin = $plugin_candidate; 
     55                                break; 
     56                        } 
     57                } 
     58 
     59                // Fallback to the file as the plugins. 
     60                if ( empty( $plugin ) ) { 
     61                        $plugin = $file; 
     62                } 
    5063        } else { 
    5164                $plugin = array_keys( $plugins ); 
    5265                $plugin = $plugin[0]; 
    if ( isset( $_REQUEST['action'] ) && 'update' === $_REQUEST['action'] ) { 
    7285                fwrite($f, $newcontent); 
    7386                fclose($f); 
    7487 
     88                if ( function_exists( 'opcache_invalidate' ) ) { 
     89                        opcache_invalidate( $real_file, true ); 
     90                } 
     91 
    7592                $network_wide = is_plugin_active_for_network( $file ); 
    7693 
    7794                // Deactivate so we can test it. 
    if ( isset( $_REQUEST['action'] ) && 'update' === $_REQUEST['action'] ) { 
    220237<?php if (isset($_GET['a'])) : ?> 
    221238 <div id="message" class="updated notice is-dismissible"><p><?php _e('File edited successfully.') ?></p></div> 
    222239<?php elseif (isset($_GET['phperror'])) : ?> 
    223  <div id="message" class="updated"><p><?php _e('This plugin has been deactivated because your changes resulted in a <strong>fatal error</strong>.') ?></p> 
     240 <div id="message" class="notice notice-error"><p><?php _e('This plugin has been deactivated because your changes resulted in a <strong>fatal error</strong>.') ?></p> 
    224241        <?php 
    225242                if ( wp_verify_nonce( $_GET['_error_nonce'], 'plugin-activation-error_' . $file ) ) { 
    226243                        $iframe_url = add_query_arg( array(