platform/src/Core/Framework/Context.php line 14

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Shopware\Core\Framework;
  3. use Shopware\Core\Checkout\Cart\Price\Struct\CartPrice;
  4. use Shopware\Core\Defaults;
  5. use Shopware\Core\Framework\Api\Context\AdminApiSource;
  6. use Shopware\Core\Framework\Api\Context\ContextSource;
  7. use Shopware\Core\Framework\Api\Context\SystemSource;
  8. use Shopware\Core\Framework\DataAbstractionLayer\Pricing\CashRoundingConfig;
  9. use Shopware\Core\Framework\Struct\StateAwareTrait;
  10. use Shopware\Core\Framework\Struct\Struct;
  11. class Context extends Struct
  12. {
  13.     use StateAwareTrait;
  14.     public const SYSTEM_SCOPE 'system';
  15.     public const USER_SCOPE 'user';
  16.     public const CRUD_API_SCOPE 'crud';
  17.     public const STATE_ELASTICSEARCH_AWARE 'elasticsearchAware';
  18.     public const SKIP_TRIGGER_FLOW 'skipTriggerFlow';
  19.     /**
  20.      * @var string[]
  21.      *
  22.      * @deprecated tag:v6.5.0 prop will be natively typed as `array` in future versions
  23.      */
  24.     protected $languageIdChain;
  25.     /**
  26.      * @var string
  27.      *
  28.      * @deprecated tag:v6.5.0 prop will be natively typed as `string` in future versions
  29.      */
  30.     protected $versionId;
  31.     /**
  32.      * @var string
  33.      *
  34.      * @deprecated tag:v6.5.0 prop will be natively typed as `string` in future versions
  35.      */
  36.     protected $currencyId;
  37.     /**
  38.      * @var float
  39.      *
  40.      * @deprecated tag:v6.5.0 prop will be natively typed as `float` in future versions
  41.      */
  42.     protected $currencyFactor;
  43.     /**
  44.      * @var string
  45.      *
  46.      * @deprecated tag:v6.5.0 prop will be natively typed as `string` in future versions
  47.      */
  48.     protected $scope self::USER_SCOPE;
  49.     /**
  50.      * @var array
  51.      *
  52.      * @deprecated tag:v6.5.0 prop will be natively typed as `array` in future versions
  53.      */
  54.     protected $ruleIds;
  55.     /**
  56.      * @var ContextSource
  57.      *
  58.      * @deprecated tag:v6.5.0 prop will be natively typed as `ContextSource` in future versions
  59.      */
  60.     protected $source;
  61.     /**
  62.      * @var bool
  63.      *
  64.      * @deprecated tag:v6.5.0 prop will be natively typed as `bool` in future versions
  65.      */
  66.     protected $considerInheritance;
  67.     /**
  68.      * @see CartPrice::TAX_STATE_GROSS, CartPrice::TAX_STATE_NET, CartPrice::TAX_STATE_FREE
  69.      *
  70.      * @var string
  71.      *
  72.      * @deprecated tag:v6.5.0 prop will be natively typed as `string` in future versions
  73.      */
  74.     protected $taxState CartPrice::TAX_STATE_GROSS;
  75.     /**
  76.      * @var CashRoundingConfig
  77.      *
  78.      * @deprecated tag:v6.5.0 prop will be natively typed as `CashRoundingConfig` in future versions
  79.      */
  80.     protected $rounding;
  81.     public function __construct(
  82.         ContextSource $source,
  83.         array $ruleIds = [],
  84.         string $currencyId Defaults::CURRENCY,
  85.         array $languageIdChain = [Defaults::LANGUAGE_SYSTEM],
  86.         string $versionId Defaults::LIVE_VERSION,
  87.         float $currencyFactor 1.0,
  88.         bool $considerInheritance false,
  89.         string $taxState CartPrice::TAX_STATE_GROSS,
  90.         ?CashRoundingConfig $rounding null
  91.     ) {
  92.         $this->source $source;
  93.         if ($source instanceof SystemSource) {
  94.             $this->scope self::SYSTEM_SCOPE;
  95.         }
  96.         $this->ruleIds $ruleIds;
  97.         $this->currencyId $currencyId;
  98.         $this->versionId $versionId;
  99.         $this->currencyFactor $currencyFactor;
  100.         if (empty($languageIdChain)) {
  101.             throw new \InvalidArgumentException('Argument languageIdChain must not be empty');
  102.         }
  103.         $this->languageIdChain array_keys(array_flip(array_filter($languageIdChain)));
  104.         $this->considerInheritance $considerInheritance;
  105.         $this->taxState $taxState;
  106.         $this->rounding $rounding ?? new CashRoundingConfig(20.01true);
  107.     }
  108.     /**
  109.      * @internal
  110.      */
  111.     public static function createDefaultContext(?ContextSource $source null): self
  112.     {
  113.         $source $source ?? new SystemSource();
  114.         return new self($source);
  115.     }
  116.     public function getSource(): ContextSource
  117.     {
  118.         return $this->source;
  119.     }
  120.     public function getVersionId(): string
  121.     {
  122.         return $this->versionId;
  123.     }
  124.     public function getLanguageId(): string
  125.     {
  126.         return $this->languageIdChain[0];
  127.     }
  128.     public function getCurrencyId(): string
  129.     {
  130.         return $this->currencyId;
  131.     }
  132.     public function getCurrencyFactor(): float
  133.     {
  134.         return $this->currencyFactor;
  135.     }
  136.     public function getRuleIds(): array
  137.     {
  138.         return $this->ruleIds;
  139.     }
  140.     public function getLanguageIdChain(): array
  141.     {
  142.         return $this->languageIdChain;
  143.     }
  144.     public function createWithVersionId(string $versionId): self
  145.     {
  146.         $context = new self(
  147.             $this->source,
  148.             $this->ruleIds,
  149.             $this->currencyId,
  150.             $this->languageIdChain,
  151.             $versionId,
  152.             $this->currencyFactor,
  153.             $this->considerInheritance,
  154.             $this->taxState,
  155.             $this->rounding
  156.         );
  157.         $context->scope $this->scope;
  158.         foreach ($this->getExtensions() as $key => $extension) {
  159.             $context->addExtension($key$extension);
  160.         }
  161.         return $context;
  162.     }
  163.     /**
  164.      * @return mixed the return value of the provided callback function
  165.      */
  166.     public function scope(string $scope, callable $callback)
  167.     {
  168.         $currentScope $this->getScope();
  169.         $this->scope $scope;
  170.         try {
  171.             $result $callback($this);
  172.         } finally {
  173.             $this->scope $currentScope;
  174.         }
  175.         return $result;
  176.     }
  177.     public function getScope(): string
  178.     {
  179.         return $this->scope;
  180.     }
  181.     public function considerInheritance(): bool
  182.     {
  183.         return $this->considerInheritance;
  184.     }
  185.     public function setConsiderInheritance(bool $considerInheritance): void
  186.     {
  187.         $this->considerInheritance $considerInheritance;
  188.     }
  189.     public function getTaxState(): string
  190.     {
  191.         return $this->taxState;
  192.     }
  193.     public function setTaxState(string $taxState): void
  194.     {
  195.         $this->taxState $taxState;
  196.     }
  197.     public function isAllowed(string $privilege): bool
  198.     {
  199.         if ($this->source instanceof AdminApiSource) {
  200.             return $this->source->isAllowed($privilege);
  201.         }
  202.         return true;
  203.     }
  204.     public function setRuleIds(array $ruleIds): void
  205.     {
  206.         $this->ruleIds array_filter(array_values($ruleIds));
  207.     }
  208.     public function enableInheritance(callable $function)
  209.     {
  210.         $previous $this->considerInheritance;
  211.         $this->considerInheritance true;
  212.         $result $function($this);
  213.         $this->considerInheritance $previous;
  214.         return $result;
  215.     }
  216.     public function disableInheritance(callable $function)
  217.     {
  218.         $previous $this->considerInheritance;
  219.         $this->considerInheritance false;
  220.         $result $function($this);
  221.         $this->considerInheritance $previous;
  222.         return $result;
  223.     }
  224.     public function getApiAlias(): string
  225.     {
  226.         return 'context';
  227.     }
  228.     public function getRounding(): CashRoundingConfig
  229.     {
  230.         return $this->rounding;
  231.     }
  232.     public function setRounding(CashRoundingConfig $rounding): void
  233.     {
  234.         $this->rounding $rounding;
  235.     }
  236. }