Plugins: Correctly display the current plugin in the plugin editor.

When editing a plugin file, show the correct plugin as being edited in the dropdown with the correct activation status.

Props aniketpant, dd32, DrewAPicture, jayarjo, MattyRob, mt8.biz, solarissmoke, swissspidy, WraithKenny.
Fixes #24122, #17552.

git-svn-id: https://develop.svn.wordpress.org/trunk@38745 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Pascal Birchler 2016-10-07 16:57:49 +00:00
parent f683e9aae1
commit 92cf15870f

View File

@ -20,8 +20,6 @@ if ( !current_user_can('edit_plugins') )
$title = __("Edit Plugins"); $title = __("Edit Plugins");
$parent_file = 'plugins.php'; $parent_file = 'plugins.php';
wp_reset_vars( array( 'action', 'error', 'file', 'plugin' ) );
$plugins = get_plugins(); $plugins = get_plugins();
if ( empty( $plugins ) ) { if ( empty( $plugins ) ) {
@ -36,11 +34,23 @@ if ( empty( $plugins ) ) {
exit; exit;
} }
if ( $file ) { $file = '';
$plugin = $file; $plugin = '';
} elseif ( empty( $plugin ) ) { if ( isset( $_REQUEST['file'] ) ) {
$plugin = array_keys($plugins); $file = sanitize_text_field( $_REQUEST['file'] );
$plugin = $plugin[0]; }
if ( isset( $_REQUEST['plugin'] ) ) {
$plugin = sanitize_text_field( $_REQUEST['plugin'] );
}
if ( empty( $plugin ) ) {
if ( $file ) {
$plugin = $file;
} else {
$plugin = array_keys( $plugins );
$plugin = $plugin[0];
}
} }
$plugin_files = get_plugin_files($plugin); $plugin_files = get_plugin_files($plugin);
@ -52,9 +62,7 @@ $file = validate_file_to_edit($file, $plugin_files);
$real_file = WP_PLUGIN_DIR . '/' . $file; $real_file = WP_PLUGIN_DIR . '/' . $file;
$scrollto = isset($_REQUEST['scrollto']) ? (int) $_REQUEST['scrollto'] : 0; $scrollto = isset($_REQUEST['scrollto']) ? (int) $_REQUEST['scrollto'] : 0;
switch ( $action ) { if ( isset( $_REQUEST['action'] ) && 'update' === $_REQUEST['action'] ) {
case 'update':
check_admin_referer('edit-plugin_' . $file); check_admin_referer('edit-plugin_' . $file);
@ -67,9 +75,10 @@ case 'update':
$network_wide = is_plugin_active_for_network( $file ); $network_wide = is_plugin_active_for_network( $file );
// Deactivate so we can test it. // Deactivate so we can test it.
if ( is_plugin_active($file) || isset($_POST['phperror']) ) { if ( is_plugin_active( $plugin ) || isset( $_POST['phperror'] ) ) {
if ( is_plugin_active($file) ) if ( is_plugin_active( $plugin ) ) {
deactivate_plugins($file, true); deactivate_plugins( $plugin, true );
}
if ( ! is_network_admin() ) { if ( ! is_network_admin() ) {
update_option( 'recently_activated', array( $file => time() ) + (array) get_option( 'recently_activated' ) ); update_option( 'recently_activated', array( $file => time() ) + (array) get_option( 'recently_activated' ) );
@ -77,28 +86,31 @@ case 'update':
update_site_option( 'recently_activated', array( $file => time() ) + (array) get_site_option( 'recently_activated' ) ); update_site_option( 'recently_activated', array( $file => time() ) + (array) get_site_option( 'recently_activated' ) );
} }
wp_redirect(add_query_arg('_wpnonce', wp_create_nonce('edit-plugin-test_' . $file), "plugin-editor.php?file=$file&liveupdate=1&scrollto=$scrollto&networkwide=" . $network_wide)); wp_redirect( add_query_arg( '_wpnonce', wp_create_nonce( 'edit-plugin-test_' . $file ), "plugin-editor.php?file=$file&plugin=$plugin&liveupdate=1&scrollto=$scrollto&networkwide=" . $network_wide ) );
exit; exit;
} }
wp_redirect( self_admin_url("plugin-editor.php?file=$file&a=te&scrollto=$scrollto") ); wp_redirect( self_admin_url( "plugin-editor.php?file=$file&plugin=$plugin&a=te&scrollto=$scrollto" ) );
} else { } else {
wp_redirect( self_admin_url("plugin-editor.php?file=$file&scrollto=$scrollto") ); wp_redirect( self_admin_url( "plugin-editor.php?file=$file&plugin=$plugin&scrollto=$scrollto" ) );
} }
exit; exit;
default: } else {
if ( isset($_GET['liveupdate']) ) { if ( isset($_GET['liveupdate']) ) {
check_admin_referer('edit-plugin-test_' . $file); check_admin_referer('edit-plugin-test_' . $file);
$error = validate_plugin($file); $error = validate_plugin( $plugin );
if ( is_wp_error($error) )
if ( is_wp_error( $error ) ) {
wp_die( $error ); wp_die( $error );
}
if ( ( ! empty( $_GET['networkwide'] ) && ! is_plugin_active_for_network($file) ) || ! is_plugin_active($file) ) if ( ( ! empty( $_GET['networkwide'] ) && ! is_plugin_active_for_network( $file ) ) || ! is_plugin_active( $file ) ) {
activate_plugin($file, "plugin-editor.php?file=$file&phperror=1", ! empty( $_GET['networkwide'] ) ); // we'll override this later if the plugin can be included without fatal error activate_plugin( $plugin, "plugin-editor.php?file=$file&phperror=1", ! empty( $_GET['networkwide'] ) );
} // we'll override this later if the plugin can be included without fatal error
wp_redirect( self_admin_url("plugin-editor.php?file=$file&a=te&scrollto=$scrollto") ); wp_redirect( self_admin_url("plugin-editor.php?file=$file&plugin=$plugin&a=te&scrollto=$scrollto") );
exit; exit;
} }
@ -263,7 +275,7 @@ foreach ( $plugin_files as $plugin_file ) :
<div id="documentation" class="hide-if-no-js"><label for="docs-list"><?php _e('Documentation:') ?></label> <?php echo $docs_select ?> <input type="button" class="button" value="<?php esc_attr_e( 'Look Up' ) ?> " onclick="if ( '' != jQuery('#docs-list').val() ) { window.open( 'https://api.wordpress.org/core/handbook/1.0/?function=' + escape( jQuery( '#docs-list' ).val() ) + '&amp;locale=<?php echo urlencode( get_user_locale() ) ?>&amp;version=<?php echo urlencode( get_bloginfo( 'version' ) ) ?>&amp;redirect=true'); }" /></div> <div id="documentation" class="hide-if-no-js"><label for="docs-list"><?php _e('Documentation:') ?></label> <?php echo $docs_select ?> <input type="button" class="button" value="<?php esc_attr_e( 'Look Up' ) ?> " onclick="if ( '' != jQuery('#docs-list').val() ) { window.open( 'https://api.wordpress.org/core/handbook/1.0/?function=' + escape( jQuery( '#docs-list' ).val() ) + '&amp;locale=<?php echo urlencode( get_user_locale() ) ?>&amp;version=<?php echo urlencode( get_bloginfo( 'version' ) ) ?>&amp;redirect=true'); }" /></div>
<?php endif; ?> <?php endif; ?>
<?php if ( is_writeable($real_file) ) : ?> <?php if ( is_writeable($real_file) ) : ?>
<?php if ( in_array( $file, (array) get_option( 'active_plugins', array() ) ) ) { ?> <?php if ( in_array( $plugin, (array) get_option( 'active_plugins', array() ) ) ) { ?>
<p><?php _e('<strong>Warning:</strong> Making changes to active plugins is not recommended. If your changes cause a fatal error, the plugin will be automatically deactivated.'); ?></p> <p><?php _e('<strong>Warning:</strong> Making changes to active plugins is not recommended. If your changes cause a fatal error, the plugin will be automatically deactivated.'); ?></p>
<?php } ?> <?php } ?>
<p class="submit"> <p class="submit">
@ -289,6 +301,6 @@ jQuery(document).ready(function($){
}); });
</script> </script>
<?php <?php
break;
} }
include(ABSPATH . "wp-admin/admin-footer.php"); include(ABSPATH . "wp-admin/admin-footer.php");