diff --git a/src/Basic_Requirement_Checker.php b/src/Basic_Requirement_Checker.php index ef98b4a8624c152bf5284efc548f7944bc21cf1f..e96d7f4287d5dd3a1d7b3b9492e6668ae49ddce6 100644 --- a/src/Basic_Requirement_Checker.php +++ b/src/Basic_Requirement_Checker.php @@ -70,6 +70,10 @@ if ( ! class_exists( 'WPDesk_Basic_Requirement_Checker' ) ) { /** @var @string */ private $text_domain; + /** + * @var mixed|true + */ + private $use_transients; /** * @param string $plugin_file @@ -77,11 +81,13 @@ if ( ! class_exists( 'WPDesk_Basic_Requirement_Checker' ) ) { * @param string $text_domain * @param string $php_version * @param string $wp_version + * @param bool $use_transients */ - public function __construct( $plugin_file, $plugin_name, $text_domain, $php_version, $wp_version ) { - $this->plugin_file = $plugin_file; - $this->plugin_name = $plugin_name; - $this->text_domain = $text_domain; + public function __construct( $plugin_file, $plugin_name, $text_domain, $php_version, $wp_version, $use_transients = true ) { + $this->plugin_file = $plugin_file; + $this->plugin_name = $plugin_name; + $this->text_domain = $text_domain; + $this->use_transients = $use_transients; $this->set_min_php_require( $php_version ); $this->set_min_wp_require( $wp_version ); @@ -344,13 +350,20 @@ if ( ! class_exists( 'WPDesk_Basic_Requirement_Checker' ) ) { /** * Check the plugins directory and retrieve all plugin files with plugin data. * + * @param bool $use_transients + * * @return array In format [ 'plugindir/pluginfile.php' => ['Name' => 'Plugin Name', 'Version' => '1.0.1', ...], ] */ - private static function retrieve_plugins_data_in_transient() { + private static function retrieve_plugins_data_in_transient( $use_transients = true ) { $current_time = time(); - $plugins = get_transient( self::PLUGIN_INFO_TRANSIENT_NAME ); - $expiration_time = get_transient( self::EXPIRATION_TRANSIENT_NAME ); - $is_expired = ! $expiration_time || $current_time > $expiration_time; + if ( $use_transients) { + $plugins = get_transient( self::PLUGIN_INFO_TRANSIENT_NAME ); + $expiration_time = get_transient( self::EXPIRATION_TRANSIENT_NAME ); + } else { + $plugins = get_option( self::PLUGIN_INFO_TRANSIENT_NAME ); + $expiration_time = get_option( self::EXPIRATION_TRANSIENT_NAME ); + } + $is_expired = ! $expiration_time || $current_time > $expiration_time; if ( $plugins === false || $is_expired ) { static $never_executed = true; @@ -371,8 +384,13 @@ if ( ! class_exists( 'WPDesk_Basic_Requirement_Checker' ) ) { } $plugins = function_exists( 'get_plugins' ) ? get_plugins() : array(); - set_transient( self::PLUGIN_INFO_TRANSIENT_NAME, $plugins, 0 ); - set_transient( self::EXPIRATION_TRANSIENT_NAME, $current_time + self::CACHE_TIME, 0 ); + if ( $use_transients ) { + set_transient( self::PLUGIN_INFO_TRANSIENT_NAME, $plugins, 0 ); + set_transient( self::EXPIRATION_TRANSIENT_NAME, $current_time + self::CACHE_TIME, 0 ); + } else { + update_option( self::PLUGIN_INFO_TRANSIENT_NAME, $plugins ); + update_option( self::EXPIRATION_TRANSIENT_NAME, $current_time + self::CACHE_TIME ); + } } return $plugins; @@ -385,7 +403,7 @@ if ( ! class_exists( 'WPDesk_Basic_Requirement_Checker' ) ) { */ private function retrieve_required_plugins_data() { $require_plugins = array(); - $plugins = self::retrieve_plugins_data_in_transient(); + $plugins = self::retrieve_plugins_data_in_transient( $this->use_transients ); if ( is_array( $plugins ) ) { if ( count( $plugins ) > 0 ) { if ( ! empty( $this->plugin_require ) ) { @@ -475,7 +493,7 @@ if ( ! class_exists( 'WPDesk_Basic_Requirement_Checker' ) ) { $nice_name = $plugin_info[ self::PLUGIN_INFO_KEY_NICE_NAME ]; if ( ! self::is_wp_plugin_active( $name ) ) { - if ( ! self::is_wp_plugin_installed( $name ) ) { + if ( ! self::is_wp_plugin_installed( $name, $this->use_transients ) ) { $install_url = $this->prepare_plugin_repository_install_url( $plugin_info ); return $this->prepare_notice_message( sprintf( wp_kses( __( 'The “%s” plugin requires free %s plugin. <a href="%s">Install %s</a>', @@ -516,11 +534,12 @@ if ( ! class_exists( 'WPDesk_Basic_Requirement_Checker' ) ) { * Checks if plugin is installed. Needs to be enabled in deferred way. * * @param string $plugin_file + * @param bool $use_transients * * @return bool */ - public static function is_wp_plugin_installed( $plugin_file ) { - $plugins_data = self::retrieve_plugins_data_in_transient(); + public static function is_wp_plugin_installed( $plugin_file, $use_transients = false ) { + $plugins_data = self::retrieve_plugins_data_in_transient( $use_transients ); return array_key_exists( $plugin_file, (array) $plugins_data ); } @@ -628,7 +647,7 @@ if ( ! class_exists( 'WPDesk_Basic_Requirement_Checker' ) ) { if ( isset( $this->plugin_file ) ) { deactivate_plugins( plugin_basename( $this->plugin_file ) ); - delete_transient( self::PLUGIN_INFO_TRANSIENT_NAME ); + $this->clear_plugin_info_data(); } } @@ -640,11 +659,11 @@ if ( ! class_exists( 'WPDesk_Basic_Requirement_Checker' ) ) { public function transient_delete_on_plugin_version_changed() { add_action( self::HOOK_PLUGIN_DEACTIVATED_ACTION, array( $this, - 'handle_transient_delete_action' + 'clear_plugin_info_data' ) ); add_action( self::HOOK_PLUGIN_ACTIVATED_ACTION, array( $this, - 'handle_transient_delete_action' + 'clear_plugin_info_data' ) ); } @@ -653,9 +672,11 @@ if ( ! class_exists( 'WPDesk_Basic_Requirement_Checker' ) ) { * * @return void */ - public function handle_transient_delete_action() { + public function clear_plugin_info_data() { delete_transient( self::PLUGIN_INFO_TRANSIENT_NAME ); delete_transient( self::EXPIRATION_TRANSIENT_NAME ); + delete_option( self::PLUGIN_INFO_TRANSIENT_NAME ); + delete_option( self::EXPIRATION_TRANSIENT_NAME ); } /** diff --git a/src/Basic_Requirement_Checker_Factory.php b/src/Basic_Requirement_Checker_Factory.php index e0755db9fcc679afbfb714602a56bccf2f451550..b79906028336143f1c3c9d52483d5f2be1d02faf 100644 --- a/src/Basic_Requirement_Checker_Factory.php +++ b/src/Basic_Requirement_Checker_Factory.php @@ -44,7 +44,8 @@ $plugin_name, $text_domain, $requirements['php'], - $requirements['wp'] + $requirements['wp'], + (bool) wp_using_ext_object_cache() ); if ( isset( $requirements['plugins'] ) ) {