vendor/shopware/core/Content/Product/SalesChannel/Detail/AvailableCombinationResult.php line 42

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Shopware\Core\Content\Product\SalesChannel\Detail;
  3. use Shopware\Core\Framework\Feature;
  4. use Shopware\Core\Framework\Log\Package;
  5. use Shopware\Core\Framework\Struct\Struct;
  6. #[Package('inventory')]
  7. class AvailableCombinationResult extends Struct
  8. {
  9.     /**
  10.      * @var array
  11.      */
  12.     protected $hashes = [];
  13.     /**
  14.      * @var array
  15.      */
  16.     protected $optionIds = [];
  17.     /**
  18.      * @var array
  19.      */
  20.     protected $combinations = [];
  21.     protected array $combinationDetails = [];
  22.     /**
  23.      * @param array<string> $optionIds
  24.      */
  25.     public function hasCombination(array $optionIds): bool
  26.     {
  27.         return isset($this->hashes[$this->calculateHash($optionIds)]);
  28.     }
  29.     /**
  30.      * @deprecated tag:v6.5.0 - Parameter $available will be mandatory in future implementation
  31.      *
  32.      * @param array<string> $optionIds
  33.      */
  34.     public function addCombination(array $optionIdsbool $available true): void
  35.     {
  36.         if (\func_num_args() < 2) {
  37.             Feature::triggerDeprecationOrThrow(
  38.                 'v6.5.0.0',
  39.                 'Second parameter $available of method `addCombination()` in `AvailableCombinationResult` will be required in v6.5.0.0.'
  40.             );
  41.         }
  42.         $hash $this->calculateHash($optionIds);
  43.         $this->hashes[$hash] = true;
  44.         $this->combinations[$hash] = $optionIds;
  45.         $this->combinationDetails[$hash] = [
  46.             'available' => $available,
  47.         ];
  48.         foreach ($optionIds as $id) {
  49.             $this->optionIds[$id] = true;
  50.         }
  51.     }
  52.     public function hasOptionId(string $optionId): bool
  53.     {
  54.         return isset($this->optionIds[$optionId]);
  55.     }
  56.     public function getHashes(): array
  57.     {
  58.         return array_keys($this->hashes);
  59.     }
  60.     public function getCombinations(): array
  61.     {
  62.         return $this->combinations;
  63.     }
  64.     /**
  65.      * @param array<string> $optionIds
  66.      */
  67.     public function isAvailable(array $optionIds): bool
  68.     {
  69.         return $this->combinationDetails[$this->calculateHash($optionIds)]['available'] ?? false;
  70.     }
  71.     /**
  72.      * @param array<string> $optionIds
  73.      */
  74.     private function calculateHash(array $optionIds): string
  75.     {
  76.         $optionIds array_values($optionIds);
  77.         sort($optionIds);
  78.         return md5((string) json_encode($optionIds));
  79.     }
  80. }