PluginProbe
Woody Code Snippets – Insert PHP, CSS, JS, and Header/Footer Scripts / 2.7.9
Woody Code Snippets – Insert PHP, CSS, JS, and Header/Footer Scripts v2.7.9
2.7.9 2.7.8 2.7.7 2.7.6 2.7.5 2.7.4 trunk 1.3 2.0.4 2.0.6 2.1.91 2.2.4 2.2.7 2.2.9 2.3.1 2.3.10 2.4.10 2.4.2 2.4.4 2.4.5 2.4.6 2.4.7 2.4.8 2.4.9 2.6.0 All 30 releases
← All changes | vendor/codeinwp/themeisle-sdk/src/Modules/Licenser.php +97 -7 2.6.0 → 2.7.9 View file →
@@ -379,9 +379,9 @@
379 379
380 380 $status = $this->get_license_status( true );
381 381 $no_activations_string = apply_filters( $this->product->get_key() . '_lc_no_activations_string', Loader::$labels['licenser']['no_activations'] );
382 382 $no_valid_string = apply_filters( $this->product->get_key() . '_lc_no_valid_string', sprintf( Loader::$labels['licenser']['inactive'], '%s', '<a href="%s" target="_blank">', '</a>', '<a href="%s">', '</a>' ) );
383 - $expired_license_string = apply_filters( $this->product->get_key() . '_lc_expired_string', sprintf( Loader::$labels['licenser']['expired'], '%s', '<a href="%s" target="_blank">', '</a>' ) );
383 + $expired_license_string = apply_filters( $this->product->get_key() . '_lc_expired_heading_string', Loader::$labels['licenser']['expired'] );
384 384 // No activations left for this license.
385 385 if ( 'valid' != $status && $this->check_activation() ) {
386 386 ?>
387 387 <div class="error">
@@ -402,14 +402,74 @@
402 402 }
403 403
404 404 // Invalid license key.
405 405 if ( 'active_expired' === $status ) {
406 + // Check if the notice was dismissed.
407 + $dismiss_option_key = $this->product->get_key() . '_expired_notice_dismissed';
408 + if ( get_option( $dismiss_option_key, false ) ) {
409 + return false;
410 + }
411 +
412 + $license_data = get_option( $this->product->get_key() . '_license_data', '' );
413 + $expiration_date = '';
414 + if ( is_object( $license_data ) && isset( $license_data->expires ) ) {
415 + $timestamp = strtotime( (string) $license_data->expires );
416 + if ( false !== $timestamp ) {
417 + $expiration_date = gmdate( 'F j, Y', $timestamp );
418 + }
419 + }
420 +
421 + $discount_config = apply_filters( $this->product->get_key() . '_lc_renew_discount', false );
422 +
423 + if ( is_array( $discount_config ) && isset( $discount_config['url'] ) && isset( $discount_config['renew_button'] ) ) {
424 + $renew_url = $discount_config['url'];
425 + $renew_button = $discount_config['renew_button'];
426 + } else {
427 + $renew_url = apply_filters( $this->product->get_key() . '_lc_renew_url', $this->renew_url() );
428 + $renew_button = apply_filters( $this->product->get_key() . '_lc_renew_button_string', Loader::$labels['licenser']['renew_license'] );
429 + }
430 +
431 + $learn_more_url = apply_filters( $this->product->get_key() . '_lc_learn_more_url', $this->get_api_url() );
432 + $learn_more_button = apply_filters( $this->product->get_key() . '_lc_learn_more_button_string', Loader::$labels['licenser']['learn_more'] );
433 + $notice_message = apply_filters( $this->product->get_key() . '_lc_expired_notice_message', Loader::$labels['licenser']['expired_notice'] );
434 +
435 + $expired_date_string = apply_filters( $this->product->get_key() . '_lc_expired_date_string', sprintf( Loader::$labels['licenser']['expired_date'], esc_html( $expiration_date ) ) );
436 + $heading = apply_filters( $this->product->get_key() . '_lc_expired_heading_string', sprintf( Loader::$labels['licenser']['expired'], $this->product->get_name() ) );
437 + $notice_id = $this->product->get_key() . '_expired_notice';
406 438 ?>
407 - <div class="error">
408 - <p>
409 - <strong><?php echo sprintf( wp_kses_data( $expired_license_string ), esc_attr( $this->product->get_name() . ' ' . $this->product->get_type() ), esc_url( $this->get_api_url() . '?license=' . $this->license_key ) ); ?> </strong>
439 + <div class="notice notice-warning notice-alt is-dismissible themeisle-sdk-license-notice" id="<?php echo esc_attr( $notice_id ); ?>" data-notice-id="<?php echo esc_attr( $notice_id ); ?>" style="position: relative; border-left: 4px solid #d63638; padding: 12px; background-color: #fff;">
440 + <p style="margin: 0.5em 0; font-size: 13px;">
441 + <strong><?php echo wp_kses_post( $heading ); ?></strong>
442 + · <?php echo esc_html( $expired_date_string ); ?>
410 443 </p>
444 + <p style="margin: 0.5em 0 1em 0; font-size: 13px;">
445 + <?php echo esc_html( $notice_message ); ?>
446 + </p>
447 + <p style="margin: 0.5em 0;">
448 + <a href="<?php echo esc_url( $renew_url ); ?>" class="button button-primary" target="_blank" rel="noopener noreferrer">
449 + <?php echo esc_html( $renew_button ); ?>
450 + </a>
451 + <a href="<?php echo esc_url( $learn_more_url ); ?>" class="button" target="_blank" rel="noopener noreferrer" style="border: none; background-color: transparent;">
452 + <?php echo esc_html( $learn_more_button ); ?>
453 + </a>
454 + </p>
411 455 </div>
456 + <script type="text/javascript">
457 + jQuery(document).ready(function($) {
458 + $('#<?php echo esc_js( $notice_id ); ?>').on('click', '.notice-dismiss', function(e) {
459 + const noticeId = '<?php echo esc_js( $notice_id ); ?>';
460 + $.ajax({
461 + url: ajaxurl,
462 + type: 'POST',
463 + data: {
464 + action: 'themeisle_sdk_dismiss_license_notice',
465 + notice_id: noticeId,
466 + nonce: '<?php echo esc_js( wp_create_nonce( 'themeisle_sdk_dismiss_license_notice' ) ); ?>'
467 + }
468 + });
469 + });
470 + });
471 + </script>
412 472 <?php
413 473
414 474 return false;
415 475 }
@@ -843,17 +903,21 @@
843 903 $this->do_check = true;
844 904
845 905 return $_transient_data;
846 906 }
907 + $this->product->setup_from_fileheaders();
847 908 $api_response = $this->api_request();
848 909 if ( false !== $api_response && is_object( $api_response ) && isset( $api_response->new_version ) ) {
910 + $plugin = $this->product->get_slug() . '/' . $this->product->get_file();
849 911 if ( ! isset( $api_response->plugin ) ) {
850 - $api_response->plugin = $this->product->get_slug() . '/' . $this->product->get_file();
912 + $api_response->plugin = $plugin;
851 913 }
852 914 if ( version_compare( $this->product->get_version(), $api_response->new_version, '<' ) ) {
853 - $_transient_data->response[ $this->product->get_slug() . '/' . $this->product->get_file() ] = $api_response;
915 + $_transient_data->response[ $plugin ] = $api_response;
916 + unset( $_transient_data->no_update[ $plugin ] );
854 917 } else {
855 - $_transient_data->no_update[ $this->product->get_slug() . '/' . $this->product->get_file() ] = $api_response;
918 + $_transient_data->no_update[ $plugin ] = $api_response;
919 + unset( $_transient_data->response[ $plugin ] );
856 920 }
857 921 }
858 922
859 923 return $_transient_data;
@@ -1044,8 +1108,34 @@
1044 1108 add_action( 'admin_init', array( $this, 'process_license' ) );
1045 1109 add_action( 'admin_init', array( $this, 'product_valid' ), 99999999 );
1046 1110 add_action( 'admin_notices', array( $this, 'show_notice' ) );
1047 1111 add_filter( $this->product->get_key() . '_license_status', array( $this, 'get_license_status' ) );
1112 + add_action( 'wp_ajax_themeisle_sdk_dismiss_license_notice', array( $this, 'dismiss_license_notice' ) );
1113 + }
1114 +
1115 + /**
1116 + * Handle AJAX request to dismiss the license notice.
1117 + */
1118 + public function dismiss_license_notice() {
1119 + if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( sanitize_text_field( $_POST['nonce'] ), 'themeisle_sdk_dismiss_license_notice' ) ) {
1120 + wp_send_json_error( 'Invalid nonce' );
1121 + }
1122 +
1123 + if ( ! current_user_can( 'manage_options' ) ) {
1124 + wp_send_json_error( 'Insufficient permissions' );
1125 + }
1126 +
1127 + $notice_id = isset( $_POST['notice_id'] ) ? sanitize_text_field( $_POST['notice_id'] ) : '';
1128 +
1129 + if ( empty( $notice_id ) ) {
1130 + wp_send_json_error( 'Missing notice ID' );
1131 + }
1132 +
1133 + // Save the dismissal option.
1134 + $dismiss_option_key = $notice_id . '_dismissed';
1135 + update_option( $dismiss_option_key, true );
1136 +
1137 + wp_send_json_success();
1048 1138 }
1049 1139
1050 1140 /**
1051 1141 * Check license on filesystem.