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;
 }
예제 #3
0
 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);
 }