| Current Path : /var/www/v3.cesa.co.za/src/EventBundle/Services/ |
| Current File : /var/www/v3.cesa.co.za/src/EventBundle/Services/MarketingAttendeeManager.php |
<?php
namespace App\EventBundle\Services;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Monolog\Logger;
use App\ContactBundle\Services\MessageManager;
use App\EventBundle\Entity\MarketingAttendee;
use App\CoreBundle\Services\Utils;
/**
* Marketing Attendee List Old manager
*
* @author Otto Saayman <otto@igotafrica.com>
* @package EventBundle
* @subpackage MarketingAttendee
* @version 0.0.1
*/
final class MarketingAttendeeManager
{
/**
* Service Container
* @var object
*/
private $container = null;
/**
* Entity manager
* @var object
*/
private $em;
/**
* Class construct
*
* @param ContainerInterface $container
* @param Logger $logger
* @return void
*/
public function __construct(
ContainerInterface $container
) {
$this->setContainer($container);
$this->setEm($container->get('doctrine')->getManager('default'));
return;
}
/**
* Get Container
*
* @return ContainerInterface $container
*/
public function getContainer()
{
return $this->container;
}
/**
* Set Container
*
* @param ContainerInterface $container
* @return void
*/
public function setContainer($container)
{
$this->container = $container;
}
/**
* Get Entity Manager
*
* @return string
*/
public function getEm()
{
return $this->em;
}
/**
* Set Container
*
* @param string $em
* @return void
*/
public function setEm($em)
{
$this->em = $em;
}
/**
* Get a Marketing Attendee
*
* @return MarketingAttendee
*/
public function find($id)
{
if (strlen($id) <= 0) {
return null;
}
return $this->em->getRepository(MarketingAttendee::class)->find($id);
}
/**
* Get a Marketing Attendee by parameters
*
* @param array $params
* @return MarketingAttendee
*/
public function findOneBy($params)
{
return $this->em->getRepository(MarketingAttendee::class)->findOneBy($params);
}
/**
* Get a Marketing Attendee by parameters
*
* @param array $params
* @return array
*/
public function findBy($params)
{
return $this->em->getRepository(MarketingAttendee::class)->findBy($params);
}
/**
* Get all Marketing Attendees
*
* @return array
*/
public function findAll()
{
return $this->em->getRepository(MarketingAttendee::class)->findAll();
}
/**
* Get all Marketing Attendee IDs
*
* @return array
*/
public function findAllIds()
{
return $this->em->getRepository(MarketingAttendee::class)->findAllIds();
}
/**
* Save a Marketing Attendee
*
* @params MarketingAttendee $marketingAttendee
* @return MarketingAttendee
*/
public function save(MarketingAttendee &$marketingAttendee)
{
$this->em->persist($marketingAttendee);
$this->em->flush();
return $marketingAttendee;
}
/**
* Save a Marketing Attendee
*
* @return void
*/
public function mailChimpSynch($allMembers = array(), $audience = '', $tag = 'CESA Marketing')
{
$errorLogManager = $this->getContainer()->get('error_log.manager');
$errorLogManager->error('MailChimp Synch Starting', true);
$mcCreds = MessageManager::getMCCredentials();
$messageManager = $this->getContainer()->get('contact_message.manager');
// $response = Utils::getURLContent($url, array('usr_pwd' => 'user:' . $mcCreds['api_key'], 'header' => ['Content-Type: application/json']));
$toBeAdded = array();
$toBeUpdated = array();
$marketingAttendees = $this->findAllIds();
if (strlen($audience) <= 0) {
$audience = $mcCreds['main_audience'];
}
if (count($allMembers) <= 0) {
$allMembers = $messageManager->getAllEMailsFromMailChimp($mcCreds['api_key'], $audience);
}
echo count($marketingAttendees) . ' marketing attendees found' . "\r\n";
$errorLogManager->error(count($marketingAttendees) . ' attendees found', true);
$alreadyAdded = [];
foreach ($marketingAttendees as $marketingAttendeeId) {
// if ($marketingAttendeeId['id'] != 38485) {
// continue;
// }
$marketingAttendee = $this->find($marketingAttendeeId['id']);
if (!is_object($marketingAttendee)) {
echo 'Attendee not found: ' . $marketingAttendeeId['id'] . '<br />' . "\r\n";
$errorLogManager->error('Attendee not found: ' . $marketingAttendeeId['id'], true);
continue;
}
if (
is_null($marketingAttendee->getEmailAddress()) || strlen($marketingAttendee->getEmailAddress()) <= 0
|| Utils::isEmailAddressValid($marketingAttendee->getEmailAddress()) == false
|| in_array($marketingAttendee->getEmailAddress(), $alreadyAdded)
) {
// echo 'Attendee no e-mail address: ' . $marketingAttendeeId['id'] . '<br />' . "\r\n";
continue;
}
if ($marketingAttendee->isCancelled()) {
// echo 'Attendee cancelled: ' . $marketingAttendeeId['id'] . '<br />' . "\r\n";
$errorLogManager->error('Attendee cancelled: ' . $marketingAttendeeId['id'], true);
continue;
}
$alreadyAdded[] = $marketingAttendee->getEmailAddress();
$subscribed = 'pending';
if (is_null($marketingAttendee->getSubscribed()) || strtolower($marketingAttendee->getSubscribed()) == 'y') {
$subscribed = 'subscribed';
}
// if (count($toBeAdded) > 10) {
// continue;
// }
//check if attendee is in list
$mustAdd = '';
foreach ($allMembers as $mailId => $member) {
// Check of the subscriber has unsubscribed in MailChimp
if (isset($member['status']) && $member['status'] == 'unsubscribed') {
$mustAdd = 'Unsubscribed';
echo 'Marketing attendee ' . $marketingAttendee->getEmailAddress() . ' is unsubscribed in MailChimp' . "\r\n";
continue;
}
if (trim(strtolower($member['email_address'])) == trim(strtolower($marketingAttendee->getEmailAddress()))) {
$mustAdd = $mailId;
// echo 'Marketing attendee e-mail exists in MalChimp and ' . count($member['tags']) . ' is the tag' . "\r\n";
if (!is_countable($member['tags']) || count($member['tags']) <= 0) {
continue;
}
foreach ($member['tags'] as $oneTag) {
// var_dump($oneTag);
// echo "\r\n" . ' tag!' . "\r\n";
if ($oneTag['name'] == $tag) {
$mustAdd = 'no';
}
}
}
} //foreach
if ($mustAdd == '') {
// $messageManager->addOneContactToMailChimp(
// $mcCreds['api_key'],
// $audience,
// [
// 'email_address' => $marketingAttendee->getEmailAddress(),
// 'status' => $subscribed,
// 'merge_fields' => [
// 'FNAME' => $marketingAttendee->getContactFirstName(),
// 'LNAME' => $marketingAttendee->getContactLastName()
// ],
// 'tags' => [$tag]
// ]
// );
// echo 'Added ' . $marketingAttendee->getEmailAddress() . ' - ' . count($toBeAdded) . '<br />' . "\r\n";
// exit;
$toBeAdded[] = [
'email_address' => trim($marketingAttendee->getEmailAddress()),
'status' => $subscribed,
'merge_fields' => [
'FNAME' => $marketingAttendee->getContactFirstName(),
'LNAME' => $marketingAttendee->getContactLastName()
],
'tags' => [$tag]
// 'tags' => [['name' => $tag, 'status' => 'active']]
];
// echo 'Added ' . $marketingAttendee->getEmailAddress() . ' - ' . count($toBeAdded) . '<br />' . "\r\n";
// $errorLogManager->error('Added: ' . count($toBeAdded), true);
} elseif (!in_array($mustAdd, ['Unsubscribed', 'no'])) {
$toBeUpdated[] = [
'subscriber_id' => $mustAdd,
'email_address' => trim($marketingAttendee->getEmailAddress()),
'tags' => [['name' => $tag, 'status' => 'active']]
];
// echo $marketingAttendee->getEmailAddress() . ' - ' . $mustAdd . ' skipped<br />' . "\r\n";
// $errorLogManager->error('Skipped', true);
}
// exit;
//
if (count($toBeUpdated) > 200) {
$messageManager->updateTagsMailChimp($mcCreds['api_key'], $audience, $toBeUpdated);
echo 'Updating marketing attendee tags' . "\r\n";
// var_dump($toBeUpdated);
// echo "\r\n";
// exit;
$toBeUpdated = array();
}
if (count($toBeAdded) > 200) {
$messageManager->addToMailChimp($mcCreds['api_key'], $audience, $toBeAdded);
echo 'Adding marketing attendees to MailChimp' . "\r\n";
// var_dump($toBeAdded);
// echo "\r\n";
// exit;
$toBeAdded = array();
}
} //foreach
if (count($toBeAdded) > 0) {
$messageManager->addToMailChimp($mcCreds['api_key'], $audience, $toBeAdded);
echo "Adding marketing attendeesto MailChimp \r\n";
var_dump($toBeAdded);
echo "\r\n";
}
if (count($toBeUpdated) > 0) {
$messageManager->updateTagsMailChimp($mcCreds['api_key'], $audience, $toBeUpdated);
echo "Updating marketing attendee tags \r\n";
var_dump($toBeUpdated);
echo "\r\n";
}
// exit;
}
/**
* Save a Marketing Attendee
*
* @return void
*/
public function mailChimpSynchCombined()
{
$errorLogManager = $this->getContainer()->get('error_log.manager');
$errorLogManager->error('Combined MailChimp Synch Starting', true);
$mcCreds = MessageManager::getMCCredentials();
$messageManager = $this->getContainer()->get('contact_message.manager');
// $messageManager->addOneContactToMailChimp(
// $mcCreds['api_key'],
// $mcCreds['main_audience'],
// [
// 'email_address' => 'anton.boshoff@bigenafrica.com',
// 'status' => 'subscribed',
// 'merge_fields' => ['FNAME' => 'Anton', 'LNAME' => 'Boshoff'],
// 'tags' => ['CESA Marketing']
// ]
// );
// return;
$allMembers = $messageManager->getAllEMailsFromMailChimp($mcCreds['api_key'], $mcCreds['main_audience']);
echo 'Found ' . count($allMembers) . ' members in MailChimp' . "\r\n";
$this->mailChimpSynch($allMembers, $mcCreds['main_audience']);
//Must finish merging SCE audience in MailChimp before running this part
$this->getContainer()->get('school_attendee.manager')->mailChimpSynch($allMembers, $mcCreds['main_audience']);
}
}