Files
piratepoet/mailpoet/lib/Newsletter/Renderer/PostProcess/OpenTracking.php
Rostislav Wolny 019c1a6e44 Improve fix for amp in links and move it to renderer
- The fix addresses the issue that we can't have &amp in a link because it breaks it.
- By moving the fix to renderer post-process the fix is applied also for sites
that have tracking disabled
- The fix is now targeted only to href attributes in anchor tags
[MAILPOET-6433]
2025-01-21 15:02:49 +01:00

49 lines
1.5 KiB
PHP

<?php // phpcs:ignore SlevomatCodingStandard.TypeHints.DeclareStrictTypes.DeclareStrictTypesMissing
namespace MailPoet\Newsletter\Renderer\PostProcess;
use MailPoet\Newsletter\Links\Links;
use MailPoet\Newsletter\Renderer\Renderer;
use MailPoet\Util\pQuery\pQuery;
use MailPoet\WP\Functions as WPFunctions;
class OpenTracking {
public static function process($template) {
$DOM = new pQuery();
$DOM = $DOM->parseStr($template);
$template = $DOM->select('body');
// url is a temporary data tag that will be further replaced with
// the proper track API URL during sending
$url = Links::DATA_TAG_OPEN;
$openTrackingImage = sprintf(
'<img alt="" class="" src="%s"/>',
$url
);
self::appendToDomNodes($template, $openTrackingImage);
return $DOM->__toString();
}
public static function addTrackingImage() {
WPFunctions::get()->addFilter(Renderer::FILTER_POST_PROCESS, function ($template) {
return OpenTracking::process($template);
});
return true;
}
private static function appendToDomNodes($template, $openTrackingImage): void {
// Preserve backward compatibility with pQuery::html()
// by processing an array of DomNodes
if (!empty($template)) {
$template = is_array($template) ? $template : [$template];
array_map(
function ($item) use ($openTrackingImage) {
$itemHtml = $item->toString(true, true, 1);
$item->html($itemHtml . $openTrackingImage);
return $item;
},
$template
);
}
}
}