mailchimp = $mailchimp; $this->subscriptionsRepository = $subscriptionsRepository; $this->listId = $listId; $this->logger = new NullLogger(); } public function synchronize() { $subscribdedEmailsOnMailchimp = $this->getSubscribedEmailsOnMailchimp(); $subscribdedEmailsOnWebsite = $this->getSubscribedEmailsOnWebsite(); $this->unsubscribeAddresses(array_diff($subscribdedEmailsOnMailchimp, $subscribdedEmailsOnWebsite)); $this->subscribeAddresses(array_diff($subscribdedEmailsOnWebsite, $subscribdedEmailsOnMailchimp)); } /** * @param LoggerInterface $logger * * @return $this */ public function setLogger(LoggerInterface $logger) { $this->logger = $logger; return $this; } /** * @param array $emails */ private function unsubscribeAddresses(array $emails) { foreach ($emails as $email) { $this->logger->info('Unsubscribe {address} to techletter', ['address' => $email]); $this->mailchimp->unSubscribeAddress($this->listId, $email); } } /** * @param array $emails */ private function subscribeAddresses(array $emails) { foreach ($emails as $email) { $this->logger->info('Subscribe {address} to techletter', ['address' => $email]); $this->mailchimp->subscribeAddress($this->listId, $email); } } /** * @return array */ private function getSubscribedEmailsOnWebsite() { $subscribdedEmails = []; foreach ($this->subscriptionsRepository->getSubscribedEmails() as $row) { $subscribdedEmails[] = $row['email']; } return $subscribdedEmails; } /** * @return array */ private function getSubscribedEmailsOnMailchimp() { $mailsOnMailchimp = $this->mailchimp->getAllSubscribedMembersAddresses($this->listId); return $mailsOnMailchimp; } }