diff --git a/lib/Util/Notices/DeprecatedShortcodeNotice.php b/lib/Util/Notices/DeprecatedShortcodeNotice.php
new file mode 100644
index 0000000000..9021e6ac35
--- /dev/null
+++ b/lib/Util/Notices/DeprecatedShortcodeNotice.php
@@ -0,0 +1,61 @@
+isUsingDeprecatedShortcode()) {
+ return $this->display();
+ }
+ return null;
+ }
+
+ public function isUsingDeprecatedShortcode() {
+ global $wp_filter;// phpcs:ignore Squiz.NamingConventions.ValidVariableName.NotCamelCaps
+ $hook = 'mailpoet_newsletter_shortcode';
+ if (empty($wp_filter[$hook])) return false;// phpcs:ignore Squiz.NamingConventions.ValidVariableName.NotCamelCaps
+ $callbacks = $wp_filter[$hook];// phpcs:ignore Squiz.NamingConventions.ValidVariableName.NotCamelCaps
+ if (empty($callbacks->callbacks) || !is_array($callbacks->callbacks)) return false;
+ foreach ($callbacks->callbacks as $callbackByPriority) {
+ if (empty($callbackByPriority) || !is_array($callbackByPriority)) continue;
+ foreach ($callbackByPriority as $callback) {
+ if (!is_array($callback)) return true;// this is not our callback
+ if (empty($callback['function']) || !is_array($callback['function'])) return true; // not our callback
+ if (isset($callback['function'][1]) && $callback['function'][1] === 'handleOrderTotalShortcode') continue;
+ if (isset($callback['function'][1]) && $callback['function'][1] === 'handleOrderDateShortcode') continue;
+ return true;
+ }
+ }
+ }
+
+ public function display() {
+ $errorString = __('MailPoet recently changed how custom email shortcodes work, you may need to update your custom shortcodes.', 'mailpoet');
+ $getInTouchString = __('[link]See the documentation for necessary changes[/link]', 'mailpoet');
+ $error = Helpers::replaceLinkTags($errorString, 'https://kb.mailpoet.com/article/160-create-a-custom-shortcode', [
+ 'target' => '_blank',
+ 'data-beacon-article' => '581f6faac697914aa838044f',
+ ]);
+ $error .= '
' . Helpers::replaceLinkTags($getInTouchString, 'https://www.mailpoet.com/let-us-handle-your-php-upgrade/', [
+ 'target' => '_blank',
+ 'class' => 'mailpoet-button mailpoet-button-small',
+ ]);
+
+ $extraClasses = 'mailpoet-dismissible-notice is-dismissible';
+
+ return Notice::displayWarning($error, $extraClasses, self::OPTION_NAME);
+ }
+
+ public function disable() {
+ WPFunctions::get()->setTransient(self::OPTION_NAME, true, self::DISMISS_NOTICE_TIMEOUT_SECONDS);
+ }
+}
diff --git a/lib/Util/Notices/PermanentNotices.php b/lib/Util/Notices/PermanentNotices.php
index 3c44ef2aff..2ac94110ba 100644
--- a/lib/Util/Notices/PermanentNotices.php
+++ b/lib/Util/Notices/PermanentNotices.php
@@ -32,6 +32,9 @@ class PermanentNotices {
/** @var HeadersAlreadySentNotice */
private $headersAlreadySentNotice;
+ /** @var DeprecatedShortcodeNotice */
+ private $deprecatedShortcodeNotice;
+
public function __construct(WPFunctions $wp) {
$this->wp = $wp;
$this->phpVersionWarnings = new PHPVersionWarnings();
@@ -41,6 +44,7 @@ class PermanentNotices {
$this->inactiveSubscribersNotice = new InactiveSubscribersNotice(SettingsController::getInstance(), $wp);
$this->blackFridayNotice = new BlackFridayNotice();
$this->headersAlreadySentNotice = new HeadersAlreadySentNotice(SettingsController::getInstance(), $wp);
+ $this->deprecatedShortcodeNotice = new DeprecatedShortcodeNotice();
}
public function init() {
@@ -75,6 +79,9 @@ class PermanentNotices {
$this->headersAlreadySentNotice->init(
Menu::isOnMailPoetAdminPage($excludeWizard)
);
+ $this->deprecatedShortcodeNotice->init(
+ Menu::isOnMailPoetAdminPage($excludeWizard)
+ );
}
public function ajaxDismissNoticeHandler() {
@@ -95,6 +102,9 @@ class PermanentNotices {
case (InactiveSubscribersNotice::OPTION_NAME):
$this->inactiveSubscribersNotice->disable();
break;
+ case (DeprecatedShortcodeNotice::OPTION_NAME):
+ $this->deprecatedShortcodeNotice->disable();
+ break;
}
}
}