File: /var/www/dinamo-shop/wp-content/plugins/woocommerce-multilingual/classes/COT/Notice.php
<?php
namespace WCML\COT;
use WPML\LIB\WP\Hooks as WPHooks;
use WCML\StandAlone\IStandAloneAction;
use WPML_Notices;
class Notice implements \IWPML_Backend_Action, \IWPML_DIC_Action, IStandAloneAction {
	const NOTICE_GROUP = 'wcml-admin-notices';
	const NOTICE_ID    = 'hpos-sync-disabled';
	/**
	 * @var WPML_Notices
	 */
	private $wpmlNotices;
	/**
	 * @param WPML_Notices $wpmlNotices
	 */
	public function __construct( WPML_Notices $wpmlNotices ) {
		$this->wpmlNotices = $wpmlNotices;
	}
	public function add_hooks() {
		WPHooks::onAction( 'admin_init' )->then( [ $this, 'AddOrRemoveNotice' ] );
	}
	public function AddOrRemoveNotice() {
		$isFeatureEnabled = 'yes' === get_option( 'woocommerce_custom_orders_table_enabled' );
		$isSyncEnabled    = 'yes' === get_option( 'woocommerce_custom_orders_table_data_sync_enabled' );
		if ( $isFeatureEnabled && ! $isSyncEnabled ) {
			$this->addNotice();
		} else {
			$this->removeNotice();
		}
	}
	private function addNotice() {
		$notice = $this->wpmlNotices->get_new_notice( self::NOTICE_ID, $this->getNoticeText(), self::NOTICE_GROUP );
		$notice->set_css_class_types( 'error' );
		/**
		 * Enabling sync is handled by WooCommerce directly:
		 *
		 * @see https://github.com/woocommerce/woocommerce/blob/trunk/plugins/woocommerce/src/Internal/Features/FeaturesController.php#L1225
		 */
		$syncButtonLink = add_query_arg( [
			'woocommerce_custom_orders_table_data_sync_enabled' => 1,
			'_feature_nonce'                                    => wp_create_nonce( 'change_feature_enable' ),
		] );
		$syncButton = $this->wpmlNotices->get_new_notice_action( esc_html__( 'Enable compatibility mode', 'woocommerce-multilingual' ), $syncButtonLink, false, false, true );
		$notice->add_action( $syncButton );
		$notice->set_restrict_to_screen_ids( $this->getRestrictedScreens() );
		$notice->add_capability_check( [ 'manage_options', 'wpml_manage_woocommerce_multilingual' ] );
		$this->wpmlNotices->add_notice( $notice );
	}
	private function removeNotice() {
		if ( $this->wpmlNotices->get_notice( self::NOTICE_ID, self::NOTICE_GROUP ) ) {
			$this->wpmlNotices->remove_notice( self::NOTICE_GROUP, self::NOTICE_ID );
		}
	}
	/**
	 * @return string
	 */
	private function getNoticeText() {
		$text  = '<h2>';
		$text .= esc_html__( 'WCML 5.2.1 and below requires compatibility mode to work with the new way WooCommerce stores orders', 'woocommerce-multilingual' );
		$text .= '</h2>';
		$text .= '<p>';
		$text .= esc_html__( 'We will soon provide an update. In the meantime, to view Analytics and Reports by language, click below to enable compatibility mode.', 'woocommerce-multilingual' );
		$text .= '</p>';
		$text .= '<p><a href="https://wpml.org/compatibility/2023/10/woocommerce-multilingual-5-2-1-compatibility-fix/">';
		$text .= esc_html__( 'Learn more about this issue', 'woocommerce-multilingual' );
		$text .= '</a></p>';
		return $text;
	}
	/**
	 * @return string[]
	 */
	private function getRestrictedScreens() {
		return [
			'dashboard',
			'plugins',
			'woocommerce_page_wc-settings',
			'woocommerce_page_wpml-wcml',
			'woocommerce_page_wc-admin',
			'woocommerce_page_wc-reports',
		];
	}
}