PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 2.6.1
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v2.6.1
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 / AffiliateWPIntegration.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
AffiliateWPIntegration.php
187 lines
1 <?php
2
3 namespace SureCart\Integrations\AffiliateWP;
4
5 use SureCart\Models\Checkout;
6 use SureCart\Models\Purchase;
7 use SureCart\Support\Currency;
8
9 /**
10 * Custom Integration Class
11 */
12
13
14 if ( ! defined( 'ABSPATH' ) ) {
15 exit;
16 }
17
18 /**
19 * Class Custom_Integration
20 * Use this class to ext
21 */
22 class AffiliateWPIntegration extends \Affiliate_WP_Base {
23 /**
24 * The context for referrals. This refers to the integration that is being used.
25 *
26 * @access public
27 * @var string
28 */
29 public $context = 'surecart';
30
31 /**
32 * Get things started
33 *
34 * @access public
35 * @since 2.0
36 */
37 public function init() {
38 // add pending referral when the purchase is created.
39 add_action( 'surecart/purchase_created', [ $this, 'addPendingReferral' ], 99 );
40 // revoke referral when the purchase is revoked.
41 add_action( 'surecart/purchase_revoked', [ $this, 'revokeReferral' ], 10, 3 );
42 // re-complete referral when the purchase is completed.
43 add_action( 'surecart/purchase_invoked', [ $this, 'invokeReferral' ], 10, 3 );
44 // add a reference link to the referral table.
45 add_filter( 'affwp_referral_reference_column', [ $this, 'referenceLink' ], 10, 2 );
46 }
47
48 /**
49 * The reference link for the referral.
50 *
51 * @param string $reference The reference id.
52 * @param object $referral The referral object.
53 *
54 * @return string
55 */
56 public function referenceLink( $reference, $referral ) {
57 if ( empty( $referral->context ) || 'surecart' !== $referral->context ) {
58 return $reference;
59 }
60
61 $url = '';
62 $object_name = $referral->custom['object'] ?? 'order';
63
64 $object = Checkout::find( $reference );
65
66 if ( $object->id ) {
67 $url = esc_url( \SureCart::getUrl()->edit( $object_name, $object->id ) );
68 }
69
70 if ( ! $url ) {
71 return $reference;
72 }
73
74 return '<a href="' . esc_url( $url ) . '">#' . $object->number . '</a>';
75 }
76
77 /**
78 * Reject referral when purchase is revoked.
79 *
80 * @param \SureCart\Models\Purchase $purchase Purchase model.
81 *
82 * @return void
83 */
84 public function revokeReferral( $purchase ) {
85 if ( ! affiliate_wp()->settings->get( 'revoke_on_refund' ) ) {
86 return;
87 }
88
89 $this->reject_referral( $purchase->invoice ?? $purchase->order );
90 }
91
92 /**
93 * Complete referral when purchase is invoked.
94 *
95 * @param \SureCart\Models\Purchase $purchase Purchase model.
96 *
97 * @return void
98 */
99 public function invokeReferral( $purchase ) {
100 $this->complete_referral( $purchase->invoice ?? $purchase->order );
101 }
102
103 /**
104 * Records a pending referral when a pending payment is created
105 *
106 * @param \SureCart\Models\Purchase $purchase Purchase model.
107 */
108 public function addPendingReferral( $purchase ) {
109 // the integration is not active.
110 if ( ! $this->is_active() ) {
111 return;
112 }
113
114 // Check if it was referred.
115 if ( ! $this->was_referred() ) {
116 return false; // Referral not created because affiliate was not referred.
117 }
118
119 $hydrated_purchase = Purchase::with( [ 'initial_order', 'order.checkout', 'product', 'customer' ] )->find( $purchase->id );
120
121 // get the order reference.
122 $reference = $hydrated_purchase->initial_order ?? null;
123
124 // we must have an order id.
125 if ( ! $reference->id ) {
126 $this->log( 'Draft referral creation failed. No order attached.' );
127 return;
128 }
129
130 // Create draft referral.
131 $referral_id = $this->insert_draft_referral(
132 $this->affiliate_id,
133 [
134 'reference' => $reference->id ?? null,
135 ]
136 );
137
138 if ( ! $referral_id ) {
139 $this->log( 'Draft referral creation failed.' );
140 return;
141 }
142
143 $stripe_amount = $reference->checkout->amount_due;
144 $currency = $reference->currency;
145 $description = $hydrated_purchase->product->name;
146 $mode = $reference->live_mode;
147
148 if ( Currency::isZeroDecimal( $currency ) ) {
149 $amount = $stripe_amount;
150 } else {
151 $amount = round( $stripe_amount / 100, 2 );
152 }
153
154 if ( $this->is_affiliate_email( $hydrated_purchase->customer->email, $this->affiliate_id ) ) {
155 $this->log( 'Referral not created because affiliate\'s own account was used.' );
156 $this->mark_referral_failed( $referral_id );
157 return;
158 }
159
160 $referral_total = $this->calculate_referral_amount( $amount, $reference->id );
161
162 // Hydrates the previously created referral.
163 $this->hydrate_referral(
164 $referral_id,
165 array(
166 'status' => 'pending',
167 'amount' => $referral_total,
168 'description' => $description,
169 'custom' => array(
170 'livemode' => $mode,
171 'object' => $reference->object,
172 ),
173 )
174 );
175
176 $this->log( 'Pending referral created successfully during insert_referral()' );
177
178 if ( $this->complete_referral( $reference->id ) ) {
179 $this->log( 'Referral completed successfully during insert_referral()' );
180 return;
181 }
182
183 $this->log( 'Referral failed to be set to completed with complete_referral()' );
184 }
185
186 }
187