/** * @param SubscribersList $subscribersList * @param array|ArrayCollection $items * @return array */ protected function batchSubscribe(SubscribersList $subscribersList, array $items) { $itemsToWrite = []; $emails = array_map(function (Member $member) { return ['email' => ['email' => $member->getEmail()], 'merge_vars' => $member->getMergeVarValues()]; }, $items); $response = $this->transport->batchSubscribe(['id' => $subscribersList->getOriginId(), 'batch' => $emails, 'double_optin' => false, 'update_existing' => true]); $this->handleResponse($response, function ($response, LoggerInterface $logger) use($subscribersList) { $logger->info(sprintf('List #%s [origin_id=%s]: [%s] add, [%s] update, [%s] error', $subscribersList->getId(), $subscribersList->getOriginId(), $response['add_count'], $response['update_count'], $response['error_count'])); }); $emailsAdded = $this->getArrayData($response, 'adds'); $emailsUpdated = $this->getArrayData($response, 'updates'); $items = new ArrayCollection($items); foreach (array_merge($emailsAdded, $emailsUpdated) as $emailData) { /** @var Member $member */ $member = $items->filter(function (Member $member) use($emailData) { return $member->getEmail() === $emailData['email']; })->first(); if ($member) { $member->setEuid($emailData['euid'])->setLeid($emailData['leid'])->setStatus(Member::STATUS_SUBSCRIBED); $itemsToWrite[] = $member; $this->logger->debug(sprintf('Member with data "%s" successfully processed', json_encode($emailData))); } else { $this->logger->warning(sprintf('A member with "%s" email was not found', $emailData['email'])); } } return $itemsToWrite; }
public function testGetMergeVarsFieldsWithEmptyConfigWorks() { $subscribersList = new SubscribersList(); $subscribersList->setMergeVarConfig([]); $mergeVarFields = $this->provider->getMergeVarFields($subscribersList); $this->assertEquals(new MergeVarFields([]), $mergeVarFields); $this->assertSame($mergeVarFields, $subscribersList->getMergeVarFields()); }
/** * @param StaticSegment $entity */ protected function onSuccess($entity) { // Reset originId of static segment if subscribers list was changed to force list creation if ($this->oldSubscribersList && $this->oldSubscribersList->getId() != $entity->getSubscribersList()->getId()) { $entity->setOriginId(null); } parent::onSuccess($entity); }
/** * {@inheritdoc} */ public function getMergeVarFields(SubscribersList $subscribersList) { $result = $subscribersList->getMergeVarFields(); if (!$result) { $result = $this->createMergeVarFields($subscribersList->getMergeVarConfig()); $subscribersList->setMergeVarFields($result); } return $result; }
/** * @param SubscribersList $subscribersList * @param array $parameters * @return \Iterator */ protected function createExportMemberIterator(SubscribersList $subscribersList, $parameters) { return new \CallbackFilterIterator($this->createExportIterator(MailChimpClient::EXPORT_LIST, $parameters), function (&$current) use($subscribersList, $parameters) { if (is_array($current)) { $current['list_id'] = $subscribersList->getOriginId(); $current['status'] = $parameters['status']; } return true; }); }
/** * {@inheritdoc} */ public function load(ObjectManager $manager) { $organization = $manager->getRepository('OroOrganizationBundle:Organization')->getFirst(); foreach ($this->data as $data) { $entity = new SubscribersList(); $entity->setOwner($organization); $data['channel'] = $this->getReference($data['channel']); $this->setEntityPropertyValues($entity, $data, ['reference']); $this->setReference($data['reference'], $entity); $manager->persist($entity); } $manager->flush(); }
/** * @param SubscribersList $subscribersList * @return array */ protected function getSubscribersListMergeVars(SubscribersList $subscribersList) { $response = $this->transport->getListMergeVars(['id' => [$subscribersList->getOriginId()]]); $this->handleResponse($response); if (!empty($response['errors'])) { throw new \RuntimeException('Can not get list of merge vars.'); } return $this->extractMergeVarsFromResponse($response); }
/** * @param SubscribersList $subscriberList * @return BufferedQueryResultIterator|MarketingList[] */ protected function getMarketingListIterator(SubscribersList $subscriberList) { $qb = $this->doctrineHelper->getEntityManager('OroCRMMarketingListBundle:MarketingList')->getRepository('OroCRMMarketingListBundle:MarketingList')->createQueryBuilder('ml'); $qb->select('ml')->join('OroCRMMailChimpBundle:StaticSegment', 'staticSegment', Join::WITH, 'staticSegment.marketingList = ml.id')->join('staticSegment.subscribersList', 'subscribersList')->where($qb->expr()->eq('subscribersList.id', ':subscribersList'))->setParameter('subscribersList', $subscriberList->getId()); return new BufferedQueryResultIterator($qb); }
public function testPreUpdate() { $this->assertNull($this->target->getUpdatedAt()); $this->target->preUpdate(); $this->assertInstanceOf('\\DateTime', $this->target->getUpdatedAt()); }
/** * @link http://apidocs.mailchimp.com/api/2.0/lists/static-segments.php * @param SubscribersList $list * @return StaticSegmentIterator */ public function getListStaticSegments(SubscribersList $list) { $iterator = new StaticSegmentIterator($this->client); $iterator->setSubscriberListId($list->getOriginId()); return $iterator; }
/** * @param array $deletedMembersIds * @param SubscribersList $subscribersList */ protected function deleteMailChimpMembers(array $deletedMembersIds, SubscribersList $subscribersList) { $qb = $this->doctrineHelper->getEntityRepository($this->mailChimpMemberСlassName)->createQueryBuilder('mmb'); $qb->delete($this->mailChimpMemberСlassName, 'mmb')->where($qb->expr()->andX($qb->expr()->in('mmb.id', ':deletedMembersIds'), $qb->expr()->eq('mmb.subscribersList', $subscribersList->getId())))->setParameter('deletedMembersIds', $deletedMembersIds)->getQuery()->execute(); }