PluginProbe ʕ •ᴥ•ʔ
OttoKit: All-in-One Automation Platform / 1.1.32
OttoKit: All-in-One Automation Platform v1.1.32
1.1.32 1.1.31 1.1.30 1.1.29 1.1.28 1.1.27 1.1.9 trunk 1.0.10 1.0.11 1.0.12 1.0.13 1.0.14 1.0.15 1.0.16 1.0.17 1.0.18 1.0.19 1.0.20 1.0.21 1.0.22 1.0.23 1.0.24 1.0.25 1.0.26 1.0.27 1.0.28 1.0.29 1.0.30 1.0.31 1.0.32 1.0.33 1.0.34 1.0.35 1.0.36 1.0.37 1.0.38 1.0.39 1.0.40 1.0.41 1.0.42 1.0.43 1.0.44 1.0.45 1.0.46 1.0.47 1.0.48 1.0.49 1.0.50 1.0.51 1.0.52 1.0.53 1.0.54 1.0.55 1.0.56 1.0.57 1.0.58 1.0.59 1.0.60 1.0.61 1.0.62 1.0.63 1.0.64 1.0.65 1.0.66 1.0.67 1.0.68 1.0.69 1.0.7 1.0.70 1.0.71 1.0.72 1.0.73 1.0.74 1.0.75 1.0.76 1.0.77 1.0.78 1.0.79 1.0.8 1.0.80 1.0.81 1.0.82 1.0.83 1.0.84 1.0.85 1.0.86 1.0.87 1.0.88 1.0.89 1.0.9 1.0.90 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.20 1.1.21 1.1.22 1.1.23 1.1.24 1.1.25 1.1.26 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8
suretriggers / src / Integrations / affiliatewp / actions / affiliate-link-customer.php
suretriggers / src / Integrations / affiliatewp / actions Last commit date
affiliate-create-affiliate.php 10 months ago affiliate-create-referral-user.php 10 months ago affiliate-create-referral.php 10 months ago affiliate-link-customer.php 10 months ago
affiliate-link-customer.php
171 lines
1 <?php
2 /**
3 * AffiliateLinkCustomer.
4 * php version 5.6
5 *
6 * @category AffiliateLinkCustomer
7 * @package SureTriggers
8 * @author BSF <username@example.com>
9 * @license https://www.gnu.org/licenses/gpl-3.0.html GPLv3
10 * @link https://www.brainstormforce.com/
11 * @since 1.0.0
12 */
13
14 use SureTriggers\Integrations\AutomateAction;
15 use SureTriggers\Traits\SingletonLoader;
16
17 /**
18 * AffiliateLinkCustomer
19 *
20 * @category AffiliateLinkCustomer
21 * @package SureTriggers
22 * @author BSF <username@example.com>
23 * @license https://www.gnu.org/licenses/gpl-3.0.html GPLv3
24 * @link https://www.brainstormforce.com/
25 * @since 1.0.0
26 */
27 class AffiliateLinkCustomer extends AutomateAction {
28
29 /**
30 * Integration type.
31 *
32 * @var string
33 */
34 public $integration = 'AffiliateWP';
35
36 /**
37 * Action name.
38 *
39 * @var string
40 */
41 public $action = 'affiliate_link_customer';
42
43 use SingletonLoader;
44
45 /**
46 * Register a action.
47 *
48 * @param array $actions actions.
49 * @return array
50 */
51 public function register( $actions ) {
52 $actions[ $this->integration ][ $this->action ] = [
53 'label' => __( 'Link Customer to an Affiliate for Lifetime Commissions', 'suretriggers' ),
54 'action' => $this->action,
55 'function' => [ $this, 'action_listener' ],
56 ];
57 return $actions;
58 }
59
60 /**
61 * Action listener.
62 *
63 * @param int $user_id user_id.
64 * @param int $automation_id automation_id.
65 * @param array $fields fields.
66 * @param array $selected_options selectedOptions.
67 * @psalm-suppress UndefinedMethod
68 * @throws Exception Exception.
69 *
70 * @return array|bool|void
71 */
72 public function _action_listener( $user_id, $automation_id, $fields, $selected_options ) {
73
74 $lifetime_user_name = $selected_options['affiliate_id'];
75 $affiliate_user = get_user_by( 'ID', $lifetime_user_name );
76 $user_email = $selected_options['customer_email'];
77
78 if ( ! function_exists( 'affiliate_wp' ) || ! function_exists( 'affwp_get_customer' ) || ! function_exists( 'affwp_add_customer' ) || ! function_exists( 'affiliate_wp_lifetime_commissions' ) ) {
79 return [
80 'status' => 'error',
81 'message' => 'AffiliateWP functions not found.',
82 ];
83 }
84
85 if ( is_email( $user_email ) ) {
86 $user = get_user_by( 'email', $user_email );
87 if ( $user ) {
88 $user_ID = $user->ID;
89 if ( $affiliate_user ) {
90 // Prevent affiliates from setting themselves as a lifetime customer.
91 if ( $affiliate_user->ID === $user_ID ) {
92 return [
93 'status' => 'error',
94 'message' => 'Can not add affiliate themselves as a lifetime customer',
95 ];
96 }
97
98 $customer = affiliate_wp()->customers->get_by( 'user_id', $user_ID );
99
100 // If the customer does not exist, create it.
101 if ( ! $customer ) {
102 $customer = affwp_get_customer(
103 affwp_add_customer(
104 [
105 'user_id' => $user_ID,
106 'email' => $user->user_email,
107 ]
108 )
109 );
110 }
111
112 $lifetime_customer = affiliate_wp_lifetime_commissions()
113 ->lifetime_customers->get_by( 'affwp_customer_id', $customer->customer_id );
114 $affiliate = '';
115
116 $affiliate = affiliate_wp()->affiliates->get_by( 'affiliate_id', $affiliate_user->ID );
117
118 // If the affiliate was unset, and this user is currently a customer, delink the affiliate and bail.
119 if ( $lifetime_customer && ! $affiliate ) {
120 affiliate_wp_lifetime_commissions()
121 ->lifetime_customers->delete( $lifetime_customer->lifetime_customer_id );
122 return [
123 'status' => 'error',
124 'message' => 'Affiliate was not set.',
125 ];
126 }
127
128 // Add a new lifetime customer if the provided lifetime customer does not exist.
129 if ( ! $lifetime_customer ) {
130 affiliate_wp_lifetime_commissions()->lifetime_customers->add(
131 [
132 'affwp_customer_id' => $customer->customer_id,
133 'affiliate_id' => $affiliate->affiliate_id,
134 ]
135 );
136 return affiliate_wp_lifetime_commissions()
137 ->lifetime_customers->get_by( 'affwp_customer_id', $customer->customer_id );
138 // Otherwise, confirm the affiliate is actually a new affiliate before changing.
139 } elseif ( $affiliate->affiliate_id !== $lifetime_customer->affiliate_id ) {
140 affiliate_wp_lifetime_commissions()->lifetime_customers->update(
141 $lifetime_customer->affwp_customer_id,
142 [
143 'affiliate_id' => $affiliate->affiliate_id,
144 ]
145 );
146 return affiliate_wp_lifetime_commissions()
147 ->lifetime_customers->get_by( 'affwp_customer_id', $customer->customer_id );
148 }
149 } else {
150 return [
151 'status' => 'error',
152 'message' => 'Affiliate User not exists.',
153 ];
154 }
155 } else {
156 return [
157 'status' => 'error',
158 'message' => 'User not exists.',
159 ];
160 }
161 } else {
162 return [
163 'status' => 'error',
164 'message' => 'Please enter valid email address.',
165 ];
166 }
167 }
168 }
169
170 AffiliateLinkCustomer::get_instance();
171