12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- declare(strict_types=1);
- namespace Magento\CustomerGraphQl\Model\Customer;
- use Magento\Customer\Api\CustomerRepositoryInterface;
- use Magento\Framework\Exception\AlreadyExistsException;
- use Magento\Framework\GraphQl\Exception\GraphQlAlreadyExistsException;
- use Magento\Framework\GraphQl\Exception\GraphQlInputException;
- use Magento\Framework\GraphQl\Exception\GraphQlNoSuchEntityException;
- use Magento\Store\Model\StoreManagerInterface;
- /**
- * Update customer data
- */
- class UpdateCustomerData
- {
- /**
- * @var CustomerRepositoryInterface
- */
- private $customerRepository;
- /**
- * @var StoreManagerInterface
- */
- private $storeManager;
- /**
- * @var CheckCustomerPassword
- */
- private $checkCustomerPassword;
- /**
- * @param CustomerRepositoryInterface $customerRepository
- * @param StoreManagerInterface $storeManager
- * @param CheckCustomerPassword $checkCustomerPassword
- */
- public function __construct(
- CustomerRepositoryInterface $customerRepository,
- StoreManagerInterface $storeManager,
- CheckCustomerPassword $checkCustomerPassword
- ) {
- $this->customerRepository = $customerRepository;
- $this->storeManager = $storeManager;
- $this->checkCustomerPassword = $checkCustomerPassword;
- }
- /**
- * Update account information
- *
- * @param int $customerId
- * @param array $data
- * @return void
- * @throws GraphQlNoSuchEntityException
- * @throws GraphQlInputException
- * @throws GraphQlAlreadyExistsException
- */
- public function execute(int $customerId, array $data): void
- {
- $customer = $this->customerRepository->getById($customerId);
- if (isset($data['firstname'])) {
- $customer->setFirstname($data['firstname']);
- }
- if (isset($data['lastname'])) {
- $customer->setLastname($data['lastname']);
- }
- if (isset($data['email']) && $customer->getEmail() !== $data['email']) {
- if (!isset($data['password']) || empty($data['password'])) {
- throw new GraphQlInputException(__('Provide the current "password" to change "email".'));
- }
- $this->checkCustomerPassword->execute($data['password'], $customerId);
- $customer->setEmail($data['email']);
- }
- $customer->setStoreId($this->storeManager->getStore()->getId());
- try {
- $this->customerRepository->save($customer);
- } catch (AlreadyExistsException $e) {
- throw new GraphQlAlreadyExistsException(
- __('A customer with the same email address already exists in an associated website.'),
- $e
- );
- }
- }
- }
|