WordPress.org

Make WordPress Core

Ticket #39766: 39766.1.diff

File 39766.1.diff, 3.3 KB (added by westonruter, 8 months ago)

https://github.com/xwp/wordpress-develop/pull/262

  • src/wp-admin/includes/plugin.php

    diff --git src/wp-admin/includes/plugin.php src/wp-admin/includes/plugin.php
    index 7d804e1c66..910a78049c 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
     565                $tested_actions = array(
     566                        'plugins_loaded' => array(),
     567                        'setup_theme' => array(),
     568                        'after_setup_theme' => array(),
     569                        'init' => array(),
     570                        'wp_loaded' => array(),
     571                        'admin_init' => array(),
     572                );
     573                array_map( 'remove_all_actions', array_keys( $tested_actions ) );
     574
    560575                include_once( WP_PLUGIN_DIR . '/' . $plugin );
     576
     577                // Trigger key actions that are done on the plugin editor to cause the relevant plugin hooks to fire and potentially cause errors.
     578                foreach ( $tested_actions as $action => $args ) {
     579                        do_action_ref_array( $action, $args );
     580                }
     581
    561582                $plugin = $_wp_plugin_file; // Avoid stomping of the $plugin variable in a plugin.
    562583
    563584                if ( ! $silent ) {
  • src/wp-admin/plugin-editor.php

    diff --git src/wp-admin/plugin-editor.php src/wp-admin/plugin-editor.php
    index 14d2b65039..53947fff11 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
    225                 if ( wp_verify_nonce( $_GET['_error_nonce'], 'plugin-activation-error_' . $file ) ) {
     242                if ( wp_verify_nonce( $_GET['_error_nonce'], 'plugin-activation-error_' . $plugin ) ) {
    226243                        $iframe_url = add_query_arg( array(
    227244                                'action'   => 'error_scrape',
    228                                 'plugin'   => urlencode( $file ),
     245                                'plugin'   => urlencode( $plugin ),
    229246                                '_wpnonce' => urlencode( $_GET['_error_nonce'] ),
    230247                        ), admin_url( 'plugins.php' ) );
    231248                        ?>