Skip to content

Commit

Permalink
Merge pull request #12962 from seamuslee001/dev_core_448_57
Browse files Browse the repository at this point in the history
dev/core#448 Fix issue where when building mailings with smart groups, removed members of the smart group were being included
  • Loading branch information
totten committed Oct 19, 2018
2 parents bd0ee33 + c6ad7d5 commit 0d2229b
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 0 deletions.
2 changes: 2 additions & 0 deletions CRM/Mailing/BAO/Mailing.php
Original file line number Diff line number Diff line change
Expand Up @@ -296,9 +296,11 @@ public static function getRecipients($mailingID) {
->select("$contact.id as contact_id, $entityTable.id as $entityColumn")
->join($entityTable, " INNER JOIN $entityTable ON $entityTable.contact_id = $contact.id ")
->join('gc', " INNER JOIN civicrm_group_contact_cache gc ON $contact.id = gc.contact_id ")
->join('gcr', " LEFT JOIN civicrm_group_contact gcr ON gc.group_id = gcr.group_id AND gc.contact_id = gcr.contact_id")
->join('mg', " INNER JOIN civicrm_mailing_group mg ON gc.group_id = mg.entity_id AND mg.search_id IS NULL ")
->join('temp', " LEFT JOIN $excludeTempTablename temp ON $contact.id = temp.contact_id ")
->where('gc.group_id IN (#groups)')
->where('gcr.status IS NULL OR gcr.status != "Removed"')
->merge($criteria)
->replaceInto($includedTempTablename, array('contact_id', $entityColumn))
->param('#groups', $includeSmartGroupIDs)
Expand Down
15 changes: 15 additions & 0 deletions tests/phpunit/CRM/Mailing/BAO/MailingTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -397,6 +397,21 @@ public function testgetRecipientsEmailGroupIncludeExclude() {
unset($expected[0], $expected[4], $expected[8]);
$this->assertRecipientsCorrect($mailing['id'], $expected);

// Tear down: delete mailing, groups, contacts
$this->deleteMailing($mailing['id']);

// Create a New mailing, Testing contacts removed from smart group.
// In this case groupIDs6 will only pick up contacts[0] amd contacts[8] with it's
// criteria. However we are deliberly going to remove contactIds[8] from the group
// Which should mean the mainling only finds 1 contact that is contactIds[0]
$mailing = $this->callAPISuccess('Mailing', 'create', array());
$this->callAPISuccess('GroupContact', 'Create', array(
'group_id' => $groupIDs[6],
'contact_id' => $contactIDs[8],
'status' => 'Removed',
));
$this->createMailingGroup($mailing['id'], $groupIDs[6]);
$this->assertRecipientsCorrect($mailing['id'], [$contactIDs[0]]);
// Tear down: delete mailing, groups, contacts
$this->deleteMailing($mailing['id']);
foreach ($groupIDs as $groupID) {
Expand Down

0 comments on commit 0d2229b

Please sign in to comment.