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
CachePlugins.php
79 lines
| 1 | <?php |
| 2 | |
| 3 | namespace WCML\AdminNotices; |
| 4 | |
| 5 | use WPML\FP\Fns; |
| 6 | use WPML\FP\Logic; |
| 7 | use WPML\FP\Obj; |
| 8 | use WPML\FP\Str; |
| 9 | use function WPML\FP\pipe; |
| 10 | |
| 11 | class CachePlugins implements \IWPML_Backend_Action, \IWPML_DIC_Action { |
| 12 | |
| 13 | const NOTICE_ID = 'wcml-cache-plugins'; |
| 14 | |
| 15 | private $notices; |
| 16 | |
| 17 | public function __construct( \WPML_Notices $notices ) { |
| 18 | $this->notices = $notices; |
| 19 | } |
| 20 | |
| 21 | public function add_hooks() { |
| 22 | if ( |
| 23 | wcml_is_multi_currency_on() |
| 24 | && ! $this->notices->get_notice( self::NOTICE_ID ) |
| 25 | && self::hasActiveCachePlugin() |
| 26 | ) { |
| 27 | add_action( 'admin_init', [ $this, 'addNotice' ] ); |
| 28 | } |
| 29 | } |
| 30 | |
| 31 | public function addNotice() { |
| 32 | $text = '<h2>' . esc_html__( 'WPML Multilingual & Multicurrency for WooCommerce detected an active cache plugin on your site.', 'woocommerce-multilingual' ) . '</h2>'; |
| 33 | $text .= '<p>' . esc_html__( 'Caching may cause currency display issues for your customers if you are using the multicurrency feature.', 'woocommerce-multilingual' ) . '</p>'; |
| 34 | $text .= '<p>' . esc_html__( 'To avoid this, set your cache plugin to not cache pages for visitors that have a cookie set in their browser.', 'woocommerce-multilingual' ) . '</p>'; |
| 35 | |
| 36 | $notice = $this->notices->create_notice( self::NOTICE_ID, $text ); |
| 37 | $notice->set_css_class_types( 'notice-warning' ); |
| 38 | $notice->set_restrict_to_screen_ids( RestrictedScreens::get() ); |
| 39 | $notice->set_dismissible( true ); |
| 40 | |
| 41 | $this->notices->add_notice( $notice ); |
| 42 | } |
| 43 | |
| 44 | private static function hasActiveCachePlugin() { |
| 45 | if ( ! function_exists( 'is_plugin_active' ) ) { |
| 46 | include_once ABSPATH . 'wp-admin/includes/plugin.php'; |
| 47 | } |
| 48 | |
| 49 | $isActive = pipe( |
| 50 | Fns::nthArg( 1 ), |
| 51 | 'is_plugin_active' |
| 52 | ); |
| 53 | |
| 54 | $isAboutCaching = pipe( |
| 55 | Obj::prop( 'Description' ), |
| 56 | Logic::anyPass( |
| 57 | [ |
| 58 | Str::includes( 'cache' ), |
| 59 | Str::includes( 'caching' ), |
| 60 | ] |
| 61 | ) |
| 62 | ); |
| 63 | |
| 64 | $isHandled = function( $plugin ) { |
| 65 | return in_array( |
| 66 | $plugin['Name'], |
| 67 | apply_filters( 'wcml_multicurrency_supported_cache_plugins', [] ), |
| 68 | true |
| 69 | ); |
| 70 | }; |
| 71 | |
| 72 | return (bool) wpml_collect( get_plugins() ) |
| 73 | ->filter( $isActive ) |
| 74 | ->filter( $isAboutCaching ) |
| 75 | ->reject( $isHandled ) |
| 76 | ->first(); |
| 77 | } |
| 78 | } |
| 79 |