public function testGetTypedFieldsValues() { $entity = new \stdClass(); $entity->email = 'test'; $entity->other = 'other'; $expected = ['test']; $this->assertEquals($expected, $this->provider->getTypedFieldsValues(['email'], $entity)); }
/** * {@inheritdoc} */ protected function getPermissionForAttribute($class, $identifier, $attribute) { /** @var MarketingListStateItemInterface $item */ $item = $this->doctrineHelper->getEntityRepository($this->className)->find($identifier); $entityClass = $item->getMarketingList()->getEntity(); $entity = $this->doctrineHelper->getEntityRepository($entityClass)->find($item->getEntityId()); if (!$entity) { return self::ACCESS_ABSTAIN; } $contactInformationFields = $this->contactInformationFieldsProvider->getEntityTypedFields($entityClass, ContactInformationFieldsProvider::CONTACT_INFORMATION_SCOPE_EMAIL); $contactInformationValues = $this->contactInformationFieldsProvider->getTypedFieldsValues($contactInformationFields, $entity); $qb = $this->getQueryBuilder($contactInformationValues, $item); $result = $qb->getQuery()->getScalarResult(); if (!empty($result)) { return self::ACCESS_DENIED; } return self::ACCESS_ABSTAIN; }
public function send() { if (!$this->assertTransport()) { return; } $marketingList = $this->emailCampaign->getMarketingList(); if (is_null($marketingList)) { return; } $iterator = $this->getIterator(); if (is_null($iterator)) { return; } /** @var EntityManager $manager */ $manager = $this->registry->getManager(); $emailFields = $this->contactInformationFieldsProvider->getMarketingListTypedFields($marketingList, ContactInformationFieldsProvider::CONTACT_INFORMATION_SCOPE_EMAIL); foreach ($iterator as $entity) { $to = $this->contactInformationFieldsProvider->getTypedFieldsValues($emailFields, $entity); $to = array_unique($to); try { $manager->beginTransaction(); // Do actual send $this->transport->send($this->emailCampaign, $entity, [$this->getSenderEmail() => $this->getSenderName()], $to); $statisticsRecord = $this->statisticsConnector->getStatisticsRecord($this->emailCampaign, $entity); // Mark marketing list item as contacted $statisticsRecord->getMarketingListItem()->contact(); $manager->flush($statisticsRecord); $manager->commit(); } catch (\Exception $e) { $manager->rollback(); if ($this->logger) { $this->logger->error(sprintf('Email sending to "%s" failed.', implode(', ', $to)), ['exception' => $e]); } } } $this->emailCampaign->setSent(true); $manager->persist($this->emailCampaign); $manager->flush(); }
/** * @param string $entityClassName * @param array $data * @return array */ protected function getContactInformationFieldsValues($entityClassName, array $data) { $contactInformationFields = $this->contactInformationFieldsProvider->getEntityTypedFields($entityClassName, ContactInformationFieldsProvider::CONTACT_INFORMATION_SCOPE_EMAIL); $values = $this->contactInformationFieldsProvider->getTypedFieldsValues($contactInformationFields, $data); return array_filter($values); }