* @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 ); } } }