Version Notes
First version of "Customers into SugarCRM" extension.
Download this release
Release Info
| Developer | Magento Core Team |
| Extension | customersintosugarcrm |
| Version | 1.0.0 |
| Comparing to | |
| See all releases | |
Version 1.0.0
- app/code/community/OlegKoval/CustomersIntoSugarCrm/Helper/Data.php +187 -0
- app/code/community/OlegKoval/CustomersIntoSugarCrm/Model/Observer.php +49 -0
- app/code/community/OlegKoval/CustomersIntoSugarCrm/Model/Sugarcrm.php +182 -0
- app/code/community/OlegKoval/CustomersIntoSugarCrm/etc/config.xml +117 -0
- app/code/community/OlegKoval/CustomersIntoSugarCrm/etc/system.xml +81 -0
- app/etc/modules/OlegKoval_CustomersIntoSugarCrm.xml +19 -0
- app/locale/en_US/OlegKoval_CustomersIntoSugarCrm.csv +13 -0
- package.xml +28 -0
app/code/community/OlegKoval/CustomersIntoSugarCrm/Helper/Data.php
ADDED
|
@@ -0,0 +1,187 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* CustomersIntoSugarCrm Data Helper
|
| 4 |
+
*
|
| 5 |
+
* @category OlegKoval
|
| 6 |
+
* @package OlegKoval_CustomersIntoSugarCrm
|
| 7 |
+
* @copyright Copyright (c) 2013 Oleg Koval
|
| 8 |
+
* @author Oleg Koval <oleh.koval@gmail.com>
|
| 9 |
+
*/
|
| 10 |
+
class OlegKoval_CustomersIntoSugarCrm_Helper_Data extends Mage_Core_Helper_Abstract {
|
| 11 |
+
const XML_PATH_ENABLED = 'customersintosugarcrm/extension/enabled';
|
| 12 |
+
const XML_PATH_SUGAR_URL = 'customersintosugarcrm/sugarcrm/url';
|
| 13 |
+
const XML_PATH_SUGAR_LOGIN = 'customersintosugarcrm/sugarcrm/login';
|
| 14 |
+
const XML_PATH_SUGAR_PASSWD = 'customersintosugarcrm/sugarcrm/password';
|
| 15 |
+
|
| 16 |
+
private $sessionId = '';
|
| 17 |
+
|
| 18 |
+
/**
|
| 19 |
+
* Synchronize customer with SugarCRM
|
| 20 |
+
* @param Mage_Customer_Model_Customer $customer
|
| 21 |
+
* @return OlegKoval_CustomersIntoSugarCrm_Helper_Data
|
| 22 |
+
*/
|
| 23 |
+
public function synchronizeCustomer($customer) {
|
| 24 |
+
$this->init();
|
| 25 |
+
|
| 26 |
+
if (strlen($this->sessionId) > 0) {
|
| 27 |
+
$contactId = $this->getContactID($customer->getData('email'));
|
| 28 |
+
|
| 29 |
+
$sugarId = Mage::getModel('customersintosugarcrm/sugarcrm')->syncSugarcrm(
|
| 30 |
+
$customer,
|
| 31 |
+
array(
|
| 32 |
+
'sessionId' => $this->sessionId,
|
| 33 |
+
'contactId' => $contactId
|
| 34 |
+
)
|
| 35 |
+
);
|
| 36 |
+
|
| 37 |
+
//show messages only for admin
|
| 38 |
+
if (Mage::getSingleton('admin/session')->isLoggedIn() && $sugarId !== false && strlen($sugarId) == 36) {
|
| 39 |
+
if ($contactId == false) {
|
| 40 |
+
Mage::getSingleton('adminhtml/session')->addSuccess(
|
| 41 |
+
$this->__('New Contact was created in SugarCRM')
|
| 42 |
+
);
|
| 43 |
+
}
|
| 44 |
+
else {
|
| 45 |
+
Mage::getSingleton('adminhtml/session')->addSuccess(
|
| 46 |
+
$this->__('The Contact info was updated in SugarCRM')
|
| 47 |
+
);
|
| 48 |
+
}
|
| 49 |
+
}
|
| 50 |
+
}
|
| 51 |
+
|
| 52 |
+
return $this;
|
| 53 |
+
}
|
| 54 |
+
|
| 55 |
+
/**
|
| 56 |
+
* Delete customer from SugarCRM
|
| 57 |
+
* @param string $email
|
| 58 |
+
* @return OlegKoval_CustomersIntoSugarCrm_Helper_Data
|
| 59 |
+
*/
|
| 60 |
+
public function deleteCustomer($email) {
|
| 61 |
+
$this->init();
|
| 62 |
+
|
| 63 |
+
if (strlen($this->sessionId) > 0) {
|
| 64 |
+
$contactId = $this->getContactID($email);
|
| 65 |
+
|
| 66 |
+
if ($contactId !== false) {
|
| 67 |
+
$sugarId = Mage::getModel('customersintosugarcrm/sugarcrm')->deleteFromSugarcrm(
|
| 68 |
+
array(
|
| 69 |
+
'sessionId' => $this->sessionId,
|
| 70 |
+
'contactId' => $contactId
|
| 71 |
+
)
|
| 72 |
+
);
|
| 73 |
+
|
| 74 |
+
if (Mage::getSingleton('admin/session')->isLoggedIn() && $sugarId !== false && strlen($sugarId) == 36) {
|
| 75 |
+
Mage::getSingleton('adminhtml/session')->addSuccess(
|
| 76 |
+
$this->__('The Contact was deleted in SugarCRM')
|
| 77 |
+
);
|
| 78 |
+
}
|
| 79 |
+
}
|
| 80 |
+
else if(Mage::getSingleton('admin/session')->isLoggedIn()) {
|
| 81 |
+
Mage::getSingleton('adminhtml/session')->addSuccess(
|
| 82 |
+
$this->__('The Contact with this email not exists in SugarCRM')
|
| 83 |
+
);
|
| 84 |
+
}
|
| 85 |
+
}
|
| 86 |
+
|
| 87 |
+
return $this;
|
| 88 |
+
}
|
| 89 |
+
|
| 90 |
+
/**
|
| 91 |
+
* Send request to SugarCRM REST API
|
| 92 |
+
* @param string $method
|
| 93 |
+
* @param array $params
|
| 94 |
+
* @return mixed
|
| 95 |
+
*/
|
| 96 |
+
public function sendRequest($method, $params) {
|
| 97 |
+
$result = false;
|
| 98 |
+
|
| 99 |
+
$postParams = http_build_query(
|
| 100 |
+
array(
|
| 101 |
+
'method' => $method,
|
| 102 |
+
'input_type' => 'JSON',
|
| 103 |
+
'response_type' => 'JSON',
|
| 104 |
+
'rest_data' => json_encode($params)
|
| 105 |
+
)
|
| 106 |
+
);
|
| 107 |
+
|
| 108 |
+
$curl = curl_init($this->getSugarUrl());
|
| 109 |
+
curl_setopt($curl, CURLOPT_POST, true);
|
| 110 |
+
curl_setopt($curl, CURLOPT_HEADER, false);
|
| 111 |
+
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
|
| 112 |
+
curl_setopt($curl, CURLOPT_POSTFIELDS, $postParams);
|
| 113 |
+
$response = curl_exec($curl);
|
| 114 |
+
|
| 115 |
+
$jsonObj = json_decode($response);
|
| 116 |
+
if (is_object($jsonObj) && get_class($jsonObj) == 'stdClass') {
|
| 117 |
+
$result = $jsonObj;
|
| 118 |
+
}
|
| 119 |
+
|
| 120 |
+
return $result;
|
| 121 |
+
}
|
| 122 |
+
|
| 123 |
+
/**
|
| 124 |
+
* Check if contact with this email exists in SugarCRM and return Contact id or false
|
| 125 |
+
* @param string $email
|
| 126 |
+
* @return mixed
|
| 127 |
+
*/
|
| 128 |
+
private function getContactID($email) {
|
| 129 |
+
$result = false;
|
| 130 |
+
|
| 131 |
+
$query = sprintf('contacts.id in (select eab.bean_id from email_addresses ea, email_addr_bean_rel eab where ea.email_address LIKE \'%s\' and eab.primary_address=1 and eab.email_address_id=ea.id and eab.bean_module=\'Contacts\' and ea.opt_out=0 and ea.deleted=0 and eab.deleted=0) and contacts.deleted=0', $email);
|
| 132 |
+
$params = array($this->sessionId, 'Contacts', $query, '', '', '', '', '');
|
| 133 |
+
$entries = $this->sendRequest('get_entry_list', $params);
|
| 134 |
+
|
| 135 |
+
//if contact exist - get Id
|
| 136 |
+
if ($entries !== false && isset($entries->entry_list) && count($entries->entry_list) == 1 && isset($entries->entry_list[0])) {
|
| 137 |
+
$result = $entries->entry_list[0]->id;
|
| 138 |
+
}
|
| 139 |
+
|
| 140 |
+
return $result;
|
| 141 |
+
}
|
| 142 |
+
|
| 143 |
+
/**
|
| 144 |
+
* Init function: login into Sugar, etc.
|
| 145 |
+
* @return [type] [description]
|
| 146 |
+
*/
|
| 147 |
+
private function init() {
|
| 148 |
+
if (strlen($this->sessionId) == 0) {
|
| 149 |
+
$params = array(
|
| 150 |
+
'user_auth' => array(
|
| 151 |
+
'user_name' => $this->getSugarLogin(),
|
| 152 |
+
'password' => md5($this->getSugarPassword()),
|
| 153 |
+
),
|
| 154 |
+
);
|
| 155 |
+
|
| 156 |
+
$result = $this->sendRequest('login', $params);
|
| 157 |
+
|
| 158 |
+
if ($result !== false && isset($result->id)) {
|
| 159 |
+
$this->sessionId = $result->id;
|
| 160 |
+
}
|
| 161 |
+
}
|
| 162 |
+
}
|
| 163 |
+
|
| 164 |
+
/**
|
| 165 |
+
* Get URl of SugarCRM from config
|
| 166 |
+
* @return string
|
| 167 |
+
*/
|
| 168 |
+
private function getSugarUrl() {
|
| 169 |
+
return Mage::getStoreConfig(self::XML_PATH_SUGAR_URL);
|
| 170 |
+
}
|
| 171 |
+
|
| 172 |
+
/**
|
| 173 |
+
* Get login of SugarCRM user from config
|
| 174 |
+
* @return string
|
| 175 |
+
*/
|
| 176 |
+
private function getSugarLogin() {
|
| 177 |
+
return Mage::getStoreConfig(self::XML_PATH_SUGAR_LOGIN);
|
| 178 |
+
}
|
| 179 |
+
|
| 180 |
+
/**
|
| 181 |
+
* Get password of SugarCRM user from config
|
| 182 |
+
* @return string
|
| 183 |
+
*/
|
| 184 |
+
private function getSugarPassword() {
|
| 185 |
+
return Mage::getStoreConfig(self::XML_PATH_SUGAR_PASSWD);
|
| 186 |
+
}
|
| 187 |
+
}
|
app/code/community/OlegKoval/CustomersIntoSugarCrm/Model/Observer.php
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* Observer for customer save/delete actions
|
| 4 |
+
*
|
| 5 |
+
* @category OlegKoval
|
| 6 |
+
* @package OlegKoval_CustomersIntoSugarCrm
|
| 7 |
+
* @copyright Copyright (c) 2013 Oleg Koval
|
| 8 |
+
* @author Oleg Koval <oleh.koval@gmail.com>
|
| 9 |
+
*/
|
| 10 |
+
class OlegKoval_CustomersIntoSugarCrm_Model_Observer {
|
| 11 |
+
const XML_PATH_ENABLED = 'customersintosugarcrm/extension/enabled';
|
| 12 |
+
|
| 13 |
+
/**
|
| 14 |
+
* Initialization of our custom model
|
| 15 |
+
*/
|
| 16 |
+
protected function _construct() {
|
| 17 |
+
$this->_init('customersintosugarcrm/observer');
|
| 18 |
+
parent::_construct();
|
| 19 |
+
}
|
| 20 |
+
|
| 21 |
+
/**
|
| 22 |
+
* Customer save handler
|
| 23 |
+
* @param Varien_Object $observer
|
| 24 |
+
* @return OlegKoval_CustomersIntoSugarCrm_Model_Observer
|
| 25 |
+
*/
|
| 26 |
+
public function customerSaved($observer) {
|
| 27 |
+
if (Mage::getStoreConfigFlag(self::XML_PATH_ENABLED)) {
|
| 28 |
+
$customer = $observer->getEvent()->getCustomer();
|
| 29 |
+
if (($customer instanceof Mage_Customer_Model_Customer)) {
|
| 30 |
+
Mage::helper('customersintosugarcrm')->synchronizeCustomer($customer);
|
| 31 |
+
}
|
| 32 |
+
}
|
| 33 |
+
|
| 34 |
+
return $this;
|
| 35 |
+
}
|
| 36 |
+
|
| 37 |
+
/**
|
| 38 |
+
* Customer delete handler
|
| 39 |
+
* @param Varien_Object $observer
|
| 40 |
+
* @return OlegKoval_CustomersIntoSugarCrm_Model_Observer
|
| 41 |
+
*/
|
| 42 |
+
public function customerDeleted($observer) {
|
| 43 |
+
if (Mage::getStoreConfigFlag(self::XML_PATH_ENABLED)) {
|
| 44 |
+
Mage::helper('customersintosugarcrm')->deleteCustomer($observer->getEvent()->getCustomer()->getEmail());
|
| 45 |
+
}
|
| 46 |
+
|
| 47 |
+
return $this;
|
| 48 |
+
}
|
| 49 |
+
}
|
app/code/community/OlegKoval/CustomersIntoSugarCrm/Model/Sugarcrm.php
ADDED
|
@@ -0,0 +1,182 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* Model for SugarCRM data manipulations.
|
| 4 |
+
*
|
| 5 |
+
* @category OlegKoval
|
| 6 |
+
* @package OlegKoval_CustomersIntoSugarCrm
|
| 7 |
+
* @copyright Copyright (c) 2013 Oleg Koval
|
| 8 |
+
* @author Oleg Koval <oleh.koval@gmail.com>
|
| 9 |
+
*/
|
| 10 |
+
class OlegKoval_CustomersIntoSugarCrm_Model_Sugarcrm extends Mage_Core_Model_Abstract {
|
| 11 |
+
/**
|
| 12 |
+
* Initialization of our custom model
|
| 13 |
+
*/
|
| 14 |
+
protected function _construct() {
|
| 15 |
+
$this->_init('customersintosugarcrm/sugarcrm');
|
| 16 |
+
parent::_construct();
|
| 17 |
+
}
|
| 18 |
+
|
| 19 |
+
/**
|
| 20 |
+
* Synchronize Magento Customer data with SugarCRM Contact object
|
| 21 |
+
* @param Mage_Customer_Model_Customer $customer
|
| 22 |
+
* @param array $params
|
| 23 |
+
* @return OlegKoval_CustomersIntoSugarCrm_Model_Sugarcrm
|
| 24 |
+
*/
|
| 25 |
+
public function syncSugarcrm($customer, $params) {
|
| 26 |
+
$contactId = $this->syncContact($customer, $params);
|
| 27 |
+
|
| 28 |
+
return $contactId;
|
| 29 |
+
}
|
| 30 |
+
|
| 31 |
+
/**
|
| 32 |
+
* Delete Contact object from SugarCRM
|
| 33 |
+
* @param array $params
|
| 34 |
+
* @return OlegKoval_CustomersIntoSugarCrm_Model_Sugarcrm
|
| 35 |
+
*/
|
| 36 |
+
public function deleteFromSugarcrm($params) {
|
| 37 |
+
$result = false;
|
| 38 |
+
|
| 39 |
+
if ($params['contactId'] !== false) {
|
| 40 |
+
//set Contact properties
|
| 41 |
+
$contactParams = array(
|
| 42 |
+
'session' => $params['sessionId'],
|
| 43 |
+
'module' => 'Contacts',
|
| 44 |
+
'name_value_list' => array(
|
| 45 |
+
0 => array(
|
| 46 |
+
array('name' => 'id', 'value' => $params['contactId']),
|
| 47 |
+
array('name' => 'deleted', 'value' => '1')
|
| 48 |
+
)
|
| 49 |
+
),
|
| 50 |
+
);
|
| 51 |
+
|
| 52 |
+
$requestResult = Mage::helper('customersintosugarcrm')->sendRequest('set_entries', $contactParams);
|
| 53 |
+
|
| 54 |
+
if (isset($requestResult->ids) && isset($requestResult->ids[0])) {
|
| 55 |
+
$result = $requestResult->ids[0];
|
| 56 |
+
}
|
| 57 |
+
}
|
| 58 |
+
|
| 59 |
+
return $result;
|
| 60 |
+
}
|
| 61 |
+
|
| 62 |
+
/**
|
| 63 |
+
* Update or create new Contact in SugarCRM
|
| 64 |
+
* @param Mage_Customer_Model_Customer $customer
|
| 65 |
+
* @param array $params
|
| 66 |
+
* @return mixed
|
| 67 |
+
*/
|
| 68 |
+
private function syncContact($customer, $params) {
|
| 69 |
+
$result = false;
|
| 70 |
+
|
| 71 |
+
//set Contact properties
|
| 72 |
+
$contactParams = array(
|
| 73 |
+
'session' => $params['sessionId'],
|
| 74 |
+
'module' => 'Contacts',
|
| 75 |
+
'name_value_list' => array(
|
| 76 |
+
0 => array(
|
| 77 |
+
array('name' => 'title', 'value' => $customer->getData('prefix')),
|
| 78 |
+
array('name' => 'first_name', 'value' => $customer->getData('firstname')),
|
| 79 |
+
array('name' => 'last_name', 'value' => $customer->getData('lastname')),
|
| 80 |
+
array('name' => 'email1', 'value' => $customer->getData('email')),
|
| 81 |
+
array('name' => 'birthdate', 'value' => $customer->getData('dob')),
|
| 82 |
+
array('name' => 'lead_source', 'value' => 'Other')
|
| 83 |
+
)
|
| 84 |
+
),
|
| 85 |
+
);
|
| 86 |
+
|
| 87 |
+
//get all addresses of current customer
|
| 88 |
+
$addressList = $customer->getAddresses();
|
| 89 |
+
|
| 90 |
+
//add Primary Address of Contact
|
| 91 |
+
if (($address = $customer->getPrimaryAddress('default_billing')) != false || count($addressList) > 0) {
|
| 92 |
+
//we do not have default billing BUT we have "some" address in address book - we use it
|
| 93 |
+
if ($address == false) {
|
| 94 |
+
$address = $addressList[0];
|
| 95 |
+
}
|
| 96 |
+
|
| 97 |
+
$contactParams['name_value_list'][0] = array_merge(
|
| 98 |
+
$contactParams['name_value_list'][0],
|
| 99 |
+
$this->prepareAddressArray($address)
|
| 100 |
+
);
|
| 101 |
+
}
|
| 102 |
+
//set address as empty
|
| 103 |
+
else {
|
| 104 |
+
$contactParams['name_value_list'][0][] = array('name' => 'primary_address_country', 'value' => '');
|
| 105 |
+
$contactParams['name_value_list'][0][] = array('name' => 'primary_address_postalcode', 'value' => '');
|
| 106 |
+
$contactParams['name_value_list'][0][] = array('name' => 'primary_address_state', 'value' => '');
|
| 107 |
+
$contactParams['name_value_list'][0][] = array('name' => 'primary_address_city', 'value' => '');
|
| 108 |
+
$contactParams['name_value_list'][0][] = array('name' => 'primary_address_street', 'value' => '');
|
| 109 |
+
}
|
| 110 |
+
|
| 111 |
+
//add Other Address of Contact
|
| 112 |
+
if (($address = $customer->getPrimaryAddress('default_shipping')) != false) {
|
| 113 |
+
$contactParams['name_value_list'][0] = array_merge(
|
| 114 |
+
$contactParams['name_value_list'][0],
|
| 115 |
+
$this->prepareAddressArray($address, 'alt')
|
| 116 |
+
);
|
| 117 |
+
}
|
| 118 |
+
//set address as empty
|
| 119 |
+
else {
|
| 120 |
+
$contactParams['name_value_list'][0][] = array('name' => 'alt_address_country', 'value' => '');
|
| 121 |
+
$contactParams['name_value_list'][0][] = array('name' => 'alt_address_postalcode', 'value' => '');
|
| 122 |
+
$contactParams['name_value_list'][0][] = array('name' => 'alt_address_state', 'value' => '');
|
| 123 |
+
$contactParams['name_value_list'][0][] = array('name' => 'alt_address_city', 'value' => '');
|
| 124 |
+
$contactParams['name_value_list'][0][] = array('name' => 'alt_address_street', 'value' => '');
|
| 125 |
+
}
|
| 126 |
+
|
| 127 |
+
//if Contact exists - we add Id into params to update info instead of creating new contact
|
| 128 |
+
if ($params['contactId'] !== false) {
|
| 129 |
+
$contactParams['name_value_list'][0][] = array('name' => 'id', 'value' => $params['contactId']);
|
| 130 |
+
}
|
| 131 |
+
|
| 132 |
+
$requestResult = Mage::helper('customersintosugarcrm')->sendRequest('set_entries', $contactParams);
|
| 133 |
+
|
| 134 |
+
if (isset($requestResult->ids) && isset($requestResult->ids[0])) {
|
| 135 |
+
$result = $requestResult->ids[0];
|
| 136 |
+
}
|
| 137 |
+
|
| 138 |
+
return $result;
|
| 139 |
+
}
|
| 140 |
+
|
| 141 |
+
/**
|
| 142 |
+
* Prepare array of Contact Address properties
|
| 143 |
+
* @param Mage_Customer_Model_Address $address
|
| 144 |
+
* @param string $prefix
|
| 145 |
+
* @return array
|
| 146 |
+
*/
|
| 147 |
+
private function prepareAddressArray($address, $prefix = 'primary') {
|
| 148 |
+
$result = array();
|
| 149 |
+
|
| 150 |
+
//Country
|
| 151 |
+
$result[] = array(
|
| 152 |
+
'name' => $prefix . '_address_country',
|
| 153 |
+
'value' => Mage::app()->getLocale()->getCountryTranslation($address->getData('country_id'))
|
| 154 |
+
);
|
| 155 |
+
//Postal Code
|
| 156 |
+
$result[] = array(
|
| 157 |
+
'name' => $prefix . '_address_postalcode',
|
| 158 |
+
'value' => $address->getData('postcode')
|
| 159 |
+
);
|
| 160 |
+
//State/Region
|
| 161 |
+
$result[] = array(
|
| 162 |
+
'name' => $prefix . '_address_state',
|
| 163 |
+
'value' => (
|
| 164 |
+
$address->getData('region_id') > 0 ?
|
| 165 |
+
Mage::getModel('directory/region')->load($address->getData('region_id'))->getName() :
|
| 166 |
+
$address->getData('region')
|
| 167 |
+
)
|
| 168 |
+
);
|
| 169 |
+
//City
|
| 170 |
+
$result[] = array(
|
| 171 |
+
'name' => $prefix . '_address_city',
|
| 172 |
+
'value' => $address->getData('city')
|
| 173 |
+
);
|
| 174 |
+
//Address
|
| 175 |
+
$result[] = array(
|
| 176 |
+
'name' => $prefix . '_address_street',
|
| 177 |
+
'value' => $address->getData('street')
|
| 178 |
+
);
|
| 179 |
+
|
| 180 |
+
return $result;
|
| 181 |
+
}
|
| 182 |
+
}
|
app/code/community/OlegKoval/CustomersIntoSugarCrm/etc/config.xml
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
| 2 |
+
<!--
|
| 3 |
+
/**
|
| 4 |
+
* Customers into SugarCRM
|
| 5 |
+
*
|
| 6 |
+
* @category OlegKoval
|
| 7 |
+
* @package OlegKoval_CustomersIntoSugarCrm
|
| 8 |
+
* @copyright Copyright (c) 2013 Oleg Koval
|
| 9 |
+
* @author Oleg Koval <oleh.koval@gmail.com>
|
| 10 |
+
*/
|
| 11 |
+
-->
|
| 12 |
+
<config>
|
| 13 |
+
<modules>
|
| 14 |
+
<OlegKoval_CustomersIntoSugarCrm>
|
| 15 |
+
<version>1.0.0</version>
|
| 16 |
+
<depends>
|
| 17 |
+
<Mage_Customer/>
|
| 18 |
+
</depends>
|
| 19 |
+
</OlegKoval_CustomersIntoSugarCrm>
|
| 20 |
+
</modules>
|
| 21 |
+
|
| 22 |
+
<global>
|
| 23 |
+
<helpers>
|
| 24 |
+
<customersintosugarcrm>
|
| 25 |
+
<class>OlegKoval_CustomersIntoSugarCrm_Helper</class>
|
| 26 |
+
</customersintosugarcrm>
|
| 27 |
+
</helpers>
|
| 28 |
+
|
| 29 |
+
<models>
|
| 30 |
+
<customersintosugarcrm>
|
| 31 |
+
<class>OlegKoval_CustomersIntoSugarCrm_Model</class>
|
| 32 |
+
</customersintosugarcrm>
|
| 33 |
+
</models>
|
| 34 |
+
</global>
|
| 35 |
+
|
| 36 |
+
<frontend>
|
| 37 |
+
<events>
|
| 38 |
+
<customer_save_after>
|
| 39 |
+
<observers>
|
| 40 |
+
<customersintosugarcrm_observer>
|
| 41 |
+
<class>customersintosugarcrm/observer</class>
|
| 42 |
+
<method>customerSaved</method>
|
| 43 |
+
</customersintosugarcrm_observer>
|
| 44 |
+
</observers>
|
| 45 |
+
</customer_save_after>
|
| 46 |
+
<customer_delete_after>
|
| 47 |
+
<observers>
|
| 48 |
+
<customersintosugarcrm_observer>
|
| 49 |
+
<class>customersintosugarcrm/observer</class>
|
| 50 |
+
<method>customerDeleted</method>
|
| 51 |
+
</customersintosugarcrm_observer>
|
| 52 |
+
</observers>
|
| 53 |
+
</customer_delete_after>
|
| 54 |
+
</events>
|
| 55 |
+
|
| 56 |
+
<translate>
|
| 57 |
+
<modules>
|
| 58 |
+
<OlegKoval_CustomersIntoSugarCrm>
|
| 59 |
+
<files>
|
| 60 |
+
<default>OlegKoval_CustomersIntoSugarCrm.csv</default>
|
| 61 |
+
</files>
|
| 62 |
+
</OlegKoval_CustomersIntoSugarCrm>
|
| 63 |
+
</modules>
|
| 64 |
+
</translate>
|
| 65 |
+
</frontend>
|
| 66 |
+
|
| 67 |
+
<adminhtml>
|
| 68 |
+
<events>
|
| 69 |
+
<customer_save_after>
|
| 70 |
+
<observers>
|
| 71 |
+
<customersintosugarcrm_observer>
|
| 72 |
+
<class>customersintosugarcrm/observer</class>
|
| 73 |
+
<method>customerSaved</method>
|
| 74 |
+
</customersintosugarcrm_observer>
|
| 75 |
+
</observers>
|
| 76 |
+
</customer_save_after>
|
| 77 |
+
<customer_delete_after>
|
| 78 |
+
<observers>
|
| 79 |
+
<customersintosugarcrm_observer>
|
| 80 |
+
<class>customersintosugarcrm/observer</class>
|
| 81 |
+
<method>customerDeleted</method>
|
| 82 |
+
</customersintosugarcrm_observer>
|
| 83 |
+
</observers>
|
| 84 |
+
</customer_delete_after>
|
| 85 |
+
</events>
|
| 86 |
+
|
| 87 |
+
<translate>
|
| 88 |
+
<modules>
|
| 89 |
+
<OlegKoval_CustomersIntoSugarCrm>
|
| 90 |
+
<files>
|
| 91 |
+
<default>OlegKoval_CustomersIntoSugarCrm.csv</default>
|
| 92 |
+
</files>
|
| 93 |
+
</OlegKoval_CustomersIntoSugarCrm>
|
| 94 |
+
</modules>
|
| 95 |
+
</translate>
|
| 96 |
+
|
| 97 |
+
<acl>
|
| 98 |
+
<resources>
|
| 99 |
+
<admin>
|
| 100 |
+
<children>
|
| 101 |
+
<system>
|
| 102 |
+
<children>
|
| 103 |
+
<config>
|
| 104 |
+
<children>
|
| 105 |
+
<customersintosugarcrm translate="title" module="customersintosugarcrm">
|
| 106 |
+
<title>Customers into SugarCRM</title>
|
| 107 |
+
</customersintosugarcrm>
|
| 108 |
+
</children>
|
| 109 |
+
</config>
|
| 110 |
+
</children>
|
| 111 |
+
</system>
|
| 112 |
+
</children>
|
| 113 |
+
</admin>
|
| 114 |
+
</resources>
|
| 115 |
+
</acl>
|
| 116 |
+
</adminhtml>
|
| 117 |
+
</config>
|
app/code/community/OlegKoval/CustomersIntoSugarCrm/etc/system.xml
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
| 2 |
+
<!--
|
| 3 |
+
/**
|
| 4 |
+
* Customers into SugarCRM
|
| 5 |
+
*
|
| 6 |
+
* @category OlegKoval
|
| 7 |
+
* @package OlegKoval_CustomersIntoSugarCrm
|
| 8 |
+
* @copyright Copyright (c) 2013 Oleg Koval
|
| 9 |
+
* @author Oleg Koval <oleh.koval@gmail.com>
|
| 10 |
+
*/
|
| 11 |
+
-->
|
| 12 |
+
<config>
|
| 13 |
+
<sections>
|
| 14 |
+
<customersintosugarcrm translate="label" module="customersintosugarcrm">
|
| 15 |
+
<label>Customers into SugarCRM</label>
|
| 16 |
+
<tab>customer</tab>
|
| 17 |
+
<frontend_type>text</frontend_type>
|
| 18 |
+
<sort_order>300</sort_order>
|
| 19 |
+
<show_in_default>1</show_in_default>
|
| 20 |
+
<show_in_website>1</show_in_website>
|
| 21 |
+
<show_in_store>1</show_in_store>
|
| 22 |
+
<groups>
|
| 23 |
+
<extension translate="label">
|
| 24 |
+
<label>Extension Options</label>
|
| 25 |
+
<frontend_type>text</frontend_type>
|
| 26 |
+
<sort_order>110</sort_order>
|
| 27 |
+
<show_in_default>1</show_in_default>
|
| 28 |
+
<show_in_website>1</show_in_website>
|
| 29 |
+
<show_in_store>1</show_in_store>
|
| 30 |
+
<fields>
|
| 31 |
+
<enabled translate="label">
|
| 32 |
+
<label>Enable synchronization of Customers into SugarCRM</label>
|
| 33 |
+
<frontend_type>select</frontend_type>
|
| 34 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
| 35 |
+
<sort_order>110</sort_order>
|
| 36 |
+
<show_in_default>1</show_in_default>
|
| 37 |
+
<show_in_website>1</show_in_website>
|
| 38 |
+
<show_in_store>1</show_in_store>
|
| 39 |
+
</enabled>
|
| 40 |
+
</fields>
|
| 41 |
+
</extension>
|
| 42 |
+
<sugarcrm translate="label">
|
| 43 |
+
<label>SugarCRM Options</label>
|
| 44 |
+
<frontend_type>text</frontend_type>
|
| 45 |
+
<sort_order>120</sort_order>
|
| 46 |
+
<show_in_default>1</show_in_default>
|
| 47 |
+
<show_in_website>1</show_in_website>
|
| 48 |
+
<show_in_store>1</show_in_store>
|
| 49 |
+
<fields>
|
| 50 |
+
<url translate="label">
|
| 51 |
+
<label>URL to SugarCRM REST API</label>
|
| 52 |
+
<comment>For example: http://{sugar_url}/service/v4/rest.php</comment>
|
| 53 |
+
<frontend_type>text</frontend_type>
|
| 54 |
+
<sort_order>110</sort_order>
|
| 55 |
+
<show_in_default>1</show_in_default>
|
| 56 |
+
<show_in_website>1</show_in_website>
|
| 57 |
+
<show_in_store>1</show_in_store>
|
| 58 |
+
</url>
|
| 59 |
+
<login translate="label">
|
| 60 |
+
<label>Username</label>
|
| 61 |
+
<comment>Username of SugarCRM user which have admin rights</comment>
|
| 62 |
+
<frontend_type>text</frontend_type>
|
| 63 |
+
<sort_order>120</sort_order>
|
| 64 |
+
<show_in_default>1</show_in_default>
|
| 65 |
+
<show_in_website>1</show_in_website>
|
| 66 |
+
<show_in_store>1</show_in_store>
|
| 67 |
+
</login>
|
| 68 |
+
<password translate="label">
|
| 69 |
+
<label>Password</label>
|
| 70 |
+
<frontend_type>text</frontend_type>
|
| 71 |
+
<sort_order>130</sort_order>
|
| 72 |
+
<show_in_default>1</show_in_default>
|
| 73 |
+
<show_in_website>1</show_in_website>
|
| 74 |
+
<show_in_store>1</show_in_store>
|
| 75 |
+
</password>
|
| 76 |
+
</fields>
|
| 77 |
+
</sugarcrm>
|
| 78 |
+
</groups>
|
| 79 |
+
</customersintosugarcrm>
|
| 80 |
+
</sections>
|
| 81 |
+
</config>
|
app/etc/modules/OlegKoval_CustomersIntoSugarCrm.xml
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
| 2 |
+
<!--
|
| 3 |
+
/**
|
| 4 |
+
* Customers into SugarCRM
|
| 5 |
+
*
|
| 6 |
+
* @category OlegKoval
|
| 7 |
+
* @package OlegKoval_CustomersIntoSugarCrm
|
| 8 |
+
* @copyright Copyright (c) 2013 Oleg Koval
|
| 9 |
+
* @author Oleg Koval <oleh.koval@gmail.com>
|
| 10 |
+
*/
|
| 11 |
+
-->
|
| 12 |
+
<config>
|
| 13 |
+
<modules>
|
| 14 |
+
<OlegKoval_CustomersIntoSugarCrm>
|
| 15 |
+
<active>true</active>
|
| 16 |
+
<codePool>community</codePool>
|
| 17 |
+
</OlegKoval_CustomersIntoSugarCrm>
|
| 18 |
+
</modules>
|
| 19 |
+
</config>
|
app/locale/en_US/OlegKoval_CustomersIntoSugarCrm.csv
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"Customers into SugarCRM","Customers into SugarCRM"
|
| 2 |
+
"SugarCRM Options","SugarCRM Options"
|
| 3 |
+
"URL to SugarCRM REST API","URL to SugarCRM REST API"
|
| 4 |
+
"For example: http://{sugar_url}/service/v4/rest.php","For example: http://{sugar_url}/service/v4/rest.php"
|
| 5 |
+
"Username","Username"
|
| 6 |
+
"Username of SugarCRM user which have admin rights","Username of SugarCRM user which have admin rights"
|
| 7 |
+
"Password","Password"
|
| 8 |
+
"Extension Options","Extension Options"
|
| 9 |
+
"Enable synchronization of Customers into SugarCRM","Enable synchronization of Customers into SugarCRM"
|
| 10 |
+
"New Contact was created in SugarCRM","New Contact was created in SugarCRM"
|
| 11 |
+
"The Contact info was updated in SugarCRM", "The Contact info was updated in SugarCRM"
|
| 12 |
+
"The Contact with this email not exists in SugarCRM","The Contact with this email not exists in SugarCRM"
|
| 13 |
+
"The Contact was deleted in SugarCRM","The Contact was deleted in SugarCRM"
|
package.xml
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<package>
|
| 3 |
+
<name>customersintosugarcrm</name>
|
| 4 |
+
<version>1.0.0</version>
|
| 5 |
+
<stability>stable</stability>
|
| 6 |
+
<license uri="http://opensource.org/licenses/OSL-3.0">OSL v3.0</license>
|
| 7 |
+
<channel>community</channel>
|
| 8 |
+
<extends/>
|
| 9 |
+
<summary>Synchronization Magento Customers data with SugarCRM Contacts.</summary>
|
| 10 |
+
<description>This extension allow you automaticaly synchronize Magento Customers data with SugarCRM Contacts:
|
| 11 |
+
- will automaticaly create new if Contact with this Customer email not exists;
|
| 12 |
+
- will atomaticaly update information if Contact exists;
|
| 13 |
+

