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
MultiCurrencyMissing.php
64 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 MultiCurrencyMissing implements \IWPML_Backend_Action, \IWPML_DIC_Action { |
| 10 | |
| 11 | const NOTICE_ID = 'wcml-multi-currency-missing'; |
| 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 = $this->hasOneUniqueCurrency(); |
| 31 | |
| 32 | if ( $needsNotice && ! $notice ) { |
| 33 | $this->addNotice(); |
| 34 | } elseif ( ! $needsNotice && $notice ) { |
| 35 | $this->removeNotice(); |
| 36 | } |
| 37 | } |
| 38 | |
| 39 | private function addNotice() { |
| 40 | $text = '<h2>' . esc_html__( "You haven't added any secondary currencies", 'woocommerce-multilingual' ) . '</h2>'; |
| 41 | $text .= '<p>' . esc_html__( "Please add another currency to fully utilize multicurrency mode. If you do not need multiple currencies, you can disable this setting to improve your site's performance.", 'woocommerce-multilingual' ) . '</p>'; |
| 42 | $text .= sprintf('<a href="%s">%s</a>', |
| 43 | \WCML\Utilities\AdminUrl::getMultiCurrencyTab(), |
| 44 | esc_html__( 'Configure multicurrency mode', 'woocommerce-multilingual' ) |
| 45 | ); |
| 46 | |
| 47 | $notice = $this->notices->create_notice( self::NOTICE_ID, $text ); |
| 48 | $notice->set_css_class_types( 'notice-warning' ); |
| 49 | $notice->set_restrict_to_screen_ids( RestrictedScreens::get() ); |
| 50 | $notice->set_dismissible( true ); |
| 51 | |
| 52 | $this->notices->add_notice( $notice ); |
| 53 | } |
| 54 | |
| 55 | private function removeNotice() { |
| 56 | $notice = $this->notices->get_notice( self::NOTICE_ID ); |
| 57 | $this->notices->remove_notice( $notice->get_group(), $notice->get_id() ); |
| 58 | } |
| 59 | |
| 60 | private function hasOneUniqueCurrency() { |
| 61 | return count( (array) Obj::path( [ 'settings', 'currency_options' ], $this->wcml ) ) <= 1; |
| 62 | } |
| 63 | } |
| 64 |