Patch für CustomerController / Magento 1.4.0.1

Da derzeit das Error-Handling im CustomerController des Backends kaputt. Statt der Exception-Message erscheint eine andere Exception: sehr unschön und mühsam beim Debuggen:

Item (Mage_Customer_Model_Address) with the same id "1" already exist

#0 /var/www/virtual/mage/mage-df-1/app/code/core/Mage/Eav/Model/
Entity/Collection/Abstract.php(236): 
Varien_Data_Collection->addItem(Object(Mage_Customer_Model_Address))
#1 /var/www/virtual/mage/mage-df-1/app/code/core/Mage/
Customer/Model/Customer.php(204): 
Mage_Eav_Model_Entity_Collection_Abstract->addItem
(Object(Mage_Customer_Model_Address))
#2 /var/www/virtual/mage/mage-df-1/app/code/core/Mage/
Adminhtml/controllers/CustomerController.php(112): 
Mage_Customer_Model_Customer->addAddress(Object(Mage_Customer_Model_Address))
#3 /var/www/virtual/mage/mage-df-1/app/code/core/Mage/
Core/Controller/Varien/Action.php(418): 
Mage_Adminhtml_CustomerController->editAction()
#4 /var/www/virtual/mage/mage-df-1/app/code/core/Mage/
Core/Controller/Varien/Router/Standard.php(254): 
Mage_Core_Controller_Varien_Action->dispatch('edit')
#5 /var/www/virtual/mage/mage-df-1/app/code/core/Mage/
Core/Controller/Varien/Front.php(177): 
Mage_Core_Controller_Varien_Router_Standard->match
(Object(Mage_Core_Controller_Request_Http))
#6 /var/www/virtual/mage/mage-df-1/app/code/core/Mage/
Core/Model/App.php(304): 
Mage_Core_Controller_Varien_Front->dispatch()
#7 /var/www/virtual/mage/mage-df-1/app/Mage.php(596): 
Mage_Core_Model_App->run(Array)
#8 /var/www/virtual/mage/mage-df-1/index.php(78): Mage::run('', 'store')
#9 {main}

Ich habe den Bug als Issue erfasst, doch es dürfte wohl etwas dauern, bis Varien das Issue bearbeitet und die nächste Version veröffentlicht. Den Patch habe ich auch dem Issue im Magento-Bugtracker angehängt aber offensichtlich können Dateien von außen nicht abgerufen werden, was sehr schade ist. Daher veröffentliche ich den Patch auch mal hier:

### Eclipse Workspace Patch 1.0
#P magento-1.4
Index: app/code/core/Mage/Adminhtml/controllers/CustomerController.php
===================================================================
--- app/code/core/Mage/Adminhtml/controllers/CustomerController.php	(revision 61891)
+++ app/code/core/Mage/Adminhtml/controllers/CustomerController.php	(working copy)
@@ -107,9 +107,12 @@
         }
         if (isset($data['address']) && is_array($data['address'])) {
             foreach ($data['address'] as $addressId => $address) {
-                $addressModel = Mage::getModel('customer/address')->setData($address)
+                if (!($addressModel = $customer->getAddressItemById($addressId))) {
+                    $addressModel = Mage::getModel('customer/address');
+                    $customer->addAddress($addressModel);
+                }
+                $addressModel->setData($address)
                     ->setId($addressId);
-                $customer->addAddress($addressModel);
             }
         }
1 Kommentar

Hinterlassen Sie einen Kommentar

Ihr Kommentar*

Name*
Website

Weitere Beiträge zum Thema
Magento 2 und der „progressive“ Weg zur Web App
Beitragsserie: Entwicklung eines Backendmoduls
Scale Magento 2 E-Commerce mit Lizards & Pumpkins und MIP
Meet Magento schon wieder vorbei