custom/plugins/EasyCreditRatenkauf/src/Marketing/Marketing.php line 178

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. /*
  3.  * (c) NETZKOLLEKTIV GmbH <kontakt@netzkollektiv.com>
  4.  * For the full copyright and license information, please view the LICENSE
  5.  * file that was distributed with this source code.
  6.  */
  7. namespace Netzkollektiv\EasyCredit\Marketing;
  8. use Netzkollektiv\EasyCredit\Helper\Payment as PaymentHelper;
  9. use Netzkollektiv\EasyCredit\Setting\Exception\SettingsInvalidException;
  10. use Netzkollektiv\EasyCredit\Setting\Service\SettingsServiceInterface;
  11. use Shopware\Core\Checkout\Cart\SalesChannel\CartService;
  12. use Shopware\Core\System\SalesChannel\SalesChannelContext;
  13. use Shopware\Storefront\Page\Checkout\Cart\CheckoutCartPageLoadedEvent;
  14. use Shopware\Storefront\Page\Checkout\Offcanvas\OffcanvasCartPageLoadedEvent;
  15. use Shopware\Storefront\Page\Product\ProductPageLoadedEvent;
  16. use Shopware\Storefront\Page\Navigation\NavigationPageLoadedEvent;
  17. use Shopware\Storefront\Page\GenericPageLoadedEvent;
  18. use Shopware\Storefront\Page\Search\SearchPageLoadedEvent;
  19. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  20. use Netzkollektiv\EasyCredit\Service\FlexpriceService;
  21. use Netzkollektiv\EasyCredit\Service\PaymentAvailability;
  22. use Shopware\Core\Framework\Struct\ArrayEntity;
  23. class Marketing implements EventSubscriberInterface
  24. {
  25.     private SettingsServiceInterface $settings;
  26.     private $cartService;
  27.     private PaymentHelper $paymentHelper;
  28.     private FlexpriceService $flexpriceService;
  29.     private PaymentAvailability $paymentAvailabilityService;
  30.     public function __construct(
  31.         SettingsServiceInterface $settingsService,
  32.         CartService $cartService,
  33.         PaymentHelper $paymentHelper,
  34.         FlexpriceService $flexpriceService,
  35.         PaymentAvailability $paymentAvailabilityService
  36.     ) {
  37.         $this->settings $settingsService;
  38.         $this->cartService $cartService;
  39.         $this->paymentHelper $paymentHelper;
  40.         $this->flexpriceService $flexpriceService;
  41.         $this->paymentAvailabilityService $paymentAvailabilityService;
  42.     }
  43.     public static function getSubscribedEvents(): array
  44.     {
  45.         return [
  46.             ProductPageLoadedEvent::class => 'onProductPageLoaded',
  47.             CheckoutCartPageLoadedEvent::class => 'onCartPageLoaded',
  48.             OffcanvasCartPageLoadedEvent::class => 'onOffcanvasCartPageLoaded',
  49.             GenericPageLoadedEvent::class => 'onPageLoaded',
  50.             NavigationPageLoadedEvent::class => 'onNavigationPageLoaded',
  51.             SearchPageLoadedEvent::class => 'onSearchPageLoaded',
  52.         ];
  53.     }
  54.     public function onProductPageLoaded(ProductPageLoadedEvent $event): void
  55.     {
  56.         $context $event->getSalesChannelContext();
  57.         $product $event->getPage()->getProduct();
  58.         $settings $this->getSettings($context);
  59.         if (!$settings) {
  60.             return;
  61.         }
  62.         if (!$settings->getWidgetEnabled()) {
  63.             return;
  64.         }
  65.         $this->addVariables($event, [
  66.             'widgetSelector' => $settings->getWidgetSelectorProductDetail(),
  67.             'disableFlexprice' => $this->flexpriceService->shouldDisableFlexpriceForProduct($context$product),
  68.             'amount' => (\count($product->getCalculatedPrices()) > ) ? $product->getCalculatedPrices()->last()->getUnitPrice() : $product->getCalculatedPrice()->getUnitPrice()
  69.         ]);
  70.     }
  71.     public function onCartPageLoaded(CheckoutCartPageLoadedEvent $event): void
  72.     {
  73.         $context $event->getSalesChannelContext();
  74.         $settings $this->getSettings($context);
  75.         if (!$settings) {
  76.             return;
  77.         }
  78.         if (!$settings->getWidgetEnabled()) {
  79.             return;
  80.         }
  81.         $cart $this->cartService->getCart($context->getToken(), $context);
  82.         $this->addVariables($event, [
  83.             'widgetSelector' => $settings->getWidgetSelectorCart(),
  84.             'amount' => $cart->getPrice()->getTotalPrice(),
  85.         ]);
  86.     }
  87.     public function onOffcanvasCartPageLoaded(OffcanvasCartPageLoadedEvent $event): void
  88.     {
  89.         $context $event->getSalesChannelContext();
  90.         $settings $this->getSettings($context);
  91.         if (!$settings) {
  92.             return;
  93.         }
  94.         if (!$settings->getWidgetEnabled()) {
  95.             return;
  96.         }
  97.         $cart $this->cartService->getCart($context->getToken(), $context);
  98.         $this->addVariables($event, [
  99.             'widgetSelector' => $settings->getWidgetSelectorOffCanvasCart(),
  100.             'amount' => $cart->getPrice()->getTotalPrice(),
  101.         ]);
  102.     }
  103.     public function onPageLoaded(GenericPageLoadedEvent $event): void
  104.     {
  105.         $context $event->getSalesChannelContext();
  106.         $settings $this->getSettings($context);
  107.         if (!$settings) {
  108.             return;
  109.         }
  110.         $modalIsOpen 'true';
  111.         if ( \intval$settings->getModalSettingsDelay() ) > ) {
  112.             $modalIsOpen 'false';
  113.         }
  114.         $this->addVariables($event, [
  115.             'apiKey' => $settings->getWebshopId(),
  116.             'paymentTypes' => $this->paymentAvailabilityService->getAvailablePaymentTypes($event->getSalesChannelContext()),
  117.             'modal' => $settings->getModalEnabled(),
  118.             'modalIsOpen' => $modalIsOpen,
  119.             'modalSettingsDelay' => $settings->getModalSettingsDelay(),
  120.             'modalSettingsSnoozeFor' => $settings->getModalSettingsSnoozeFor(),
  121.             'modalSettingsMedia' => $settings->getModalSettingsMedia(),
  122.             'flashbox' => $settings->getFlashboxEnabled(),
  123.             'flashboxSettingsMedia' => $settings->getFlashboxSettingsMedia(),
  124.             'bar' => $settings->getBarEnabled(),
  125.             'widgetEnabled' => $settings->getWidgetEnabled(),
  126.             'expressProductEnabled' => $settings->getExpressProductEnabled(),
  127.             'expressCartEnabled' => $settings->getExpressCartEnabled()
  128.         ]);
  129.     }
  130.     public function onNavigationPageLoaded(NavigationPageLoadedEvent $event): void
  131.     {
  132.         $context $event->getSalesChannelContext();
  133.         $settings $this->getSettings($context);
  134.         if (!$settings) {
  135.             return;
  136.         }
  137.         $this->addVariables($event, [
  138.             'apiKey' => $settings->getWebshopId(),
  139.             'widgetEnabled' => $settings->getWidgetEnabled(),
  140.             'widgetSelector' => $settings->getWidgetSelectorProductListing(),
  141.             'card' => $settings->getCardEnabled(),
  142.             'cardSettingsPosition' => $settings->getCardSettingsPosition(),
  143.             'cardSettingsMedia' => $settings->getCardSettingsMedia(),
  144.         ]);
  145.     }
  146.     public function onSearchPageLoaded(SearchPageLoadedEvent $event): void
  147.     {
  148.         $context $event->getSalesChannelContext();
  149.         $settings $this->getSettings($context);
  150.         if (!$settings) {
  151.             return;
  152.         }
  153.         $this->addVariables($event, [
  154.             'card' => $settings->getCardSearchEnabled(),
  155.             'cardSettingsPosition' => $settings->getCardSettingsPosition(),
  156.             'cardSettingsMedia' => $settings->getCardSettingsMedia(),
  157.         ]);
  158.     }
  159.     protected function getSettings(SalesChannelContext $context)
  160.     {
  161.         if (!$this->paymentHelper->isEasyCreditInSalesChannel($context)) {
  162.             return false;
  163.         }
  164.         try {
  165.             $settings $this->settings->getSettings($context->getSalesChannel()->getId());
  166.         } catch (SettingsInvalidException $e) {
  167.             return false;
  168.         }
  169.         return $settings;
  170.     }
  171.     protected function addVariables($event$variables) {
  172.         if (!$this->paymentAvailabilityService->getAvailablePaymentTypes($event->getSalesChannelContext())) {
  173.             return;
  174.         }
  175.         $extension $event->getPage()->getExtension('easycredit');
  176.         if ($extension === null) {
  177.             $extension = new ArrayEntity();
  178.         }
  179.         $extension->assign($variables);
  180.         $event->getPage()->addExtension('easycredit'$extension);
  181.     }
  182. }