/** * Collect address data to xml node * Remove objects from data array and escape data values * * @param Mage_Customer_Model_Address $address * @param Mage_XmlConnect_Model_Simplexml_Element $item * @return Mage_XmlConnect_Block_Checkout_Onepage_Address_List */ protected function _prepareAddressData(Mage_Customer_Model_Address $address, Mage_XmlConnect_Model_Simplexml_Element $item) { $attributes = Mage::helper('customer/address')->getAttributes(); $data = array('entity_id' => $address->getId()); foreach ($attributes as $attribute) { /* @var $attribute Mage_Customer_Model_Attribute */ if (!$attribute->getIsVisible()) { continue; } if ($attribute->getAttributeCode() == 'country_id') { $data['country'] = $address->getCountryModel()->getName(); $data['country_id'] = $address->getCountryId(); } else { if ($attribute->getAttributeCode() == 'region') { $data['region'] = $address->getRegion(); } else { $dataModel = Mage_Customer_Model_Attribute_Data::factory($attribute, $address); $attributeValue = $dataModel->outputValue(Mage_Customer_Model_Attribute_Data::OUTPUT_FORMAT_ONELINE); if ($attribute->getFrontendInput() == 'multiline') { $values = $dataModel->outputValue(Mage_Customer_Model_Attribute_Data::OUTPUT_FORMAT_ARRAY); // explode lines foreach ($values as $attributeIndex => $attributeVal) { $key = sprintf('%s%d', $attribute->getAttributeCode(), $attributeIndex + 1); $data[$key] = $attributeVal; } } $data[$attribute->getAttributeCode()] = $attributeValue; } } } foreach ($data as $key => $value) { if (empty($value)) { continue; } $item->addCustomChild($key, $value); } return $this; }
/** * Validate data for change association with the country * * @param Mage_Customer_Model_Address $address * @param array $data * @return bool */ public function isValidDataForChangeAssociationWithCountry(Mage_Customer_Model_Address $address, array $data) { if (!isset($data['country_id']) && !isset($data['region'])) { return true; } // If country is in data - it has been already validated. If no - load current country. if (isset($data['country_id'])) { $country = Mage::getModel('directory/country')->loadByCode($data['country_id']); } else { $country = $address->getCountryModel(); } return $this->_checkRegion($data, $country); }