woocommerce-paypal-payments/modules/ppcp-paypal-subscriptions/src/DeactivatePlanEndpoint.php
2026-07-22 09:52:38 +00:00

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