PluginProbe ʕ •ᴥ•ʔ
OttoKit: All-in-One Automation Platform / 1.1.35
OttoKit: All-in-One Automation Platform v1.1.35
1.1.37 1.1.36 1.1.35 1.1.34 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 / raffle-press / actions / add-contact-to-contest.php
suretriggers / src / Integrations / raffle-press / actions Last commit date
add-contact-to-contest.php 11 months ago
add-contact-to-contest.php
201 lines
1 <?php
2 /**
3 * AddContactToContest.
4 * php version 5.6
5 *
6 * @category AddContactToContest
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.1.5
12 */
13
14 namespace SureTriggers\Integrations\RafflePress\Actions;
15
16 use Exception;
17 use SureTriggers\Integrations\AutomateAction;
18 use SureTriggers\Traits\SingletonLoader;
19
20 /**
21 * AddContactToContest
22 *
23 * @category AddContactToContest
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.1.5
29 */
30 class AddContactToContest extends AutomateAction {
31
32 /**
33 * Integration type.
34 *
35 * @var string
36 */
37 public $integration = 'RafflePress';
38
39 /**
40 * Action name.
41 *
42 * @var string
43 */
44 public $action = 'rafflepress_add_contact_to_contest';
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' => __( 'Add Contact to Contest', '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 *
72 * @return array|void
73 *
74 * @throws Exception Exception.
75 */
76 public function _action_listener( $user_id, $automation_id, $fields, $selected_options ) {
77
78 if ( ! defined( 'RAFFLEPRESS_BUILD' ) && ! defined( 'RAFFLEPRESS_PRO_BUILD' ) ) {
79 return [
80 'status' => 'error',
81 'message' => __( 'RafflePress plugin is not installed or activated.', 'suretriggers' ),
82 ];
83 }
84
85 global $wpdb;
86
87 $contest_id = isset( $selected_options['contest_id'] ) ? absint( $selected_options['contest_id'] ) : 0;
88 $email = isset( $selected_options['email'] ) ? sanitize_email( $selected_options['email'] ) : '';
89 $first_name = isset( $selected_options['first_name'] ) ? sanitize_text_field( $selected_options['first_name'] ) : '';
90 $last_name = isset( $selected_options['last_name'] ) ? sanitize_text_field( $selected_options['last_name'] ) : '';
91
92 if ( empty( $contest_id ) ) {
93 return [
94 'status' => 'error',
95 'message' => __( 'Contest ID is required.', 'suretriggers' ),
96 ];
97 }
98
99 if ( empty( $email ) || ! is_email( $email ) ) {
100 return [
101 'status' => 'error',
102 'message' => __( 'Valid email address is required.', 'suretriggers' ),
103 ];
104 }
105
106 // Check if contest exists.
107 $contest = $wpdb->get_row(
108 $wpdb->prepare(
109 "SELECT id, name, active FROM {$wpdb->prefix}rafflepress_giveaways WHERE id = %d",
110 $contest_id
111 ),
112 ARRAY_A
113 );
114
115 if ( ! $contest ) {
116 return [
117 'status' => 'error',
118 'message' => __( 'Contest not found.', 'suretriggers' ),
119 ];
120 }
121
122 if ( ! $contest['active'] ) {
123 return [
124 'status' => 'error',
125 'message' => __( 'Contest is not active.', 'suretriggers' ),
126 ];
127 }
128
129 // Check if contestant already exists.
130 $existing_contestant = $wpdb->get_row(
131 $wpdb->prepare(
132 "SELECT id FROM {$wpdb->prefix}rafflepress_contestants WHERE giveaway_id = %d AND email = %s",
133 $contest_id,
134 $email
135 ),
136 ARRAY_A
137 );
138
139 if ( $existing_contestant ) {
140 return [
141 'status' => 'error',
142 'message' => __( 'Contact already exists in this contest.', 'suretriggers' ),
143 ];
144 }
145
146 // Insert contestant.
147 $contestant_data = [
148 'giveaway_id' => $contest_id,
149 'email' => $email,
150 'fname' => $first_name,
151 'lname' => $last_name,
152 'status' => 'confirmed',
153 'created_at' => current_time( 'mysql' ),
154 ];
155
156 $inserted = $wpdb->insert(
157 $wpdb->prefix . 'rafflepress_contestants',
158 $contestant_data,
159 [ '%d', '%s', '%s', '%s', '%s', '%s' ]
160 );
161
162 if ( false === $inserted ) {
163 return [
164 'status' => 'error',
165 'message' => __( 'Failed to add contact to contest.', 'suretriggers' ),
166 ];
167 }
168
169 $contestant_id = $wpdb->insert_id;
170
171 $entry_data = [
172 'giveaway_id' => $contest_id,
173 'contestant_id' => $contestant_id,
174 'created' => current_time( 'mysql' ),
175 ];
176
177 $wpdb->insert(
178 $wpdb->prefix . 'rafflepress_entries',
179 $entry_data,
180 [ '%d', '%d', '%s' ]
181 );
182
183 $context = [
184 'contest_id' => $contest_id,
185 'contest_name' => $contest['name'],
186 'contestant_id' => $contestant_id,
187 'email' => $email,
188 'first_name' => $first_name,
189 'last_name' => $last_name,
190 'full_name' => trim( $first_name . ' ' . $last_name ),
191 'status' => 'confirmed',
192 'entry_id' => $wpdb->insert_id,
193 'date_added' => current_time( 'mysql' ),
194 ];
195
196 return $context;
197 }
198 }
199
200 AddContactToContest::get_instance();
201