PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 3.0.3
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v3.0.3
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 3 years ago AffiliateWPRecurringIntegration.php 3 years ago AffiliateWPService.php 3 years ago AffiliateWPServiceProvider.php 3 years ago
AffiliateWPRecurringIntegration.php
110 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
57 // We must have an order id.
58 if ( ! $reference->id ) {
59 affiliate_wp()->utils->log( 'Draft referral creation failed. No order attached.' );
60 return;
61 }
62
63 // Get the parent referral
64 $parent_referral = affiliate_wp()->referrals->get_by( 'reference', $reference->id, $this->context );
65
66 // This signup wasn't referred or is the very first payment of a referred subscription
67 if ( ! $parent_referral || ! is_object( $parent_referral ) || 'rejected' == $parent_referral->status ) {
68 affiliate_wp()->utils->log( 'Recurring Referrals: No referral found or referral is rejected.' );
69 return false;
70 }
71
72 $amount_due = $purchase->subscription->current_period->checkout->amount_due;
73 $currency = $reference->currency;
74 $description = $purchase->product->name;
75
76 if ( Currency::isZeroDecimal( $currency ) ) {
77 $amount = $amount_due;
78 } else {
79 $amount = round( $amount_due / 100, 2 );
80 }
81
82 // Calculate referral amount
83 $referral_amount = $this->calc_referral_amount( $amount, $reference, $parent_referral->referral_id );
84
85 // Create referral for subscription.
86 $referral_id = $this->insert_referral(
87 [
88 'amount' => $referral_amount,
89 'reference' => $reference,
90 'description' => $description,
91 'affiliate_id' => $parent_referral->affiliate_id,
92 'context' => $this->context,
93 ]
94 );
95
96 if ( ! $referral_id ) {
97 affiliate_wp()->utils->log( 'Draft referral creation failed.' );
98 return;
99 }
100
101 // Complete referral
102 if ( $this->complete_referral( $referral_id ) ) {
103 affiliate_wp()->utils->log( 'Referral completed successfully during insert_referral()' );
104 return;
105 }
106
107 }
108
109 }
110