Move subscription check as part of installation steps.

This commit is contained in:
Akeda Bagus 2019-07-01 16:06:02 +07:00
parent a6e089e47b
commit 7adc256344
No known key found for this signature in database
GPG Key ID: B21A9FC4B7761412
2 changed files with 39 additions and 11 deletions

View File

@ -39,6 +39,7 @@ class WC_Helper_Product_Install {
* @var array
*/
private static $install_steps = array(
'check_subscription',
'download_product',
'unpack_product',
'move_product',
@ -86,6 +87,8 @@ class WC_Helper_Product_Install {
* Install a given product IDs.
*
* @param array $products List of product IDs.
*
* @return array State.
*/
public static function install( $products ) {
$state = self::get_state();
@ -99,6 +102,8 @@ class WC_Helper_Product_Install {
$steps = array_fill_keys( $products, self::$default_step_state );
self::update_state( 'steps', $steps );
// TODO: async install? i.e. queue the job via Action Scheduler.
require_once( ABSPATH . 'wp-admin/includes/file.php' );
require_once( ABSPATH . 'wp-admin/includes/plugin-install.php' );
require_once( ABSPATH . 'wp-admin/includes/class-wp-upgrader.php' );
@ -111,6 +116,8 @@ class WC_Helper_Product_Install {
foreach ( $products as $product_id ) {
self::install_product( $product_id, $upgrader );
}
return self::get_state();
}
/**
@ -120,11 +127,7 @@ class WC_Helper_Product_Install {
* @param \WP_Upgrader $upgrader Core class to handle installation.
*/
private static function install_product( $product_id, $upgrader ) {
if ( ! WC_Helper::has_product_subscription( $product_id ) ) {
return new WP_Error( 'missing_subscription', __( 'Missing product subscription', 'woocommerce' ) );
}
foreach ( self::$steps as $step ) {
foreach ( self::$install_steps as $step ) {
self::do_install_step( $product_id, $step, $upgrader );
}
}
@ -132,9 +135,9 @@ class WC_Helper_Product_Install {
/**
* Perform product installation step.
*
* @param int $product_id Product ID.
* @param string $step Installation step.
* @param \WP_Upgrader $upgrader Core class to handle installation.
* @param int $product_id Product ID.
* @param string $step Installation step.
* @param \WP_Upgrader $upgrader Core class to handle installation.
*/
private static function do_install_step( $product_id, $step, $upgrader ) {
$state_steps = self::get_state( 'steps' );
@ -161,10 +164,25 @@ class WC_Helper_Product_Install {
$state_steps[ $product_id ]['download_path'] = $result;
}
if ( 'unpack_product' === $step && ! is_wp_error( $result ) ) {
$state_steps[ $product_id ]['unpack_product'] = $result;
$state_steps[ $product_id ]['unpacked_path'] = $result;
}
self::update_state( 'steps', $steps );
self::update_state( 'steps', $state_steps );
}
/**
* Check subscription of a given product ID.
*
* @param int $product_id Product ID.
*
* @return bool|\WP_Error
*/
private static function check_subscription( $product_id ) {
if ( ! WC_Helper::has_product_subscription( $product_id ) ) {
return new WP_Error( 'missing_subscription', __( 'Missing product subscription', 'woocommerce' ) );
}
return true;
}
/**

View File

@ -73,7 +73,17 @@ class WC_REST_Helper_Product_Installation_Controller extends WC_REST_Controller
public function install( $request ) {
require_once( WC_ABSPATH . 'includes/admin/helper/class-wc-helper.php' );
// TODO:
$body = WP_REST_Server::get_raw_data();
if ( empty( $body ) ) {
return new WP_Error( 'empty_body', __( 'Request body is empty.', 'woocommerce' ), array( 'status' => 400 ) );
}
$data = json_decode( $body, true );
if ( empty( $data['products'] ) || ! is_array( $data['products'] ) ) {
return new WP_Error( 'missing_products', __( 'Missing products in request body.', 'woocommerce' ), array( 'status' => 400 ) );
}
return rest_ensure_response( WC_Helper_Product_Install::install( $data['products'] ) );
}
public function reset_install( $request ) {