Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
ToModel.php
Go to the documentation of this file.
1 <?php
7 
10 use Magento\SalesRule\Model\Data\Rule as RuleDataModel;
12 
13 class ToModel
14 {
18  protected $ruleFactory;
19 
24 
29  public function __construct(
30  \Magento\SalesRule\Model\RuleFactory $ruleFactory,
31  \Magento\Framework\Reflection\DataObjectProcessor $dataObjectProcessor
32  ) {
33  $this->ruleFactory = $ruleFactory;
34  $this->dataObjectProcessor = $dataObjectProcessor;
35  }
36 
42  protected function mapConditions(\Magento\SalesRule\Model\Rule $ruleModel, RuleDataModel $dataModel)
43  {
44  $condition = $dataModel->getCondition();
45  if ($condition) {
46  $array = $this->dataModelToArray($condition);
47  $ruleModel->getConditions()->setConditions([])->loadArray($array);
48  }
49 
50  return $this;
51  }
52 
58  protected function mapActionConditions(\Magento\SalesRule\Model\Rule $ruleModel, RuleDataModel $dataModel)
59  {
60  $condition = $dataModel->getActionCondition();
61  if ($condition) {
62  $array = $this->dataModelToArray($condition, 'actions');
63  $ruleModel->getActions()->setActions([])->loadArray($array, 'actions');
64  }
65 
66  return $this;
67  }
68 
74  protected function mapStoreLabels(Rule $ruleModel, RuleDataModel $dataModel)
75  {
76  //translate store labels object into array
77  if ($dataModel->getStoreLabels() !== null) {
78  $storeLabels = [];
80  foreach ($dataModel->getStoreLabels() as $ruleLabel) {
81  $storeLabels[$ruleLabel->getStoreId()] = $ruleLabel->getStoreLabel();
82  }
83  $ruleModel->setStoreLabels($storeLabels);
84  }
85  return $this;
86  }
87 
92  protected function mapCouponType(Rule $ruleModel)
93  {
94  if ($ruleModel->getCouponType()) {
95  $mappedValue = '';
96  switch ($ruleModel->getCouponType()) {
99  break;
102  break;
105  break;
106  default:
107  }
108  $ruleModel->setCouponType($mappedValue);
109  }
110  return $this;
111  }
112 
118  protected function mapFields(\Magento\SalesRule\Model\Rule $ruleModel, RuleDataModel $dataModel)
119  {
120  $this->mapConditions($ruleModel, $dataModel);
121  $this->mapActionConditions($ruleModel, $dataModel);
122  $this->mapStoreLabels($ruleModel, $dataModel);
123  $this->mapCouponType($ruleModel);
124  return $this;
125  }
126 
134  public function dataModelToArray(Condition $condition, $key = 'conditions')
135  {
136  $output = [];
137  $output['type'] = $condition->getConditionType();
138  $output['value'] = $condition->getValue();
139  $output['attribute'] = $condition->getAttributeName();
140  $output['operator'] = $condition->getOperator();
141 
142  if ($condition->getAggregatorType()) {
143  $output['aggregator'] = $condition->getAggregatorType();
144  }
145  if ($condition->getConditions()) {
146  $conditions = [];
147  foreach ($condition->getConditions() as $subCondition) {
148  $conditions[] = $this->dataModelToArray($subCondition, $key);
149  }
150  $output[$key] = $conditions;
151  }
152  return $output;
153  }
154 
161  public function toModel(RuleDataModel $dataModel)
162  {
163  $ruleId = $dataModel->getRuleId();
164 
165  if ($ruleId) {
166  $ruleModel = $this->ruleFactory->create()->load($ruleId);
167  if (!$ruleModel->getId()) {
168  throw new \Magento\Framework\Exception\NoSuchEntityException();
169  }
170  } else {
171  $ruleModel = $this->ruleFactory->create();
172  $dataModel->setFromDate(
173  $this->formattingDate($dataModel->getFromDate())
174  );
175  $dataModel->setToDate(
176  $this->formattingDate($dataModel->getToDate())
177  );
178  }
179 
180  $modelData = $ruleModel->getData();
181 
182  $data = $this->dataObjectProcessor->buildOutputDataArray(
183  $dataModel,
184  \Magento\SalesRule\Api\Data\RuleInterface::class
185  );
186 
187  $mergedData = array_merge($modelData, $data);
188 
189  $validateResult = $ruleModel->validateData(new \Magento\Framework\DataObject($mergedData));
190  if ($validateResult !== true) {
191  $text = '';
193  foreach ($validateResult as $errorMessage) {
194  $text .= $errorMessage->getText();
195  $text .= '; ';
196  }
197  throw new \Magento\Framework\Exception\InputException(new \Magento\Framework\Phrase($text));
198  }
199 
200  $ruleModel->setData($mergedData);
201 
202  $this->mapFields($ruleModel, $dataModel);
203 
204  return $ruleModel;
205  }
206 
213  private function formattingDate($date)
214  {
215  if ($date) {
216  $fromDate = new \DateTime($date);
217  $date = $fromDate->format(\DateTime::ISO8601);
218  }
219 
220  return $date;
221  }
222 }
__construct(\Magento\SalesRule\Model\RuleFactory $ruleFactory, \Magento\Framework\Reflection\DataObjectProcessor $dataObjectProcessor)
Definition: ToModel.php:29
mapConditions(\Magento\SalesRule\Model\Rule $ruleModel, RuleDataModel $dataModel)
Definition: ToModel.php:42
validateData(\Magento\Framework\DataObject $dataObject)
dataModelToArray(Condition $condition, $key='conditions')
Definition: ToModel.php:134
mapActionConditions(\Magento\SalesRule\Model\Rule $ruleModel, RuleDataModel $dataModel)
Definition: ToModel.php:58
mapFields(\Magento\SalesRule\Model\Rule $ruleModel, RuleDataModel $dataModel)
Definition: ToModel.php:118
endifif( $block->getLastPageNum()>1)( 'Page') ?></strong >< ul class $text
Definition: pager.phtml:43