PluginProbe ʕ •ᴥ•ʔ
Premium Addons for Elementor – Powerful Elementor Templates & Widgets / 4.11.84
Premium Addons for Elementor – Powerful Elementor Templates & Widgets v4.11.84
4.11.84 4.11.83 4.11.82 4.11.80 4.11.81 4.11.79 4.11.78 4.11.77 4.11.76 4.11.75 3.20.5 4.11.69 3.20.6 4.11.7 3.20.7 4.11.70 3.20.8 4.11.71 3.20.9 4.11.72 3.21.1 4.11.73 3.21.2 4.11.74 3.21.3 4.11.8 3.21.4 4.11.9 3.21.5 4.2.0 3.21.6 4.2.1 3.3.0 4.2.2 3.3.1 4.2.3 3.3.2 4.2.4 3.3.3 4.2.5 3.3.4 4.2.6 3.3.5 4.2.7 3.3.6 4.2.8 3.3.7 4.2.9 3.3.8 4.3.0 3.3.9 4.3.1 3.4.0 4.3.2 3.4.1 4.3.3 3.4.2 4.3.4 3.4.3 4.3.5 3.4.4 4.3.6 3.4.5 4.3.7 3.4.6 4.3.8 3.4.7 4.3.9 3.4.8 4.4.0 3.4.9 4.4.1 3.5.0 4.4.2 3.5.1 4.4.3 3.5.2 4.4.4 3.5.3 4.4.5 3.5.4 4.4.6 3.5.5 4.4.7 3.5.6 4.4.8 3.5.7 4.4.9 3.5.8 4.5.0 3.5.9 4.5.1 3.6.0 4.5.2 3.6.1 4.5.3 3.6.2 4.5.4 3.6.3 4.5.5 3.6.4 4.5.6 3.6.5 4.5.7 3.6.6 4.5.8 3.6.7 4.5.9 3.6.8 4.6.0 3.6.9 4.6.1 3.7.0 4.7.0 3.7.1 4.7.1 3.7.2 4.7.2 3.7.3 4.7.3 3.7.4 4.7.4 3.7.5 4.7.5 3.7.6 4.7.6 3.7.7 4.7.7 3.7.8 4.7.8 3.7.9 4.7.9 3.8.0 4.8.0 3.8.1 4.8.1 3.8.2 4.8.10 3.8.3 4.8.11 3.8.4 4.8.2 3.8.5 4.8.3 3.8.6 4.8.4 3.8.7 4.8.5 3.8.8 4.8.6 3.8.9 4.8.7 3.9.0 4.8.8 3.9.1 4.8.9 3.9.2 4.9.0 3.9.3 4.9.0-beta1 3.9.4 4.9.0-beta2 3.9.5 4.9.1 3.9.6 4.9.10 3.9.7 4.9.11 3.9.8 4.9.12 3.9.9 4.9.13 4.0.1 4.9.14 4.0.3 4.9.15 4.0.4 4.9.16 4.0.5 4.9.17 4.0.6 4.9.18 4.0.7 4.9.19 4.0.8 4.9.2 4.0.9 4.9.20 4.1.0 4.9.21 4.1.1 4.9.22 4.1.2 4.9.23 4.1.3 4.9.24 trunk 4.1.4 4.9.25 1.0 4.1.5 4.9.26 1.01 4.1.6 4.9.27 1.02 4.1.7 4.9.28 1.03 4.1.8 4.9.29 1.04 4.1.9 4.9.3 1.05 4.10.0 4.9.30 1.06 4.10.1 4.9.31 1.07 4.10.10 4.9.32 1.08 4.10.11 4.9.33 1.09 4.10.12 4.9.34 2.0 4.10.13 4.9.35 2.0.1 4.10.14 4.9.36 2.0.2 4.10.15 4.9.37 2.0.3 4.10.16 4.9.38 2.0.4 4.10.17 4.9.39 2.0.5 4.10.18 4.9.4 2.0.6 4.10.19 4.9.40 2.0.7 4.10.2 4.9.41 2.0.8 4.10.20 4.9.42 2.0.9 4.10.21 4.9.43 2.1.0 4.10.22 4.9.45 2.1.1 4.10.23 4.9.46 2.1.2 4.10.24 4.9.47 2.1.3 4.10.25 4.9.48 2.1.4 4.10.26 4.9.49 2.1.5 4.10.27 4.9.5 2.1.5-beta1 4.10.28 4.9.50 2.1.6 4.10.29 4.9.51 2.1.7 4.10.3 4.9.52 2.1.8 4.10.30 4.9.53 2.1.9 4.10.31 4.9.54 2.2.0 4.10.32 4.9.55 2.2.1 4.10.33 4.9.56 2.2.2 4.10.34 4.9.57 2.2.3 4.10.35 4.9.6 2.2.4 4.10.36 4.9.7 2.2.5 4.10.37 4.9.8 2.2.6 4.10.38 4.9.9 2.2.7 4.10.39 2.2.8 4.10.4 2.2.9 4.10.40 2.3.0 4.10.41 2.3.1 4.10.42 2.3.2 4.10.43 2.3.3 4.10.44 2.3.4 4.10.45 2.3.5 4.10.46 2.3.6 4.10.47 2.3.7 4.10.48 2.3.8 4.10.49 2.3.9 4.10.5 2.4.0 4.10.50 2.4.1 4.10.51 2.5.0 4.10.52 2.5.1 4.10.53 2.5.2 4.10.54 2.5.3 4.10.55 2.5.4 4.10.56 2.5.5 4.10.57 2.5.6 4.10.58 2.5.7 4.10.59 2.5.8 4.10.6 2.5.9 4.10.60 2.6.0 4.10.61 2.6.1 4.10.62 2.6.2 4.10.63 2.6.3 4.10.64 2.6.4 4.10.65 2.6.5 4.10.66 2.6.6 4.10.67 2.6.7 4.10.68 2.6.8 4.10.69 2.6.9 4.10.7 2.7.0 4.10.70 2.7.1 4.10.71 2.7.2 4.10.72 2.7.3 4.10.73 2.7.4 4.10.74 2.7.5 4.10.75 2.7.6 4.10.76 2.7.7 4.10.77 2.7.8 4.10.78 2.7.9 4.10.79 2.8.0 4.10.8 2.8.1 4.10.80 2.8.2 4.10.81 2.8.3 4.10.82 2.8.4 4.10.83 2.8.5 4.10.84 2.8.6 4.10.85 2.8.7 4.10.86 2.8.8 4.10.87 2.8.9 4.10.88 2.9.0 4.10.89 2.9.1 4.10.9 2.9.2 4.10.90 2.9.3 4.11.0 2.9.4 4.11.1 2.9.5 4.11.10 2.9.6 4.11.11 2.9.7 4.11.12 2.9.8 4.11.13 2.9.9 4.11.14 3.0.0 4.11.15 3.0.1 4.11.16 3.0.2 4.11.17 3.0.3 4.11.18 3.0.4 4.11.19 3.0.5 4.11.2 3.0.6 4.11.20 3.0.7 4.11.21 3.0.8 4.11.22 3.0.9 4.11.23 3.1.0 4.11.24 3.1.1 4.11.25 3.1.2 4.11.26 3.1.3 4.11.27 3.1.4 4.11.28 3.1.5 4.11.29 3.1.6 4.11.3 3.1.7 4.11.30 3.1.8 4.11.31 3.1.9 4.11.32 3.10.0 4.11.33 3.10.1 4.11.34 3.10.2 4.11.35 3.10.3 4.11.36 3.10.4 4.11.37 3.10.5 4.11.38 3.10.6 4.11.39 3.10.7 4.11.4 3.10.8 4.11.40 3.10.9 4.11.41 3.11.0 4.11.42 3.11.1 4.11.43 3.11.2 4.11.44 3.11.3 4.11.45 3.11.4 4.11.46 3.11.5 4.11.47 3.11.6 4.11.48 3.11.7 4.11.49 3.11.8 4.11.5 3.11.9 4.11.50 3.12.0 4.11.51 3.12.1 4.11.52 3.12.2 4.11.53 3.12.3 4.11.54 3.2.0 4.11.55 3.2.1 4.11.56 3.2.2 4.11.57 3.2.3 4.11.58 3.2.4 4.11.59 3.2.5 4.11.6 3.2.6 4.11.60 3.2.7 4.11.61 3.2.8 4.11.62 3.2.9 4.11.63 3.20.0 4.11.64 3.20.1 4.11.65 3.20.2 4.11.66 3.20.3 4.11.67 3.20.4 4.11.68
premium-addons-for-elementor / includes / helpers / ajax-helper.php
premium-addons-for-elementor / includes / helpers Last commit date
acf-helper.php 2 months ago ajax-helper.php 2 months ago device-detector.php 2 months ago pa-nav-menu-walker.php 2 months ago papro-promotion.php 1 day ago query-helper.php 2 days ago widget-class-map.php 2 months ago widget-name-map.php 2 months ago
ajax-helper.php
424 lines
1 <?php
2 /**
3 * Controls Helper
4 *
5 * Handles element feedback functionality.
6 */
7
8 namespace PremiumAddons\Includes\Helpers;
9
10 use PremiumAddons\Includes\Helper_Functions;
11 use PremiumAddons\Includes\Helpers\Query_Helper;
12 use PremiumAddons\Includes\Premium_Template_Tags;
13
14 if ( ! defined( 'ABSPATH' ) ) {
15 exit; // Exit if accessed directly.
16 }
17
18 /**
19 * Controls Helper Trait
20 *
21 * @since 4.11.58
22 */
23 trait AJAX_Helper {
24
25 public function register_ajax_hooks() {
26
27 // Custom Controls AJAX Handlers.
28 add_action( 'wp_ajax_premium_update_filter', array( $this, 'get_posts_list' ) );
29 add_action( 'wp_ajax_premium_update_tax', array( $this, 'get_related_tax' ) );
30 add_action( 'wp_ajax_pa_acf_options', array( $this, 'get_acf_options' ) );
31
32 // Template Content AJAX Handlers.
33 add_action( 'wp_ajax_get_elementor_template_content', array( $this, 'get_template_content' ) );
34 add_action( 'wp_ajax_nopriv_get_elementor_template_content', array( $this, 'get_template_content' ) );
35
36 // Social Feed AJAX Handlers.
37 add_action( 'wp_ajax_get_pinterest_token', array( $this, 'get_pinterest_token' ) );
38 add_action( 'wp_ajax_get_pinterest_boards', array( $this, 'get_pinterest_boards' ) );
39 add_action( 'wp_ajax_get_tiktok_token', array( $this, 'get_tiktok_token' ) );
40
41 // Send Feedback AJAX Handler.
42 add_action( 'wp_ajax_pa_send_element_feedback', array( $this, 'send' ) );
43
44 // Get Posts Query AJAX Handler.
45 add_action( 'wp_ajax_pa_get_posts', array( $this, 'get_posts_query' ) );
46 add_action( 'wp_ajax_nopriv_pa_get_posts', array( $this, 'get_posts_query' ) );
47
48 // Search Results AJAX Handler.
49 add_action( 'wp_ajax_premium_get_search_results', array( $this, 'get_search_results' ) );
50 add_action( 'wp_ajax_nopriv_premium_get_search_results', array( $this, 'get_search_results' ) );
51 }
52
53 /**
54 * Get posts list
55 *
56 * Get posts list array
57 *
58 * @since 4.2.8
59 * @access public
60 */
61 public function get_posts_list() {
62
63 check_ajax_referer( 'pa-blog-widget-nonce', 'nonce' );
64
65 $post_type = isset( $_POST['post_type'] ) ? wp_unslash( $_POST['post_type'] ) : '';
66
67 $post_type = array_map( 'sanitize_text_field', $post_type );
68
69 if ( empty( $post_type ) ) {
70 wp_send_json_error( __( 'Empty Post Type.', 'premium-addons-for-elementor' ) );
71 }
72
73 $args = array(
74 'post_type' => $post_type,
75 'posts_per_page' => -1,
76 'update_post_term_cache' => false,
77 'update_post_meta_cache' => false,
78 );
79
80 // Exclude the premium-grid and loop-items templates for 'elementor_library' source.
81 if ( in_array( 'elementor_library', $post_type, true ) ) {
82 $args['meta_query'] = array(
83 array(
84 'key' => '_elementor_template_type',
85 'value' => array( 'premium-grid', 'loop-item' ),
86 'compare' => 'NOT IN',
87 ),
88 );
89 }
90
91 $list = get_posts( $args );
92
93 $options = array();
94
95 if ( ! empty( $list ) && ! is_wp_error( $list ) ) {
96
97 foreach ( $list as $post ) {
98 $key = in_array( 'elementor_library', $post_type, true ) ? $post->post_title : $post->ID;
99 $options[ $key ] = $post->post_title;
100 }
101 }
102
103 wp_send_json_success( wp_json_encode( $options ) );
104 }
105
106 /**
107 * Get related taxonomy list
108 *
109 * Get related taxonomy list array
110 *
111 * @since 4.3.1
112 * @access public
113 */
114 public function get_related_tax() {
115
116 check_ajax_referer( 'pa-blog-widget-nonce', 'nonce' );
117
118 $post_type = isset( $_POST['post_type'] ) ? sanitize_text_field( wp_unslash( $_POST['post_type'] ) ) : '';
119
120 if ( empty( $post_type ) ) {
121 wp_send_json_error( __( 'Empty Post Type.', 'premium-addons-for-elementor' ) );
122 }
123
124 $taxonomy = Query_Helper::get_taxnomies( $post_type );
125
126 $related_tax = array();
127
128 if ( ! empty( $taxonomy ) ) {
129
130 foreach ( $taxonomy as $index => $tax ) {
131 $related_tax[ $index ] = $tax->label;
132 }
133 }
134
135 wp_send_json_success( wp_json_encode( $related_tax ) );
136 }
137
138 /**
139 * Get Acf Options.
140 *
141 * Get options using AJAX.
142 *
143 * @since 4.4.8
144 * @access public
145 */
146 public function get_acf_options() {
147
148 check_ajax_referer( 'pa-blog-widget-nonce', 'nonce' );
149
150 if ( ! current_user_can( 'manage_options' ) ) {
151 wp_send_json_error( 'Insufficient user permission' );
152 }
153
154 $query_options = isset( $_POST['query_options'] ) && is_array( $_POST['query_options'] )
155 ? array_map( 'sanitize_text_field', wp_unslash( $_POST['query_options'] ) )
156 : array();
157
158 $query = new \WP_Query(
159 array(
160 'post_type' => 'acf-field',
161 'posts_per_page' => -1,
162 )
163 );
164
165 $results = ACF_Helper::format_acf_query_result( $query->posts, $query_options );
166
167 wp_send_json_success( wp_json_encode( $results ) );
168 }
169
170 /**
171 * Get Template Content
172 *
173 * Get Elementor template HTML content.
174 *
175 * @since 3.2.6
176 * @access public
177 */
178 public function get_template_content() {
179
180 $template = isset( $_GET['templateID'] ) ? sanitize_text_field( wp_unslash( $_GET['templateID'] ) ) : '';
181 $is_ID = isset( $_GET['is_id'] ) ? filter_var( $_GET['is_id'], FILTER_VALIDATE_BOOLEAN ) : false;
182
183 if ( empty( $template ) ) {
184 wp_send_json_error( 'Empty Template ID' );
185 }
186
187 // Get the post object to check status and author
188 $post = get_post( $template );
189
190 if ( ! $post ) {
191 wp_send_json_error( 'Invalid Template ID' );
192 }
193
194 // Check if post is published or user has permission to view
195 if ( 'publish' !== $post->post_status ) {
196 $current_user_id = get_current_user_id();
197 $is_author = ( $current_user_id === (int) $post->post_author );
198 $is_admin = current_user_can( 'manage_options' );
199
200 if ( ! $is_admin && ! $is_author ) {
201 wp_send_json_error( 'Permission denied' );
202 }
203 }
204
205 $template_content = Helper_Functions::render_elementor_template( $template, $is_ID );
206
207 if ( empty( $template_content ) || ! isset( $template_content ) ) {
208 wp_send_json_error( 'Empty Content' );
209 }
210
211 $data = array(
212 'template_content' => $template_content,
213 );
214
215 wp_send_json_success( $data );
216 }
217
218 /**
219 * Get Pinterest account token for Pinterest Feed widget
220 *
221 * @since 4.10.2
222 * @access public
223 *
224 * @return void
225 */
226 public function get_pinterest_token() {
227
228 check_ajax_referer( 'pa-editor', 'security' );
229
230 $api_url = 'https://appfb.premiumaddons.com/wp-json/fbapp/v2/pinterest';
231
232 $response = wp_remote_get(
233 $api_url,
234 array(
235 'timeout' => 15,
236 'sslverify' => true,
237 )
238 );
239
240 $body = wp_remote_retrieve_body( $response );
241 $body = json_decode( $body, true );
242
243 wp_send_json_success( $body );
244 }
245
246 /**
247 * Get Pinterest account token for Pinterest Feed widget
248 *
249 * @since 4.10.2
250 * @access public
251 *
252 * @return void
253 */
254 public function get_pinterest_boards() {
255
256 check_ajax_referer( 'pa-blog-widget-nonce', 'nonce' );
257
258 if ( ! isset( $_GET['token'] ) ) {
259 wp_send_json_error();
260 }
261
262 $token = sanitize_text_field( wp_unslash( $_GET['token'] ) );
263
264 $transient_name = 'pa_pinterest_boards_' . substr( $token, 0, 15 );
265
266 $body = get_transient( $transient_name );
267
268 if ( false === $body ) {
269
270 $api_url = 'https://api.pinterest.com/v5/boards?page_size=60';
271
272 $response = wp_remote_get(
273 $api_url,
274 array(
275 'headers' => array(
276 'Authorization' => 'Bearer ' . $token,
277 ),
278 )
279 );
280
281 $body = wp_remote_retrieve_body( $response );
282 $body = json_decode( $body, true );
283
284 set_transient( $transient_name, $body, 30 * MINUTE_IN_SECONDS );
285
286 }
287
288 $boards = array();
289
290 foreach ( $body['items'] as $index => $board ) {
291 $boards[ $board['id'] ] = $board['name'];
292 }
293
294 wp_send_json_success( wp_json_encode( $boards ) );
295 }
296
297 /**
298 * Get Pinterest account token for Pinterest Feed widget
299 *
300 * @since 4.10.2
301 * @access public
302 *
303 * @return void
304 */
305 public function get_tiktok_token() {
306
307 check_ajax_referer( 'pa-editor', 'security' );
308
309 $api_url = 'https://appfb.premiumaddons.com/wp-json/fbapp/v2/tiktok';
310
311 $response = wp_remote_get(
312 $api_url,
313 array(
314 'timeout' => 15,
315 'sslverify' => false,
316 )
317 );
318
319 $body = wp_remote_retrieve_body( $response );
320 $body = json_decode( $body, true );
321
322 wp_send_json_success( $body );
323 }
324
325 /**
326 * Send Element Feedback
327 *
328 * Send element feedback via AJAX.
329 *
330 * @since 4.11.58
331 * @access public
332 *
333 * @return void
334 */
335 public function send() {
336
337 check_ajax_referer( 'pa-editor', 'security' );
338
339 $user_msg = isset( $_POST['user_message'] ) ? sanitize_text_field( wp_unslash( $_POST['user_message'] ) ) : '';
340
341 if ( empty( $user_msg ) ) {
342 wp_send_json_error( array( 'message' => esc_html__( 'Message cannot be empty.', 'premium-addons-for-elementor' ) ) );
343 }
344
345 $user = wp_get_current_user();
346
347 $email = $user->user_email;
348
349 if ( empty( $email ) ) {
350 wp_send_json_error( array( 'message' => esc_html__( 'User email not found.', 'premium-addons-for-elementor' ) ) );
351 }
352
353 $element = isset( $_POST['element_name'] ) ? sanitize_text_field( wp_unslash( $_POST['element_name'] ) ) : '';
354
355 $body = array(
356 'email' => $email,
357 'element' => $element,
358 'message' => $user_msg,
359 );
360
361 $api_url = 'https://feedbackpa.leap13.com/wp-json/element-feedback/v2/add';
362
363 $response = wp_safe_remote_request(
364 $api_url,
365 array(
366 'headers' => array(
367 'Content-Type' => 'application/json',
368 ),
369 'body' => wp_json_encode( $body ),
370 'timeout' => 20,
371 'method' => 'POST',
372 'httpversion' => '1.1',
373 )
374 );
375
376 if ( is_wp_error( $response ) ) {
377 wp_send_json_error( 'REQUEST ERR' );
378
379 }
380
381 if ( ! isset( $response['response'] ) || ! is_array( $response['response'] ) ) {
382 wp_send_json_error( 'REQUEST UNKNOWN' );
383
384 }
385
386 if ( ! isset( $response['body'] ) ) {
387 wp_send_json_error( 'REQUEST PAYLOAD EMPTY' );
388
389 }
390
391 wp_send_json_success( ( $response['body'] ) );
392 }
393
394 /**
395 * Get Posts Query
396 *
397 * Get posts query via AJAX.
398 *
399 * @since 4.11.58
400 * @access public
401 *
402 * @return void
403 */
404 public function get_posts_query() {
405 $myinstance = new Premium_Template_Tags();
406 $myinstance->get_posts_query();
407 }
408
409 /**
410 * Get Search Results
411 *
412 * Get search results via AJAX.
413 *
414 * @since 4.11.61
415 * @access public
416 *
417 * @return void
418 */
419 public function get_search_results() {
420 $myinstance = new Premium_Template_Tags();
421 $myinstance->get_search_results();
422 }
423 }
424