/** * Prepare customer data for update * * @param array $rowData * @return array * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) */ protected function _prepareDataForUpdate(array $rowData) { /** @var $passwordAttribute \Magento\Customer\Model\Attribute */ $passwordAttribute = $this->_customerModel->getAttribute('password_hash'); $passwordAttributeId = $passwordAttribute->getId(); $passwordStorageTable = $passwordAttribute->getBackend()->getTable(); $entitiesToCreate = []; $entitiesToUpdate = []; $attributesToSave = []; // entity table data $now = new \DateTime(); if (empty($rowData['created_at'])) { $createdAt = $now; } else { $createdAt = (new \DateTime())->setTimestamp(strtotime($rowData['created_at'])); } $entityRow = ['group_id' => empty($rowData['group_id']) ? self::DEFAULT_GROUP_ID : $rowData['group_id'], 'store_id' => empty($rowData[self::COLUMN_STORE]) ? 0 : $this->_storeCodeToId[$rowData[self::COLUMN_STORE]], 'created_at' => $createdAt->format(\Magento\Framework\Stdlib\DateTime::DATETIME_PHP_FORMAT), 'updated_at' => $now->format(\Magento\Framework\Stdlib\DateTime::DATETIME_PHP_FORMAT)]; $emailInLowercase = strtolower($rowData[self::COLUMN_EMAIL]); if ($entityId = $this->_getCustomerId($emailInLowercase, $rowData[self::COLUMN_WEBSITE])) { // edit $entityRow['entity_id'] = $entityId; $entitiesToUpdate[] = $entityRow; } else { // create $entityId = $this->_getNextEntityId(); $entityRow['entity_id'] = $entityId; $entityRow['website_id'] = $this->_websiteCodeToId[$rowData[self::COLUMN_WEBSITE]]; $entityRow['email'] = $emailInLowercase; $entityRow['is_active'] = 1; $entitiesToCreate[] = $entityRow; $this->_newCustomers[$emailInLowercase][$rowData[self::COLUMN_WEBSITE]] = $entityId; } // attribute values foreach (array_intersect_key($rowData, $this->_attributes) as $attributeCode => $value) { if (!$this->_attributes[$attributeCode]['is_static'] && strlen($value)) { /** @var $attribute \Magento\Customer\Model\Attribute */ $attribute = $this->_customerModel->getAttribute($attributeCode); $backendModel = $attribute->getBackendModel(); $attributeParameters = $this->_attributes[$attributeCode]; if ('select' == $attributeParameters['type']) { $value = $attributeParameters['options'][strtolower($value)]; } elseif ('datetime' == $attributeParameters['type']) { $value = (new \DateTime())->setTimestamp(strtotime($value)); $value = $value->format(\Magento\Framework\Stdlib\DateTime::DATETIME_PHP_FORMAT); } elseif ($backendModel) { $attribute->getBackend()->beforeSave($this->_customerModel->setData($attributeCode, $value)); $value = $this->_customerModel->getData($attributeCode); } $attributesToSave[$attribute->getBackend()->getTable()][$entityId][$attributeParameters['id']] = $value; // restore 'backend_model' to avoid default setting $attribute->setBackendModel($backendModel); } } // password change/set if (isset($rowData['password']) && strlen($rowData['password'])) { $attributesToSave[$passwordStorageTable][$entityId][$passwordAttributeId] = $this->_customerModel->hashPassword($rowData['password']); } return [self::ENTITIES_TO_CREATE_KEY => $entitiesToCreate, self::ENTITIES_TO_UPDATE_KEY => $entitiesToUpdate, self::ATTRIBUTES_TO_SAVE_KEY => $attributesToSave]; }
/** * Prepare data before attribute save * * @param \Magento\Customer\Model\Customer $customer * @return $this */ public function beforeSave($customer) { $attributeName = $this->getAttribute()->getName(); $inputValue = $customer->getData($attributeName); $sanitizedValue = !empty($inputValue) ? '1' : '0'; $customer->setData($attributeName, $sanitizedValue); return $this; }
/** * @param int $customerId * @param int $websiteId * @param string|null $skipConfirmationIfEmail * @param bool $expected * @dataProvider dataProviderIsConfirmationRequired */ public function testIsConfirmationRequired($customerId, $websiteId, $skipConfirmationIfEmail, $expected) { $customerEmail = '*****@*****.**'; $this->registryMock->expects($this->any())->method('registry')->with('skip_confirmation_if_email')->willReturn($skipConfirmationIfEmail); $this->_scopeConfigMock->expects($this->any())->method('getValue')->with(Customer::XML_PATH_IS_CONFIRM, ScopeInterface::SCOPE_WEBSITES, $websiteId)->willReturn($expected); $this->_model->setData('id', $customerId); $this->_model->setData('website_id', $websiteId); $this->_model->setData('email', $customerEmail); $this->assertEquals($expected, $this->_model->isConfirmationRequired()); }
public function testSendNewAccountEmailWithoutStoreId() { $store = $this->getMock('Magento\\Store\\Model\\Store', [], [], '', false); $website = $this->getMock('Magento\\Store\\Model\\Website', [], [], '', false); $website->expects($this->once())->method('getStoreIds')->will($this->returnValue([1, 2, 3, 4])); $this->_storeManager->expects($this->once())->method('getWebsite')->with(1)->will($this->returnValue($website)); $this->_storeManager->expects($this->once())->method('getStore')->with(1)->will($this->returnValue($store)); $this->_config->expects($this->exactly(3))->method('getAttribute')->will($this->returnValue($this->_attribute)); $this->_attribute->expects($this->exactly(3))->method('getIsVisible')->will($this->returnValue(true)); $methods = ['setTemplateIdentifier', 'setTemplateOptions', 'setTemplateVars', 'setFrom', 'addTo']; foreach ($methods as $method) { $this->_transportBuilderMock->expects($this->once())->method($method)->will($this->returnSelf()); } $transportMock = $this->getMock('Magento\\Framework\\Mail\\TransportInterface', [], [], '', false); $transportMock->expects($this->once())->method('sendMessage')->will($this->returnSelf()); $this->_transportBuilderMock->expects($this->once())->method('getTransport')->will($this->returnValue($transportMock)); $this->_model->setData(['website_id' => 1, 'store_id' => 1, 'email' => '*****@*****.**', 'firstname' => 'FirstName', 'lastname' => 'LastName', 'middlename' => 'MiddleName', 'prefix' => 'Prefix']); $this->_model->sendNewAccountEmail('registered'); }
/** * Save/delete customer address * * @param \Magento\Customer\Model\Customer $customer * @return $this * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ protected function _saveAddresses(\Magento\Customer\Model\Customer $customer) { $defaultBillingId = $customer->getData('default_billing'); $defaultShippingId = $customer->getData('default_shipping'); /** @var \Magento\Customer\Model\Address $address */ foreach ($customer->getAddresses() as $address) { if ($address->getData('_deleted')) { if ($address->getId() == $defaultBillingId) { $customer->setData('default_billing', null); } if ($address->getId() == $defaultShippingId) { $customer->setData('default_shipping', null); } $removedAddressId = $address->getId(); $address->delete(); // Remove deleted address from customer address collection $customer->getAddressesCollection()->removeItemByKey($removedAddressId); } else { $address->setParentId($customer->getId())->setStoreId($customer->getStoreId())->setIsCustomerSaveTransaction(true)->save(); if (($address->getIsPrimaryBilling() || $address->getIsDefaultBilling()) && $address->getId() != $defaultBillingId) { $customer->setData('default_billing', $address->getId()); } if (($address->getIsPrimaryShipping() || $address->getIsDefaultShipping()) && $address->getId() != $defaultShippingId) { $customer->setData('default_shipping', $address->getId()); } } } $this->saveAttribute($customer, 'default_billing'); $this->saveAttribute($customer, 'default_shipping'); return $this; }
/** * Save/delete customer address * * @param \Magento\Customer\Model\Customer $customer * @return $this * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ protected function _saveAddresses(\Magento\Customer\Model\Customer $customer) { $defaultBillingId = $customer->getData('default_billing'); $defaultShippingId = $customer->getData('default_shipping'); /** @var \Magento\Customer\Model\Address $address */ foreach ($customer->getAddresses() as $address) { if ($address->getData('_deleted')) { if ($address->getId() == $defaultBillingId) { $customer->setData('default_billing', null); } if ($address->getId() == $defaultShippingId) { $customer->setData('default_shipping', null); } $removedAddressId = $address->getId(); $address->delete(); // Remove deleted address from customer address collection $customer->getAddressesCollection()->removeItemByKey($removedAddressId); } else { $address->setParentId($customer->getId())->setStoreId($customer->getStoreId())->setIsCustomerSaveTransaction(true)->save(); if (($address->getIsPrimaryBilling() || $address->getIsDefaultBilling()) && $address->getId() != $defaultBillingId) { $customer->setData('default_billing', $address->getId()); } if (($address->getIsPrimaryShipping() || $address->getIsDefaultShipping()) && $address->getId() != $defaultShippingId) { $customer->setData('default_shipping', $address->getId()); } } } $changedAddresses = []; $changedAddresses['default_billing'] = $customer->getData('default_billing'); $changedAddresses['default_shipping'] = $customer->getData('default_shipping'); $this->_getWriteAdapter()->update($this->getTable('customer_entity'), $changedAddresses, $this->_getWriteAdapter()->quoteInto('entity_id = ?', $customer->getId())); return $this; }