mirror of
https://github.com/woocommerce/woocommerce-paypal-payments.git
synced 2026-07-30 02:17:46 +08:00
80 lines
2.5 KiB
PHP
80 lines
2.5 KiB
PHP
<?php
|
|
|
|
/**
|
|
* The deactivate Subscription Plan Endpoint.
|
|
*
|
|
* @package WooCommerce\PayPalCommerce\WcSubscriptions
|
|
*/
|
|
declare (strict_types=1);
|
|
namespace WooCommerce\PayPalCommerce\PayPalSubscriptions;
|
|
|
|
use Exception;
|
|
use WC_Product;
|
|
use WC_Subscriptions_Product;
|
|
use WooCommerce\PayPalCommerce\ApiClient\Endpoint\BillingPlans;
|
|
use WooCommerce\PayPalCommerce\Button\Endpoint\RequestData;
|
|
use WooCommerce\PayPalCommerce\Button\Exception\NonceValidationException;
|
|
/**
|
|
* Class DeactivatePlanEndpoint
|
|
*/
|
|
class DeactivatePlanEndpoint
|
|
{
|
|
const ENDPOINT = 'ppc-deactivate-plan';
|
|
/**
|
|
* The request data.
|
|
*
|
|
* @var RequestData
|
|
*/
|
|
private $request_data;
|
|
/**
|
|
* The billing plans.
|
|
*
|
|
* @var BillingPlans
|
|
*/
|
|
private $billing_plans;
|
|
/**
|
|
* DeactivatePlanEndpoint constructor.
|
|
*
|
|
* @param RequestData $request_data The request data.
|
|
* @param BillingPlans $billing_plans The billing plans.
|
|
*/
|
|
public function __construct(RequestData $request_data, BillingPlans $billing_plans)
|
|
{
|
|
$this->request_data = $request_data;
|
|
$this->billing_plans = $billing_plans;
|
|
}
|
|
/**
|
|
* Handles the request.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function handle_request(): void
|
|
{
|
|
if (!current_user_can('manage_woocommerce')) {
|
|
wp_send_json_error('Not admin.', 403);
|
|
}
|
|
try {
|
|
$data = $this->request_data->read_request(self::ENDPOINT);
|
|
$plan_id = $data['plan_id'] ?? '';
|
|
if ($plan_id) {
|
|
$this->billing_plans->deactivate_plan($plan_id);
|
|
}
|
|
$product_id = $data['product_id'] ?? '';
|
|
if ($product_id) {
|
|
$product = wc_get_product($product_id);
|
|
if ($product instanceof WC_Product && WC_Subscriptions_Product::is_subscription($product)) {
|
|
$product->delete_meta_data('_ppcp_enable_subscription_product');
|
|
$product->delete_meta_data('_ppcp_subscription_plan_name');
|
|
$product->delete_meta_data('ppcp_subscription_product');
|
|
$product->delete_meta_data('ppcp_subscription_plan');
|
|
$product->save();
|
|
}
|
|
}
|
|
wp_send_json_success(array('product_id' => (string) $product_id));
|
|
} catch (NonceValidationException $error) {
|
|
wp_send_json_error(array('message' => $error->getMessage()), 400);
|
|
} catch (Exception $error) {
|
|
wp_send_json_error();
|
|
}
|
|
}
|
|
}
|