PluginProbe ʕ •ᴥ•ʔ
Shortcodes and extra features for Phlox theme / 2.17.12
Shortcodes and extra features for Phlox theme v2.17.12
2.17.21 2.17.20 trunk 1.0.0 1.0.1 1.0.2 1.0.3 1.0.6 1.0.9 1.1.0 1.3.0 1.3.1 1.3.10 1.3.14 1.3.2 1.3.3 1.3.6 1.4.0 1.4.1 1.4.2 1.5.0 1.5.2 1.6.0 1.6.2 1.6.4 1.7.0 1.7.2 2.10.0 2.10.1 2.10.3 2.10.5 2.10.7 2.10.8 2.10.9 2.11.0 2.11.1 2.11.2 2.12.0 2.14.0 2.15.0 2.15.2 2.15.4 2.15.5 2.15.6 2.15.7 2.15.8 2.15.9 2.16.0 2.16.1 2.16.2 2.16.3 2.16.4 2.17.0 2.17.1 2.17.12 2.17.13 2.17.14 2.17.15 2.17.16 2.17.2 2.17.3 2.17.4 2.17.5 2.17.6 2.17.8 2.17.9 2.4.12 2.4.13 2.4.14 2.4.16 2.4.18 2.4.19 2.4.9 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.14 2.5.15 2.5.16 2.5.17 2.5.19 2.5.2 2.5.20 2.5.3 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.10 2.6.12 2.6.13 2.6.14 2.6.15 2.6.16 2.6.17 2.6.19 2.6.2 2.6.20 2.6.4 2.6.5 2.6.7 2.7.0 2.7.1 2.7.10 2.7.11 2.7.12 2.7.13 2.7.14 2.7.2 2.7.3 2.7.4 2.7.5 2.7.6 2.7.7 2.7.8 2.7.9 2.8.0 2.8.1 2.8.2 2.8.3 2.8.4 2.8.5 2.8.6 2.8.7 2.8.9 2.9.0 2.9.12 2.9.14 2.9.15 2.9.16 2.9.17 2.9.18 2.9.19 2.9.2 2.9.20 2.9.21 2.9.22 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 2.9.8
auxin-elements / admin / includes / admin-ajax.php
auxin-elements / admin / includes Last commit date
classes 11 months ago compatibility 1 year ago metaboxes 1 year ago admin-ajax.php 1 year ago admin-hooks.php 1 year ago admin-the-functions.php 1 year ago index.php 2 years ago
admin-ajax.php
505 lines
1 <?php
2
3 function auxin_ajax_send_feedback(){
4
5 // skip if the form data is not receiced
6 if( empty( $_POST['form'] ) ){
7 wp_send_json_error( __( 'Data cannot be delivered, please try again.', 'auxin-elements' ) );
8 }
9
10
11 // extract the form data
12 $rate = ( ! empty( $_POST['form']['theme_rate'] ) || $_POST['form']['theme_rate'] === '0' ) ? sanitize_text_field( $_POST['form']['theme_rate'] ) : '';
13 $feedback = ! empty( $_POST['form']['feedback'] ) ? sanitize_text_field( $_POST['form']['feedback'] ) : '';
14 $email = ! empty( $_POST['form']['email'] ) ? sanitize_email( $_POST['form']['email'] ) : '';
15 $nonce = ! empty( $_POST['form']['_wpnonce'] ) ? sanitize_text_field( $_POST['form']['_wpnonce'] ) : '';
16
17 if( ! wp_verify_nonce( $nonce, 'phlox_feedback' ) ){
18 wp_send_json_error( __( 'Authorization failed!', 'auxin-elements' ) );
19 }
20
21 if ( ! current_user_can('manage_options') ) {
22 wp_send_json_error( __( "Access Denied: You don't have the required permissions!", 'auxin-elements' ) );
23 }
24
25 if( $rate || $rate === '0' ){
26
27 global $wp_version;
28
29 $passed_diff_time = auxin_get_passed_installed_time();
30 $installed_days = isset( $passed_diff_time->days ) ? $passed_diff_time->days : 1;
31
32 $args = array(
33 'user-agent' => 'WordPress/'.$wp_version.'; '. get_home_url(),
34 'timeout' => ( ( defined('DOING_CRON') && DOING_CRON ) ? 30 : 5),
35 'body' => array(
36 'cat' => 'rating',
37 'action' => 'submit',
38 'item-slug' => 'phlox',
39 'rate' => $rate,
40 'client_key' => get_theme_mod( 'client_key', ''),
41 'item_version'=> THEME_VERSION,
42 'theme_slug' => THEME_ID,
43 'feedback' => $feedback,
44 'is_active' => function_exists('auxin_is_activated') && auxin_is_activated(),
45 'installed_days' => $installed_days
46 )
47 );
48 // send the rating through the api
49 $request = wp_remote_post( 'https://api.averta.net/envato/items/', $args );
50 update_option( 'auxin_show_rate_scale_notice', 0 );
51 set_theme_mod( 'rate_scale_notice_remind_later_date', 0 );
52 // if ( ! is_wp_error( $request ) || wp_remote_retrieve_response_code( $request ) === 200 ) {}
53
54 // store the user rating on the website
55 auxin_update_option( 'user_rating', $rate );
56
57 // send the feedback via email
58 $message = 'Rate: '. $rate . "\r\n" . 'Email: <' . $email . ">\r\n\r\n" . $feedback;
59 wp_mail( 'feedbacks@averta.net', 'Feedback from phlox dashboard:', $message );
60
61 wp_send_json_success( __( 'Sent Successfully. Thanks for your feedback!', 'auxin-elements' ) );
62
63 } else{
64 wp_send_json_error( __( 'An error occurred. Feedback could not be delivered, please try again.', 'auxin-elements' ) );
65 }
66
67 }
68
69 add_action( 'wp_ajax_send_feedback', 'auxin_ajax_send_feedback' );
70
71 /**
72 * Hide Feedback notice
73 */
74 function auxin_remove_feedback_notice() {
75 // skip if the form data is not receiced
76 if( empty( $_POST['form'] ) ){
77 wp_send_json_error( __( 'Data cannot be delivered, please try again.', 'auxin-elements' ) );
78 }
79
80 $nonce = ! empty( $_POST['form']['_wpnonce'] ) ? sanitize_text_field( $_POST['form']['_wpnonce'] ) : '';
81
82 if( ! wp_verify_nonce( $nonce, 'phlox_feedback' ) ){
83 wp_send_json_error( __( 'Authorization failed!', 'auxin-elements' ) );
84 }
85
86 if ( ! current_user_can('manage_options') ) {
87 wp_send_json_error( __( "Access Denied: You don't have the required permissions!", 'auxin-elements' ) );
88 }
89
90 update_option( 'auxin_show_rate_scale_notice', 0 );
91 set_theme_mod( 'rate_scale_notice_remind_later_date', 0 );
92
93 wp_send_json_success();
94 }
95
96 add_action( 'wp_ajax_aux-remove-feedback-notice', 'auxin_remove_feedback_notice' );
97
98
99 /**
100 * Remind feedback
101 */
102 function auxin_ajax_remind_feedback() {
103 // skip if the form data is not receiced
104 if( empty( $_POST['form'] ) ){
105 wp_send_json_error( __( 'Data cannot be delivered, please try again.', 'auxin-elements' ) );
106 }
107
108 $nonce = ! empty( $_POST['form']['_wpnonce'] ) ? sanitize_text_field( $_POST['form']['_wpnonce'] ) : '';
109
110 if( ! wp_verify_nonce( $nonce, 'phlox_feedback' ) || ! current_user_can('manage_options') ){
111 wp_send_json_error( __( 'Authorization failed!', 'auxin-elements' ) );
112 }
113
114 // reset feedback notice viewer
115 update_option( 'auxin_show_rate_scale_notice', 0 );
116 set_theme_mod( 'rate_scale_notice_remind_later_date', time() + DAY_IN_SECONDS * 3 );
117
118 wp_send_json_success();
119 }
120
121 add_action( 'wp_ajax_remind_feedback', 'auxin_ajax_remind_feedback' );
122
123
124
125 function auxin_ajax_isotope_filter_group(){
126 // Check nonce
127 if ( ! isset( $_POST['group'] ) ||! isset( $_POST['key'] ) || ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( $_POST['nonce'], 'aux-iso-group' ) ) {
128 wp_send_json_error( __( 'Token Error.', 'auxin-elements' ) );
129 }
130
131 if ( ! current_user_can('manage_options') ) {
132 wp_send_json_error( __( "Access Denied: You don't have the required permissions!", 'auxin-elements' ) );
133 }
134
135 if( false !== update_option( 'aux_isotope_group_' . auxin_sanitize_input( $_POST['key'] ) , auxin_sanitize_input( $_POST['group'] ) ) ) {
136 wp_send_json_success( __( 'It\'s Done.', 'auxin-elements' ) );
137 }
138
139 wp_send_json_error( __( 'An error occurred.', 'auxin-elements' ) );
140 }
141 add_action( 'wp_ajax_aux_isotope_group', 'auxin_ajax_isotope_filter_group' );
142
143
144 function auxin_ajax_filter_get_content() {
145
146 // Check nonce
147 if ( ! isset( $_POST['n'] ) || ! wp_verify_nonce( $_POST['n'], 'aux_ajax_filter_request' ) ) {
148 wp_send_json_error( 'Nonce check failed!', 403 );
149 }
150
151 $num = sanitize_text_field( $_POST['num'] );
152 $post_type = 'product';
153 $tax = sanitize_text_field( $_POST['taxonomy'] );
154 $term = sanitize_text_field( $_POST['term'] );
155 $image_class = 'aux-img-dynamic-dropshadow';
156 $width = sanitize_text_field( $_POST['width'] );
157 $height = sanitize_text_field( $_POST['height'] );
158 $order = sanitize_text_field( $_POST['order'] );
159 $orderby = sanitize_text_field( $_POST['orderby'] );
160 $size = array( 'width' => $width, 'height' => $height );
161
162 /*
163 * The WordPress Query class.
164 *
165 * @link http://codex.wordpress.org/Function_Reference/WP_Query
166 */
167 $args = array(
168 // Type & Status Parameters
169 'post_type' => $post_type,
170 'post_status' => 'publish',
171 // Pagination Parameters
172 'posts_per_page' => $num,
173 'nopaging' => false,
174 'order' => $order,
175 'orderby' => $orderby,
176 );
177
178 if ( 'all' !== $term ) {
179 // Taxonomy Parameters
180 $args['tax_query'] = array(
181 array(
182 'taxonomy' => $tax,
183 'field' => 'slug',
184 'terms' => $term,
185 'include_children' => true,
186 'operator' => 'IN',
187 )
188 );
189 }
190
191 $posts = get_posts( $args );
192
193 foreach ( $posts as $post ) {
194
195 $image_id = get_post_thumbnail_id( $post );
196 $product = wc_get_product( $post->ID );
197
198 $post->thumb = auxin_get_the_responsive_attachment(
199 $image_id,
200 array(
201 'quality' => 100,
202 'upscale' => true,
203 'crop' => true,
204 'add_hw' => true, // whether add width and height attr or not
205 'attr' => array(
206 'class' => 'auxshp-product-image auxshp-attachment ' . $image_class,
207 'data-original-width' => $width,
208 'data-original-height' => $height,
209 'data-original-src' => wp_get_attachment_image_src( $image_id, 'full' )[0]
210 ),
211 'size' => $size,
212 'image_sizes' => 'auto',
213 'srcset_sizes' => 'auto',
214 'original_src' => true
215 )
216 );
217
218 $post->price = $product->get_price_html();
219 $post->meta = wc_get_product_category_list( $product->get_id(), ', ', '<em class="auxshp-meta-terms">', '</em>' );
220 $post->badge = $product->is_on_sale() ? true : false;
221
222 $isAjaxEnabled = class_exists( 'AUXSHP' ) ? auxin_is_true( auxin_get_option( 'product_index_ajax_add_to_cart', '1' ) ) : auxin_is_true( get_option( 'woocommerce_enable_ajax_add_to_cart' ) );
223 if( $isAjaxEnabled ) {
224 $class = 'button aux-ajax-add-to-cart add_to_cart_button';
225 }
226
227 $post->cart = apply_filters( 'woocommerce_loop_add_to_cart_link',
228 sprintf( '<a rel="nofollow" href="%s" data-quantity="1" data-product_id="%s" data-product_sku="%s" data-verify_nonce="%s" class="%s"><i class="aux-ico auxicon-handbag"></i><span>%s</span></a>',
229 esc_url( $product->add_to_cart_url() ),
230 esc_attr( $product->get_id() ),
231 esc_attr( $product->get_sku() ),
232 esc_attr( wp_create_nonce( 'aux_add_to_cart-' . $product->get_id() ) ),
233 esc_attr( isset( $class ) ? $class : 'button add_to_cart_button' ),
234 esc_html( $product->add_to_cart_text() )
235 ),
236 $product );
237 }
238
239 wp_send_json_success( $posts );
240
241 }
242
243 add_action( 'wp_ajax_filter_get_content', 'auxin_ajax_filter_get_content' );
244 add_action( 'wp_ajax_noprive_filter_get_content', 'auxin_ajax_filter_get_content' );
245
246 /**
247 * wordpress ajax for dismissed notice
248 *
249 * @return json
250 */
251 function auxin_dismissed_notice(){
252 // Store it in the options table
253 if ( ! isset( $_POST['id'] ) || ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( $_POST['nonce'], '_notice_nonce' ) ) {
254 wp_send_json_error( __( 'Token Error.', 'auxin-elements' ) );
255 } else {
256 auxin_set_transient( sanitize_text_field( 'auxin-notice-' . $_POST['id'] ), 1, sanitize_text_field( $_POST['expiration'] ) );
257 wp_send_json_success( __( 'It\'s OK.', 'auxin-elements' ) );
258 }
259 }
260 add_action( 'wp_ajax_auxin_dismissed_notice', 'auxin_dismissed_notice' );
261
262 /**
263 * WordPress ajax to display activation form
264 *
265 * @return html
266 */
267 function auxin_display_actvation_form(){
268 if ( ! isset( $_GET['nonce'] ) || ! wp_verify_nonce( $_GET['nonce'], 'aux-activation-form' ) ) {
269 // This nonce is not valid.
270 wp_die( esc_html__( 'Security Token Error!', 'auxin-elements' ) );
271 }
272 ob_start();
273 ?>
274 <div class="aux-license-popup">
275 <button class="featherlight-close-icon featherlight-close" aria-label="Close"></button>
276 <img class="aux-popup-image" src="<?php echo esc_url( AUXELS_ADMIN_URL . '/assets/images/welcome/activation.svg' ); ?>" />
277 <h2 class="aux-popup-title"><?php esc_html_e( 'License Activation', 'auxin-elements' ); ?></h2>
278 <p class="aux-popup-desc"><?php esc_html_e( 'Please activate your license to get automatic updates, premium support, and unlimited access to the template library and demo importer.', 'auxin-elements' ); printf('&nbsp;<a href="https://help.market.envato.com/hc/en-us/articles/202822600-Where-Is-My-Purchase-Code-" target="_blank">%s</a>', esc_html( 'how to find purchase code?', 'auxin-elements' ) ); ?></p>
279 <form class="auxin-form auxin-check-purchase" action="<?php echo esc_url( admin_url( 'admin-ajax.php' ) ); ?>" method="post">
280 <div class="form-group">
281 <label class="form-label" for="aux-usermail"><?php esc_html_e( 'E-mail address', 'auxin-elements' ); ?></label>
282 <input class="form-control" type="text" name="usermail" value="<?php echo esc_attr( get_option('admin_email') ); ?>" required>
283 </div>
284
285 <div class="form-group">
286 <label class="form-label" for="aux-purchase"><?php esc_html_e( 'Purchase code', 'auxin-elements' ); ?></label>
287 <input class="form-control" type="text" name="purchase" required>
288 </div>
289
290 <?php wp_nonce_field( 'auxin-purchase-activation', 'security' ); ?>
291 <input type="hidden" name="action" value="auxin_purchase_activation">
292 <div class="button-group">
293 <button type="submit" class="aux-button aux-primary aux-medium aux-activate-license" value="submit">
294 <span><?php esc_html_e( 'Activate', 'auxin-elements' ); ?></span>
295 </button>
296 </div>
297 </form>
298 </div>
299 <?php
300 wp_die( ob_get_clean() );
301 }
302 add_action( 'wp_ajax_auxin_display_actvation_form', 'auxin_display_actvation_form' );
303
304 /**
305 * wordpress ajax for auxin purchase activation
306 *
307 * @return json
308 */
309 function auxin_purchase_activation(){
310
311 if ( ! isset( $_POST['usermail'] ) || ! isset( $_POST['purchase'] ) || ! isset( $_POST['security'] ) || ! wp_verify_nonce( $_POST['security'], 'auxin-purchase-activation' ) ) {
312 wp_send_json_error( array(
313 'message' => __( 'Token Error.', 'auxin-elements' ),
314 'buttonText' => __( 'Retry', 'auxin-elements' ),
315 ) );
316 }
317
318 $usermail = sanitize_email( $_POST['usermail'] );
319 $purchase_code = auxin_sanitize_input( $_POST['purchase'] );
320 $action = 'activate';
321
322 $result = Auxin_License_Activation::get_instance()->license_action( $usermail, $purchase_code, $action );
323
324 if( isset( $result['success'] ) && $result['success'] ){
325 $result['buttonText'] = __( 'Close', 'auxin-elements' );
326 wp_send_json_success( $result );
327 }
328
329 $result['buttonText'] = __( 'Retry', 'auxin-elements' );
330 wp_send_json_error( $result );
331
332 }
333 add_action( 'wp_ajax_auxin_purchase_activation', 'auxin_purchase_activation' );
334
335 /**
336 * wordpress ajax for auxin upgrader
337 *
338 * @return json
339 */
340 function auxin_ajax_upgrader(){
341 // Check ajax nonce field
342 check_ajax_referer( 'auxin-start-upgrading', 'nonce' );
343
344 if ( ! isset( $_POST['key'] ) || ! isset( $_POST['type'] ) ) {
345 wp_send_json_error( array(
346 'slug' => '',
347 'errorCode' => 'no_token_specified',
348 'errorMessage' => __( 'Token Error.', 'auxin-elements' )
349 ) );
350 }
351
352 $handler = new Auxin_Upgrader_Ajax_Handlers;
353 $handler->run( sanitize_text_field( $_POST['key'] ), sanitize_text_field( $_POST['type'] ) );
354 }
355 add_action( 'wp_ajax_auxin_start_upgrading', 'auxin_ajax_upgrader' );
356
357
358 /**
359 * wordpress ajax for auxin customizer export
360 *
361 * @return json
362 */
363 function auxin_customizer_export(){
364
365 if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( $_POST['nonce'], 'auxin-export-control' ) ) {
366 wp_send_json_error( __( 'Token Error.', 'auxin-elements' ) );
367 }
368
369 // Get theme options
370 $theme_options = auxin_options();
371
372 // Get theme mods
373 $theme_mods = get_theme_mods();
374 $filters = array( 0, 'nav_menu_locations', 'custom_css_post_id', 'last_checked_version' );
375 foreach ( $filters as $filter ) {
376 if ( isset( $theme_mods[ $filter ] ) ) {
377 unset( $theme_mods[ $filter ] );
378 }
379 }
380
381 if( empty( $theme_options ) && empty( $theme_mods ) ){
382 wp_send_json_error( __( 'No data found!', 'auxin-elements' ) );
383 }
384
385 $b64_content = base64_encode( wp_json_encode( array(
386 'theme_options' => $theme_options,
387 'theme_mods' => $theme_mods
388 ) ) );
389
390 wp_send_json_success( array(
391 'content' => $b64_content,
392 'fileName' => THEME_ID . '_export_' . current_time('timestamp') . '.txt'
393 ) );
394
395 }
396 add_action( 'wp_ajax_auxin_customizer_export', 'auxin_customizer_export' );
397
398
399 /**
400 * wordpress ajax for auxin customizer import
401 *
402 * @return json
403 */
404 function auxin_customizer_import(){
405 // Check security
406 if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( $_POST['nonce'], 'auxin-import-control' ) ) {
407 wp_send_json_error( __( 'Token Error.', 'auxin-elements' ) );
408 }
409
410 if ( ! current_user_can('manage_options') ) {
411 wp_send_json_error( __( "Access Denied: You don't have the required permissions!", 'auxin-elements' ) );
412 }
413
414 // Check input file
415 if ( ! isset( $_FILES['file'] ) || 0 < $_FILES['file']['error'] ) {
416 wp_send_json_error( __( 'Please upload a valid file.', 'auxin-elements' ) );
417 }
418
419 // Get and decode file content
420 global $wp_filesystem;
421 if ( empty($wp_filesystem) ) {
422 require_once( ABSPATH . '/wp-admin/includes/file.php' );
423 WP_Filesystem();
424 }
425 $json_content = $wp_filesystem->get_contents( $_FILES['file']['tmp_name'] );
426 $array_content = json_decode( base64_decode( $json_content ), true );
427 $array_content = auxin_sanitize_input( $array_content );
428
429 // Check array empty
430 if ( empty( $array_content ) || ! is_array( $array_content ) ) {
431 wp_send_json_error( __( 'Invalid or Empty Data.', 'auxin-elements' ) );
432 }
433
434 if( isset( $array_content['theme_options'] ) ){
435 // Get image options names
436 $get_options = auxin_get_defined_options();
437 $custom_images = array();
438 foreach ( $get_options['fields'] as $key => $value ) {
439 if ( ! array_search( 'image', $value ) ) {
440 continue;
441 }
442 $custom_images[] = $value['id'];
443 }
444 // Update options
445 foreach ( $array_content['theme_options'] as $auxin_key => $auxin_value ) {
446 if ( in_array( $auxin_key, $custom_images ) && ! empty( $auxin_value ) ) {
447 continue;
448 }
449 // Update exclusive auxin options
450 auxin_update_option( $auxin_key , $auxin_value );
451 }
452 }
453
454 if( isset( $array_content['theme_mods'] ) ){
455 foreach ( $array_content['theme_mods'] as $theme_mods_key => $theme_mods_value ) {
456 // Start theme mods loop:
457 if( $theme_mods_key === 'custom_logo' ) {
458 continue;
459 }
460 // Update theme mods
461 set_theme_mod( $theme_mods_key , $theme_mods_value );
462 }
463 }
464
465 // force to flush dynamic asset files
466 delete_transient( 'auxin_' . AUXELS_SLUG . '_version' );
467
468 wp_send_json_success( __( 'Successfully Imported.', 'auxin-elements' ) );
469
470 }
471 add_action( 'wp_ajax_auxin_customizer_import', 'auxin_customizer_import' );
472
473
474 /**
475 * Ajax handler for auxin_template_library control to import template
476 *
477 * @return json
478 */
479 function auxin_template_control_importer() {
480 $template_type = sanitize_text_field( $_POST['template_type'] );
481 if ( empty( $_POST['nonce'] ) || ! wp_verify_nonce( $_POST['nonce'], 'customizer-template-library-' . $template_type ) ) {
482 wp_send_json_error([
483 'message' => __( 'Authorization failed!', 'auxin-elements')
484 ]);
485 }
486
487 if ( ! current_user_can('manage_options') ) {
488 wp_send_json_error( [
489 'message' => __( "Access Denied: You don't have the required permissions!", 'auxin-elements' )
490 ]);
491 }
492
493 // Strict validation for ID
494 if ( ! isset( $_POST['id'] ) || ! ctype_digit( $_POST['id'] ) ) {
495 wp_send_json_error([
496 'message' => __('Invalid template ID.', 'auxin-elements')
497 ]);
498 }
499
500 $template_id = absint($_POST['id']);
501
502 wp_send_json( auxin_template_importer( $template_id, $template_type, 'update_menu' ) );
503 }
504 add_action( 'wp_ajax_auxin_template_control_importer', 'auxin_template_control_importer' );
505