src/UniSport/Bundle/AppBundle/EventListener/UniSportSubscriber.php line 127

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 UniSport\Bundle\AppBundle\EventListener;
  14. use Doctrine\Common\Collections\Criteria;
  15. use Psr\Container\ContainerInterface;
  16. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  17. use Symfony\Component\Messenger\Stamp\DelayStamp;
  18. use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
  19. use UniSport\Bundle\AppBundle\Entity\PolkaOrderStatus;
  20. use UniSport\Bundle\AppBundle\Service\Messenger\ClearCacheMessage;
  21. use UniSport\Bundle\AppBundle\Service\Messenger\ClientMessage;
  22. use UniSport\Bundle\AppBundle\Service\Messenger\OrderStatusHistoryMessage;
  23. use UniSport\Bundle\AppBundle\Service\Messenger\PolkaClientMessage;
  24. use UniSport\Bundle\AppBundle\Service\PolkaSql\ApiClient;
  25. use WellCommerce\Bundle\AppBundle\DataSet\Admin\LayoutPageDataSet;
  26. use WellCommerce\Bundle\AppBundle\DataSet\Admin\ShopDataSet;
  27. use WellCommerce\Bundle\AppBundle\Entity\Client;
  28. use WellCommerce\Bundle\AppBundle\Entity\LayoutBox;
  29. use WellCommerce\Bundle\AppBundle\Entity\LayoutPage;
  30. use WellCommerce\Bundle\AppBundle\Entity\Pos;
  31. use WellCommerce\Bundle\AppBundle\Entity\Shop;
  32. use WellCommerce\Bundle\AppBundle\Event\ClearCacheEvent;
  33. use WellCommerce\Bundle\CmsBundle\Service\Layout\Configurator\BannerBoxConfigurator;
  34. use WellCommerce\Bundle\CoreBundle\DependencyInjection\AbstractServiceSubscriber;
  35. use WellCommerce\Bundle\CoreBundle\Doctrine\Event\EntityEvent;
  36. use WellCommerce\Bundle\OrderBundle\Entity\Coupon;
  37. use WellCommerce\Bundle\OrderBundle\Entity\OrderStatusHistory;
  38. use WellCommerce\Bundle\OrderBundle\Entity\PaymentMethod;
  39. use WellCommerce\Component\DataSet\Column\Column;
  40. use WellCommerce\Component\DataSet\Event\DataSetEvent;
  41. use WellCommerce\Component\Form\Elements\Fieldset\FieldsetInterface;
  42. use WellCommerce\Component\Form\Event\FormEvent;
  43. /**
  44.  * Class ClientSubscriber
  45.  *
  46.  * @author  Adam Piotrowski <adam@wellcommerce.org>
  47.  */
  48. class UniSportSubscriber extends AbstractServiceSubscriber implements EventSubscriberInterface
  49. {
  50.     protected ApiClient         $apiClient;
  51.     protected LayoutPageDataSet $layoutPageDataSet;
  52.     protected ShopDataSet       $shopDataSet;
  53.     public function __construct(
  54.         ContainerInterface $locator,
  55.         ApiClient $apiClient,
  56.         LayoutPageDataSet $layoutPageDataSet,
  57.         ShopDataSet $shopDataSet
  58.     ) {
  59.         parent::__construct($locator);
  60.         $this->apiClient         $apiClient;
  61.         $this->layoutPageDataSet $layoutPageDataSet;
  62.         $this->shopDataSet       $shopDataSet;
  63.     }
  64.     public static function getSubscribedEvents()
  65.     {
  66.         return [
  67.             'admin.client.dataset.post_init'     => ['onClientDataSetInit'],
  68.             'admin.client.pre_form_init'         => ['onClientFormAdminInit'0],
  69.             'admin.client_group.pre_form_init'   => ['onClientGroupFormAdminInit'0],
  70.             'admin.coupon.pre_form_init'         => ['onCouponFormAdminInit'0],
  71.             'admin.order_status.pre_form_init'   => ['onOrderStatusFormAdminInit'0],
  72.             'admin.feature.pre_form_init'        => ['onFeatureFormAdminInit'0],
  73.             'admin.feature_group.pre_form_init'  => ['onFeatureGroupFormAdminInit'0],
  74.             'admin.order.dataset.post_init'      => ['onOrderDataSetInit'],
  75.             'admin.pos.pre_form_init'            => ['onPosFormAdminInit'0],
  76.             'admin.product.dataset.post_init'    => ['onProductDataSetInit'],
  77.             'admin.product.pre_form_init'        => ['onProductFormAdminInit'0],
  78.             'admin.shop.pre_form_init'           => ['onShopFormAdminInit'],
  79.             'admin.payment_method.pre_form_init' => ['onPaymentMethodFormAdminInit'],
  80.             'client.post_create'                 => ['onClientSave'0],
  81.             'client.post_update'                 => ['onClientSave'0],
  82.             'layout_box.post_update'             => ['onEntitySave'],
  83.             'layout_page.post_update'            => ['onEntitySave'],
  84.             //'page.post_update'                   => ['onEntitySave'],
  85.             //'shop.post_update'                   => ['onEntitySave'],
  86.             //'entity.post_remove'                 => ['onEntitySave'],
  87.             ClearCacheEvent::class               => ['onEntitySave'],
  88.             'order_status_history.post_create'   => ['onOrderStatusHistoryPostCreate'0],
  89.             'security.interactive_login'         => ['onSecurityInteractiveLogin'0],
  90.         ];
  91.     }
  92.     public function onShopFormAdminInit(FormEvent $event)
  93.     {
  94.         $resource $event->getResource();
  95.         if ($resource instanceof Shop) {
  96.             $form    $event->getForm();
  97.             $builder $event->getFormBuilder();
  98.             $gtmData $form->getChildren()->get('gtm_data');
  99.             $gtmData->addChild(
  100.                 $builder->getElement('text_field', [
  101.                     'name'  => 'googleTagManagerTarget',
  102.                     'label' => 'googleTagManager.label.target',
  103.                 ])
  104.             );
  105.             /** @var FieldsetInterface $fieldset */
  106.             $fieldset $form->getChildren()->get('required_data');
  107.             $fieldset->addChild(
  108.                 $builder->getElement('checkbox', [
  109.                     'name'  => 'newsletterEnabled',
  110.                     'label' => 'Newsletter włączony',
  111.                 ])
  112.             );
  113.         }
  114.     }
  115.     public function onPaymentMethodFormAdminInit(FormEvent $event)
  116.     {
  117.         $resource $event->getResource();
  118.         if ($resource instanceof PaymentMethod) {
  119.             $form    $event->getForm();
  120.             $builder $event->getFormBuilder();
  121.             /** @var FieldsetInterface $fieldset */
  122.             $fieldset $form->getChildren()->get('required_data');
  123.             $fieldset->addChild(
  124.                 $builder->getElement('text_field', [
  125.                     'name'  => 'polkaSymbol',
  126.                     'label' => 'Symbol Polka SQL',
  127.                     'rules' => [
  128.                         $builder->getRule('required'),
  129.                     ],
  130.                 ])
  131.             );
  132.         }
  133.     }
  134.     public function onCouponFormAdminInit(FormEvent $event)
  135.     {
  136.         $resource $event->getResource();
  137.         if ($resource instanceof Coupon) {
  138.             $form    $event->getForm();
  139.             $builder $event->getFormBuilder();
  140.             $requiredData $form->getChildren()->get('required_data');
  141.             $requiredData->addChild(
  142.                 $builder->getElement('checkbox', [
  143.                     'name'    => 'appOnly',
  144.                     'label'   => 'Aplikacja mobilna',
  145.                     'comment' => 'Ten kod będzie możliwy do użycia wyłącznie w aplikacji mobilnej',
  146.                 ])
  147.             );
  148.         }
  149.     }
  150.     public function onSecurityInteractiveLogin(InteractiveLoginEvent $event)
  151.     {
  152.         $client $event->getAuthenticationToken()->getUser();
  153.         if ($client instanceof Client) {
  154.             $this->getMessageBus()->dispatch(new PolkaClientMessage($client->getId()));
  155.             $collection $this->getEntityManager()->getRepository(Pos::class)->matching(new Criteria());
  156.             $collection $collection->filter(function (Pos $pos) use ($client) {
  157.                 return $pos->getShops()->contains($client->getShop());
  158.             });
  159.             if ($collection->count() === 1) {
  160.                 $client->setPos($collection->first());
  161.                 $this->getEntityManager()->flush();
  162.             }
  163.         }
  164.     }
  165.     public function onEntitySave()
  166.     {
  167.         $this->getMessageBus()->dispatch(new ClearCacheMessage(), [
  168.             new DelayStamp(100),
  169.         ]);
  170.     }
  171.     public function onOrderStatusHistoryPostCreate(EntityEvent $entityEvent)
  172.     {
  173.         $entity $entityEvent->getEntity();
  174.         if ($entity instanceof OrderStatusHistory) {
  175.             $this->getMessageBus()->dispatch(new OrderStatusHistoryMessage($entity->getId()), [
  176.                 new DelayStamp(100),
  177.             ]);
  178.         }
  179.     }
  180.     public function onClientFormAdminInit(FormEvent $event)
  181.     {
  182.         $form    $event->getForm();
  183.         $builder $event->getFormBuilder();
  184.         /** @var FieldsetInterface $fieldset */
  185.         $fieldset $form->getChildren()->get('required_data');
  186.         $fieldset->addChild(
  187.             $builder->getElement('text_field', [
  188.                 'name'  => 'polkaId',
  189.                 'label' => 'ID w PolkaSQL',
  190.             ])
  191.         );
  192.     }
  193.     public function onClientGroupFormAdminInit(FormEvent $event)
  194.     {
  195.         $form    $event->getForm();
  196.         $builder $event->getFormBuilder();
  197.         /** @var FieldsetInterface $fieldset */
  198.         $fieldset $form->getChildren()->get('required_data');
  199.         $fieldset->addChild(
  200.             $builder->getElement('text_field', [
  201.                 'name'  => 'polkaId',
  202.                 'label' => 'ID w PolkaSQL',
  203.             ])
  204.         );
  205.     }
  206.     public function onOrderStatusFormAdminInit(FormEvent $event)
  207.     {
  208.         $form    $event->getForm();
  209.         $builder $event->getFormBuilder();
  210.         /** @var FieldsetInterface $fieldset */
  211.         $fieldset $form->getChildren()->get('required_data');
  212.         $polkaStatuses $this->getEntityManager()->getRepository(PolkaOrderStatus::class)->findAll();
  213.         $options       = [=> '--- wybierz ---'];
  214.         /** @var PolkaOrderStatus $polkaStatus */
  215.         foreach ($polkaStatuses as $polkaStatus) {
  216.             $options[$polkaStatus->getId()] = $polkaStatus->getPolkaName();
  217.         }
  218.         $fieldset->addChild(
  219.             $builder->getElement('select', [
  220.                 'name'        => 'polkaOrderStatus',
  221.                 'label'       => 'Status PolkaSQL',
  222.                 'options'     => $options,
  223.                 'transformer' => $builder->getRepositoryTransformer('entity'PolkaOrderStatus::class),
  224.             ])
  225.         );
  226.     }
  227.     public function onPosFormAdminInit(FormEvent $event)
  228.     {
  229.         $form    $event->getForm();
  230.         $builder $event->getFormBuilder();
  231.         /** @var FieldsetInterface $fieldset */
  232.         $fieldset $form->getChildren()->get('required_data');
  233.         $layoutBoxes $this->getEntityManager()->getRepository(LayoutBox::class)->findBy(['boxType' => BannerBoxConfigurator::TYPE]);
  234.         $options     = [=> '--- wybierz ---'];
  235.         /** @var LayoutBox $layoutBoxes */
  236.         foreach ($layoutBoxes as $layoutBox) {
  237.             $options[$layoutBox->getId()] = $layoutBox->translate()->getName();
  238.         }
  239.         $fieldset->addChild(
  240.             $builder->getElement('select', [
  241.                 'name'        => 'promotionBox',
  242.                 'label'       => 'Boks promocyjny',
  243.                 'options'     => $options,
  244.                 'transformer' => $builder->getRepositoryTransformer('entity'LayoutBox::class),
  245.             ])
  246.         );
  247.         $fieldset->addChild(
  248.             $builder->getElement('select', [
  249.                 'name'        => 'layoutPage',
  250.                 'label'       => 'common.label.layout_page',
  251.                 'options'     => $this->layoutPageDataSet->getResult('select', [], ['default_option' => '---']),
  252.                 'transformer' => $builder->getRepositoryTransformer('entity'LayoutPage::class),
  253.             ])
  254.         );
  255.         $fieldset->addChild(
  256.             $builder->getElement('multi_select', [
  257.                 'name'        => 'visibleShops',
  258.                 'label'       => 'Zakładka nasze sklepy',
  259.                 'options'     => $this->shopDataSet->getResult('select'),
  260.                 'transformer' => $builder->getRepositoryTransformer('collection'Shop::class),
  261.             ])
  262.         );
  263.     }
  264.     public function onFeatureFormAdminInit(FormEvent $event)
  265.     {
  266.         $form    $event->getForm();
  267.         $builder $event->getFormBuilder();
  268.         /** @var FieldsetInterface $fieldset */
  269.         $fieldset $form->getChildren()->get('required_data');
  270.         $fieldset->addChild(
  271.             $builder->getElement('simple_file', [
  272.                 'name'         => 'icon2',
  273.                 'label'        => 'Ikona (damska)',
  274.                 'repeat_min'   => 0,
  275.                 'repeat_max'   => 1,
  276.                 'session_id'   => $this->getRequestHelper()->getSessionId(),
  277.                 'session_name' => $this->getRequestHelper()->getSessionName(),
  278.                 'file_source'  => 'public/upload/icons/feature/',
  279.                 'file_preview' => '/upload/icons/feature/',
  280.                 'file_types'   => ['svg''jpg''png'],
  281.             ])
  282.         );
  283.     }
  284.     public function onFeatureGroupFormAdminInit(FormEvent $event)
  285.     {
  286.         $form    $event->getForm();
  287.         $builder $event->getFormBuilder();
  288.         /** @var FieldsetInterface $fieldset */
  289.         $fieldset $form->getChildren()->get('required_data');
  290.         $fieldset->addChild(
  291.             $builder->getElement('checkbox', [
  292.                 'name'  => 'activity',
  293.                 'label' => 'Aktywność',
  294.             ])
  295.         );
  296.         $fieldset->addChild(
  297.             $builder->getElement('checkbox', [
  298.                 'name'  => 'activity',
  299.                 'label' => 'Cecha typu "Aktywność"',
  300.             ])
  301.         );
  302.         $fieldset->addChild(
  303.             $builder->getElement('checkbox', [
  304.                 'name'  => 'cutting',
  305.                 'label' => 'Cecha typu "Krój"',
  306.             ])
  307.         );
  308.         $fieldset->addChild(
  309.             $builder->getElement('checkbox', [
  310.                 'name'  => 'profile',
  311.                 'label' => 'Cecha typu "Profil"',
  312.             ])
  313.         );
  314.         $fieldset->addChild(
  315.             $builder->getElement('checkbox', [
  316.                 'name'  => 'conservation',
  317.                 'label' => 'Cecha typu "Pielęgnacja"',
  318.             ])
  319.         );
  320.         $fieldset->addChild(
  321.             $builder->getElement('checkbox', [
  322.                 'name'  => 'technology',
  323.                 'label' => 'Cecha typu "Technologia"',
  324.             ])
  325.         );
  326.         $fieldset->addChild(
  327.             $builder->getElement('checkbox', [
  328.                 'name'  => 'important',
  329.                 'label' => 'Cecha typu "Najważniesze cechy"',
  330.             ])
  331.         );
  332.     }
  333.     public function onProductFormAdminInit(FormEvent $event)
  334.     {
  335.         $form    $event->getForm();
  336.         $builder $event->getFormBuilder();
  337.         /** @var FieldsetInterface $fieldset */
  338.         $fieldset $form->getChildren()->get('main_data');
  339.         $fieldset->addChild(
  340.             $builder->getElement('text_field', [
  341.                 'name'  => 'video',
  342.                 'label' => 'Film Youtube (identyfikator)',
  343.             ])
  344.         );
  345.         $mainData $form->addChild(
  346.             $builder->getElement('nested_fieldset', [
  347.                 'name'  => '3d_data',
  348.                 'label' => 'Zdjęcia 3D',
  349.             ])
  350.         );
  351.         $mainData->addChild(
  352.             $builder->getElement('local_file', [
  353.                 'name'            => 'usdz',
  354.                 'label'           => 'Plik iOS (.usdz)',
  355.                 'repeat_min'      => 0,
  356.                 'repeat_max'      => 1,
  357.                 'max_upload_size' => 100,
  358.                 'session_id'      => $this->getRequestHelper()->getSessionId(),
  359.                 'session_name'    => $this->getRequestHelper()->getSessionName(),
  360.                 'file_source'     => 'public/upload/3d/ios/',
  361.                 'file_types'      => ['usdz'],
  362.             ])
  363.         );
  364.         $mainData->addChild(
  365.             $builder->getElement('local_file', [
  366.                 'name'            => 'glb',
  367.                 'label'           => 'Plik Android (.glb)',
  368.                 'repeat_min'      => 0,
  369.                 'repeat_max'      => 1,
  370.                 'max_upload_size' => 100,
  371.                 'session_id'      => $this->getRequestHelper()->getSessionId(),
  372.                 'session_name'    => $this->getRequestHelper()->getSessionName(),
  373.                 'file_source'     => 'public/upload/3d/android/',
  374.                 'file_types'      => ['glb'],
  375.             ])
  376.         );
  377.     }
  378.     public function onClientSave(EntityEvent $event)
  379.     {
  380.         $client $event->getEntity();
  381.         if ($client instanceof Client) {
  382.             $this->getMessageBus()->dispatch(new ClientMessage($client->getId()), [
  383.                 new DelayStamp($this->getKernel()->getContainer()->getParameter('messenger_unisport_client_delay')),
  384.             ]);
  385.         }
  386.     }
  387.     public function onClientDataSetInit(DataSetEvent $event)
  388.     {
  389.         $dataset $event->getDataSet();
  390.         $columns $dataset->getColumns();
  391.         $columns->add(
  392.             new Column([
  393.                 'alias'  => 'polkaId',
  394.                 'source' => 'client.polkaId',
  395.             ])
  396.         );
  397.     }
  398.     public function onOrderDataSetInit(DataSetEvent $event)
  399.     {
  400.         $dataset $event->getDataSet();
  401.         $columns $dataset->getColumns();
  402.         $columns->add(
  403.             new Column([
  404.                 'alias'  => 'polkaId',
  405.                 'source' => 'orders.polkaId',
  406.             ])
  407.         );
  408.     }
  409.     public function onProductDataSetInit(DataSetEvent $event)
  410.     {
  411.         $dataset $event->getDataSet();
  412.         $columns $dataset->getColumns();
  413.         $columns->add(
  414.             new Column([
  415.                 'alias'  => 'updated',
  416.                 'source' => 'product.updated',
  417.             ])
  418.         );
  419.     }
  420. }