2004-11-16 22:15:44 -05:00
< ? php
2008-08-16 03:27:34 -04:00
/**
Administration: Add "File" to Theme/Plugin Editor menu names and relocate "Plugin File Editor" to Tools for block themes.
[52232] relocated the Theme Editor menu item from Appearance to Tools for block themes. This commit relocates the Plugin Editor menu item from Plugins to Tools for block themes for a consistent workflow.
Both the Theme Editor and Plugin Editor menu items are renamed to "Theme File Editor" and "Plugin File Editor" respectively. Why? To better identify their purpose, i.e. to directly edit the code in the theme or plugin files. The rename is not limited to only block themes.
Follow-up to [52232].
Props poena, annezazu, audrasjb, clorith, courane01, costdev, dryanpress, desrosj, hellofromTonya, ipstenu, jameskoster, joen, johnbillion, joyously, manfcarlo, marybaum, pbiron, SergeyBiryukov, walbo, youknowriad.
Fixes #54382.
Built from https://develop.svn.wordpress.org/trunk@52406
git-svn-id: http://core.svn.wordpress.org/trunk@51998 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2021-12-21 15:06:02 -05:00
* Edit plugin file editor administration panel .
2008-08-16 03:27:34 -04:00
*
* @ package WordPress
* @ subpackage Administration
*/
/** WordPress Administration Bootstrap */
2020-02-06 01:33:11 -05:00
require_once __DIR__ . '/admin.php' ;
2006-11-18 02:31:29 -05:00
2010-12-06 10:41:19 -05:00
if ( is_multisite () && ! is_network_admin () ) {
wp_redirect ( network_admin_url ( 'plugin-editor.php' ) );
2020-05-26 05:37:10 -04:00
exit ;
2010-12-06 10:41:19 -05:00
}
2017-11-30 18:11:00 -05:00
if ( ! current_user_can ( 'edit_plugins' ) ) {
wp_die ( __ ( 'Sorry, you are not allowed to edit plugins for this site.' ) );
}
2009-08-08 03:22:19 -04:00
2021-07-22 09:53:00 -04:00
// Used in the HTML title tag.
2017-11-30 18:11:00 -05:00
$title = __ ( 'Edit Plugins' );
2006-11-18 02:31:29 -05:00
$parent_file = 'plugins.php' ;
2004-11-27 19:33:04 -05:00
$plugins = get_plugins ();
2009-02-22 15:05:11 -05:00
2014-03-11 18:14:14 -04:00
if ( empty ( $plugins ) ) {
2020-02-06 01:33:11 -05:00
require_once ABSPATH . 'wp-admin/admin-header.php' ;
2014-03-11 18:14:14 -04:00
?>
< div class = " wrap " >
2015-06-27 11:41:25 -04:00
< h1 >< ? php echo esc_html ( $title ); ?> </h1>
2020-06-03 06:51:13 -04:00
< div id = " message " class = " error " >< p >< ? php _e ( 'No plugins are currently available.' ); ?> </p></div>
2014-03-11 18:14:14 -04:00
</ div >
< ? php
2020-02-06 01:33:11 -05:00
require_once ABSPATH . 'wp-admin/admin-footer.php' ;
2014-03-11 18:14:14 -04:00
exit ;
}
2010-04-29 01:34:24 -04:00
2017-11-30 18:11:00 -05:00
$file = '' ;
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.
Built from https://develop.svn.wordpress.org/trunk@38745
git-svn-id: http://core.svn.wordpress.org/trunk@38688 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-10-07 12:58:28 -04:00
$plugin = '' ;
if ( isset ( $_REQUEST [ 'file' ] ) ) {
2017-09-19 06:11:43 -04:00
$file = wp_unslash ( $_REQUEST [ 'file' ] );
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.
Built from https://develop.svn.wordpress.org/trunk@38745
git-svn-id: http://core.svn.wordpress.org/trunk@38688 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-10-07 12:58:28 -04:00
}
if ( isset ( $_REQUEST [ 'plugin' ] ) ) {
2017-09-19 06:11:43 -04:00
$plugin = wp_unslash ( $_REQUEST [ 'plugin' ] );
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.
Built from https://develop.svn.wordpress.org/trunk@38745
git-svn-id: http://core.svn.wordpress.org/trunk@38688 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-10-07 12:58:28 -04:00
}
if ( empty ( $plugin ) ) {
if ( $file ) {
2017-09-21 21:36:48 -04:00
// Locate the plugin for a given plugin file being edited.
$file_dirname = dirname ( $file );
foreach ( array_keys ( $plugins ) as $plugin_candidate ) {
if ( $plugin_candidate === $file || ( '.' !== $file_dirname && dirname ( $plugin_candidate ) === $file_dirname ) ) {
$plugin = $plugin_candidate ;
break ;
}
}
// Fallback to the file as the plugin.
if ( empty ( $plugin ) ) {
$plugin = $file ;
}
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.
Built from https://develop.svn.wordpress.org/trunk@38745
git-svn-id: http://core.svn.wordpress.org/trunk@38688 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-10-07 12:58:28 -04:00
} else {
$plugin = array_keys ( $plugins );
$plugin = $plugin [ 0 ];
}
2009-02-22 15:05:11 -05:00
}
2017-11-30 18:11:00 -05:00
$plugin_files = get_plugin_files ( $plugin );
2004-11-16 22:15:44 -05:00
File Editors: Introduce sandboxed live editing of PHP files with rollbacks for both themes and plugins.
* Edits to active plugins which cause PHP fatal errors will no longer auto-deactivate the plugin. Supersedes #39766.
* Introduce sandboxed PHP file edits for active themes, preventing accidental whitescreening of a user's site when introducing a fatal error.
* After writing a change to a PHP file for an active theme or plugin, perform loopback requests on the file editor admin screens and the homepage to check for fatal errors. If a fatal error is encountered, roll back the edited file and display the error to the user to fix and try again.
* Introduce a secure way to scrape PHP fatal errors from a site via `wp_start_scraping_edited_file_errors()` and `wp_finalize_scraping_edited_file_errors()`.
* Moves file modifications from `theme-editor.php` and `plugin-editor.php` to common `wp_edit_theme_plugin_file()` function.
* Refactor themes and plugin editors to submit file changes via Ajax instead of doing full page refreshes when JS is available.
* Use `get` method for theme/plugin dropdowns.
* Improve styling of plugin editors, including width of plugin/theme dropdowns.
* Improve notices API for theme/plugin editor JS component.
* Strip common base directory from plugin file list. See #24048.
* Factor out functions to list editable file types in `wp_get_theme_file_editable_extensions()` and `wp_get_plugin_file_editable_extensions()`.
* Scroll to line in editor that has linting error when attempting to save. See #41886.
* Add checkbox to dismiss lint errors to proceed with saving. See #41887.
* Only style the Update File button as disabled instead of actually disabling it for accessibility reasons.
* Ensure that value from CodeMirror is used instead of `textarea` when CodeMirror is present.
* Add "Are you sure?" check when leaving editor when there are unsaved changes.
Supersedes [41560].
See #39766, #24048, #41886.
Props westonruter, Clorith, melchoyce, johnbillion, jjj, jdgrimes, azaozz.
Fixes #21622, #41887.
Built from https://develop.svn.wordpress.org/trunk@41721
git-svn-id: http://core.svn.wordpress.org/trunk@41555 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-10-03 20:20:45 -04:00
if ( empty ( $file ) ) {
2004-11-16 22:15:44 -05:00
$file = $plugin_files [ 0 ];
File Editors: Introduce sandboxed live editing of PHP files with rollbacks for both themes and plugins.
* Edits to active plugins which cause PHP fatal errors will no longer auto-deactivate the plugin. Supersedes #39766.
* Introduce sandboxed PHP file edits for active themes, preventing accidental whitescreening of a user's site when introducing a fatal error.
* After writing a change to a PHP file for an active theme or plugin, perform loopback requests on the file editor admin screens and the homepage to check for fatal errors. If a fatal error is encountered, roll back the edited file and display the error to the user to fix and try again.
* Introduce a secure way to scrape PHP fatal errors from a site via `wp_start_scraping_edited_file_errors()` and `wp_finalize_scraping_edited_file_errors()`.
* Moves file modifications from `theme-editor.php` and `plugin-editor.php` to common `wp_edit_theme_plugin_file()` function.
* Refactor themes and plugin editors to submit file changes via Ajax instead of doing full page refreshes when JS is available.
* Use `get` method for theme/plugin dropdowns.
* Improve styling of plugin editors, including width of plugin/theme dropdowns.
* Improve notices API for theme/plugin editor JS component.
* Strip common base directory from plugin file list. See #24048.
* Factor out functions to list editable file types in `wp_get_theme_file_editable_extensions()` and `wp_get_plugin_file_editable_extensions()`.
* Scroll to line in editor that has linting error when attempting to save. See #41886.
* Add checkbox to dismiss lint errors to proceed with saving. See #41887.
* Only style the Update File button as disabled instead of actually disabling it for accessibility reasons.
* Ensure that value from CodeMirror is used instead of `textarea` when CodeMirror is present.
* Add "Are you sure?" check when leaving editor when there are unsaved changes.
Supersedes [41560].
See #39766, #24048, #41886.
Props westonruter, Clorith, melchoyce, johnbillion, jjj, jdgrimes, azaozz.
Fixes #21622, #41887.
Built from https://develop.svn.wordpress.org/trunk@41721
git-svn-id: http://core.svn.wordpress.org/trunk@41555 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-10-03 20:20:45 -04:00
}
2004-11-16 22:15:44 -05:00
2017-11-30 18:11:00 -05:00
$file = validate_file_to_edit ( $file , $plugin_files );
2008-05-27 13:55:24 -04:00
$real_file = WP_PLUGIN_DIR . '/' . $file ;
2017-09-21 21:36:48 -04:00
File Editors: Introduce sandboxed live editing of PHP files with rollbacks for both themes and plugins.
* Edits to active plugins which cause PHP fatal errors will no longer auto-deactivate the plugin. Supersedes #39766.
* Introduce sandboxed PHP file edits for active themes, preventing accidental whitescreening of a user's site when introducing a fatal error.
* After writing a change to a PHP file for an active theme or plugin, perform loopback requests on the file editor admin screens and the homepage to check for fatal errors. If a fatal error is encountered, roll back the edited file and display the error to the user to fix and try again.
* Introduce a secure way to scrape PHP fatal errors from a site via `wp_start_scraping_edited_file_errors()` and `wp_finalize_scraping_edited_file_errors()`.
* Moves file modifications from `theme-editor.php` and `plugin-editor.php` to common `wp_edit_theme_plugin_file()` function.
* Refactor themes and plugin editors to submit file changes via Ajax instead of doing full page refreshes when JS is available.
* Use `get` method for theme/plugin dropdowns.
* Improve styling of plugin editors, including width of plugin/theme dropdowns.
* Improve notices API for theme/plugin editor JS component.
* Strip common base directory from plugin file list. See #24048.
* Factor out functions to list editable file types in `wp_get_theme_file_editable_extensions()` and `wp_get_plugin_file_editable_extensions()`.
* Scroll to line in editor that has linting error when attempting to save. See #41886.
* Add checkbox to dismiss lint errors to proceed with saving. See #41887.
* Only style the Update File button as disabled instead of actually disabling it for accessibility reasons.
* Ensure that value from CodeMirror is used instead of `textarea` when CodeMirror is present.
* Add "Are you sure?" check when leaving editor when there are unsaved changes.
Supersedes [41560].
See #39766, #24048, #41886.
Props westonruter, Clorith, melchoyce, johnbillion, jjj, jdgrimes, azaozz.
Fixes #21622, #41887.
Built from https://develop.svn.wordpress.org/trunk@41721
git-svn-id: http://core.svn.wordpress.org/trunk@41555 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-10-03 20:20:45 -04:00
// Handle fallback editing of file when JavaScript is not available.
2017-11-30 18:11:00 -05:00
$edit_error = null ;
File Editors: Introduce sandboxed live editing of PHP files with rollbacks for both themes and plugins.
* Edits to active plugins which cause PHP fatal errors will no longer auto-deactivate the plugin. Supersedes #39766.
* Introduce sandboxed PHP file edits for active themes, preventing accidental whitescreening of a user's site when introducing a fatal error.
* After writing a change to a PHP file for an active theme or plugin, perform loopback requests on the file editor admin screens and the homepage to check for fatal errors. If a fatal error is encountered, roll back the edited file and display the error to the user to fix and try again.
* Introduce a secure way to scrape PHP fatal errors from a site via `wp_start_scraping_edited_file_errors()` and `wp_finalize_scraping_edited_file_errors()`.
* Moves file modifications from `theme-editor.php` and `plugin-editor.php` to common `wp_edit_theme_plugin_file()` function.
* Refactor themes and plugin editors to submit file changes via Ajax instead of doing full page refreshes when JS is available.
* Use `get` method for theme/plugin dropdowns.
* Improve styling of plugin editors, including width of plugin/theme dropdowns.
* Improve notices API for theme/plugin editor JS component.
* Strip common base directory from plugin file list. See #24048.
* Factor out functions to list editable file types in `wp_get_theme_file_editable_extensions()` and `wp_get_plugin_file_editable_extensions()`.
* Scroll to line in editor that has linting error when attempting to save. See #41886.
* Add checkbox to dismiss lint errors to proceed with saving. See #41887.
* Only style the Update File button as disabled instead of actually disabling it for accessibility reasons.
* Ensure that value from CodeMirror is used instead of `textarea` when CodeMirror is present.
* Add "Are you sure?" check when leaving editor when there are unsaved changes.
Supersedes [41560].
See #39766, #24048, #41886.
Props westonruter, Clorith, melchoyce, johnbillion, jjj, jdgrimes, azaozz.
Fixes #21622, #41887.
Built from https://develop.svn.wordpress.org/trunk@41721
git-svn-id: http://core.svn.wordpress.org/trunk@41555 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-10-03 20:20:45 -04:00
$posted_content = null ;
2020-01-28 19:45:18 -05:00
File Editors: Introduce sandboxed live editing of PHP files with rollbacks for both themes and plugins.
* Edits to active plugins which cause PHP fatal errors will no longer auto-deactivate the plugin. Supersedes #39766.
* Introduce sandboxed PHP file edits for active themes, preventing accidental whitescreening of a user's site when introducing a fatal error.
* After writing a change to a PHP file for an active theme or plugin, perform loopback requests on the file editor admin screens and the homepage to check for fatal errors. If a fatal error is encountered, roll back the edited file and display the error to the user to fix and try again.
* Introduce a secure way to scrape PHP fatal errors from a site via `wp_start_scraping_edited_file_errors()` and `wp_finalize_scraping_edited_file_errors()`.
* Moves file modifications from `theme-editor.php` and `plugin-editor.php` to common `wp_edit_theme_plugin_file()` function.
* Refactor themes and plugin editors to submit file changes via Ajax instead of doing full page refreshes when JS is available.
* Use `get` method for theme/plugin dropdowns.
* Improve styling of plugin editors, including width of plugin/theme dropdowns.
* Improve notices API for theme/plugin editor JS component.
* Strip common base directory from plugin file list. See #24048.
* Factor out functions to list editable file types in `wp_get_theme_file_editable_extensions()` and `wp_get_plugin_file_editable_extensions()`.
* Scroll to line in editor that has linting error when attempting to save. See #41886.
* Add checkbox to dismiss lint errors to proceed with saving. See #41887.
* Only style the Update File button as disabled instead of actually disabling it for accessibility reasons.
* Ensure that value from CodeMirror is used instead of `textarea` when CodeMirror is present.
* Add "Are you sure?" check when leaving editor when there are unsaved changes.
Supersedes [41560].
See #39766, #24048, #41886.
Props westonruter, Clorith, melchoyce, johnbillion, jjj, jdgrimes, azaozz.
Fixes #21622, #41887.
Built from https://develop.svn.wordpress.org/trunk@41721
git-svn-id: http://core.svn.wordpress.org/trunk@41555 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-10-03 20:20:45 -04:00
if ( 'POST' === $_SERVER [ 'REQUEST_METHOD' ] ) {
$r = wp_edit_theme_plugin_file ( wp_unslash ( $_POST ) );
if ( is_wp_error ( $r ) ) {
$edit_error = $r ;
if ( check_ajax_referer ( 'edit-plugin_' . $file , 'nonce' , false ) && isset ( $_POST [ 'newcontent' ] ) ) {
$posted_content = wp_unslash ( $_POST [ 'newcontent' ] );
2007-02-14 01:15:05 -05:00
}
2004-11-16 22:15:44 -05:00
} else {
2017-11-30 18:11:00 -05:00
wp_redirect (
add_query_arg (
array (
'a' => 1 , // This means "success" for some reason.
'plugin' => $plugin ,
'file' => $file ,
),
admin_url ( 'plugin-editor.php' )
)
);
2008-03-26 12:14:29 -04:00
exit ;
2007-02-14 01:15:05 -05:00
}
File Editors: Introduce sandboxed live editing of PHP files with rollbacks for both themes and plugins.
* Edits to active plugins which cause PHP fatal errors will no longer auto-deactivate the plugin. Supersedes #39766.
* Introduce sandboxed PHP file edits for active themes, preventing accidental whitescreening of a user's site when introducing a fatal error.
* After writing a change to a PHP file for an active theme or plugin, perform loopback requests on the file editor admin screens and the homepage to check for fatal errors. If a fatal error is encountered, roll back the edited file and display the error to the user to fix and try again.
* Introduce a secure way to scrape PHP fatal errors from a site via `wp_start_scraping_edited_file_errors()` and `wp_finalize_scraping_edited_file_errors()`.
* Moves file modifications from `theme-editor.php` and `plugin-editor.php` to common `wp_edit_theme_plugin_file()` function.
* Refactor themes and plugin editors to submit file changes via Ajax instead of doing full page refreshes when JS is available.
* Use `get` method for theme/plugin dropdowns.
* Improve styling of plugin editors, including width of plugin/theme dropdowns.
* Improve notices API for theme/plugin editor JS component.
* Strip common base directory from plugin file list. See #24048.
* Factor out functions to list editable file types in `wp_get_theme_file_editable_extensions()` and `wp_get_plugin_file_editable_extensions()`.
* Scroll to line in editor that has linting error when attempting to save. See #41886.
* Add checkbox to dismiss lint errors to proceed with saving. See #41887.
* Only style the Update File button as disabled instead of actually disabling it for accessibility reasons.
* Ensure that value from CodeMirror is used instead of `textarea` when CodeMirror is present.
* Add "Are you sure?" check when leaving editor when there are unsaved changes.
Supersedes [41560].
See #39766, #24048, #41886.
Props westonruter, Clorith, melchoyce, johnbillion, jjj, jdgrimes, azaozz.
Fixes #21622, #41887.
Built from https://develop.svn.wordpress.org/trunk@41721
git-svn-id: http://core.svn.wordpress.org/trunk@41555 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-10-03 20:20:45 -04:00
}
2007-02-14 01:15:05 -05:00
2020-01-28 19:45:18 -05:00
// List of allowable extensions.
$editable_extensions = wp_get_plugin_file_editable_extensions ( $plugin );
2009-04-06 13:27:36 -04:00
2017-11-30 18:11:00 -05:00
if ( ! is_file ( $real_file ) ) {
2019-05-26 08:35:51 -04:00
wp_die ( sprintf ( '<p>%s</p>' , __ ( 'File does not exist! Please double check the name and try again.' ) ) );
2017-11-30 18:11:00 -05:00
} else {
2020-01-28 19:45:18 -05:00
// Get the extension of the file.
2017-11-30 18:11:00 -05:00
if ( preg_match ( '/\.([^.]+)$/' , $real_file , $matches ) ) {
$ext = strtolower ( $matches [ 1 ] );
2020-01-28 19:45:18 -05:00
// If extension is not in the acceptable list, skip it.
2020-04-04 23:02:11 -04:00
if ( ! in_array ( $ext , $editable_extensions , true ) ) {
2017-11-30 18:11:00 -05:00
wp_die ( sprintf ( '<p>%s</p>' , __ ( 'Files of this type are not editable.' ) ) );
2009-04-06 13:27:36 -04:00
}
}
2017-11-30 18:11:00 -05:00
}
2009-05-24 19:47:49 -04:00
2020-01-28 19:45:18 -05:00
get_current_screen () -> add_help_tab (
array (
'id' => 'overview' ,
'title' => __ ( 'Overview' ),
'content' =>
Administration: Add "File" to Theme/Plugin Editor menu names and relocate "Plugin File Editor" to Tools for block themes.
[52232] relocated the Theme Editor menu item from Appearance to Tools for block themes. This commit relocates the Plugin Editor menu item from Plugins to Tools for block themes for a consistent workflow.
Both the Theme Editor and Plugin Editor menu items are renamed to "Theme File Editor" and "Plugin File Editor" respectively. Why? To better identify their purpose, i.e. to directly edit the code in the theme or plugin files. The rename is not limited to only block themes.
Follow-up to [52232].
Props poena, annezazu, audrasjb, clorith, courane01, costdev, dryanpress, desrosj, hellofromTonya, ipstenu, jameskoster, joen, johnbillion, joyously, manfcarlo, marybaum, pbiron, SergeyBiryukov, walbo, youknowriad.
Fixes #54382.
Built from https://develop.svn.wordpress.org/trunk@52406
git-svn-id: http://core.svn.wordpress.org/trunk@51998 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2021-12-21 15:06:02 -05:00
'<p>' . __ ( 'You can use the plugin file editor to make changes to any of your plugins’ individual PHP files. Be aware that if you make changes, plugins updates will overwrite your customizations.' ) . '</p>' .
Administration: Replace contracted verb forms for better consistency.
This changeset replaces contracted verb forms like `doesn't`, `can't`, or `isn't` with non-contracted forms like `does not`, `cannot`, or `is not`, for better consistency across the WordPress administration. It also updates some corresponding unit tests strings.
Props Presskopp, socalchristina, aandrewdixon, francina, SergeyBiryukov, JeffPaul, audrasjb, hellofromTonya.
Fixes #38913.
See #39176.
Built from https://develop.svn.wordpress.org/trunk@52978
git-svn-id: http://core.svn.wordpress.org/trunk@52567 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-03-22 12:25:03 -04:00
'<p>' . __ ( 'Choose a plugin to edit from the dropdown menu and click the Select button. Click once on any file name to load it in the editor, and make your changes. Do not forget to save your changes (Update File) when you are finished.' ) . '</p>' .
2022-04-15 07:58:10 -04:00
'<p>' . __ ( 'The documentation menu below the editor lists the PHP functions recognized in the plugin file. Clicking Look Up takes you to a web page about that particular function.' ) . '</p>' .
2020-01-28 19:45:18 -05:00
'<p id="editor-keyboard-trap-help-1">' . __ ( 'When using a keyboard to navigate:' ) . '</p>' .
'<ul>' .
'<li id="editor-keyboard-trap-help-2">' . __ ( 'In the editing area, the Tab key enters a tab character.' ) . '</li>' .
'<li id="editor-keyboard-trap-help-3">' . __ ( 'To move away from this area, press the Esc key followed by the Tab key.' ) . '</li>' .
'<li id="editor-keyboard-trap-help-4">' . __ ( 'Screen reader users: when in forms mode, you may need to press the Esc key twice.' ) . '</li>' .
'</ul>' .
Administration: Replace contracted verb forms for better consistency.
This changeset replaces contracted verb forms like `doesn't`, `can't`, or `isn't` with non-contracted forms like `does not`, `cannot`, or `is not`, for better consistency across the WordPress administration. It also updates some corresponding unit tests strings.
Props Presskopp, socalchristina, aandrewdixon, francina, SergeyBiryukov, JeffPaul, audrasjb, hellofromTonya.
Fixes #38913.
See #39176.
Built from https://develop.svn.wordpress.org/trunk@52978
git-svn-id: http://core.svn.wordpress.org/trunk@52567 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-03-22 12:25:03 -04:00
'<p>' . __ ( 'If you want to make changes but do not want them to be overwritten when the plugin is updated, you may be ready to think about writing your own plugin. For information on how to edit plugins, write your own from scratch, or just better understand their anatomy, check out the links below.' ) . '</p>' .
2020-01-28 19:45:18 -05:00
( is_network_admin () ? '<p>' . __ ( 'Any edits to files from this screen will be reflected on all sites in the network.' ) . '</p>' : '' ),
)
);
get_current_screen () -> set_help_sidebar (
'<p><strong>' . __ ( 'For more information:' ) . '</strong></p>' .
2023-02-23 05:38:21 -05:00
'<p>' . __ ( '<a href="https://wordpress.org/documentation/article/plugins-editor-screen/">Documentation on Editing Plugins</a>' ) . '</p>' .
2020-01-28 19:45:18 -05:00
'<p>' . __ ( '<a href="https://developer.wordpress.org/plugins/">Documentation on Writing Plugins</a>' ) . '</p>' .
2023-02-23 05:38:21 -05:00
'<p>' . __ ( '<a href="https://wordpress.org/support/forums/">Support forums</a>' ) . '</p>'
2020-01-28 19:45:18 -05:00
);
$settings = array (
'codeEditor' => wp_enqueue_code_editor ( array ( 'file' => $real_file ) ),
);
wp_enqueue_script ( 'wp-theme-plugin-editor' );
wp_add_inline_script ( 'wp-theme-plugin-editor' , sprintf ( 'jQuery( function( $ ) { wp.themePluginEditor.init( $( "#template" ), %s ); } )' , wp_json_encode ( $settings ) ) );
wp_add_inline_script ( 'wp-theme-plugin-editor' , sprintf ( 'wp.themePluginEditor.themeOrPlugin = "plugin";' ) );
2020-02-06 01:33:11 -05:00
require_once ABSPATH . 'wp-admin/admin-header.php' ;
2020-01-28 19:45:18 -05:00
update_recently_edited ( WP_PLUGIN_DIR . '/' . $file );
if ( ! empty ( $posted_content ) ) {
$content = $posted_content ;
} else {
$content = file_get_contents ( $real_file );
}
2009-03-06 11:17:57 -05:00
2023-06-24 05:52:19 -04:00
if ( str_ends_with ( $real_file , '.php' ) ) {
2020-01-28 19:45:18 -05:00
$functions = wp_doc_link_parse ( $content );
2009-03-06 11:17:57 -05:00
2020-01-28 19:45:18 -05:00
if ( ! empty ( $functions ) ) {
$docs_select = '<select name="docs-list" id="docs-list">' ;
Administration: Correct the escaping in documentation lookup for plugin and theme editor.
This brings consistency to similar code fragments that evolved in slightly different ways over the years:
* A check that the list of functions is not empty now exists in both editors.
* "Function Name..." is an option label, not an attribute, so `esc_html__()` is the correct function here.
* `esc_attr( urlencode( $function ) )` in the theme editor is replaced with `esc_attr( $function )`.
* `htmlspecialchars( $function )` in the theme editor is replaced with `esc_html( $function )`.
Follow-up to [10607], [10879], [11110], [11173], [11204], [11671], [14989].
Props aristath, justinahinon, poena, audrasjb, pratiweb, SergeyBiryukov.
Fixes #56007.
Built from https://develop.svn.wordpress.org/trunk@53758
git-svn-id: http://core.svn.wordpress.org/trunk@53317 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-07-22 07:33:10 -04:00
$docs_select .= '<option value="">' . esc_html__ ( 'Function Name…' ) . '</option>' ;
2020-01-28 19:45:18 -05:00
foreach ( $functions as $function ) {
$docs_select .= '<option value="' . esc_attr ( $function ) . '">' . esc_html ( $function ) . '()</option>' ;
2009-02-20 15:00:09 -05:00
}
Administration: Correct the escaping in documentation lookup for plugin and theme editor.
This brings consistency to similar code fragments that evolved in slightly different ways over the years:
* A check that the list of functions is not empty now exists in both editors.
* "Function Name..." is an option label, not an attribute, so `esc_html__()` is the correct function here.
* `esc_attr( urlencode( $function ) )` in the theme editor is replaced with `esc_attr( $function )`.
* `htmlspecialchars( $function )` in the theme editor is replaced with `esc_html( $function )`.
Follow-up to [10607], [10879], [11110], [11173], [11204], [11671], [14989].
Props aristath, justinahinon, poena, audrasjb, pratiweb, SergeyBiryukov.
Fixes #56007.
Built from https://develop.svn.wordpress.org/trunk@53758
git-svn-id: http://core.svn.wordpress.org/trunk@53317 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-07-22 07:33:10 -04:00
2020-01-28 19:45:18 -05:00
$docs_select .= '</select>' ;
2009-02-20 15:00:09 -05:00
}
2020-01-28 19:45:18 -05:00
}
2004-11-16 22:15:44 -05:00
2020-01-28 19:45:18 -05:00
$content = esc_textarea ( $content );
?>
2008-09-08 02:01:33 -04:00
< div class = " wrap " >
2015-06-27 11:41:25 -04:00
< h1 >< ? php echo esc_html ( $title ); ?> </h1>
2009-06-26 07:07:10 -04:00
File Editors: Introduce sandboxed live editing of PHP files with rollbacks for both themes and plugins.
* Edits to active plugins which cause PHP fatal errors will no longer auto-deactivate the plugin. Supersedes #39766.
* Introduce sandboxed PHP file edits for active themes, preventing accidental whitescreening of a user's site when introducing a fatal error.
* After writing a change to a PHP file for an active theme or plugin, perform loopback requests on the file editor admin screens and the homepage to check for fatal errors. If a fatal error is encountered, roll back the edited file and display the error to the user to fix and try again.
* Introduce a secure way to scrape PHP fatal errors from a site via `wp_start_scraping_edited_file_errors()` and `wp_finalize_scraping_edited_file_errors()`.
* Moves file modifications from `theme-editor.php` and `plugin-editor.php` to common `wp_edit_theme_plugin_file()` function.
* Refactor themes and plugin editors to submit file changes via Ajax instead of doing full page refreshes when JS is available.
* Use `get` method for theme/plugin dropdowns.
* Improve styling of plugin editors, including width of plugin/theme dropdowns.
* Improve notices API for theme/plugin editor JS component.
* Strip common base directory from plugin file list. See #24048.
* Factor out functions to list editable file types in `wp_get_theme_file_editable_extensions()` and `wp_get_plugin_file_editable_extensions()`.
* Scroll to line in editor that has linting error when attempting to save. See #41886.
* Add checkbox to dismiss lint errors to proceed with saving. See #41887.
* Only style the Update File button as disabled instead of actually disabling it for accessibility reasons.
* Ensure that value from CodeMirror is used instead of `textarea` when CodeMirror is present.
* Add "Are you sure?" check when leaving editor when there are unsaved changes.
Supersedes [41560].
See #39766, #24048, #41886.
Props westonruter, Clorith, melchoyce, johnbillion, jjj, jdgrimes, azaozz.
Fixes #21622, #41887.
Built from https://develop.svn.wordpress.org/trunk@41721
git-svn-id: http://core.svn.wordpress.org/trunk@41555 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-10-03 20:20:45 -04:00
< ? php if ( isset ( $_GET [ 'a' ] ) ) : ?>
< div id = " message " class = " updated notice is-dismissible " >
< p >< ? php _e ( 'File edited successfully.' ); ?> </p>
</ div >
< ? php elseif ( is_wp_error ( $edit_error ) ) : ?>
< div id = " message " class = " notice notice-error " >
< p >< ? php _e ( 'There was an error while trying to update the file. You may need to fix something and try updating again.' ); ?> </p>
< pre >< ? php echo esc_html ( $edit_error -> get_error_message () ? $edit_error -> get_error_message () : $edit_error -> get_error_code () ); ?> </pre>
</ div >
< ? php endif ; ?>
2009-06-26 07:07:10 -04:00
< div class = " fileedit-sub " >
< div class = " alignleft " >
2017-09-24 12:00:46 -04:00
< h2 >
< ? php
2015-09-23 23:09:24 -04:00
if ( is_plugin_active ( $plugin ) ) {
2020-10-18 13:27:06 -04:00
if ( is_writable ( $real_file ) ) {
2019-09-02 20:41:05 -04:00
/* translators: %s: Plugin file name. */
2020-06-20 09:18:11 -04:00
printf ( __ ( 'Editing %s (active)' ), '<strong>' . esc_html ( $file ) . '</strong>' );
2015-09-23 23:09:24 -04:00
} else {
2019-09-02 20:41:05 -04:00
/* translators: %s: Plugin file name. */
2020-06-20 09:18:11 -04:00
printf ( __ ( 'Browsing %s (active)' ), '<strong>' . esc_html ( $file ) . '</strong>' );
2015-09-23 23:09:24 -04:00
}
2009-06-26 07:07:10 -04:00
} else {
2020-10-18 13:27:06 -04:00
if ( is_writable ( $real_file ) ) {
2019-09-02 20:41:05 -04:00
/* translators: %s: Plugin file name. */
2020-06-20 09:18:11 -04:00
printf ( __ ( 'Editing %s (inactive)' ), '<strong>' . esc_html ( $file ) . '</strong>' );
2015-09-23 23:09:24 -04:00
} else {
2019-09-02 20:41:05 -04:00
/* translators: %s: Plugin file name. */
2020-06-20 09:18:11 -04:00
printf ( __ ( 'Browsing %s (inactive)' ), '<strong>' . esc_html ( $file ) . '</strong>' );
2015-09-23 23:09:24 -04:00
}
2009-06-26 07:07:10 -04:00
}
2017-09-24 12:00:46 -04:00
?>
</ h2 >
2009-06-26 07:07:10 -04:00
</ div >
< div class = " alignright " >
File Editors: Introduce sandboxed live editing of PHP files with rollbacks for both themes and plugins.
* Edits to active plugins which cause PHP fatal errors will no longer auto-deactivate the plugin. Supersedes #39766.
* Introduce sandboxed PHP file edits for active themes, preventing accidental whitescreening of a user's site when introducing a fatal error.
* After writing a change to a PHP file for an active theme or plugin, perform loopback requests on the file editor admin screens and the homepage to check for fatal errors. If a fatal error is encountered, roll back the edited file and display the error to the user to fix and try again.
* Introduce a secure way to scrape PHP fatal errors from a site via `wp_start_scraping_edited_file_errors()` and `wp_finalize_scraping_edited_file_errors()`.
* Moves file modifications from `theme-editor.php` and `plugin-editor.php` to common `wp_edit_theme_plugin_file()` function.
* Refactor themes and plugin editors to submit file changes via Ajax instead of doing full page refreshes when JS is available.
* Use `get` method for theme/plugin dropdowns.
* Improve styling of plugin editors, including width of plugin/theme dropdowns.
* Improve notices API for theme/plugin editor JS component.
* Strip common base directory from plugin file list. See #24048.
* Factor out functions to list editable file types in `wp_get_theme_file_editable_extensions()` and `wp_get_plugin_file_editable_extensions()`.
* Scroll to line in editor that has linting error when attempting to save. See #41886.
* Add checkbox to dismiss lint errors to proceed with saving. See #41887.
* Only style the Update File button as disabled instead of actually disabling it for accessibility reasons.
* Ensure that value from CodeMirror is used instead of `textarea` when CodeMirror is present.
* Add "Are you sure?" check when leaving editor when there are unsaved changes.
Supersedes [41560].
See #39766, #24048, #41886.
Props westonruter, Clorith, melchoyce, johnbillion, jjj, jdgrimes, azaozz.
Fixes #21622, #41887.
Built from https://develop.svn.wordpress.org/trunk@41721
git-svn-id: http://core.svn.wordpress.org/trunk@41555 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-10-03 20:20:45 -04:00
< form action = " plugin-editor.php " method = " get " >
2021-01-13 09:08:10 -05:00
< label for = " plugin " id = " theme-plugin-editor-selector " >< ? php _e ( 'Select plugin to edit:' ); ?> </label>
2009-02-22 15:05:11 -05:00
< select name = " plugin " id = " plugin " >
2020-01-28 19:45:18 -05:00
< ? php
foreach ( $plugins as $plugin_key => $a_plugin ) {
$plugin_name = $a_plugin [ 'Name' ];
2020-05-22 20:01:10 -04:00
if ( $plugin_key === $plugin ) {
2020-01-28 19:45:18 -05:00
$selected = " selected='selected' " ;
} else {
$selected = '' ;
}
$plugin_name = esc_attr ( $plugin_name );
$plugin_key = esc_attr ( $plugin_key );
echo " \n \t <option value= \" $plugin_key\ " $selected > $plugin_name </ option > " ;
}
?>
2009-02-22 15:05:11 -05:00
</ select >
2016-09-28 15:54:28 -04:00
< ? php submit_button ( __ ( 'Select' ), '' , 'Submit' , false ); ?>
2009-02-22 15:05:11 -05:00
</ form >
</ div >
2008-03-14 19:58:31 -04:00
< br class = " clear " />
2008-02-21 22:06:35 -05:00
</ div >
2009-06-26 07:07:10 -04:00
< div id = " templateside " >
2017-10-12 22:39:47 -04:00
< h2 id = " plugin-files-label " >< ? php _e ( 'Plugin Files' ); ?> </h2>
2004-11-16 22:15:44 -05:00
File Editors: Introduce sandboxed live editing of PHP files with rollbacks for both themes and plugins.
* Edits to active plugins which cause PHP fatal errors will no longer auto-deactivate the plugin. Supersedes #39766.
* Introduce sandboxed PHP file edits for active themes, preventing accidental whitescreening of a user's site when introducing a fatal error.
* After writing a change to a PHP file for an active theme or plugin, perform loopback requests on the file editor admin screens and the homepage to check for fatal errors. If a fatal error is encountered, roll back the edited file and display the error to the user to fix and try again.
* Introduce a secure way to scrape PHP fatal errors from a site via `wp_start_scraping_edited_file_errors()` and `wp_finalize_scraping_edited_file_errors()`.
* Moves file modifications from `theme-editor.php` and `plugin-editor.php` to common `wp_edit_theme_plugin_file()` function.
* Refactor themes and plugin editors to submit file changes via Ajax instead of doing full page refreshes when JS is available.
* Use `get` method for theme/plugin dropdowns.
* Improve styling of plugin editors, including width of plugin/theme dropdowns.
* Improve notices API for theme/plugin editor JS component.
* Strip common base directory from plugin file list. See #24048.
* Factor out functions to list editable file types in `wp_get_theme_file_editable_extensions()` and `wp_get_plugin_file_editable_extensions()`.
* Scroll to line in editor that has linting error when attempting to save. See #41886.
* Add checkbox to dismiss lint errors to proceed with saving. See #41887.
* Only style the Update File button as disabled instead of actually disabling it for accessibility reasons.
* Ensure that value from CodeMirror is used instead of `textarea` when CodeMirror is present.
* Add "Are you sure?" check when leaving editor when there are unsaved changes.
Supersedes [41560].
See #39766, #24048, #41886.
Props westonruter, Clorith, melchoyce, johnbillion, jjj, jdgrimes, azaozz.
Fixes #21622, #41887.
Built from https://develop.svn.wordpress.org/trunk@41721
git-svn-id: http://core.svn.wordpress.org/trunk@41555 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-10-03 20:20:45 -04:00
< ? php
$plugin_editable_files = array ();
foreach ( $plugin_files as $plugin_file ) {
2020-04-04 23:02:11 -04:00
if ( preg_match ( '/\.([^.]+)$/' , $plugin_file , $matches ) && in_array ( $matches [ 1 ], $editable_extensions , true ) ) {
File Editors: Introduce sandboxed live editing of PHP files with rollbacks for both themes and plugins.
* Edits to active plugins which cause PHP fatal errors will no longer auto-deactivate the plugin. Supersedes #39766.
* Introduce sandboxed PHP file edits for active themes, preventing accidental whitescreening of a user's site when introducing a fatal error.
* After writing a change to a PHP file for an active theme or plugin, perform loopback requests on the file editor admin screens and the homepage to check for fatal errors. If a fatal error is encountered, roll back the edited file and display the error to the user to fix and try again.
* Introduce a secure way to scrape PHP fatal errors from a site via `wp_start_scraping_edited_file_errors()` and `wp_finalize_scraping_edited_file_errors()`.
* Moves file modifications from `theme-editor.php` and `plugin-editor.php` to common `wp_edit_theme_plugin_file()` function.
* Refactor themes and plugin editors to submit file changes via Ajax instead of doing full page refreshes when JS is available.
* Use `get` method for theme/plugin dropdowns.
* Improve styling of plugin editors, including width of plugin/theme dropdowns.
* Improve notices API for theme/plugin editor JS component.
* Strip common base directory from plugin file list. See #24048.
* Factor out functions to list editable file types in `wp_get_theme_file_editable_extensions()` and `wp_get_plugin_file_editable_extensions()`.
* Scroll to line in editor that has linting error when attempting to save. See #41886.
* Add checkbox to dismiss lint errors to proceed with saving. See #41887.
* Only style the Update File button as disabled instead of actually disabling it for accessibility reasons.
* Ensure that value from CodeMirror is used instead of `textarea` when CodeMirror is present.
* Add "Are you sure?" check when leaving editor when there are unsaved changes.
Supersedes [41560].
See #39766, #24048, #41886.
Props westonruter, Clorith, melchoyce, johnbillion, jjj, jdgrimes, azaozz.
Fixes #21622, #41887.
Built from https://develop.svn.wordpress.org/trunk@41721
git-svn-id: http://core.svn.wordpress.org/trunk@41555 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-10-03 20:20:45 -04:00
$plugin_editable_files [] = $plugin_file ;
}
2009-04-06 13:27:36 -04:00
}
2017-09-25 17:46:47 -04:00
?>
2017-10-12 22:39:47 -04:00
< ul role = " tree " aria - labelledby = " plugin-files-label " >
2017-10-15 01:51:49 -04:00
< li role = " treeitem " tabindex = " -1 " aria - expanded = " true " aria - level = " 1 " aria - posinset = " 1 " aria - setsize = " 1 " >
< ul role = " group " >
2017-10-12 22:39:47 -04:00
< ? php wp_print_plugin_file_tree ( wp_make_plugin_file_tree ( $plugin_editable_files ) ); ?>
</ ul >
2006-11-19 02:56:05 -05:00
</ ul >
2009-06-26 07:07:10 -04:00
</ div >
2020-01-28 19:45:18 -05:00
2009-06-26 07:07:10 -04:00
< form name = " template " id = " template " action = " plugin-editor.php " method = " post " >
File Editors: Introduce sandboxed live editing of PHP files with rollbacks for both themes and plugins.
* Edits to active plugins which cause PHP fatal errors will no longer auto-deactivate the plugin. Supersedes #39766.
* Introduce sandboxed PHP file edits for active themes, preventing accidental whitescreening of a user's site when introducing a fatal error.
* After writing a change to a PHP file for an active theme or plugin, perform loopback requests on the file editor admin screens and the homepage to check for fatal errors. If a fatal error is encountered, roll back the edited file and display the error to the user to fix and try again.
* Introduce a secure way to scrape PHP fatal errors from a site via `wp_start_scraping_edited_file_errors()` and `wp_finalize_scraping_edited_file_errors()`.
* Moves file modifications from `theme-editor.php` and `plugin-editor.php` to common `wp_edit_theme_plugin_file()` function.
* Refactor themes and plugin editors to submit file changes via Ajax instead of doing full page refreshes when JS is available.
* Use `get` method for theme/plugin dropdowns.
* Improve styling of plugin editors, including width of plugin/theme dropdowns.
* Improve notices API for theme/plugin editor JS component.
* Strip common base directory from plugin file list. See #24048.
* Factor out functions to list editable file types in `wp_get_theme_file_editable_extensions()` and `wp_get_plugin_file_editable_extensions()`.
* Scroll to line in editor that has linting error when attempting to save. See #41886.
* Add checkbox to dismiss lint errors to proceed with saving. See #41887.
* Only style the Update File button as disabled instead of actually disabling it for accessibility reasons.
* Ensure that value from CodeMirror is used instead of `textarea` when CodeMirror is present.
* Add "Are you sure?" check when leaving editor when there are unsaved changes.
Supersedes [41560].
See #39766, #24048, #41886.
Props westonruter, Clorith, melchoyce, johnbillion, jjj, jdgrimes, azaozz.
Fixes #21622, #41887.
Built from https://develop.svn.wordpress.org/trunk@41721
git-svn-id: http://core.svn.wordpress.org/trunk@41555 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-10-03 20:20:45 -04:00
< ? php wp_nonce_field ( 'edit-plugin_' . $file , 'nonce' ); ?>
2020-01-28 19:45:18 -05:00
< div >
< label for = " newcontent " id = " theme-plugin-editor-label " >< ? php _e ( 'Selected file content:' ); ?> </label>
< textarea cols = " 70 " rows = " 25 " name = " newcontent " id = " newcontent " aria - describedby = " editor-keyboard-trap-help-1 editor-keyboard-trap-help-2 editor-keyboard-trap-help-3 editor-keyboard-trap-help-4 " >< ? php echo $content ; ?> </textarea>
< input type = " hidden " name = " action " value = " update " />
< input type = " hidden " name = " file " value = " <?php echo esc_attr( $file ); ?> " />
< input type = " hidden " name = " plugin " value = " <?php echo esc_attr( $plugin ); ?> " />
</ div >
< ? php if ( ! empty ( $docs_select ) ) : ?>
< div id = " documentation " class = " hide-if-no-js " >
< label for = " docs-list " >< ? php _e ( 'Documentation:' ); ?> </label>
< ? php echo $docs_select ; ?>
< input disabled id = " docs-lookup " 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() ) + '&locale=<?php echo urlencode( get_user_locale() ); ?>&version=<?php echo urlencode( get_bloginfo( 'version' ) ); ?>&redirect=true'); } " />
2004-11-16 22:15:44 -05:00
</ div >
2020-01-28 19:45:18 -05:00
< ? php endif ; ?>
2020-10-18 13:27:06 -04:00
< ? php if ( is_writable ( $real_file ) ) : ?>
2020-01-28 19:45:18 -05:00
< div class = " editor-notices " >
2020-04-04 23:02:11 -04:00
< ? php if ( in_array ( $plugin , ( array ) get_option ( 'active_plugins' , array () ), true ) ) { ?>
File Editors: Introduce sandboxed live editing of PHP files with rollbacks for both themes and plugins.
* Edits to active plugins which cause PHP fatal errors will no longer auto-deactivate the plugin. Supersedes #39766.
* Introduce sandboxed PHP file edits for active themes, preventing accidental whitescreening of a user's site when introducing a fatal error.
* After writing a change to a PHP file for an active theme or plugin, perform loopback requests on the file editor admin screens and the homepage to check for fatal errors. If a fatal error is encountered, roll back the edited file and display the error to the user to fix and try again.
* Introduce a secure way to scrape PHP fatal errors from a site via `wp_start_scraping_edited_file_errors()` and `wp_finalize_scraping_edited_file_errors()`.
* Moves file modifications from `theme-editor.php` and `plugin-editor.php` to common `wp_edit_theme_plugin_file()` function.
* Refactor themes and plugin editors to submit file changes via Ajax instead of doing full page refreshes when JS is available.
* Use `get` method for theme/plugin dropdowns.
* Improve styling of plugin editors, including width of plugin/theme dropdowns.
* Improve notices API for theme/plugin editor JS component.
* Strip common base directory from plugin file list. See #24048.
* Factor out functions to list editable file types in `wp_get_theme_file_editable_extensions()` and `wp_get_plugin_file_editable_extensions()`.
* Scroll to line in editor that has linting error when attempting to save. See #41886.
* Add checkbox to dismiss lint errors to proceed with saving. See #41887.
* Only style the Update File button as disabled instead of actually disabling it for accessibility reasons.
* Ensure that value from CodeMirror is used instead of `textarea` when CodeMirror is present.
* Add "Are you sure?" check when leaving editor when there are unsaved changes.
Supersedes [41560].
See #39766, #24048, #41886.
Props westonruter, Clorith, melchoyce, johnbillion, jjj, jdgrimes, azaozz.
Fixes #21622, #41887.
Built from https://develop.svn.wordpress.org/trunk@41721
git-svn-id: http://core.svn.wordpress.org/trunk@41555 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-10-03 20:20:45 -04:00
< div class = " notice notice-warning inline active-plugin-edit-warning " >
2020-01-28 19:45:18 -05:00
< p >< ? php _e ( '<strong>Warning:</strong> Making changes to active plugins is not recommended.' ); ?> </p>
</ div >
File Editors: Introduce sandboxed live editing of PHP files with rollbacks for both themes and plugins.
* Edits to active plugins which cause PHP fatal errors will no longer auto-deactivate the plugin. Supersedes #39766.
* Introduce sandboxed PHP file edits for active themes, preventing accidental whitescreening of a user's site when introducing a fatal error.
* After writing a change to a PHP file for an active theme or plugin, perform loopback requests on the file editor admin screens and the homepage to check for fatal errors. If a fatal error is encountered, roll back the edited file and display the error to the user to fix and try again.
* Introduce a secure way to scrape PHP fatal errors from a site via `wp_start_scraping_edited_file_errors()` and `wp_finalize_scraping_edited_file_errors()`.
* Moves file modifications from `theme-editor.php` and `plugin-editor.php` to common `wp_edit_theme_plugin_file()` function.
* Refactor themes and plugin editors to submit file changes via Ajax instead of doing full page refreshes when JS is available.
* Use `get` method for theme/plugin dropdowns.
* Improve styling of plugin editors, including width of plugin/theme dropdowns.
* Improve notices API for theme/plugin editor JS component.
* Strip common base directory from plugin file list. See #24048.
* Factor out functions to list editable file types in `wp_get_theme_file_editable_extensions()` and `wp_get_plugin_file_editable_extensions()`.
* Scroll to line in editor that has linting error when attempting to save. See #41886.
* Add checkbox to dismiss lint errors to proceed with saving. See #41887.
* Only style the Update File button as disabled instead of actually disabling it for accessibility reasons.
* Ensure that value from CodeMirror is used instead of `textarea` when CodeMirror is present.
* Add "Are you sure?" check when leaving editor when there are unsaved changes.
Supersedes [41560].
See #39766, #24048, #41886.
Props westonruter, Clorith, melchoyce, johnbillion, jjj, jdgrimes, azaozz.
Fixes #21622, #41887.
Built from https://develop.svn.wordpress.org/trunk@41721
git-svn-id: http://core.svn.wordpress.org/trunk@41555 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-10-03 20:20:45 -04:00
< ? php } ?>
2020-01-28 19:45:18 -05:00
</ div >
< p class = " submit " >
< ? php submit_button ( __ ( 'Update File' ), 'primary' , 'submit' , false ); ?>
< span class = " spinner " ></ span >
</ p >
< ? php else : ?>
2021-01-27 16:03:57 -05:00
< p >
2020-01-28 19:45:18 -05:00
< ? php
printf (
/* translators: %s: Documentation URL. */
__ ( 'You need to make this file writable before you can save your changes. See <a href="%s">Changing File Permissions</a> for more information.' ),
2023-02-23 05:38:21 -05:00
__ ( 'https://wordpress.org/documentation/article/changing-file-permissions/' )
2020-01-28 19:45:18 -05:00
);
?>
2021-01-27 16:03:57 -05:00
</ p >
2020-01-28 19:45:18 -05:00
< ? php endif ; ?>
< ? php wp_print_file_editor_templates (); ?>
2009-06-26 07:07:10 -04:00
</ form >
< br class = " clear " />
2006-11-19 02:56:05 -05:00
</ div >
2004-11-16 22:15:44 -05:00
< ? php
File Editors: Introduce an interstitial warning upon first visit.
This is an effort to provide a speed bump before heading into something potentially destructive and some education for users on better alternatives, even as we make the file editors safer to use. Each user, including existing users, will be shown a one-time dismissible modal warning on their first visit to each of the theme and plugin file editors.
Copy tweaks to come.
props michelleweber, Ipstenu, melchoyce, adamsilverstein, westonruter, toddnestor, aryamaaru, ZaneMatthew, cliffseal, helen.
fixes #31779.
Built from https://develop.svn.wordpress.org/trunk@41774
git-svn-id: http://core.svn.wordpress.org/trunk@41608 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-10-05 00:25:48 -04:00
$dismissed_pointers = explode ( ',' , ( string ) get_user_meta ( get_current_user_id (), 'dismissed_wp_pointers' , true ) );
if ( ! in_array ( 'plugin_editor_notice' , $dismissed_pointers , true ) ) :
2020-01-28 19:45:18 -05:00
// Get a back URL.
$referer = wp_get_referer ();
2017-10-13 16:56:50 -04:00
$excluded_referer_basenames = array ( 'plugin-editor.php' , 'wp-login.php' );
Code Modernization: Check the return type of `parse_url()` on Plugin/Theme Editor screens.
As per the PHP manual:
> If the `component` parameter is omitted, an associative array is returned.
> If the `component` parameter is specified, `parse_url()` returns a string (or an int, in the case of `PHP_URL_PORT`) instead of an array. If the requested component doesn't exist within the given URL, `null` will be returned.
Reference: [https://www.php.net/manual/en/function.parse-url.php#refsect1-function.parse-url-returnvalues PHP Manual: parse_url(): Return Values]
While it is probably unlikely that someone would have a direct link to the plugin/theme editor on their home page or even on someone else's homepage, it is entirely possible for the referrer URL to not have a "path" component.
In PHP 8.1, this would lead to a `basename(): Passing null to parameter #1 ($string) of type string is deprecated` notice.
Changing the logic around and adding validation for the return type value of `parse_url()` prevents that.
Follow-up to [51606], [51622], [51626].
Props jrf, hellofromTonya, SergeyBiryukov.
See #53635.
Built from https://develop.svn.wordpress.org/trunk@51629
git-svn-id: http://core.svn.wordpress.org/trunk@51235 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2021-08-17 17:56:58 -04:00
$return_url = admin_url ( '/' );
if ( $referer ) {
$referer_path = parse_url ( $referer , PHP_URL_PATH );
if ( is_string ( $referer_path ) && ! in_array ( basename ( $referer_path ), $excluded_referer_basenames , true ) ) {
$return_url = $referer ;
}
2017-10-13 16:56:50 -04:00
}
2018-08-16 21:51:36 -04:00
?>
2020-01-28 19:45:18 -05:00
< div id = " file-editor-warning " class = " notification-dialog-wrap file-editor-warning hide-if-no-js hidden " >
< div class = " notification-dialog-background " ></ div >
< div class = " notification-dialog " >
< div class = " file-editor-warning-content " >
< div class = " file-editor-warning-message " >
< h1 >< ? php _e ( 'Heads up!' ); ?> </h1>
2021-11-02 13:37:57 -04:00
< p >< ? php _e ( 'You appear to be making direct edits to your plugin in the WordPress dashboard. Editing plugins directly is not recommended as it may introduce incompatibilities that break your site and your changes may be lost in future updates.' ); ?> </p>
2020-01-28 19:45:18 -05:00
< p >< ? php _e ( 'If you absolutely have to make direct edits to this plugin, use a file manager to create a copy with a new name and hang on to the original. That way, you can re-enable a functional version if something goes wrong.' ); ?> </p>
</ div >
< p >
< a class = " button file-editor-warning-go-back " href = " <?php echo esc_url( $return_url ); ?> " >< ? php _e ( 'Go back' ); ?> </a>
< button type = " button " class = " file-editor-warning-dismiss button button-primary " >< ? php _e ( 'I understand' ); ?> </button>
</ p >
2017-10-16 13:59:52 -04:00
</ div >
File Editors: Introduce an interstitial warning upon first visit.
This is an effort to provide a speed bump before heading into something potentially destructive and some education for users on better alternatives, even as we make the file editors safer to use. Each user, including existing users, will be shown a one-time dismissible modal warning on their first visit to each of the theme and plugin file editors.
Copy tweaks to come.
props michelleweber, Ipstenu, melchoyce, adamsilverstein, westonruter, toddnestor, aryamaaru, ZaneMatthew, cliffseal, helen.
fixes #31779.
Built from https://develop.svn.wordpress.org/trunk@41774
git-svn-id: http://core.svn.wordpress.org/trunk@41608 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-10-05 00:25:48 -04:00
</ div >
</ div >
2018-08-16 21:51:36 -04:00
< ? php
2018-12-19 02:42:49 -05:00
endif ; // Editor warning notice.
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.
Built from https://develop.svn.wordpress.org/trunk@38745
git-svn-id: http://core.svn.wordpress.org/trunk@38688 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-10-07 12:58:28 -04:00
2020-02-06 01:33:11 -05:00
require_once ABSPATH . 'wp-admin/admin-footer.php' ;