예제 #1
0
 /**
  * @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();
 }