PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 4.5.0
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v4.5.0
4.5.1 4.5.0 4.4.2 4.4.1 4.4.0 4.3.3 4.3.2 4.3.1 4.3.0 4.2.3 4.2.2 4.2.1 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8 1.1.9 1.10.0 1.10.1 1.10.2 1.10.3 1.10.4 1.11.0 1.11.1 1.11.2 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.4.0 1.4.1 1.4.2 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.9.0 1.9.1 1.9.2 1.9.3 1.9.4 1.9.5 2.0.0 2.0.1 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.10.0 2.10.1 2.11.0 2.11.1 2.11.2 2.11.3 2.11.4 2.12.0 2.13.0 2.14.0 2.14.1 2.15.0 2.15.1 2.16.0 2.16.1 2.16.2 2.16.3 2.17.0 2.17.1 2.17.2 2.18.0 2.19.0 2.19.2 2.19.3 2.19.4 2.2.0 2.2.1 2.20.0 2.20.1 2.20.2 2.20.3 2.20.4 2.20.5 2.20.6 2.21.0 2.22.0 2.22.1 2.23.0 2.24.0 2.25.0 2.25.1 2.25.2 2.26.0 2.27.0 2.27.1 2.28.0 2.29.0 2.29.1 2.29.2 2.29.3 2.29.4 2.3.0 2.3.1 2.30.0 2.31.0 2.31.1 2.31.2 2.31.3 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.40.0 2.40.1 2.5.0 2.5.1 2.5.2 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.8.2 2.8.3 2.8.4 2.9.0 3.0.0 3.0.0-RC1 3.0.0-RC2 3.0.0-beta1 3.0.0-beta2 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.10.0 3.10.1 3.11.0 3.12.0 3.13.0 3.13.1 3.13.2 3.13.3 3.13.4 3.14.0 3.15.0 3.15.1 3.15.2 3.15.3 3.15.4 3.15.5 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.16.6 3.16.7 3.16.8 3.17.0 3.17.1 3.17.2 3.17.3 3.17.4 3.17.5 3.17.6 3.18.0 3.19.0 3.19.1 3.19.2 3.2.0 3.2.1 3.2.2 3.20.0 3.20.1 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.4.3 3.5.0 3.5.1 3.5.2 3.5.3 3.6.0 3.6.1 3.6.2 3.7.0 3.7.1 3.7.2 3.7.3 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.9.0 4.0.0 4.0.1 4.0.2 4.0.3 trunk 4.1.0 0.2.19.1 4.1.1 1.0.0 4.2.0 1.0.1 1.0.2
surecart / app / src / Integrations / AffiliateWP / AffiliateWPRecurringIntegration.php
surecart / app / src / Integrations / AffiliateWP Last commit date
AffiliateWPIntegration.php 1 year ago AffiliateWPRecurringIntegration.php 8 months ago AffiliateWPService.php 1 year ago AffiliateWPServiceProvider.php 3 years ago
AffiliateWPRecurringIntegration.php
109 lines
1 <?php
2
3 namespace SureCart\Integrations\AffiliateWP;
4
5 use SureCart\Models\Purchase;
6 use SureCart\Support\Currency;
7
8 /**
9 * Custom Integration Class
10 */
11
12 if ( ! defined( 'ABSPATH' ) ) {
13 exit;
14 }
15
16 /**
17 * Class AffiliateWPRecurringIntegration
18 */
19 class AffiliateWPRecurringIntegration extends \Affiliate_WP_Recurring_Base {
20 /**
21 * The context for referrals. This refers to the integration that is being used.
22 *
23 * @access public
24 * @var string
25 */
26 public $context = 'surecart';
27
28 /**
29 * Get things started
30 *
31 * @access public
32 * @since 2.0
33 */
34 public function init() {
35 // Add referral when subscription renewed.
36 add_action( 'surecart/subscription_renewed', [ $this, 'renewedSubscription' ], 10, 1 );
37 }
38
39 /**
40 * Records a recurring referral when a subscription renews
41 *
42 * @param $subscription Subscription object.
43 */
44 public function renewedSubscription( $subscription ) {
45 // Check if recurring referral is active
46 if ( ! class_exists( 'AffiliateWP_Recurring_Referrals' ) ) {
47 affiliate_wp()->utils->log( 'Recurring referral not applied.' );
48 return;
49 }
50
51 // Get details purchase information
52 $purchase = Purchase::with( [ 'initial_order', 'subscription', 'subscription.current_period', 'period.checkout', 'product' ] )->find( $subscription->purchase );
53
54 // Get the order reference.
55 $reference = $purchase->initial_order ?? null;
56 $checkout = $purchase->subscription->current_period->checkout ?? null;
57
58 // We must have an order id.
59 if ( empty( $reference->id ) || empty( $checkout->id ) ) {
60 affiliate_wp()->utils->log( 'Draft referral creation failed. No order attached.' );
61 return;
62 }
63
64 // Get the parent referral.
65 $parent_referral = affiliate_wp()->referrals->get_by( 'reference', $reference->id, $this->context );
66
67 // This signup wasn't referred or is the very first payment of a referred subscription.
68 if ( ! $parent_referral || ! is_object( $parent_referral ) || 'rejected' == $parent_referral->status ) {
69 affiliate_wp()->utils->log( 'Recurring Referrals: No referral found or referral is rejected.' );
70 return false;
71 }
72
73 $amount_due = $checkout->amount_due;
74 $currency = $checkout->currency;
75 $description = $purchase->product->name;
76
77 if ( Currency::isZeroDecimal( $currency ) ) {
78 $amount = $amount_due;
79 } else {
80 $amount = round( $amount_due / 100, 2 );
81 }
82
83 // Calculate referral amount
84 $referral_amount = $this->calc_referral_amount( $amount, $checkout->order, $parent_referral->referral_id );
85
86 // Create referral for subscription.
87 $referral_id = $this->insert_referral(
88 [
89 'amount' => $referral_amount,
90 'reference' => $checkout->order,
91 'description' => $description,
92 'affiliate_id' => $parent_referral->affiliate_id,
93 'context' => $this->context,
94 ]
95 );
96
97 if ( ! $referral_id ) {
98 affiliate_wp()->utils->log( 'Draft referral creation failed.' );
99 return;
100 }
101
102 // Complete referral
103 if ( $this->complete_referral( $referral_id ) ) {
104 affiliate_wp()->utils->log( 'Referral completed successfully during insert_referral()' );
105 return;
106 }
107 }
108 }
109