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