Hi There,
Can anyone please assist me on how I can override core Mangento Model class specific function please. Class in question here is "\Magento\Customer\Model\AccountManagement" and the function I am trying to override is createAccountWithPasswordHash();
My existing code below which doesn't seem to have any effect on the core Magento instructions.
<?xml version = "1.0"?>
<config xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation = "urn:magento:framework:ObjectManager/etc/config.xsd">
<preference for = "Magento\Customer\Model\AccountManagement" type = "Abc\CustomerOverride\Model\Rewrite\Customer\AccountManagement" />
</config>
<?php
namespace Abc\CustomerOverride\Model\Rewrite\Customer;
use Magento\Customer\Api\Data\CustomerInterface;
class AccountManagement extends \Magento\Customer\Model\AccountManagement
{
public function createAccountWithPasswordHash(CustomerInterface $customer, $hash, $redirectUrl = '')
{
// This logic allows an existing customer to be added to a different store. No new account is created.
// The plan is to move this logic into a new method called something like 'registerAccountWithStore'
if ($customer->getId()) {
$customer = $this->customerRepository->get($customer->getEmail());
$websiteId = $customer->getWebsiteId();
if ($this->isCustomerInStore($websiteId, $customer->getStoreId())) {
throw new InputException(__('This customer already exists in this store.'));
}
// Existing password hash will be used from secured customer data registry when saving customer
}
// Make sure we have a storeId to associate this customer with.
if (!$customer->getStoreId()) {
if ($customer->getWebsiteId()) {
$storeId = $this->storeManager->getWebsite($customer->getWebsiteId())->getDefaultStore()->getId();
} else {
$storeId = $this->storeManager->getStore()->getId();
}
$customer->setStoreId($storeId);
}
// Associate website_id with customer
if (!$customer->getWebsiteId()) {
$websiteId = $this->storeManager->getStore($customer->getStoreId())->getWebsiteId();
$customer->setWebsiteId($websiteId);
}
// Update 'created_in' value with actual store name
if ($customer->getId() === null) {
$storeName = $this->storeManager->getStore($customer->getStoreId())->getName();
$customer->setCreatedIn($storeName);
}
$customerAddresses = $customer->getAddresses() ?: [];
$customer->setAddresses(null);
try {
// If customer exists existing hash will be used by Repository
$customer = $this->customerRepository->save($customer, $hash);
} catch (AlreadyExistsException $e) {
throw new InputMismatchException(
__('CHANGE THIS TEXT FROM DEFAULT TO CUSTOM ONE.')
);
} catch (LocalizedException $e) {
throw $e;
}
try {
foreach ($customerAddresses as $address) {
if ($address->getId()) {
$newAddress = clone $address;
$newAddress->setId(null);
$newAddress->setCustomerId($customer->getId());
$this->addressRepository->save($newAddress);
} else {
$address->setCustomerId($customer->getId());
$this->addressRepository->save($address);
}
}
} catch (InputException $e) {
$this->customerRepository->delete($customer);
throw $e;
}
$customer = $this->customerRepository->getById($customer->getId());
$newLinkToken = $this->mathRandom->getUniqueHash();
$this->changeResetPasswordLinkToken($customer, $newLinkToken);
//$this->sendEmailConfirmation($customer, $redirectUrl);
return $customer;
}
}