Skip to content

Commit 868e8c2

Browse files
Merge pull request #85 from grueneschweiz/ignore_mailchimp_new_subscription
Allow admins to disable Notifications for direct Subscriptions in Mailchimp
2 parents 4205b8b + 7d76bc5 commit 868e8c2

5 files changed

Lines changed: 59 additions & 32 deletions

File tree

app/Synchronizer/Config.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,20 @@ public function getSyncAll(): bool
162162

163163
return false;
164164
}
165+
166+
/**
167+
* Return bool that indicates if subscriptions through mailchimp should be ignored
168+
*
169+
* @return bool
170+
*/
171+
public function getIgnoreSubscribeThroughMailchimp(): bool
172+
{
173+
if (array_key_exists('ignoreSubscribeThroughMailchimp', $this->mailchimp)) {
174+
return filter_var($this->mailchimp['ignoreSubscribeThroughMailchimp'], FILTER_VALIDATE_BOOLEAN);
175+
}
176+
177+
return false;
178+
}
165179

166180
/**
167181
* Return the default list id in Mailchimp

app/Synchronizer/MailchimpToCrmSynchronizer.php

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -93,19 +93,22 @@ public function syncSingle(array $mcData)
9393

9494
switch ($callType) {
9595
case self::MC_SUBSCRIBE:
96-
$mcData = $this->mcClient->getSubscriber($email);
97-
$mergeFields = $this->extractMergeFields($mcData);
98-
99-
// if there is no crm id
100-
if (empty($mergeFields[$this->config->getMailchimpKeyOfCrmId()])) {
101-
// send mail to dataOwner, that he should
102-
// add the subscriber to webling not mailchimp
103-
$this->sendMailSubscribeOnlyInWebling($this->config->getDataOwner(), $mcData);
104-
$this->logWebhook('debug', $callType, $mailchimpId, "Notified data owner.");
96+
// if configured, don't send notifications, if not, keep backwards compatibility
97+
if(!$this->config->getIgnoreSubscribeThroughMailchimp()) {
98+
$mcData = $this->mcClient->getSubscriber($email);
99+
$mergeFields = $this->extractMergeFields($mcData);
100+
101+
// if there is no crm id
102+
if (empty($mergeFields[$this->config->getMailchimpKeyOfCrmId()])) {
103+
// send mail to dataOwner, that he should
104+
// add the subscriber to webling not mailchimp
105+
$this->sendMailSubscribeOnlyInWebling($this->config->getDataOwner(), $mcData);
106+
$this->logWebhook('debug', $callType, $mailchimpId, "Notified data owner.");
107+
}
105108
}
106-
109+
107110
return;
108-
111+
109112
case self::MC_UNSUBSCRIBE:
110113
$mergeFields = $this->extractMergeFields($mcData['data']);
111114
$crmId = $mergeFields[$this->config->getMailchimpKeyOfCrmId()];

config/example.com.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ mailchimp:
1414
listId: 6f33e28fa3
1515
interesstCategoriesId: de75614d35
1616
syncAll: false
17+
ignoreSubscribeThroughMailchimp: true
1718

1819
webling:
1920
prioritizedGroups:

tests/Unit/Synchronizer/MailchimpToCrmSynchronizerTest.php

Lines changed: 29 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -122,17 +122,21 @@ public function testSyncSingle__subscribe()
122122
];
123123

124124
$this->sync->syncSingle($webhookData);
125-
126-
Mail::assertSent(WrongSubscription::class, function ($mail) use ($subscriber) {
127-
$this->assertEquals($subscriber['merge_fields']['FNAME'], $mail->mail->contactFirstName);
128-
$this->assertEquals($subscriber['merge_fields']['LNAME'], $mail->mail->contactLastName);
129-
$this->assertEquals($subscriber['email_address'], $mail->mail->contactEmail);
130-
$this->assertEquals(env('ADMIN_EMAIL'), $mail->mail->adminEmail);
131-
$this->assertEquals($this->config->getDataOwner()['name'], $mail->mail->dataOwnerName);
132-
$this->assertEquals(self::CONFIG_FILE_NAME, $mail->mail->configName);
125+
126+
if ($this->config->getIgnoreSubscribeThroughMailchimp()) {
127+
Mail::assertNotSent(WrongSubscription::class);
128+
} else {
129+
Mail::assertSent(WrongSubscription::class, function ($mail) use ($subscriber) {
130+
$this->assertEquals($subscriber['merge_fields']['FNAME'], $mail->mail->contactFirstName);
131+
$this->assertEquals($subscriber['merge_fields']['LNAME'], $mail->mail->contactLastName);
132+
$this->assertEquals($subscriber['email_address'], $mail->mail->contactEmail);
133+
$this->assertEquals(env('ADMIN_EMAIL'), $mail->mail->adminEmail);
134+
$this->assertEquals($this->config->getDataOwner()['name'], $mail->mail->dataOwnerName);
135+
$this->assertEquals(self::CONFIG_FILE_NAME, $mail->mail->configName);
133136

134-
return true;
135-
});
137+
return true;
138+
});
139+
}
136140

137141
// cleanup
138142
$this->mcClientTesting->deleteSubscriber($email);
@@ -182,17 +186,21 @@ public function testSyncSingle__subscribe__merges()
182186

183187
$this->sync->syncSingle($webhookData);
184188

185-
Mail::assertSent(WrongSubscription::class, function ($mail) use ($subscriber) {
186-
$this->assertEquals($subscriber['merge_fields']['FNAME'], $mail->mail->contactFirstName);
187-
$this->assertEquals($subscriber['merge_fields']['LNAME'], $mail->mail->contactLastName);
188-
$this->assertEquals($subscriber['email_address'], $mail->mail->contactEmail);
189-
$this->assertEquals(env('ADMIN_EMAIL'), $mail->mail->adminEmail);
190-
$this->assertEquals($this->config->getDataOwner()['name'], $mail->mail->dataOwnerName);
191-
$this->assertEquals(self::CONFIG_FILE_NAME, $mail->mail->configName);
192-
193-
return true;
194-
});
195-
189+
if ($this->config->getIgnoreSubscribeThroughMailchimp()) {
190+
Mail::assertNotSent(WrongSubscription::class);
191+
} else {
192+
Mail::assertSent(WrongSubscription::class, function ($mail) use ($subscriber) {
193+
$this->assertEquals($subscriber['merge_fields']['FNAME'], $mail->mail->contactFirstName);
194+
$this->assertEquals($subscriber['merge_fields']['LNAME'], $mail->mail->contactLastName);
195+
$this->assertEquals($subscriber['email_address'], $mail->mail->contactEmail);
196+
$this->assertEquals(env('ADMIN_EMAIL'), $mail->mail->adminEmail);
197+
$this->assertEquals($this->config->getDataOwner()['name'], $mail->mail->dataOwnerName);
198+
$this->assertEquals(self::CONFIG_FILE_NAME, $mail->mail->configName);
199+
200+
return true;
201+
});
202+
}
203+
196204
// cleanup
197205
$this->mcClientTesting->deleteSubscriber($email);
198206
}

tests/test.io.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ mailchimp:
1414
listId: 6f33e28fa3
1515
interesstCategoriesId: de75614d35
1616
syncAll: false
17+
ignoreSubscribeThroughMailchimp: true
1718

1819
webling:
1920
prioritizedGroups:

0 commit comments

Comments
 (0)