Uses queue ID when fetching newsletter link by hash
This commit is contained in:
@@ -166,13 +166,15 @@ class Links {
|
||||
}
|
||||
}
|
||||
|
||||
static function convertHashedLinksToShortcodesAndUrls($content, $convert_all = false) {
|
||||
static function convertHashedLinksToShortcodesAndUrls($content, $queue_id, $convert_all = false) {
|
||||
preg_match_all(self::getLinkRegex(), $content, $links);
|
||||
$links = array_unique(Helpers::flattenArray($links));
|
||||
foreach($links as $link) {
|
||||
$link_hash = explode('-', $link);
|
||||
if(!isset($link_hash[1])) continue;
|
||||
$newsletter_link = NewsletterLink::getByHash($link_hash[1]);
|
||||
$newsletter_link = NewsletterLink::where('hash', $link_hash[1])
|
||||
->where('queue_id', $queue_id)
|
||||
->findOne();
|
||||
// convert either only link shortcodes or all hashes links if "convert all"
|
||||
// option is specified
|
||||
if($newsletter_link &&
|
||||
|
@@ -31,6 +31,7 @@ class ViewInBrowser {
|
||||
if($wp_user_preview && preg_match(Links::getLinkRegex(), $newsletter_body)) {
|
||||
$newsletter_body = Links::convertHashedLinksToShortcodesAndUrls(
|
||||
$newsletter_body,
|
||||
$queue_id = $queue->id,
|
||||
$convert_all = true
|
||||
);
|
||||
// remove open tracking link
|
||||
|
@@ -49,8 +49,8 @@ class Track {
|
||||
Newsletter::findOne($data->queue->newsletter_id) :
|
||||
false;
|
||||
if(!empty($data->link_hash)) {
|
||||
$data->link = NewsletterLink::where('queue_id', $data->queue_id)
|
||||
->where('hash', $data->link_hash)
|
||||
$data->link = NewsletterLink::where('hash', $data->link_hash)
|
||||
->where('queue_id', $data->queue_id)
|
||||
->findOne();
|
||||
}
|
||||
return $this->_validateTrackData($data);
|
||||
|
@@ -159,38 +159,40 @@ class LinksTest extends MailPoetTest {
|
||||
|
||||
function testItCanConvertOnlyHashedLinkShortcodes() {
|
||||
// create newsletter link association
|
||||
$queue_id = 1;
|
||||
$newsletter_link = NewsletterLink::create();
|
||||
$newsletter_link->newsletter_id = 1;
|
||||
$newsletter_link->queue_id = 1;
|
||||
$newsletter_link->queue_id = $queue_id;
|
||||
$newsletter_link->hash = '90e56';
|
||||
$newsletter_link->url = '[link:newsletter_view_in_browser_url]';
|
||||
$newsletter_link = $newsletter_link->save();
|
||||
$content = '
|
||||
<a href="[mailpoet_click_data]-90e56">View in browser</a>
|
||||
<a href="[mailpoet_click_data]-123">Some link</a>';
|
||||
$result = Links::convertHashedLinksToShortcodesAndUrls($content);
|
||||
$result = Links::convertHashedLinksToShortcodesAndUrls($content, $queue_id);
|
||||
expect($result)->contains($newsletter_link->url);
|
||||
expect($result)->contains('[mailpoet_click_data]-123');
|
||||
}
|
||||
|
||||
function testItCanConvertAllHashedLinksToUrls() {
|
||||
// create newsletter link associations
|
||||
$queue_id = 1;
|
||||
$newsletter_link_1 = NewsletterLink::create();
|
||||
$newsletter_link_1->newsletter_id = 1;
|
||||
$newsletter_link_1->queue_id = 1;
|
||||
$newsletter_link_1->queue_id = $queue_id;
|
||||
$newsletter_link_1->hash = '90e56';
|
||||
$newsletter_link_1->url = '[link:newsletter_view_in_browser_url]';
|
||||
$newsletter_link_1 = $newsletter_link_1->save();
|
||||
$newsletter_link_2 = NewsletterLink::create();
|
||||
$newsletter_link_2->newsletter_id = 1;
|
||||
$newsletter_link_2->queue_id = 1;
|
||||
$newsletter_link_2->queue_id = $queue_id;
|
||||
$newsletter_link_2->hash = '123';
|
||||
$newsletter_link_2->url = 'http://google.com';
|
||||
$newsletter_link_2 = $newsletter_link_2->save();
|
||||
$content = '
|
||||
<a href="[mailpoet_click_data]-90e56">View in browser</a>
|
||||
<a href="[mailpoet_click_data]-123">Some link</a>';
|
||||
$result = Links::convertHashedLinksToShortcodesAndUrls($content, $convert_all = true);
|
||||
$result = Links::convertHashedLinksToShortcodesAndUrls($content, $queue_id, $convert_all = true);
|
||||
expect($result)->contains($newsletter_link_1->url);
|
||||
expect($result)->contains($newsletter_link_2->url);
|
||||
}
|
||||
|
@@ -121,6 +121,31 @@ class TrackTest extends MailPoetTest {
|
||||
expect($processed_data->link->id)->equals($this->link->id);
|
||||
}
|
||||
|
||||
function testItGetsProperHashWhenDuplicateHashesExist() {
|
||||
// create another queue
|
||||
$queue = SendingQueue::create();
|
||||
$queue->id = 123;
|
||||
$queue->newsletter_id = $this->newsletter->id;
|
||||
$queue->subscribers = array('processed' => array($this->subscriber->id));
|
||||
$queue->save();
|
||||
$track_data = $this->track_data;
|
||||
$track_data['queue_id'] = $queue->id;
|
||||
// create another link with the same hash but different queue ID
|
||||
$link = NewsletterLink::create();
|
||||
$link->hash = $this->link->hash;
|
||||
$link->url = $this->link->url;
|
||||
$link->newsletter_id = $track_data['newsletter_id'];
|
||||
$link->queue_id = $track_data['queue_id'];
|
||||
$link = $link->save();
|
||||
// assert that 2 links with identical hash exist
|
||||
$newsletter_link = NewsletterLink::where('hash', $link->hash)->findMany();
|
||||
expect($newsletter_link)->count(2);
|
||||
|
||||
// assert that the fetched link ID belong to the newly created link
|
||||
$processed_data = $this->track->_processTrackData($track_data);
|
||||
expect($processed_data->link->id)->equals($link->id);
|
||||
}
|
||||
|
||||
function _after() {
|
||||
ORM::raw_execute('TRUNCATE ' . Newsletter::$_table);
|
||||
ORM::raw_execute('TRUNCATE ' . Subscriber::$_table);
|
||||
|
Reference in New Issue
Block a user