Your IP : 216.73.217.79


Current Path : /var/www/v3.cesa.co.za/src/MemberBundle/Services/
Upload File :
Current File : /var/www/v3.cesa.co.za/src/MemberBundle/Services/HRForumManager.php

<?php

namespace App\MemberBundle\Services;

/**
 * HRForumManager
 *
 * @author Otto Saayman <otto@igotafrica.com>
 * @package MemberBundle
 * @subpackage HRForum
 * @version 0.0.1
 */

use Symfony\Component\DependencyInjection\ContainerInterface;
use Monolog\Logger;
use App\MemberBundle\Entity\HRForum;
use App\ContactBundle\Services\MessageManager;
use App\CoreBundle\Services\Utils;

final class HRForumManager
{

    /**
     * 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 HR Forum Member
     *
     * @return HRForum
     */
    public function find($id)
    {

        if (strlen($id) <= 0) {
            return null;
        }

        return $this->em->getRepository(HRForum::class)->find($id);
    }

    /**
     * Get a HR Forum Member by parameters
     *
     * @param array $params
     * @return HRForum
     */
    public function findOneBy($params)
    {
        return $this->em->getRepository(HRForum::class)->findOneBy($params);
    }

    /**
     * Get a HR Forum Member by parameters
     *
     * @param array $params
     * @return array
     */
    public function findBy($params)
    {
        return $this->em->getRepository(HRForum::class)->findBy($params);
    }

    /**
     * Get all HR Forum Members
     *
     * @return array
     */
    public function findAll()
    {
        return $this->em->getRepository(HRForum::class)->findAll();
    }

    /**
     * Get all HR Forum Member IDs
     *
     * @return array
     */
    public function findAllIds()
    {
        return $this->em->getRepository(HRForum::class)->findAllIds();
    }

    /**
     * Save a HR Forum Member
     *
     * @params HRForum $HRForum
     * @return HRForum
     */
    public function save(HRForum &$HRForum)
    {

        $this->em->persist($HRForum);
        $this->em->flush();

        return $HRForum;
    }

    /**
     * Save a Member Firm
     *
     * @params MemberFirm $memberFirm
     * @return MemberFirm
     */
    public function findOrAdd(
        &$toBeAdded,
        &$toBeUpdated,
        $allMembers,
        $email,
        $status,
        $firstName = '',
        $lastName = '',
        $tag = ''
    ) {

        if (!Utils::isEmailAddressValid($email)) {
            return;
        }

        if (strlen($tag) <= 0) {
            echo 'No tag for ' . $email . '<br />' . "\r\n";
            return;
        }

        $email = str_replace('.coza', '.co.za', $email);

        //check if attendee is in list
        $mustAdd = true;
        $mustTag = true;
        $updateMailId = '';

        foreach ($allMembers as $mailId => $member) {

            if (trim(strtolower($member['email_address'])) == trim(strtolower($email))) {
                $mustAdd = false;
                $updateMailId = $mailId;
            }

            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) {
                    $mustTag = false;
                }
            }
        } //foreach

        if ($mustAdd) {
            foreach ($toBeAdded as $checkOne) {
                if (trim(strtolower($checkOne['email_address'])) == trim(strtolower($email))) {
                    $mustAdd = false;
                }
            }
        }

        if ($mustAdd) {
            $toBeAdded[] = [
                'email_address' => $email,
                'status' => $status,
                'merge_fields' => ['FNAME' => $firstName, 'LNAME' => $lastName],
                'tags' => [$tag]
            ];
            echo 'Added ' . count($toBeAdded) . ' - ' . $email . '<br />' . "\r\n";
        } elseif ($mustTag && strlen($updateMailId) > 0) {
            $toBeUpdated[] = [
                'subscriber_id' => $updateMailId,
                'email_address' => $email,
                // 'tags' => ["Member", $tag]
                'tags' => [['name' => $tag, 'status' => 'active']]
            ];
            echo 'Updated ' . count($toBeAdded) . ' - ' . $email . '<br />' . "\r\n";
        }
    }

    /**
     * Save a HR Forum Member
     *
     * @return void
     */
    public function mailChimpSynch()
    {

        $mcCreds = MessageManager::getMCCredentials();
        $messageManager = $this->getContainer()->get('contact_message.manager');
        $tempValueManager = $this->getContainer()->get('temp_value.manager');

        $startAt = 1; //$tempValueManager->getTempValue('mailchimp_member_synch_start', 1);

        echo 'HR Forum member synch starts now<br />' . "\r\n";
        //        exit;

        $allMembers = $messageManager->getAllEMailsFromMailChimp($mcCreds['api_key'], $mcCreds['main_audience']);

        echo "Found " . count($allMembers) . " members in MailChimp <br />" . "\r\n";
        //        echo '<br /><br />';
        //        exit;

        $toBeAdded = [];
        $toBeUpdated = [];
        $hrForumMembers = $this->findAllIds();
        $endAt = count($hrForumMembers) + 10; //$startAt + 50;
        $recordCount = 1;

        echo 'Running HR Forum member synch: ' . $startAt . ' ' . $endAt . '<br />' . "\r\n";
        //        exit;

        foreach ($hrForumMembers as $hrForumId) {

            if ($recordCount < $startAt) {
                continue;
            }

            if ($startAt > $endAt) {
                break;
            }

            $hrForumMember = $this->find($hrForumId['hrForumID']);

            if (!is_object($hrForumMember)) {
                echo 'HR Forum Member not found: ' . $hrForumId['hrForumID'] . '<br />' . "\r\n";
                continue;
            }

            if ($hrForumMember->getSubscribed() != 1) {
                echo 'HR Forum Member not subscribed: ' . $hrForumId['hrForumID'] . '<br />' . "\r\n";
                continue;
            }

            $subscribed = 'subscribed';

            if (!is_null($hrForumMember->getEmail()) && strlen($hrForumMember->getEmail()) > 0) {
                $this->findOrAdd(
                    $toBeAdded,
                    $toBeUpdated,
                    $allMembers,
                    $hrForumMember->getEmail(),
                    $subscribed,
                    $hrForumMember->getFirstName(),
                    $hrForumMember->getSurname(),
                    'HR Forum'
                );
            }

            if (count($toBeAdded) > 200) {

                $messageManager->addToMailChimp($mcCreds['api_key'], $mcCreds['main_audience'], $toBeAdded);

                //                var_dump($toBeAdded);
                //                exit;

                // var_dump($toBeAdded);
                // exit;

                $toBeAdded = array();
            }

            if (count($toBeUpdated) > 200) {

                $messageManager->updateTagsMailChimp($mcCreds['api_key'], $mcCreds['main_audience'], $toBeUpdated);

                //                var_dump($toBeAdded);
                //                exit;

                // var_dump($toBeUpdated);
                // exit;

                $toBeUpdated = array();
            }

            $recordCount++;
            $startAt++;
        } //foreach hr forum member

        echo 'HR Forum member synch done: ' . $startAt . ' ' . $startAt . '<br />' . "\r\n";

        $tempValueManager->setTempValue('mailchimp_hr_forum_member_synch_start', $startAt);

        if (count($toBeAdded) > 0) {
            $messageManager->addToMailChimp($mcCreds['api_key'], $mcCreds['main_audience'], $toBeAdded);
        }

        if (count($toBeUpdated) > 0) {
            $messageManager->updateTagsMailChimp($mcCreds['api_key'], $mcCreds['main_audience'], $toBeUpdated);
        }
    }
}