Fix shortcode being URL encoded

[MAILPOET-2540]
This commit is contained in:
Amine Ben hammou
2019-11-20 10:39:24 +01:00
committed by Jack Kitterhing
parent 56c0eb8cba
commit 5ca9b6f520
2 changed files with 25 additions and 8 deletions

View File

@ -44,11 +44,7 @@ class GATracking {
private function addParams($extracted_links, $ga_campaign, $internal_host = null) {
$processed_links = [];
$params = [
'utm_source' => 'mailpoet',
'utm_medium' => 'email',
'utm_campaign' => urlencode($ga_campaign),
];
$params = 'utm_source=mailpoet&utm_medium=email&utm_campaign=' . urlencode($ga_campaign);
$internal_host = $internal_host ?: parse_url(home_url(), PHP_URL_HOST);
$internal_host = $this->secondLevelDomainNames->get($internal_host);
foreach ($extracted_links as $extracted_link) {
@ -58,7 +54,9 @@ class GATracking {
// Process only internal links (i.e. pointing to current site)
continue;
}
$processed_link = WPFunctions::get()->addQueryArg($params, $extracted_link['link']);
list($path, $search, $hash) = $this->splitLink($extracted_link['link']);
$search = empty($search) ? $params : $search . '&' . $params;
$processed_link = $path . '?' . $search . ($hash ? '#' . $hash : '');
$link = $extracted_link['link'];
$processed_links[$link] = [
'type' => $extracted_link['type'],
@ -68,4 +66,13 @@ class GATracking {
}
return $processed_links;
}
private function splitLink($link) {
$parts = explode('#', $link);
$hash = implode('#', array_slice($parts, 1));
$parts = explode('?', $parts[0]);
$path = $parts[0];
$search = implode('?', array_slice($parts, 1));
return [$path, $search, $hash];
}
}

View File

@ -23,8 +23,8 @@ class GATrackingTest extends \MailPoetTest {
$this->ga_campaign = 'Spring email';
$this->link = add_query_arg(['foo' => 'bar', 'baz' => 'xyz'], 'http://www.mailpoet.com/');
$this->rendered_newsletter = [
'html' => '<p><a href="' . $this->link . '">Click here</a>. <a href="http://somehost.com/fff/?abc=123">Do not process this</a> [link:some_link_shortcode]</p>',
'text' => '[Click here](' . $this->link . '). [Do not process this](http://somehost.com/fff/?abc=123) [link:some_link_shortcode]',
'html' => '<p><a href="' . $this->link . '">Click here</a>. <a href="http://somehost.com/fff/?abc=123&email=[subscriber:email]">Do not process this</a> [link:some_link_shortcode]</p>',
'text' => '[Click here](' . $this->link . '). [Do not process this](http://somehost.com/fff/?abc=123&email=[subscriber:email]) [link:some_link_shortcode]',
];
}
@ -69,6 +69,16 @@ class GATrackingTest extends \MailPoetTest {
expect($result['html'])->contains('utm_campaign=' . urlencode($this->ga_campaign));
}
function testItKeepsShorcodes() {
$tracking = new GATracking();
$newsletter = Newsletter::createOrUpdate([
'ga_campaign' => $this->ga_campaign,
]);
$result = $tracking->applyGATracking($this->rendered_newsletter, $newsletter, $this->internal_host);
expect($result['text'])->contains('email=[subscriber:email]');
expect($result['html'])->contains('email=[subscriber:email]');
}
function _after() {
\ORM::raw_execute('TRUNCATE ' . Newsletter::$_table);
}