コード例 #1
0
ファイル: Customer.php プロジェクト: shabbirvividads/magento2
 /**
  * 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];
 }
コード例 #2
0
ファイル: Boolean.php プロジェクト: aiesh/magento2
 /**
  * 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;
 }
コード例 #3
0
ファイル: CustomerTest.php プロジェクト: rafaelstz/magento2
 /**
  * @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());
 }
コード例 #4
0
 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');
 }
コード例 #5
0
ファイル: Customer.php プロジェクト: shabbirvividads/magento2
 /**
  * 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;
 }
コード例 #6
0
ファイル: Customer.php プロジェクト: shazal/magento2
 /**
  * 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;
 }