PluginProbe ʕ •ᴥ•ʔ
OttoKit: All-in-One Automation Platform / 1.1.33
OttoKit: All-in-One Automation Platform v1.1.33
1.1.33 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 / fluentaffiliate / actions / create-affiliate.php
suretriggers / src / Integrations / fluentaffiliate / actions Last commit date
add-affiliate-to-group.php 5 months ago create-affiliate-group.php 5 months ago create-affiliate.php 5 months ago create-referral.php 5 months ago delete-affiliate-group.php 5 months ago get-affiliate-group.php 5 months ago get-affiliate.php 5 months ago remove-affiliate-from-group.php 5 months ago update-affiliate-group.php 5 months ago update-affiliate-status.php 5 months ago
create-affiliate.php
235 lines
1 <?php
2 /**
3 * CreateAffiliate.
4 * php version 5.6
5 *
6 * @category CreateAffiliate
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 namespace SureTriggers\Integrations\FluentAffiliate\Actions;
15
16 use Exception;
17 use SureTriggers\Integrations\AutomateAction;
18 use SureTriggers\Traits\SingletonLoader;
19
20 /**
21 * CreateAffiliate
22 *
23 * @category CreateAffiliate
24 * @package SureTriggers
25 * @author BSF <username@example.com>
26 * @license https://www.gnu.org/licenses/gpl-3.0.html GPLv3
27 * @link https://www.brainstormforce.com/
28 * @since 1.0.0
29 */
30 class CreateAffiliate extends AutomateAction {
31
32 /**
33 * Integration type.
34 *
35 * @var string
36 */
37 public $integration = 'FluentAffiliate';
38
39 /**
40 * Action name.
41 *
42 * @var string
43 */
44 public $action = 'fluentaffiliate_create_affiliate';
45
46 use SingletonLoader;
47
48 /**
49 * Register a action.
50 *
51 * @param array $actions actions.
52 * @return array
53 */
54 public function register( $actions ) {
55
56 $actions[ $this->integration ][ $this->action ] = [
57 'label' => __( 'Create Affiliate', 'suretriggers' ),
58 'action' => $this->action,
59 'function' => [ $this, 'action_listener' ],
60 ];
61 return $actions;
62 }
63
64 /**
65 * Action listener.
66 *
67 * @param int $user_id user_id.
68 * @param int $automation_id automation_id.
69 * @param array $fields fields.
70 * @param array $selected_options selectedOptions.
71 * @return array|void
72 * @throws Exception Exception.
73 */
74 public function _action_listener( $user_id, $automation_id, $fields, $selected_options ) {
75
76 // Check if FluentAffiliate Affiliate model exists.
77 if ( ! class_exists( 'FluentAffiliate\App\Models\Affiliate' ) ) {
78 return [
79 'status' => 'error',
80 'message' => __( 'FluentAffiliate plugin is not installed or activated.', 'suretriggers' ),
81 ];
82 }
83
84 // Extract selected options.
85 $email = isset( $selected_options['email'] ) ? sanitize_email( $selected_options['email'] ) : '';
86 $first_name = isset( $selected_options['first_name'] ) ? sanitize_text_field( $selected_options['first_name'] ) : '';
87 $last_name = isset( $selected_options['last_name'] ) ? sanitize_text_field( $selected_options['last_name'] ) : '';
88 $username = isset( $selected_options['username'] ) ? sanitize_user( $selected_options['username'] ) : '';
89 $password = isset( $selected_options['password'] ) ? $selected_options['password'] : '';
90 $status = isset( $selected_options['status'] ) ? sanitize_text_field( $selected_options['status'] ) : 'active';
91 $payment_email = isset( $selected_options['payment_email'] ) ? sanitize_email( $selected_options['payment_email'] ) : $email;
92 $rate_type = isset( $selected_options['rate_type'] ) ? sanitize_text_field( $selected_options['rate_type'] ) : 'percentage';
93 $commission_rate = isset( $selected_options['commission_rate'] ) ? sanitize_text_field( $selected_options['commission_rate'] ) : '';
94 $notes = isset( $selected_options['notes'] ) ? sanitize_textarea_field( $selected_options['notes'] ) : '';
95
96 // Validate required fields.
97 if ( empty( $email ) ) {
98 return [
99 'status' => 'error',
100 'message' => __( 'Email is required to create an affiliate.', 'suretriggers' ),
101 ];
102 }
103
104 // Check if user exists by email.
105 $wp_user = get_user_by( 'email', $email );
106
107 // If user doesn't exist, create new WordPress user.
108 if ( false === $wp_user ) {
109 // Username is required for new user creation.
110 if ( empty( $username ) ) {
111 $username = sanitize_user( current( explode( '@', $email ) ), true );
112 }
113
114 // Password is required for new user creation.
115 if ( empty( $password ) ) {
116 $password = wp_generate_password( 12, true );
117 }
118
119 // Check if username already exists.
120 if ( username_exists( $username ) ) {
121 return [
122 'status' => 'error',
123 'message' => sprintf( __( 'Username "%s" already exists. Please provide a different username.', 'suretriggers' ), $username ),
124 ];
125 }
126
127 // Create new WordPress user.
128 $user_data = [
129 'user_login' => $username,
130 'user_email' => $email,
131 'user_pass' => $password,
132 'first_name' => $first_name,
133 'last_name' => $last_name,
134 ];
135
136 $new_user_id = wp_insert_user( $user_data );
137
138 if ( is_wp_error( $new_user_id ) ) {
139 return [
140 'status' => 'error',
141 'message' => sprintf( __( 'Failed to create user: %s', 'suretriggers' ), $new_user_id->get_error_message() ),
142 ];
143 }
144
145 $wp_user = get_user_by( 'ID', $new_user_id );
146 }
147
148 // Ensure we have a valid user object.
149 if ( false === $wp_user ) {
150 return [
151 'status' => 'error',
152 'message' => __( 'Failed to retrieve user information.', 'suretriggers' ),
153 ];
154 }
155
156 // Check if user is already an affiliate.
157 $existing_affiliate = \FluentAffiliate\App\Models\Affiliate::where( 'user_id', $wp_user->ID )->first();
158
159 if ( $existing_affiliate ) {
160 return [
161 'status' => 'error',
162 'message' => __( 'User is already an affiliate.', 'suretriggers' ),
163 ];
164 }
165
166 // Prepare affiliate data.
167 $affiliate_data = [
168 'user_id' => $wp_user->ID,
169 'status' => $status,
170 'payment_email' => $payment_email,
171 'rate_type' => $rate_type,
172 'note' => $notes,
173 ];
174
175 // Add commission rate if provided.
176 if ( ! empty( $commission_rate ) ) {
177 $affiliate_data['rate'] = $commission_rate;
178 }
179
180 // Create affiliate.
181 try {
182 $affiliate = \FluentAffiliate\App\Models\Affiliate::create( $affiliate_data );
183
184 if ( ! $affiliate ) {
185 return [
186 'status' => 'error',
187 'message' => __( 'Failed to create affiliate.', 'suretriggers' ),
188 ];
189 }
190
191 // Update note and rate separately as they may not be in fillable array.
192 $update_data = [];
193 if ( ! empty( $notes ) ) {
194 $update_data['note'] = $notes;
195 }
196 if ( ! empty( $commission_rate ) ) {
197 $update_data['rate'] = $commission_rate;
198 }
199
200 if ( ! empty( $update_data ) ) {
201 $affiliate->update( $update_data );
202 // Refresh the affiliate object to get updated values.
203 $affiliate = $affiliate->fresh();
204 }
205
206 // Prepare response data.
207 $context = [
208 'affiliate_id' => $affiliate->id,
209 'user_id' => $affiliate->user_id,
210 'email' => $email,
211 'first_name' => $first_name,
212 'last_name' => $last_name,
213 'affiliate_status' => $affiliate->status,
214 'payment_email' => $affiliate->payment_email,
215 'rate_type' => $affiliate->rate_type,
216 'commission_rate' => ! empty( $affiliate->rate ) ? $affiliate->rate : $commission_rate,
217 'notes' => ! empty( $affiliate->note ) ? $affiliate->note : $notes,
218 'created_at' => $affiliate->created_at,
219 'status' => 'success',
220 ];
221
222 return $context;
223
224 } catch ( \Exception $e ) {
225 return [
226 'status' => 'error',
227 'message' => sprintf( __( 'Error creating affiliate: %s', 'suretriggers' ), $e->getMessage() ),
228 ];
229 }
230 }
231
232 }
233
234 CreateAffiliate::get_instance();
235