src/WellCommerce/Bundle/EmarsysBundle/EventListener/EmarsysSubscriber.php line 95

Open in your IDE?
  1. <?php
  2. declare(strict_types=0);
  3. /*
  4.  * WellCommerce Foundation
  5.  *
  6.  * This file is part of the WellCommerce package.
  7.  *
  8.  * (c) Adam Piotrowski <adam@wellcommerce.org>, Adrian Potepa <adrian@wellcommerce.org>
  9.  *
  10.  * For the full copyright and license information,
  11.  * please view the LICENSE file that was distributed with this source code.
  12.  */
  13. namespace WellCommerce\Bundle\EmarsysBundle\EventListener;
  14. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  15. use WellCommerce\Bundle\AppBundle\Entity\NewsletterSubscriber;
  16. use WellCommerce\Bundle\AppBundle\Entity\Shop;
  17. use WellCommerce\Bundle\CoreBundle\Doctrine\Event\EntityEvent;
  18. use WellCommerce\Bundle\EmarsysBundle\Client\EmarsysClient;
  19. use WellCommerce\Component\Form\Event\FormEvent;
  20. /**
  21.  * Class EmarsysSubscriber
  22.  *
  23.  * @package WellCommerce\Bundle\EmarsysBundle\EventListener
  24.  */
  25. class EmarsysSubscriber implements EventSubscriberInterface
  26. {
  27.     public static function getSubscribedEvents()
  28.     {
  29.         return [
  30.             'admin.shop.pre_form_init'          => ['onShopFormAdminInit'],
  31.             'newsletter_subscriber.post_update' => ['onNewsletterSubscriberPostCreate'],
  32.         ];
  33.     }
  34.     public function onNewsletterSubscriberPostCreate(EntityEvent $event)
  35.     {
  36.         /** @var NewsletterSubscriber $resource */
  37.         $resource  $event->getEntity();
  38.         $shop      $resource->getShop();
  39.         $triggerId = (int) $shop->getEmarsysTriggerId();
  40.         if ($resource instanceof NewsletterSubscriber) {
  41.             if ($resource->isEnabled()) {
  42.                 $email $resource->getEmail();
  43.                 $listId = (int) $shop->getEmarsysContactListId();
  44.                 if ($this->isClientEnabled($shop)) {
  45.                     $api $this->createApiClient($shop);
  46.                     $sex '';
  47.                     if ($resource->getSex() === 'm') {
  48.                         $sex 1;
  49.                     }
  50.                     if ($resource->getSex() === 'f') {
  51.                         $sex 2;
  52.                     }
  53.                     $api->send('POST''contact'json_encode([
  54.                         'key_id' => 3,
  55.                         '1'      => $resource->getFirstName(),
  56.                         '3'      => $email,
  57.                         '46'     => $sex,
  58.                     ]));
  59.                     $eventResult $api->send('POST''event/' $triggerId '/trigger'json_encode([
  60.                         'key_id'      => 3,
  61.                         'external_id' => $email,
  62.                     ]));
  63.                     if ($listId 0) {
  64.                         $api->send('POST''contactlist/' $listId '/add'json_encode([
  65.                             'key_id'       => 3,
  66.                             'external_ids' => [$email],
  67.                         ]));
  68.                     }
  69.                 }
  70.             }
  71.             if (false === $resource->isEnabled()) {
  72.                 $email $resource->getEmail();
  73.                 if ($this->isClientEnabled($shop)) {
  74.                     $api $this->createApiClient($shop);
  75.                     $api->send('POST''contact/delete'json_encode([
  76.                         '3' => $email,
  77.                     ]));
  78.                 }
  79.             }
  80.         }
  81.     }
  82.     public function onShopFormAdminInit(FormEvent $event)
  83.     {
  84.         $resource $event->getResource();
  85.         if ($resource instanceof Shop) {
  86.             $form    $event->getForm();
  87.             $builder $event->getFormBuilder();
  88.             $emarsysData $form->addChild($builder->getElement('nested_fieldset', [
  89.                 'name'  => 'emarsys_data',
  90.                 'label' => 'emarsys.fieldset.settings',
  91.             ]));
  92.             $emarsysData->addChild($builder->getElement('text_field', [
  93.                 'name'  => 'emarsysApiKey',
  94.                 'label' => 'emarsys.label.api_key',
  95.             ]));
  96.             $emarsysData->addChild($builder->getElement('text_field', [
  97.                 'name'  => 'emarsysApiSecret',
  98.                 'label' => 'emarsys.label.api_secret',
  99.             ]));
  100.             $emarsysData->addChild($builder->getElement('text_field', [
  101.                 'name'  => 'emarsysContactListId',
  102.                 'label' => 'ID listy kontaktów',
  103.             ]));
  104.             $emarsysData->addChild($builder->getElement('text_field', [
  105.                 'name'  => 'emarsysTriggerId',
  106.                 'label' => 'ID triggera',
  107.             ]));
  108.         }
  109.     }
  110.     private function createApiClient(Shop $shop): EmarsysClient
  111.     {
  112.         $username $shop->getEmarsysApiKey();
  113.         $secret   $shop->getEmarsysApiSecret();
  114.         return new EmarsysClient($username$secret);
  115.     }
  116.     private function isClientEnabled(Shop $shop): bool
  117.     {
  118.         return strlen($shop->getEmarsysApiKey()) > && strlen($shop->getEmarsysApiSecret()) > 0;
  119.     }
  120. }