CachePlugins.php
1 week ago
CurrencySwitcherUseTwigTemplate.php
1 week ago
ExportImport.php
1 week ago
MultiCurrencyMissing.php
1 week ago
RestrictedScreens.php
1 week ago
Review.php
1 week ago
TranslationControlMovedNotice.php
1 week ago
WizardNotice.php
1 week ago
CurrencySwitcherUseTwigTemplate.php
85 lines
| 1 | <?php |
| 2 | |
| 3 | namespace WCML\AdminNotices; |
| 4 | |
| 5 | use woocommerce_wpml; |
| 6 | use WPML\FP\Obj; |
| 7 | use WPML_Notices; |
| 8 | |
| 9 | class CurrencySwitcherUseTwigTemplate implements \IWPML_Backend_Action, \IWPML_DIC_Action { |
| 10 | |
| 11 | const NOTICE_ID = 'wcml-multi-currency-currency-switcher-php-template-missing4'; |
| 12 | |
| 13 | private $wcml; |
| 14 | |
| 15 | private $notices; |
| 16 | |
| 17 | public function __construct( woocommerce_wpml $wcml, WPML_Notices $notices ) { |
| 18 | $this->wcml = $wcml; |
| 19 | $this->notices = $notices; |
| 20 | } |
| 21 | |
| 22 | public function add_hooks() { |
| 23 | if ( wcml_is_multi_currency_on() ) { |
| 24 | add_action( 'admin_init', [ $this, 'initNotice' ] ); |
| 25 | } |
| 26 | } |
| 27 | |
| 28 | public function initNotice() { |
| 29 | $notice = $this->notices->get_notice( self::NOTICE_ID ); |
| 30 | $needsNotice = wcml_is_multi_currency_on() && $this->hasUniqueCurrency(); |
| 31 | |
| 32 | if ( $needsNotice && ! $notice ) { |
| 33 | add_action( 'wpml_currency_switcher_uses_twig_templates', [ $this, 'addNotice' ] ); |
| 34 | } elseif ( ! $needsNotice && ( $notice instanceof \WPML_Notice ) ) { |
| 35 | $this->removeNotice( $notice ); |
| 36 | } |
| 37 | } |
| 38 | |
| 39 | public function addNotice( string $templateSlug ) { |
| 40 | $activeTemplateNames = array_keys( $this->wcml->cs_templates->get_active_templates() ); |
| 41 | if ( ! in_array( $templateSlug, $activeTemplateNames, true ) ) { |
| 42 | return; |
| 43 | } |
| 44 | |
| 45 | $text = '<h2>' . esc_html__( 'Important: Action Needed for Your Currency Switcher', 'woocommerce-multilingual' ) . '</h2>'; |
| 46 | $text .= '<p>' . esc_html__( 'We detected that your site is using a Currency Switcher built with Twig templates. For security reasons, support for Twig-based templates will be discontinued in the upcoming version of WPML Multilingual & Multicurrency for WooCommerce 5.6.', 'woocommerce-multilingual' ) . '</p>'; |
| 47 | $text .= '<p>' . esc_html__( 'To ensure your Currency Switcher continues working smoothly:', 'woocommerce-multilingual' ) . '</p>'; |
| 48 | |
| 49 | $text .= '<ul>'; |
| 50 | $text .= '<li>'; |
| 51 | $text .= sprintf( |
| 52 | /* translators: %1$s and %2$s are opening and closing HTML link tags */ |
| 53 | esc_html__( '- Switch to a PHP-based template - you can select one from the %1$sconfiguration page%2$s.', 'woocommerce-multilingual' ), |
| 54 | '<a href="' . \WCML\Utilities\AdminUrl::getMultiCurrencyTab( 'currency-switcher-product' ) . '">', |
| 55 | '</a>' |
| 56 | ); |
| 57 | $text .= '</li>'; |
| 58 | $text .= '<li>'; |
| 59 | $text .= sprintf( |
| 60 | /* translators: %1$s and %2$s are opening and closing HTML link tags */ |
| 61 | esc_html__( '- Need a custom solution? %1$sContact our support%2$s - we’re here to help you migrate safely.', 'woocommerce-multilingual' ), |
| 62 | '<a href="' . \WCML_Tracking_Link::getWpmlSupport() . '">', |
| 63 | '</a>' |
| 64 | ); |
| 65 | $text .= '</li>'; |
| 66 | $text .= '</ul>'; |
| 67 | $text .= '<p>' . esc_html__( 'We recommend updating your Currency Switcher as soon as possible to avoid disruptions when the new version of WPML Multilingual & Multicurrency for WooCommerce is released.', 'woocommerce-multilingual' ) . '</p>'; |
| 68 | |
| 69 | $notice = $this->notices->create_notice( self::NOTICE_ID, $text ); |
| 70 | $notice->set_css_class_types( 'notice-warning' ); |
| 71 | $notice->set_restrict_to_screen_ids( RestrictedScreens::get() ); |
| 72 | $notice->set_dismissible( true ); |
| 73 | |
| 74 | $this->notices->add_notice( $notice ); |
| 75 | } |
| 76 | |
| 77 | private function removeNotice( \WPML_Notice $notice ) { |
| 78 | $this->notices->remove_notice( $notice->get_group(), $notice->get_id() ); |
| 79 | } |
| 80 | |
| 81 | private function hasUniqueCurrency(): bool { |
| 82 | return count( (array) Obj::path( [ 'settings', 'currency_options' ], $this->wcml ) ) >= 1; |
| 83 | } |
| 84 | } |
| 85 |