Skip to content

Commit

Permalink
fix #1470
Browse files Browse the repository at this point in the history
  • Loading branch information
inc2734 committed Feb 17, 2025
1 parent 745d533 commit f00752e
Show file tree
Hide file tree
Showing 3 changed files with 214 additions and 124 deletions.
114 changes: 89 additions & 25 deletions Framework/Controller/Manager.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
* @package snow-monkey
* @author inc2734
* @license GPL-2.0+
* @version 28.0.0
* @version 28.0.4
*/

namespace Framework\Controller;
Expand Down Expand Up @@ -124,8 +124,36 @@ public function _init() {
self::MENU_SLUG,
self::SETTINGS_NAME,
function ( $option ) {
$current_license_key = static::get_option( 'license-key' );
$posted_license_key = isset( $option['license-key'] ) ? $option['license-key'] : false;
$posted_license_key = trim( $posted_license_key );
$option['license-key'] = static::SAVED_VALUE === $posted_license_key
? $current_license_key
: $posted_license_key;

$current_xserver_register_key = static::get_option( 'xserver-register-key' );
$posted_xserver_register_key = isset( $option['xserver-register-key'] ) ? $option['xserver-register-key'] : false;
$posted_xserver_register_key = trim( $posted_xserver_register_key );
$option['xserver-register-key'] = static::SAVED_VALUE === $posted_xserver_register_key
? $current_xserver_register_key
: $posted_xserver_register_key;

$status = 'false';
if ( $option['license-key'] ) {
$status = static::get_license_status( $option['license-key'] );
} elseif ( $option['xserver-register-key'] ) {
$status = static::get_xserver_register_status( $option['xserver-register-key'] );
}

// If server error, Do nothing.
if ( ! in_array( $status, array( 'true', 'false' ), true ) ) {
return get_option( self::SETTINGS_NAME );
}

delete_transient( 'snow-monkey-remote-pattern-categories' );
delete_transient( 'snow-monkey-remote-patterns' );
delete_transient( 'snow-monkey-remote-patterns' ); // Backward compatibility.
delete_transient( 'snow-monkey-premium-remote-patterns' );
delete_transient( 'snow-monkey-free-remote-patterns' );
delete_transient( 'snow-monkey-remote-styles' );

if ( isset( $option['clear-remote-patterns-cache'] ) && '1' === $option['clear-remote-patterns-cache'] ) {
Expand All @@ -136,25 +164,29 @@ function ( $option ) {
return array();
}

$posted_license_key = isset( $option['license-key'] ) ? $option['license-key'] : false;
$is_license_key_through = isset( $posted_license_key ) && static::SAVED_VALUE === $posted_license_key;
$option['license-key'] = $is_license_key_through ? static::get_option( 'license-key' ) : $posted_license_key;
// Delete posted license status cache.
if ( ! empty( $option['license-key'] ) ) {
delete_transient( 'snow-monkey-license-status-' . $option['license-key'] );
}

if ( static::get_option( 'license-key' ) !== $option['license-key'] ) {
delete_transient( 'snow-monkey-license-status-' . static::get_option( 'license-key' ) );
// Delete old license status cache.
if ( ! empty( $current_license_key ) && $current_license_key !== $option['license-key'] ) {
delete_transient( 'snow-monkey-license-status-' . $current_license_key );
}

$posted_xserver_register_key = isset( $option['xserver-register-key'] ) ? $option['xserver-register-key'] : false;
$is_xserver_register_through = isset( $posted_xserver_register_key ) && static::SAVED_VALUE === $posted_xserver_register_key;
$option['xserver-register-key'] = $is_xserver_register_through ? static::get_option( 'xserver-register-key' ) : $posted_xserver_register_key;
// Delete posted XServer register status cache.
if ( ! empty( $option['xserver-register-key'] ) ) {
delete_transient( 'snow-monkey-license-status-' . $option['xserver-register-key'] );
}

// XServer register key is not validated if a license key is entered.
if ( static::get_option( 'xserver-register-key' ) !== $option['xserver-register-key'] ) {
delete_transient( 'snow-monkey-xserver-register-status-' . static::get_option( 'xserver-register-key' ) );
// Delete old XServer register status cache.
if ( ! empty( $current_xserver_register_key ) && $current_xserver_register_key !== $option['xserver-register-key'] ) {
delete_transient( 'snow-monkey-xserver-register-status-' . $current_xserver_register_key );
}

if ( $option['license-key'] ) {
$option['xserver-register-key'] = '';
}
// XServer register key is not validated if a license key is entered.
if ( ! empty( $option['license-key'] ) ) {
$option['xserver-register-key'] = '';
}

return $option;
Expand Down Expand Up @@ -258,29 +290,38 @@ class="widefat"
* Get license status.
*
* @param string $license_key The license key.
* @return mixed false|'true'|'false'
* @return string 'true'|'false'|'50x'
*/
public static function get_license_status( $license_key ) {
if ( ! $license_key ) {
return false;
return 'false';
}

$transient_name = 'snow-monkey-license-status-' . $license_key;
$transient = get_transient( $transient_name );
if ( false !== $transient && 'false' !== $transient ) {
if ( false !== $transient ) {
return $transient;
}

$status = static::_request_license_validate( $license_key );
set_transient( $transient_name, $status ? $status : 'false', DAY_IN_SECONDS );
if ( true === $status ) {
$status = 'true';
} elseif ( false === $status ) {
$status = 'false';
} else {
$status = (string) $status;
}

set_transient( $transient_name, $status, DAY_IN_SECONDS );

return $status;
}

/**
* Validate checker.
*
* @param string $license_key The license key.
* @return mixed false|'true'
* @return mixed false|true|50x
*/
protected static function _request_license_validate( $license_key ) {
global $wp_version;
Expand Down Expand Up @@ -308,6 +349,13 @@ protected static function _request_license_validate( $license_key ) {
$response_code = wp_remote_retrieve_response_code( $response );
if ( 200 === $response_code ) {
$status = wp_remote_retrieve_body( $response );
if ( 'true' === $status ) {
$status = true;
} elseif ( 'false' === $status ) {
$status = false;
}
} elseif ( 5 === (int) substr( $response_code, 0, 1 ) ) {
$status = $response_code;
}
}

Expand All @@ -318,11 +366,11 @@ protected static function _request_license_validate( $license_key ) {
* Get XServer register status.
*
* @param string $xserver_register_key The license key.
* @return mixed false|'true'|'false'
* @return string 'true'|'false'|'50x'
*/
public static function get_xserver_register_status( $xserver_register_key ) {
if ( ! $xserver_register_key ) {
return false;
return 'false';
}

$transient_name = 'snow-monkey-xserver-register-status-' . $xserver_register_key;
Expand All @@ -332,15 +380,24 @@ public static function get_xserver_register_status( $xserver_register_key ) {
}

$status = static::_request_license_validate_xserver( $xserver_register_key );
set_transient( $transient_name, $status ? $status : 'false', DAY_IN_SECONDS );
if ( true === $status ) {
$status = 'true';
} elseif ( false === $status ) {
$status = 'false';
} else {
$status = (string) $status;
}

set_transient( $transient_name, $status, DAY_IN_SECONDS );

return $status;
}

/**
* Validate checker.
*
* @param string $xserver_register_key The XServer register key.
* @return mixed false|'true'
* @return mixed false|true|50x
*/
protected static function _request_license_validate_xserver( $xserver_register_key ) {
global $wp_version;
Expand Down Expand Up @@ -368,6 +425,13 @@ protected static function _request_license_validate_xserver( $xserver_register_k
$response_code = wp_remote_retrieve_response_code( $response );
if ( 200 === $response_code ) {
$status = wp_remote_retrieve_body( $response );
if ( 'true' === $status ) {
$status = true;
} elseif ( 'false' === $status ) {
$status = false;
}
} elseif ( 5 === (int) substr( $response_code, 0, 1 ) ) {
$status = $response_code;
}
}

Expand Down
117 changes: 70 additions & 47 deletions app/setup/remote-block-patterns.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
* @package snow-monkey
* @author inc2734
* @license GPL-2.0+
* @version 27.5.4
* @version 28.0.4
*/

use Framework\Controller\Manager;
Expand Down Expand Up @@ -45,6 +45,10 @@ function snow_monkey_get_remote_block_patten_categories() {

$new_pattern_categories = array();
foreach ( $pattern_categories as $pattern_category ) {
if ( 'free' === $pattern_category['slug'] ) {
continue;
}

$new_pattern_categories[] = array(
'name' => $pattern_category['slug'],
'label' => $pattern_category['name'],
Expand Down Expand Up @@ -173,66 +177,85 @@ function snow_monkey_register_remote_block_patterns() {
}
}

$transient = get_transient( 'snow-monkey-remote-pattern-categories' );
if ( false !== $transient ) {
$remote_block_pattern_categories = $transient;
} else {
$remote_block_pattern_categories = snow_monkey_get_remote_block_patten_categories();
$license_key = Manager::get_option( 'license-key' );
$xserver_register_key = Manager::get_option( 'xserver-register-key' );
$status = 'false';

if ( $remote_block_pattern_categories && is_array( $remote_block_pattern_categories ) ) {
set_transient( 'snow-monkey-remote-pattern-categories', $remote_block_pattern_categories, DAY_IN_SECONDS );
}
if ( $license_key ) {
$status = Manager::get_license_status( $license_key );
} elseif ( $xserver_register_key ) {
$status = Manager::get_xserver_register_status( $xserver_register_key );
}

if ( ! is_array( $remote_block_pattern_categories ) ) {
$remote_block_pattern_categories = array();
// Get categofies.
$block_pattern_categories_transient_name = 'snow-monkey-remote-pattern-categories';
$block_pattern_categories = get_transient( $block_pattern_categories_transient_name );
if ( false === $block_pattern_categories || ! is_array( $block_pattern_categories ) ) {
$new_block_pattern_categories = snow_monkey_get_remote_block_patten_categories();
$block_pattern_categories = is_array( $new_block_pattern_categories )
? $new_block_pattern_categories
: array();
set_transient( $block_pattern_categories_transient_name, $block_pattern_categories, WEEK_IN_SECONDS );
}

foreach ( $remote_block_pattern_categories as $remote_block_pattern_category ) {
register_block_pattern_category(
$remote_block_pattern_category['name'],
array(
'label' => '[Snow Monkey] ' . $remote_block_pattern_category['label'],
)
);
}

$transient = get_transient( 'snow-monkey-remote-patterns' );
if ( false !== $transient ) {
$remote_block_patterns = $transient;
} else {
$license_key = Manager::get_option( 'license-key' );
$xserver_register_key = Manager::get_option( 'xserver-register-key' );
$remote_block_patterns = array();

if ( $license_key ) {
$status = Manager::get_license_status( $license_key );
if ( 'true' === $status ) {
$remote_block_patterns = snow_monkey_get_premium_remote_block_pattens();
// Get patterns.
$premium_block_patterns_transient_name = 'snow-monkey-premium-remote-patterns';
$premium_block_patterns = get_transient( $premium_block_patterns_transient_name );
$free_block_patterns_transient_name = 'snow-monkey-free-remote-patterns';
$free_block_patterns = get_transient( $free_block_patterns_transient_name );
$block_patterns = array();
$registry = WP_Block_Patterns_Registry::get_instance();

if ( 'true' === $status ) { // Get premium pattens.
if ( false === $premium_block_patterns || ! is_array( $premium_block_patterns ) ) {
$premium_block_patterns = array();

if ( $license_key ) {
$premium_block_patterns = snow_monkey_get_premium_remote_block_pattens();
} elseif ( $xserver_register_key ) {
$premium_block_patterns = snow_monkey_get_premium_remote_block_pattens_xserver();
}
} elseif ( $xserver_register_key ) {
$status = Manager::get_xserver_register_status( $xserver_register_key );
if ( 'true' === $status ) {
$remote_block_patterns = snow_monkey_get_premium_remote_block_pattens_xserver();

if ( ! is_array( $premium_block_patterns ) ) {
$premium_block_patterns = array();
}
}

if ( ! $remote_block_patterns ) {
$remote_block_patterns = snow_monkey_get_free_remote_block_pattens();
set_transient( $premium_block_patterns_transient_name, $premium_block_patterns, WEEK_IN_SECONDS );
}

if ( $remote_block_patterns && is_array( $remote_block_patterns ) ) {
set_transient( 'snow-monkey-remote-patterns', $remote_block_patterns, DAY_IN_SECONDS );
$block_patterns = $premium_block_patterns;
} elseif ( 'false' === $status ) { // Get free pattens.
delete_transient( $premium_block_patterns_transient_name );

if ( false === $free_block_patterns || ! is_array( $free_block_patterns ) ) {
$free_block_patterns = snow_monkey_get_free_remote_block_pattens();

if ( ! is_array( $free_block_patterns ) ) {
$free_block_patterns = array();
}

set_transient( $free_block_patterns_transient_name, $free_block_patterns, WEEK_IN_SECONDS );
}
}

if ( ! is_array( $remote_block_patterns ) ) {
$remote_block_patterns = array();
$block_patterns = $free_block_patterns;
} elseif ( ! empty( $premium_block_patterns ) && is_array( $premium_block_patterns ) ) { // Server error.
$block_patterns = $premium_block_patterns;
} elseif ( ! empty( $free_block_patterns ) && is_array( $free_block_patterns ) ) { // Server error.
$block_patterns = $free_block_patterns;
}

$registry = WP_Block_Patterns_Registry::get_instance();
// Register pattern categories.
foreach ( $block_pattern_categories as $block_pattern_category ) {
register_block_pattern_category(
$block_pattern_category['name'],
array(
'label' => '[Snow Monkey] ' . $block_pattern_category['label'],
)
);
}

foreach ( $remote_block_patterns as $pattern ) {
// Register patterns.
foreach ( $block_patterns as $pattern ) {
if ( ! $pattern['title'] || ! $pattern['slug'] || ! $pattern['content'] ) {
continue;
}
Expand All @@ -248,7 +271,7 @@ function snow_monkey_register_remote_block_patterns() {

$pattern_name = esc_html( $pattern['slug'] );
// Some patterns might be already registered as core patterns with the `core` prefix.
$is_registered = $registry->is_registered( $pattern_name ) || $registry->is_registered( $pattern_name );
$is_registered = $registry->is_registered( $pattern_name );
if ( ! $is_registered ) {
register_block_pattern( $pattern_name, (array) $pattern );
}
Expand Down
Loading

0 comments on commit f00752e

Please sign in to comment.