Merge pull request #24690 from woocommerce/add/wccom-installer-requirements-check-rest-api-endpoint
Add WCCOM requirements check to /installer REST API endpoint
This commit is contained in:
commit
487b510953
|
@ -0,0 +1,60 @@
|
|||
<?php
|
||||
/**
|
||||
* WooCommerce.com Product Installation Requirements Check.
|
||||
*
|
||||
* @package WooCommerce\WooCommerce_Site
|
||||
* @since 3.8.0
|
||||
*/
|
||||
|
||||
defined( 'ABSPATH' ) || exit;
|
||||
|
||||
/**
|
||||
* WC_WCCOM_Site_Installer_Requirements_Check Class
|
||||
* Contains functionality to check the necessary requirements for the installer.
|
||||
*/
|
||||
class WC_WCCOM_Site_Installer_Requirements_Check {
|
||||
/**
|
||||
* Check if the site met the requirements
|
||||
*
|
||||
* @version 3.8.0
|
||||
* @return bool|WP_Error Does the site met the requirements?
|
||||
*/
|
||||
public static function met_requirements() {
|
||||
$errs = [];
|
||||
|
||||
if ( ! self::met_wp_cron_requirement() ) {
|
||||
$errs[] = 'wp-cron';
|
||||
}
|
||||
|
||||
if ( ! self::met_filesystem_requirement() ) {
|
||||
$errs[] = 'filesystem';
|
||||
}
|
||||
|
||||
if ( ! empty( $errs ) ) {
|
||||
// translators: %s: Requirements unmet.
|
||||
return new WP_Error( 'requirements_not_met', sprintf( __( 'Server requirements not met, missing requirement(s): %s.', 'woocommerce' ), implode( ', ', $errs ) ), array( 'status' => 400 ) );
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Validates if WP CRON is enabled.
|
||||
*
|
||||
* @since 3.8.0
|
||||
* @return bool
|
||||
*/
|
||||
private static function met_wp_cron_requirement() {
|
||||
return ! ( defined( 'DISABLE_WP_CRON' ) && DISABLE_WP_CRON );
|
||||
}
|
||||
|
||||
/**
|
||||
* Validates if `WP_CONTENT_DIR` is writable.
|
||||
*
|
||||
* @since 3.8.0
|
||||
* @return bool
|
||||
*/
|
||||
private static function met_filesystem_requirement() {
|
||||
return is_writable( WP_CONTENT_DIR );
|
||||
}
|
||||
}
|
|
@ -36,6 +36,7 @@ class WC_WCCOM_Site {
|
|||
protected static function includes() {
|
||||
require_once WC_ABSPATH . 'includes/admin/helper/class-wc-helper.php';
|
||||
require_once WC_ABSPATH . 'includes/wccom-site/class-wc-wccom-site-installer.php';
|
||||
require_once WC_ABSPATH . 'includes/wccom-site/class-wc-wccom-site-installer-requirements-check.php';
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -84,6 +84,11 @@ class WC_REST_WCCOM_Site_Installer_Controller extends WC_REST_Controller {
|
|||
* @return bool|WP_Error
|
||||
*/
|
||||
public function get_install_state( $request ) {
|
||||
$requirements_met = WC_WCCOM_Site_Installer_Requirements_Check::met_requirements();
|
||||
if ( is_wp_error( $requirements_met ) ) {
|
||||
return $requirements_met;
|
||||
}
|
||||
|
||||
return rest_ensure_response( WC_WCCOM_Site_Installer::get_state() );
|
||||
}
|
||||
|
||||
|
@ -95,6 +100,11 @@ class WC_REST_WCCOM_Site_Installer_Controller extends WC_REST_Controller {
|
|||
* @return bool|WP_Error
|
||||
*/
|
||||
public function install( $request ) {
|
||||
$requirements_met = WC_WCCOM_Site_Installer_Requirements_Check::met_requirements();
|
||||
if ( is_wp_error( $requirements_met ) ) {
|
||||
return $requirements_met;
|
||||
}
|
||||
|
||||
if ( empty( $request['products'] ) ) {
|
||||
return new WP_Error( 'missing_products', __( 'Missing products in request body.', 'woocommerce' ), array( 'status' => 400 ) );
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue