From 28d0d65bf7482d16067c49a72897bf7143fb9204 Mon Sep 17 00:00:00 2001 From: Marshall House Date: Tue, 18 Aug 2015 16:11:34 -0500 Subject: [PATCH 1/3] Solving memory leak when saving a customer See issue #70. Customers with a long history of orders can not place orders if their customer account "save" triggers. --- .../Zendesk/Zendesk/Model/Observer.php | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/src/app/code/community/Zendesk/Zendesk/Model/Observer.php b/src/app/code/community/Zendesk/Zendesk/Model/Observer.php index 0295f607..bc2ad6fe 100644 --- a/src/app/code/community/Zendesk/Zendesk/Model/Observer.php +++ b/src/app/code/community/Zendesk/Zendesk/Model/Observer.php @@ -157,20 +157,22 @@ public function changeIdentity(Varien_Event_Observer $event) if (is_object($order_totals)) { $order_totals - ->addFieldToSelect('*') - ->addFieldToFilter('customer_id', $customer->getId()) - ->addFieldToFilter('status', Mage_Sales_Model_Order::STATE_COMPLETE) - ->addAttributeToSelect('grand_total') - ->getColumnValues('grand_total'); + ->addFieldToFilter('customer_id', $customer->getId()) + ->addFieldToFilter('status', Mage_Sales_Model_Order::STATE_COMPLETE) + ; - $sum = 0; - foreach ($order_totals as $total) { - if (isset($total['grand_total'])) - $sum += (float)$total['grand_total']; - } + $order_totals->getSelect() + ->reset(Zend_Db_Select::COLUMNS) + ->columns(new Zend_Db_Expr("SUM(grand_total) as total")) + ->columns(new Zend_Db_Expr("AVG(grand_total) as avg_total")) + ->group('customer_id') + ; + + $sum = (float) $order_totals->getFirstItem()->getTotal(); + $avg = (float) $order_totals->getFirstItem()->getAvgTotal(); $lifetime_sale = Mage::helper('core')->currency($sum, true, false); - $average_sale = Mage::helper('core')->currency($sum / (count($order_totals) ?: 1), true, false); + $average_sale = Mage::helper('core')->currency($avg, true, false); } $info['user'] = array( From 3ffe0ebe7236291c9f701191310ee8c5c4b7e726 Mon Sep 17 00:00:00 2001 From: Marshall House Date: Fri, 21 Aug 2015 09:24:03 -0500 Subject: [PATCH 2/3] Update Observer.php Don't forget customers with 0 orders of course --- .../code/community/Zendesk/Zendesk/Model/Observer.php | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/app/code/community/Zendesk/Zendesk/Model/Observer.php b/src/app/code/community/Zendesk/Zendesk/Model/Observer.php index bc2ad6fe..fed5a44b 100644 --- a/src/app/code/community/Zendesk/Zendesk/Model/Observer.php +++ b/src/app/code/community/Zendesk/Zendesk/Model/Observer.php @@ -168,11 +168,13 @@ public function changeIdentity(Varien_Event_Observer $event) ->group('customer_id') ; - $sum = (float) $order_totals->getFirstItem()->getTotal(); - $avg = (float) $order_totals->getFirstItem()->getAvgTotal(); + if (count($order_totals) > 0) { + $sum = (float) $order_totals->getFirstItem()->getTotal(); + $avg = (float) $order_totals->getFirstItem()->getAvgTotal(); - $lifetime_sale = Mage::helper('core')->currency($sum, true, false); - $average_sale = Mage::helper('core')->currency($avg, true, false); + $lifetime_sale = Mage::helper('core')->currency($sum, true, false); + $average_sale = Mage::helper('core')->currency($avg, true, false); + } } $info['user'] = array( From a5ea56a12b444a899179c64114f3ee996a7eacc6 Mon Sep 17 00:00:00 2001 From: Marshall House Date: Mon, 7 Sep 2015 02:42:41 -0500 Subject: [PATCH 3/3] Update Observer.php Move semi-colons --- src/app/code/community/Zendesk/Zendesk/Model/Observer.php | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/app/code/community/Zendesk/Zendesk/Model/Observer.php b/src/app/code/community/Zendesk/Zendesk/Model/Observer.php index fed5a44b..6e152053 100644 --- a/src/app/code/community/Zendesk/Zendesk/Model/Observer.php +++ b/src/app/code/community/Zendesk/Zendesk/Model/Observer.php @@ -158,15 +158,13 @@ public function changeIdentity(Varien_Event_Observer $event) if (is_object($order_totals)) { $order_totals ->addFieldToFilter('customer_id', $customer->getId()) - ->addFieldToFilter('status', Mage_Sales_Model_Order::STATE_COMPLETE) - ; + ->addFieldToFilter('status', Mage_Sales_Model_Order::STATE_COMPLETE); $order_totals->getSelect() ->reset(Zend_Db_Select::COLUMNS) ->columns(new Zend_Db_Expr("SUM(grand_total) as total")) ->columns(new Zend_Db_Expr("AVG(grand_total) as avg_total")) - ->group('customer_id') - ; + ->group('customer_id'); if (count($order_totals) > 0) { $sum = (float) $order_totals->getFirstItem()->getTotal();