diff --git a/src/app/code/community/Zendesk/Zendesk/Helper/Sync.php b/src/app/code/community/Zendesk/Zendesk/Helper/Sync.php new file mode 100644 index 00000000..0de0e14a --- /dev/null +++ b/src/app/code/community/Zendesk/Zendesk/Helper/Sync.php @@ -0,0 +1,94 @@ +getEmail(); + $origEmail = $customer->getOrigData(); + $origEmail = $origEmail['email']; + //Get Customer Group + $groupId = $customer->getGroupId(); + $group = Mage::getModel('customer/group')->load($groupId); + + //Get Customer Last Login Date + $logCustomer = Mage::getModel('log/customer')->loadByCustomer($customer); + if ($logCustomer->getLoginAt()) + $loggedIn = date("Y-m-d\TH:i:s\Z",strtotime($logCustomer->getLoginAt())); + else + $loggedIn = ""; + + //Get Customer Sales Statistics + $orderTotals = Mage::getResourceModel('sales/order_collection'); + $lifetimeSale = 0; + $averageSale = 0; + + if (is_object($orderTotals)) { + $orderTotals + ->addFieldToFilter('customer_id', $customer->getId()) + ->addFieldToFilter('status', Mage_Sales_Model_Order::STATE_COMPLETE); + + $orderTotals->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'); + + if (count($orderTotals) > 0) { + $sum = (float) $orderTotals->getFirstItem()->getTotal(); + $avg = (float) $orderTotals->getFirstItem()->getAvgTotal(); + + $lifetimeSale = Mage::helper('core')->currency($sum, true, false); + $averageSale = Mage::helper('core')->currency($avg, true, false); + } + } + + $info['user'] = array( + "name" => $customer->getFirstname() . " " . $customer->getLastname(), + "email" => $email, + "user_fields" => array( + "group" => $group->getCode(), + "name" => $customer->getFirstname() . " " . $customer->getLastname(), + "id" => $customer->getId(), + "logged_in" => $loggedIn, + "average_sale" => $averageSale, + "lifetime_sale" => $lifetimeSale + ) + ); + + if($origEmail && $origEmail !== $email) { + $user = Mage::getModel('zendesk/api_users')->find($origEmail); + + if(isset($user['id'])) { + $data['identity'] = array( + 'type' => 'email', + 'value' => $email, + 'verified' => true + ); + $identity = Mage::getModel('zendesk/api_users')->addIdentity($user['id'],$data); + if(isset($identity['id'])) { + Mage::getModel('zendesk/api_users')->setPrimaryIdentity($user['id'], $identity['id']); + } + } + } + if(!$user) { + $user = Mage::getModel('zendesk/api_users')->find($email); + } + + if(isset($user['id'])) { + $this->syncData($info); + } else { + $info['user']['verified'] = true; + $user = Mage::getModel('zendesk/api_users')->create($info); + } + return $user; + } + + private function syncData($info) + { + Mage::getModel('zendesk/api_users')->create($info); + } +} diff --git a/src/app/code/community/Zendesk/Zendesk/Model/Customer.php b/src/app/code/community/Zendesk/Zendesk/Model/Customer.php new file mode 100644 index 00000000..c60705b6 --- /dev/null +++ b/src/app/code/community/Zendesk/Zendesk/Model/Customer.php @@ -0,0 +1,32 @@ +getCollection()->setPageSize(90)->setCurPage(1); + $customers->addAttributeToSelect(array('firstname', 'lastname', 'email')) + ->addAttributeToFilter('zendesk_id', array('or'=> array( + 0 => array('is' => new Zend_Db_Expr('null'))) + ), 'left'); + foreach($customers as $customer){ + Mage::log('Synchronization started', null, 'zendesk.log'); + try { + Mage::log('Synchronizing customer with id '.$customer->getId(), null, 'zendesk.log'); + $customerData = Mage::helper('zendesk/sync')->getCustomerData($customer); + $zendeskId = $customerData['id']; + $customer->setZendeskId($zendeskId); + $customer->save(); + } + catch (Exception $ex) { + Mage::log('Synchronization failed: '.$ex->getMessage(), null, 'zendesk.log'); + + return; + } + Mage::log('Synchronization completed successfully', null, 'zendesk.log'); + + + } + } +} diff --git a/src/app/code/community/Zendesk/Zendesk/data/zendesk_setup/data-upgrade-2.0.6-2.1.13.php b/src/app/code/community/Zendesk/Zendesk/data/zendesk_setup/data-upgrade-2.0.6-2.1.13.php new file mode 100644 index 00000000..c151cfd5 --- /dev/null +++ b/src/app/code/community/Zendesk/Zendesk/data/zendesk_setup/data-upgrade-2.0.6-2.1.13.php @@ -0,0 +1,35 @@ +startSetup(); +$installer->addAttribute("customer", "zendesk_id", array( + "type" => "varchar", + "backend" => "", + "label" => "Zendesk Id", + "input" => "text", + "source" => "", + "visible" => true, + "required" => false, + "default" => "", + "frontend" => "", + "unique" => false, + "note" => "" + +)); + +$attribute = Mage::getSingleton("eav/config")->getAttribute("customer", "zendesk_id"); +$used_in_forms=array(); + +$used_in_forms[]="adminhtml_customer"; +$used_in_forms[]="checkout_register"; +$used_in_forms[]="customer_account_create"; +$used_in_forms[]="customer_account_edit"; +$used_in_forms[]="adminhtml_checkout"; +$attribute->setData("used_in_forms", $used_in_forms) + ->setData("is_used_for_customer_segment", true) + ->setData("is_system", 0) + ->setData("is_user_defined", 1) + ->setData("is_visible", 1) + ->setData("sort_order", 100); +$attribute->save(); +$installer->endSetup(); diff --git a/src/app/code/community/Zendesk/Zendesk/etc/config.xml b/src/app/code/community/Zendesk/Zendesk/etc/config.xml index 4c9046e3..dc149d13 100644 --- a/src/app/code/community/Zendesk/Zendesk/etc/config.xml +++ b/src/app/code/community/Zendesk/Zendesk/etc/config.xml @@ -108,6 +108,19 @@ + + + + + */13 * * * * + + + + zendesk/customer::syncronize + + + +