Files
wp-multisite-waas/inc/managers/class-discount-code-manager.php
2024-11-30 18:24:12 -07:00

115 lines
2.1 KiB
PHP

<?php
/**
* Discount_Codes Manager
*
* Handles processes related to events.
*
* @package WP_Ultimo
* @subpackage Managers/Discount_Code_Manager
* @since 2.0.0
*/
namespace WP_Ultimo\Managers;
use WP_Ultimo\Managers\Base_Manager;
use WP_Ultimo\Logger;
// Exit if accessed directly
defined('ABSPATH') || exit;
/**
* Handles processes related to events.
*
* @since 2.0.0
*/
class Discount_Code_Manager extends Base_Manager {
use \WP_Ultimo\Apis\Rest_Api, \WP_Ultimo\Apis\WP_CLI, \WP_Ultimo\Traits\Singleton;
/**
* The manager slug.
*
* @since 2.0.0
* @var string
*/
protected $slug = 'discount_code';
/**
* The model class associated to this manager.
*
* @since 2.0.0
* @var string
*/
protected $model_class = '\\WP_Ultimo\\Models\\Discount_Code';
/**
* Instantiate the necessary hooks.
*
* @since 2.0.0
* @return void
*/
public function init() {
$this->enable_rest_api();
$this->enable_wp_cli();
add_action('wu_gateway_payment_processed', array($this, 'maybe_add_use_on_payment_received'));
} // end init;
/**
* Listens for payments received in order to increase the discount code uses.
*
* @since 2.0.4
*
* @param \WP_Ultimo\Models\Payment $payment The payment received.
* @return void
*/
public function maybe_add_use_on_payment_received($payment) {
if (!$payment) {
return;
} // end if;
/*
* Try to fetch the original cart of the payment.
* We want only to increase the number of uses
* for the first time payments are done.
*/
$original_cart = $payment->get_meta('wu_original_cart');
if (is_a($original_cart, \WP_Ultimo\Checkout\Cart::class) === false) {
return;
} // end if;
$discount_code = $original_cart->get_discount_code();
if (!$discount_code) {
return;
} // end if;
/*
* Refetch the object, as the original version
* might be too old and out-of-date by now.
*/
$discount_code = wu_get_discount_code($discount_code->get_id());
if ($discount_code) {
$discount_code->add_use();
$discount_code->save();
} // end if;
} // end maybe_add_use_on_payment_received;
} // end class Discount_Code_Manager;