2019-06-26 03:09:56 +00:00
< ? php
/**
* Helper REST API Product Reviews Controller
*
* Handles requests to / product - installation .
*
* @ package WooCommerce / API
* @ since 3.7 . 0
*/
defined ( 'ABSPATH' ) || exit ;
/**
* REST API Product Reviews Controller Class .
*
* @ package WooCommerce / API
* @ extends WC_REST_Controller
*/
class WC_REST_Helper_Product_Installation_Controller extends WC_REST_Controller {
/**
* Endpoint namespace .
*
* @ var string
*/
protected $namespace = 'wc-helper/v1' ;
/**
* Route base .
*
* @ var string
*/
protected $rest_base = 'product-installation' ;
/**
* Register the routes for product reviews .
*/
public function register_routes () {
register_rest_route (
$this -> namespace , '/' . $this -> rest_base , array (
array (
'methods' => WP_REST_Server :: READABLE ,
'callback' => array ( $this , 'get_install_state' ),
'permission_callback' => array ( $this , 'check_permission' ),
),
array (
'methods' => WP_REST_Server :: CREATABLE ,
'callback' => array ( $this , 'install' ),
'permission_callback' => array ( $this , 'check_permission' ),
),
array (
'methods' => WP_REST_Server :: DELETABLE ,
'callback' => array ( $this , 'reset_install' ),
'permission_callback' => array ( $this , 'check_permission' ),
),
)
);
}
public function check_permission ( $request ) {
2019-07-01 01:14:00 +00:00
if ( ! current_user_can ( 'install_plugins' ) || ! current_user_can ( 'install_themes' ) ) {
return new WP_Error ( 'woocommerce_rest_cannot_install_product' , __ ( 'You do not have permission to install plugin or theme' , 'woocommerce' ), array ( 'status' => 401 ) );
}
return true ;
2019-06-26 03:09:56 +00:00
}
public function get_install_state ( $request ) {
2019-07-01 01:14:00 +00:00
require_once ( WC_ABSPATH . 'includes/admin/helper/class-wc-helper.php' );
2019-06-26 03:09:56 +00:00
return rest_ensure_response ( WC_Helper_Product_Install :: get_state () );
}
public function install ( $request ) {
2019-07-01 01:14:00 +00:00
require_once ( WC_ABSPATH . 'includes/admin/helper/class-wc-helper.php' );
2019-06-26 03:09:56 +00:00
2019-07-01 09:06:02 +00:00
$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' ] ) );
2019-06-26 03:09:56 +00:00
}
public function reset_install ( $request ) {
2019-07-01 01:14:00 +00:00
require_once ( WC_ABSPATH . 'includes/admin/helper/class-wc-helper.php' );
$resp = rest_ensure_response ( WC_Helper_Product_Install :: reset_state () );
$resp -> set_status ( 204 );
2019-06-26 03:09:56 +00:00
2019-07-01 01:14:00 +00:00
return $resp ;
2019-06-26 03:09:56 +00:00
}
}