118 lines
2.9 KiB
PHP
118 lines
2.9 KiB
PHP
<?php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
|
|
|
|
/**
|
|
* Core modify endpoint class.
|
|
*
|
|
* POST /sites/%s/core
|
|
* POST /sites/%s/core/update
|
|
*/
|
|
class Jetpack_JSON_API_Core_Modify_Endpoint extends Jetpack_JSON_API_Core_Endpoint {
|
|
|
|
/**
|
|
* Needed capabilities.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $needed_capabilities = 'update_core';
|
|
|
|
/**
|
|
* Action.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $action = 'default_action';
|
|
|
|
/**
|
|
* New version.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $new_version;
|
|
|
|
/**
|
|
* An array of log strings.
|
|
*
|
|
* @var array
|
|
*/
|
|
protected $log;
|
|
|
|
/**
|
|
* The default action.
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function default_action() {
|
|
$args = $this->input();
|
|
|
|
if ( isset( $args['autoupdate'] ) && is_bool( $args['autoupdate'] ) ) {
|
|
Jetpack_Options::update_option( 'autoupdate_core', $args['autoupdate'] );
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Update the version.
|
|
*
|
|
* @return string|false|WP_Error New WordPress version on success, false or WP_Error on failure.
|
|
*/
|
|
protected function update() {
|
|
$args = $this->input();
|
|
$version = isset( $args['version'] ) ? $args['version'] : false;
|
|
$locale = isset( $args['locale'] ) ? $args['locale'] : get_locale();
|
|
|
|
include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
|
|
|
|
delete_site_transient( 'update_core' );
|
|
wp_version_check( array(), true );
|
|
|
|
if ( $version ) {
|
|
$update = find_core_update( $version, $locale );
|
|
} else {
|
|
$update = $this->find_latest_update_offer();
|
|
}
|
|
|
|
/**
|
|
* Pre-upgrade action
|
|
*
|
|
* @since 3.9.3
|
|
*
|
|
* @param object|array $update as returned by find_core_update() or find_core_auto_update()
|
|
*/
|
|
do_action( 'jetpack_pre_core_upgrade', $update );
|
|
|
|
$skin = new Automatic_Upgrader_Skin();
|
|
$upgrader = new Core_Upgrader( $skin );
|
|
|
|
$this->new_version = $upgrader->upgrade( $update );
|
|
|
|
$this->log = $upgrader->skin->get_upgrade_messages();
|
|
|
|
if ( is_wp_error( $this->new_version ) ) {
|
|
return $this->new_version;
|
|
}
|
|
|
|
return $this->new_version;
|
|
}
|
|
|
|
/**
|
|
* Select the latest update.
|
|
* Remove filters to bypass automattic updates.
|
|
*
|
|
* @return object|false The core update offering on success, false on failure.
|
|
*/
|
|
protected function find_latest_update_offer() {
|
|
// Select the latest update.
|
|
// Remove filters to bypass automattic updates.
|
|
add_filter( 'request_filesystem_credentials', '__return_true' );
|
|
add_filter( 'automatic_updates_is_vcs_checkout', '__return_false' );
|
|
add_filter( 'allow_major_auto_core_updates', '__return_true' );
|
|
add_filter( 'send_core_update_notification_email', '__return_false' );
|
|
$update = find_core_auto_update();
|
|
remove_filter( 'request_filesystem_credentials', '__return_true' );
|
|
remove_filter( 'automatic_updates_is_vcs_checkout', '__return_false' );
|
|
remove_filter( 'allow_major_auto_core_updates', '__return_true' );
|
|
remove_filter( 'send_core_update_notification_email', '__return_false' );
|
|
return $update;
|
|
}
|
|
}
|