You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
cosmopet.ae/wp-content/plugins copy/woocommerce-multilingual/classes/class-woocommerce-wpml.php

531 lines
15 KiB

<?php
use WCML\Utilities\AdminPages;
use function WCML\functions\getSitePress;
use function WCML\functions\isStandAlone;
use function WPML\Container\make;
/**
* Class woocommerce_wpml
*/
/* phpcs:ignore PEAR.NamingConventions.ValidClassName.StartWithCapital, PEAR.NamingConventions.ValidClassName.Invalid */
class woocommerce_wpml {
/** @var mixed|void Settings */
public $settings;
/** @var WCML_Troubleshooting */
public $troubleshooting;
/** @var WCML_Endpoints */
public $endpoints;
/** @var WCML_Products */
public $products;
/** @var WCML_Synchronize_Product_Data */
public $sync_product_data;
/** @var WCML_Synchronize_Variations_Data */
public $sync_variations_data;
/** @var WCML_Store_Pages */
public $store;
/** @var WCML_Emails */
public $emails;
/** @var WCML_Terms */
public $terms;
/** @var WCML_Attributes */
public $attributes;
/** @var WCML_Orders */
public $orders;
/** @var WCML_Currencies */
public $currencies;
/** @var WCML_Multi_Currency */
public $multi_currency;
/** @var WCML_Languages_Upgrader */
public $languages_upgrader;
/** @var WCML_Url_Translation */
public $url_translation;
/** @var WCML_Coupons */
public $coupons;
/** @var WCML_Locale */
public $locale;
/** @var WCML\Media\Wrapper\IMedia */
public $media;
/** @var WCML_Downloadable_Products */
public $downloadable;
/** @var WCML_WC_Strings */
public $strings;
/** @var WCML_WC_Shipping */
public $shipping;
/** @var WCML_WC_Gateways */
public $gateways;
/** @var WCML_Currency_Switcher_Templates */
public $cs_templates;
/** @var WCML_Comments */
public $comments;
/** @var WCML_Translation_Editor */
public $translation_editor;
/**
* @deprecated Use `make( WCML_Dependencies::class )` instead.
*
* @var WCML_Dependencies
*/
public $dependencies;
/**
* @deprecated Use `make( WCML_Dependencies::class )->check()` instead.
*
* @var bool|int
*/
public $dependencies_are_ok;
/** @var WCML_Cart */
public $cart;
/** @var WCML_Cart_Sync_Warnings */
public $cart_sync_warnings;
/** @var WCML_Reports */
private $reports;
/** @var WCML_Requests */
public $requests;
// NOTE: reverted back to public after wcml-1218.
/** @var WCML_Compatibility */
public $compatibility;
/** @var WCML_Currency_Switcher_Properties|null $cs_properties */
public $cs_properties;
/** @var WCML_WC_Admin_Duplicate_Product|null $duplicate_product */
public $duplicate_product;
/** @var WCML_Page_Builders|null $page_builders */
public $page_builders;
/**
* @var WCML_Products_Screen_Options
*/
private $wcml_products_screen;
public function __construct() {
$sitepress = getSitePress();
$this->settings = $this->get_settings();
$this->currencies = new WCML_Currencies( $this );
new WCML_Widgets( $this );
add_action( 'init', [ $this, 'init' ], 2 );
$this->cs_properties = new WCML_Currency_Switcher_Properties();
$wpml_wp_api = $sitepress->get_wp_api();
$wpml_wp_api->get_wp_filesystem_direct();
$this->cs_templates = new WCML_Currency_Switcher_Templates( $this, $wpml_wp_api, make( WPML_File::class ) );
$this->cs_templates->init_hooks();
$wc_shortccode_product_category = new WCML_WC_Shortcode_Product_Category( $sitepress );
$wc_shortccode_product_category->add_hooks();
}
private function load_rest_api() {
$sitepress = getSitePress();
if ( class_exists( 'WooCommerce' ) && defined( 'WC_VERSION' ) && ! is_null( $sitepress ) && WCML\Rest\Functions::isRestApiRequest() ) {
WCML\Rest\Hooks::addHooks();
}
}
public function add_hooks() {
add_action( 'wpml_loaded', [ $this, 'load' ] );
add_action( 'init', [ $this, 'init' ], 2 );
}
public function load() {
do_action( 'wcml_loaded' );
}
public function init() {
global $wpdb, $woocommerce, $wpml_url_converter, $wpml_post_translations, $wpml_term_translations;
$sitepress = getSitePress();
$this->dependencies = make( WCML_Dependencies::class );
$this->dependencies_are_ok = $this->dependencies->check();
WCML_Admin_Menus::set_up_menus( $this, $sitepress, $wpdb );
if ( ! $this->dependencies_are_ok ) {
if ( is_admin() && AdminPages::isWcmlSettings() ) {
WCML_Capabilities::set_up_capabilities();
wp_enqueue_style( 'otgs-icons' );
WCML_Resources::load_management_css();
WCML_Resources::load_tooltip_resources();
}
return;
}
new WCML_Upgrade();
$actions_that_need_mc = [
'save-mc-options',
'wcml_save_currency',
'wcml_delete_currency',
'wcml_update_currency_lang',
'wcml_update_default_currency',
'wcml_price_preview',
'wcml_currencies_switcher_preview',
'wcml_currencies_switcher_save_settings',
'wcml_delete_currency_switcher',
'wcml_currencies_order',
'wcml_set_currency_mode',
'wcml_set_max_mind_key',
];
$this->cart = new WCML_Cart( $this, $sitepress, $woocommerce );
$this->compatibility = new WCML_Compatibility();
$this->compatibility->init_before_multicurrency();
$action = filter_input( INPUT_POST, 'action' );
if ( WCML_MULTI_CURRENCIES_INDEPENDENT === (int) $this->settings['enable_multi_currency']
|| AdminPages::isMultiCurrency()
|| ( in_array( $action, $actions_that_need_mc, true ) )
) {
$this->get_multi_currency();
$wcml_price_filters = new WCML_Price_Filter( $this );
$wcml_price_filters->add_hooks();
} else {
add_shortcode( 'currency_switcher', '__return_empty_string' );
}
$this->compatibility->init();
if ( isStandAlone() ) {
return $this->init_standalone( $sitepress, $wpdb );
} else {
return $this->init_full( $sitepress, $wpdb, $woocommerce, $wpml_url_converter, $wpml_post_translations, $wpml_term_translations );
}
}
private function init_full( $sitepress, $wpdb, $woocommerce, $wpml_url_converter, $wpml_post_translations, $wpml_term_translations ) {
$this->currencies = new WCML_Currencies( $this );
$this->currencies->add_hooks();
$this->sync_variations_data = new WCML_Synchronize_Variations_Data( $this, $sitepress, $wpdb );
if ( is_admin() || wpml_is_rest_request() ) {
$this->translation_editor = new WCML_Translation_Editor( $this, $sitepress, $wpdb );
$this->translation_editor->add_hooks();
$tp_support = new WCML_TP_Support( $this, $wpdb, new WPML_Element_Translation_Package(), $sitepress->get_setting( 'translation-management', [] ) );
$tp_support->add_hooks();
}
if ( is_admin() ) {
$this->sync_variations_data->add_hooks();
$this->troubleshooting = new WCML_Troubleshooting( $this, $sitepress, $wpdb );
$this->languages_upgrader = new WCML_Languages_Upgrader();
$this->wcml_products_screen = new WCML_Products_Screen_Options();
$this->wcml_products_screen->init();
$wcml_pointers = new WCML_Pointers();
$wcml_pointers->add_hooks();
}
$this->sync_product_data = new WCML_Synchronize_Product_Data( $this, $sitepress, $wpml_post_translations, $wpdb );
$this->sync_product_data->add_hooks();
$this->duplicate_product = new WCML_WC_Admin_Duplicate_Product( $this, $sitepress, $wpdb );
$this->products = new WCML_Products( $this, $sitepress, $wpml_post_translations, $wpdb );
$this->products->add_hooks();
$this->store = new WCML_Store_Pages( $this, $sitepress );
$this->store->add_hooks();
$this->strings = new WCML_WC_Strings( $this, $sitepress, $wpdb );
$this->strings->add_hooks();
// do not pass mailer instance instead of $woocommerce.
$this->emails = new WCML_Emails( $this->strings, $sitepress, $woocommerce, $wpdb );
$this->emails->add_hooks();
$this->terms = new WCML_Terms( $this, $sitepress, $wpdb );
$this->terms->add_hooks();
$this->attributes = new WCML_Attributes( $this, $sitepress, $wpml_post_translations, $wpml_term_translations, $wpdb );
$this->attributes->add_hooks();
$this->orders = new WCML_Orders( $this, $sitepress );
$this->shipping = new WCML_WC_Shipping( $sitepress, $this->strings );
$this->shipping->add_hooks();
$this->gateways = new WCML_WC_Gateways( $this, $sitepress );
$this->gateways->add_hooks();
$this->url_translation = new WCML_Url_Translation( $this, $sitepress, $wpdb );
$this->url_translation->set_up();
$this->endpoints = new WCML_Endpoints( $this, $sitepress, $wpdb );
$this->endpoints->add_hooks();
$this->requests = new WCML_Requests();
$this->cart->add_hooks(); // object is instantiated before.
$this->coupons = new WCML_Coupons( $this, $sitepress );
$this->coupons->add_hooks();
$this->locale = new WCML_Locale( $this, $sitepress );
$this->media = WCML\Media\Wrapper\Factory::create( $this );
$this->media->add_hooks();
$this->downloadable = new WCML_Downloadable_Products( $this, $sitepress );
$this->downloadable->add_hooks();
$this->page_builders = new WCML_Page_Builders( $sitepress );
$this->reports = new WCML_Reports();
$this->wcml_products_screen = new WCML_Products_Screen_Options();
$this->wcml_products_screen->init();
$this->cart_sync_warnings = new WCML_Cart_Sync_Warnings( $this, $sitepress );
$this->cart_sync_warnings->add_hooks();
$this->comments = new WCML_Comments( $this, $sitepress, $wpml_post_translations, $wpdb );
$this->comments->add_hooks();
if ( is_admin() ) {
$taxonomy_translation_link_filters = new WCML_Taxonomy_Translation_Link_Filters( $this->attributes );
$taxonomy_translation_link_filters->add_filters();
}
$payment_method_filter = new WCML_Payment_Method_Filter();
$payment_method_filter->add_hooks();
$wcml_ajax_setup = new WCML_Ajax_Setup( $sitepress );
$wcml_ajax_setup->add_hooks();
WCML_Install::initialize( $this, $sitepress );
WCML_Resources::set_up_resources( $this, $sitepress );
WCML_Resources::add_hooks();
$url_filters_redirect_location = new WCML_Url_Filters_Redirect_Location( $wpml_url_converter );
$url_filters_redirect_location->add_hooks();
add_action( 'wp_ajax_wcml_update_setting_ajx', [ $this, 'update_setting_ajx' ] );
$this->load_rest_api();
return true;
}
private function init_standalone( $sitepress, $wpdb ) {
$this->currencies = new WCML_Currencies( $this );
$this->currencies->add_hooks();
if ( is_admin() ) {
( new WCML_Pointers() )->add_hooks();
}
$this->products = new WCML_Products( $this, $sitepress, null, $wpdb );
$this->products->add_hooks();
$this->gateways = new WCML_WC_Gateways( $this, $sitepress );
$this->gateways->add_hooks();
$this->cart->add_hooks(); // object is instantiated before.
WCML_Locale::load_locale();
WCML_Install::initialize( $this, $sitepress );
WCML_Resources::set_up_resources( $this, $sitepress );
WCML_Resources::add_hooks();
add_action( 'wp_ajax_wcml_update_setting_ajx', [ $this, 'update_setting_ajx' ] );
return true;
}
/**
* Get settings
*
* @return mixed|void
*/
public function get_settings() {
$defaults = [
'file_path_sync' => 1,
'is_term_order_synced' => 0,
'enable_multi_currency' => WCML_MULTI_CURRENCIES_DISABLED,
'dismiss_doc_main' => 0,
'trnsl_interface' => 1,
'currency_options' => [],
'currency_switcher_product_visibility' => 1,
'dismiss_tm_warning' => 0,
'dismiss_cart_warning' => 0,
'cart_sync' => [
'lang_switch' => WCML_CART_SYNC,
'currency_switch' => WCML_CART_SYNC,
],
];
if ( empty( $this->settings ) ) {
$this->settings = get_option( '_wcml_settings', [] );
}
foreach ( $defaults as $key => $value ) {
if ( ! isset( $this->settings[ $key ] ) ) {
$this->settings[ $key ] = $value;
}
}
return $this->settings;
}
/**
* Get setting
*
* @param string $key
* @param null|string $fallback
*
* @return null|string|array
*/
public function get_setting( $key, $fallback = null ) {
if ( array_key_exists( $key, $this->settings ) ) {
return $this->settings[ $key ];
}
return get_option( 'wcml_' . $key, $fallback );
}
/**
* Update settings
*
* @param null|mixed $settings
*/
public function update_settings( $settings = null ) {
if ( ! is_null( $settings ) ) {
$this->settings = $settings;
}
update_option( '_wcml_settings', $this->settings );
}
/**
* @param string $key
* @param mixed $value
* @param bool|false $autoload It only applies to these settings stored as separate options.
*/
public function update_setting( $key, $value, $autoload = false ) {
if ( array_key_exists( $key, $this->settings ) ) {
$this->settings [ $key ] = $value;
$this->update_settings( $this->settings );
} else {
update_option( 'wcml_' . $key, $value, $autoload );
}
}
public function update_setting_ajx() {
$nonce = filter_input( INPUT_POST, 'nonce', FILTER_SANITIZE_FULL_SPECIAL_CHARS );
if ( ! $nonce || ! wp_verify_nonce( $nonce, 'wcml_settings' ) ) {
die( 'Invalid nonce' );
}
$data = $_POST;
$error = '';
$html = '';
$this->settings[ $data['setting'] ] = $data['value'];
$this->update_settings();
echo wp_json_encode(
[
'html' => $html,
'error' => $error,
]
);
exit;
}
/**
* Get latest stable version from WC readme.txt
*
* @return string
*/
public function get_stable_wc_version() {
$file = WC()->plugin_path() . '/readme.txt';
$values = file( $file );
$wc_info = explode( ':', $values[5] );
$version = '';
if ( 'Stable tag' === $wc_info[0] ) {
$version = trim( $wc_info[1] );
} else {
foreach ( $values as $value ) {
$wc_info = explode( ':', $value );
if ( 'Stable tag' === $wc_info[0] ) {
$version = trim( $wc_info[1] );
}
}
}
return $version;
}
/**
* Get supported WP version from readme.txt
*
* @return string
*/
public function get_supported_wp_version() {
$file = WCML_PLUGIN_PATH . '/readme.txt';
$values = file( $file );
$version = explode( ':', $values[6] );
if ( 'Tested up to' === $version[0] ) {
return $version[1];
}
foreach ( $values as $value ) {
$version = explode( ':', $value );
if ( 'Tested up to' === $version[0] ) {
return $version[1];
}
}
return '';
}
/**
* @return array
*/
public function get_wc_query_vars() {
return WooCommerce::instance()->query->query_vars;
}
/**
* @return WCML_Multi_Currency
*/
public function get_multi_currency() {
if ( ! isset( $this->multi_currency ) ) {
$this->multi_currency = make( WCML_Multi_Currency::class );
}
return $this->multi_currency;
}
/**
* @return string
*/
public function version() {
return get_option( '_wcml_version' );
}
/**
* @return string
*/
public function plugin_url() {
return WCML_PLUGIN_URL;
}
/**
* @return string
*/
public function js_min_suffix() {
return WCML_JS_MIN;
}
/**
* @return bool
*/
public function is_wpml_prior_4_2() {
$sitepress = getSitePress();
return $sitepress->get_wp_api()->version_compare( $this->get_constant( 'ICL_SITEPRESS_VERSION' ), '4.2.0', '<' ) ||
$sitepress->get_wp_api()->version_compare( $this->get_constant( 'WPML_TM_VERSION' ), '2.8.0', '<' );
}
/**
* @param string $name
*
* @return int|string
*/
private function get_constant( $name ) {
return getSitePress()->get_wp_api()->constant( $name );
}
}