2008-02-11 00:45:54 -05:00
|
|
|
<?php
|
2008-08-16 03:27:34 -04:00
|
|
|
/**
|
2009-04-19 15:36:28 -04:00
|
|
|
* Update/Install Plugin/Theme administration panel.
|
2008-08-16 03:27:34 -04:00
|
|
|
*
|
|
|
|
* @package WordPress
|
|
|
|
* @subpackage Administration
|
|
|
|
*/
|
|
|
|
|
2020-04-04 23:02:11 -04:00
|
|
|
if ( ! defined( 'IFRAME_REQUEST' )
|
|
|
|
&& isset( $_GET['action'] ) && in_array( $_GET['action'], array( 'update-selected', 'activate-plugin', 'update-selected-themes' ), true )
|
|
|
|
) {
|
2010-12-10 13:25:18 -05:00
|
|
|
define( 'IFRAME_REQUEST', true );
|
2017-11-30 18:11:00 -05:00
|
|
|
}
|
2010-10-18 13:58:36 -04:00
|
|
|
|
2008-08-16 03:27:34 -04:00
|
|
|
/** WordPress Administration Bootstrap */
|
2020-02-06 01:33:11 -05:00
|
|
|
require_once __DIR__ . '/admin.php';
|
2008-02-11 00:45:54 -05:00
|
|
|
|
2020-02-06 01:33:11 -05:00
|
|
|
require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
|
2016-08-31 12:31:29 -04:00
|
|
|
|
2020-07-10 02:08:06 -04:00
|
|
|
wp_enqueue_script( 'wp-a11y' );
|
|
|
|
|
2017-11-30 18:11:00 -05:00
|
|
|
if ( isset( $_GET['action'] ) ) {
|
|
|
|
$plugin = isset( $_REQUEST['plugin'] ) ? trim( $_REQUEST['plugin'] ) : '';
|
|
|
|
$theme = isset( $_REQUEST['theme'] ) ? urldecode( $_REQUEST['theme'] ) : '';
|
|
|
|
$action = isset( $_REQUEST['action'] ) ? $_REQUEST['action'] : '';
|
2008-12-09 13:03:31 -05:00
|
|
|
|
2020-05-16 14:42:12 -04:00
|
|
|
if ( 'update-selected' === $action ) {
|
2017-11-30 18:11:00 -05:00
|
|
|
if ( ! current_user_can( 'update_plugins' ) ) {
|
2016-06-29 11:16:29 -04:00
|
|
|
wp_die( __( 'Sorry, you are not allowed to update plugins for this site.' ) );
|
2017-11-30 18:11:00 -05:00
|
|
|
}
|
2010-03-06 03:39:50 -05:00
|
|
|
|
|
|
|
check_admin_referer( 'bulk-update-plugins' );
|
|
|
|
|
2017-11-30 18:11:00 -05:00
|
|
|
if ( isset( $_GET['plugins'] ) ) {
|
|
|
|
$plugins = explode( ',', stripslashes( $_GET['plugins'] ) );
|
|
|
|
} elseif ( isset( $_POST['checked'] ) ) {
|
2010-03-06 03:39:50 -05:00
|
|
|
$plugins = (array) $_POST['checked'];
|
2017-11-30 18:11:00 -05:00
|
|
|
} else {
|
2010-03-06 03:39:50 -05:00
|
|
|
$plugins = array();
|
2017-11-30 18:11:00 -05:00
|
|
|
}
|
2010-03-06 03:39:50 -05:00
|
|
|
|
2017-11-30 18:11:00 -05:00
|
|
|
$plugins = array_map( 'urldecode', $plugins );
|
2010-03-06 03:39:50 -05:00
|
|
|
|
2017-11-30 18:11:00 -05:00
|
|
|
$url = 'update.php?action=update-selected&plugins=' . urlencode( implode( ',', $plugins ) );
|
2010-03-06 03:39:50 -05:00
|
|
|
$nonce = 'bulk-update-plugins';
|
|
|
|
|
2014-02-26 01:55:14 -05:00
|
|
|
wp_enqueue_script( 'updates' );
|
2010-03-06 03:39:50 -05:00
|
|
|
iframe_header();
|
|
|
|
|
|
|
|
$upgrader = new Plugin_Upgrader( new Bulk_Plugin_Upgrader_Skin( compact( 'nonce', 'url' ) ) );
|
|
|
|
$upgrader->bulk_upgrade( $plugins );
|
|
|
|
|
|
|
|
iframe_footer();
|
2010-03-17 12:27:25 -04:00
|
|
|
|
2020-05-16 14:42:12 -04:00
|
|
|
} elseif ( 'upgrade-plugin' === $action ) {
|
2017-11-30 18:11:00 -05:00
|
|
|
if ( ! current_user_can( 'update_plugins' ) ) {
|
|
|
|
wp_die( __( 'Sorry, you are not allowed to update plugins for this site.' ) );
|
|
|
|
}
|
2009-04-19 15:36:28 -04:00
|
|
|
|
2017-11-30 18:11:00 -05:00
|
|
|
check_admin_referer( 'upgrade-plugin_' . $plugin );
|
2009-04-19 15:36:28 -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 = __( 'Update Plugin' );
|
|
|
|
$parent_file = 'plugins.php';
|
2009-04-19 15:36:28 -04:00
|
|
|
$submenu_file = 'plugins.php';
|
2014-02-26 01:55:14 -05:00
|
|
|
|
|
|
|
wp_enqueue_script( 'updates' );
|
2020-02-06 01:33:11 -05:00
|
|
|
require_once ABSPATH . 'wp-admin/admin-header.php';
|
2009-04-19 15:36:28 -04:00
|
|
|
|
|
|
|
$nonce = 'upgrade-plugin_' . $plugin;
|
2017-11-30 18:11:00 -05:00
|
|
|
$url = 'update.php?action=upgrade-plugin&plugin=' . urlencode( $plugin );
|
2009-04-19 15:36:28 -04:00
|
|
|
|
2017-11-30 18:11:00 -05:00
|
|
|
$upgrader = new Plugin_Upgrader( new Plugin_Upgrader_Skin( compact( 'title', 'nonce', 'url', 'plugin' ) ) );
|
|
|
|
$upgrader->upgrade( $plugin );
|
2009-04-19 15:36:28 -04:00
|
|
|
|
2020-02-06 01:33:11 -05:00
|
|
|
require_once ABSPATH . 'wp-admin/admin-footer.php';
|
2009-04-20 14:18:39 -04:00
|
|
|
|
2020-05-16 14:42:12 -04:00
|
|
|
} elseif ( 'activate-plugin' === $action ) {
|
2017-11-30 18:11:00 -05:00
|
|
|
if ( ! current_user_can( 'update_plugins' ) ) {
|
|
|
|
wp_die( __( 'Sorry, you are not allowed to update plugins for this site.' ) );
|
|
|
|
}
|
2009-04-19 15:36:28 -04:00
|
|
|
|
2017-11-30 18:11:00 -05:00
|
|
|
check_admin_referer( 'activate-plugin_' . $plugin );
|
|
|
|
if ( ! isset( $_GET['failure'] ) && ! isset( $_GET['success'] ) ) {
|
|
|
|
wp_redirect( admin_url( 'update.php?action=activate-plugin&failure=true&plugin=' . urlencode( $plugin ) . '&_wpnonce=' . $_GET['_wpnonce'] ) );
|
2010-10-27 09:40:14 -04:00
|
|
|
activate_plugin( $plugin, '', ! empty( $_GET['networkwide'] ), true );
|
2017-11-30 18:11:00 -05:00
|
|
|
wp_redirect( admin_url( 'update.php?action=activate-plugin&success=true&plugin=' . urlencode( $plugin ) . '&_wpnonce=' . $_GET['_wpnonce'] ) );
|
2008-03-21 19:02:00 -04:00
|
|
|
die();
|
|
|
|
}
|
2017-11-30 18:11:00 -05:00
|
|
|
iframe_header( __( 'Plugin Reactivation' ), true );
|
|
|
|
if ( isset( $_GET['success'] ) ) {
|
|
|
|
echo '<p>' . __( 'Plugin reactivated successfully.' ) . '</p>';
|
|
|
|
}
|
2008-03-21 19:02:00 -04:00
|
|
|
|
2017-11-30 18:11:00 -05:00
|
|
|
if ( isset( $_GET['failure'] ) ) {
|
|
|
|
echo '<p>' . __( 'Plugin failed to reactivate due to a fatal error.' ) . '</p>';
|
2009-12-12 04:20:07 -05:00
|
|
|
|
2011-04-12 05:21:13 -04:00
|
|
|
error_reporting( E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_ERROR | E_WARNING | E_PARSE | E_USER_ERROR | E_USER_WARNING | E_RECOVERABLE_ERROR );
|
2020-01-28 19:45:18 -05:00
|
|
|
ini_set( 'display_errors', true ); // Ensure that fatal errors are displayed.
|
2014-02-10 18:00:15 -05:00
|
|
|
wp_register_plugin_realpath( WP_PLUGIN_DIR . '/' . $plugin );
|
2020-02-06 01:33:11 -05:00
|
|
|
include WP_PLUGIN_DIR . '/' . $plugin;
|
2008-03-21 19:02:00 -04:00
|
|
|
}
|
2008-10-13 19:39:56 -04:00
|
|
|
iframe_footer();
|
2020-05-16 14:42:12 -04:00
|
|
|
} elseif ( 'install-plugin' === $action ) {
|
2009-04-19 15:36:28 -04:00
|
|
|
|
2017-11-30 18:11:00 -05:00
|
|
|
if ( ! current_user_can( 'install_plugins' ) ) {
|
2016-06-29 11:16:29 -04:00
|
|
|
wp_die( __( 'Sorry, you are not allowed to install plugins on this site.' ) );
|
2017-11-30 18:11:00 -05:00
|
|
|
}
|
2009-04-19 15:36:28 -04:00
|
|
|
|
Coding Standards: Replace `include_once` with `require_once` for required files.
Per [https://developer.wordpress.org/coding-standards/wordpress-coding-standards/php/#writing-include-require-statements WordPress PHP coding standards], it is ''strongly recommended'' to use `require[_once]` for unconditional includes. When using `include[_once]`, PHP will throw a warning when the file is not found but will continue execution, which will almost certainly lead to other errors/warnings/notices being thrown if your application depends on the file loaded, potentially leading to security leaks. For that reason, `require[_once]` is generally the better choice as it will throw a `Fatal Error` if the file cannot be found.
Follow-up to [1674], [1812], [1964], [6779], [8540], [10521], [11005], [11911], [16065], [16149], [25421], [25466], [25823], [37714], [42981], [45448], [47198], [54276], [55633].
Props kausaralm, SergeyBiryukov.
See #57839.
Built from https://develop.svn.wordpress.org/trunk@55641
git-svn-id: http://core.svn.wordpress.org/trunk@55153 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-04-09 07:57:22 -04:00
|
|
|
require_once ABSPATH . 'wp-admin/includes/plugin-install.php'; // For plugins_api().
|
2009-04-20 14:18:39 -04:00
|
|
|
|
2015-09-26 11:50:25 -04:00
|
|
|
check_admin_referer( 'install-plugin_' . $plugin );
|
2017-11-30 18:11:00 -05:00
|
|
|
$api = plugins_api(
|
2018-08-16 21:51:36 -04:00
|
|
|
'plugin_information',
|
|
|
|
array(
|
2017-11-30 18:11:00 -05:00
|
|
|
'slug' => $plugin,
|
|
|
|
'fields' => array(
|
2018-02-01 00:17:33 -05:00
|
|
|
'sections' => false,
|
2017-11-30 18:11:00 -05:00
|
|
|
),
|
|
|
|
)
|
|
|
|
);
|
2015-09-26 11:50:25 -04:00
|
|
|
|
|
|
|
if ( is_wp_error( $api ) ) {
|
2017-11-30 18:11:00 -05:00
|
|
|
wp_die( $api );
|
2015-09-26 11:50:25 -04:00
|
|
|
}
|
2009-04-20 14:18:39 -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 = __( 'Plugin Installation' );
|
|
|
|
$parent_file = 'plugins.php';
|
2009-04-19 15:36:28 -04:00
|
|
|
$submenu_file = 'plugin-install.php';
|
2021-07-22 09:53:00 -04:00
|
|
|
|
2020-02-06 01:33:11 -05:00
|
|
|
require_once ABSPATH . 'wp-admin/admin-header.php';
|
2009-04-20 14:18:39 -04:00
|
|
|
|
2019-09-02 20:41:05 -04:00
|
|
|
/* translators: %s: Plugin name and version. */
|
2017-11-30 18:11:00 -05:00
|
|
|
$title = sprintf( __( 'Installing Plugin: %s' ), $api->name . ' ' . $api->version );
|
2009-04-19 15:36:28 -04:00
|
|
|
$nonce = 'install-plugin_' . $plugin;
|
2017-11-30 18:11:00 -05:00
|
|
|
$url = 'update.php?action=install-plugin&plugin=' . urlencode( $plugin );
|
|
|
|
if ( isset( $_GET['from'] ) ) {
|
|
|
|
$url .= '&from=' . urlencode( stripslashes( $_GET['from'] ) );
|
|
|
|
}
|
2010-05-27 07:04:08 -04:00
|
|
|
|
2020-01-28 19:45:18 -05:00
|
|
|
$type = 'web'; // Install plugin type, From Web or an Upload.
|
2009-04-19 15:36:28 -04:00
|
|
|
|
2017-11-30 18:11:00 -05:00
|
|
|
$upgrader = new Plugin_Upgrader( new Plugin_Installer_Skin( compact( 'title', 'url', 'nonce', 'plugin', 'api' ) ) );
|
|
|
|
$upgrader->install( $api->download_link );
|
2009-04-20 14:18:39 -04:00
|
|
|
|
2020-02-06 01:33:11 -05:00
|
|
|
require_once ABSPATH . 'wp-admin/admin-footer.php';
|
2009-04-19 15:36:28 -04:00
|
|
|
|
2020-05-16 14:42:12 -04:00
|
|
|
} elseif ( 'upload-plugin' === $action ) {
|
2009-04-19 15:36:28 -04:00
|
|
|
|
2014-08-26 21:32:18 -04:00
|
|
|
if ( ! current_user_can( 'upload_plugins' ) ) {
|
2016-06-29 11:16:29 -04:00
|
|
|
wp_die( __( 'Sorry, you are not allowed to install plugins on this site.' ) );
|
2014-08-26 21:32:18 -04:00
|
|
|
}
|
2009-04-19 15:36:28 -04:00
|
|
|
|
2017-11-30 18:11:00 -05:00
|
|
|
check_admin_referer( 'plugin-upload' );
|
2009-04-19 15:36:28 -04:00
|
|
|
|
2024-01-30 09:23:12 -05:00
|
|
|
if ( isset( $_FILES['pluginzip']['name'] ) && ! str_ends_with( strtolower( $_FILES['pluginzip']['name'] ), '.zip' ) ) {
|
|
|
|
wp_die( __( 'Only .zip archives may be uploaded.' ) );
|
|
|
|
}
|
|
|
|
|
2017-11-30 18:11:00 -05:00
|
|
|
$file_upload = new File_Upload_Upgrader( 'pluginzip', 'package' );
|
2009-04-19 15:36:28 -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 = __( 'Upload Plugin' );
|
|
|
|
$parent_file = 'plugins.php';
|
2009-04-19 15:36:28 -04:00
|
|
|
$submenu_file = 'plugin-install.php';
|
2021-07-22 09:53:00 -04:00
|
|
|
|
2020-02-06 01:33:11 -05:00
|
|
|
require_once ABSPATH . 'wp-admin/admin-header.php';
|
2009-04-20 14:18:39 -04:00
|
|
|
|
2019-09-02 20:41:05 -04:00
|
|
|
/* translators: %s: File name. */
|
Upgrade/install: Allow plugin and theme updates from a uploaded .zip file.
Props mariovalney, cyberhobo, imath, shaunandrews, mariovalney, earnjam, desrosj, dd32, folletto, swissspidy, melchoyce, pento, joshuawold, psykro, clorith, ahortin, galbaras, pingram3541, joyously, doobeedoo, karmatosed, poena, whyisjake, earnjam, sergeybiryukov, audrasjb, azaozz.
Fixes #9757.
Built from https://develop.svn.wordpress.org/trunk@48390
git-svn-id: http://core.svn.wordpress.org/trunk@48159 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2020-07-07 13:49:05 -04:00
|
|
|
$title = sprintf( __( 'Installing plugin from uploaded file: %s' ), esc_html( basename( $file_upload->filename ) ) );
|
2009-04-19 15:36:28 -04:00
|
|
|
$nonce = 'plugin-upload';
|
2017-11-30 18:11:00 -05:00
|
|
|
$url = add_query_arg( array( 'package' => $file_upload->id ), 'update.php?action=upload-plugin' );
|
2020-01-28 19:45:18 -05:00
|
|
|
$type = 'upload'; // Install plugin type, From Web or an Upload.
|
2009-04-19 15:36:28 -04:00
|
|
|
|
Upgrade/install: Allow plugin and theme updates from a uploaded .zip file.
Props mariovalney, cyberhobo, imath, shaunandrews, mariovalney, earnjam, desrosj, dd32, folletto, swissspidy, melchoyce, pento, joshuawold, psykro, clorith, ahortin, galbaras, pingram3541, joyously, doobeedoo, karmatosed, poena, whyisjake, earnjam, sergeybiryukov, audrasjb, azaozz.
Fixes #9757.
Built from https://develop.svn.wordpress.org/trunk@48390
git-svn-id: http://core.svn.wordpress.org/trunk@48159 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2020-07-07 13:49:05 -04:00
|
|
|
$overwrite = isset( $_GET['overwrite'] ) ? sanitize_text_field( $_GET['overwrite'] ) : '';
|
|
|
|
$overwrite = in_array( $overwrite, array( 'update-plugin', 'downgrade-plugin' ), true ) ? $overwrite : '';
|
|
|
|
|
|
|
|
$upgrader = new Plugin_Upgrader( new Plugin_Installer_Skin( compact( 'type', 'title', 'nonce', 'url', 'overwrite' ) ) );
|
|
|
|
$result = $upgrader->install( $file_upload->package, array( 'overwrite_package' => $overwrite ) );
|
2009-04-19 15:36:28 -04:00
|
|
|
|
2017-11-30 18:11:00 -05:00
|
|
|
if ( $result || is_wp_error( $result ) ) {
|
2011-08-28 01:51:38 -04:00
|
|
|
$file_upload->cleanup();
|
2017-11-30 18:11:00 -05:00
|
|
|
}
|
2011-08-27 23:51:35 -04:00
|
|
|
|
2020-02-06 01:33:11 -05:00
|
|
|
require_once ABSPATH . 'wp-admin/admin-footer.php';
|
2009-04-19 15:36:28 -04:00
|
|
|
|
2020-07-10 02:08:06 -04:00
|
|
|
} elseif ( 'upload-plugin-cancel-overwrite' === $action ) {
|
|
|
|
if ( ! current_user_can( 'upload_plugins' ) ) {
|
|
|
|
wp_die( __( 'Sorry, you are not allowed to install plugins on this site.' ) );
|
|
|
|
}
|
|
|
|
|
|
|
|
check_admin_referer( 'plugin-upload-cancel-overwrite' );
|
|
|
|
|
|
|
|
// Make sure the attachment still exists, or File_Upload_Upgrader will call wp_die()
|
|
|
|
// that shows a generic "Please select a file" error.
|
|
|
|
if ( ! empty( $_GET['package'] ) ) {
|
|
|
|
$attachment_id = (int) $_GET['package'];
|
|
|
|
|
|
|
|
if ( get_post( $attachment_id ) ) {
|
|
|
|
$file_upload = new File_Upload_Upgrader( 'pluginzip', 'package' );
|
|
|
|
$file_upload->cleanup();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
wp_redirect( self_admin_url( 'plugin-install.php' ) );
|
|
|
|
exit;
|
2020-05-16 14:42:12 -04:00
|
|
|
} elseif ( 'upgrade-theme' === $action ) {
|
2009-04-19 15:36:28 -04:00
|
|
|
|
2017-11-30 18:11:00 -05:00
|
|
|
if ( ! current_user_can( 'update_themes' ) ) {
|
|
|
|
wp_die( __( 'Sorry, you are not allowed to update themes for this site.' ) );
|
|
|
|
}
|
2009-04-19 15:36:28 -04:00
|
|
|
|
2017-11-30 18:11:00 -05:00
|
|
|
check_admin_referer( 'upgrade-theme_' . $theme );
|
2009-04-19 15:36:28 -04:00
|
|
|
|
2014-02-26 01:55:14 -05:00
|
|
|
wp_enqueue_script( 'updates' );
|
2012-04-09 22:25:03 -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 = __( 'Update Theme' );
|
|
|
|
$parent_file = 'themes.php';
|
2009-04-19 15:36:28 -04:00
|
|
|
$submenu_file = 'themes.php';
|
2021-07-22 09:53:00 -04:00
|
|
|
|
2020-02-06 01:33:11 -05:00
|
|
|
require_once ABSPATH . 'wp-admin/admin-header.php';
|
2009-04-19 15:36:28 -04:00
|
|
|
|
|
|
|
$nonce = 'upgrade-theme_' . $theme;
|
2017-11-30 18:11:00 -05:00
|
|
|
$url = 'update.php?action=upgrade-theme&theme=' . urlencode( $theme );
|
2009-04-19 15:36:28 -04:00
|
|
|
|
2017-11-30 18:11:00 -05:00
|
|
|
$upgrader = new Theme_Upgrader( new Theme_Upgrader_Skin( compact( 'title', 'nonce', 'url', 'theme' ) ) );
|
|
|
|
$upgrader->upgrade( $theme );
|
2009-04-19 15:36:28 -04:00
|
|
|
|
2020-02-06 01:33:11 -05:00
|
|
|
require_once ABSPATH . 'wp-admin/admin-footer.php';
|
2020-05-16 14:42:12 -04:00
|
|
|
} elseif ( 'update-selected-themes' === $action ) {
|
2017-11-30 18:11:00 -05:00
|
|
|
if ( ! current_user_can( 'update_themes' ) ) {
|
2016-06-29 11:16:29 -04:00
|
|
|
wp_die( __( 'Sorry, you are not allowed to update themes for this site.' ) );
|
2017-11-30 18:11:00 -05:00
|
|
|
}
|
2009-04-20 14:18:39 -04:00
|
|
|
|
2010-03-12 22:59:40 -05:00
|
|
|
check_admin_referer( 'bulk-update-themes' );
|
|
|
|
|
2017-11-30 18:11:00 -05:00
|
|
|
if ( isset( $_GET['themes'] ) ) {
|
|
|
|
$themes = explode( ',', stripslashes( $_GET['themes'] ) );
|
|
|
|
} elseif ( isset( $_POST['checked'] ) ) {
|
2010-03-12 22:59:40 -05:00
|
|
|
$themes = (array) $_POST['checked'];
|
2017-11-30 18:11:00 -05:00
|
|
|
} else {
|
2010-03-12 22:59:40 -05:00
|
|
|
$themes = array();
|
2017-11-30 18:11:00 -05:00
|
|
|
}
|
2010-03-12 22:59:40 -05:00
|
|
|
|
2017-11-30 18:11:00 -05:00
|
|
|
$themes = array_map( 'urldecode', $themes );
|
2010-03-12 22:59:40 -05:00
|
|
|
|
2017-11-30 18:11:00 -05:00
|
|
|
$url = 'update.php?action=update-selected-themes&themes=' . urlencode( implode( ',', $themes ) );
|
2010-03-12 22:59:40 -05:00
|
|
|
$nonce = 'bulk-update-themes';
|
|
|
|
|
2014-02-26 01:55:14 -05:00
|
|
|
wp_enqueue_script( 'updates' );
|
2010-03-12 22:59:40 -05:00
|
|
|
iframe_header();
|
|
|
|
|
|
|
|
$upgrader = new Theme_Upgrader( new Bulk_Theme_Upgrader_Skin( compact( 'nonce', 'url' ) ) );
|
|
|
|
$upgrader->bulk_upgrade( $themes );
|
|
|
|
|
|
|
|
iframe_footer();
|
2020-05-16 14:42:12 -04:00
|
|
|
} elseif ( 'install-theme' === $action ) {
|
2009-04-19 15:36:28 -04:00
|
|
|
|
2017-11-30 18:11:00 -05:00
|
|
|
if ( ! current_user_can( 'install_themes' ) ) {
|
2016-06-29 11:16:29 -04:00
|
|
|
wp_die( __( 'Sorry, you are not allowed to install themes on this site.' ) );
|
2017-11-30 18:11:00 -05:00
|
|
|
}
|
2008-02-11 00:45:54 -05:00
|
|
|
|
Coding Standards: Replace `include_once` with `require_once` for required files.
Per [https://developer.wordpress.org/coding-standards/wordpress-coding-standards/php/#writing-include-require-statements WordPress PHP coding standards], it is ''strongly recommended'' to use `require[_once]` for unconditional includes. When using `include[_once]`, PHP will throw a warning when the file is not found but will continue execution, which will almost certainly lead to other errors/warnings/notices being thrown if your application depends on the file loaded, potentially leading to security leaks. For that reason, `require[_once]` is generally the better choice as it will throw a `Fatal Error` if the file cannot be found.
Follow-up to [1674], [1812], [1964], [6779], [8540], [10521], [11005], [11911], [16065], [16149], [25421], [25466], [25823], [37714], [42981], [45448], [47198], [54276], [55633].
Props kausaralm, SergeyBiryukov.
See #57839.
Built from https://develop.svn.wordpress.org/trunk@55641
git-svn-id: http://core.svn.wordpress.org/trunk@55153 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-04-09 07:57:22 -04:00
|
|
|
require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; // For themes_api().
|
2016-08-31 12:31:29 -04:00
|
|
|
|
2014-04-14 21:16:14 -04:00
|
|
|
check_admin_referer( 'install-theme_' . $theme );
|
2017-11-30 18:11:00 -05:00
|
|
|
$api = themes_api(
|
2018-08-16 21:51:36 -04:00
|
|
|
'theme_information',
|
|
|
|
array(
|
2017-11-30 18:11:00 -05:00
|
|
|
'slug' => $theme,
|
|
|
|
'fields' => array(
|
|
|
|
'sections' => false,
|
|
|
|
'tags' => false,
|
|
|
|
),
|
|
|
|
)
|
2020-01-28 19:45:18 -05:00
|
|
|
); // Save on a bit of bandwidth.
|
2009-04-19 15:36:28 -04:00
|
|
|
|
2017-10-09 12:04:48 -04:00
|
|
|
if ( is_wp_error( $api ) ) {
|
|
|
|
wp_die( $api );
|
|
|
|
}
|
2012-04-09 22:25:03 -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 = __( 'Install Themes' );
|
|
|
|
$parent_file = 'themes.php';
|
2010-03-19 04:03:52 -04:00
|
|
|
$submenu_file = 'themes.php';
|
2021-07-22 09:53:00 -04:00
|
|
|
|
2020-02-06 01:33:11 -05:00
|
|
|
require_once ABSPATH . 'wp-admin/admin-header.php';
|
2009-04-20 14:18:39 -04:00
|
|
|
|
2019-09-02 20:41:05 -04:00
|
|
|
/* translators: %s: Theme name and version. */
|
2017-11-30 18:11:00 -05:00
|
|
|
$title = sprintf( __( 'Installing Theme: %s' ), $api->name . ' ' . $api->version );
|
2009-04-19 15:36:28 -04:00
|
|
|
$nonce = 'install-theme_' . $theme;
|
2017-11-30 18:11:00 -05:00
|
|
|
$url = 'update.php?action=install-theme&theme=' . urlencode( $theme );
|
2020-01-28 19:45:18 -05:00
|
|
|
$type = 'web'; // Install theme type, From Web or an Upload.
|
2009-04-20 14:18:39 -04:00
|
|
|
|
2017-11-30 18:11:00 -05:00
|
|
|
$upgrader = new Theme_Upgrader( new Theme_Installer_Skin( compact( 'title', 'url', 'nonce', 'plugin', 'api' ) ) );
|
|
|
|
$upgrader->install( $api->download_link );
|
2009-04-20 14:18:39 -04:00
|
|
|
|
2020-02-06 01:33:11 -05:00
|
|
|
require_once ABSPATH . 'wp-admin/admin-footer.php';
|
2009-04-20 14:18:39 -04:00
|
|
|
|
2020-05-16 14:42:12 -04:00
|
|
|
} elseif ( 'upload-theme' === $action ) {
|
2009-04-19 15:36:28 -04:00
|
|
|
|
2014-08-26 21:32:18 -04:00
|
|
|
if ( ! current_user_can( 'upload_themes' ) ) {
|
2016-06-29 11:16:29 -04:00
|
|
|
wp_die( __( 'Sorry, you are not allowed to install themes on this site.' ) );
|
2014-08-26 21:32:18 -04:00
|
|
|
}
|
2009-04-19 15:36:28 -04:00
|
|
|
|
2017-11-30 18:11:00 -05:00
|
|
|
check_admin_referer( 'theme-upload' );
|
2009-04-19 15:36:28 -04:00
|
|
|
|
2024-01-30 09:23:12 -05:00
|
|
|
if ( isset( $_FILES['themezip']['name'] ) && ! str_ends_with( strtolower( $_FILES['themezip']['name'] ), '.zip' ) ) {
|
|
|
|
wp_die( __( 'Only .zip archives may be uploaded.' ) );
|
|
|
|
}
|
|
|
|
|
2017-11-30 18:11:00 -05:00
|
|
|
$file_upload = new File_Upload_Upgrader( 'themezip', 'package' );
|
2009-04-19 15:36:28 -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 = __( 'Upload Theme' );
|
|
|
|
$parent_file = 'themes.php';
|
2009-04-19 15:36:28 -04:00
|
|
|
$submenu_file = 'theme-install.php';
|
2012-04-09 22:25:03 -04:00
|
|
|
|
2020-02-06 01:33:11 -05:00
|
|
|
require_once ABSPATH . 'wp-admin/admin-header.php';
|
2009-04-19 15:36:28 -04:00
|
|
|
|
2019-09-02 20:41:05 -04:00
|
|
|
/* translators: %s: File name. */
|
Upgrade/install: Allow plugin and theme updates from a uploaded .zip file.
Props mariovalney, cyberhobo, imath, shaunandrews, mariovalney, earnjam, desrosj, dd32, folletto, swissspidy, melchoyce, pento, joshuawold, psykro, clorith, ahortin, galbaras, pingram3541, joyously, doobeedoo, karmatosed, poena, whyisjake, earnjam, sergeybiryukov, audrasjb, azaozz.
Fixes #9757.
Built from https://develop.svn.wordpress.org/trunk@48390
git-svn-id: http://core.svn.wordpress.org/trunk@48159 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2020-07-07 13:49:05 -04:00
|
|
|
$title = sprintf( __( 'Installing theme from uploaded file: %s' ), esc_html( basename( $file_upload->filename ) ) );
|
2009-04-19 15:36:28 -04:00
|
|
|
$nonce = 'theme-upload';
|
2017-11-30 18:11:00 -05:00
|
|
|
$url = add_query_arg( array( 'package' => $file_upload->id ), 'update.php?action=upload-theme' );
|
2020-01-28 19:45:18 -05:00
|
|
|
$type = 'upload'; // Install theme type, From Web or an Upload.
|
2009-04-19 15:36:28 -04:00
|
|
|
|
Upgrade/install: Allow plugin and theme updates from a uploaded .zip file.
Props mariovalney, cyberhobo, imath, shaunandrews, mariovalney, earnjam, desrosj, dd32, folletto, swissspidy, melchoyce, pento, joshuawold, psykro, clorith, ahortin, galbaras, pingram3541, joyously, doobeedoo, karmatosed, poena, whyisjake, earnjam, sergeybiryukov, audrasjb, azaozz.
Fixes #9757.
Built from https://develop.svn.wordpress.org/trunk@48390
git-svn-id: http://core.svn.wordpress.org/trunk@48159 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2020-07-07 13:49:05 -04:00
|
|
|
$overwrite = isset( $_GET['overwrite'] ) ? sanitize_text_field( $_GET['overwrite'] ) : '';
|
|
|
|
$overwrite = in_array( $overwrite, array( 'update-theme', 'downgrade-theme' ), true ) ? $overwrite : '';
|
|
|
|
|
|
|
|
$upgrader = new Theme_Upgrader( new Theme_Installer_Skin( compact( 'type', 'title', 'nonce', 'url', 'overwrite' ) ) );
|
|
|
|
$result = $upgrader->install( $file_upload->package, array( 'overwrite_package' => $overwrite ) );
|
2009-04-19 15:36:28 -04:00
|
|
|
|
2017-11-30 18:11:00 -05:00
|
|
|
if ( $result || is_wp_error( $result ) ) {
|
2011-08-28 01:51:38 -04:00
|
|
|
$file_upload->cleanup();
|
2017-11-30 18:11:00 -05:00
|
|
|
}
|
2011-08-27 23:51:35 -04:00
|
|
|
|
2020-02-06 01:33:11 -05:00
|
|
|
require_once ABSPATH . 'wp-admin/admin-footer.php';
|
2009-04-19 15:36:28 -04:00
|
|
|
|
2020-07-10 02:08:06 -04:00
|
|
|
} elseif ( 'upload-theme-cancel-overwrite' === $action ) {
|
|
|
|
if ( ! current_user_can( 'upload_themes' ) ) {
|
|
|
|
wp_die( __( 'Sorry, you are not allowed to install themes on this site.' ) );
|
|
|
|
}
|
|
|
|
|
|
|
|
check_admin_referer( 'theme-upload-cancel-overwrite' );
|
|
|
|
|
|
|
|
// Make sure the attachment still exists, or File_Upload_Upgrader will call wp_die()
|
|
|
|
// that shows a generic "Please select a file" error.
|
|
|
|
if ( ! empty( $_GET['package'] ) ) {
|
|
|
|
$attachment_id = (int) $_GET['package'];
|
|
|
|
|
|
|
|
if ( get_post( $attachment_id ) ) {
|
|
|
|
$file_upload = new File_Upload_Upgrader( 'themezip', 'package' );
|
|
|
|
$file_upload->cleanup();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
wp_redirect( self_admin_url( 'theme-install.php' ) );
|
|
|
|
exit;
|
2009-04-19 15:36:28 -04:00
|
|
|
} else {
|
2013-10-27 14:37:09 -04:00
|
|
|
/**
|
|
|
|
* Fires when a custom plugin or theme update request is received.
|
|
|
|
*
|
2014-11-30 06:42:24 -05:00
|
|
|
* The dynamic portion of the hook name, `$action`, refers to the action
|
2013-10-27 14:37:09 -04:00
|
|
|
* provided in the request for wp-admin/update.php. Can be used to
|
|
|
|
* provide custom update functionality for themes and plugins.
|
|
|
|
*
|
|
|
|
* @since 2.8.0
|
|
|
|
*/
|
2019-07-04 21:45:56 -04:00
|
|
|
do_action( "update-custom_{$action}" ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
|
2009-04-19 15:36:28 -04:00
|
|
|
}
|
2010-04-29 21:54:32 -04:00
|
|
|
}
|