Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Storage.php
Go to the documentation of this file.
1 <?php
6 declare(strict_types=1);
7 
9 
13 use Magento\Customer\Api\Data\RegionInterfaceFactory;
18 use Magento\Customer\Model\Session\Proxy as SessionProxy;
19 use Magento\Customer\Model\Delegation\Data\NewOperationFactory;
20 use Magento\Customer\Api\Data\CustomerInterfaceFactory;
21 use Magento\Customer\Api\Data\AddressInterfaceFactory;
22 use Psr\Log\LoggerInterface;
23 
27 class Storage
28 {
32  private $session;
33 
37  private $newFactory;
38 
42  private $customerFactory;
43 
47  private $addressFactory;
48 
52  private $regionFactory;
53 
57  private $logger;
58 
67  public function __construct(
68  NewOperationFactory $newFactory,
69  CustomerInterfaceFactory $customerFactory,
70  AddressInterfaceFactory $addressFactory,
71  RegionInterfaceFactory $regionFactory,
72  LoggerInterface $logger,
73  SessionProxy $session
74  ) {
75  $this->newFactory = $newFactory;
76  $this->customerFactory = $customerFactory;
77  $this->addressFactory = $addressFactory;
78  $this->regionFactory = $regionFactory;
79  $this->logger = $logger;
80  $this->session = $session;
81  }
82 
91  public function storeNewOperation(CustomerInterface $customer, array $delegatedData): void
92  {
94  $customerData = $customer->__toArray();
95  $addressesData = [];
96  if ($customer->getAddresses()) {
98  foreach ($customer->getAddresses() as $address) {
99  $addressesData[] = $address->__toArray();
100  }
101  }
102  $this->session->setCustomerFormData($customerData);
103  $this->session->setDelegatedNewCustomerData([
104  'customer' => $customerData,
105  'addresses' => $addressesData,
106  'delegated_data' => $delegatedData,
107  ]);
108  }
109 
115  public function consumeNewOperation()
116  {
117  try {
118  $serialized = $this->session->getDelegatedNewCustomerData(true);
119  } catch (\Throwable $exception) {
120  $this->logger->error($exception);
121  $serialized = null;
122  }
123  if ($serialized === null) {
124  return null;
125  }
126 
128  $addresses = [];
129  foreach ($serialized['addresses'] as $addressData) {
130  if (isset($addressData['region'])) {
132  $region = $this->regionFactory->create(
133  ['data' => $addressData['region']]
134  );
135  $addressData['region'] = $region;
136  }
137  $addresses[] = $this->addressFactory->create(
138  ['data' => $addressData]
139  );
140  }
141  $customerData = $serialized['customer'];
142  $customerData['addresses'] = $addresses;
143 
144  return $this->newFactory->create([
145  'customer' => $this->customerFactory->create(
146  ['data' => $customerData]
147  ),
148  'additionalData' => $serialized['delegated_data'],
149  ]);
150  }
151 }
$customerData
$customer
Definition: customers.php:11
$addresses
Definition: address_list.php:7
$logger
$address
Definition: customer.php:38
$addressData
Definition: order.php:19
$addressFactory
Definition: quote.php:20
__construct(NewOperationFactory $newFactory, CustomerInterfaceFactory $customerFactory, AddressInterfaceFactory $addressFactory, RegionInterfaceFactory $regionFactory, LoggerInterface $logger, SessionProxy $session)
Definition: Storage.php:67