custom/plugins/VerignDvAccessibilitySw6/src/Subscriber/Storefront/FrontendSubscriber.php line 41

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Verign\DvAccessibility\Subscriber\Storefront;
  3. use Shopware\Core\Framework\DataAbstractionLayer\Event\EntityLoadedEvent;
  4. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  5. use Shopware\Storefront\Event\StorefrontRenderEvent;
  6. use Shopware\Core\System\SystemConfig\SystemConfigService;
  7. use Symfony\Contracts\Translation\TranslatorInterface;
  8. class FrontendSubscriber implements EventSubscriberInterface
  9. {
  10.     const DOMAIN 'VerignDvAccessibilitySw6';
  11.     const CONFIG_ACCESS_NAME 'VerignDvAccessibilitySw6.config.';
  12.     private SystemConfigService $configService;
  13.     private TranslatorInterface $translator;
  14.     private EntityRepositoryInterface $salesChannelRepository;
  15.     private string $settingType 'default';
  16.     public function __construct(SystemConfigService $configServiceTranslatorInterface $translator) {
  17.         $this->configService $configService;
  18.         $this->translator $translator;
  19.     }
  20.     /**
  21.      * @inheritDoc
  22.      */
  23.     public static function getSubscribedEvents(): array
  24.     {
  25.         // Return the events to listen to as array like this:  <event to listen to> => <method to execute>
  26.         return [
  27.             StorefrontRenderEvent::class => 'onStorefrontRender'
  28.         ];
  29.     }
  30.     /**
  31.      * @param StorefrontRenderEvent $event
  32.      */
  33.     public function onStorefrontRender(StorefrontRenderEvent $event)
  34.     {
  35.         $salesChannelId $event->getContext()->getSource()->getSalesChannelId();
  36.         $defaultConfiguration $this->configService->getDomain(self::DOMAIN);
  37.         $salesChannelConfiguration $this->configService->getDomain(self::DOMAIN$salesChannelId);
  38.         $configuration $this->buildJson($defaultConfiguration$salesChannelConfiguration);
  39.         $event->setParameter('dvAccessibilityConfiguration'$configuration);
  40.     }
  41.     public function buildJson($config$salesChannelConfig): string {
  42.         $json = [];
  43.         $json['language'] = 'en';
  44.         $toolConfiguration = [
  45.             'default' => $config,
  46.             'specific' => $salesChannelConfig
  47.         ];
  48.         $json $this->addEnabledModules($json$toolConfiguration);
  49.         $json $this->addEnabledButtons($json$toolConfiguration);
  50.         $json $this->addModules($json$toolConfiguration);
  51.         $json $this->addStandardToolPosition($json$toolConfiguration);
  52.         $json $this->addTranslation($json);
  53.         $json $this->addFilters($json$toolConfiguration);
  54.         return json_encode($json);
  55.     }
  56.     public function setSettingType($config$key): void {
  57.         if(isset($config['specific'][self::CONFIG_ACCESS_NAME $key]) && $config['specific'][self::CONFIG_ACCESS_NAME $key] != null) {
  58.             $this->settingType 'specific';
  59.         } else {
  60.             $this->settingType 'default';
  61.         }
  62.     }
  63.     public function addEnabledModules($json$config): array {
  64.         $enabledModules = [
  65.             'keyboardNav',
  66.             'contrast',
  67.             'highlightLinks',
  68.             'biggerText',
  69.             'textSpacing',
  70.             'legibleFonts',
  71.             'bigCursor',
  72.             'readingGuide',
  73.             'tooltips',
  74.             'pauseAnimations'
  75.         ];
  76.         foreach($enabledModules as $module) {
  77.             $this->setSettingType($config$module);
  78.             if($config[$this->settingType][self::CONFIG_ACCESS_NAME $module] === true) {
  79.                 $config[$this->settingType][self::CONFIG_ACCESS_NAME $module] = "1";
  80.             }
  81.             $json['enabledModules'][$module] = $config[$this->settingType][self::CONFIG_ACCESS_NAME $module];
  82.         }
  83.         return $json;
  84.     }
  85.     public function addEnabledButtons($json$config): array {
  86.         $enabledButtons = [
  87.             'enablePageStructureButton',
  88.             'enablePositionButton',
  89.             'enableResetButton'
  90.         ];
  91.         foreach($enabledButtons as $button) {
  92.             $this->setSettingType($config$button);
  93.             if($config[$this->settingType][self::CONFIG_ACCESS_NAME $button] === true) {
  94.                 $config[$this->settingType][self::CONFIG_ACCESS_NAME $button] = "1";
  95.             }
  96.             $json[$button] = $config[$this->settingType][self::CONFIG_ACCESS_NAME $button];
  97.         }
  98.         return $json;
  99.     }
  100.     public function addModules($json$config): array {
  101.         $generalModules = [
  102.             'moduleKeyboardNav',
  103.             'moduleContrast',
  104.             'moduleHighlightLinks',
  105.             'moduleBiggerText',
  106.             'moduleTextSpacing',
  107.             'moduleBigCursor',
  108.             'moduleReadingGuide',
  109.             'toggleBackgroundColor',
  110.         ];
  111.         $moduleContrast = [
  112.             'useInvertColors',
  113.             'useDarkContrast',
  114.             'useLightContrast',
  115.             'useDesaturate'
  116.         ];
  117.         foreach($generalModules as $module) {
  118.             switch($module) {
  119.                 case 'moduleKeyboardNav':
  120.                     $this->setSettingType($config$module);
  121.                     $json[$module]['frameColor'] = $config[$this->settingType][self::CONFIG_ACCESS_NAME $module];
  122.                     break;
  123.                 case 'moduleContrast':
  124.                     foreach($moduleContrast as $contrast) {
  125.                         $this->setSettingType($config$contrast);
  126.                         if($config[$this->settingType][self::CONFIG_ACCESS_NAME $contrast] === true) {
  127.                             $config[$this->settingType][self::CONFIG_ACCESS_NAME $contrast] = "1";
  128.                         }
  129.                         $json[$module][$contrast] = $config[$this->settingType][self::CONFIG_ACCESS_NAME $contrast];
  130.                     }
  131.                     break;
  132.                 case 'moduleHighlightLinks':
  133.                     $this->setSettingType($config'moduleHighlightLinksColor');
  134.                     $json[$module]['color'] = $config[$this->settingType][self::CONFIG_ACCESS_NAME 'moduleHighlightLinksColor'];
  135.                     $this->setSettingType($config'moduleHighlightLinksBackground');
  136.                     $json[$module]['background'] = $config[$this->settingType][self::CONFIG_ACCESS_NAME 'moduleHighlightLinksBackground'];
  137.                     $this->setSettingType($config'moduleHighlightLinksHighlightColor');
  138.                     $json[$module]['highlightColor'] = $config[$this->settingType][self::CONFIG_ACCESS_NAME 'moduleHighlightLinksHighlightColor'];
  139.                     break;
  140.                 case 'moduleTextSpacing':
  141.                 case 'moduleBiggerText':
  142.                     $this->setSettingType($config$module);
  143.                     $json[$module]['factor'] = $config[$this->settingType][self::CONFIG_ACCESS_NAME $module];
  144.                     break;
  145.                 case 'moduleBigCursor':
  146.                     $this->setSettingType($config$module);
  147.                     $json[$module]['imageURL'] = $config[$this->settingType][self::CONFIG_ACCESS_NAME $module];
  148.                     break;
  149.                 case 'moduleReadingGuide':
  150.                     $this->setSettingType($config'moduleReadingGuideColor');
  151.                     $json[$module]['color'] = $config[$this->settingType][self::CONFIG_ACCESS_NAME 'moduleReadingGuideColor'];
  152.                     $this->setSettingType($config'moduleReadingGuideBackgroundColor');
  153.                     $json[$module]['background'] = $config[$this->settingType][self::CONFIG_ACCESS_NAME 'moduleReadingGuideBackgroundColor'];
  154.                     $this->setSettingType($config'moduleHighlightLinksHighlightColor');
  155.                     $json[$module]['readingGuideColor'] = $config[$this->settingType][self::CONFIG_ACCESS_NAME 'moduleHighlightLinksHighlightColor'];
  156.                     break;
  157.                 case 'toggleBackgroundColor':
  158.                     $this->setSettingType($config$module);
  159.                     $json[$module] = $config[$this->settingType][self::CONFIG_ACCESS_NAME $module];
  160.                     break;
  161.                 default:
  162.                     $this->setSettingType($config'default');
  163.                     $json[$module] = $config[$this->settingType][self::CONFIG_ACCESS_NAME $module];
  164.                     break;
  165.             }
  166.         }
  167.         $json['moduleLegibleFonts'] = ['dvaccess-legible-fonts''dvaccess-legible-fonts-1'];
  168.         return $json;
  169.     }
  170.     public function addFilters($json$config)
  171.     {
  172.         /*$filters = [
  173.             'filterHeight',
  174.             'filterDisplayBlock',
  175.             'filterLineHeight'
  176.         ];*/
  177.         $this->setSettingType($config'filterHeight');
  178.         $json['filters']['height'] = $config[$this->settingType][self::CONFIG_ACCESS_NAME 'filterHeight'];
  179.         $this->setSettingType($config'filterDisplayBlock');
  180.         $json['filters']['displayBlock'] = $config[$this->settingType][self::CONFIG_ACCESS_NAME 'filterDisplayBlock'];
  181.         $this->setSettingType($config'filterLineHeight');
  182.         $json['filters']['lineHeight'] = $config[$this->settingType][self::CONFIG_ACCESS_NAME 'filterLineHeight'];
  183.         $this->setSettingType($config'filterWrapInput');
  184.         $json['filters']['wrapInput'] = $config[$this->settingType][self::CONFIG_ACCESS_NAME 'filterWrapInput'];
  185.         return $json;
  186.     }
  187.     public function addStandardToolPosition($json$config): array {
  188.         $this->setSettingType($config'standardToolPosition');
  189.         $setStandardPosition $config[$this->settingType][self::CONFIG_ACCESS_NAME 'standardToolPosition'];
  190.         $defaultPosition 'LeftBottom';
  191.         if($defaultPosition == $setStandardPosition) {
  192.             $json['standardToolPosition'] = 6;
  193.         } else {
  194.             switch($setStandardPosition) {
  195.                 case 'leftTop':
  196.                     $json['standardToolPosition'] = 0;
  197.                     break;
  198.                 case 'leftMiddle':
  199.                     $json['standardToolPosition'] = 7;
  200.                     break;
  201.                 case 'rightTop':
  202.                     $json['standardToolPosition'] = 2;
  203.                     break;
  204.                 case 'rightMiddle':
  205.                     $json['standardToolPosition'] = 3;
  206.                     break;
  207.                 case 'rightBottom':
  208.                     $json['standardToolPosition'] = 4;
  209.                     break;
  210.                 case 'centerTop':
  211.                     $json['standardToolPosition'] = 1;
  212.                     break;
  213.                 case 'centerBottom':
  214.                     $json['standardToolPosition'] = 5;
  215.                     break;
  216.                 default:
  217.                     $json['standardToolPosition'] = 6;
  218.                     break;
  219.             }
  220.         }
  221.         return $json;
  222.     }
  223.     public function addTranslation($json): array {
  224.         $languages = ['en''de'];
  225.         $labelNames = [
  226.             'app.toggle.label',
  227.             'menu.title',
  228.             'menu.button.move',
  229.             'menu.button.page-structure',
  230.             'menu.button.reset',
  231.             'menu.header.headers',
  232.             'menu.header.landmarks',
  233.             'menu.header.links',
  234.             'menu.position.left-top',
  235.             'menu.position.left-center',
  236.             'menu.position.left-bottom',
  237.             'menu.position.right-top',
  238.             'menu.position.right-center',
  239.             'menu.position.right-bottom',
  240.             'menu.position.center-top',
  241.             'menu.position.center-bottom',
  242.             'module.button.bigger-text',
  243.             'module.button.bigger-text.0',
  244.             'module.button.bigger-text.1',
  245.             'module.button.bigger-text.2',
  246.             'module.button.bigger-text.3',
  247.             'module.button.cursor',
  248.             'module.button.cursor.0',
  249.             'module.button.contrast',
  250.             'module.button.contrast.0',
  251.             'module.button.contrast.1',
  252.             'module.button.contrast.2',
  253.             'module.button.contrast.3',
  254.             'module.button.highlight-links',
  255.             'module.button.keyboard-nav',
  256.             'module.button.legible-fonts',
  257.             'module.button.legible-fonts.0',
  258.             'module.button.legible-fonts.1',
  259.             'module.button.pause-animations',
  260.             'module.button.pause-animations.0',
  261.             'module.button.reading-guide',
  262.             'module.button.text-spacing',
  263.             'module.button.text-spacing.0',
  264.             'module.button.text-spacing.1',
  265.             'module.button.text-spacing.2',
  266.             'module.button.tooltips'
  267.             ];
  268.         foreach($languages as $language) {
  269.             foreach($labelNames as $label) {
  270.                 $translation $this->translator->trans($label);
  271.                 if($translation == $label) {
  272.                     $translation $this->translator->trans($label '.origin');
  273.                 }
  274.                 $json['snippets'][$language][$label] = $translation;
  275.             }
  276.         }
  277.         return $json;
  278.     }
  279. }