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:
Vedanshu Jain 2019-10-02 09:30:28 +05:30 committed by GitHub
commit 487b510953
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 71 additions and 0 deletions

View File

@ -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 );
}
}

View File

@ -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';
}
/**

View File

@ -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 ) );
}