diff --git a/src/Basic_Requirement_Checker.php b/src/Basic_Requirement_Checker.php index 4294a7e348dc3e9fb05f8b746f8c57584d586466..dde2c8ae8950ec7959c41b096130a76e1fb38d9f 100644 --- a/src/Basic_Requirement_Checker.php +++ b/src/Basic_Requirement_Checker.php @@ -17,10 +17,9 @@ const PLUGIN_INFO_KEY_NAME = 'name'; const PLUGIN_INFO_VERSION = 'version'; const PLUGIN_INFO_FAKE_REQUIRED_MINIMUM_VERSION = '0.0'; - const PLUGIN_INFO_TRANSIENT_EXPIRATION_TIME = 0; const PLUGIN_INFO_APPEND_PLUGIN_DATA = 'required_version'; - const PLUGIN_INFO_REQUIRED_PLUGINS_TRANSIENT_NAME = 'require_plugins_data'; - const PLUGIN_INFO_IS_WP_PLUGIN_INSTALLED_TRANSIENT_NAME = 'is_wp_plugin_installed'; + const PLUGIN_INFO_TRANSIENT_NAME = 'require_plugins_data'; + const PLUGIN_INFO_TRANSIENT_EXPIRATION_TIME = 0; /** @var string */ protected $plugin_name; @@ -285,16 +284,6 @@ return defined( 'OPENSSL_VERSION_NUMBER' ) && OPENSSL_VERSION_NUMBER > (int) $required_version; } - /** - * @return array Transient Names - */ - private function transient_names() { - return array( - self::PLUGIN_INFO_REQUIRED_PLUGINS_TRANSIENT_NAME, - self::PLUGIN_INFO_IS_WP_PLUGIN_INSTALLED_TRANSIENT_NAME, - ); - } - /** * @param $notices array * @@ -315,24 +304,21 @@ } /** - * Check the plugins directory and retrieve installed plugin file or plugin data. - * - * @param $transient_name - * @param $plugin_file + * Check the plugins directory and retrieve all plugin files with plugin data. * - * @return array|bool + * @return array */ - private static function retrieve_plugins_data_in_transient( $transient_name, $plugin_file = '' ) { - if ( ! function_exists( 'get_plugins' ) ) { - require_once ABSPATH . '/wp-admin/includes/plugin.php'; - } + private static function retrieve_plugins_data_in_transient() { - - $plugins = get_transient( $transient_name ); + $plugins = get_transient( self::PLUGIN_INFO_TRANSIENT_NAME ); if ( $plugins === false ) { - $plugins = ! empty( $plugin_file ) ? array_key_exists( $plugin_file, get_plugins() ) : get_plugins(); - set_transient( $transient_name, $plugins, self::PLUGIN_INFO_TRANSIENT_EXPIRATION_TIME ); + if ( ! function_exists( 'get_plugins' ) ) { + require_once ABSPATH . '/wp-admin/includes/plugin.php'; + } + + $plugins = function_exists( 'get_plugins' ) ? get_plugins() : array(); + set_transient( self::PLUGIN_INFO_TRANSIENT_NAME, $plugins, self::PLUGIN_INFO_TRANSIENT_EXPIRATION_TIME ); } return $plugins; @@ -346,16 +332,18 @@ private function retrieve_required_plugins_data() { $require_plugins = array(); - $plugins = self::retrieve_plugins_data_in_transient( self::PLUGIN_INFO_REQUIRED_PLUGINS_TRANSIENT_NAME ); - if ( count( $plugins ) > 0 ) { - if ( ! empty( $this->plugin_require ) ) { - foreach ( $this->plugin_require as $plugin ) { - $plugin_file_name = $plugin[ self::PLUGIN_INFO_KEY_NAME ]; - $plugin_version = $plugin[ self::PLUGIN_INFO_VERSION ]; - - if ( self::is_wp_plugin_active( $plugin_file_name ) ) { - $require_plugins[ $plugin[ $plugin_file_name ] ] = $plugins[ $plugin_file_name ]; - $require_plugins[ $plugin[ $plugin_file_name ] ][ self::PLUGIN_INFO_APPEND_PLUGIN_DATA ] = $plugin_version; + $plugins = self::retrieve_plugins_data_in_transient(); + if ( is_array( $plugins ) ) { + if ( count( $plugins ) > 0 ) { + if ( ! empty( $this->plugin_require ) ) { + foreach ( $this->plugin_require as $plugin ) { + $plugin_file_name = $plugin[ self::PLUGIN_INFO_KEY_NAME ]; + $plugin_version = $plugin[ self::PLUGIN_INFO_VERSION ]; + + if ( self::is_wp_plugin_active( $plugin_file_name ) ) { + $require_plugins[ $plugin_file_name ] = $plugins[ $plugin_file_name ]; + $require_plugins[ $plugin_file_name ][ self::PLUGIN_INFO_APPEND_PLUGIN_DATA ] = $plugin_version; + } } } } @@ -434,7 +422,7 @@ $nice_name = $plugin_info[ self::PLUGIN_INFO_KEY_NICE_NAME ]; if ( ! self::is_wp_plugin_active( $name ) ) { - if ( ! self::is_wp_plugin_installed( self::PLUGIN_INFO_IS_WP_PLUGIN_INSTALLED_TRANSIENT_NAME, $name ) ) { + if ( ! self::is_wp_plugin_installed( $name ) ) { $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>', @@ -475,17 +463,13 @@ * Checks if plugin is installed. Needs to be enabled in deferred way. * * @param string $plugin_file - * @param string $transient_name * * @return bool */ - public static function is_wp_plugin_installed( $transient_name, $plugin_file ) { - if ( isset( $plugin_file ) ) { - return self::retrieve_plugins_data_in_transient( $transient_name, $plugin_file ); - - } + public static function is_wp_plugin_installed( $plugin_file ) { + $plugins_data = self::retrieve_plugins_data_in_transient(); - return false; + return array_key_exists( $plugin_file, (array)$plugins_data ); } /** @@ -582,9 +566,7 @@ if ( isset( $this->plugin_file ) ) { deactivate_plugins( plugin_basename( $this->plugin_file ) ); - foreach ($this->transient_names() as $transient_name) { - delete_transient( $transient_name ); - } + delete_transient( self::PLUGIN_INFO_TRANSIENT_NAME ); } }