Files
wp-multisite-waas/inc/gateways/class-free-gateway.php
2024-11-30 18:24:12 -07:00

150 lines
4.0 KiB
PHP

<?php
/**
* Base Gateway.
*
* Base Gateway class. Should be extended to add new payment gateways.
*
* @package WP_Ultimo
* @subpackage Managers/Site_Manager
* @since 2.0.0
*/
namespace WP_Ultimo\Gateways;
use WP_Ultimo\Gateways\Base_Gateway;
use \WP_Ultimo\Database\Memberships\Membership_Status;
use \WP_Ultimo\Database\Payments\Payment_Status;
// Exit if accessed directly
defined('ABSPATH') || exit;
/**
* Base Gateway class. Should be extended to add new payment gateways.
*
* @since 2.0.0
*/
class Free_Gateway extends Base_Gateway {
/**
* Holds the ID of a given gateway.
*
* @since 2.0.0
* @var string
*/
protected $id = 'free';
/**
* Process a checkout.
*
* It takes the data concerning
* a new checkout and process it.
*
* Here's where you will want to send
* API calls to the gateway server,
* set up recurring payment profiles, etc.
*
* This method is required and MUST
* be implemented by gateways extending the
* Base_Gateway class.
*
* @since 2.0.0
*
* @param \WP_Ultimo\Models\Payment $payment The payment associated with the checkout.
* @param \WP_Ultimo\Models\Membership $membership The membership.
* @param \WP_Ultimo\Models\Customer $customer The customer checking out.
* @param \WP_Ultimo\Checkout\Cart $cart The cart object.
* @param string $type The checkout type. Can be 'new', 'retry', 'upgrade', 'downgrade', 'addon'.
* @return void
*/
public function process_checkout($payment, $membership, $customer, $cart, $type) {
$membership_status = $membership->get_status();
// Set current gateway
$membership->set_gateway_subscription_id('');
$membership->set_gateway_customer_id('');
$membership->set_gateway($this->get_id());
$membership->set_auto_renew(false);
if ($type === 'downgrade' && ($membership_status === Membership_Status::ACTIVE || $membership_status === Membership_Status::TRIALING)) {
/*
* When downgrading, we need to schedule a swap for the end of the
* current expiration date.
*/
$membership->schedule_swap($cart);
/*
* Saves the membership with the changes.
*/
$status = $membership->save();
return;
} elseif ($type === 'upgrade' || $type === 'downgrade' || $type === 'addon') {
/*
* A change to another free membership
* is a upgrade and if membership is not
* active or trialling, we swap now.
*/
$membership->swap($cart);
$membership->set_status(Membership_Status::ACTIVE);
} // end if;
$membership->save();
$payment->set_status(Payment_Status::COMPLETED);
$payment->save();
} // end process_checkout;
/**
* Process a cancellation.
*
* It takes the data concerning
* a membership cancellation and process it.
*
* Here's where you will want to send
* API calls to the gateway server,
* to cancel a recurring profile, etc.
*
* This method is required and MUST
* be implemented by gateways extending the
* Base_Gateway class.
*
* @since 2.0.0
*
* @param \WP_Ultimo\Models\Membership $membership The membership.
* @param \WP_Ultimo\Models\Customer $customer The customer checking out.
* @return void
*/
public function process_cancellation($membership, $customer) {} // end process_cancellation;
/**
* Process a refund.
*
* It takes the data concerning
* a refund and process it.
*
* Here's where you will want to send
* API calls to the gateway server,
* to issue a refund.
*
* This method is required and MUST
* be implemented by gateways extending the
* Base_Gateway class.
*
* @since 2.0.0
*
* @param float $amount The amount to refund.
* @param \WP_Ultimo\Models\Payment $payment The payment associated with the checkout.
* @param \WP_Ultimo\Models\Membership $membership The membership.
* @param \WP_Ultimo\Models\Customer $customer The customer checking out.
* @return void
*/
public function process_refund($amount, $payment, $membership, $customer) {} // end process_refund;
} // end class Free_Gateway;