Your IP : 216.73.217.79


Current Path : /var/www/v3.cesa.co.za/src/EventBundle/Services/
Upload File :
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']);
    }
}