vendor/shopware/storefront/Theme/ThemeConfigValueAccessor.php line 49

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Shopware\Storefront\Theme;
  3. use Shopware\Core\Framework\Feature;
  4. use Shopware\Core\System\SalesChannel\SalesChannelContext;
  5. class ThemeConfigValueAccessor
  6. {
  7.     private AbstractResolvedConfigLoader $themeConfigLoader;
  8.     private array $themeConfig = [];
  9.     private array $keys = ['all' => true];
  10.     private array $traces = [];
  11.     public function __construct(AbstractResolvedConfigLoader $themeConfigLoader)
  12.     {
  13.         $this->themeConfigLoader $themeConfigLoader;
  14.     }
  15.     public static function buildName(string $key): string
  16.     {
  17.         return 'theme.' $key;
  18.     }
  19.     /**
  20.      * @return string|bool|array|float|int|null
  21.      */
  22.     public function get(string $keySalesChannelContext $context, ?string $themeId)
  23.     {
  24.         foreach (array_keys($this->keys) as $trace) {
  25.             $this->traces[$trace][self::buildName($key)] = true;
  26.         }
  27.         $config $this->getThemeConfig($context$themeId);
  28.         if (\array_key_exists($key$config)) {
  29.             return $config[$key];
  30.         }
  31.         return null;
  32.     }
  33.     /**
  34.      * @return mixed|null All kind of data could be cached
  35.      */
  36.     public function trace(string $key, \Closure $param)
  37.     {
  38.         $this->traces[$key] = [];
  39.         $this->keys[$key] = true;
  40.         $result $param();
  41.         unset($this->keys[$key]);
  42.         return $result;
  43.     }
  44.     public function getTrace(string $key): array
  45.     {
  46.         $trace = isset($this->traces[$key]) ? array_keys($this->traces[$key]) : [];
  47.         unset($this->traces[$key]);
  48.         return $trace;
  49.     }
  50.     private function getThemeConfig(SalesChannelContext $context, ?string $themeId): array
  51.     {
  52.         $key $context->getSalesChannelId() . $context->getDomainId() . $themeId;
  53.         if (isset($this->themeConfig[$key])) {
  54.             return $this->themeConfig[$key];
  55.         }
  56.         $themeConfig = [
  57.             'breakpoint' => [
  58.                 'xs' => 0,
  59.                 'sm' => 576,
  60.                 'md' => 768,
  61.                 'lg' => 992,
  62.                 'xl' => 1200,
  63.             ],
  64.         ];
  65.         /** @deprecated tag:v6.5.0 - Bootstrap v5 adds xxl breakpoint */
  66.         if (Feature::isActive('v6.5.0.0')) {
  67.             $themeConfig array_merge_recursive($themeConfig, [
  68.                 'breakpoint' => [
  69.                     'xxl' => 1400,
  70.                 ],
  71.             ]);
  72.         }
  73.         if (!$themeId) {
  74.             return $this->themeConfig[$key] = $this->flatten($themeConfignull);
  75.         }
  76.         $themeConfig array_merge(
  77.             $themeConfig,
  78.             [
  79.                 'assets' => [
  80.                     'css' => [
  81.                         '/css/all.css',
  82.                     ],
  83.                     'js' => [
  84.                         '/js/all.js',
  85.                     ],
  86.                 ],
  87.             ],
  88.             $this->themeConfigLoader->load($themeId$context)
  89.         );
  90.         return $this->themeConfig[$key] = $this->flatten($themeConfignull);
  91.     }
  92.     private function flatten(array $values, ?string $prefix): array
  93.     {
  94.         $prefix $prefix $prefix '.' '';
  95.         $flat = [];
  96.         foreach ($values as $key => $value) {
  97.             $isNested = \is_array($value) && !isset($value[0]);
  98.             if (!$isNested) {
  99.                 $flat[$prefix $key] = $value;
  100.                 continue;
  101.             }
  102.             $nested $this->flatten($value$prefix $key);
  103.             foreach ($nested as $nestedKey => $nestedValue) {
  104.                 $flat[$nestedKey] = $nestedValue;
  105.             }
  106.         }
  107.         return $flat;
  108.     }
  109. }