PluginProbe ʕ •ᴥ•ʔ
Shortcodes and extra features for Phlox theme / 2.7.9
Shortcodes and extra features for Phlox theme v2.7.9
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 5 years ago compatibility 5 years ago metaboxes 5 years ago modules 9 years ago admin-ajax.php 5 years ago admin-hooks.php 5 years ago admin-the-functions.php 6 years ago index.php 5 years ago
admin-ajax.php
470 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 $form_data = $_POST['form'];
11
12 // extract the form data
13 $rate = ( ! empty( $form_data['theme_rate'] ) || $form_data['theme_rate'] === '0' ) ? $form_data['theme_rate'] : '';
14 $feedback = ! empty( $form_data['feedback'] ) ? $form_data['feedback'] : '';
15 $email = ! empty( $form_data['email'] ) ? $form_data['email'] : '';
16 $nonce = ! empty( $form_data['_wpnonce'] ) ? $form_data['_wpnonce'] : '';
17
18 if( ! wp_verify_nonce( $nonce, 'phlox_feedback' ) ){
19 wp_send_json_error( __( 'Authorization failed!', 'auxin-elements' ) );
20 }
21
22 if( $rate || $rate === '0' ){
23
24 global $wp_version;
25
26 $passed_diff_time = auxin_get_passed_installed_time();
27 $installed_days = isset( $passed_diff_time->days ) ? $passed_diff_time->days : 1;
28
29 $args = array(
30 'user-agent' => 'WordPress/'.$wp_version.'; '. get_home_url(),
31 'timeout' => ( ( defined('DOING_CRON') && DOING_CRON ) ? 30 : 5),
32 'body' => array(
33 'cat' => 'rating',
34 'action' => 'submit',
35 'item-slug' => 'phlox',
36 'rate' => $rate,
37 'client_key' => get_theme_mod( 'client_key', ''),
38 'item_version'=> THEME_VERSION,
39 'theme_slug' => THEME_ID,
40 'feedback' => $feedback,
41 'is_active' => function_exists('auxin_is_activated') && auxin_is_activated(),
42 'installed_days' => $installed_days
43 )
44 );
45 // send the rating through the api
46 $request = wp_remote_post( 'http://api.averta.net/envato/items/', $args );
47 update_option( 'auxin_show_rate_scale_notice', 0 );
48 set_theme_mod( 'rate_scale_notice_remind_later_date', 0 );
49 // if ( ! is_wp_error( $request ) || wp_remote_retrieve_response_code( $request ) === 200 ) {}
50
51 // store the user rating on the website
52 auxin_update_option( 'user_rating', $rate );
53
54 // send the feedback via email
55 $message = 'Rate: '. $rate . "\r\n" . 'Email: <' . $email . ">\r\n\r\n" . $feedback;
56 wp_mail( 'feedbacks'.'@'.'averta.net', 'Feedback from phlox dashboard:', $message );
57
58 wp_send_json_success( __( 'Sent Successfully. Thanks for your feedback!', 'auxin-elements' ) );
59
60 } else{
61 wp_send_json_error( __( 'An error occurred. Feedback could not be delivered, please try again.', 'auxin-elements' ) );
62 }
63
64 }
65
66 add_action( 'wp_ajax_send_feedback', 'auxin_ajax_send_feedback' );
67
68 /**
69 * Hide Feedback notice
70 */
71 function auxin_remove_feedback_notice() {
72 // skip if the form data is not receiced
73 if( empty( $_POST['form'] ) ){
74 wp_send_json_error( __( 'Data cannot be delivered, please try again.', 'auxin-elements' ) );
75 }
76
77 $form_data = $_POST['form'];
78
79 $nonce = ! empty( $form_data['_wpnonce'] ) ? $form_data['_wpnonce'] : '';
80
81 if( ! wp_verify_nonce( $nonce, 'phlox_feedback' ) ){
82 wp_send_json_error( __( 'Authorization failed!', 'auxin-elements' ) );
83 }
84
85 update_option( 'auxin_show_rate_scale_notice', 0 );
86 set_theme_mod( 'rate_scale_notice_remind_later_date', 0 );
87
88 wp_send_json_success();
89 }
90
91 add_action( 'wp_ajax_aux-remove-feedback-notice', 'auxin_remove_feedback_notice' );
92
93
94 /**
95 * Remind feedback
96 */
97 function auxin_ajax_remind_feedback() {
98 // skip if the form data is not receiced
99 if( empty( $_POST['form'] ) ){
100 wp_send_json_error( __( 'Data cannot be delivered, please try again.', 'auxin-elements' ) );
101 }
102
103 $form_data = $_POST['form'];
104
105 $nonce = ! empty( $form_data['_wpnonce'] ) ? $form_data['_wpnonce'] : '';
106
107 if( ! wp_verify_nonce( $nonce, 'phlox_feedback' ) ){
108 wp_send_json_error( __( 'Authorization failed!', 'auxin-elements' ) );
109 }
110
111 // reset feedback notice viewer
112 update_option( 'auxin_show_rate_scale_notice', 0 );
113 set_theme_mod( 'rate_scale_notice_remind_later_date', time() + DAY_IN_SECONDS * 3 );
114
115 wp_send_json_success();
116 }
117
118 add_action( 'wp_ajax_remind_feedback', 'auxin_ajax_remind_feedback' );
119
120
121
122 function auxin_ajax_isotope_filter_group(){
123 // Check nonce
124 if ( ! isset( $_POST['group'] ) ||! isset( $_POST['key'] ) || ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( $_POST['nonce'], 'aux-iso-group' ) ) {
125 wp_send_json_error( __( 'Token Error.', 'auxin-elements' ) );
126 }
127
128 if( false !== update_option( 'aux_isotope_group_' . $_POST['key'] , $_POST['group'] ) ) {
129 wp_send_json_success( __( 'It\'s Done.', 'auxin-elements' ) );
130 }
131
132 wp_send_json_error( __( 'An error occurred.', 'auxin-elements' ) );
133 }
134 add_action( 'wp_ajax_aux_isotope_group', 'auxin_ajax_isotope_filter_group' );
135
136
137 function auxin_ajax_filter_get_content() {
138
139 // Check nonce
140 if ( ! isset( $_POST['n'] ) || ! wp_verify_nonce( $_POST['n'], 'aux_ajax_filter_request' ) ) {
141 wp_send_json_error( 'Nonce check failed!', 403 );
142 }
143
144 $num = $_POST['num'];
145 $post_type = 'product';
146 $tax = $_POST['taxonomy'];
147 $term = $_POST['term'];
148 $image_class = 'aux-img-dynamic-dropshadow';
149 $width = $_POST['width'];
150 $height = $_POST['height'];
151 $order = $_POST['order'];
152 $orderby = $_POST['orderby'];
153 $size = array( 'width' => $width, 'height' => $height );
154
155 /*
156 * The WordPress Query class.
157 *
158 * @link http://codex.wordpress.org/Function_Reference/WP_Query
159 */
160 $args = array(
161 // Type & Status Parameters
162 'post_type' => $post_type,
163 'post_status' => 'publish',
164 // Pagination Parameters
165 'posts_per_page' => $num,
166 'nopaging' => false,
167 'order' => $order,
168 'orderby' => $orderby,
169 );
170
171 if ( 'all' !== $term ) {
172 // Taxonomy Parameters
173 $args['tax_query'] = array(
174 array(
175 'taxonomy' => $tax,
176 'field' => 'slug',
177 'terms' => $term,
178 'include_children' => true,
179 'operator' => 'IN',
180 )
181 );
182 }
183
184 $posts = get_posts( $args );
185
186 foreach ( $posts as $post ) {
187
188 $image_id = get_post_thumbnail_id( $post );
189 $product = wc_get_product( $post->ID );
190
191 $post->thumb = auxin_get_the_responsive_attachment(
192 $image_id,
193 array(
194 'quality' => 100,
195 'upscale' => true,
196 'crop' => true,
197 'add_hw' => true, // whether add width and height attr or not
198 'attr' => array(
199 'class' => 'auxshp-product-image auxshp-attachment ' . $image_class,
200 'data-original-width' => $width,
201 'data-original-height' => $height,
202 'data-original-src' => wp_get_attachment_image_src( $image_id, 'full' )[0]
203 ),
204 'size' => $size,
205 'image_sizes' => 'auto',
206 'srcset_sizes' => 'auto',
207 'original_src' => true
208 )
209 );
210
211 $post->price = $product->get_price_html();
212 $post->meta = wc_get_product_category_list( $product->get_id(), ', ', '<em class="auxshp-meta-terms">', '</em>' );
213 $post->badge = $product->is_on_sale() ? true : false;
214
215 if( auxin_get_option( 'product_index_ajax_add_to_cart', '0' ) ) {
216 $class = 'button aux-ajax-add-to-cart add_to_cart_button';
217 }
218
219 $post->cart = apply_filters( 'woocommerce_loop_add_to_cart_link',
220 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>',
221 esc_url( $product->add_to_cart_url() ),
222 esc_attr( $product->get_id() ),
223 esc_attr( $product->get_sku() ),
224 esc_attr( wp_create_nonce( 'aux_add_to_cart-' . $product->get_id() ) ),
225 esc_attr( isset( $class ) ? $class : 'button add_to_cart_button' ),
226 esc_html( $product->add_to_cart_text() )
227 ),
228 $product );
229 }
230
231 wp_send_json_success( $posts );
232
233 }
234
235 add_action( 'wp_ajax_filter_get_content', 'auxin_ajax_filter_get_content' );
236 add_action( 'wp_ajax_noprive_filter_get_content', 'auxin_ajax_filter_get_content' );
237
238 /**
239 * wordpress ajax for dismissed notice
240 *
241 * @return json
242 */
243 function auxin_dismissed_notice(){
244 // Store it in the options table
245 if ( ! isset( $_POST['id'] ) || ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( $_POST['nonce'], '_notice_nonce' ) ) {
246 wp_send_json_error( __( 'Token Error.', 'auxin-elements' ) );
247 } else {
248 auxin_set_transient( 'auxin-notice-' . $_POST['id'], 1, $_POST['expiration'] );
249 wp_send_json_success( __( 'It\'s OK.', 'auxin-elements' ) );
250 }
251 }
252 add_action( 'wp_ajax_auxin_dismissed_notice', 'auxin_dismissed_notice' );
253
254 /**
255 * WordPress ajax to display activation form
256 *
257 * @return html
258 */
259 function auxin_display_actvation_form(){
260 if ( ! isset( $_GET['nonce'] ) || ! wp_verify_nonce( $_GET['nonce'], 'aux-activation-form' ) ) {
261 // This nonce is not valid.
262 wp_die( esc_html__( 'Security Token Error!', 'auxin-elements' ) );
263 }
264 ob_start();
265 ?>
266 <div class="aux-license-popup">
267 <button class="featherlight-close-icon featherlight-close" aria-label="Close"></button>
268 <img class="aux-popup-image" src="<?php echo esc_url( AUXELS_ADMIN_URL . '/assets/images/welcome/activation.svg' ); ?>" />
269 <h2 class="aux-popup-title"><?php esc_html_e( 'License Activation', 'auxin-elements' ); ?></h2>
270 <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>
271 <form class="auxin-form auxin-check-purchase" action="<?php echo esc_url( admin_url( 'admin-ajax.php' ) ); ?>" method="post">
272 <div class="form-group">
273 <label class="form-label" for="aux-usermail"><?php esc_html_e( 'E-mail address', 'auxin-elements' ); ?></label>
274 <input class="form-control" type="text" name="usermail" value="<?php echo esc_attr( get_option('admin_email') ); ?>" required>
275 </div>
276
277 <div class="form-group">
278 <label class="form-label" for="aux-purchase"><?php esc_html_e( 'Purchase code', 'auxin-elements' ); ?></label>
279 <input class="form-control" type="text" name="purchase" required>
280 </div>
281
282 <?php wp_nonce_field( 'auxin-purchase-activation', 'security' ); ?>
283 <input type="hidden" name="action" value="auxin_purchase_activation">
284 <div class="button-group">
285 <button type="submit" class="aux-button aux-primary aux-medium aux-activate-license" value="submit">
286 <span><?php esc_html_e( 'Activate', 'auxin-elements' ); ?></span>
287 </button>
288 </div>
289 </form>
290 </div>
291 <?php
292 wp_die( ob_get_clean() );
293 }
294 add_action( 'wp_ajax_auxin_display_actvation_form', 'auxin_display_actvation_form' );
295
296 /**
297 * wordpress ajax for auxin purchase activation
298 *
299 * @return json
300 */
301 function auxin_purchase_activation(){
302
303 if ( ! isset( $_POST['usermail'] ) || ! isset( $_POST['purchase'] ) || ! isset( $_POST['security'] ) || ! wp_verify_nonce( $_POST['security'], 'auxin-purchase-activation' ) ) {
304 wp_send_json_error( array(
305 'message' => __( 'Token Error.', 'auxin-elements' ),
306 'buttonText' => __( 'Retry', 'auxin-elements' ),
307 ) );
308 }
309
310 $usermail = $_POST['usermail'];
311 $purchase_code = $_POST['purchase'];
312 $action = 'activate';
313
314 $result = Auxin_License_Activation::get_instance()->license_action( $usermail, $purchase_code, $action );
315
316 if( isset( $result['success'] ) && $result['success'] ){
317 $result['buttonText'] = __( 'Close', 'auxin-elements' );
318 wp_send_json_success( $result );
319 }
320
321 $result['buttonText'] = __( 'Retry', 'auxin-elements' );
322 wp_send_json_error( $result );
323
324 }
325 add_action( 'wp_ajax_auxin_purchase_activation', 'auxin_purchase_activation' );
326
327 /**
328 * wordpress ajax for auxin upgrader
329 *
330 * @return json
331 */
332 function auxin_ajax_upgrader(){
333 // Check ajax nonce field
334 check_ajax_referer( 'auxin-start-upgrading', 'nonce' );
335
336 if ( ! isset( $_POST['key'] ) || ! isset( $_POST['type'] ) ) {
337 wp_send_json_error( array(
338 'slug' => '',
339 'errorCode' => 'no_token_specified',
340 'errorMessage' => __( 'Token Error.', 'auxin-elements' )
341 ) );
342 }
343
344 $handler = new Auxin_Upgrader_Ajax_Handlers;
345 $handler->run( $_POST['key'], $_POST['type'] );
346 }
347 add_action( 'wp_ajax_auxin_start_upgrading', 'auxin_ajax_upgrader' );
348
349
350 /**
351 * wordpress ajax for auxin customizer export
352 *
353 * @return json
354 */
355 function auxin_customizer_export(){
356
357 if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( $_POST['nonce'], 'auxin-export-control' ) ) {
358 wp_send_json_error( __( 'Token Error.', 'auxin-elements' ) );
359 }
360
361 // Get theme options
362 $theme_options = auxin_options();
363
364 // Get theme mods
365 $theme_mods = get_theme_mods();
366 $filters = array( 0, 'nav_menu_locations', 'custom_css_post_id', 'last_checked_version' );
367 foreach ( $filters as $filter ) {
368 if ( isset( $theme_mods[ $filter ] ) ) {
369 unset( $theme_mods[ $filter ] );
370 }
371 }
372
373 if( empty( $theme_options ) && empty( $theme_mods ) ){
374 wp_send_json_error( __( 'No data found!', 'auxin-elements' ) );
375 }
376
377 $b64_content = base64_encode( maybe_serialize( array(
378 'theme_options' => $theme_options,
379 'theme_mods' => $theme_mods
380 ) ) );
381
382 wp_send_json_success( array(
383 'content' => $b64_content,
384 'fileName' => THEME_ID . '_export_' . current_time('timestamp') . '.txt'
385 ) );
386
387 }
388 add_action( 'wp_ajax_auxin_customizer_export', 'auxin_customizer_export' );
389
390
391 /**
392 * wordpress ajax for auxin customizer import
393 *
394 * @return json
395 */
396 function auxin_customizer_import(){
397 // Check security
398 if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( $_POST['nonce'], 'auxin-import-control' ) ) {
399 wp_send_json_error( __( 'Token Error.', 'auxin-elements' ) );
400 }
401
402 // Check input file
403 if ( ! isset( $_FILES['file'] ) || 0 < $_FILES['file']['error'] ) {
404 wp_send_json_error( __( 'Please upload a valid file.', 'auxin-elements' ) );
405 }
406
407 // Get and decode file content
408 global $wp_filesystem;
409 if ( empty($wp_filesystem) ) {
410 require_once( ABSPATH . '/wp-admin/includes/file.php' );
411 WP_Filesystem();
412 }
413 $json_content = $wp_filesystem->get_contents( $_FILES['file']['tmp_name'] );
414 $array_content = maybe_unserialize( base64_decode( $json_content ) );
415
416 // Check array empty
417 if ( empty( $array_content ) || ! is_array( $array_content ) ) {
418 wp_send_json_error( __( 'Invalid or Empty Data.', 'auxin-elements' ) );
419 }
420
421 if( isset( $array_content['theme_options'] ) ){
422 // Get image options names
423 $get_options = auxin_get_defined_options();
424 $custom_images = array();
425 foreach ( $get_options['fields'] as $key => $value ) {
426 if ( ! array_search( 'image', $value ) ) {
427 continue;
428 }
429 $custom_images[] = $value['id'];
430 }
431 // Update options
432 foreach ( $array_content['theme_options'] as $auxin_key => $auxin_value ) {
433 if ( in_array( $auxin_key, $custom_images ) && ! empty( $auxin_value ) ) {
434 continue;
435 }
436 // Update exclusive auxin options
437 auxin_update_option( $auxin_key , $auxin_value );
438 }
439 }
440
441 if( isset( $array_content['theme_mods'] ) ){
442 foreach ( $array_content['theme_mods'] as $theme_mods_key => $theme_mods_value ) {
443 // Start theme mods loop:
444 if( $theme_mods_key === 'custom_logo' ) {
445 continue;
446 }
447 // Update theme mods
448 set_theme_mod( $theme_mods_key , $theme_mods_value );
449 }
450 }
451
452 // force to flush dynamic asset files
453 delete_transient( 'auxin_' . AUXELS_SLUG . '_version' );
454
455 wp_send_json_success( __( 'Successfully Imported.', 'auxin-elements' ) );
456
457 }
458 add_action( 'wp_ajax_auxin_customizer_import', 'auxin_customizer_import' );
459
460
461 /**
462 * Ajax handler for auxin_template_library control to import template
463 *
464 * @return json
465 */
466 function auxin_template_control_importer() {
467 wp_send_json( auxin_template_importer( $_POST['id'], $_POST['template_type'], 'update_menu' ) );
468 }
469 add_action( 'wp_ajax_auxin_template_control_importer', 'auxin_template_control_importer' );
470