Files
doitinpoland.com/wp-content/plugins/redux-framework/redux-templates/classes/class-supported-plugins.php
2023-09-12 21:41:04 +02:00

174 lines
4.7 KiB
PHP

<?php // phpcs:ignore WordPress.Files.FileName
/**
* Detect supported plugins with the given instance.
*
* @since 4.0.0
* @package Redux Framework
*/
namespace ReduxTemplates;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
/**
* Redux Templates Supported_Plugins Class
*
* @since 4.0.0
*/
class Supported_Plugins {
/**
* List of all supported plugins from the library.
*
* @var array|null
*/
protected static $plugins = array();
/**
* List of all supported plugins from the library.
*
* @var Supported_Plugins|null
*/
protected static $instance = null;
/**
* Return or generate instance, singleton.
*
* @return object Instance
* @since 4.0.0
*/
public static function instance() {
if ( is_null( self::$instance ) ) {
self::$instance = new self();
}
return self::$instance;
}
/**
* Include the template
*
* @param array|null $plugins List of all possible plugins from the library.
*
* @return void
* @since 4.0.0
*/
public function init( $plugins = array() ) {
self::$plugins = $plugins;
self::detect_versions();
}
/**
* Detect all versions of plugins had in library and installed locally.
*
* @return void
* @since 4.0.0
*/
private static function detect_versions() {
$all_plugins = get_plugins();
$active_plugins = get_option( 'active_plugins' );
$data = array();
foreach ( $active_plugins as $plugin ) {
$slug = explode( '/', $plugin )[0];
if ( ! isset( $all_plugins[ $plugin ] ) ) {
$all_plugins[ $plugin ] = array();
}
$data[ $slug ] = $all_plugins[ $plugin ];
}
foreach ( self::$plugins as $key => $plugin ) {
$selector = false;
if ( isset( $data[ $key ] ) ) {
$selector = $key;
} else {
if ( isset( $plugin['slug'] ) && isset( $data[ $plugin['slug'] ] ) ) {
$selector = $plugin['slug'];
}
}
if ( isset( $plugin['detect'] ) ) {
if ( isset( $plugin['detect']['freemius'] ) && $plugin['detect']['freemius'] ) {
// Freemius Version Detection.
if ( isset( $GLOBALS[ $plugin['detect']['freemius'] ] ) && ! empty( $GLOBALS[ $plugin['detect']['freemius'] ] ) ) {
$freemius = $GLOBALS[ $plugin['detect']['freemius'] ];
$selector = $freemius->get_plugin_basename();
$true_slug = explode( '/', $selector )[0];
if ( $true_slug !== $key ) {
self::$plugins[ $key ]['true_slug'] = $true_slug;
}
if ( isset( self::$plugins[ $key ]['free_slug'] ) ) {
continue; // Let's only store the info on the free version.
}
$plugin_info = $freemius->get_plugin_data();
if ( $selector && ! isset( $data[ $selector ]['Version'] ) ) {
self::$plugins[ $key ]['version'] = $plugin_info['Version'];
}
if ( $freemius->can_use_premium_code() ) {
self::$plugins[ $key ]['is_pro'] = true;
}
unset( self::$plugins[ $key ]['detect']['freemius'] );
}
}
if ( isset( $plugin['detect']['defined'] ) ) {
if ( ! empty( $plugin['detect']['defined'] ) ) {
foreach ( $plugin['detect']['defined'] as $key_name => $defined_name ) {
if ( defined( $defined_name ) && ! empty( constant( $defined_name ) ) ) {
self::$plugins[ $key ][ $key_name ] = constant( $defined_name );
}
}
}
unset( self::$plugins[ $key ]['detect']['defined'] );
}
if ( empty( self::$plugins[ $key ]['detect'] ) ) {
unset( self::$plugins[ $key ]['detect'] );
}
} else {
if ( isset( $data[ $key ] ) ) {
if ( isset( $data[ $key ]['Version'] ) ) {
self::$plugins[ $key ]['version'] = $data[ $key ]['Version'];
}
}
}
}
foreach ( self::$plugins as $key => $plugin ) {
if ( ! isset( $plugin['url'] ) || ( isset( $plugin['url'] ) && empty( $plugin['url'] ) ) ) {
if ( isset( $plugin['free_slug'] ) ) {
if ( isset( $plugin['free_slug'] ) ) {
$free_plugin = self::$plugins[ $plugin['free_slug'] ];
if ( isset( $free_plugin['url'] ) ) {
self::$plugins[ $key ]['url'] = $free_plugin['url'];
} else {
self::$plugins[ $key ]['url'] = "https://wordpress.org/plugins/{$plugin['free_slug']}/";
}
}
} else {
self::$plugins[ $key ]['url'] = "https://wordpress.org/plugins/{$key}/";
}
}
}
self::$plugins['redux-framework']['plugin'] = defined( 'REDUX_PLUGIN_FILE' );
if ( isset( self::$plugins['redux-pro'] ) ) {
self::$plugins['redux-pro']['redux_pro'] = true;
}
}
/**
* Helper function to return all installed plugins.
*
* @return array Array of plugins and which are installed.
* @since 4.0.0
*/
public static function get_plugins() {
$instance = self::instance();
if ( empty( $instance::$plugins ) ) {
$instance->init();
}
return $instance::$plugins;
}
}