Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
IsProductSalableConditionChain.php
Go to the documentation of this file.
1 <?php
6 declare(strict_types=1);
7 
9 
13 
18 {
22  private $unrequiredConditions;
23 
27  private $requiredConditions;
28 
32  public function __construct(
33  array $conditions
34  ) {
35  $this->setConditions($conditions);
36  }
37 
41  private function setConditions(array $conditions)
42  {
43  $this->validateConditions($conditions);
44 
45  $unrequiredConditions = array_filter(
46  $conditions,
47  function ($item) {
48  return !isset($item['required']);
49  }
50  );
51  $this->unrequiredConditions = array_column($this->sortConditions($unrequiredConditions), 'object');
52 
53  $requiredConditions = array_filter(
54  $conditions,
55  function ($item) {
56  return isset($item['required']) && (bool) $item['required'];
57  }
58  );
59  $this->requiredConditions = array_column($requiredConditions, 'object');
60  }
61 
66  private function validateConditions(array $conditions)
67  {
68  foreach ($conditions as $condition) {
69  if (empty($condition['object'])) {
70  throw new LocalizedException(__('Parameter "object" must be present.'));
71  }
72 
73  if (empty($condition['required']) && empty($condition['sort_order'])) {
74  throw new LocalizedException(__('Parameter "sort_order" must be present for unrequired conditions.'));
75  }
76 
77  if (!$condition['object'] instanceof IsProductSalableInterface) {
78  throw new LocalizedException(
79  __('Condition have to implement IsProductSalableInterface.')
80  );
81  }
82  }
83  }
84 
89  private function sortConditions(array $conditions)
90  {
91  usort($conditions, function (array $conditionLeft, array $conditionRight) {
92  if ($conditionLeft['sort_order'] == $conditionRight['sort_order']) {
93  return 0;
94  }
95  return ($conditionLeft['sort_order'] < $conditionRight['sort_order']) ? -1 : 1;
96  });
97  return $conditions;
98  }
99 
103  public function execute(string $sku, int $stockId): bool
104  {
105  try {
106  foreach ($this->requiredConditions as $requiredCondition) {
107  if ($requiredCondition->execute($sku, $stockId) === false) {
108  return false;
109  }
110  }
111  foreach ($this->unrequiredConditions as $unrequiredCondition) {
112  if ($unrequiredCondition->execute($sku, $stockId) === true) {
113  return true;
114  }
115  }
116  } catch (SkuIsNotAssignedToStockException $e) {
117  return false;
118  }
119 
120  return false;
121  }
122 }
__()
Definition: __.php:13