From a626b6f7fd724d9e6c6ea8efc4af1b8019804ce1 Mon Sep 17 00:00:00 2001 From: Clement Cochard Date: Fri, 30 Nov 2018 19:05:24 +0100 Subject: [PATCH] Filter order collection by customer ID for performance cause --- .../Zendesk/controllers/ApiController.php | 42 ++++++++++++------- 1 file changed, 27 insertions(+), 15 deletions(-) diff --git a/src/app/code/community/Zendesk/Zendesk/controllers/ApiController.php b/src/app/code/community/Zendesk/Zendesk/controllers/ApiController.php index 0b32493e..c7ce1281 100644 --- a/src/app/code/community/Zendesk/Zendesk/controllers/ApiController.php +++ b/src/app/code/community/Zendesk/Zendesk/controllers/ApiController.php @@ -139,25 +139,26 @@ public function customersAction() $sections = explode('/', trim($this->getRequest()->getPathInfo(), '/')); $email = $sections[3]; - - // Get a list of all orders for the given email address - // This is used to determine if a missing customer is a guest or if they really aren't a customer at all - $orderCollection = Mage::getModel('sales/order')->getCollection() - ->addFieldToFilter('customer_email', array('eq' => array($email))); - $orders = array(); - if($orderCollection->getSize()) { - foreach($orderCollection as $order) { - $orders[] = Mage::helper('zendesk')->getOrderDetail($order); - } - } + $websiteId = Mage::app()->getWebsite()->getId(); // Try to load a corresponding customer object for the provided email address - $customer = Mage::helper('zendesk')->loadCustomer($email); - - // if the admin site has a custom URL, use it - $urlModel = Mage::getModel('adminhtml/url')->setStore('admin'); + $customer = Mage::helper('zendesk')->loadCustomer($email, $websiteId); if($customer && $customer->getId()) { + // Get a list of all orders for the given customer ID + $orderCollection = Mage::getModel('sales/order')->getCollection() + ->addFieldToFilter('customer_id', array('eq' => array($customer->getId()))); + $orders = array(); + + // if the admin site has a custom URL, use it + $urlModel = Mage::getModel('adminhtml/url')->setStore('admin'); + + if($orderCollection->getSize()) { + foreach($orderCollection as $order) { + $orders[] = Mage::helper('zendesk')->getOrderDetail($order); + } + } + $info = array( 'guest' => false, 'id' => $customer->getId(), @@ -180,6 +181,17 @@ public function customersAction() } } else { + // Get a list of all orders for the given email address + $orderCollection = Mage::getModel('sales/order')->getCollection() + ->addFieldToFilter('customer_email', array('eq' => array($email))); + $orders = array(); + + if($orderCollection->getSize()) { + foreach($orderCollection as $order) { + $orders[] = Mage::helper('zendesk')->getOrderDetail($order); + } + } + if(count($orders) == 0) { // The email address doesn't even correspond with a guest customer $this->getResponse()