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
+
+
+
+