/** * @param MemberActivity $memberActivity */ protected function updateStatistics(MemberActivity $memberActivity) { $mailChimpCampaign = $memberActivity->getCampaign(); $emailCampaign = $mailChimpCampaign->getEmailCampaign(); $marketingList = $mailChimpCampaign->getStaticSegment()->getMarketingList(); $relatedEntities = $this->getMarketingListEntitiesByEmail($marketingList, $memberActivity->getEmail()); $em = $this->registry->getManager(); foreach ($relatedEntities as $relatedEntity) { $emailCampaignStatistics = $this->campaignStatisticsConnector->getStatisticsRecord($emailCampaign, $relatedEntity); $this->incrementStatistics($memberActivity, $emailCampaignStatistics); $em->persist($emailCampaignStatistics); } }
/** * Member Activity is added only for known member. * There can not be two send activities in campaign for same member. * * @param MemberActivity $entity * @return MemberActivity */ protected function processEntity($entity) { if ($this->logger) { $this->logger->info(sprintf('Processing MailChimp Member Activity [email=%s, action=%s]', $entity->getEmail(), $entity->getAction())); } $channel = $this->databaseHelper->getEntityReference($entity->getChannel()); /** @var Campaign $campaign */ $campaign = $this->findExistingEntity($entity->getCampaign()); $member = $this->findExistingMember($entity->getMember(), $channel, $campaign); $entity->setChannel($channel)->setCampaign($campaign)->setMember($member); if ($member && !$this->isSkipped($entity)) { if (!$entity->getActivityTime()) { $entity->setActivityTime($campaign->getSendTime()); } $this->context->incrementAddCount(); if ($this->logger) { $this->logger->info(sprintf(' Activity added for MailChimp Member [id=%d]', $member->getId())); } return $entity; } elseif ($this->logger) { $this->logger->info(' Activity skipped'); } return null; }
/** * @param MemberActivity $memberActivity * @param Channel $channel * @param Campaign $campaign * @return Member|null */ protected function findExistingMember(MemberActivity $memberActivity, Channel $channel, Campaign $campaign) { $searchCondition = ['channel' => $channel, 'subscribersList' => $campaign->getSubscribersList()]; $member = $memberActivity->getMember(); $email = $member ? $member->getEmail() : $memberActivity->getEmail(); if ($member && ($originId = $member->getOriginId())) { $searchCondition['originId'] = $originId; } elseif ($email) { $searchCondition['email'] = $email; } else { return null; } return $this->findEntityByIdentityValues('OroCRM\\Bundle\\MailChimpBundle\\Entity\\Member', $searchCondition); }