コード例 #1
0
ファイル: Address.php プロジェクト: okite11/frames21
 /**
  * Import data rows.
  *
  * @return boolean
  */
 protected function _importData()
 {
     /** @var $customer Mage_Customer_Model_Customer */
     $customer = Mage::getModel('customer/customer');
     /** @var $resource Mage_Customer_Model_Address */
     $resource = Mage::getModel('customer/address');
     $strftimeFormat = Varien_Date::convertZendToStrftime(Varien_Date::DATETIME_INTERNAL_FORMAT, true, true);
     $table = $resource->getResource()->getEntityTable();
     $nextEntityId = Mage::getResourceHelper('importexport')->getNextAutoincrement($table);
     $customerId = null;
     $regionColName = self::getColNameForAttrCode('region');
     $countryColName = self::getColNameForAttrCode('country_id');
     /** @var $regionIdAttr Mage_Customer_Model_Attribute */
     $regionIdAttr = Mage::getSingleton('eav/config')->getAttribute($this->getEntityTypeCode(), 'region_id');
     $regionIdTable = $regionIdAttr->getBackend()->getTable();
     $regionIdAttrId = $regionIdAttr->getId();
     $isAppendMode = Mage_ImportExport_Model_Import::BEHAVIOR_APPEND == $this->_customer->getBehavior();
     while ($bunch = $this->_dataSourceModel->getNextBunch()) {
         $entityRows = array();
         $attributes = array();
         $defaults = array();
         // customer default addresses (billing/shipping) data
         foreach ($bunch as $rowNum => $rowData) {
             if (!empty($rowData[Mage_ImportExport_Model_Import_Entity_Customer::COL_EMAIL]) && !empty($rowData[Mage_ImportExport_Model_Import_Entity_Customer::COL_WEBSITE])) {
                 $customerId = $this->_customer->getCustomerId($rowData[Mage_ImportExport_Model_Import_Entity_Customer::COL_EMAIL], $rowData[Mage_ImportExport_Model_Import_Entity_Customer::COL_WEBSITE]);
             }
             if (!$customerId || !$this->_isRowWithAddress($rowData) || !$this->validateRow($rowData, $rowNum)) {
                 continue;
             }
             /** @var $addressCollection Mage_Customer_Model_Resource_Address_Collection */
             $addressCollection = Mage::getResourceModel('customer/address_collection');
             $addressCollection->addAttributeToFilter('parent_id', $customerId);
             $addressAttributes = array();
             foreach ($this->_attributes as $attrAlias => $attrParams) {
                 if (isset($rowData[$attrAlias]) && strlen($rowData[$attrAlias])) {
                     if ('select' == $attrParams['type']) {
                         $value = $attrParams['options'][strtolower($rowData[$attrAlias])];
                     } elseif ('datetime' == $attrParams['type']) {
                         $value = gmstrftime($strftimeFormat, strtotime($rowData[$attrAlias]));
                     } else {
                         $value = $rowData[$attrAlias];
                     }
                     $addressAttributes[$attrParams['id']] = $value;
                     $addressCollection->addAttributeToFilter($attrParams['code'], $value);
                 }
             }
             // skip duplicate address
             if ($isAppendMode && $addressCollection->getSize()) {
                 continue;
             }
             $entityId = $nextEntityId++;
             // entity table data
             $entityRows[] = array('entity_id' => $entityId, 'entity_type_id' => $this->_entityTypeId, 'parent_id' => $customerId, 'created_at' => now(), 'updated_at' => now());
             // attribute values
             foreach ($this->_attributes as $attrAlias => $attrParams) {
                 if (isset($addressAttributes[$attrParams['id']])) {
                     $attributes[$attrParams['table']][$entityId][$attrParams['id']] = $addressAttributes[$attrParams['id']];
                 }
             }
             // customer default addresses
             foreach (self::getDefaultAddressAttrMapping() as $colName => $customerAttrCode) {
                 if (!empty($rowData[$colName])) {
                     $attribute = $customer->getAttribute($customerAttrCode);
                     $defaults[$attribute->getBackend()->getTable()][$customerId][$attribute->getId()] = $entityId;
                 }
             }
             // let's try to find region ID
             if (!empty($rowData[$regionColName])) {
                 $countryNormalized = strtolower($rowData[$countryColName]);
                 $regionNormalized = strtolower($rowData[$regionColName]);
                 if (isset($this->_countryRegions[$countryNormalized][$regionNormalized])) {
                     $regionId = $this->_countryRegions[$countryNormalized][$regionNormalized];
                     $attributes[$regionIdTable][$entityId][$regionIdAttrId] = $regionId;
                     // set 'region' attribute value as default name
                     $tbl = $this->_attributes[$regionColName]['table'];
                     $regionColNameId = $this->_attributes[$regionColName]['id'];
                     $attributes[$tbl][$entityId][$regionColNameId] = $this->_regions[$regionId];
                 }
             }
         }
         $this->_saveAddressEntity($entityRows)->_saveAddressAttributes($attributes)->_saveCustomerDefaults($defaults);
     }
     return true;
 }