PluginProbe
Kit (formerly ConvertKit) – Email Newsletter, Email Marketing, Membership, Subscribers and Landing Pages / 2.0.2
Kit (formerly ConvertKit) – Email Newsletter, Email Marketing, Membership, Subscribers and Landing Pages v2.0.2
3.4.1 3.4.0 3.3.9 3.3.8 3.3.7 3.3.6 3.3.5 3.3.4 3.3.3 3.3.2 3.3.1 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.2.7 2.2.8 2.2.9 2.3.0 2.3.1 2.3.2 2.3.3 All 194 releases
convertkit / includes / class-convertkit-ajax.php

class-convertkit-ajax.php in Kit (formerly ConvertKit) – Email Newsletter, Email Marketing, Membership, Subscribers and Landing Pages 2.0.2, at includes/class-convertkit-ajax.php

190 lines 6.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * ConvertKit AJAX class.
4 *
5 * @package ConvertKit
6 * @author ConvertKit
7 */
8
9 /**
10 * Registers AJAX actions for the Plugin.
11 *
12 * @since 1.9.6
13 */
14 class ConvertKit_AJAX {
15
16 /**
17 * Constructor.
18 *
19 * @since 1.9.6
20 */
21 public function __construct() {
22
23 add_action( 'wp_ajax_nopriv_convertkit_store_subscriber_id_in_cookie', array( $this, 'store_subscriber_id_in_cookie' ) );
24 add_action( 'wp_ajax_convertkit_store_subscriber_id_in_cookie', array( $this, 'store_subscriber_id_in_cookie' ) );
25
26 add_action( 'wp_ajax_nopriv_convertkit_store_subscriber_email_as_id_in_cookie', array( $this, 'store_subscriber_email_as_id_in_cookie' ) );
27 add_action( 'wp_ajax_convertkit_store_subscriber_email_as_id_in_cookie', array( $this, 'store_subscriber_email_as_id_in_cookie' ) );
28
29 add_action( 'wp_ajax_nopriv_convertkit_tag_subscriber', array( $this, 'tag_subscriber' ) );
30 add_action( 'wp_ajax_convertkit_tag_subscriber', array( $this, 'tag_subscriber' ) );
31
32 }
33
34 /**
35 * Stores the ConvertKit Subscriber's ID in a cookie.
36 *
37 * Typically performed when the user subscribes via a ConvertKit Form on the web site
38 * that is set to "Send subscriber to thank you page", and the Plugin's JavaScript is not
39 * disabled, permitting convertkit.js to run.
40 *
41 * @since 1.9.6
42 */
43 public function store_subscriber_id_in_cookie() {
44
45 // Check nonce.
46 check_ajax_referer( 'convertkit', 'convertkit_nonce' );
47
48 // Bail if required request parameters not submitted.
49 if ( ! isset( $_REQUEST['subscriber_id'] ) ) {
50 wp_send_json_error( __( 'ConvertKit: Required parameter `subscriber_id` not included in AJAX request.', 'convertkit' ) );
51 }
52
53 // Bail if no subscriber ID provided.
54 $id = absint( sanitize_text_field( $_REQUEST['subscriber_id'] ) );
55 if ( empty( $id ) ) {
56 wp_send_json_error( __( 'ConvertKit: Required parameter `subscriber_id` empty in AJAX request.', 'convertkit' ) );
57 }
58
59 // Get subscriber ID.
60 $subscriber = new ConvertKit_Subscriber();
61 $subscriber_id = $subscriber->validate_and_store_subscriber_id( $id );
62
63 // Bail if an error occured i.e. API hasn't been configured, subscriber ID does not exist in ConvertKit etc.
64 if ( is_wp_error( $subscriber_id ) ) {
65 wp_send_json_error( $subscriber_id->get_error_message() );
66 }
67
68 // Return the subscriber ID.
69 wp_send_json_success(
70 array(
71 'id' => $subscriber_id,
72 )
73 );
74
75 }
76
77 /**
78 * Stores the ConvertKit Subscriber Email's ID in a cookie.
79 *
80 * Typically performed when the user subscribes via a ConvertKit Form on the web site
81 * and the Plugin's JavaScript is not disabled, permitting convertkit.js to run.
82 *
83 * @since 1.9.6
84 */
85 public function store_subscriber_email_as_id_in_cookie() {
86
87 // Check nonce.
88 check_ajax_referer( 'convertkit', 'convertkit_nonce' );
89
90 // Bail if required request parameters not submitted.
91 if ( ! isset( $_REQUEST['email'] ) ) {
92 wp_send_json_error( __( 'ConvertKit: Required parameter `email` not included in AJAX request.', 'convertkit' ) );
93 }
94 $email = sanitize_text_field( $_REQUEST['email'] );
95
96 // Bail if the email address is empty.
97 if ( empty( $email ) ) {
98 wp_send_json_error( __( 'ConvertKit: Required parameter `email` is empty.', 'convertkit' ) );
99 }
100
101 // Bail if the email address isn't a valid email address.
102 if ( ! filter_var( $email, FILTER_VALIDATE_EMAIL ) ) {
103 wp_send_json_error( __( 'ConvertKit: Required parameter `email` is not an email address.', 'convertkit' ) );
104 }
105
106 // Get subscriber ID.
107 $subscriber = new ConvertKit_Subscriber();
108 $subscriber_id = $subscriber->validate_and_store_subscriber_email( $email );
109
110 // Bail if an error occured i.e. API hasn't been configured, subscriber ID does not exist in ConvertKit etc.
111 if ( is_wp_error( $subscriber_id ) ) {
112 wp_send_json_error( $subscriber_id->get_error_message() );
113 }
114
115 // Return the subscriber ID.
116 wp_send_json_success(
117 array(
118 'id' => $subscriber_id,
119 )
120 );
121
122 }
123
124 /**
125 * Tags a subscriber when their subscriber ID is present in the cookie or URL,
126 * and the Page's ConvertKit Settings specify a Tag.
127 *
128 * @since 1.9.6
129 */
130 public function tag_subscriber() {
131
132 // Check nonce.
133 check_ajax_referer( 'convertkit', 'convertkit_nonce' );
134
135 // Bail if required request parameters not submitted.
136 if ( ! isset( $_REQUEST['subscriber_id'] ) ) {
137 wp_send_json_error( __( 'ConvertKit: Required parameter `subscriber_id` not included in AJAX request.', 'convertkit' ) );
138 }
139 if ( ! isset( $_REQUEST['tag'] ) ) {
140 wp_send_json_error( __( 'ConvertKit: Required parameter `tag` not included in AJAX request.', 'convertkit' ) );
141 }
142 $subscriber_id = absint( sanitize_text_field( $_REQUEST['subscriber_id'] ) );
143 $tag_id = absint( sanitize_text_field( $_REQUEST['tag'] ) );
144
145 // Bail if no subscriber ID or tag provided.
146 if ( empty( $subscriber_id ) ) {
147 wp_send_json_error( __( 'ConvertKit: Required parameter `subscriber_id` empty in AJAX request.', 'convertkit' ) );
148 }
149 if ( empty( $tag_id ) ) {
150 wp_send_json_error( __( 'ConvertKit: Required parameter `tag` empty in AJAX request.', 'convertkit' ) );
151 }
152
153 // Bail if the API hasn't been configured.
154 $settings = new ConvertKit_Settings();
155 if ( ! $settings->has_api_key_and_secret() ) {
156 wp_send_json_error( __( 'ConvertKit: API Keys not defined in Plugin Settings.', 'convertkit' ) );
157 }
158
159 // Initialize the API.
160 $api = new ConvertKit_API( $settings->get_api_key(), $settings->get_api_secret(), $settings->debug_enabled() );
161
162 // Get subscriber's email address by subscriber ID.
163 $subscriber = $api->get_subscriber_by_id( $subscriber_id );
164
165 // Bail if the subscriber could not be found.
166 if ( is_wp_error( $subscriber ) ) {
167 wp_send_json_error( $subscriber->get_error_message() );
168 }
169
170 // Store the subscriber ID as a cookie.
171 $subscriber = new ConvertKit_Subscriber();
172 $subscriber->set( $subscriber_id );
173
174 // Tag the subscriber with the Post's tag.
175 $tag = $api->tag_subscribe( $tag_id, $subscriber['email_address'] );
176
177 // Bail if an error occured tagging the subscriber.
178 if ( is_wp_error( $tag ) ) {
179 wp_send_json_error( $tag );
180 }
181
182 // Store the subscriber ID as a cookie.
183 setcookie( 'ck_subscriber_id', $subscriber['id'], time() + ( 365 * DAY_IN_SECONDS ), '/' );
184
185 wp_send_json_success( $tag );
186
187 }
188
189 }
190