oont-contents/plugins/webappick-product-feed-for-woocommerce/ctx-compatibility/CompatibilityFactory.php
2025-03-31 21:42:48 +02:00

249 lines
11 KiB
PHP

<?php
/**
* Compatibility Factory
*
* @package CTXFeed
* @subpackage CTXFeed\V5\Compatibility
* @category MyCategory
* @since 5.0.0
*/
namespace CTXFeed\Compatibility;
use CTXFeed\V5\Common\Helper;
/**
* Class Compatibility Factory
*
* @package CTXFeed
* @subpackage CTXFeed\V5\Compatibility
* @author Ohidul Islam <wahid0003@gmail.com>
* @link https://webappick.com
* @license https://opensource.org/licenses/gpl-license.php GNU Public License
* @category MyCategory
*/
class CompatibilityFactory {
/**
* Initialize the compatibility classes
*/
public static function init() {
$classes = self::get_classes();
$compatible_plugins = self::compatible_plugins();
foreach ( $classes as $class ) {
$class_name = __NAMESPACE__ . '\\' . $class . 'Compatibility';
if ( ! isset( $compatible_plugins[ $class ] ) || ! is_plugin_active( $compatible_plugins[ $class ] ) || ! class_exists( $class_name ) ) {
continue;
}
new $class_name;
}
}
/**
* Get the compatibility class for the current plugin version
*
* @return array Array of compatibility classes
*/
public static function get_classes() {
// Get the current working directory
$directory = plugin_dir_path( __FILE__ );
// Scan the directory for files
$all_files = scandir( $directory );
// Filter files to get only those ending with 'Compatibility.php'
$filtered_files = array_filter(
$all_files,
static function ( $file ) {
return strpos( $file, 'Compatibility.php' ) && substr( $file, - strlen( 'Compatibility.php' ) ) === 'Compatibility.php';
}
);
// Extract the part of the filename before 'Compatibility'
return array_map(
static function ( $file ) {
return str_replace( 'Compatibility.php', '', $file );
},
$filtered_files
);
}
/**
* Get the compatible plugins list by CTX-Feed with their class name and absolute path
* Some plugins don't have class name, so we have to check them by their absolute path
*
* @return array
*/
private static function compatible_plugins() {
/**
* IMPORTANT: Never change the key and value of the array below. Never remove any key or value from the array below.
* If you want to add any plugin, just add the plugin absolute path as key and the plugin class name as value.
* Create a file name with value ( class name ) as well as "Compatibility" as suffix. Other-wise it will not work.
*
* Example: 'woocommerce-multilingual/wpml-woocommerce.php' => 'woocommerce_wpml',
* Here 'woocommerce-multilingual/wpml-woocommerce.php' is the plugin absolute path and 'woocommerce_wpml' is the plugin class name.
* And the file name is 'woocommerce_wpmlCompatibility.php' with value 'Compatibility' as suffix.
* So, the file name is 'woocommerce_wpmlCompatibility.php' and the class name is 'woocommerce_wpmlCompatibility'.
*/
$AWDP_Discount = [];
if ( is_plugin_active('aco-woo-dynamic-pricing/start.php' ) ){
/**
* This class name changed from 'AWDP_Discount' to 'CTX_AWDP_Discount'
* To make compatible with this plugin's latest version.
* This plugin's 4.3.0 was ok but 4.5.4 is not working.
* That's why we did change the class name.
*
* @link : https://webappick.atlassian.net/browse/CTX-772
*/
$AWDP_Discount = [ 'aco-woo-dynamic-pricing/start.php' => 'CTX_AWDP_Discount' ];
}else if( is_plugin_active('aco-woo-dynamic-pricing-pro/start.php') ){
$AWDP_Discount = [ 'aco-woo-dynamic-pricing-pro/start.php' => 'CTX_AWDP_Discount'];
}
$polylang = [];
if ( is_plugin_active('polylang-pro/polylang.php' ) ){
$polylang = [ 'polylang-pro/polylang.php' => 'Polylang' ];
}else if( is_plugin_active('polylang-wc/polylang-wc.php' ) ){
// $polylang = [ 'polylang-wc/polylang-wc.php' => 'polylang-wc'];
$polylang = [ 'polylang-wc/polylang-wc.php' => 'Polylang'];
}
$compatible_plugins = [
#################################################################################
# WooCommerce Dynamic Pricing & Discounts plugins #
#################################################################################
/**
* This plugin has been closed as of September 12, 2023 and is not available for download. Reason: Security Issue.
* // TODO remove this plugin from the list
*/
// 'pricing-deals-for-woocommerce/vt-pricing-deals.php' => 'PricingDealsForWoocommerceVT',
// https://wordpress.org/plugins/pricing-deals-for-woocommerce/
// 'aco-woo-dynamic-pricing/start.php' => 'AWDP_Discount',
// DONE
// https://wordpress.org/plugins/aco-woo-dynamic-pricing/
// 'aco-woo-dynamic-pricing-pro/start.php' => 'AWDP_Discount',
// https://codecanyon.net/item/woocommerce-dynamic-pricing-discounts/7119279
'woo-discount-rules/woo-discount-rules.php' => 'Wdr_Configuration',
// DONE
// https://wordpress.org/plugins/woo-discount-rules/
'woo-advanced-discounts/wad.php' => 'WAD_Discount',
// DONE
// https://wordpress.org/plugins/woo-advanced-discounts/
'easy-woocommerce-discounts/easy-woocommerce-discounts.php' => 'WCCS_Pricing',
// DONE
// https://wordpress.org/plugins/easy-woocommerce-discounts/
'wc-dynamic-pricing-and-discounts/wc-dynamic-pricing-and-discounts.php' => 'RP_WCDPD',
// DONE
// https://codecanyon.net/item/woocommerce-dynamic-pricing-discounts/7119279
#################################################################################
# Composite Products for WooCommerce plugins #
#################################################################################
'woocommerce-composite-products/woocommerce-composite-products.php' => 'WC_Composite_Products',
// DONE
// https://woocommerce.com/products/composite-products/
'wpc-composite-products/wpc-composite-products.php' => 'WPCleverWooco',
// DONE
// https://wordpress.org/plugins/wpc-composite-products/
#################################################################################
# WooCommerce Product Bundles plugins #
#################################################################################
'woocommerce-product-bundles/woocommerce-product-bundles.php' => 'WC_Product_Bundle',
// DONE
// https://woocommerce.com/products/product-bundles/
#################################################################################
# WooCommerce Currency Switcher plugins #
#################################################################################
'woocommerce-currency-switcher/index.php' => 'WOOCS',
// DONE
// https://wordpress.org/plugins/woocommerce-currency-switcher/
'currency-switcher-woocommerce/currency-switcher-woocommerce.php' => 'Alg_WC_Currency_Switcher',
// DONE
// https://wordpress.org/plugins/currency-switcher-woocommerce/
'woocommerce-multicurrency/woocommerce-multicurrency.php' => 'WOOMC_API',
// DONE // TODO this plugin is not tested because plugin is not found anywhere.
// https://wordpress.org/plugins/woocommerce-multicurrency/
'woocommerce-multi-currency/woocommerce-multi-currency.php' => '',
// https://woo.com/products/multi-currency/
'woocommerce-multilingual/wpml-woocommerce.php' => 'woocommerce_wpml',
// DONE
// https://wordpress.org/plugins/woocommerce-multilingual/
'woocommerce-aelia-currencyswitcher/woocommerce-aelia-currencyswitcher.php' => 'WC_Aelia_CurrencySwitcher',
// DONE
// https://aelia.co/shop/currency-switcher-woocommerce/
'woo-multi-currency/woo-multi-currency.php' => 'WOOMULTI_CURRENCY_F',
// DONE
// https://wordpress.org/plugins/woo-multi-currency/
#################################################################################
# WooCommerce Translation plugins #
#################################################################################
'sitepress-multilingual-cms/sitepress.php' => 'SitePress',
// DONE
// https://wpml.org/
'translatepress-multilingual/index.php' => 'TRP_Translate_Press',
// DONE
// https://wordpress.org/plugins/translatepress-multilingual/
// 'polylang-pro/polylang.php' => 'Polylang',
// DONE
'divigrid/divigrid.php' => 'DIVI_GRID_PLUGIN',
];
$compatible_plugins = array_merge( $compatible_plugins, $AWDP_Discount, $polylang );
$compatible_plugins_for_free = [
#################################################################################
# WooCommerce Dynamic Pricing & Discounts plugins #
#################################################################################
/**
* This plugin has been closed as of September 12, 2023 and is not available for download. Reason: Security Issue.
* // TODO remove this plugin from the list
*/
// 'pricing-deals-for-woocommerce/vt-pricing-deals.php' => 'PricingDealsForWoocommerceVT',
// https://wordpress.org/plugins/pricing-deals-for-woocommerce/
// 'aco-woo-dynamic-pricing/start.php' => 'AWDP_Discount',
// DONE
// https://wordpress.org/plugins/aco-woo-dynamic-pricing/
// 'aco-woo-dynamic-pricing-pro/start.php' => 'AWDP_Discount',
// https://codecanyon.net/item/woocommerce-dynamic-pricing-discounts/7119279
'woo-discount-rules/woo-discount-rules.php' => 'Wdr_Configuration',
// DONE
// https://wordpress.org/plugins/woo-discount-rules/
'woo-advanced-discounts/wad.php' => 'WAD_Discount',
// DONE
// https://wordpress.org/plugins/woo-advanced-discounts/
'easy-woocommerce-discounts/easy-woocommerce-discounts.php' => 'WCCS_Pricing',
// DONE
// https://wordpress.org/plugins/easy-woocommerce-discounts/
'wc-dynamic-pricing-and-discounts/wc-dynamic-pricing-and-discounts.php' => 'RP_WCDPD',
// DONE
// https://codecanyon.net/item/woocommerce-dynamic-pricing-discounts/7119279
];
$compatible_plugins_for_free = array_merge( $compatible_plugins_for_free, $AWDP_Discount );
// If WooCommerce Multi Currency Pro version by VillaTheme is active, Free version will be removed from the list.
if ( is_plugin_active( 'woocommerce-multi-currency/woocommerce-multi-currency.php' ) ) {
$compatible_plugins['woocommerce-multi-currency/woocommerce-multi-currency.php'] = 'WOOMULTI_CURRENCY'; // DONE
// https://villatheme.com/extensions/woo-multi-currency/
unset( $compatible_plugins['woo-multi-currency/woo-multi-currency.php'] );
}
if( Helper::is_pro() ){
return array_flip( $compatible_plugins );
}else{
return array_flip( $compatible_plugins_for_free );
}
}
}