mirror of
https://github.com/quentin-g-dev/afup.git
synced 2026-03-24 17:22:06 +01:00
110 lines
2.8 KiB
PHP
110 lines
2.8 KiB
PHP
<?php
|
|
|
|
namespace AppBundle\TechLetter;
|
|
|
|
use AppBundle\Association\Model\Repository\TechletterSubscriptionsRepository;
|
|
use Psr\Log\LoggerInterface;
|
|
use Psr\Log\NullLogger;
|
|
|
|
class MailchimpSynchronizer
|
|
{
|
|
/**
|
|
* @var \AppBundle\Mailchimp\Mailchimp
|
|
*/
|
|
private $mailchimp;
|
|
|
|
/**
|
|
* @var TechletterSubscriptionsRepository
|
|
*/
|
|
private $subscriptionsRepository;
|
|
|
|
/**
|
|
* @var string
|
|
*/
|
|
private $listId;
|
|
|
|
/**
|
|
* @var LoggerInterface
|
|
*/
|
|
private $logger;
|
|
|
|
/**
|
|
* @param \AppBundle\Mailchimp\Mailchimp $mailchimp
|
|
* @param TechletterSubscriptionsRepository $subscriptionsRepository
|
|
* @param string $listId
|
|
*/
|
|
public function __construct(\AppBundle\Mailchimp\Mailchimp $mailchimp, TechletterSubscriptionsRepository $subscriptionsRepository, $listId)
|
|
{
|
|
$this->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;
|
|
}
|
|
}
|