/** * {@inheritdoc} */ public function load(ObjectManager $manager) { /** @var UserManager $userManager */ $userManager = $this->container->get('oro_user.manager'); $admin = $userManager->findUserByEmail(LoadAdminUserData::DEFAULT_ADMIN_EMAIL); $organization = $manager->getRepository('OroOrganizationBundle:Organization')->getFirst(); /** @var Store $store */ $store = $this->getReference('store'); /** @var Channel $channel */ $channel = $this->getReference('default_channel'); /** @var Integration $integration */ $integration = $this->getReference('integration'); $className = ExtendHelper::buildEnumValueClassName('mage_subscr_status'); $enumRepo = $manager->getRepository($className); foreach ($this->subscriberData as $data) { $subscriber = new NewsletterSubscriber(); $date = new \DateTime(); $date->modify('-1 day'); /** @var AbstractEnumValue $status */ $status = $enumRepo->find($data['status']); $subscriber->setEmail($data['email'])->setStatus($status)->setConfirmCode(uniqid())->setStore($store)->setOwner($admin)->setOrganization($organization)->setOriginId($data['originId'])->setChangeStatusAt($date)->setCreatedAt($date)->setUpdatedAt($date)->setChannel($integration)->setDataChannel($channel); if (!empty($data['customer'])) { /** @var Customer $customer */ $customer = $this->getReference($data['customer']); $subscriber->setCustomer($customer); } $this->setReference($data['reference'], $subscriber); $manager->persist($subscriber); } $manager->flush(); }
/** * @param Customer $customer * * @return NewsletterSubscriber */ public function getOrCreateFromCustomer(Customer $customer) { $newsletterSubscriber = $customer->getNewsletterSubscriber(); if (null === $newsletterSubscriber) { $newsletterSubscriber = new NewsletterSubscriber(); $newsletterSubscriber->setCustomer($customer)->setEmail($customer->getEmail())->setChannel($customer->getChannel())->setStore($customer->getStore())->setOrganization($customer->getOrganization())->setOwner($customer->getOwner())->setStatus($this->getStatus(NewsletterSubscriber::STATUS_UNSUBSCRIBED))->setDataChannel($customer->getDataChannel()); } return $newsletterSubscriber; }
/** * @param Customer $customer * * @return NewsletterSubscriber[]|Collection */ public function getOrCreateFromCustomer(Customer $customer) { $newsletterSubscribers = $customer->getNewsletterSubscribers(); if (count($newsletterSubscribers) === 0) { $newsletterSubscriber = new NewsletterSubscriber(); $newsletterSubscriber->setCustomer($customer)->setEmail($customer->getEmail())->setChannel($customer->getChannel())->setStore($customer->getStore())->setOrganization($customer->getOrganization())->setOwner($customer->getOwner())->setStatus($this->getStatus(NewsletterSubscriber::STATUS_UNSUBSCRIBED))->setDataChannel($customer->getDataChannel()); $newsletterSubscribers = new ArrayCollection([$newsletterSubscriber]); } return $newsletterSubscribers; }
/** * {@inheritdoc} */ protected function getPermissionForAttribute($class, $identifier, $attribute) { if (is_a($this->object, $this->className, true) && ($this->object->getCustomer() && !$this->object->getCustomer()->getOriginId())) { return self::ACCESS_DENIED; } if (is_a($this->object, $this->className, true) && $this->object->getChannel() && !$this->settingsProvider->isChannelApplicable($this->object->getChannel()->getId())) { return self::ACCESS_DENIED; } if (!$this->settingsProvider->hasApplicableChannels()) { return self::ACCESS_DENIED; } return self::ACCESS_ABSTAIN; }
/** * @param NewsletterSubscriber $newsletterSubscriber * @return bool */ protected function isProcessingAllowed(NewsletterSubscriber $newsletterSubscriber) { $customer = null; $customerOriginId = null; $isProcessingAllowed = true; if ($newsletterSubscriber->getCustomer()) { $customerOriginId = $newsletterSubscriber->getCustomer()->getOriginId(); $customer = $this->databaseHelper->findOneByIdentity($newsletterSubscriber->getCustomer()); } if (!$customer && $customerOriginId) { $this->appendDataToContext(ContextCustomerReader::CONTEXT_POST_PROCESS_CUSTOMERS, $customerOriginId); $isProcessingAllowed = false; } return $isProcessingAllowed; }
/** * @param NewsletterSubscriber $entity */ protected function processChangeStatusAt(NewsletterSubscriber $entity) { if (!$entity->getChangeStatusAt()) { $now = new \DateTime('now', new \DateTimeZone('UTC')); $entity->setCreatedAt($now)->setUpdatedAt($now); } else { $entity->setUpdatedAt($entity->getChangeStatusAt()); if (!$entity->getId()) { $entity->setCreatedAt($entity->getChangeStatusAt()); } } }
/** * {@inheritdoc} */ public function load(ObjectManager $manager) { $newsletterSubscribers = []; $customers = new ArrayCollection($manager->getRepository('OroCRMMagentoBundle:Customer')->findAll()); $className = ExtendHelper::buildEnumValueClassName('mage_subscr_status'); $statuses = new ArrayCollection($manager->getRepository($className)->findAll()); /** @var Customer $customer */ foreach ($customers as $customer) { $newsletterSubscriber = new NewsletterSubscriber(); $newsletterSubscriber->setOwner($customer->getOwner())->setOrganization($customer->getOrganization())->setChangeStatusAt($customer->getCreatedAt())->setCreatedAt($customer->getCreatedAt())->setUpdatedAt($customer->getUpdatedAt())->setConfirmCode(uniqid('', true))->setChannel($customer->getChannel())->setEmail($customer->getEmail())->setStore($customer->getStore())->setStatus($statuses->get(array_rand($statuses->toArray())))->setDataChannel($customer->getDataChannel()); if (rand(0, 1)) { $newsletterSubscriber->setCustomer($customer); } $newsletterSubscribers[] = $newsletterSubscriber; } foreach ($newsletterSubscribers as $newsletterSubscriber) { $manager->persist($newsletterSubscriber); } if ($newsletterSubscribers) { $manager->flush($newsletterSubscribers); } }
/** * @param NewsletterSubscriber $newsletterSubscriber * @param int $statusIdentifier * * @return array */ protected function doJob(NewsletterSubscriber $newsletterSubscriber, $statusIdentifier) { $jobResult = $this->get('oro_importexport.job_executor')->executeJob('export', 'magento_newsletter_subscriber_export', ['channel' => $newsletterSubscriber->getChannel()->getId(), 'entity' => $newsletterSubscriber, 'statusIdentifier' => $statusIdentifier, 'writer_skip_clear' => true, 'processorAlias' => 'orocrm_magento']); return ['successful' => $jobResult->isSuccessful(), 'error' => $jobResult->getFailureExceptions(), 'state' => $jobResult->isSuccessful() ? $statusIdentifier : $newsletterSubscriber->getStatus()->getId()]; }
/** * @depends testUnsubscribeByCustomer */ public function testSubscribeByCustomer() { $this->client->request('GET', $this->getUrl('orocrm_magento_newsletter_subscriber_subscribe_customer', ['id' => $this->subscriber->getCustomer()->getId()])); $result = $this->getJsonResponseContent($this->client->getResponse(), 200); $this->assertEquals(NewsletterSubscriber::STATUS_SUBSCRIBED, $result['state']); }
public function testUnsubscribeByCustomer() { $this->client->request('GET', $this->getUrl('orocrm_magento_newsletter_subscriber_unsubscribe_customer', ['id' => $this->subscriber->getCustomer()->getId()])); $result = $this->getJsonResponseContent($this->client->getResponse(), 200); $this->assertTrue($result['successful']); }