|
| 14 |
+
This extension will synchronize this Magento Customer info:
|
| 15 |
+
- Prefix;
|
| 16 |
+
- First Name;
|
| 17 |
+
- Last Name;
|
| 18 |
+
- Email;
|
| 19 |
+
- Birthdate;
|
| 20 |
+
- Customer Addresses (primary Billing/Shipping);</description>
|
| 21 |
+
<notes>First version of "Customers into SugarCRM" extension.</notes>
|
| 22 |
+
<authors><author><name>Oleg Koval</name><user>auto-converted</user><email>oleh.koval@gmail.com</email></author></authors>
|
| 23 |
+
<date>2013-05-11</date>
|
| 24 |
+
<time>17:09:33</time>
|
| 25 |
+
<contents><target name="magecommunity"><dir name="OlegKoval"><dir name="CustomersIntoSugarCrm"><dir name="Helper"><file name="Data.php" hash="6d49c57ec023005d5590f39221c04891"/></dir><dir name="Model"><file name="Observer.php" hash="a16c2847b5886dc73e10a5ff5eb8db14"/><file name="Sugarcrm.php" hash="ee93e4183e491bf6ac58d3ca5e7b2c76"/></dir><dir name="etc"><file name="config.xml" hash="79b898093973ab4d5acc1380bcf07075"/><file name="system.xml" hash="2ed29bd461b6245a939be086ccbcb457"/></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="OlegKoval_CustomersIntoSugarCrm.xml" hash="3a070329709b0ff6c3c83db148753980"/></dir></target><target name="magelocale"><dir name="en_US"><file name="OlegKoval_CustomersIntoSugarCrm.csv" hash="53fa303aebc72e1efed88857c475e6a1"/></dir></target></contents>
|
| 26 |
+
<compatible/>
|
| 27 |
+
<dependencies/>
|
| 28 |
+
</package>
|
