protected function tearDown() { $previousStoreId = Mage::app()->getStore(); Mage::app()->setCurrentStore(Mage::app()->getStore(Mage_Core_Model_App::ADMIN_STORE_ID)); if ($this->_createdCustomer && $this->_createdCustomer->getId() > 0) { $this->_createdCustomer->getAddressesCollection()->delete(); $this->_createdCustomer->delete(); } Mage::app()->setCurrentStore($previousStoreId); $this->_model = null; }
/** * Save customer addresses. * * @param Mage_Customer_Model_Customer $customer * @param array $addressesData * @throws Mage_Core_Exception */ protected function _prepareCustomerAddressesForSave($customer, array $addressesData) { $hasChanges = $customer->hasDataChanges(); $actualAddressesIds = array(); foreach ($addressesData as $addressData) { $addressId = null; if (array_key_exists('entity_id', $addressData)) { $addressId = $addressData['entity_id']; unset($addressData['entity_id']); } if (null !== $addressId) { $address = $customer->getAddressItemById($addressId); if (!$address || !$address->getId()) { throw new Mage_Core_Exception($this->_translateHelper->__('The address with the specified ID not found.')); } } else { $address = $this->_addressFactory->create(); $address->setCustomerId($customer->getId()); // Add customer address into addresses collection $customer->addAddress($address); } $address->addData($addressData); $hasChanges = $hasChanges || $address->hasDataChanges(); // Set post_index for detect default billing and shipping addresses $address->setPostIndex($addressId); $actualAddressesIds[] = $address->getId(); } /** @var Mage_Customer_Model_Address $address */ foreach ($customer->getAddressesCollection() as $address) { if (!in_array($address->getId(), $actualAddressesIds)) { $address->setData('_deleted', true); $hasChanges = true; } } $customer->setDataChanges($hasChanges); }
/** * Save/delete customer address * * @param Mage_Customer_Model_Customer $customer * @return Mage_Customer_Model_Resource_Customer */ protected function _saveAddresses(Mage_Customer_Model_Customer $customer) { $defaultBillingId = $customer->getData('default_billing'); $defaultShippingId = $customer->getData('default_shipping'); /** @var Mage_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()); } } } if ($customer->dataHasChangedFor('default_billing')) { $this->saveAttribute($customer, 'default_billing'); } if ($customer->dataHasChangedFor('default_shipping')) { $this->saveAttribute($customer, 'default_shipping'); } return $this; }
/** * @param Mage_Customer_Model_Customer $customer * @param array $randomData */ protected function _anonymizeCustomerAddresses($customer, $randomData) { $customerAddresses = $customer->getAddressesCollection()->addAttributeToSelect(array('prefix', 'firstname', 'lastname', 'suffix')); foreach ($customerAddresses as $customerAddress) { /** @var $customerAddress Mage_Customer_Model_Address */ if ($customerAddress->getFirstname() == $customer->getOrigData('firstname') && $customerAddress->getLastname() == $customer->getOrigData('lastname')) { $newRandomData = $randomData; } else { $newRandomData = $this->_getRandomData(); } $this->_anonymizeCustomerAddress($customerAddress, $newRandomData); } }