From abf4cee05386ea6e8c92d0803aa0ab2942eae036 Mon Sep 17 00:00:00 2001 From: Seamus Lee Date: Thu, 29 Jun 2017 05:20:38 +0000 Subject: [PATCH] CRM-20789 Fix unsubscribing when link comes from an AB Test CRM-20789 Fix retrieving entity when in AB test context --- CRM/Mailing/Event/BAO/Unsubscribe.php | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/CRM/Mailing/Event/BAO/Unsubscribe.php b/CRM/Mailing/Event/BAO/Unsubscribe.php index a549fcdafa..ee7b45137c 100644 --- a/CRM/Mailing/Event/BAO/Unsubscribe.php +++ b/CRM/Mailing/Event/BAO/Unsubscribe.php @@ -149,6 +149,8 @@ WHERE email = %2 $group = $groupObject->getTableName(); $gcObject = new CRM_Contact_BAO_GroupContact(); $gc = $gcObject->getTableName(); + $abObject = new CRM_Mailing_DAO_MailingAB(); + $ab = $abObject->getTableName(); //We Need the mailing Id for the hook... $do->query("SELECT $job.mailing_id as mailing_id @@ -157,6 +159,23 @@ WHERE email = %2 $do->fetch(); $mailing_id = $do->mailing_id; $entity = CRM_Core_DAO::getFieldValue('CRM_Mailing_DAO_MailingGroup', $mailing_id, 'entity_table', 'mailing_id'); + + // If $entity is null then most likely we are dealing with an AB test + if (empty($entity)) { + $mailing_id_a = CRM_Core_DAO::getFieldValue('CRM_Mailing_DAO_MailingAB', $mailing_id, 'mailing_id_a', 'mailing_id_b'); + $field = 'mailing_id_b'; + if (empty($mailing_id_a)) { + $mailing_id_a = CRM_Core_DAO::getFieldValue('CRM_Mailing_DAO_MailingAB', $mailing_id, 'mailing_id_a', 'mailing_id_c'); + $field = 'mailing_id_c'; + } + $jobJoin = "INNER JOIN $ab ON $ab.mailing_id_a = $mg.mailing_id + INNER JOIN $job ON $job.mailing_id = $ab.$field"; + $entity = CRM_Core_DAO::getFieldValue('CRM_Mailing_DAO_MailingGroup', $maiing_id_a, 'entity_table', 'mailing_id'); + } + else { + $jobJoin = "INNER JOIN $job ON $job.mailing_id = $mg.mailing_id"; + } + $groupClause = ''; if ($entity == $group) { $groupClause = "AND $group.is_hidden = 0"; @@ -167,8 +186,7 @@ WHERE email = %2 $mg.entity_id as entity_id, $mg.group_type as group_type FROM $mg - INNER JOIN $job - ON $job.mailing_id = $mg.mailing_id + $jobJoin INNER JOIN $entity ON $mg.entity_id = $entity.id WHERE $job.id = " . CRM_Utils_Type::escape($job_id, 'Integer') . " -- 2.25.1