From 1031ab5071c6b2b2cacf7a767339b21f59d5d9fc Mon Sep 17 00:00:00 2001 From: Bob Silvern Date: Thu, 4 Jul 2024 23:23:10 -0700 Subject: [PATCH] dev/core#5331 Fix tracking URL not modified --- CRM/Mailing/BAO/MailingTrackableURL.php | 27 +++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/CRM/Mailing/BAO/MailingTrackableURL.php b/CRM/Mailing/BAO/MailingTrackableURL.php index d2b24902e7f4..cc943472a73e 100644 --- a/CRM/Mailing/BAO/MailingTrackableURL.php +++ b/CRM/Mailing/BAO/MailingTrackableURL.php @@ -60,19 +60,34 @@ private static function getBasicTrackerURL($url, $mailing_id, $queue_id) { $hrefExists = FALSE; - $tracker = new CRM_Mailing_BAO_MailingTrackableURL(); if (preg_match('/^href/i', $url)) { $url = preg_replace('/^href[ ]*=[ ]*[\'"](.*?)[\'"]$/i', '$1', $url); $hrefExists = TRUE; } - $tracker->url = $url; - $tracker->mailing_id = $mailing_id; - - if (!$tracker->find(TRUE)) { + $turl = CRM_Utils_Type::escape(CRM_Mailing_BAO_MailingTrackableURL::getTableName(), 'MysqlColumnNameOrAlias'); + + // search for an existing identical url using the BINARY operator to avoid + // matching an entry which differs only by case or by trailing whitespace + $search = CRM_Core_DAO::executeQuery( + "SELECT `url`, `id` FROM $turl + WHERE BINARY $turl.`url` = %1 AND $turl.`mailing_id` = %2", + [ + 1 => [$url, 'String'], + 2 => [$mailing_id, 'Integer'], + ] + ); + + if (!$search->fetch()) { + $tracker = new CRM_Mailing_BAO_MailingTrackableURL(); + $tracker->url = $url; + $tracker->mailing_id = $mailing_id; $tracker->save(); + $id = $tracker->id; + } + else { + $id = $search->id; } - $id = $tracker->id; $redirect = CRM_Utils_System::externUrl('extern/url', "u=$id"); $urlCache[$mailing_id . $url] = $redirect;