dotmailermagento - Version 5.3.0

Version Notes

Magento code audit changes x3
Support for dotmailer regions
Bug fixed for fatal error on manual sync
Email validation on ajax call
Escape logs before showing

Download this release

Release Info

Developer Calin Diacon
Extension dotmailermagento
Version 5.3.0
Comparing to
See all releases


Code changes from version 5.2.0 to 5.3.0

Files changed (36) hide show
  1. app/code/community/Dotdigitalgroup/Email/Block/Adminhtml/Contact/Grid.php +2 -5
  2. app/code/community/Dotdigitalgroup/Email/Block/Adminhtml/Dashboard/Tabs/Analysis/Rfm.php +15 -0
  3. app/code/community/Dotdigitalgroup/Email/Block/Adminhtml/Dashboard/Tabs/Status.php +32 -0
  4. app/code/community/Dotdigitalgroup/Email/Block/Basket.php +38 -1
  5. app/code/community/Dotdigitalgroup/Email/Block/Coupon.php +22 -0
  6. app/code/community/Dotdigitalgroup/Email/Block/Order.php +39 -0
  7. app/code/community/Dotdigitalgroup/Email/Helper/Config.php +4 -0
  8. app/code/community/Dotdigitalgroup/Email/Helper/Data.php +26 -4
  9. app/code/community/Dotdigitalgroup/Email/Model/Adminhtml/Observer.php +16 -2
  10. app/code/community/Dotdigitalgroup/Email/Model/Adminhtml/Source/Automation/Programme.php +11 -10
  11. app/code/community/Dotdigitalgroup/Email/Model/Adminhtml/Source/Importer/Mode.php +4 -1
  12. app/code/community/Dotdigitalgroup/Email/Model/Apiconnector/Client.php +97 -61
  13. app/code/community/Dotdigitalgroup/Email/Model/Connector/Order.php +1 -1
  14. app/code/community/Dotdigitalgroup/Email/Model/Contact.php +0 -14
  15. app/code/community/Dotdigitalgroup/Email/Model/Customer/Observer.php +11 -25
  16. app/code/community/Dotdigitalgroup/Email/Model/Importer.php +57 -1
  17. app/code/community/Dotdigitalgroup/Email/Model/Newsletter/Observer.php +21 -35
  18. app/code/community/Dotdigitalgroup/Email/Model/Resource/Contact.php +2 -2
  19. app/code/community/Dotdigitalgroup/Email/Model/Review.php +1 -1
  20. app/code/community/Dotdigitalgroup/Email/Model/Sales/Observer.php +11 -12
  21. app/code/community/Dotdigitalgroup/Email/Model/Sales/Quote.php +7 -7
  22. app/code/community/Dotdigitalgroup/Email/Model/Wishlist.php +3 -4
  23. app/code/community/Dotdigitalgroup/Email/controllers/Adminhtml/ConnectorController.php +1 -1
  24. app/code/community/Dotdigitalgroup/Email/controllers/AjaxController.php +9 -0
  25. app/code/community/Dotdigitalgroup/Email/controllers/ResponseController.php +5 -4
  26. app/code/community/Dotdigitalgroup/Email/etc/system.xml +3 -2
  27. app/design/adminhtml/default/default/template/connector/dashboard/logs.phtml +1 -1
  28. app/design/adminhtml/default/default/template/connector/dashboard/status.phtml +5 -12
  29. app/design/adminhtml/default/default/template/connector/dashboard/tabs/analysis/rfm.phtml +1 -5
  30. app/design/frontend/base/default/layout/connector.xml +7 -14
  31. app/design/frontend/base/default/template/connector/basket.phtml +27 -34
  32. app/design/frontend/base/default/template/connector/coupon.phtml +6 -6
  33. app/design/frontend/base/default/template/connector/product/list.phtml +43 -32
  34. app/design/frontend/base/default/template/connector/review.phtml +73 -73
  35. app/design/frontend/base/default/template/connector/wishlist.phtml +69 -62
  36. package.xml +10 -22
app/code/community/Dotdigitalgroup/Email/Block/Adminhtml/Contact/Grid.php CHANGED
@@ -6,8 +6,8 @@ class Dotdigitalgroup_Email_Block_Adminhtml_Contact_Grid extends Mage_Adminhtml_
6
  {
7
  parent::__construct();
8
  $this->setId('email_contact_id');
9
- $this->setDefaultSort('entity_id');
10
- $this->setDefaultDir('ASC');
11
  $this->setSaveParametersInSession(true);
12
  $this->setUseAjax(true);
13
  }
@@ -16,8 +16,6 @@ class Dotdigitalgroup_Email_Block_Adminhtml_Contact_Grid extends Mage_Adminhtml_
16
  {
17
  $collection = Mage::getModel('ddg_automation/contact')->getCollection();
18
  $this->setCollection($collection);
19
- $this->setDefaultSort('updated_at');
20
- $this->setDefaultDir('DESC');
21
  return parent::_prepareCollection();
22
  }
23
 
@@ -39,7 +37,6 @@ class Dotdigitalgroup_Email_Block_Adminhtml_Contact_Grid extends Mage_Adminhtml_
39
  ))->addColumn('customer_id', array(
40
  'header' => Mage::helper('ddg')->__('Customer ID'),
41
  'align' => 'left',
42
- 'width' => '20px',
43
  'index' => 'customer_id',
44
  'type' => 'number',
45
  'escape' => true
6
  {
7
  parent::__construct();
8
  $this->setId('email_contact_id');
9
+ $this->setDefaultSort('email_contact_id');
10
+ $this->setDefaultDir('DESC');
11
  $this->setSaveParametersInSession(true);
12
  $this->setUseAjax(true);
13
  }
16
  {
17
  $collection = Mage::getModel('ddg_automation/contact')->getCollection();
18
  $this->setCollection($collection);
 
 
19
  return parent::_prepareCollection();
20
  }
21
 
37
  ))->addColumn('customer_id', array(
38
  'header' => Mage::helper('ddg')->__('Customer ID'),
39
  'align' => 'left',
 
40
  'index' => 'customer_id',
41
  'type' => 'number',
42
  'escape' => true
app/code/community/Dotdigitalgroup/Email/Block/Adminhtml/Dashboard/Tabs/Analysis/Rfm.php CHANGED
@@ -7,6 +7,7 @@ class Dotdigitalgroup_Email_Block_Adminhtml_Dashboard_Tabs_Analysis_Rfm extends
7
  protected $_group = 0;
8
  protected $_website = 0;
9
 
 
10
  /**
11
  * set template
12
  *
@@ -52,6 +53,20 @@ class Dotdigitalgroup_Email_Block_Adminhtml_Dashboard_Tabs_Analysis_Rfm extends
52
  return $this->rfm;
53
  }
54
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
55
  /**
56
  * get currency
57
  *
7
  protected $_group = 0;
8
  protected $_website = 0;
9
 
10
+
11
  /**
12
  * set template
13
  *
53
  return $this->rfm;
54
  }
55
 
56
+ /**
57
+ * @return array
58
+ */
59
+ protected function getLabels() {
60
+
61
+ $labels = array(
62
+ Dotdigitalgroup_Email_Model_Adminhtml_Dashboard_Tabs_Analysis_Rfm::FREQUENCY => "Frequency (orders)",
63
+ Dotdigitalgroup_Email_Model_Adminhtml_Dashboard_Tabs_Analysis_Rfm::RECENCY => "Recency (days)",
64
+ Dotdigitalgroup_Email_Model_Adminhtml_Dashboard_Tabs_Analysis_Rfm::MONETARY => "Monetary (value)"
65
+ );
66
+
67
+ return $labels;
68
+ }
69
+
70
  /**
71
  * get currency
72
  *
app/code/community/Dotdigitalgroup/Email/Block/Adminhtml/Dashboard/Tabs/Status.php CHANGED
@@ -94,6 +94,35 @@ class Dotdigitalgroup_Email_Block_Adminhtml_Dashboard_Tabs_Status extends Mage_A
94
  return $this->_checkpoints;
95
  }
96
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
97
 
98
  public function addCheckpoint($checkpoint)
99
  {
@@ -1703,4 +1732,7 @@ class Dotdigitalgroup_Email_Block_Adminhtml_Dashboard_Tabs_Status extends Mage_A
1703
  }
1704
  return $resultContent;
1705
  }
 
 
 
1706
  }
94
  return $this->_checkpoints;
95
  }
96
 
97
+ protected function getDisplayData() {
98
+
99
+ $displayData = array();
100
+ foreach ( $this->getCheckpoints() as $key => $checkpoint ) {
101
+
102
+ $method = $this->getFormatedMethodName( $key );
103
+
104
+ if ( is_callable( array( $this, $method ) ) ) {
105
+ $data = $this->$method();
106
+ $showHowTo = '';
107
+ $collapsable = '1';
108
+
109
+ if ( $data->getStyle() == 'connector_passed' ) {
110
+ $showHowTo = 'no_display';
111
+ $collapsable = '0';
112
+ }
113
+ if ( $this->_getCollapseState( $key ) !== false ) {
114
+ $collapsable = $this->_getCollapseState( $key );
115
+ }
116
+ $displayData[$key] = array(
117
+ 'showHowTo' => $showHowTo,
118
+ 'collapsable' => $collapsable,
119
+ 'data' => $data
120
+ );
121
+ }
122
+ }
123
+ return $displayData;
124
+ }
125
+
126
 
127
  public function addCheckpoint($checkpoint)
128
  {
1732
  }
1733
  return $resultContent;
1734
  }
1735
+
1736
+
1737
+
1738
  }
app/code/community/Dotdigitalgroup/Email/Block/Basket.php CHANGED
@@ -40,7 +40,32 @@ class Dotdigitalgroup_Email_Block_Basket extends Mage_Core_Block_Template
40
  $appEmulation = Mage::getSingleton('core/app_emulation');
41
  $appEmulation->startEnvironmentEmulation($storeId);
42
 
43
- return $quoteModel->getAllItems();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44
  }
45
 
46
  /**
@@ -84,4 +109,16 @@ class Dotdigitalgroup_Email_Block_Basket extends Mage_Core_Block_Template
84
  Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_CONTENT_LINK_TEXT
85
  );
86
  }
 
 
 
 
 
 
 
 
 
 
 
 
87
  }
40
  $appEmulation = Mage::getSingleton('core/app_emulation');
41
  $appEmulation->startEnvironmentEmulation($storeId);
42
 
43
+ $quoteItems = $quoteModel->getAllItems();
44
+ $itemsData = array();
45
+
46
+ foreach ( $quoteItems as $quoteItem ) {
47
+ if ($quoteItem->getParentItemId() != null)
48
+ continue;
49
+ $_product = Mage::getModel('catalog/product')->load($quoteItem->getProductId());
50
+
51
+ $inStock = ($_product->getStockItem()->getIsInStock())? 'In Stock' : 'Out of stock';
52
+ $total = Mage::helper('core')->currency($quoteItem->getBaseRowTotalInclTax());
53
+ $productUrl = $_product->getProductUrl();
54
+ $grandTotal = Mage::helper('core')->currency($this->getGrandTotal());
55
+ $itemsData[] = array(
56
+ 'grandTotal' => $grandTotal,
57
+ 'total' => $total,
58
+ 'inStock' => $inStock,
59
+ 'productUrl' => $productUrl,
60
+ 'product' => $_product,
61
+ 'qty' => $quoteItem->getQty()
62
+
63
+ );
64
+ }
65
+
66
+
67
+
68
+ return $itemsData;
69
  }
70
 
71
  /**
109
  Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_CONTENT_LINK_TEXT
110
  );
111
  }
112
+
113
+
114
+ /**
115
+ * Get dynamic style configuration.
116
+ * @return array
117
+ */
118
+ protected function getDynamicStyle() {
119
+
120
+ $dynamicStyle = Mage::helper('ddg')->getDynamicStyles();
121
+ return $dynamicStyle;
122
+ }
123
+
124
  }
app/code/community/Dotdigitalgroup/Email/Block/Coupon.php CHANGED
@@ -50,4 +50,26 @@ class Dotdigitalgroup_Email_Block_Coupon extends Mage_Core_Block_Template
50
  return false;
51
  }
52
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53
  }
50
  return false;
51
  }
52
 
53
+
54
+ protected function getStyle() {
55
+ return explode(',', Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_COUPON_STYLE));
56
+ }
57
+
58
+ protected function getCouponColor() {
59
+ return Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_COUPON_COLOR);
60
+ }
61
+
62
+ protected function getFontSize() {
63
+ return Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_COUPON_FONT_SIZE);
64
+ }
65
+
66
+ protected function getFont()
67
+ {
68
+ return Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_COUPON_FONT);
69
+ }
70
+
71
+ protected function getBackgroundColor()
72
+ {
73
+ return Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_COUPON_BG_COLOR);
74
+ }
75
  }
app/code/community/Dotdigitalgroup/Email/Block/Order.php CHANGED
@@ -33,4 +33,43 @@ class Dotdigitalgroup_Email_Block_Order extends Dotdigitalgroup_Email_Block_Edc
33
  return $order;
34
  }
35
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
36
  }
33
  return $order;
34
  }
35
 
36
+ /**
37
+ * Dysplay mode.
38
+ * @return string
39
+ */
40
+ public function getMode()
41
+ {
42
+ $website = Mage::app()->getStore($this->getOrder()->getStoreId())->getWebsite();
43
+ $mode = Mage::helper('ddg')->getReviewDisplayType($website);
44
+
45
+ return $mode;
46
+ }
47
+
48
+ /**
49
+ * Order website.
50
+ * @return Mage_Core_Model_Website
51
+ */
52
+ public function getWebsite()
53
+ {
54
+ return Mage::app()->getStore($this->getOrder()->getStoreId())->getWebsite();
55
+ }
56
+ /**
57
+ * Product items to display.
58
+ * @return Mage_Catalog_Model_Resource_Product_Collection
59
+ */
60
+ public function getItems()
61
+ {
62
+ $order = $this->getOrder();
63
+ $items = $order->getAllVisibleItems();
64
+ $productIds = array();
65
+ //get the product ids for the collection
66
+ foreach ( $items as $item ) {
67
+ $productIds[] = $item->getProductId();
68
+ }
69
+ $items = Mage::getModel('catalog/product')->getCollection()
70
+ ->addAttributeToSelect('*')
71
+ ->addFieldToFilter('entity_id', array('in' => $productIds));
72
+
73
+ return $items;
74
+ }
75
  }
app/code/community/Dotdigitalgroup/Email/Helper/Config.php CHANGED
@@ -264,6 +264,10 @@ class Dotdigitalgroup_Email_Helper_Config
264
 
265
  const RAYGUN_API_CODE_URL = 'https://dotmailerformagento.co.uk/magento/raygun.xml';
266
 
 
 
 
 
267
 
268
  /**
269
  * @param int $website
264
 
265
  const RAYGUN_API_CODE_URL = 'https://dotmailerformagento.co.uk/magento/raygun.xml';
266
 
267
+ /**
268
+ * API endpoint
269
+ */
270
+ const PATH_FOR_API_ENDPOINT = 'connector/api/endpoint';
271
 
272
  /**
273
  * @param int $website
app/code/community/Dotdigitalgroup/Email/Helper/Data.php CHANGED
@@ -879,20 +879,21 @@ class Dotdigitalgroup_Email_Helper_Data extends Mage_Core_Helper_Abstract
879
  //string to array
880
  $ipArray = explode(',', $ipString);
881
  //remove white spaces
882
- foreach($ipArray as $key => $ip){
883
  $ipArray[$key] = preg_replace('/\s+/', '', $ip);
884
  }
885
  //ip address
886
  $ipAddress = Mage::helper('core/http')->getRemoteAddr();
887
 
888
- if(in_array($ipAddress, $ipArray)) {
889
  return true;
890
  }
891
 
892
- $this->getRaygunClient()->Send('Ip address auth failed with ip address :' . $ipAddress);
893
  return false;
 
 
 
894
  }
895
- return false;
896
  }
897
 
898
  /**
@@ -970,4 +971,25 @@ class Dotdigitalgroup_Email_Helper_Data extends Mage_Core_Helper_Abstract
970
  return $this->getWebsiteConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_AUTOMATION_REVIEW_ANCHOR, $website);
971
  }
972
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
973
  }
879
  //string to array
880
  $ipArray = explode(',', $ipString);
881
  //remove white spaces
882
+ foreach ($ipArray as $key => $ip) {
883
  $ipArray[$key] = preg_replace('/\s+/', '', $ip);
884
  }
885
  //ip address
886
  $ipAddress = Mage::helper('core/http')->getRemoteAddr();
887
 
888
+ if (in_array($ipAddress, $ipArray)) {
889
  return true;
890
  }
891
 
 
892
  return false;
893
+ } else {
894
+ //empty ip list will ignore the validation
895
+ return true;
896
  }
 
897
  }
898
 
899
  /**
971
  return $this->getWebsiteConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_AUTOMATION_REVIEW_ANCHOR, $website);
972
  }
973
 
974
+
975
+ public function getDynamicStyles()
976
+ {
977
+ return $dynamicStyle = array(
978
+ 'nameStyle' => explode(',', Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_NAME_STYLE)),
979
+ 'priceStyle' => explode(',', Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_PRICE_STYLE)),
980
+ 'linkStyle' => explode(',', Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_LINK_STYLE)),
981
+ 'otherStyle' => explode(',', Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_OTHER_STYLE)),
982
+ 'nameColor' => Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_NAME_COLOR),
983
+ 'fontSize' => Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_NAME_FONT_SIZE),
984
+ 'priceColor' => Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_PRICE_COLOR),
985
+ 'priceFontSize' => Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_PRICE_FONT_SIZE),
986
+ 'urlColor' => Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_LINK_COLOR),
987
+ 'urlFontSize' => Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_LINK_FONT_SIZE),
988
+ 'otherColor' => Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_OTHER_COLOR),
989
+ 'otherFontSize' => Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_OTHER_FONT_SIZE),
990
+ 'docFont' => Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_DOC_FONT),
991
+ 'docBackgroundColor' => Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_DOC_BG_COLOR),
992
+ 'dynamicStyling' => Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_STYLING)
993
+ );
994
+ }
995
  }
app/code/community/Dotdigitalgroup/Email/Model/Adminhtml/Observer.php CHANGED
@@ -98,6 +98,7 @@ class Dotdigitalgroup_Email_Model_Adminhtml_Observer
98
  Mage::helper('ddg')->log('----VALIDATING ACCOUNT---');
99
  $testModel = Mage::getModel('ddg_automation/apiconnector_test');
100
  $isValid = $testModel->validate($apiUsername, $apiPassword);
 
101
  if (! $isValid) {
102
  /**
103
  * Disable invalid Api credentials
@@ -109,10 +110,23 @@ class Dotdigitalgroup_Email_Model_Adminhtml_Observer
109
  } else {
110
  $scope = "default";
111
  }
112
- $config = Mage::getConfig();
113
  $config->saveConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_API_ENABLED, 0, $scope, $scopeId);
114
- $config->cleanCache();
115
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
116
  Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('ddg')->__('API Credentials Valid.'));
117
  }
118
  return $this;
98
  Mage::helper('ddg')->log('----VALIDATING ACCOUNT---');
99
  $testModel = Mage::getModel('ddg_automation/apiconnector_test');
100
  $isValid = $testModel->validate($apiUsername, $apiPassword);
101
+ $config = Mage::getConfig();
102
  if (! $isValid) {
103
  /**
104
  * Disable invalid Api credentials
110
  } else {
111
  $scope = "default";
112
  }
 
113
  $config->saveConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_API_ENABLED, 0, $scope, $scopeId);
 
114
  }
115
+
116
+ //check if returned value is an object
117
+ if(is_object($isValid)){
118
+ //save endpoint for account
119
+ foreach($isValid->properties as $property){
120
+ if($property->name == 'ApiEndpoint' && strlen($property->value)){
121
+ $config->saveConfig(
122
+ Dotdigitalgroup_Email_Helper_Config::PATH_FOR_API_ENDPOINT,
123
+ $property->value
124
+ );
125
+ break;
126
+ }
127
+ }
128
+ }
129
+ $config->cleanCache();
130
  Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('ddg')->__('API Credentials Valid.'));
131
  }
132
  return $this;
app/code/community/Dotdigitalgroup/Email/Model/Adminhtml/Source/Automation/Programme.php CHANGED
@@ -3,25 +3,26 @@
3
  class Dotdigitalgroup_Email_Model_Adminhtml_Source_Automation_Programme
4
  {
5
 
 
 
 
 
6
  public function toOptionArray()
7
  {
8
  $fields = array();
9
- $websiteName = Mage::app()->getRequest()->getParam('website', false);
10
 
11
- $website = Mage::app()->getRequest()->getParam('website', false);
12
- if ($website)
13
- $website = Mage::app()->getWebsite($website);
14
- else
15
- $website = 0;
16
 
17
  $fields[] = array('value' => '0', 'label' => Mage::helper('ddg')->__('-- Disabled --'));
18
- if ($websiteName) {
19
- $website = Mage::app()->getWebsite($websiteName);
20
- }
21
 
22
  if (Mage::helper('ddg')->isEnabled($website)) {
23
 
24
- $client = Mage::helper( 'ddg' )->getWebsiteApiClient( $website );
25
  $programmes = $client->getPrograms();
26
  if ($programmes) {
27
  foreach ( $programmes as $one ) {
3
  class Dotdigitalgroup_Email_Model_Adminhtml_Source_Automation_Programme
4
  {
5
 
6
+ /**
7
+ * @return array
8
+ * @throws Mage_Core_Exception
9
+ */
10
  public function toOptionArray()
11
  {
12
  $fields = array();
13
+ $websiteCode = Mage::app()->getRequest()->getParam('website', false);
14
 
15
+ //website code param
16
+ if (! $websiteCode)
17
+ $websiteCode = 0;//use admin
18
+
19
+ $website = Mage::app()->getWebsite($websiteCode);
20
 
21
  $fields[] = array('value' => '0', 'label' => Mage::helper('ddg')->__('-- Disabled --'));
 
 
 
22
 
23
  if (Mage::helper('ddg')->isEnabled($website)) {
24
 
25
+ $client = Mage::helper('ddg')->getWebsiteApiClient( $website );
26
  $programmes = $client->getPrograms();
27
  if ($programmes) {
28
  foreach ( $programmes as $one ) {
app/code/community/Dotdigitalgroup/Email/Model/Adminhtml/Source/Importer/Mode.php CHANGED
@@ -13,7 +13,10 @@ class Dotdigitalgroup_Email_Model_Adminhtml_Source_Importer_Mode
13
  Dotdigitalgroup_Email_Model_Importer::MODE_BULK => Mage::helper('ddg')->__(Dotdigitalgroup_Email_Model_Importer::MODE_BULK),
14
  Dotdigitalgroup_Email_Model_Importer::MODE_SINGLE => Mage::helper('ddg')->__(Dotdigitalgroup_Email_Model_Importer::MODE_SINGLE),
15
  Dotdigitalgroup_Email_Model_Importer::MODE_SINGLE_DELETE => Mage::helper('ddg')->__(Dotdigitalgroup_Email_Model_Importer::MODE_SINGLE_DELETE),
16
- Dotdigitalgroup_Email_Model_Importer::MODE_CONTACT_DELETE => Mage::helper('ddg')->__(Dotdigitalgroup_Email_Model_Importer::MODE_CONTACT_DELETE)
 
 
 
17
  );
18
  }
19
  }
13
  Dotdigitalgroup_Email_Model_Importer::MODE_BULK => Mage::helper('ddg')->__(Dotdigitalgroup_Email_Model_Importer::MODE_BULK),
14
  Dotdigitalgroup_Email_Model_Importer::MODE_SINGLE => Mage::helper('ddg')->__(Dotdigitalgroup_Email_Model_Importer::MODE_SINGLE),
15
  Dotdigitalgroup_Email_Model_Importer::MODE_SINGLE_DELETE => Mage::helper('ddg')->__(Dotdigitalgroup_Email_Model_Importer::MODE_SINGLE_DELETE),
16
+ Dotdigitalgroup_Email_Model_Importer::MODE_CONTACT_DELETE => Mage::helper('ddg')->__(Dotdigitalgroup_Email_Model_Importer::MODE_CONTACT_DELETE),
17
+ Dotdigitalgroup_Email_Model_Importer::MODE_SUBSCRIBER_UPDATE => Mage::helper('ddg')->__(Dotdigitalgroup_Email_Model_Importer::MODE_SUBSCRIBER_UPDATE),
18
+ Dotdigitalgroup_Email_Model_Importer::MODE_SUBSCRIBER_RESUBSCRIBED => Mage::helper('ddg')->__(Dotdigitalgroup_Email_Model_Importer::MODE_SUBSCRIBER_RESUBSCRIBED),
19
+ Dotdigitalgroup_Email_Model_Importer::MODE_CONTACT_EMAIL_UPDATE => Mage::helper('ddg')->__(Dotdigitalgroup_Email_Model_Importer::MODE_CONTACT_EMAIL_UPDATE)
20
  );
21
  }
22
  }
app/code/community/Dotdigitalgroup/Email/Model/Apiconnector/Client.php CHANGED
@@ -6,23 +6,23 @@ class Dotdigitalgroup_Email_Model_Apiconnector_Client extends Dotdigitalgroup_Em
6
 
7
  const REST_WAIT_UPLOAD_TIME = 5;
8
  //rest api data
9
- const REST_ACCOUNT_INFO = 'https://apiconnector.com/v2/account-info';
10
- const REST_CONTACTS = 'https://apiconnector.com/v2/contacts/';
11
- const REST_CONTACTS_IMPORT = 'https://apiconnector.com/v2/contacts/import/';
12
- const REST_ADDRESS_BOOKS = 'https://apiconnector.com/v2/address-books/';
13
- const REST_DATA_FILEDS = 'https://apiconnector.com/v2/data-fields';
14
- const REST_TRANSACTIONAL_DATA_IMPORT = 'https://apiconnector.com/v2/contacts/transactional-data/import/';
15
- const REST_TRANSACTIONAL_DATA = 'https://apiconnector.com/v2/contacts/transactional-data/';
16
- const REST_CAMPAIGN_SEND = 'https://apiconnector.com/v2/campaigns/send';
17
- const REST_CONTACTS_SUPPRESSED_SINCE = 'https://apiconnector.com/v2/contacts/suppressed-since/';
18
- const REST_DATA_FIELDS_CAMPAIGNS = 'https://apiconnector.com/v2/campaigns';
19
- const REST_SMS_MESSAGE_SEND_TO = 'https://apiconnector.com/v2/sms-messages/send-to/';
20
- const REST_CONTACTS_RESUBSCRIBE = 'https://apiconnector.com/v2/contacts/resubscribe';
21
- const REST_CAMPAIGN_FROM_ADDRESS_LIST = 'https://apiconnector.com/v2/custom-from-addresses';
22
- const REST_CREATE_CAMPAIGN = 'https://apiconnector.com/v2/campaigns';
23
- const REST_PROGRAM = 'https://apiconnector.com/v2/programs/';
24
- const REST_PROGRAM_ENROLMENTS = 'https://apiconnector.com/v2/programs/enrolments';
25
- const REST_TEMPLATES = 'https://apiconnector.com/v2/templates';
26
 
27
  //rest error responces
28
  const API_ERROR_API_EXCEEDED = 'Your account has generated excess API activity and is being temporarily capped. Please contact support. ERROR_APIUSAGE_EXCEEDED';
@@ -53,6 +53,7 @@ class Dotdigitalgroup_Email_Model_Apiconnector_Client extends Dotdigitalgroup_Em
53
  protected $_customers_file_slug = 'customer_sync';
54
  protected $_subscribers_file_slug = 'subscriber_sync';
55
  public $result = array('error' => false, 'message' => '');
 
56
 
57
 
58
  /**
@@ -60,9 +61,44 @@ class Dotdigitalgroup_Email_Model_Apiconnector_Client extends Dotdigitalgroup_Em
60
  */
61
  public function __construct()
62
  {
 
63
  parent::__construct();
64
  }
65
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
66
  /**
67
  * Excluded api response that we don't want to send.
68
  * @var array
@@ -108,7 +144,7 @@ class Dotdigitalgroup_Email_Model_Apiconnector_Client extends Dotdigitalgroup_Em
108
  */
109
  public function getContactById($id)
110
  {
111
- $url = self::REST_CONTACTS . $id;
112
  $this->setUrl($url)
113
  ->setVerb('GET');
114
  $response = $this->execute();
@@ -132,7 +168,7 @@ class Dotdigitalgroup_Email_Model_Apiconnector_Client extends Dotdigitalgroup_Em
132
 
133
  public function postAddressBookContactsImport($filename, $addressBookId)
134
  {
135
- $url = "https://apiconnector.com/v2/address-books/{$addressBookId}/contacts/import";
136
  $helper = Mage::helper('ddg');
137
 
138
  $ch = curl_init($url);
@@ -186,7 +222,7 @@ class Dotdigitalgroup_Email_Model_Apiconnector_Client extends Dotdigitalgroup_Em
186
  */
187
  public function postAddressBookContacts($addressBookId, $apiContact)
188
  {
189
- $url = self::REST_ADDRESS_BOOKS . $addressBookId . '/contacts';
190
  $this->setUrl($url)
191
  ->setVerb("POST")
192
  ->buildPostBody($apiContact);
@@ -212,7 +248,7 @@ class Dotdigitalgroup_Email_Model_Apiconnector_Client extends Dotdigitalgroup_Em
212
  public function deleteAddressBookContact($addressBookId, $contactId)
213
  {
214
 
215
- $url = self::REST_ADDRESS_BOOKS . $addressBookId . '/contacts/' . $contactId;
216
  $this->setUrl($url)
217
  ->setVerb('DELETE');
218
 
@@ -226,7 +262,7 @@ class Dotdigitalgroup_Email_Model_Apiconnector_Client extends Dotdigitalgroup_Em
226
  */
227
  public function getContactsImportReport($importId)
228
  {
229
- $url = self::REST_CONTACTS_IMPORT . $importId . "/report";
230
  $this->setUrl($url)
231
  ->setVerb('GET');
232
  $response = $this->execute();
@@ -246,7 +282,7 @@ class Dotdigitalgroup_Email_Model_Apiconnector_Client extends Dotdigitalgroup_Em
246
  */
247
  public function getContactByEmail($email)
248
  {
249
- $url = self::REST_CONTACTS . $email;
250
  $this->setUrl($url)
251
  ->setVerb('GET');
252
 
@@ -268,7 +304,7 @@ class Dotdigitalgroup_Email_Model_Apiconnector_Client extends Dotdigitalgroup_Em
268
  */
269
  public function getAddressBooks()
270
  {
271
- $url = self::REST_ADDRESS_BOOKS;
272
  $this->setUrl($url)
273
  ->setVerb("GET");
274
 
@@ -292,7 +328,7 @@ class Dotdigitalgroup_Email_Model_Apiconnector_Client extends Dotdigitalgroup_Em
292
  */
293
  public function getAddressBookById($id)
294
  {
295
- $url = self::REST_ADDRESS_BOOKS . $id;
296
 
297
  $this->setUrl($url)
298
  ->setVerb('GET');
@@ -317,7 +353,7 @@ class Dotdigitalgroup_Email_Model_Apiconnector_Client extends Dotdigitalgroup_Em
317
  'Name' => $name,
318
  'Visibility' => $visibility
319
  );
320
- $url = self::REST_ADDRESS_BOOKS;
321
  $this->setUrl($url)
322
  ->setVerb('POST')
323
  ->buildPostBody($data);
@@ -339,7 +375,7 @@ class Dotdigitalgroup_Email_Model_Apiconnector_Client extends Dotdigitalgroup_Em
339
  */
340
  public function getCampaigns()
341
  {
342
- $url = self::REST_DATA_FIELDS_CAMPAIGNS;
343
  $this->setUrl($url)
344
  ->setVerb('GET');
345
 
@@ -364,7 +400,7 @@ class Dotdigitalgroup_Email_Model_Apiconnector_Client extends Dotdigitalgroup_Em
364
  */
365
  public function postDataFields($data, $type = 'String', $visibility = 'public', $defaultValue = false)
366
  {
367
- $url = self::REST_DATA_FILEDS;
368
  //set default value for the numeric datatype
369
  if($type == 'numeric' && !$defaultValue)
370
  $defaultValue = 0;
@@ -403,7 +439,7 @@ class Dotdigitalgroup_Email_Model_Apiconnector_Client extends Dotdigitalgroup_Em
403
  */
404
  public function deleteDataField($name)
405
  {
406
- $url = self::REST_DATA_FILEDS . '/' . $name;
407
  $this->setUrl($url)
408
  ->setVerb('DELETE');
409
 
@@ -424,7 +460,7 @@ class Dotdigitalgroup_Email_Model_Apiconnector_Client extends Dotdigitalgroup_Em
424
  */
425
  public function getDataFields()
426
  {
427
- $url = self::REST_DATA_FILEDS;
428
  $this->setUrl($url)
429
  ->setVerb('GET');
430
 
@@ -447,7 +483,7 @@ class Dotdigitalgroup_Email_Model_Apiconnector_Client extends Dotdigitalgroup_Em
447
  */
448
  public function updateContact($contactId, $data)
449
  {
450
- $url = self::REST_CONTACTS . $contactId;
451
  $this->setUrl($url)
452
  ->setVerb('PUT')
453
  ->buildPostBody($data);
@@ -471,7 +507,7 @@ class Dotdigitalgroup_Email_Model_Apiconnector_Client extends Dotdigitalgroup_Em
471
  */
472
  public function deleteContact($contactId)
473
  {
474
- $url = self::REST_CONTACTS . $contactId;
475
  $this->setUrl($url)
476
  ->setVerb('DELETE');
477
 
@@ -507,7 +543,7 @@ class Dotdigitalgroup_Email_Model_Apiconnector_Client extends Dotdigitalgroup_Em
507
  'Email' => $email,
508
  'EmailType' => 'Html');
509
  $data['DataFields'] = $dataFields;
510
- $url = self::REST_CONTACTS . $contactId;
511
  $this->setUrl($url)
512
  ->setVerb('PUT')
513
  ->buildPostBody($data);
@@ -539,7 +575,7 @@ class Dotdigitalgroup_Email_Model_Apiconnector_Client extends Dotdigitalgroup_Em
539
  "campaignId" => $campaignId,
540
  "ContactIds" => $contacts
541
  );
542
- $this->setUrl(self::REST_CAMPAIGN_SEND)
543
  ->setVerb('POST')
544
  ->buildPostBody($data);
545
 
@@ -569,7 +605,7 @@ class Dotdigitalgroup_Email_Model_Apiconnector_Client extends Dotdigitalgroup_Em
569
  return $object->message = 'Not valid email :' . $email;
570
  }
571
 
572
- $url = self::REST_CONTACTS;
573
  $data = array(
574
  'Email' => $email,
575
  'EmailType' => 'Html',
@@ -599,7 +635,7 @@ class Dotdigitalgroup_Email_Model_Apiconnector_Client extends Dotdigitalgroup_Em
599
  */
600
  public function getContactsSuppressedSinceDate($dateString, $select = 1000, $skip = 0)
601
  {
602
- $url = self::REST_CONTACTS_SUPPRESSED_SINCE . $dateString . '?select=' . $select . '&skip=' . $skip;
603
  $this->setUrl($url)
604
  ->setVerb("GET");
605
 
@@ -632,7 +668,7 @@ class Dotdigitalgroup_Email_Model_Apiconnector_Client extends Dotdigitalgroup_Em
632
  );
633
  }
634
  }
635
- $url = self::REST_TRANSACTIONAL_DATA_IMPORT . $collectionName;
636
  $this->setURl($url)
637
  ->setVerb('POST')
638
  ->buildPostBody($orders);
@@ -661,9 +697,9 @@ class Dotdigitalgroup_Email_Model_Apiconnector_Client extends Dotdigitalgroup_Em
661
  {
662
  $order = $this->getContactsTransactionalDataByKey($collectionName, $data->id);
663
  if(isset($order->message) && $order->message == self::API_ERROR_TRANS_NOT_EXISTS){
664
- $url = self::REST_TRANSACTIONAL_DATA . $collectionName;
665
  }else{
666
- $url = self::REST_TRANSACTIONAL_DATA . $collectionName . '/' . $order->key ;
667
  }
668
  $apiData = array(
669
  'Key' => $data->id,
@@ -694,7 +730,7 @@ class Dotdigitalgroup_Email_Model_Apiconnector_Client extends Dotdigitalgroup_Em
694
  */
695
  public function getContactsTransactionalDataByKey($name, $key)
696
  {
697
- $url = self::REST_TRANSACTIONAL_DATA . $name . '/' . $key;
698
  $this->setUrl($url)
699
  ->setVerb('GET');
700
 
@@ -709,7 +745,7 @@ class Dotdigitalgroup_Email_Model_Apiconnector_Client extends Dotdigitalgroup_Em
709
  */
710
  public function deleteContactTransactionalData($email, $collectionName = 'Orders')
711
  {
712
- $url = 'https://apiconnector.com/v2/contacts/' . $email . '/transactional-data/' . $collectionName ;
713
  $this->setUrl($url)
714
  ->setVerb('DELETE');
715
 
@@ -746,7 +782,7 @@ class Dotdigitalgroup_Email_Model_Apiconnector_Client extends Dotdigitalgroup_Em
746
  public function postSmsMessagesSendTo($telephoneNumber, $message)
747
  {
748
  $data = array('Message' => $message);
749
- $url = self::REST_SMS_MESSAGE_SEND_TO . $telephoneNumber;
750
  $this->setUrl($url)
751
  ->setVerb('POST')
752
  ->buildPostBody($data);
@@ -771,7 +807,7 @@ class Dotdigitalgroup_Email_Model_Apiconnector_Client extends Dotdigitalgroup_Em
771
  */
772
  public function deleteAddressBookContactsInbulk($addressBookId, $contactIds)
773
  {
774
- $url = 'https://apiconnector.com/v2/address-books/' . $addressBookId . '/contacts/inbulk';
775
  $data = array('ContactIds' => array($contactIds[0]));
776
  $this->setUrl($url)
777
  ->setVerb('DELETE')
@@ -798,7 +834,7 @@ class Dotdigitalgroup_Email_Model_Apiconnector_Client extends Dotdigitalgroup_Em
798
  */
799
  public function postContactsResubscribe($apiContact)
800
  {
801
- $url = self::REST_CONTACTS_RESUBSCRIBE;
802
  $data = array(
803
  'UnsubscribedContact' => $apiContact
804
  );
@@ -826,7 +862,7 @@ class Dotdigitalgroup_Email_Model_Apiconnector_Client extends Dotdigitalgroup_Em
826
 
827
  public function getCustomFromAddresses()
828
  {
829
- $url = self::REST_CAMPAIGN_FROM_ADDRESS_LIST;
830
  $this->setUrl($url)
831
  ->setVerb('GET');
832
 
@@ -851,7 +887,7 @@ class Dotdigitalgroup_Email_Model_Apiconnector_Client extends Dotdigitalgroup_Em
851
  */
852
  public function postCampaign($data)
853
  {
854
- $url = self::REST_CREATE_CAMPAIGN;
855
  $this->setURl($url)
856
  ->setVerb('POST')
857
  ->buildPostBody($data);
@@ -873,7 +909,7 @@ class Dotdigitalgroup_Email_Model_Apiconnector_Client extends Dotdigitalgroup_Em
873
  */
874
  public function getPrograms()
875
  {
876
- $url = self::REST_PROGRAM;
877
 
878
  $this->setUrl($url)
879
  ->setVerb('GET');
@@ -898,7 +934,7 @@ class Dotdigitalgroup_Email_Model_Apiconnector_Client extends Dotdigitalgroup_Em
898
  */
899
  public function postProgramsEnrolments($data)
900
  {
901
- $url = self::REST_PROGRAM_ENROLMENTS;
902
  $this->setUrl($url)
903
  ->setVerb('POST')
904
  ->buildPostBody($data);
@@ -924,7 +960,7 @@ class Dotdigitalgroup_Email_Model_Apiconnector_Client extends Dotdigitalgroup_Em
924
  */
925
  public function getProgramById( $id )
926
  {
927
- $url = self::REST_PROGRAM . $id;
928
  $this->setUrl($url)
929
  ->setVerb('GET');
930
 
@@ -948,7 +984,7 @@ class Dotdigitalgroup_Email_Model_Apiconnector_Client extends Dotdigitalgroup_Em
948
  */
949
  public function getCampaignSummary($campaignId)
950
  {
951
- $url = 'https://apiconnector.com/v2/campaigns/' . $campaignId . '/summary';
952
 
953
  $this->setUrl($url)
954
  ->setVerb('GET');
@@ -971,7 +1007,7 @@ class Dotdigitalgroup_Email_Model_Apiconnector_Client extends Dotdigitalgroup_Em
971
  */
972
  public function deleteContactsTransactionalData($key, $collectionName = 'Orders')
973
  {
974
- $url = 'https://apiconnector.com/v2/contacts/transactional-data/' . $collectionName .'/' . $key ;
975
  $this->setUrl($url)
976
  ->setVerb('DELETE');
977
  $response = $this->execute();
@@ -992,7 +1028,7 @@ class Dotdigitalgroup_Email_Model_Apiconnector_Client extends Dotdigitalgroup_Em
992
  */
993
  public function postCampaignAttachments($campaignId, $data)
994
  {
995
- $url = self::REST_CREATE_CAMPAIGN . "/$campaignId/attachments";
996
  $this->setURl($url)
997
  ->setVerb('POST')
998
  ->buildPostBody($data);
@@ -1042,7 +1078,7 @@ class Dotdigitalgroup_Email_Model_Apiconnector_Client extends Dotdigitalgroup_Em
1042
  */
1043
  public function getContactAddressBooks($contactId)
1044
  {
1045
- $url = 'https://apiconnector.com/v2/contacts/' . $contactId . '/address-books' ;
1046
  $this->setUrl($url)
1047
  ->setVerb('GET');
1048
  $response = $this->execute();
@@ -1064,7 +1100,7 @@ class Dotdigitalgroup_Email_Model_Apiconnector_Client extends Dotdigitalgroup_Em
1064
  */
1065
  public function getApiTemplateList()
1066
  {
1067
- $url = self::REST_TEMPLATES;
1068
  $this->setUrl($url)
1069
  ->setVerb('GET');
1070
 
@@ -1089,7 +1125,7 @@ class Dotdigitalgroup_Email_Model_Apiconnector_Client extends Dotdigitalgroup_Em
1089
  */
1090
  public function getApiTemplate($templateId)
1091
  {
1092
- $url = self::REST_TEMPLATES . '/' . $templateId;
1093
  $this->setUrl($url)
1094
  ->setVerb('GET');
1095
 
@@ -1122,7 +1158,7 @@ class Dotdigitalgroup_Email_Model_Apiconnector_Client extends Dotdigitalgroup_Em
1122
  );
1123
  }
1124
  }
1125
- $url = self::REST_TRANSACTIONAL_DATA_IMPORT . $collectionName;
1126
  $this->setURl($url)
1127
  ->setVerb('POST')
1128
  ->buildPostBody($orders);
@@ -1140,7 +1176,7 @@ class Dotdigitalgroup_Email_Model_Apiconnector_Client extends Dotdigitalgroup_Em
1140
 
1141
  public function getCampaignsWithActivitySinceDate($dateTime)
1142
  {
1143
- $url = self::REST_DATA_FIELDS_CAMPAIGNS . '/with-activity-since/' . $dateTime;
1144
 
1145
  $this->setUrl($url)
1146
  ->setVerb('GET');
@@ -1158,7 +1194,7 @@ class Dotdigitalgroup_Email_Model_Apiconnector_Client extends Dotdigitalgroup_Em
1158
 
1159
  public function getCampaignActivityByContactId($campaignId, $contactId)
1160
  {
1161
- $url = self::REST_DATA_FIELDS_CAMPAIGNS . '/' . $campaignId . '/activities/' . $contactId;
1162
 
1163
  $this->setUrl($url)
1164
  ->setVerb('GET');
@@ -1182,7 +1218,7 @@ class Dotdigitalgroup_Email_Model_Apiconnector_Client extends Dotdigitalgroup_Em
1182
  */
1183
  public function getContactsImportByImportId($importId)
1184
  {
1185
- $url = self::REST_CONTACTS_IMPORT . $importId;
1186
 
1187
  $this->setUrl($url)
1188
  ->setVerb('GET');
@@ -1206,7 +1242,7 @@ class Dotdigitalgroup_Email_Model_Apiconnector_Client extends Dotdigitalgroup_Em
1206
  */
1207
  public function getContactsTransactionalDataImportByImportId($importId)
1208
  {
1209
- $url = self::REST_TRANSACTIONAL_DATA_IMPORT . $importId;
1210
 
1211
  $this->setUrl($url)
1212
  ->setVerb('GET');
@@ -1231,7 +1267,7 @@ class Dotdigitalgroup_Email_Model_Apiconnector_Client extends Dotdigitalgroup_Em
1231
  */
1232
  public function getContactImportReportFaults($id)
1233
  {
1234
- $url = self::REST_CONTACTS_IMPORT . $id . '/report-faults';
1235
  $this->setUrl($url)
1236
  ->setVerb('GET');
1237
 
6
 
7
  const REST_WAIT_UPLOAD_TIME = 5;
8
  //rest api data
9
+ const REST_ACCOUNT_INFO = 'https://r1-api.dotmailer.com/v2/account-info';
10
+ const REST_CONTACTS = '/v2/contacts/';
11
+ const REST_CONTACTS_IMPORT = '/v2/contacts/import/';
12
+ const REST_ADDRESS_BOOKS = '/v2/address-books/';
13
+ const REST_DATA_FILEDS = '/v2/data-fields';
14
+ const REST_TRANSACTIONAL_DATA_IMPORT = '/v2/contacts/transactional-data/import/';
15
+ const REST_TRANSACTIONAL_DATA = '/v2/contacts/transactional-data/';
16
+ const REST_CAMPAIGN_SEND = '/v2/campaigns/send';
17
+ const REST_CONTACTS_SUPPRESSED_SINCE = '/v2/contacts/suppressed-since/';
18
+ const REST_DATA_FIELDS_CAMPAIGNS = '/v2/campaigns';
19
+ const REST_SMS_MESSAGE_SEND_TO = '/v2/sms-messages/send-to/';
20
+ const REST_CONTACTS_RESUBSCRIBE = '/v2/contacts/resubscribe';
21
+ const REST_CAMPAIGN_FROM_ADDRESS_LIST = '/v2/custom-from-addresses';
22
+ const REST_CREATE_CAMPAIGN = '/v2/campaigns';
23
+ const REST_PROGRAM = '/v2/programs/';
24
+ const REST_PROGRAM_ENROLMENTS = '/v2/programs/enrolments';
25
+ const REST_TEMPLATES = '/v2/templates';
26
 
27
  //rest error responces
28
  const API_ERROR_API_EXCEEDED = 'Your account has generated excess API activity and is being temporarily capped. Please contact support. ERROR_APIUSAGE_EXCEEDED';
53
  protected $_customers_file_slug = 'customer_sync';
54
  protected $_subscribers_file_slug = 'subscriber_sync';
55
  public $result = array('error' => false, 'message' => '');
56
+ protected $_apiEndpoint;
57
 
58
 
59
  /**
61
  */
62
  public function __construct()
63
  {
64
+ $this->_checkApiEndPoint();
65
  parent::__construct();
66
  }
67
 
68
+ protected function _checkApiEndPoint()
69
+ {
70
+ $apiEndpoint = Mage::helper('ddg')->getWebsiteConfig(Dotdigitalgroup_Email_Helper_Config::PATH_FOR_API_ENDPOINT);
71
+ if(!$apiEndpoint){
72
+ $helper = Mage::helper('ddg');
73
+ $this->setApiUsername($helper->getApiUsername())
74
+ ->setApiPassword($helper->getApiPassword());
75
+
76
+ $accountInfo = $this->getAccountInfo();
77
+ //check if returned value is an object
78
+ if(is_object($accountInfo) && !isset($accountInfo->message)){
79
+ //save endpoint for account
80
+ foreach($accountInfo->properties as $property){
81
+ if($property->name == 'ApiEndpoint' && strlen($property->value)){
82
+ $apiEndpoint = $property->value;
83
+ $config = Mage::getConfig();
84
+ $config->saveConfig(
85
+ Dotdigitalgroup_Email_Helper_Config::PATH_FOR_API_ENDPOINT,
86
+ $property->value
87
+ );
88
+ $config->cleanCache();
89
+ break;
90
+ }
91
+ }
92
+ }
93
+
94
+ //check api endpoint again
95
+ if(!$apiEndpoint)
96
+ throw new Exception('API endpoint cannot be empty. Re-save api credentials to retrieve API endpoint.');
97
+ }
98
+
99
+ $this->_apiEndpoint = $apiEndpoint;
100
+ }
101
+
102
  /**
103
  * Excluded api response that we don't want to send.
104
  * @var array
144
  */
145
  public function getContactById($id)
146
  {
147
+ $url = $this->_apiEndpoint . self::REST_CONTACTS . $id;
148
  $this->setUrl($url)
149
  ->setVerb('GET');
150
  $response = $this->execute();
168
 
169
  public function postAddressBookContactsImport($filename, $addressBookId)
170
  {
171
+ $url = $this->_apiEndpoint . "/v2/address-books/{$addressBookId}/contacts/import";
172
  $helper = Mage::helper('ddg');
173
 
174
  $ch = curl_init($url);
222
  */
223
  public function postAddressBookContacts($addressBookId, $apiContact)
224
  {
225
+ $url = $this->_apiEndpoint . self::REST_ADDRESS_BOOKS . $addressBookId . '/contacts';
226
  $this->setUrl($url)
227
  ->setVerb("POST")
228
  ->buildPostBody($apiContact);
248
  public function deleteAddressBookContact($addressBookId, $contactId)
249
  {
250
 
251
+ $url = $this->_apiEndpoint . self::REST_ADDRESS_BOOKS . $addressBookId . '/contacts/' . $contactId;
252
  $this->setUrl($url)
253
  ->setVerb('DELETE');
254
 
262
  */
263
  public function getContactsImportReport($importId)
264
  {
265
+ $url = $this->_apiEndpoint . self::REST_CONTACTS_IMPORT . $importId . "/report";
266
  $this->setUrl($url)
267
  ->setVerb('GET');
268
  $response = $this->execute();
282
  */
283
  public function getContactByEmail($email)
284
  {
285
+ $url = $this->_apiEndpoint . self::REST_CONTACTS . $email;
286
  $this->setUrl($url)
287
  ->setVerb('GET');
288
 
304
  */
305
  public function getAddressBooks()
306
  {
307
+ $url = $this->_apiEndpoint . self::REST_ADDRESS_BOOKS;
308
  $this->setUrl($url)
309
  ->setVerb("GET");
310
 
328
  */
329
  public function getAddressBookById($id)
330
  {
331
+ $url = $this->_apiEndpoint . self::REST_ADDRESS_BOOKS . $id;
332
 
333
  $this->setUrl($url)
334
  ->setVerb('GET');
353
  'Name' => $name,
354
  'Visibility' => $visibility
355
  );
356
+ $url = $this->_apiEndpoint . self::REST_ADDRESS_BOOKS;
357
  $this->setUrl($url)
358
  ->setVerb('POST')
359
  ->buildPostBody($data);
375
  */
376
  public function getCampaigns()
377
  {
378
+ $url = $this->_apiEndpoint . self::REST_DATA_FIELDS_CAMPAIGNS;
379
  $this->setUrl($url)
380
  ->setVerb('GET');
381
 
400
  */
401
  public function postDataFields($data, $type = 'String', $visibility = 'public', $defaultValue = false)
402
  {
403
+ $url = $this->_apiEndpoint . self::REST_DATA_FILEDS;
404
  //set default value for the numeric datatype
405
  if($type == 'numeric' && !$defaultValue)
406
  $defaultValue = 0;
439
  */
440
  public function deleteDataField($name)
441
  {
442
+ $url = $this->_apiEndpoint . self::REST_DATA_FILEDS . '/' . $name;
443
  $this->setUrl($url)
444
  ->setVerb('DELETE');
445
 
460
  */
461
  public function getDataFields()
462
  {
463
+ $url = $this->_apiEndpoint . self::REST_DATA_FILEDS;
464
  $this->setUrl($url)
465
  ->setVerb('GET');
466
 
483
  */
484
  public function updateContact($contactId, $data)
485
  {
486
+ $url = $this->_apiEndpoint . self::REST_CONTACTS . $contactId;
487
  $this->setUrl($url)
488
  ->setVerb('PUT')
489
  ->buildPostBody($data);
507
  */
508
  public function deleteContact($contactId)
509
  {
510
+ $url = $this->_apiEndpoint . self::REST_CONTACTS . $contactId;
511
  $this->setUrl($url)
512
  ->setVerb('DELETE');
513
 
543
  'Email' => $email,
544
  'EmailType' => 'Html');
545
  $data['DataFields'] = $dataFields;
546
+ $url = $this->_apiEndpoint . self::REST_CONTACTS . $contactId;
547
  $this->setUrl($url)
548
  ->setVerb('PUT')
549
  ->buildPostBody($data);
575
  "campaignId" => $campaignId,
576
  "ContactIds" => $contacts
577
  );
578
+ $this->setUrl($this->_apiEndpoint . self::REST_CAMPAIGN_SEND)
579
  ->setVerb('POST')
580
  ->buildPostBody($data);
581
 
605
  return $object->message = 'Not valid email :' . $email;
606
  }
607
 
608
+ $url = $this->_apiEndpoint . self::REST_CONTACTS;
609
  $data = array(
610
  'Email' => $email,
611
  'EmailType' => 'Html',
635
  */
636
  public function getContactsSuppressedSinceDate($dateString, $select = 1000, $skip = 0)
637
  {
638
+ $url = $this->_apiEndpoint . self::REST_CONTACTS_SUPPRESSED_SINCE . $dateString . '?select=' . $select . '&skip=' . $skip;
639
  $this->setUrl($url)
640
  ->setVerb("GET");
641
 
668
  );
669
  }
670
  }
671
+ $url = $this->_apiEndpoint . self::REST_TRANSACTIONAL_DATA_IMPORT . $collectionName;
672
  $this->setURl($url)
673
  ->setVerb('POST')
674
  ->buildPostBody($orders);
697
  {
698
  $order = $this->getContactsTransactionalDataByKey($collectionName, $data->id);
699
  if(isset($order->message) && $order->message == self::API_ERROR_TRANS_NOT_EXISTS){
700
+ $url = $this->_apiEndpoint . self::REST_TRANSACTIONAL_DATA . $collectionName;
701
  }else{
702
+ $url = $this->_apiEndpoint . self::REST_TRANSACTIONAL_DATA . $collectionName . '/' . $order->key ;
703
  }
704
  $apiData = array(
705
  'Key' => $data->id,
730
  */
731
  public function getContactsTransactionalDataByKey($name, $key)
732
  {
733
+ $url = $this->_apiEndpoint . self::REST_TRANSACTIONAL_DATA . $name . '/' . $key;
734
  $this->setUrl($url)
735
  ->setVerb('GET');
736
 
745
  */
746
  public function deleteContactTransactionalData($email, $collectionName = 'Orders')
747
  {
748
+ $url = $this->_apiEndpoint . '/v2/contacts/' . $email . '/transactional-data/' . $collectionName ;
749
  $this->setUrl($url)
750
  ->setVerb('DELETE');
751
 
782
  public function postSmsMessagesSendTo($telephoneNumber, $message)
783
  {
784
  $data = array('Message' => $message);
785
+ $url = $this->_apiEndpoint . self::REST_SMS_MESSAGE_SEND_TO . $telephoneNumber;
786
  $this->setUrl($url)
787
  ->setVerb('POST')
788
  ->buildPostBody($data);
807
  */
808
  public function deleteAddressBookContactsInbulk($addressBookId, $contactIds)
809
  {
810
+ $url = $this->_apiEndpoint . '/v2/address-books/' . $addressBookId . '/contacts/inbulk';
811
  $data = array('ContactIds' => array($contactIds[0]));
812
  $this->setUrl($url)
813
  ->setVerb('DELETE')
834
  */
835
  public function postContactsResubscribe($apiContact)
836
  {
837
+ $url = $this->_apiEndpoint . self::REST_CONTACTS_RESUBSCRIBE;
838
  $data = array(
839
  'UnsubscribedContact' => $apiContact
840
  );
862
 
863
  public function getCustomFromAddresses()
864
  {
865
+ $url = $this->_apiEndpoint . self::REST_CAMPAIGN_FROM_ADDRESS_LIST;
866
  $this->setUrl($url)
867
  ->setVerb('GET');
868
 
887
  */
888
  public function postCampaign($data)
889
  {
890
+ $url = $this->_apiEndpoint . self::REST_CREATE_CAMPAIGN;
891
  $this->setURl($url)
892
  ->setVerb('POST')
893
  ->buildPostBody($data);
909
  */
910
  public function getPrograms()
911
  {
912
+ $url = $this->_apiEndpoint . self::REST_PROGRAM;
913
 
914
  $this->setUrl($url)
915
  ->setVerb('GET');
934
  */
935
  public function postProgramsEnrolments($data)
936
  {
937
+ $url = $this->_apiEndpoint . self::REST_PROGRAM_ENROLMENTS;
938
  $this->setUrl($url)
939
  ->setVerb('POST')
940
  ->buildPostBody($data);
960
  */
961
  public function getProgramById( $id )
962
  {
963
+ $url = $this->_apiEndpoint . self::REST_PROGRAM . $id;
964
  $this->setUrl($url)
965
  ->setVerb('GET');
966
 
984
  */
985
  public function getCampaignSummary($campaignId)
986
  {
987
+ $url = $this->_apiEndpoint . '/v2/campaigns/' . $campaignId . '/summary';
988
 
989
  $this->setUrl($url)
990
  ->setVerb('GET');
1007
  */
1008
  public function deleteContactsTransactionalData($key, $collectionName = 'Orders')
1009
  {
1010
+ $url = $this->_apiEndpoint . '/v2/contacts/transactional-data/' . $collectionName .'/' . $key ;
1011
  $this->setUrl($url)
1012
  ->setVerb('DELETE');
1013
  $response = $this->execute();
1028
  */
1029
  public function postCampaignAttachments($campaignId, $data)
1030
  {
1031
+ $url = $this->_apiEndpoint . self::REST_CREATE_CAMPAIGN . "/$campaignId/attachments";
1032
  $this->setURl($url)
1033
  ->setVerb('POST')
1034
  ->buildPostBody($data);
1078
  */
1079
  public function getContactAddressBooks($contactId)
1080
  {
1081
+ $url = $this->_apiEndpoint . '/v2/contacts/' . $contactId . '/address-books' ;
1082
  $this->setUrl($url)
1083
  ->setVerb('GET');
1084
  $response = $this->execute();
1100
  */
1101
  public function getApiTemplateList()
1102
  {
1103
+ $url = $this->_apiEndpoint . self::REST_TEMPLATES;
1104
  $this->setUrl($url)
1105
  ->setVerb('GET');
1106
 
1125
  */
1126
  public function getApiTemplate($templateId)
1127
  {
1128
+ $url = $this->_apiEndpoint . self::REST_TEMPLATES . '/' . $templateId;
1129
  $this->setUrl($url)
1130
  ->setVerb('GET');
1131
 
1158
  );
1159
  }
1160
  }
1161
+ $url = $this->_apiEndpoint . self::REST_TRANSACTIONAL_DATA_IMPORT . $collectionName;
1162
  $this->setURl($url)
1163
  ->setVerb('POST')
1164
  ->buildPostBody($orders);
1176
 
1177
  public function getCampaignsWithActivitySinceDate($dateTime)
1178
  {
1179
+ $url = $this->_apiEndpoint . self::REST_DATA_FIELDS_CAMPAIGNS . '/with-activity-since/' . $dateTime;
1180
 
1181
  $this->setUrl($url)
1182
  ->setVerb('GET');
1194
 
1195
  public function getCampaignActivityByContactId($campaignId, $contactId)
1196
  {
1197
+ $url = $this->_apiEndpoint . self::REST_DATA_FIELDS_CAMPAIGNS . '/' . $campaignId . '/activities/' . $contactId;
1198
 
1199
  $this->setUrl($url)
1200
  ->setVerb('GET');
1218
  */
1219
  public function getContactsImportByImportId($importId)
1220
  {
1221
+ $url = $this->_apiEndpoint . self::REST_CONTACTS_IMPORT . $importId;
1222
 
1223
  $this->setUrl($url)
1224
  ->setVerb('GET');
1242
  */
1243
  public function getContactsTransactionalDataImportByImportId($importId)
1244
  {
1245
+ $url = $this->_apiEndpoint . self::REST_TRANSACTIONAL_DATA_IMPORT . $importId;
1246
 
1247
  $this->setUrl($url)
1248
  ->setVerb('GET');
1267
  */
1268
  public function getContactImportReportFaults($id)
1269
  {
1270
+ $url = $this->_apiEndpoint . self::REST_CONTACTS_IMPORT . $id . '/report-faults';
1271
  $this->setUrl($url)
1272
  ->setVerb('GET');
1273
 
app/code/community/Dotdigitalgroup/Email/Model/Connector/Order.php CHANGED
@@ -431,7 +431,7 @@ class Dotdigitalgroup_Email_Model_Connector_Order
431
  }
432
 
433
 
434
- if ($value) // check limit on text and assign value to array
435
  $attributes[][$attribute_code] = $this->_limitLength($value);
436
  }
437
  }
431
  }
432
 
433
 
434
+ if (is_string($value)) // check limit on text and assign value to array
435
  $attributes[][$attribute_code] = $this->_limitLength($value);
436
  }
437
  }
app/code/community/Dotdigitalgroup/Email/Model/Contact.php CHANGED
@@ -15,20 +15,6 @@ class Dotdigitalgroup_Email_Model_Contact extends Mage_Core_Model_Abstract
15
  $this->_init('ddg_automation/contact');
16
  }
17
 
18
-
19
- /**
20
- * @return $this|Mage_Core_Model_Abstract
21
- */
22
- protected function _beforeSave()
23
- {
24
- parent::_beforeSave();
25
- $now = Mage::getSingleton('core/date')->gmtDate();
26
- if ($this->isObjectNew()) {
27
- $this->setCreatedAt($now);
28
- }
29
- return $this;
30
- }
31
-
32
  /**
33
  * Load contact by customer id
34
  * @param $customerId
15
  $this->_init('ddg_automation/contact');
16
  }
17
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
18
  /**
19
  * Load contact by customer id
20
  * @param $customerId
app/code/community/Dotdigitalgroup/Email/Model/Customer/Observer.php CHANGED
@@ -32,31 +32,17 @@ class Dotdigitalgroup_Email_Model_Customer_Observer
32
  //email change detection
33
  if ($emailBefore && $email != $emailBefore) {
34
  Mage::helper('ddg')->log('email change detected : ' . $email . ', after : ' . $emailBefore . ', website id : ' . $websiteId);
35
- $enabled = Mage::helper('ddg')->getWebsiteConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_API_ENABLED, $websiteId);
36
-
37
- if ($enabled) {
38
- $client = Mage::helper('ddg')->getWebsiteApiClient($websiteId);
39
- $subscribersAddressBook = Mage::helper('ddg')->getWebsiteConfig(
40
- Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_SUBSCRIBERS_ADDRESS_BOOK_ID, $websiteId);
41
- $response = $client->postContacts($emailBefore);
42
- //check for matching email
43
- if (isset($response->id)) {
44
- if ($email != $response->email) {
45
- $data = array(
46
- 'Email' => $email,
47
- 'EmailType' => 'Html'
48
- );
49
- //update the contact with same id - different email
50
- $client->updateContact($response->id, $data);
51
-
52
- }
53
- if (!$isSubscribed && $response->status == 'Subscribed') {
54
- $client->deleteAddressBookContact($subscribersAddressBook, $response->id);
55
- }
56
- } elseif (isset($response->message)) {
57
- Mage::helper('ddg')->log('Email change error : ' . $response->message);
58
- }
59
- }
60
 
61
  } elseif (!$emailBefore) {
62
  //for new contacts update email
32
  //email change detection
33
  if ($emailBefore && $email != $emailBefore) {
34
  Mage::helper('ddg')->log('email change detected : ' . $email . ', after : ' . $emailBefore . ', website id : ' . $websiteId);
35
+ $data = array(
36
+ 'emailBefore' => $emailBefore,
37
+ 'email' => $email,
38
+ 'isSubscribed' => $isSubscribed
39
+ );
40
+ Mage::getModel('ddg_automation/importer')->registerQueue(
41
+ Dotdigitalgroup_Email_Model_Importer::IMPORT_TYPE_CONTACT_UPDATE,
42
+ $data,
43
+ Dotdigitalgroup_Email_Model_Importer::MODE_CONTACT_EMAIL_UPDATE,
44
+ $websiteId
45
+ );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46
 
47
  } elseif (!$emailBefore) {
48
  //for new contacts update email
app/code/community/Dotdigitalgroup/Email/Model/Importer.php CHANGED
@@ -13,6 +13,9 @@ class Dotdigitalgroup_Email_Model_Importer extends Mage_Core_Model_Abstract
13
  const MODE_SINGLE = 'Single';
14
  const MODE_SINGLE_DELETE = 'Single_Delete';
15
  const MODE_CONTACT_DELETE = 'Contact_Delete';
 
 
 
16
 
17
  //import type
18
  const IMPORT_TYPE_CONTACT = 'Contact';
@@ -23,6 +26,9 @@ class Dotdigitalgroup_Email_Model_Importer extends Mage_Core_Model_Abstract
23
  const IMPORT_TYPE_QUOTE = 'Quote';
24
  const IMPORT_TYPE_SUBSCRIBERS = 'Subscriber';
25
  const IMPORT_TYPE_GUEST = 'Guest';
 
 
 
26
 
27
  protected $_reasons = array(
28
  'Globally Suppressed',
@@ -260,6 +266,53 @@ class Dotdigitalgroup_Email_Model_Importer extends Mage_Core_Model_Abstract
260
  if (isset($result->message)) {
261
  $error = true;
262
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
263
  } else { //bulk import transactional data
264
  $result = $client->postContactsTransactionalDataImport($importData, $item->getImportType());
265
  if (isset($result->message) && !isset($result->id)) {
@@ -277,7 +330,10 @@ class Dotdigitalgroup_Email_Model_Importer extends Mage_Core_Model_Abstract
277
  if (!$error) {
278
  if ($item->getImportMode() == self::MODE_SINGLE_DELETE or
279
  $item->getImportMode() == self::MODE_SINGLE or
280
- $item->getImportMode() == self::MODE_CONTACT_DELETE
 
 
 
281
  ) {
282
  $item->setImportStatus(self::IMPORTED)
283
  ->setImportFinished($now)
13
  const MODE_SINGLE = 'Single';
14
  const MODE_SINGLE_DELETE = 'Single_Delete';
15
  const MODE_CONTACT_DELETE = 'Contact_Delete';
16
+ const MODE_CONTACT_EMAIL_UPDATE = 'Contact_Email_Update';
17
+ const MODE_SUBSCRIBER_UPDATE = 'Subscriber_Update';
18
+ const MODE_SUBSCRIBER_RESUBSCRIBED = 'Subscriber_Resubscribed';
19
 
20
  //import type
21
  const IMPORT_TYPE_CONTACT = 'Contact';
26
  const IMPORT_TYPE_QUOTE = 'Quote';
27
  const IMPORT_TYPE_SUBSCRIBERS = 'Subscriber';
28
  const IMPORT_TYPE_GUEST = 'Guest';
29
+ const IMPORT_TYPE_CONTACT_UPDATE = 'Contact';
30
+ const IMPORT_TYPE_SUBSCRIBER_UPDATE = 'Subscriber';
31
+ const IMPORT_TYPE_SUBSCRIBER_RESUBSCRIBED = 'Subscriber';
32
 
33
  protected $_reasons = array(
34
  'Globally Suppressed',
266
  if (isset($result->message)) {
267
  $error = true;
268
  }
269
+ } elseif ($item->getImportMode() == self::MODE_CONTACT_EMAIL_UPDATE){
270
+ $emailBefore = $importData['emailBefore'];
271
+ $email = $importData['email'];
272
+ $isSubscribed = $importData['isSubscribed'];
273
+ $subscribersAddressBook = Mage::helper('ddg')->getWebsiteConfig(
274
+ Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_SUBSCRIBERS_ADDRESS_BOOK_ID, $websiteId);
275
+ $result = $client->postContacts($emailBefore);
276
+ //check for matching email
277
+ if (isset($result->id)) {
278
+ if ($email != $result->email) {
279
+ $data = array(
280
+ 'Email' => $email,
281
+ 'EmailType' => 'Html'
282
+ );
283
+ //update the contact with same id - different email
284
+ $client->updateContact($result->id, $data);
285
+ }
286
+ if (!$isSubscribed && $result->status == 'Subscribed') {
287
+ $client->deleteAddressBookContact($subscribersAddressBook, $result->id);
288
+ }
289
+ } elseif (isset($result->message)) {
290
+ $error = true;
291
+ Mage::helper('ddg')->log('Email change error : ' . $result->message);
292
+ }
293
+ } elseif ($item->getImportMode() == self::MODE_SUBSCRIBER_UPDATE){
294
+ $email = $importData['email'];
295
+ $id = $importData['id'];
296
+ $contactEmail = Mage::getModel('ddg_automation/contact')->load($id);
297
+ $result = $client->postContacts( $email );
298
+ if ( isset( $result->id ) ) {
299
+ $contactId = $result->id;
300
+ $client->deleteAddressBookContact( $helper->getSubscriberAddressBook( $websiteId ), $contactId );
301
+ $contactEmail->setContactId($contactId)
302
+ ->save();
303
+ } else {
304
+ $contactEmail->setSuppressed( '1' )
305
+ ->save();
306
+ }
307
+ } elseif ($item->getImportMode() == self::MODE_SUBSCRIBER_RESUBSCRIBED){
308
+ $email = $importData['email'];
309
+ $apiContact = $client->postContacts( $email );
310
+
311
+ //resubscribe suppressed contacts
312
+ if (isset($apiContact->message) && $apiContact->message == Dotdigitalgroup_Email_Model_Apiconnector_Client::API_ERROR_CONTACT_SUPPRESSED) {
313
+ $apiContact = $client->getContactByEmail($email);
314
+ $client->postContactsResubscribe( $apiContact );
315
+ }
316
  } else { //bulk import transactional data
317
  $result = $client->postContactsTransactionalDataImport($importData, $item->getImportType());
318
  if (isset($result->message) && !isset($result->id)) {
330
  if (!$error) {
331
  if ($item->getImportMode() == self::MODE_SINGLE_DELETE or
332
  $item->getImportMode() == self::MODE_SINGLE or
333
+ $item->getImportMode() == self::MODE_CONTACT_DELETE or
334
+ $item->getImportMode() == self::MODE_CONTACT_EMAIL_UPDATE or
335
+ $item->getImportMode() == self::MODE_SUBSCRIBER_RESUBSCRIBED or
336
+ $item->getImportMode() == self::MODE_SUBSCRIBER_UPDATE
337
  ) {
338
  $item->setImportStatus(self::IMPORTED)
339
  ->setImportFinished($now)
app/code/community/Dotdigitalgroup/Email/Model/Newsletter/Observer.php CHANGED
@@ -29,20 +29,16 @@ class Dotdigitalgroup_Email_Model_Newsletter_Observer
29
 
30
  // only for subsribers
31
  if ($subscriberStatus == Mage_Newsletter_Model_Subscriber::STATUS_SUBSCRIBED) {
32
- $client = Mage::helper('ddg')->getWebsiteApiClient($websiteId);
33
- //check for website client
34
- if ($client) {
35
- //set contact as subscribed
36
- $contactEmail->setSubscriberStatus( $subscriberStatus )
37
- ->setIsSubscriber('1');
38
- $apiContact = $client->postContacts( $email );
39
-
40
- //resubscribe suppressed contacts
41
- if (isset($apiContact->message) && $apiContact->message == Dotdigitalgroup_Email_Model_Apiconnector_Client::API_ERROR_CONTACT_SUPPRESSED) {
42
- $apiContact = $client->getContactByEmail($email);
43
- $client->postContactsResubscribe( $apiContact );
44
- }
45
- }
46
  // reset the subscriber as suppressed
47
  $contactEmail->setSuppressed(null);
48
 
@@ -51,26 +47,17 @@ class Dotdigitalgroup_Email_Model_Newsletter_Observer
51
  //skip if contact is suppressed
52
  if ($contactEmail->getSuppressed())
53
  return $this;
 
54
  //update contact id for the subscriber
55
- $client = Mage::helper('ddg')->getWebsiteApiClient($websiteId);
56
- //check for website client
57
- if ($client) {
58
- $contactId = $contactEmail->getContactId();
59
- //get the contact id
60
- if ( !$contactId ) {
61
- //if contact id is not set get the contact_id
62
- $result = $client->postContacts( $email );
63
- if ( isset( $result->id ) ) {
64
- $contactId = $result->id;
65
- } else {
66
- //no contact id skip
67
- $contactEmail->setSuppressed( '1' )
68
- ->save();
69
- return $this;
70
- }
71
- }
72
- //remove contact from address book
73
- $client->deleteAddressBookContact( $helper->getSubscriberAddressBook( $websiteId ), $contactId );
74
  }
75
  $contactEmail->setIsSubscriber(null)
76
  ->setSubscriberStatus(Mage_Newsletter_Model_Subscriber::STATUS_UNSUBSCRIBED);
@@ -88,8 +75,7 @@ class Dotdigitalgroup_Email_Model_Newsletter_Observer
88
 
89
  //update the contact
90
  $contactEmail->setStoreId($storeId);
91
- if (isset($contactId))
92
- $contactEmail->setContactId($contactId);
93
  //update contact
94
  $contactEmail->save();
95
 
29
 
30
  // only for subsribers
31
  if ($subscriberStatus == Mage_Newsletter_Model_Subscriber::STATUS_SUBSCRIBED) {
32
+ //set contact as subscribed
33
+ $contactEmail->setSubscriberStatus( $subscriberStatus )
34
+ ->setIsSubscriber('1');
35
+
36
+ Mage::getModel('ddg_automation/importer')->registerQueue(
37
+ Dotdigitalgroup_Email_Model_Importer::IMPORT_TYPE_SUBSCRIBER_RESUBSCRIBED,
38
+ array('email' => $email),
39
+ Dotdigitalgroup_Email_Model_Importer::MODE_SUBSCRIBER_RESUBSCRIBED,
40
+ $websiteId
41
+ );
 
 
 
 
42
  // reset the subscriber as suppressed
43
  $contactEmail->setSuppressed(null);
44
 
47
  //skip if contact is suppressed
48
  if ($contactEmail->getSuppressed())
49
  return $this;
50
+
51
  //update contact id for the subscriber
52
+ $contactId = $contactEmail->getContactId();
53
+ //get the contact id
54
+ if ( !$contactId ) {
55
+ Mage::getModel('ddg_automation/importer')->registerQueue(
56
+ Dotdigitalgroup_Email_Model_Importer::IMPORT_TYPE_SUBSCRIBER_UPDATE,
57
+ array('email' => $email, 'id' => $contactEmail->getId()),
58
+ Dotdigitalgroup_Email_Model_Importer::MODE_SUBSCRIBER_UPDATE,
59
+ $websiteId
60
+ );
 
 
 
 
 
 
 
 
 
 
61
  }
62
  $contactEmail->setIsSubscriber(null)
63
  ->setSubscriberStatus(Mage_Newsletter_Model_Subscriber::STATUS_UNSUBSCRIBED);
75
 
76
  //update the contact
77
  $contactEmail->setStoreId($storeId);
78
+
 
79
  //update contact
80
  $contactEmail->save();
81
 
app/code/community/Dotdigitalgroup/Email/Model/Resource/Contact.php CHANGED
@@ -111,7 +111,7 @@ class Dotdigitalgroup_Email_Model_Resource_Contact extends Mage_Core_Model_Mysql
111
 
112
  $select
113
  ->from(
114
- array('customer' => $this->getReadConnection()->getTableName('customer/customer')),
115
  array('customer_id' => 'entity_id','email','website_id','store_id')
116
  )
117
  ->where("entity_id not in ($emailContacts)");
@@ -127,7 +127,7 @@ class Dotdigitalgroup_Email_Model_Resource_Contact extends Mage_Core_Model_Mysql
127
  array('c.customer_id')
128
  )
129
  ->joinLeft(
130
- array('e' => $this->getReadConnection()->getTableName('customer/customer')),
131
  "c.customer_id = e.entity_id"
132
  )
133
  ->where('e.entity_id is NULL');
111
 
112
  $select
113
  ->from(
114
+ array('customer' => $this->getReadConnection()->getTableName($this->getTable('customer/customer'))),
115
  array('customer_id' => 'entity_id','email','website_id','store_id')
116
  )
117
  ->where("entity_id not in ($emailContacts)");
127
  array('c.customer_id')
128
  )
129
  ->joinLeft(
130
+ array('e' => $this->getReadConnection()->getTableName($this->getTable('customer/customer'))),
131
  "c.customer_id = e.entity_id"
132
  )
133
  ->where('e.entity_id is NULL');
app/code/community/Dotdigitalgroup/Email/Model/Review.php CHANGED
@@ -94,7 +94,7 @@ class Dotdigitalgroup_Email_Model_Review extends Mage_Core_Model_Abstract
94
 
95
  $reviews->getSelect()
96
  ->joinLeft(
97
- array('c' => 'customer_entity'),
98
  'c.entity_id = customer_id',
99
  array('email','store_id')
100
  );
94
 
95
  $reviews->getSelect()
96
  ->joinLeft(
97
+ array('c' => Mage::getSingleton('core/resource')->getTableName('customer/entity')),
98
  'c.entity_id = customer_id',
99
  array('email','store_id')
100
  );
app/code/community/Dotdigitalgroup/Email/Model/Sales/Observer.php CHANGED
@@ -52,19 +52,19 @@ class Dotdigitalgroup_Email_Model_Sales_Observer
52
  $emailOrder->save();
53
  //Status check automation enrolment
54
  $configStatusAutomationMap = unserialize(Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_AUTOMATION_STUDIO_ORDER_STATUS, $order->getStore()));
55
- if(!empty($configStatusAutomationMap)){
56
- foreach($configStatusAutomationMap as $configMap){
57
  if($configMap['status'] == $status) {
58
  try {
59
  $programId = $configMap['automation'];
60
  $automation = Mage::getModel( 'ddg_automation/automation' );
61
  $automation->setEmail( $customerEmail )
62
- ->setAutomationType( 'order_automation_' . $status )
63
- ->setEnrolmentStatus( Dotdigitalgroup_Email_Model_Automation::AUTOMATION_STATUS_PENDING )
64
- ->setTypeId( $order->getId() )
65
- ->setWebsiteId( $websiteId )
66
- ->setStoreName( $storeName )
67
- ->setProgramId( $programId );
68
  $automation->save();
69
  }catch(Exception $e){
70
  Mage::logException($e);
@@ -100,11 +100,11 @@ class Dotdigitalgroup_Email_Model_Sales_Observer
100
  return $this;
101
 
102
  //automation enrolment for order
103
- if($order->getCustomerIsGuest()){
104
  // guest to automation mapped
105
  $programType = 'XML_PATH_CONNECTOR_AUTOMATION_STUDIO_GUEST_ORDER';
106
  $automationType = Dotdigitalgroup_Email_Model_Automation::AUTOMATION_TYPE_NEW_GUEST_ORDER;
107
- }else{
108
  // customer to automation mapped
109
  $programType = 'XML_PATH_CONNECTOR_AUTOMATION_STUDIO_ORDER';
110
  $automationType = Dotdigitalgroup_Email_Model_Automation::AUTOMATION_TYPE_NEW_ORDER;
@@ -113,8 +113,7 @@ class Dotdigitalgroup_Email_Model_Sales_Observer
113
  $programId = Mage::helper( 'ddg' )->getAutomationIdByType($programType, $order->getWebsiteId());
114
 
115
  //the program is not mappped
116
- if (! $programId){
117
-
118
  Mage::log('automation type : ' . $automationType. ' program id not found');
119
  return $this;
120
  }
52
  $emailOrder->save();
53
  //Status check automation enrolment
54
  $configStatusAutomationMap = unserialize(Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_AUTOMATION_STUDIO_ORDER_STATUS, $order->getStore()));
55
+ if (!empty($configStatusAutomationMap)) {
56
+ foreach ($configStatusAutomationMap as $configMap) {
57
  if($configMap['status'] == $status) {
58
  try {
59
  $programId = $configMap['automation'];
60
  $automation = Mage::getModel( 'ddg_automation/automation' );
61
  $automation->setEmail( $customerEmail )
62
+ ->setAutomationType( 'order_automation_' . $status )
63
+ ->setEnrolmentStatus( Dotdigitalgroup_Email_Model_Automation::AUTOMATION_STATUS_PENDING )
64
+ ->setTypeId( $order->getId() )
65
+ ->setWebsiteId( $websiteId )
66
+ ->setStoreName( $storeName )
67
+ ->setProgramId( $programId );
68
  $automation->save();
69
  }catch(Exception $e){
70
  Mage::logException($e);
100
  return $this;
101
 
102
  //automation enrolment for order
103
+ if ($order->getCustomerIsGuest()) {
104
  // guest to automation mapped
105
  $programType = 'XML_PATH_CONNECTOR_AUTOMATION_STUDIO_GUEST_ORDER';
106
  $automationType = Dotdigitalgroup_Email_Model_Automation::AUTOMATION_TYPE_NEW_GUEST_ORDER;
107
+ } else {
108
  // customer to automation mapped
109
  $programType = 'XML_PATH_CONNECTOR_AUTOMATION_STUDIO_ORDER';
110
  $automationType = Dotdigitalgroup_Email_Model_Automation::AUTOMATION_TYPE_NEW_ORDER;
113
  $programId = Mage::helper( 'ddg' )->getAutomationIdByType($programType, $order->getWebsiteId());
114
 
115
  //the program is not mappped
116
+ if (! $programId) {
 
117
  Mage::log('automation type : ' . $automationType. ' program id not found');
118
  return $this;
119
  }
app/code/community/Dotdigitalgroup/Email/Model/Sales/Quote.php CHANGED
@@ -72,11 +72,11 @@ class Dotdigitalgroup_Email_Model_Sales_Quote
72
  $from->sub('5', Zend_Date::MINUTE);
73
 
74
  //active quotes
75
- $quoteCollection = $this->_getStoreQuotes( $from->toString( 'YYYY-MM-dd HH:mm' ), $to->toString( 'YYYY-MM-dd HH:mm' ),
76
  $guest = false, $storeId );
77
  if ( $quoteCollection->getSize() ) {
78
- Mage::helper( 'ddg' )->log( 'Customer lost baskets : ' . $num . ', from : ' . $from->toString( 'YYYY-MM-dd HH:mm' ) .
79
- ':' . $to->toString( 'YYYY-MM-dd HH:mm' ) );
80
  }
81
 
82
  //campaign id for customers
@@ -137,10 +137,10 @@ class Dotdigitalgroup_Email_Model_Sales_Quote
137
  }
138
  $to = clone($from);
139
  $from->sub('5', Zend_Date::MINUTE);
140
- $quoteCollection = $this->_getStoreQuotes( $from->toString( 'YYYY-MM-dd HH:mm' ), $to->toString( 'YYYY-MM-dd HH:mm' ), $guest = true, $storeId );
141
 
142
  if ( $quoteCollection->getSize() ) {
143
- Mage::helper( 'ddg' )->log( 'Guest lost baskets : ' . $num . ', from : ' . $from->toString( 'YYYY-MM-dd HH:mm' ) . ':' . $to->toString( 'YYYY-MM-dd HH:mm' ) );
144
  }
145
  $guestCampaignId = $this->_getLostBasketGuestCampaignId( $num, $storeId );
146
  foreach ( $quoteCollection as $quote ) {
@@ -232,8 +232,8 @@ class Dotdigitalgroup_Email_Model_Sales_Quote
232
  * @param int $storeId
233
  * @return Mage_Eav_Model_Entity_Collection_Abstract
234
  */
235
- protected function _getStoreQuotes($from = null, $to = null, $guest = false, $storeId = 0)
236
- {
237
  $updated = array(
238
  'from' => $from,
239
  'to' => $to,
72
  $from->sub('5', Zend_Date::MINUTE);
73
 
74
  //active quotes
75
+ $quoteCollection = $this->_getStoreQuotes( $from->toString( 'yyyy-MM-dd HH:mm' ), $to->toString( 'yyyy-MM-dd HH:mm' ),
76
  $guest = false, $storeId );
77
  if ( $quoteCollection->getSize() ) {
78
+ Mage::helper( 'ddg' )->log( 'Customer lost baskets : ' . $num . ', from : ' . $from->toString( 'yyyy-MM-dd HH:mm' ) .
79
+ ':' . $to->toString( 'yyyy-MM-dd HH:mm' ) );
80
  }
81
 
82
  //campaign id for customers
137
  }
138
  $to = clone($from);
139
  $from->sub('5', Zend_Date::MINUTE);
140
+ $quoteCollection = $this->_getStoreQuotes( $from->toString( 'yyyy-MM-dd HH:mm' ), $to->toString( 'yyyy-MM-dd HH:mm' ), $guest = true, $storeId );
141
 
142
  if ( $quoteCollection->getSize() ) {
143
+ Mage::helper( 'ddg' )->log( 'Guest lost baskets : ' . $num . ', from : ' . $from->toString( 'yyyy-MM-dd HH:mm' ) . ':' . $to->toString( 'yyyy-MM-dd HH:mm' ) );
144
  }
145
  $guestCampaignId = $this->_getLostBasketGuestCampaignId( $num, $storeId );
146
  foreach ( $quoteCollection as $quote ) {
232
  * @param int $storeId
233
  * @return Mage_Eav_Model_Entity_Collection_Abstract
234
  */
235
+ protected function _getStoreQuotes($from = null, $to = null, $guest = false, $storeId = 0) {
236
+
237
  $updated = array(
238
  'from' => $from,
239
  'to' => $to,
app/code/community/Dotdigitalgroup/Email/Model/Wishlist.php CHANGED
@@ -153,15 +153,14 @@ class Dotdigitalgroup_Email_Model_Wishlist extends Mage_Core_Model_Abstract
153
  protected function _exportWishlistForWebsiteInSingle(Mage_Core_Model_Website $website)
154
  {
155
  $helper = Mage::helper('ddg');
156
- $client = $helper->getWebsiteApiClient($website);
157
  $limit = $helper->getWebsiteConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_TRANSACTIONAL_DATA_SYNC_LIMIT, $website);
158
  $collection = $this->_getModifiedWishlistToImport($website, $limit);
159
  $this->_wishlistIds = array();
160
- foreach($collection as $emailWishlist){
161
- $customer = Mage::getModel('customer/customer')->load($emailWishlist->getCustomerId());
162
  $wishlist = Mage::getModel('wishlist/wishlist')->load($emailWishlist->getWishlistId());
163
  /** @var $connectorWishlist */
164
- $connectorWishlist = Mage::getModel('ddg_automation/customer_wishlist', $customer);
165
  $connectorWishlist->setId($wishlist->getId());
166
  $wishListItemCollection = $wishlist->getItemCollection();
167
  if ($wishListItemCollection->getSize()) {
153
  protected function _exportWishlistForWebsiteInSingle(Mage_Core_Model_Website $website)
154
  {
155
  $helper = Mage::helper('ddg');
 
156
  $limit = $helper->getWebsiteConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_TRANSACTIONAL_DATA_SYNC_LIMIT, $website);
157
  $collection = $this->_getModifiedWishlistToImport($website, $limit);
158
  $this->_wishlistIds = array();
159
+
160
+ foreach ($collection as $emailWishlist) {
161
  $wishlist = Mage::getModel('wishlist/wishlist')->load($emailWishlist->getWishlistId());
162
  /** @var $connectorWishlist */
163
+ $connectorWishlist = Mage::getModel('ddg_automation/customer_wishlist');
164
  $connectorWishlist->setId($wishlist->getId());
165
  $wishListItemCollection = $wishlist->getItemCollection();
166
  if ($wishListItemCollection->getSize()) {
app/code/community/Dotdigitalgroup/Email/controllers/Adminhtml/ConnectorController.php CHANGED
@@ -284,7 +284,7 @@ class Dotdigitalgroup_Email_Adminhtml_ConnectorController extends Mage_Adminhtml
284
  public function runreviewsyncAction()
285
  {
286
 
287
- $result = Mage::getModel('ddg_automation/cron')->reviewSync();
288
  if ($result['message'])
289
  Mage::getSingleton('adminhtml/session')->addSuccess($result['message']);
290
 
284
  public function runreviewsyncAction()
285
  {
286
 
287
+ $result = Mage::getModel('ddg_automation/review')->sync();
288
  if ($result['message'])
289
  Mage::getSingleton('adminhtml/session')->addSuccess($result['message']);
290
 
app/code/community/Dotdigitalgroup/Email/controllers/AjaxController.php CHANGED
@@ -6,6 +6,15 @@ class Dotdigitalgroup_Email_AjaxController extends Mage_Core_Controller_Front_Ac
6
  {
7
  if($this->getRequest()->getParam('email') && Mage::getSingleton('checkout/session')->getQuote()){
8
  $email = $this->getRequest()->getParam('email');
 
 
 
 
 
 
 
 
 
9
  $quote = Mage::getSingleton('checkout/session')->getQuote();
10
  if($quote->hasItems()){
11
  try {
6
  {
7
  if($this->getRequest()->getParam('email') && Mage::getSingleton('checkout/session')->getQuote()){
8
  $email = $this->getRequest()->getParam('email');
9
+ $email = filter_var($email, FILTER_SANITIZE_EMAIL);
10
+
11
+ //regular expressions from http://regexlib.com.
12
+ // Match formats joe@aol.com | joe@wrox.co.uk | joe@domain.info
13
+ if(!preg_match('/^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/', $email)){
14
+ Mage::helper('ddg')->log('ajax emailCapture fail for given email. Failed by regex');
15
+ return null;
16
+ }
17
+
18
  $quote = Mage::getSingleton('checkout/session')->getQuote();
19
  if($quote->hasItems()){
20
  try {
app/code/community/Dotdigitalgroup/Email/controllers/ResponseController.php CHANGED
@@ -6,15 +6,16 @@ class Dotdigitalgroup_Email_ResponseController extends Mage_Core_Controller_Fron
6
  {
7
  //authenticate ip address
8
  $authIp = Mage::helper('ddg')->authIpAddress();
9
- if(!$authIp){
 
10
  $e = new Exception('You are not authorised to view content of this page.');
11
  Mage::logException($e);
12
  throw new Exception($e->getMessage());
13
  }
14
-
15
  //authenticate
16
  $auth = Mage::helper('ddg')->auth($this->getRequest()->getParam('code'));
17
- if (!$auth){
 
18
  $this->sendResponse();
19
  Mage::throwException(Mage::helper('ddg')->__('Authentication failed!'));
20
  }
@@ -23,7 +24,7 @@ class Dotdigitalgroup_Email_ResponseController extends Mage_Core_Controller_Fron
23
  protected function checkContentNotEmpty($output, $flag = true)
24
  {
25
  try{
26
- if(strlen($output) < 3 && $flag == false)
27
  $this->sendResponse();
28
  elseif($flag && !strpos($output, '<table'))
29
  $this->sendResponse();
6
  {
7
  //authenticate ip address
8
  $authIp = Mage::helper('ddg')->authIpAddress();
9
+
10
+ if (!$authIp) {
11
  $e = new Exception('You are not authorised to view content of this page.');
12
  Mage::logException($e);
13
  throw new Exception($e->getMessage());
14
  }
 
15
  //authenticate
16
  $auth = Mage::helper('ddg')->auth($this->getRequest()->getParam('code'));
17
+
18
+ if (!$auth) {
19
  $this->sendResponse();
20
  Mage::throwException(Mage::helper('ddg')->__('Authentication failed!'));
21
  }
24
  protected function checkContentNotEmpty($output, $flag = true)
25
  {
26
  try{
27
+ if (strlen($output) < 3 && $flag == false)
28
  $this->sendResponse();
29
  elseif($flag && !strpos($output, '<table'))
30
  $this->sendResponse();
app/code/community/Dotdigitalgroup/Email/etc/system.xml CHANGED
@@ -3306,13 +3306,14 @@
3306
  <show_in_store>0</show_in_store>
3307
  <fields>
3308
  <ip_addresses>
3309
- <label></label>
3310
  <frontend_type>textarea</frontend_type>
3311
  <sort_order>10</sort_order>
3312
  <show_in_default>1</show_in_default>
3313
  <show_in_website>1</show_in_website>
3314
  <show_in_store>0</show_in_store>
3315
- <comment>Enter ip addresses separated by comma (,)</comment>
 
3316
  </ip_addresses>
3317
  </fields>
3318
  </ip_restriction>
3306
  <show_in_store>0</show_in_store>
3307
  <fields>
3308
  <ip_addresses>
3309
+ <label>External dynamic content will be limited to these ip's.</label>
3310
  <frontend_type>textarea</frontend_type>
3311
  <sort_order>10</sort_order>
3312
  <show_in_default>1</show_in_default>
3313
  <show_in_website>1</show_in_website>
3314
  <show_in_store>0</show_in_store>
3315
+ <comment>Enter ip addresses separated by comma (,). Always keep these ip's 94.143.111.2, 94.143.111.3 to stay secure,
3316
+ empty list will ignore security check.</comment>
3317
  </ip_addresses>
3318
  </fields>
3319
  </ip_restriction>
app/design/adminhtml/default/default/template/connector/dashboard/logs.phtml CHANGED
@@ -5,7 +5,7 @@
5
  <div style="border: 4px solid #dfdfdf; overflow: scroll; height: 500px; padding: 5px;">
6
  <div id="log_data" style="width:100%;height:500px;overflow:auto;margin:0px;padding:3px;background:black;color:#2EC029;
7
  font:normal 11px Lucida Console, Courier New, serif;">
8
- <?php echo nl2br(Mage::helper('ddg')->getLogFileContent()); ?>
9
  </div>
10
  </div>
11
 
5
  <div style="border: 4px solid #dfdfdf; overflow: scroll; height: 500px; padding: 5px;">
6
  <div id="log_data" style="width:100%;height:500px;overflow:auto;margin:0px;padding:3px;background:black;color:#2EC029;
7
  font:normal 11px Lucida Console, Courier New, serif;">
8
+ <?php echo nl2br($this->escapeHtml(Mage::helper('ddg')->getLogFileContent())); ?>
9
  </div>
10
  </div>
11
 
app/design/adminhtml/default/default/template/connector/dashboard/status.phtml CHANGED
@@ -1,20 +1,13 @@
 
1
  <div class="content-header">
2
  <h3 class="icon-head head-newsletter-report"><?php echo $this->getTabTitle(); ?></h3>
3
  </div>
4
  <?php foreach ( $this->getCheckpoints() as $key => $checkpoint ) :?>
5
  <?php $method = $this->getFormatedMethodName($key);
6
-
7
- if (is_callable(array($this, $method))) {
8
- $data = $this->$method();
9
- $showHowTo = '';
10
- $collapsable = '1';
11
- if ( $data->getStyle() == 'connector_passed' ) {
12
- $showHowTo = 'no_display';
13
- $collapsable = '0';
14
- }
15
- if ($this->_getCollapseState($key) !== false)
16
- $collapsable = $this->_getCollapseState($key);
17
- }?>
18
 
19
  <div class="entry-edit connector-fieldset-entry">
20
  <div class="entry-edit-head collapseable ">
1
+ <?php $displayData = $this->getDisplayData();?>
2
  <div class="content-header">
3
  <h3 class="icon-head head-newsletter-report"><?php echo $this->getTabTitle(); ?></h3>
4
  </div>
5
  <?php foreach ( $this->getCheckpoints() as $key => $checkpoint ) :?>
6
  <?php $method = $this->getFormatedMethodName($key);
7
+ $data = $displayData[$key]['data'];
8
+ $showHowTo = $displayData[$key]['showHowTo'];
9
+ $collapsable = $displayData[$key]['collapsable'];
10
+ ?>
 
 
 
 
 
 
 
 
11
 
12
  <div class="entry-edit connector-fieldset-entry">
13
  <div class="entry-edit-head collapseable ">
app/design/adminhtml/default/default/template/connector/dashboard/tabs/analysis/rfm.phtml CHANGED
@@ -1,9 +1,5 @@
1
  <?php
2
- $label = array(
3
- Dotdigitalgroup_Email_Model_Adminhtml_Dashboard_Tabs_Analysis_Rfm::FREQUENCY => "Frequency (orders)",
4
- Dotdigitalgroup_Email_Model_Adminhtml_Dashboard_Tabs_Analysis_Rfm::RECENCY => "Recency (days)",
5
- Dotdigitalgroup_Email_Model_Adminhtml_Dashboard_Tabs_Analysis_Rfm::MONETARY => "Monetary (value)"
6
- );
7
  ?>
8
  <div style="border: 1px solid #eee2be; padding: 5px;">
9
  <h4 style="text-align: center">
1
  <?php
2
+ $label = $this->getLabels();
 
 
 
 
3
  ?>
4
  <div style="border: 1px solid #eee2be; padding: 5px;">
5
  <h4 style="text-align: center">
app/design/frontend/base/default/layout/connector.xml CHANGED
@@ -2,36 +2,29 @@
2
  <layout version="0.1.0">
3
  <default>
4
  <reference name="head">
5
- <block type="core/template" name="checkout.tag" as="connector.tag"
6
- template="connector/tracking_code.phtml"/>
7
- <block type="core/template" name="easy.email.capture.head" as="easy.email.capture.head"
8
- template="connector/email_capture.phtml"/>
9
- <block type="core/template" name="easy.email.capture" as="easy.email.capture"
10
- template="connector/email_capture_init.phtml"/>
11
  </reference>
12
  </default>
13
  <ddg_automation_feefo_score>
14
  <reference name="content">
15
- <block type="ddg_automation/feefo" name="connector_feefo_service_score"
16
- template="connector/feefo/score.phtml"/>
17
  </reference>
18
  </ddg_automation_feefo_score>
19
  <ddg_automation_feefo_reviews>
20
  <reference name="content">
21
- <block type="ddg_automation/feefo" name="connector_feefo_product_reviews"
22
- template="connector/feefo/reviews.phtml"/>
23
  </reference>
24
  </ddg_automation_feefo_reviews>
25
  <ddg_automation_products_related>
26
  <reference name="content">
27
- <block type="ddg_automation/recommended_products" name="connector_recommended_related"
28
- template="connector/product/list.phtml"/>
29
  </reference>
30
  </ddg_automation_products_related>
31
  <ddg_automation_products_crosssell>
32
  <reference name="content">
33
- <block type="ddg_automation/recommended_products" name="connector_recommended_crosssell"
34
- template="connector/product/list.phtml"/>
35
  </reference>
36
  </ddg_automation_products_crosssell>
37
  <ddg_automation_products_upsell>
2
  <layout version="0.1.0">
3
  <default>
4
  <reference name="head">
5
+ <block type="core/template" name="checkout.tag" as="connector.tag" template="connector/tracking_code.phtml"/>
6
+ <block type="core/template" name="easy.email.capture.head" as="easy.email.capture.head" template="connector/email_capture.phtml"/>
7
+ <block type="core/template" name="easy.email.capture" as="easy.email.capture" template="connector/email_capture_init.phtml"/>
 
 
 
8
  </reference>
9
  </default>
10
  <ddg_automation_feefo_score>
11
  <reference name="content">
12
+ <block type="ddg_automation/feefo" name="connector_feefo_service_score" template="connector/feefo/score.phtml"/>
 
13
  </reference>
14
  </ddg_automation_feefo_score>
15
  <ddg_automation_feefo_reviews>
16
  <reference name="content">
17
+ <block type="ddg_automation/feefo" name="connector_feefo_product_reviews" template="connector/feefo/reviews.phtml"/>
 
18
  </reference>
19
  </ddg_automation_feefo_reviews>
20
  <ddg_automation_products_related>
21
  <reference name="content">
22
+ <block type="ddg_automation/recommended_products" name="connector_recommended_related" template="connector/product/list.phtml"/>
 
23
  </reference>
24
  </ddg_automation_products_related>
25
  <ddg_automation_products_crosssell>
26
  <reference name="content">
27
+ <block type="ddg_automation/recommended_products" name="connector_recommended_crosssell" template="connector/product/list.phtml"/>
 
28
  </reference>
29
  </ddg_automation_products_crosssell>
30
  <ddg_automation_products_upsell>
app/design/frontend/base/default/template/connector/basket.phtml CHANGED
@@ -3,76 +3,69 @@ $items = $this->getBasketItems();
3
  $helper = Mage::helper('core');
4
  ?>
5
  <?php if($items): ?>
6
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
7
- <html xmlns="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/html">
8
- <head>
9
-
10
- <title>Basket</title>
11
-
12
- </head>
13
  <body">
14
  <?php
15
- $nameStyle = explode(',', Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_NAME_STYLE));
16
- $priceStyle = explode(',', Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_PRICE_STYLE));
17
- $linkStyle = explode(',', Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_LINK_STYLE));
18
- $otherStyle = explode(',', Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_OTHER_STYLE));
19
  ?>
20
  <style>
21
  .product-name{
22
- color: <?php echo Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_NAME_COLOR);?>;
23
- font-size: <?php echo Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_NAME_FONT_SIZE);?>;
24
- <?php if(in_array('bold', $nameStyle)): ?>
25
  font-weight: bold;
26
  <?php endif; ?>
27
- <?php if(in_array('italic', $nameStyle)): ?>
28
  font-style: italic;
29
  <?php endif; ?>
30
- <?php if(in_array('underline', $nameStyle)): ?>
31
  text-decoration: underline;
32
  <?php endif; ?>
33
  }
34
  .product-price{
35
- color: <?php echo Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_PRICE_COLOR);?>;
36
- font-size: <?php echo Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_PRICE_FONT_SIZE);?>;
37
- <?php if(in_array('bold', $priceStyle)): ?>
38
  font-weight: bold;
39
  <?php endif; ?>
40
- <?php if(in_array('italic', $priceStyle)): ?>
41
  font-style: italic;
42
  <?php endif; ?>
43
- <?php if(in_array('underline', $priceStyle)): ?>
44
  text-decoration: underline;
45
  <?php endif; ?>
46
  }
47
  .proudct-url{
48
- color: <?php echo Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_LINK_COLOR);?>;
49
- font-size: <?php echo Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_LINK_FONT_SIZE);?>;
50
- <?php if(in_array('bold', $linkStyle)): ?>
51
  font-weight: bold;
52
  <?php endif; ?>
53
- <?php if(in_array('italic', $linkStyle)): ?>
54
  font-style: italic;
55
  <?php endif; ?>
56
- <?php if(in_array('underline', $linkStyle)): ?>
57
  text-decoration: underline;
58
  <?php endif; ?>
59
  }
60
  .other-text{
61
- color: <?php echo Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_OTHER_COLOR);?>;
62
- font-size: <?php echo Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_OTHER_FONT_SIZE);?>;
63
- <?php if(in_array('bold', $otherStyle)): ?>
64
  font-weight: bold;
65
  <?php endif; ?>
66
- <?php if(in_array('italic', $otherStyle)): ?>
67
  font-style: italic;
68
  <?php endif; ?>
69
- <?php if(in_array('underline', $otherStyle)): ?>
70
  text-decoration: underline;
71
  <?php endif; ?>
72
  }
73
  .product-table{
74
- font-family: <?php echo Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_DOC_FONT);?>;
75
- background-color: <?php echo Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_DOC_BG_COLOR);?>;
76
  width: 100% !important;
77
  }
78
  .product-table img{
@@ -84,7 +77,7 @@ $helper = Mage::helper('core');
84
  width: 25%;
85
  padding-bottom: 10px;
86
  }
87
- <?php echo Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_STYLING);?>
88
  /** Responsive **/
89
  @media (max-width: 760px) {
90
  /* Force table to not be like tables anymore */
3
  $helper = Mage::helper('core');
4
  ?>
5
  <?php if($items): ?>
6
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
7
+ <html xmlns="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/html">
8
+ <head><title>Basket</title></head>
 
 
 
 
9
  <body">
10
  <?php
11
+ $dynamicStyle = $this->getDynamicStyle();
 
 
 
12
  ?>
13
  <style>
14
  .product-name{
15
+ color: <?php echo $dynamicStyle['nameColor'];?>;
16
+ font-size: <?php echo $dynamicStyle['fontSize'];?>;
17
+ <?php if(in_array('bold', $dynamicStyle['nameStyle'])): ?>
18
  font-weight: bold;
19
  <?php endif; ?>
20
+ <?php if(in_array('italic', $dynamicStyle['nameStyle'])): ?>
21
  font-style: italic;
22
  <?php endif; ?>
23
+ <?php if(in_array('underline', $dynamicStyle['nameStyle'])): ?>
24
  text-decoration: underline;
25
  <?php endif; ?>
26
  }
27
  .product-price{
28
+ color: <?php echo $dynamicStyle['priceColor'];?>;
29
+ font-size: <?php echo $dynamicStyle['priceFontSize'];?>;
30
+ <?php if(in_array('bold', $dynamicStyle['priceStyle'])): ?>
31
  font-weight: bold;
32
  <?php endif; ?>
33
+ <?php if(in_array('italic', $dynamicStyle['priceStyle'])): ?>
34
  font-style: italic;
35
  <?php endif; ?>
36
+ <?php if(in_array('underline', $dynamicStyle['priceStyle'])): ?>
37
  text-decoration: underline;
38
  <?php endif; ?>
39
  }
40
  .proudct-url{
41
+ color: <?php echo $dynamicStyle['urlColor'];?>;
42
+ font-size: <?php echo $dynamicStyle['urlFontSize'];?>;
43
+ <?php if(in_array('bold', $dynamicStyle['linkStyle'])): ?>
44
  font-weight: bold;
45
  <?php endif; ?>
46
+ <?php if(in_array('italic', $dynamicStyle['linkStyle'])): ?>
47
  font-style: italic;
48
  <?php endif; ?>
49
+ <?php if(in_array('underline', $dynamicStyle['linkStyle'])): ?>
50
  text-decoration: underline;
51
  <?php endif; ?>
52
  }
53
  .other-text{
54
+ color: <?php echo $dynamicStyle['otherColor'];?>;
55
+ font-size: <?php echo $dynamicStyle['otherFontSize'];?>;
56
+ <?php if(in_array('bold', $dynamicStyle['otherStyle'])): ?>
57
  font-weight: bold;
58
  <?php endif; ?>
59
+ <?php if(in_array('italic', $dynamicStyle['otherStyle'])): ?>
60
  font-style: italic;
61
  <?php endif; ?>
62
+ <?php if(in_array('underline', $dynamicStyle['otherStyle'])): ?>
63
  text-decoration: underline;
64
  <?php endif; ?>
65
  }
66
  .product-table{
67
+ font-family: <?php echo $dynamicStyle['docFont'];?>;
68
+ background-color: <?php echo $dynamicStyle['docBackgroundColor'];?>;
69
  width: 100% !important;
70
  }
71
  .product-table img{
77
  width: 25%;
78
  padding-bottom: 10px;
79
  }
80
+ <?php echo $dynamicStyle['dynamicStyling'];?>
81
  /** Responsive **/
82
  @media (max-width: 760px) {
83
  /* Force table to not be like tables anymore */
app/design/frontend/base/default/template/connector/coupon.phtml CHANGED
@@ -1,12 +1,12 @@
1
  <?php $coupon = $this->generateCoupon(); ?>
2
- <?php if($coupon): ?>
3
  <?php
4
- $style = explode(',', Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_COUPON_STYLE));
5
  ?>
6
  <style>
7
  .edc-coupon{
8
- color: <?php echo Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_COUPON_COLOR);?>;
9
- font-size: <?php echo Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_COUPON_FONT_SIZE);?>;
10
  <?php if(in_array('bold', $style)): ?>
11
  font-weight: bold;
12
  <?php endif; ?>
@@ -16,8 +16,8 @@
16
  <?php if(in_array('underline', $style)): ?>
17
  text-decoration: underline;
18
  <?php endif; ?>
19
- font-family: <?php echo Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_COUPON_FONT);?>;
20
- background-color: <?php echo Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_COUPON_BG_COLOR);?>;
21
  }
22
  </style>
23
  <div class="edc-coupon">
1
  <?php $coupon = $this->generateCoupon(); ?>
2
+ <?php if ($coupon): ?>
3
  <?php
4
+ $style = $this->getStyle();
5
  ?>
6
  <style>
7
  .edc-coupon{
8
+ color: <?php echo $this->getCouponColor();?>;
9
+ font-size: <?php echo $this->getFontSize();?>;
10
  <?php if(in_array('bold', $style)): ?>
11
  font-weight: bold;
12
  <?php endif; ?>
16
  <?php if(in_array('underline', $style)): ?>
17
  text-decoration: underline;
18
  <?php endif; ?>
19
+ font-family: <?php echo $this->getFont();?>;
20
+ background-color: <?php echo $this->getBackgroundColor();?>;
21
  }
22
  </style>
23
  <div class="edc-coupon">
app/design/frontend/base/default/template/connector/product/list.phtml CHANGED
@@ -4,56 +4,67 @@ $mode = $this->getMode();
4
  $products = $this->getLoadedProductCollection();
5
  ?>
6
 
7
- <?php if(!empty($products)): ?>
8
  <?php
9
- $name_style = explode(',', Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_NAME_STYLE));
10
- $price_style = explode(',', Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_PRICE_STYLE));
11
- $link_style = explode(',', Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_LINK_STYLE));
12
  ?>
13
  <style>
14
  .product-name{
15
- color: <?php echo Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_NAME_COLOR);?>;
16
- font-size: <?php echo Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_NAME_FONT_SIZE);?>;
17
- <?php if(in_array('bold', $name_style)): ?>
18
- font-weight: bold;
19
  <?php endif; ?>
20
- <?php if(in_array('italic', $name_style)): ?>
21
- font-style: italic;
22
  <?php endif; ?>
23
- <?php if(in_array('underline', $name_style)): ?>
24
- text-decoration: underline;
25
  <?php endif; ?>
26
  }
27
  .product-price{
28
- color: <?php echo Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_PRICE_COLOR);?>;
29
- font-size: <?php echo Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_PRICE_FONT_SIZE);?>;
30
- <?php if(in_array('bold', $price_style)): ?>
31
- font-weight: bold;
32
  <?php endif; ?>
33
- <?php if(in_array('italic', $price_style)): ?>
34
- font-style: italic;
35
  <?php endif; ?>
36
- <?php if(in_array('underline', $price_style)): ?>
37
- text-decoration: underline;
38
  <?php endif; ?>
39
  }
40
  .proudct-url{
41
- color: <?php echo Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_LINK_COLOR);?>;
42
- font-size: <?php echo Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_LINK_FONT_SIZE);?>;
43
- <?php if(in_array('bold', $link_style)): ?>
44
- font-weight: bold;
45
  <?php endif; ?>
46
- <?php if(in_array('italic', $link_style)): ?>
47
- font-style: italic;
48
  <?php endif; ?>
49
- <?php if(in_array('underline', $link_style)): ?>
50
- text-decoration: underline;
 
 
 
 
 
 
 
 
 
 
 
 
 
51
  <?php endif; ?>
52
  }
53
  .product-table{
54
- font-family: <?php echo Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_DOC_FONT);?>;
55
- background-color: <?php echo Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_DOC_BG_COLOR);?>;
56
- width: 100%;
57
  }
58
  .product-table img{
59
  display: block;
@@ -65,7 +76,7 @@ $products = $this->getLoadedProductCollection();
65
  padding-bottom: 10px;
66
  }
67
  /** Styling from config field **/
68
- <?php echo Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_STYLING);?>
69
  /** Responsive **/
70
  @media (max-width: 760px) {
71
  /* Force table to not be like tables anymore */
4
  $products = $this->getLoadedProductCollection();
5
  ?>
6
 
7
+ <?php if (!empty($products)): ?>
8
  <?php
9
+ $dynamicStyle = Mage::helper('ddg')->getDynamicStyles();
 
 
10
  ?>
11
  <style>
12
  .product-name{
13
+ color: <?php echo $dynamicStyle['nameColor'];?>;
14
+ font-size: <?php echo $dynamicStyle['fontSize'];?>;
15
+ <?php if(in_array('bold', $dynamicStyle['nameStyle'])): ?>
16
+ font-weight: bold;
17
  <?php endif; ?>
18
+ <?php if(in_array('italic', $dynamicStyle['nameStyle'])): ?>
19
+ font-style: italic;
20
  <?php endif; ?>
21
+ <?php if(in_array('underline', $dynamicStyle['nameStyle'])): ?>
22
+ text-decoration: underline;
23
  <?php endif; ?>
24
  }
25
  .product-price{
26
+ color: <?php echo $dynamicStyle['priceColor'];?>;
27
+ font-size: <?php echo $dynamicStyle['priceFontSize'];?>;
28
+ <?php if(in_array('bold', $dynamicStyle['priceStyle'])): ?>
29
+ font-weight: bold;
30
  <?php endif; ?>
31
+ <?php if(in_array('italic', $dynamicStyle['priceStyle'])): ?>
32
+ font-style: italic;
33
  <?php endif; ?>
34
+ <?php if(in_array('underline', $dynamicStyle['priceStyle'])): ?>
35
+ text-decoration: underline;
36
  <?php endif; ?>
37
  }
38
  .proudct-url{
39
+ color: <?php echo $dynamicStyle['urlColor'];?>;
40
+ font-size: <?php echo $dynamicStyle['urlFontSize'];?>;
41
+ <?php if(in_array('bold', $dynamicStyle['linkStyle'])): ?>
42
+ font-weight: bold;
43
  <?php endif; ?>
44
+ <?php if(in_array('italic', $dynamicStyle['linkStyle'])): ?>
45
+ font-style: italic;
46
  <?php endif; ?>
47
+ <?php if(in_array('underline', $dynamicStyle['linkStyle'])): ?>
48
+ text-decoration: underline;
49
+ <?php endif; ?>
50
+ }
51
+ .other-text{
52
+ color: <?php echo $dynamicStyle['otherColor'];?>;
53
+ font-size: <?php echo $dynamicStyle['otherFontSize'];?>;
54
+ <?php if(in_array('bold', $dynamicStyle['otherStyle'])): ?>
55
+ font-weight: bold;
56
+ <?php endif; ?>
57
+ <?php if(in_array('italic', $dynamicStyle['otherStyle'])): ?>
58
+ font-style: italic;
59
+ <?php endif; ?>
60
+ <?php if(in_array('underline', $dynamicStyle['otherStyle'])): ?>
61
+ text-decoration: underline;
62
  <?php endif; ?>
63
  }
64
  .product-table{
65
+ font-family: <?php echo $dynamicStyle['docFont'];?>;
66
+ background-color: <?php echo $dynamicStyle['docBackgroundColor'];?>;
67
+ width: 100% !important;
68
  }
69
  .product-table img{
70
  display: block;
76
  padding-bottom: 10px;
77
  }
78
  /** Styling from config field **/
79
+ <?php echo $dynamicStyle['dynamicStyling'];?>
80
  /** Responsive **/
81
  @media (max-width: 760px) {
82
  /* Force table to not be like tables anymore */
app/design/frontend/base/default/template/connector/review.phtml CHANGED
@@ -2,69 +2,79 @@
2
  $i = 0;
3
  $helper = Mage::helper('ddg');
4
  $order = $this->getOrder();
 
 
5
  ?>
6
  <?php if($order): ?>
7
-
8
- <?php
9
- $name_style = explode(',', Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_NAME_STYLE));
10
- $price_style = explode(',', Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_PRICE_STYLE));
11
- $link_style = explode(',', Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_LINK_STYLE));
12
- ?>
13
  <style>
14
- .product-name{
15
- color: <?php echo Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_NAME_COLOR);?>;
16
- font-size: <?php echo Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_NAME_FONT_SIZE);?>;
17
- <?php if(in_array('bold', $name_style)): ?>
18
- font-weight: bold;
19
- <?php endif; ?>
20
- <?php if(in_array('italic', $name_style)): ?>
21
- font-style: italic;
22
- <?php endif; ?>
23
- <?php if(in_array('underline', $name_style)): ?>
24
- text-decoration: underline;
25
- <?php endif; ?>
26
- }
27
- .product-price{
28
- color: <?php echo Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_PRICE_COLOR);?>;
29
- font-size: <?php echo Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_PRICE_FONT_SIZE);?>;
30
- <?php if(in_array('bold', $price_style)): ?>
31
- font-weight: bold;
32
- <?php endif; ?>
33
- <?php if(in_array('italic', $price_style)): ?>
34
- font-style: italic;
35
- <?php endif; ?>
36
- <?php if(in_array('underline', $price_style)): ?>
37
- text-decoration: underline;
38
- <?php endif; ?>
39
- }
40
- .proudct-url{
41
- color: <?php echo Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_LINK_COLOR);?>;
42
- font-size: <?php echo Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_LINK_FONT_SIZE);?>;
43
- <?php if(in_array('bold', $link_style)): ?>
44
- font-weight: bold;
45
- <?php endif; ?>
46
- <?php if(in_array('italic', $link_style)): ?>
47
- font-style: italic;
48
- <?php endif; ?>
49
- <?php if(in_array('underline', $link_style)): ?>
50
- text-decoration: underline;
51
- <?php endif; ?>
52
- }
53
- .product-table{
54
- font-family: <?php echo Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_DOC_FONT);?>;
55
- background-color: <?php echo Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_DOC_BG_COLOR);?>;
56
- width: 100%;
57
- }
58
- .product-table img{
59
- display: block;
60
- margin-left: auto;
61
- margin-right: auto
62
- }
63
- .product-table td{
64
- width: 25%;
65
- padding-bottom: 10px;
66
- }
67
- <?php echo Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_STYLING);?>
 
 
 
 
 
 
 
 
 
 
 
 
 
68
  /** Responsive **/
69
  @media (max-width: 760px) {
70
  /* Force table to not be like tables anymore */
@@ -81,17 +91,7 @@ $order = $this->getOrder();
81
  </style>
82
 
83
  <?php
84
- $website = Mage::app()->getStore($order->getStoreId())->getWebsite();
85
- $mode = $helper->getReviewDisplayType($website);
86
- $items = $order->getAllVisibleItems();
87
- $productIds = array();
88
- //get the product ids for the collection
89
- foreach ( $items as $item ) {
90
- $productIds[] = $item->getProductId();
91
- }
92
- $items = Mage::getModel('catalog/product')->getCollection()
93
- ->addAttributeToSelect('*')
94
- ->addFieldToFilter('entity_id', array('in' => $productIds));
95
  ?>
96
 
97
  <?php foreach ($items as $item) :?>
@@ -116,9 +116,9 @@ $order = $this->getOrder();
116
  </div>
117
  </td>
118
 
119
- <?php if($i++ % 4 ==3 && $mode == 'grid'):?></tr><tr><?php endif;?>
120
  <?php endforeach;?>
121
- <?php if( $i > 0):?>
122
  </table>
123
  <?php endif;?>
124
  <?php endif;
2
  $i = 0;
3
  $helper = Mage::helper('ddg');
4
  $order = $this->getOrder();
5
+ $mode = $this->getMode();
6
+ $website = $this->getWebsite();
7
  ?>
8
  <?php if($order): ?>
9
+ <?php $dynamicStyle = $helper->getDynamicStyles(); ?>
 
 
 
 
 
10
  <style>
11
+ .product-name{
12
+ color: <?php echo $dynamicStyle['nameColor'];?>;
13
+ font-size: <?php echo $dynamicStyle['fontSize'];?>;
14
+ <?php if(in_array('bold', $dynamicStyle['nameStyle'])): ?>
15
+ font-weight: bold;
16
+ <?php endif; ?>
17
+ <?php if(in_array('italic', $dynamicStyle['nameStyle'])): ?>
18
+ font-style: italic;
19
+ <?php endif; ?>
20
+ <?php if(in_array('underline', $dynamicStyle['nameStyle'])): ?>
21
+ text-decoration: underline;
22
+ <?php endif; ?>
23
+ }
24
+ .product-price{
25
+ color: <?php echo $dynamicStyle['priceColor'];?>;
26
+ font-size: <?php echo $dynamicStyle['priceFontSize'];?>;
27
+ <?php if(in_array('bold', $dynamicStyle['priceStyle'])): ?>
28
+ font-weight: bold;
29
+ <?php endif; ?>
30
+ <?php if(in_array('italic', $dynamicStyle['priceStyle'])): ?>
31
+ font-style: italic;
32
+ <?php endif; ?>
33
+ <?php if(in_array('underline', $dynamicStyle['priceStyle'])): ?>
34
+ text-decoration: underline;
35
+ <?php endif; ?>
36
+ }
37
+ .proudct-url{
38
+ color: <?php echo $dynamicStyle['urlColor'];?>;
39
+ font-size: <?php echo $dynamicStyle['urlFontSize'];?>;
40
+ <?php if(in_array('bold', $dynamicStyle['linkStyle'])): ?>
41
+ font-weight: bold;
42
+ <?php endif; ?>
43
+ <?php if(in_array('italic', $dynamicStyle['linkStyle'])): ?>
44
+ font-style: italic;
45
+ <?php endif; ?>
46
+ <?php if(in_array('underline', $dynamicStyle['linkStyle'])): ?>
47
+ text-decoration: underline;
48
+ <?php endif; ?>
49
+ }
50
+ .other-text{
51
+ color: <?php echo $dynamicStyle['otherColor'];?>;
52
+ font-size: <?php echo $dynamicStyle['otherFontSize'];?>;
53
+ <?php if(in_array('bold', $dynamicStyle['otherStyle'])): ?>
54
+ font-weight: bold;
55
+ <?php endif; ?>
56
+ <?php if(in_array('italic', $dynamicStyle['otherStyle'])): ?>
57
+ font-style: italic;
58
+ <?php endif; ?>
59
+ <?php if(in_array('underline', $dynamicStyle['otherStyle'])): ?>
60
+ text-decoration: underline;
61
+ <?php endif; ?>
62
+ }
63
+ .product-table{
64
+ font-family: <?php echo $dynamicStyle['docFont'];?>;
65
+ background-color: <?php echo $dynamicStyle['docBackgroundColor'];?>;
66
+ width: 100% !important;
67
+ }
68
+ .product-table img{
69
+ display: block;
70
+ margin-left: auto;
71
+ margin-right: auto
72
+ }
73
+ .product-table td{
74
+ width: 25%;
75
+ padding-bottom: 10px;
76
+ }
77
+ <?php echo $dynamicStyle['dynamicStyling'];?>
78
  /** Responsive **/
79
  @media (max-width: 760px) {
80
  /* Force table to not be like tables anymore */
91
  </style>
92
 
93
  <?php
94
+ $items = $this->getItems();
 
 
 
 
 
 
 
 
 
 
95
  ?>
96
 
97
  <?php foreach ($items as $item) :?>
116
  </div>
117
  </td>
118
 
119
+ <?php if ($i++ % 4 ==3 && $mode == 'grid'):?></tr><tr><?php endif;?>
120
  <?php endforeach;?>
121
+ <?php if ( $i > 0):?>
122
  </table>
123
  <?php endif;?>
124
  <?php endif;
app/design/frontend/base/default/template/connector/wishlist.phtml CHANGED
@@ -4,68 +4,75 @@
4
  $items = $this->getWishlistItems();
5
  ?>
6
  <?php if($items): ?>
7
-
8
- <?php
9
- $name_style = explode(',', Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_NAME_STYLE));
10
- $price_style = explode(',', Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_PRICE_STYLE));
11
- $link_style = explode(',', Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_LINK_STYLE));
12
- ?>
13
  <style>
14
- .product-name{
15
- color: <?php echo Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_NAME_COLOR);?>;
16
- font-size: <?php echo Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_NAME_FONT_SIZE);?>;
17
- <?php if(in_array('bold', $name_style)): ?>
18
- font-weight: bold;
19
- <?php endif; ?>
20
- <?php if(in_array('italic', $name_style)): ?>
21
- font-style: italic;
22
- <?php endif; ?>
23
- <?php if(in_array('underline', $name_style)): ?>
24
- text-decoration: underline;
25
- <?php endif; ?>
26
- }
27
- .product-price{
28
- color: <?php echo Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_PRICE_COLOR);?>;
29
- font-size: <?php echo Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_PRICE_FONT_SIZE);?>;
30
- <?php if(in_array('bold', $price_style)): ?>
31
- font-weight: bold;
32
- <?php endif; ?>
33
- <?php if(in_array('italic', $price_style)): ?>
34
- font-style: italic;
35
- <?php endif; ?>
36
- <?php if(in_array('underline', $price_style)): ?>
37
- text-decoration: underline;
38
- <?php endif; ?>
39
- }
40
- .proudct-url{
41
- color: <?php echo Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_LINK_COLOR);?>;
42
- font-size: <?php echo Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_LINK_FONT_SIZE);?>;
43
- <?php if(in_array('bold', $link_style)): ?>
44
- font-weight: bold;
45
- <?php endif; ?>
46
- <?php if(in_array('italic', $link_style)): ?>
47
- font-style: italic;
48
- <?php endif; ?>
49
- <?php if(in_array('underline', $link_style)): ?>
50
- text-decoration: underline;
51
- <?php endif; ?>
52
- }
53
- .product-table{
54
- font-family: <?php echo Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_DOC_FONT);?>;
55
- background-color: <?php echo Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_DOC_BG_COLOR);?>;
56
- width: 100%;
57
- }
58
- .product-table img{
59
- display: block;
60
- margin-left: auto;
61
- margin-right: auto
62
- }
63
- .product-table td{
64
- width: 25%;
65
- padding-bottom: 10px;
66
- }
67
- /** Styling from config field **/
68
- <?php echo Mage::getStoreConfig(Dotdigitalgroup_Email_Helper_Config::XML_PATH_CONNECTOR_DYNAMIC_STYLING);?>
 
 
 
 
 
 
 
 
 
 
 
 
69
  /** Responsive **/
70
  @media (max-width: 760px) {
71
  /* Force table to not be like tables anymore */
@@ -97,7 +104,7 @@
97
  <div align="center">
98
  <a class="proudct-url" href="<?php echo $_product->getProductUrl();?>">
99
  <?php
100
- if($urlText = $this->getTextForUrl($_product->getStoreId()))
101
  echo $this->escapeHtml($urlText);
102
  else
103
  echo $this->__('View Now');
4
  $items = $this->getWishlistItems();
5
  ?>
6
  <?php if($items): ?>
7
+ <?php $dynamicStyle = Mage::helper('ddg')->getDynamicStyles();?>
 
 
 
 
 
8
  <style>
9
+ .product-name{
10
+ color: <?php echo $dynamicStyle['nameColor'];?>;
11
+ font-size: <?php echo $dynamicStyle['fontSize'];?>;
12
+ <?php if(in_array('bold', $dynamicStyle['nameStyle'])): ?>
13
+ font-weight: bold;
14
+ <?php endif; ?>
15
+ <?php if(in_array('italic', $dynamicStyle['nameStyle'])): ?>
16
+ font-style: italic;
17
+ <?php endif; ?>
18
+ <?php if(in_array('underline', $dynamicStyle['nameStyle'])): ?>
19
+ text-decoration: underline;
20
+ <?php endif; ?>
21
+ }
22
+ .product-price{
23
+ color: <?php echo $dynamicStyle['priceColor'];?>;
24
+ font-size: <?php echo $dynamicStyle['priceFontSize'];?>;
25
+ <?php if(in_array('bold', $dynamicStyle['priceStyle'])): ?>
26
+ font-weight: bold;
27
+ <?php endif; ?>
28
+ <?php if(in_array('italic', $dynamicStyle['priceStyle'])): ?>
29
+ font-style: italic;
30
+ <?php endif; ?>
31
+ <?php if(in_array('underline', $dynamicStyle['priceStyle'])): ?>
32
+ text-decoration: underline;
33
+ <?php endif; ?>
34
+ }
35
+ .proudct-url{
36
+ color: <?php echo $dynamicStyle['urlColor'];?>;
37
+ font-size: <?php echo $dynamicStyle['urlFontSize'];?>;
38
+ <?php if(in_array('bold', $dynamicStyle['linkStyle'])): ?>
39
+ font-weight: bold;
40
+ <?php endif; ?>
41
+ <?php if(in_array('italic', $dynamicStyle['linkStyle'])): ?>
42
+ font-style: italic;
43
+ <?php endif; ?>
44
+ <?php if(in_array('underline', $dynamicStyle['linkStyle'])): ?>
45
+ text-decoration: underline;
46
+ <?php endif; ?>
47
+ }
48
+ .other-text{
49
+ color: <?php echo $dynamicStyle['otherColor'];?>;
50
+ font-size: <?php echo $dynamicStyle['otherFontSize'];?>;
51
+ <?php if(in_array('bold', $dynamicStyle['otherStyle'])): ?>
52
+ font-weight: bold;
53
+ <?php endif; ?>
54
+ <?php if(in_array('italic', $dynamicStyle['otherStyle'])): ?>
55
+ font-style: italic;
56
+ <?php endif; ?>
57
+ <?php if(in_array('underline', $dynamicStyle['otherStyle'])): ?>
58
+ text-decoration: underline;
59
+ <?php endif; ?>
60
+ }
61
+ .product-table{
62
+ font-family: <?php echo $dynamicStyle['docFont'];?>;
63
+ background-color: <?php echo $dynamicStyle['docBackgroundColor'];?>;
64
+ width: 100% !important;
65
+ }
66
+ .product-table img{
67
+ display: block;
68
+ margin-left: auto;
69
+ margin-right: auto
70
+ }
71
+ .product-table td{
72
+ width: 25%;
73
+ padding-bottom: 10px;
74
+ }
75
+ <?php echo $dynamicStyle['dynamicStyling'];?>
76
  /** Responsive **/
77
  @media (max-width: 760px) {
78
  /* Force table to not be like tables anymore */
104
  <div align="center">
105
  <a class="proudct-url" href="<?php echo $_product->getProductUrl();?>">
106
  <?php
107
+ if ($urlText = $this->getTextForUrl($_product->getStoreId()))
108
  echo $this->escapeHtml($urlText);
109
  else
110
  echo $this->__('View Now');
package.xml CHANGED
@@ -1,34 +1,22 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>dotmailermagento</name>
4
- <version>5.2.0</version>
5
  <stability>stable</stability>
6
  <license uri="http://opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
7
  <channel>community</channel>
8
  <extends/>
9
  <summary>Integrate your ecommerce with dotMailer's powerful triggered email marketing and convert more visits to sales.</summary>
10
  <description>Connector Integration for Magento, allows to manage and synchronise customer data and lost baskets.</description>
11
- <notes>New Automation improvements.&#xD;
12
- &#xD;
13
- Transactional Emails, Custom Customer Attributes, Reports &amp; More&#xD;
14
- &#xD;
15
- This release includes some great new functionality as well as including a number of fixes. &#xD;
16
- &#xD;
17
- ##IMPORTANT## Dynamic content URL's have been changed so will need updating within your dotMailer account to ensure they continue working correctly. ##IMPORTANT##&#xD;
18
- &#xD;
19
- Release Highlights:&#xD;
20
- &#xD;
21
- + Transactional Emails: Replace the standard emails Magento currently sends to your customers and guests with beautifully created campaigns from dotMailer. Emails include new account, new order, dispatch, cancel and refund emails. **A dotMailer child account is required to enable this functionality**&#xD;
22
- &#xD;
23
- + Custom Customer Attributes: Sync your custom created customer attributes to dotMailer &#xD;
24
- &#xD;
25
- + Dynamic Content Styling: Apply custom CSS to all dynamic content pages e.g. font size, colour and type.&#xD;
26
- &#xD;
27
- + Reporting: Now within the Newsletter section in Magento you can view the import status of contacts and orders, as well as the sending status of transactional and lost basket emails.</notes>
28
- <authors><author><name>Calin Diacon</name><user>cdiacon</user><email>calin.diacon@dotmailer.com</email></author><author><name>Adeel Qamar</name><user>adeel</user><email>adeel.qamar@dotmailer.com</email></author></authors>
29
- <date>2015-12-14</date>
30
- <time>15:41:46</time>
31
- <contents><target name="magecommunity"><dir name="Dotdigitalgroup"><dir name="Email"><dir name="Block"><dir name="Adminhtml"><dir name="Automation"><file name="Grid.php" hash="7059908834fdfed28182e2fe672e0d33"/></dir><file name="Automation.php" hash="7e1b876bf5619cb4533fb935b67b7103"/><dir name="Campaign"><file name="Grid.php" hash="ed3b11f23f8029c7af4dd63f5dceed0e"/></dir><file name="Campaign.php" hash="1b09266adba5191df1d39330e4832d41"/><dir name="Catalog"><file name="Grid.php" hash="e5545ec424a1011117e869984e90a754"/></dir><file name="Catalog.php" hash="f9d97d5ff57987714788ef0511405d46"/><dir name="Column"><dir name="Renderer"><file name="Delete.php" hash="2741323edb5151b4211244ccf115d796"/><file name="Imported.php" hash="894d7ead94e40d20cabb082346830c35"/><file name="Reset.php" hash="f85c3f41af7e6929dc169fb231e24162"/><file name="Script.php" hash="d4f0356fc226028af5857549733a84d3"/><file name="Status.php" hash="92c7256da2ca42ec9c11c255e2cd4e51"/><file name="Sync.php" hash="c85a2e4784b73e709bfe82468a4200b0"/><file name="Website.php" hash="ca2c1f34b86e5ccf022fdc395cf07084"/></dir></dir><dir name="Config"><dir name="Automation"><file name="Customdatafields.php" hash="7ae2aef7d636c19dd2fcc9ba57ab4635"/></dir><file name="Customdatafields.php" hash="ee28b3fe691ade18fcc217b330d8dac6"/><dir name="Rules"><file name="Customdatafields.php" hash="c56d50e7eb3854ec67e026023d38d4d7"/></dir><file name="Select.php" hash="b92091e08d7e24032be9b8aea033b81d"/></dir><dir name="Contact"><dir name="Edit"><file name="Form.php" hash="1d0f6eba1f3a59c38ccfc01b3d5eb447"/></dir><file name="Edit.php" hash="051408ea54be21761e1ab2210ea0bc30"/><file name="Grid.php" hash="5d3dd60e4a530a64370c744717b2b49e"/></dir><file name="Contact.php" hash="ecf231c9d8eb789a4f0863f92d323c38"/><dir name="Customer"><dir name="Tab"><file name="Stats.php" hash="ee77ed9c68e790842d308eab4dd8e8c2"/></dir><file name="Tab.php" hash="507172f634c4db4350fb0288464a348a"/></dir><dir name="Dashboard"><file name="Switcher.php" hash="dac118060238aef3b2a4f60d11c0a3eb"/><dir name="Tabs"><dir name="Analysis"><file name="Abandonedcarts.php" hash="b5ca264c215c98545c882646f4d44bd2"/><file name="Customer.php" hash="01ab9dc18bce37c70de130393ed85902"/><file name="Rfm.php" hash="29e94c92b7c577274a4a70f314e6e5a4"/><file name="Sales.php" hash="6abc5d3bb6f1e668ffa696cd34e3adf4"/><file name="Subscriber.php" hash="4dc3d4a2553a64befd5a94cd64d9658e"/></dir><file name="Analysis.php" hash="b2d6a5a2bab0c8117b89d0f6e91051e2"/><dir name="General"><file name="Data.php" hash="f55fbdda9c380b3ad01c4672e05fcea7"/></dir><file name="General.php" hash="d79b87c420c7c708f7ef86fe18d244c0"/><file name="Logs.php" hash="1fc8ae9c5e8370718f70075afa8e3d81"/><file name="Status.php" hash="48737849dac3ebaba5df9d3ad0b3f6ad"/></dir><file name="Tabs.php" hash="8da89ad9d407a489b04ae47924e0b30f"/></dir><file name="Dashboard.php" hash="1f06a5dcb5a934d239c9627b9bbea822"/><dir name="Importer"><file name="Grid.php" hash="8de43bab33f75c0f64198709dbb1b5e9"/></dir><file name="Importer.php" hash="833d5c2a48f40c9fa27aed4bbd74bd2c"/><dir name="Order"><file name="Grid.php" hash="96e62a99c8295f442377124d37a114f2"/></dir><file name="Order.php" hash="dc6b0cd9c9ac9d8c291f72dbbd4c1a15"/><dir name="Quote"><file name="Grid.php" hash="241108bfb525bbbad0c543fef7673546"/></dir><file name="Quote.php" hash="edcacdf20da2f046ab4654dceef2399f"/><dir name="Review"><file name="Grid.php" hash="85919ad9bfc19eec32e673a699f850c5"/></dir><file name="Review.php" hash="822d452ee01499b4b493e19e6d810afd"/><dir name="Rules"><dir name="Edit"><file name="Form.php" hash="13f8b943873d30609ca3a2af6c72f502"/><dir name="Tab"><file name="Conditions.php" hash="1a11c398065666e0b77e0bf30827c81e"/><file name="Main.php" hash="aaf575a2db857eaac0f9e5006064fc3d"/></dir><file name="Tabs.php" hash="99c7258e593bff52b3976c359ad4235a"/></dir><file name="Edit.php" hash="bf987a05ecfc0c7540c6f86275582733"/><file name="Grid.php" hash="6a9077456ab1b8b72ed26406af336437"/></dir><file name="Rules.php" hash="4dc3b7ac89293d996f3e2a8fd3d12eb9"/><dir name="Sales"><dir name="Order"><dir name="Creditmemo"><file name="View.php" hash="ab9cfcc946e03f8b8fdf33d606222427"/></dir></dir></dir><dir name="System"><dir name="Advanced"><file name="Deletecontactids.php" hash="293320187b8ec5514ff69e027a808321"/><file name="Notification.php" hash="0ea9608a09ae2dad6e4c78738c583c2d"/><file name="Reimportcatalog.php" hash="a497ac63a609440dbd723bc3a2a2819f"/><file name="Reimportorders.php" hash="d29f38c149d2fbfb6b8589491b050247"/><file name="Reimportquotes.php" hash="6089df53be37afe6c4f9f10147730bc7"/><file name="Reimportreviews.php" hash="2c14cd482a448be01c8ceb3d0a9c7dd5"/><file name="Reimportsubscribers.php" hash="43b98ca37accc978ba8e9bd087b9a2c7"/><file name="Reimportwishlists.php" hash="f6bce4f06bc91f69242bd2f59220285d"/><file name="Reset.php" hash="41053dc403c95328402c0e3886307859"/><file name="Resetcustomersimport.php" hash="21bab61f962ed4a3a3c14656781c4e3b"/><file name="Runcatalogsync.php" hash="ecaa5a7b8ebc78a5f84f0870a90a0cd9"/><file name="Runcontactsync.php" hash="747b338c4fe3d3603ce60a68b7e1d5c4"/><file name="Runimportersync.php" hash="e2eee8773c0019dd7e8c5d9553a75d39"/><file name="Runordersync.php" hash="58d7672919b3387d73472e6a10a850af"/><file name="Runquotesync.php" hash="c4bbc5616a080b5dbaad02717225f507"/><file name="Runreviewsync.php" hash="dafef47cb94f595af038698f1f233421"/><file name="Runsubscribersync.php" hash="090707901889d4bae741fe59747cfbff"/><file name="Runwishlistsync.php" hash="8453adae849a6ad9aaecb1f27dc46b72"/><file name="Setupdatafields.php" hash="48373eb08bb90bf4417c830723a4df11"/><file name=".DS_Store" hash="194577a7e20bdcc7afbb718f502c134c"/></dir><file name="Ajaxvalidate.php" hash="2647705ecfcd6c1cd39489febd38b490"/><dir name="Automation"><file name="Connect.php" hash="6a104d54949f4dd845e2dd273ec59b59"/></dir><dir name="Config"><file name="Addressbook.php" hash="ac68b4c742413e5cdcce9c5c78e836a9"/><file name="Colorpicker.php" hash="a22c6d50728e2edaf43399093b1f4a61"/><file name="Datafield.php" hash="5b30377c5423fcccd424c4ca0ad3224f"/><file name="Enterprisevalidator.php" hash="92b60f1f8ca067887dc17afac7be6f24"/><file name="Resetcontacts.php" hash="22ef003f51db85bed2ebb85c5834b352"/><file name="Resetguests.php" hash="002ced7daec912bdad0890b26afcc4a0"/><file name="Resetsubscribers.php" hash="d5be1a595576ea63883c0249be835c7f"/><file name="Validator.php" hash="995386364c7434ad50bb87477c46f6eb"/><file name="Waitingfield.php" hash="7ffe44f6ae4b879336344882ba7e020e"/><file name="Wrapper.php" hash="2813c1d11255f10bc1ff804650a634b7"/></dir><dir name="Dynamic"><file name="Addressbookbutton.php" hash="744ca8346bf67fb7c7b96f92ad67e993"/><dir name="Basket"><file name="Crosssell.php" hash="aa00e37f15d822bf8448fbe79d70d1d5"/><file name="Related.php" hash="a1b0f467eee4513be21fdc58bdf6e59e"/><file name="Upsell.php" hash="dc7a0dbea77d7c88c9fbb660131d1773"/></dir><file name="Bestsellers.php" hash="47d8b2f89290c034c1c74ae0dad5463a"/><file name="Couponinfo.php" hash="646acc6eb041db4041c1df04e2e2fe26"/><file name="Creditmemonew.php" hash="c36bcff6b33f441b11cc5a45a5abe60d"/><file name="Crosssell.php" hash="e1085bb71156dcb1bb012044c5d4a076"/><file name="Datafieldbutton.php" hash="369eec55df4d51ce367abb9c81402976"/><file name="Fallbackchooser.php" hash="28601a2fb0407ece1269a9e3d95757de"/><file name="Fallbackcontainer.php" hash="e3044fc492790758b646a9a656ea1f79"/><dir name="Feefo"><file name="Reviews.php" hash="8a32c6e10d93621fe63c6307c5da17da"/><file name="Score.php" hash="a5a2b4a16e1645107c9dd360dbf03a6b"/></dir><file name="Gridlist.php" hash="9329c6aa0ab3118b8f03af66761f038d"/><file name="Lostbasket.php" hash="506dd83329b4b342af7239a419925a93"/><file name="Manualchooser.php" hash="d9e2e198bb53fdf4a329915db7d07281"/><file name="Manualcontainer.php" hash="689696990974ce7cd1db3df3b73bb864"/><file name="Mostviewed.php" hash="cd49997a51f34aa36470dae896336fee"/><file name="Nosto.php" hash="ec90847ea7170baf8bc197057a13dcac"/><file name="Productpush.php" hash="2623fd4a941ff0e06504dc87b877bb50"/><file name="Recentlyviewed.php" hash="b73e60e76daaca15891e3cbc3700182c"/><file name="Related.php" hash="8b8022dac18181a3ab11837be34beced"/><file name="Review.php" hash="02a962eaf8231981f3d999be9a904c77"/><file name="Upsell.php" hash="898fe5ffc06063450034a8980f54db33"/><dir name="Wishlist"><file name="Crosssell.php" hash="c5c191438715b4f8ad36c62b705cfbb5"/><file name="Related.php" hash="d94412911bb7b85ce73718adc244d6e8"/><file name="Upsell.php" hash="d79aed858a2f4c2a29299fe8868d7ef7"/></dir><file name="Wishlist.php" hash="46c433fda7ec07c82025d88014d93471"/></dir><file name="Emailapivalidate.php" hash="d2b05128440217064792b82e0911e1e6"/><file name="Installation.php" hash="03707c42dcca01e1c156b48a6246a74c"/><dir name="Sms"><file name="Smsmessagefour.php" hash="d5f61111d9c58ee99dc10cb53afea060"/><file name="Smsmessageone.php" hash="00b65d2fcd16c11b93db8fff1ffda069"/><file name="Smsmessagethree.php" hash="eec8120e729a8dd0d248e184564eefcd"/><file name="Smsmessagetwo.php" hash="5f9fa9aca352c389a2cd75ef4366baed"/></dir><dir name="Url"><file name="Creditmemoupdate.php" hash="07113ed35f709e2e65c4c61521e560a8"/><file name="Creditmemoupdateguest.php" hash="034e033269cf142f930b6bff1c36d10a"/><file name="Customerconfirmation.php" hash="260a57d13b20cda7229eb33c9a73559c"/><file name="Customerconfirmed.php" hash="1743ddf8f308eb375f44ac32da3c3c91"/><file name="Customernew.php" hash="2878ef6c84303614ac3426838f8b65d5"/><file name="Invoiceupdate.php" hash="d4eb69e2e0f5e3b7e9ea1da5d3adb578"/><file name="Invoiceupdateguest.php" hash="1ebd3c14e380043fa16b7e36d821d15c"/><file name="Newcreditmemo.php" hash="20b55e9ce5371a371ff0c94bd0fda178"/><file name="Newcreditmemoguest.php" hash="5bd16181c61c1bfb98e6eea3e1c7281f"/><file name="Newinvoice.php" hash="ff95c29ff62359ab2d0366098029a704"/><file name="Newinvoiceguest.php" hash="d05a14bb52facf8635c89642165e39ec"/><file name="Neworder.php" hash="f67882d758909fda7364fa04cb51e2f0"/><file name="Neworderguest.php" hash="ac3b96283e7e5e3ce68e35bf84f9043d"/><file name="Newshipment.php" hash="f059c430fb155c8f9da10b6dd4c67e01"/><file name="Newshipmentguest.php" hash="f73d439fb93eb7f20289e021b10b69a8"/><file name="Orderupdate.php" hash="1c27f18bf9ff58c1f0668539b7ca6896"/><file name="Orderupdateguest.php" hash="d4a2479efa67e900fbe69f6954707076"/><file name="Shipmentupdate.php" hash="f6f2fe91a159b8bf9c70c3a8773a058c"/><file name="Shipmentupdateguest.php" hash="f0ce96ef2e562cae6d155e4d38f1dcac"/></dir></dir><dir name="Widget"><dir name="Chooser"><file name="Product.php" hash="b2f77407f30411d5447fbd1ffac3e415"/></dir></dir><dir name="Wishlist"><file name="Grid.php" hash="fc60afe27facac4a3fb4677ba1aa2fbe"/></dir><file name="Wishlist.php" hash="74f5fb49b057af35ee320f442c664a6b"/></dir><file name="Basket.php" hash="435ae9c1945579ac9da0b4b9025f5251"/><file name="Coupon.php" hash="fe3affe1a8d9a7a885d81f19f4adb51e"/><dir name="Customer"><dir name="Account"><file name="Books.php" hash="4513840169af5af3ecb5682111c8798b"/></dir></dir><file name="Edc.php" hash="5a9937398bd001e4cccb4620cedf624a"/><file name="Feefo.php" hash="69eae3b3ef72a610ef7671347095127e"/><dir name="Order"><file name="Creditmemo.php" hash="3b8be146530d2ef5b408c91dda73dd9d"/><file name="Invoice.php" hash="0e2e69a44e6952e4803afe0778b57567"/><file name="Shipping.php" hash="dec79e54b6029c8a478b519f99470e72"/></dir><file name="Order.php" hash="ce3098054467d5f5c21840469e5a512a"/><file name="Products.php" hash="d38365bc368c1d6e8e867de39c4a1495"/><dir name="Recommended"><file name="Products.php" hash="507a2ab57f718870064272084cf58bb6"/><file name="Wishlistproducts.php" hash="943a5b7697bacb899cb4e81a587fe334"/></dir><file name="Wishlist.php" hash="c0adad8c73b8cbf50596c202032422e3"/></dir><dir name="Helper"><file name="Config.php" hash="550a3230f37f0335de2267d037328358"/><file name="Dashboard.php" hash="19fb73389f2ef6a65c83325e8059de67"/><file name="Data.php" hash="460f62593e4052c9cb9391a466bf5e2a"/><file name="File.php" hash="93f15c70a6babbc8174098bcac0758be"/><file name="Recommended.php" hash="d77533b7b110828e07f7a9d9a80606fe"/><file name="Transactional.php" hash="a399ced08b031a9d5f4cdab3d28db6a6"/></dir><dir name="Model"><dir name="Abstract"><file name="Rest.php" hash="9dcbb422c4bb28bab2e88c9ba0b21cba"/></dir><dir name="Adminhtml"><dir name="Dashboard"><file name="Content.php" hash="a415e7d3fad5d27ce27f6172a50d4997"/><dir name="Tabs"><dir name="Analysis"><file name="Abandoned.php" hash="915c2e848bdb8c2629a90d6d4326b8e8"/><file name="Customer.php" hash="f56d20e6620589c31b8468d8f06d975e"/><file name="Orders.php" hash="9ac9df6980ecedcdcd2567656ebc3a4c"/><file name="Rfm.php" hash="1bd137928d701485c995b6a236ea1ef6"/><file name="Subscriber.php" hash="1b44da59332b7f233499abe3408ed70a"/></dir></dir></dir><file name="Observer.php" hash="ca17335a3a44a498b98170f7fe07ecb4"/><dir name="Source"><file name="Addressbooks.php" hash="af92437b4ed2a7fc6fede455420f11c0"/><file name="Addressbookspref.php" hash="be0c23d42b1a30f9c719c382be865e8d"/><dir name="Advanced"><file name="Abandonedlimit.php" hash="cd280151523091f85af89b0e22ff0abf"/><file name="Attributes.php" hash="9d08d5ab758447987c7ab9ba6d5c45b2"/><file name="Cronexpressionsone.php" hash="3877dd7041189aedf2c972b4361d2134"/><file name="Cronexpressionstwo.php" hash="0a97c58dff29e17a8448ff0c17e393d7"/><file name="Frequency.php" hash="28292fba0dd62bb6730ccd7bfa2b8e70"/><file name="Quoteattributes.php" hash="a1ddcbd001b9cd5b40157ba3c9435bef"/><file name="Transdata.php" hash="5c670a26d641c4b7e73bbaff48af3dd6"/></dir><file name="Attributes.php" hash="4b079aac1a25bec3c7c7e4152a66daa8"/><dir name="Automation"><file name="Programme.php" hash="d65ea01f846798ded93b420889da89c2"/></dir><file name="Campaigns.php" hash="35014267c18ab36cd6d849318914185e"/><dir name="Contact"><file name="Imported.php" hash="f44a906cb28c81c709c649b6ed8a0ccd"/><file name="Modified.php" hash="30e2f9e3d55ecd65a3cd0be1136db38d"/></dir><dir name="Customer"><dir name="Attributes"><file name="Select.php" hash="a77542918db6d3ba1c0298b475e8e9ed"/></dir></dir><file name="Datafields.php" hash="0a12d3c9c63476ea6981e416dfec6155"/><dir name="Datamapping"><file name="Datafieldaccess.php" hash="eba7f16c5e03ebc4bca00b1dcfc5dbc7"/><file name="Datafieldtype.php" hash="1b9ac7be92d60718981d4b17be4dbeda"/></dir><dir name="Dynamic"><file name="Displaytype.php" hash="3c84fc4962406d0e4b974e1c0e40f6e4"/><file name="Gridview.php" hash="5f033792839adf57fb37b277dc662237"/></dir><file name="Fontpicker.php" hash="a943850c33229bc471ad9e94023347e3"/><file name="Fontsize.php" hash="7eb842a6f895b3f8a279c53fa961f173"/><dir name="Importer"><file name="Mode.php" hash="6a4649e9311b6aaf2997a434438dfb29"/><file name="Status.php" hash="97dfab5de2ada065f335ede94301c27c"/></dir><dir name="Lostbaskets"><file name="Interval.php" hash="e3ed7930ab2b4526c0d6d2b76784331c"/><file name="Intervalminute.php" hash="7777a4757d8fa8deebfa94cca9ac4053"/></dir><file name="Orderstatus.php" hash="b02456d91d6e27ae9f330c2b16b0fb8f"/><file name="Publicdatafields.php" hash="28c5710e4618e3ee90e8432a66aad31e"/><dir name="Reviews"><file name="Delay.php" hash="393704cfa870165ef3b3ba59e454953b"/></dir><dir name="Rules"><file name="Condition.php" hash="377f65c9b5ee85e44b2fb4ac72021770"/><file name="Type.php" hash="2ccd61f1f5a098e876b79ac24529d41b"/><file name="Value.php" hash="94d4df5777c098e5f04f5be125772ce5"/></dir><file name="Styling.php" hash="ff6d61cb3b533db33c26fd303befd09c"/><dir name="Sweettooth"><file name="Yesno.php" hash="8345e519b0e6b8eb75bca72a16e66014"/></dir><dir name="Sync"><dir name="Catalog"><file name="Attributes.php" hash="323d3400bb91b89ff880421823f54052"/><file name="Type.php" hash="265862a32c3d11509bf4f9ec3fac65fb"/><file name="Values.php" hash="30eedb9ac9f72edb94d9abef91b9fcfb"/><file name="Visibility.php" hash="84cc10186bfc1d00dd967027f6c2a413"/></dir><file name="Yesno.php" hash="00c1b84aeb7f10fafea884410e4e408a"/></dir><dir name="Transactional"><file name="Mode.php" hash="02f45553e3bc342ddd3f205993a5384e"/><file name="Port.php" hash="3dc1b86a9034e2098f98921109d7187f"/></dir></dir></dir><dir name="Api2"><dir name="Subscriber"><dir name="Rest"><dir name="Admin"><file name="V1.php" hash="388059f47bcfc581ab084676e5fa5953"/></dir></dir></dir></dir><dir name="Apiconnector"><file name="Client.php" hash="9efa9cd1261165abd0c10bfff9a62b83"/><file name="Contact.php" hash="4f041bb45a08415faef415f6f7b8e2fb"/><file name="Customer.php" hash="b83a108e33c28fd6ec8c46adde3cb446"/><file name="Test.php" hash="c1c0274bb9b707af55ebdd7a4263bf6e"/></dir><file name="Automation.php" hash="bfa50bdec7764e573391003773d5c70b"/><file name="Campaign.php" hash="08e6f1f963c05afac07288b66b305609"/><file name="Catalog.php" hash="4aa25dbe530cb3f2ad6c57d0a0f88cb4"/><dir name="Connector"><file name="Account.php" hash="11d1674896695b0cd15b891ab5165fb4"/><file name="Campaign.php" hash="6358f4a22cadd80a985865353eec0112"/><file name="Datafield.php" hash="616fa71b66833c5bb6abd5c3e24876f9"/><file name="Order.php" hash="9d8025ac4b78a6e6320705a24c45af0a"/><file name="Product.php" hash="d1d35faa5a0d9f7a4e6ec900b8413cfa"/><file name="Quote.php" hash="3f5a94f5de010c1a2c5e96c27e6b14f4"/></dir><file name="Contact.php" hash="6f48a12c66a13e8aa2b4ef4828aaade8"/><dir name="Controller"><file name="Observer.php" hash="b01537009a0061c4266fbf2f8c52251d"/></dir><file name="Cron.php" hash="ff2fcf008d5b4b16e4c1cd5616bfcc5a"/><dir name="Customer"><file name="Guest.php" hash="bd1e1b8f82f25d808700c33f726cb19a"/><file name="Observer.php" hash="1562634f26756a4a6956816ff879a835"/><dir name="Review"><file name="Rating.php" hash="a91b68302e270aa08ea3762f63225a80"/></dir><file name="Review.php" hash="f17180683194eca1e49782c36e310200"/><dir name="Wishlist"><file name="Item.php" hash="c5faac748a970502457e92dbb1f2df69"/></dir><file name="Wishlist.php" hash="598eddf031e56fa752bf64fe32773da5"/></dir><file name="Customer.php" hash="e1dd3b479c9bbf125cf1ec36206d1c7f"/><dir name="Email"><file name="Template.php" hash="1b6d1a45b2af72a7a0aa92a835f2c558"/></dir><file name="Email.php" hash="6cf3844e7f4c75c534a50486631ec10e"/><file name="Feed.php" hash="09151ffa241990ed28f4acb99c7d72ca"/><file name="Importer.php" hash="fe40d3282cfc73fb90a8d8403e1cce1d"/><dir name="Newsletter"><file name="Observer.php" hash="33111ce1f54e8549c76955bbdf8c7ee2"/><file name="Sub.php" hash="a8a3fd672f62288be68001b3dc0bd58d"/><file name="Subscriber.php" hash="53c2ba474048763384dbcd0a6d590488"/></dir><file name="Order.php" hash="012e78e61057a2a33285a68ec93a7999"/><file name="Quote.php" hash="7c13764201f798464dfbbb6123370b76"/><dir name="Resource"><dir name="Automation"><file name="Collection.php" hash="b0e7826c3c153cac3d9bcaed76d1d75e"/></dir><file name="Automation.php" hash="902f696eb797323101f1a3b4c9abf84d"/><dir name="Campaign"><file name="Collection.php" hash="736cc4414d45d0dca975101bc75919c6"/></dir><file name="Campaign.php" hash="b2d6c5e4396794efd97562f2f23f2f40"/><dir name="Catalog"><file name="Collection.php" hash="ef157bd81d50a49e94058b986aac5b2e"/></dir><file name="Catalog.php" hash="e447f04904e9b964359497c79a6ea1eb"/><dir name="Contact"><file name="Collection.php" hash="a6da2689f90a668b08a549a200f9c6a9"/></dir><file name="Contact.php" hash="e7c076d0f5efe25bdf2a94503820e4cb"/><dir name="Importer"><file name="Collection.php" hash="605d0e7091f309e6a5f6e2d15513c8bf"/></dir><file name="Importer.php" hash="565087fd0df9fa9c2f84cc5ac5e20e17"/><dir name="Order"><file name="Collection.php" hash="87cf24cbbd5d6c0141b7c401238b5c50"/></dir><file name="Order.php" hash="11fcf2784fb5f80594e6672d867c3d5a"/><dir name="Quote"><file name="Collection.php" hash="4d9ed530f86edb24c2d8e89db3c2b6b1"/></dir><file name="Quote.php" hash="598747a52e2a2d41dd7582bba69fef4a"/><dir name="Review"><file name="Collection.php" hash="c7e03d9bd662df5dd2a1a31e246b97e4"/></dir><file name="Review.php" hash="761eec4269e616ec356634d9346020b6"/><dir name="Rules"><file name="Collection.php" hash="b0da90dc943d5c6a8dd47d3fe245677c"/></dir><file name="Rules.php" hash="4b688c552b91487c22482f059cb49bc9"/><file name="Segment.php" hash="32b94ab790a3508658a663d2e2361065"/><file name="Setup.php" hash="442dda9eabbd1fb6e88e7d2baaa2a28c"/><dir name="Wishlist"><file name="Collection.php" hash="6d75820d8b8d5ed1af2fc77522205a8d"/></dir><file name="Wishlist.php" hash="6047d392299414bbf17c9aaf83a159ff"/></dir><file name="Review.php" hash="e35b2eae08be29cf58686e8b1ab3854e"/><file name="Rules.php" hash="ab5ece927a411a2f77e5c515555f814f"/><dir name="Sales"><file name="Observer.php" hash="e9aa80219d3af19b2c8b0aa482e999ae"/><file name="Order.php" hash="cd5abf018a37abdccc60a595b5e00217"/><file name="Quote.php" hash="3c6dbd5722f6d2e50832b8ea14f726c1"/></dir><dir name="Sms"><file name="Campaign.php" hash="79714d233916229b905a081fbda164c5"/></dir><dir name="Sweettooth"><file name="Observer.php" hash="36ce70503cd8abbafd8b5340a06d2072"/></dir><file name="Wishlist.php" hash="5b14130bf3c4975f6c9335c5a1a993d4"/></dir><dir name="controllers"><dir name="Adminhtml"><file name="ConnectorController.php" hash="1fcd0cc5396b18a78b00ef5cb17952f9"/><dir name="Email"><file name="AutomationController.php" hash="12ebc887254ac470d418492eb0bacba8"/><file name="CampaignController.php" hash="dbe5e2bbfeab5b33315dc63f9c5ee7ad"/><file name="CatalogController.php" hash="e43c7a33bec07c1cedbd73a0aa9c54af"/><file name="ContactController.php" hash="b9c342c297d243661cc9a8e58f778257"/><file name="DashboardController.php" hash="13572a0ae47a09ed1cd4af0b870e8320"/><file name="ImporterController.php" hash="21540bb7f839cafcc6f70b7bee5b2774"/><file name="OrderController.php" hash="64b719cf2a80847b82a7849be7ffe68c"/><file name="QuoteController.php" hash="4167890a19fa6716e64a79afca55e2e3"/><file name="ReviewController.php" hash="13d74d52e160555e0c029a360d562a51"/><file name="RulesController.php" hash="6e33826563242604e83fe25344f7bf3e"/><file name="StudioController.php" hash="c24e13f8fb26805937b71d8d3eebcddc"/><file name="WishlistController.php" hash="b4d3a20f38a0a45886cc7dfa963894dc"/></dir><file name="RulesController.php" hash="629d3517648602792cb43c71c97dc0c9"/><dir name="System"><dir name="Email"><file name="TemplateController.php" hash="98d9c1f5aae8f94de0102ccdcdb2fe7c"/></dir></dir><dir name="Widget"><file name="ChooserController.php" hash="7607cec3305ab9d4381c89fa12703a64"/></dir></dir><file name="AjaxController.php" hash="cd16d360815bfcf72b77a78d9dc938f0"/><dir name="Customer"><file name="AccountController.php" hash="4b78330a34d2985fa2526c935073a65f"/><file name="NewsletterController.php" hash="f7425d9524504163d6e91ae3fa640c88"/></dir><file name="DynamicContentController.php" hash="c8e6dd34bfadc36701ce15478c79cddd"/><file name="EmailController.php" hash="c9a9a843d2f8e386a5669fd27c1cd79c"/><file name="FeefoController.php" hash="f3613defc5132cdabc5536483ae75bb5"/><file name="ProductsController.php" hash="d54c85bc071a0fcda6a8e5969e3c5f63"/><file name="QuoteproductsController.php" hash="3867af36e829e4cf22d81a4d96757d6a"/><file name="ReportController.php" hash="c8c670deae7bec4e17bb3251015dfffb"/><file name="ResponseController.php" hash="b30cec90880bf1646cda32561f0edff3"/><file name="WishlistController.php" hash="a8d20ad1304bf13a5de8847e726d9ee5"/></dir><dir name="etc"><file name="adminhtml.xml" hash="6cceb9fd48260c046b190bc8002df639"/><file name="api2.xml" hash="e6be0fdc4206cb242f22b2335476b497"/><file name="config.xml" hash="ec90fc12ef21125e84e7fb902d59e39e"/><file name="files.yaml" hash="f84a8e4814f128cd57cabe1f64f5360e"/><file name="system.xml" hash="a5ae837b7a5dd269d2009c21739b003f"/></dir><dir name="sql"><dir name="email_connector_setup"><file name="mysql4-install-0.1.0.php" hash="26042b2a6d9cd6241d52f826188483f4"/><file name="mysql4-install-3.0.0.php" hash="0874c77e934295ba2c68f9d553eb90ba"/><file name="mysql4-install-4.0.0.php" hash="8b534d2b2f5e2ef7443108fdf57ebdf0"/><file name="mysql4-install-5.0.0.php" hash="911128612ce03cd67068bb821af024f0"/><file name="mysql4-upgrade-1.1.1-1.1.2.php" hash="7fae25a8ae47fe0ba692076ac04237a4"/><file name="mysql4-upgrade-1.1.2-1.5.0.php" hash="34ac896f6e681c56d8d2dd6bf411215e"/><file name="mysql4-upgrade-1.5.0-2.0.0.php" hash="75020a02255ea63e9bc4599d85ab4e2f"/><file name="mysql4-upgrade-2.0.0-2.0.1.php" hash="2f71a10d19eddd97c9eba9af840e4f09"/><file name="mysql4-upgrade-2.0.1-2.0.2.php" hash="6b7af944ebc76328d16223cdb245c568"/><file name="mysql4-upgrade-2.0.3-2.0.4.php" hash="97ff7b08533c33b97398b91ec68ceaf1"/><file name="mysql4-upgrade-2.0.4-2.0.5.php" hash="f2080852fd1e0512da9bf1074767a9b3"/><file name="mysql4-upgrade-2.0.5-2.0.6.php" hash="438ea31fe7b8ed88160ae8c231ec9ccc"/><file name="mysql4-upgrade-3.0.1-3.0.2.php" hash="7c53b291487987ae73929acea576bc51"/><file name="mysql4-upgrade-3.0.3-3.0.4.php" hash="7adaa83b6da0000ca7d1491c3af76682"/><file name="mysql4-upgrade-3.0.4-3.0.5.php" hash="c08939ca13713f335bacc593d0e780d3"/><file name="mysql4-upgrade-3.1.2-3.1.3.php" hash="f5ba2c14acd01144297fab7070558ddd"/><file name="mysql4-upgrade-3.2.1-3.3.0.php" hash="1b6540a260f25ae849f433cb60f0c39d"/><file name="mysql4-upgrade-3.3.0-3.3.1.php" hash="df5afd27a3d0e542f85f762af28d5c85"/><file name="mysql4-upgrade-3.3.2-3.3.3.php" hash="1707de69aa9294821195cfafa1a1798e"/><file name="mysql4-upgrade-3.4.0-4.0.0.php" hash="39b55697d152529c4ba32ff6b9cffa48"/><file name="mysql4-upgrade-4.0.0-4.1.0.php" hash="fd8ffbebbbc4d04a2b9e1c90344ae6cc"/><file name="mysql4-upgrade-4.1.3-5.0.0.php" hash="c762c1263e3595162100ff48db52597b"/><file name="mysql4-upgrade-5.0.0-5.0.1.php" hash="a8603a251c822c67d0afde4b64d82da6"/><file name="mysql4-upgrade-5.0.4-5.1.0.php" hash="4640e2ea0587c2b3ead18cfa29b5fa04"/></dir></dir></dir><dir name="Mailcheck"><dir name="Helper"><file name="Data.php" hash="589b8909f08143ad44234f05911488df"/></dir><dir name="etc"><file name="config.xml" hash="841542418fa8e50cb53a3bde50ce38f4"/><file name="jstranslator.xml" hash="d0f175944d2c14badd2cade8d4a40585"/><file name="system.xml" hash="7d64665436e5eb104a1316c32338ec72"/></dir></dir></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="connector.xml" hash="4a5ad4efa2ea66fe9deccb81196582a1"/><file name="mailcheck.xml" hash="ff97a71e8124f8e6e55d951124addace"/></dir><dir name="template"><dir name="connector"><file name="additional-newsletter-pref.phtml" hash="db1251a0475c0947fd8e5854da4fd9ae"/><file name="basket.phtml" hash="fef3c4961495d63ae2a99c77dde591ff"/><file name="coupon.phtml" hash="2b5164dcd30b0311ed90e2e523403d65"/><dir><dir name="customer"><file name="stats.phtml" hash="b26f6331faa6b3e662b14e5bde8c66d8"/></dir><dir name="feefo"><file name="reviews.phtml" hash="cd1dc08242588b1427534326eb7525ab"/><file name="score.phtml" hash="74d48f68f5d0ec044a8c067fa7f3c631"/></dir><dir name="product"><file name="list.phtml" hash="a07f871bc93483fe16d9271f01a5dfef"/><file name="nosto.phtml" hash="fe3d6efaca5d739374c29046c87c8a86"/><file name="price.phtml" hash="4d0674f2d03160617536338744330ff4"/></dir></dir><file name="email_capture.phtml" hash="faf17eaeb824877f5998f1e3ab91504d"/><file name="email_capture_init.phtml" hash="f485003272b78400308d3af73574f4a7"/><file name="review.phtml" hash="38d28e9de70c280c73bcf25dd604581b"/><file name="roi_code.phtml" hash="108934652f443d0328a60893cad70742"/><file name="tracking_code.phtml" hash="1bbccb72db1a769ef8e14e0df2c9febd"/><file name="wishlist.phtml" hash="a891cd526661c4c6ec42c94af22b4bd0"/></dir><dir name="page"><file name="blank.phtml" hash="7a10ef1534ebe3b449cf051799e5a066"/></dir><dir name="mailcheck"><file name="scripts.phtml" hash="adbf073bb2cb944c44b11d79bcca1eb5"/></dir></dir></dir></dir></dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><dir name="connector"><file name="email.xml" hash="907e33ef044db87b0cbdadd480c5c43a"/></dir></dir><dir name="template"><dir name="connector"><file name="appcues.phtml" hash="11bb1143b5334bbcbf182d17a118f281"/><file name="beacon.phtml" hash="18d507b6041ac64b167d27a606fdcb83"/><dir><dir name="customer"><file name="stats.phtml" hash="0b842d3ccaa1cc33098be44a7935f97f"/></dir><dir name="dashboard"><file name="accountbar.phtml" hash="e01c432f6690613fd2845769777830cf"/><file name="content.phtml" hash="9e5c843b6323ea80c410662fb4f39793"/><file name="logs.phtml" hash="197596058232e7abd79dbbba860268cb"/><file name="status.phtml" hash="eb2fb3ef2d76df71fd453f1ddb376226"/><dir name="tabs"><dir name="analysis"><file name="index.phtml" hash="a9ef11d470dae139ad5243fc1bc91431"/><file name="rfm.phtml" hash="8129887ef234cd4571aa28c5fd124d3b"/></dir><file name="data.phtml" hash="bd7952625a3697cf4e5ef3cd0feb0a80"/><dir name="general"><file name="index.phtml" hash="68fa10c2aeef745d80b60317c9461a94"/></dir></dir><file name="tabs.phtml" hash="8df8befdd2f2300b177aacaca5d8a278"/></dir><dir name="system"><dir name="config"><file name="createdatafield.phtml" hash="a1a571fa0957d7fadf346d1b89c5a0b0"/></dir></dir></dir></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Dotdigitalgroup_Email.xml" hash="8745c0b2eae08783b6203a613acdbcb8"/><file name="Dotdigitalgroup_Mailcheck.xml" hash="247272e2cc981e8b91af95962b0f0470"/></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="connector"><file name="config.css" hash="433bf71f40517a667ee9aba495f1746c"/><file name="dashboard.css" hash="08e2c6ae799757fd68a85781311f2b97"/></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="js"><dir name="mailcheck"><file name="init.js" hash="585e518d5d2dd2d0f50243f51a3c881b"/></dir></dir></dir></dir></dir></target><target name="magelocale"><dir name="en_US"><file name="Dotdigitalgroup_Email.csv" hash="67022e746e28d74b86509b70f336db4f"/></dir></target><target name="mageweb"><dir name="lib"><dir name="Raygun4php"><dir><dir name="Exception"><file name="UnsatisfiedDependencyException.php" hash="32b7fff3854ba20107b89a100550dc41"/><file name="UnsupportedOperationException.php" hash="951d8a9fc2bdfae0acc432ea6dabffa4"/></dir></dir><file name="README.md" hash="0aed7c6a52f358016b2c1b8f5e4e35ed"/><file name="Raygun4PhpException.php" hash="f6d4ef9f38a74578b115fbdf6e2fd3c5"/><file name="RaygunClient.php" hash="f9511057d3280a3a6d02b9b2a1517fd1"/><file name="RaygunClientMessage.php" hash="df9bd918ff13b50146b252208a5ce737"/><file name="RaygunEnvironmentMessage.php" hash="a7dff1914fcb7f6a61577b758edba47e"/><file name="RaygunExceptionMessage.php" hash="fcf7e3cbf9fbafb3ff4a6d56135a190d"/><file name="RaygunExceptionTraceLineMessage.php" hash="8aa87f7ddee8c00855737e85bbcb29cd"/><file name="RaygunIdentifier.php" hash="49461fa525594b15f3a350fd1da1c2a0"/><file name="RaygunMessage.php" hash="865eaa58577265fb52a85ee861102625"/><file name="RaygunMessageDetails.php" hash="2403453f658d7a943bd476e7fad186d7"/><file name="RaygunRequestMessage.php" hash="038703138dcd19aefbc9a7e44bd6f198"/><file name="Uuid.php" hash="9db740992b0dad17bf2047d13565b428"/><file name="cacert.crt" hash="47961e7ef15667c93cd99be01b51f00a"/></dir><dir name="connector"><dir><dir name="feefo"><file name="feedback-no-th.xsl" hash="239c40764293a65b85d9f86479ced8b6"/><file name="feedback.xsl" hash="7167570192e48fdf57baa9c2cf56986b"/></dir></dir></dir></dir><dir name="js"><dir name="connector"><dir><dir name="procolor-1.0"><dir name="img"><file name="procolor_win_bars.png" hash="a8e41fdddd2253309e0b3e5154668c24"/><file name="procolor_win_bg.gif" hash="c0558cecd0e0ffb9ca89efe00f422261"/><file name="procolor_win_bg.png" hash="4e2a34cc64888fe264fcf6249dfe40da"/><file name="procolor_win_boxes.png" hash="e971c1ca87a0cb52d32408270d00a0da"/><file name="procolor_win_close.png" hash="20a8bb9433157962ab25d86d28d088a3"/><file name="procolor_win_drop.png" hash="9ddce741de330573f082ffe83005d691"/><file name="procolor_win_palette_raw.png" hash="ea98dde528e987029af6e24dbef53922"/><file name="procolor_win_sel_circle.gif" hash="3674b62db5a6eaa4dcedb0749dde4106"/><file name="procolor_win_sel_circle.png" hash="d76195d1777e9a14ebc1a242ab712037"/><file name="procolor_win_sel_rect.gif" hash="b74a72aaf1ea21d55b8751079f283537"/><file name="procolor_win_sel_rect.png" hash="5513589e2b6dc1a980a4e65a746005d0"/><file name="procolor_win_wheel_black.png" hash="62353005bb70bbfa8ffd700112d72582"/><file name="procolor_win_wheel_rgb.jpg" hash="afdd3852c3788a58794ddf1de9557fd8"/></dir><file name="procolor.compressed.js" hash="79e463efad21212e4096d40b9e17d96c"/><file name="procolor.js" hash="93ec3cb6a0356cce4cf8e51006dfaeec"/></dir></dir><file name="selector.js" hash="5dc1900967679a41c70ed5f1755240e2"/></dir><dir name="mailcheck"><file name="magentoMailcheck.js" hash="b4eaabac0b6e8753e09ab6ea449e6519"/><file name="mailcheck.min.js" hash="25966edf6e585822063b48dd34bcee9b"/></dir></dir></target></contents>
32
  <compatible/>
33
  <dependencies><required><php><min>1.5.2</min><max>6.0.0</max></php><extension><name>curl</name><min>7.15.1</min><max>7.30.0</max></extension></required></dependencies>
34
  </package>
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>dotmailermagento</name>
4
+ <version>5.3.0</version>
5
  <stability>stable</stability>
6
  <license uri="http://opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
7
  <channel>community</channel>
8
  <extends/>
9
  <summary>Integrate your ecommerce with dotMailer's powerful triggered email marketing and convert more visits to sales.</summary>
10
  <description>Connector Integration for Magento, allows to manage and synchronise customer data and lost baskets.</description>
11
+ <notes>Magento code audit changes x3&#xD;
12
+ Support for dotmailer regions&#xD;
13
+ Bug fixed for fatal error on manual sync&#xD;
14
+ Email validation on ajax call&#xD;
15
+ Escape logs before showing </notes>
16
+ <authors><author><name>Calin Diacon</name><user>cdiacon</user><email>calin.diacon@dotmailer.com</email></author><author><name>Adeel Qamar</name><user>adeelq</user><email>adeel.qamar@dotmailer.com</email></author></authors>
17
+ <date>2016-02-17</date>
18
+ <time>17:05:31</time>
19
+ <contents><target name="magecommunity"><dir name="Dotdigitalgroup"><dir name="Email"><dir name="Block"><dir name="Adminhtml"><dir name="Automation"><file name="Grid.php" hash="7059908834fdfed28182e2fe672e0d33"/></dir><file name="Automation.php" hash="7e1b876bf5619cb4533fb935b67b7103"/><dir name="Campaign"><file name="Grid.php" hash="ed3b11f23f8029c7af4dd63f5dceed0e"/></dir><file name="Campaign.php" hash="1b09266adba5191df1d39330e4832d41"/><dir name="Catalog"><file name="Grid.php" hash="e5545ec424a1011117e869984e90a754"/></dir><file name="Catalog.php" hash="f9d97d5ff57987714788ef0511405d46"/><dir name="Column"><dir name="Renderer"><file name="Delete.php" hash="2741323edb5151b4211244ccf115d796"/><file name="Imported.php" hash="894d7ead94e40d20cabb082346830c35"/><file name="Reset.php" hash="f85c3f41af7e6929dc169fb231e24162"/><file name="Script.php" hash="d4f0356fc226028af5857549733a84d3"/><file name="Status.php" hash="92c7256da2ca42ec9c11c255e2cd4e51"/><file name="Sync.php" hash="c85a2e4784b73e709bfe82468a4200b0"/><file name="Website.php" hash="ca2c1f34b86e5ccf022fdc395cf07084"/></dir></dir><dir name="Config"><dir name="Automation"><file name="Customdatafields.php" hash="7ae2aef7d636c19dd2fcc9ba57ab4635"/></dir><file name="Customdatafields.php" hash="ee28b3fe691ade18fcc217b330d8dac6"/><dir name="Rules"><file name="Customdatafields.php" hash="c56d50e7eb3854ec67e026023d38d4d7"/></dir><file name="Select.php" hash="b92091e08d7e24032be9b8aea033b81d"/></dir><dir name="Contact"><dir name="Edit"><file name="Form.php" hash="1d0f6eba1f3a59c38ccfc01b3d5eb447"/></dir><file name="Edit.php" hash="051408ea54be21761e1ab2210ea0bc30"/><file name="Grid.php" hash="7d1f44fcfb247e899104819b8e1ca3b8"/></dir><file name="Contact.php" hash="ecf231c9d8eb789a4f0863f92d323c38"/><dir name="Customer"><dir name="Tab"><file name="Stats.php" hash="ee77ed9c68e790842d308eab4dd8e8c2"/></dir><file name="Tab.php" hash="507172f634c4db4350fb0288464a348a"/></dir><dir name="Dashboard"><file name="Switcher.php" hash="dac118060238aef3b2a4f60d11c0a3eb"/><dir name="Tabs"><dir name="Analysis"><file name="Abandonedcarts.php" hash="b5ca264c215c98545c882646f4d44bd2"/><file name="Customer.php" hash="01ab9dc18bce37c70de130393ed85902"/><file name="Rfm.php" hash="1d163726953644043e37ace0061592d1"/><file name="Sales.php" hash="6abc5d3bb6f1e668ffa696cd34e3adf4"/><file name="Subscriber.php" hash="4dc3d4a2553a64befd5a94cd64d9658e"/></dir><file name="Analysis.php" hash="b2d6a5a2bab0c8117b89d0f6e91051e2"/><dir name="General"><file name="Data.php" hash="f55fbdda9c380b3ad01c4672e05fcea7"/></dir><file name="General.php" hash="d79b87c420c7c708f7ef86fe18d244c0"/><file name="Logs.php" hash="1fc8ae9c5e8370718f70075afa8e3d81"/><file name="Status.php" hash="7eb580c5c3beeca939830d9f0ee7240b"/></dir><file name="Tabs.php" hash="8da89ad9d407a489b04ae47924e0b30f"/></dir><file name="Dashboard.php" hash="1f06a5dcb5a934d239c9627b9bbea822"/><dir name="Importer"><file name="Grid.php" hash="8de43bab33f75c0f64198709dbb1b5e9"/></dir><file name="Importer.php" hash="833d5c2a48f40c9fa27aed4bbd74bd2c"/><dir name="Order"><file name="Grid.php" hash="96e62a99c8295f442377124d37a114f2"/></dir><file name="Order.php" hash="dc6b0cd9c9ac9d8c291f72dbbd4c1a15"/><dir name="Quote"><file name="Grid.php" hash="241108bfb525bbbad0c543fef7673546"/></dir><file name="Quote.php" hash="edcacdf20da2f046ab4654dceef2399f"/><dir name="Review"><file name="Grid.php" hash="85919ad9bfc19eec32e673a699f850c5"/></dir><file name="Review.php" hash="822d452ee01499b4b493e19e6d810afd"/><dir name="Rules"><dir name="Edit"><file name="Form.php" hash="13f8b943873d30609ca3a2af6c72f502"/><dir name="Tab"><file name="Conditions.php" hash="1a11c398065666e0b77e0bf30827c81e"/><file name="Main.php" hash="aaf575a2db857eaac0f9e5006064fc3d"/></dir><file name="Tabs.php" hash="99c7258e593bff52b3976c359ad4235a"/></dir><file name="Edit.php" hash="bf987a05ecfc0c7540c6f86275582733"/><file name="Grid.php" hash="6a9077456ab1b8b72ed26406af336437"/></dir><file name="Rules.php" hash="4dc3b7ac89293d996f3e2a8fd3d12eb9"/><dir name="Sales"><dir name="Order"><dir name="Creditmemo"><file name="View.php" hash="ab9cfcc946e03f8b8fdf33d606222427"/></dir></dir></dir><dir name="System"><dir name="Advanced"><file name="Deletecontactids.php" hash="293320187b8ec5514ff69e027a808321"/><file name="Notification.php" hash="0ea9608a09ae2dad6e4c78738c583c2d"/><file name="Reimportcatalog.php" hash="a497ac63a609440dbd723bc3a2a2819f"/><file name="Reimportorders.php" hash="d29f38c149d2fbfb6b8589491b050247"/><file name="Reimportquotes.php" hash="6089df53be37afe6c4f9f10147730bc7"/><file name="Reimportreviews.php" hash="2c14cd482a448be01c8ceb3d0a9c7dd5"/><file name="Reimportsubscribers.php" hash="43b98ca37accc978ba8e9bd087b9a2c7"/><file name="Reimportwishlists.php" hash="f6bce4f06bc91f69242bd2f59220285d"/><file name="Reset.php" hash="41053dc403c95328402c0e3886307859"/><file name="Resetcustomersimport.php" hash="21bab61f962ed4a3a3c14656781c4e3b"/><file name="Runcatalogsync.php" hash="ecaa5a7b8ebc78a5f84f0870a90a0cd9"/><file name="Runcontactsync.php" hash="747b338c4fe3d3603ce60a68b7e1d5c4"/><file name="Runimportersync.php" hash="e2eee8773c0019dd7e8c5d9553a75d39"/><file name="Runordersync.php" hash="58d7672919b3387d73472e6a10a850af"/><file name="Runquotesync.php" hash="c4bbc5616a080b5dbaad02717225f507"/><file name="Runreviewsync.php" hash="dafef47cb94f595af038698f1f233421"/><file name="Runsubscribersync.php" hash="090707901889d4bae741fe59747cfbff"/><file name="Runwishlistsync.php" hash="8453adae849a6ad9aaecb1f27dc46b72"/><file name="Setupdatafields.php" hash="48373eb08bb90bf4417c830723a4df11"/><file name=".DS_Store" hash="194577a7e20bdcc7afbb718f502c134c"/></dir><file name="Ajaxvalidate.php" hash="2647705ecfcd6c1cd39489febd38b490"/><dir name="Automation"><file name="Connect.php" hash="6a104d54949f4dd845e2dd273ec59b59"/></dir><dir name="Config"><file name="Addressbook.php" hash="ac68b4c742413e5cdcce9c5c78e836a9"/><file name="Colorpicker.php" hash="a22c6d50728e2edaf43399093b1f4a61"/><file name="Datafield.php" hash="5b30377c5423fcccd424c4ca0ad3224f"/><file name="Enterprisevalidator.php" hash="92b60f1f8ca067887dc17afac7be6f24"/><file name="Resetcontacts.php" hash="22ef003f51db85bed2ebb85c5834b352"/><file name="Resetguests.php" hash="002ced7daec912bdad0890b26afcc4a0"/><file name="Resetsubscribers.php" hash="d5be1a595576ea63883c0249be835c7f"/><file name="Validator.php" hash="995386364c7434ad50bb87477c46f6eb"/><file name="Waitingfield.php" hash="7ffe44f6ae4b879336344882ba7e020e"/><file name="Wrapper.php" hash="2813c1d11255f10bc1ff804650a634b7"/></dir><dir name="Dynamic"><file name="Addressbookbutton.php" hash="744ca8346bf67fb7c7b96f92ad67e993"/><dir name="Basket"><file name="Crosssell.php" hash="aa00e37f15d822bf8448fbe79d70d1d5"/><file name="Related.php" hash="a1b0f467eee4513be21fdc58bdf6e59e"/><file name="Upsell.php" hash="dc7a0dbea77d7c88c9fbb660131d1773"/></dir><file name="Bestsellers.php" hash="47d8b2f89290c034c1c74ae0dad5463a"/><file name="Couponinfo.php" hash="646acc6eb041db4041c1df04e2e2fe26"/><file name="Creditmemonew.php" hash="c36bcff6b33f441b11cc5a45a5abe60d"/><file name="Crosssell.php" hash="e1085bb71156dcb1bb012044c5d4a076"/><file name="Datafieldbutton.php" hash="369eec55df4d51ce367abb9c81402976"/><file name="Fallbackchooser.php" hash="28601a2fb0407ece1269a9e3d95757de"/><file name="Fallbackcontainer.php" hash="e3044fc492790758b646a9a656ea1f79"/><dir name="Feefo"><file name="Reviews.php" hash="8a32c6e10d93621fe63c6307c5da17da"/><file name="Score.php" hash="a5a2b4a16e1645107c9dd360dbf03a6b"/></dir><file name="Gridlist.php" hash="9329c6aa0ab3118b8f03af66761f038d"/><file name="Lostbasket.php" hash="506dd83329b4b342af7239a419925a93"/><file name="Manualchooser.php" hash="d9e2e198bb53fdf4a329915db7d07281"/><file name="Manualcontainer.php" hash="689696990974ce7cd1db3df3b73bb864"/><file name="Mostviewed.php" hash="cd49997a51f34aa36470dae896336fee"/><file name="Nosto.php" hash="ec90847ea7170baf8bc197057a13dcac"/><file name="Productpush.php" hash="2623fd4a941ff0e06504dc87b877bb50"/><file name="Recentlyviewed.php" hash="b73e60e76daaca15891e3cbc3700182c"/><file name="Related.php" hash="8b8022dac18181a3ab11837be34beced"/><file name="Review.php" hash="02a962eaf8231981f3d999be9a904c77"/><file name="Upsell.php" hash="898fe5ffc06063450034a8980f54db33"/><dir name="Wishlist"><file name="Crosssell.php" hash="c5c191438715b4f8ad36c62b705cfbb5"/><file name="Related.php" hash="d94412911bb7b85ce73718adc244d6e8"/><file name="Upsell.php" hash="d79aed858a2f4c2a29299fe8868d7ef7"/></dir><file name="Wishlist.php" hash="46c433fda7ec07c82025d88014d93471"/></dir><file name="Emailapivalidate.php" hash="d2b05128440217064792b82e0911e1e6"/><file name="Installation.php" hash="03707c42dcca01e1c156b48a6246a74c"/><dir name="Sms"><file name="Smsmessagefour.php" hash="d5f61111d9c58ee99dc10cb53afea060"/><file name="Smsmessageone.php" hash="00b65d2fcd16c11b93db8fff1ffda069"/><file name="Smsmessagethree.php" hash="eec8120e729a8dd0d248e184564eefcd"/><file name="Smsmessagetwo.php" hash="5f9fa9aca352c389a2cd75ef4366baed"/></dir><dir name="Url"><file name="Creditmemoupdate.php" hash="07113ed35f709e2e65c4c61521e560a8"/><file name="Creditmemoupdateguest.php" hash="034e033269cf142f930b6bff1c36d10a"/><file name="Customerconfirmation.php" hash="260a57d13b20cda7229eb33c9a73559c"/><file name="Customerconfirmed.php" hash="1743ddf8f308eb375f44ac32da3c3c91"/><file name="Customernew.php" hash="2878ef6c84303614ac3426838f8b65d5"/><file name="Invoiceupdate.php" hash="d4eb69e2e0f5e3b7e9ea1da5d3adb578"/><file name="Invoiceupdateguest.php" hash="1ebd3c14e380043fa16b7e36d821d15c"/><file name="Newcreditmemo.php" hash="20b55e9ce5371a371ff0c94bd0fda178"/><file name="Newcreditmemoguest.php" hash="5bd16181c61c1bfb98e6eea3e1c7281f"/><file name="Newinvoice.php" hash="ff95c29ff62359ab2d0366098029a704"/><file name="Newinvoiceguest.php" hash="d05a14bb52facf8635c89642165e39ec"/><file name="Neworder.php" hash="f67882d758909fda7364fa04cb51e2f0"/><file name="Neworderguest.php" hash="ac3b96283e7e5e3ce68e35bf84f9043d"/><file name="Newshipment.php" hash="f059c430fb155c8f9da10b6dd4c67e01"/><file name="Newshipmentguest.php" hash="f73d439fb93eb7f20289e021b10b69a8"/><file name="Orderupdate.php" hash="1c27f18bf9ff58c1f0668539b7ca6896"/><file name="Orderupdateguest.php" hash="d4a2479efa67e900fbe69f6954707076"/><file name="Shipmentupdate.php" hash="f6f2fe91a159b8bf9c70c3a8773a058c"/><file name="Shipmentupdateguest.php" hash="f0ce96ef2e562cae6d155e4d38f1dcac"/></dir></dir><dir name="Widget"><dir name="Chooser"><file name="Product.php" hash="b2f77407f30411d5447fbd1ffac3e415"/></dir></dir><dir name="Wishlist"><file name="Grid.php" hash="fc60afe27facac4a3fb4677ba1aa2fbe"/></dir><file name="Wishlist.php" hash="74f5fb49b057af35ee320f442c664a6b"/></dir><file name="Basket.php" hash="74854e35887abe27614bc4f3054fd40d"/><file name="Coupon.php" hash="87809cee79ae38e413f9547abe6e928f"/><dir name="Customer"><dir name="Account"><file name="Books.php" hash="4513840169af5af3ecb5682111c8798b"/></dir></dir><file name="Edc.php" hash="5a9937398bd001e4cccb4620cedf624a"/><file name="Feefo.php" hash="69eae3b3ef72a610ef7671347095127e"/><dir name="Order"><file name="Creditmemo.php" hash="3b8be146530d2ef5b408c91dda73dd9d"/><file name="Invoice.php" hash="0e2e69a44e6952e4803afe0778b57567"/><file name="Shipping.php" hash="dec79e54b6029c8a478b519f99470e72"/></dir><file name="Order.php" hash="c01fe53687b795fbba54131f06080c65"/><file name="Products.php" hash="d38365bc368c1d6e8e867de39c4a1495"/><dir name="Recommended"><file name="Products.php" hash="507a2ab57f718870064272084cf58bb6"/><file name="Wishlistproducts.php" hash="943a5b7697bacb899cb4e81a587fe334"/></dir><file name="Wishlist.php" hash="c0adad8c73b8cbf50596c202032422e3"/></dir><dir name="Helper"><file name="Config.php" hash="3b4d61db65c5af6dd237cecd87cb0bbd"/><file name="Dashboard.php" hash="19fb73389f2ef6a65c83325e8059de67"/><file name="Data.php" hash="03f77d7a8253c789e5e8db892abfd139"/><file name="File.php" hash="93f15c70a6babbc8174098bcac0758be"/><file name="Recommended.php" hash="d77533b7b110828e07f7a9d9a80606fe"/><file name="Transactional.php" hash="a399ced08b031a9d5f4cdab3d28db6a6"/></dir><dir name="Model"><dir name="Abstract"><file name="Rest.php" hash="9dcbb422c4bb28bab2e88c9ba0b21cba"/></dir><dir name="Adminhtml"><dir name="Dashboard"><file name="Content.php" hash="a415e7d3fad5d27ce27f6172a50d4997"/><dir name="Tabs"><dir name="Analysis"><file name="Abandoned.php" hash="915c2e848bdb8c2629a90d6d4326b8e8"/><file name="Customer.php" hash="f56d20e6620589c31b8468d8f06d975e"/><file name="Orders.php" hash="9ac9df6980ecedcdcd2567656ebc3a4c"/><file name="Rfm.php" hash="1bd137928d701485c995b6a236ea1ef6"/><file name="Subscriber.php" hash="1b44da59332b7f233499abe3408ed70a"/></dir></dir></dir><file name="Observer.php" hash="6dd036535d2effc5d9d39ed79d5aed58"/><dir name="Source"><file name="Addressbooks.php" hash="af92437b4ed2a7fc6fede455420f11c0"/><file name="Addressbookspref.php" hash="be0c23d42b1a30f9c719c382be865e8d"/><dir name="Advanced"><file name="Abandonedlimit.php" hash="cd280151523091f85af89b0e22ff0abf"/><file name="Attributes.php" hash="9d08d5ab758447987c7ab9ba6d5c45b2"/><file name="Cronexpressionsone.php" hash="3877dd7041189aedf2c972b4361d2134"/><file name="Cronexpressionstwo.php" hash="0a97c58dff29e17a8448ff0c17e393d7"/><file name="Frequency.php" hash="28292fba0dd62bb6730ccd7bfa2b8e70"/><file name="Quoteattributes.php" hash="a1ddcbd001b9cd5b40157ba3c9435bef"/><file name="Transdata.php" hash="5c670a26d641c4b7e73bbaff48af3dd6"/></dir><file name="Attributes.php" hash="4b079aac1a25bec3c7c7e4152a66daa8"/><dir name="Automation"><file name="Programme.php" hash="7ac64e4f820d85d20be5dc6b9b6571f1"/></dir><file name="Campaigns.php" hash="35014267c18ab36cd6d849318914185e"/><dir name="Contact"><file name="Imported.php" hash="f44a906cb28c81c709c649b6ed8a0ccd"/><file name="Modified.php" hash="30e2f9e3d55ecd65a3cd0be1136db38d"/></dir><dir name="Customer"><dir name="Attributes"><file name="Select.php" hash="a77542918db6d3ba1c0298b475e8e9ed"/></dir></dir><file name="Datafields.php" hash="0a12d3c9c63476ea6981e416dfec6155"/><dir name="Datamapping"><file name="Datafieldaccess.php" hash="eba7f16c5e03ebc4bca00b1dcfc5dbc7"/><file name="Datafieldtype.php" hash="1b9ac7be92d60718981d4b17be4dbeda"/></dir><dir name="Dynamic"><file name="Displaytype.php" hash="3c84fc4962406d0e4b974e1c0e40f6e4"/><file name="Gridview.php" hash="5f033792839adf57fb37b277dc662237"/></dir><file name="Fontpicker.php" hash="a943850c33229bc471ad9e94023347e3"/><file name="Fontsize.php" hash="7eb842a6f895b3f8a279c53fa961f173"/><dir name="Importer"><file name="Mode.php" hash="e41602dcc5d2a22466edaf6b43d8136f"/><file name="Status.php" hash="97dfab5de2ada065f335ede94301c27c"/></dir><dir name="Lostbaskets"><file name="Interval.php" hash="e3ed7930ab2b4526c0d6d2b76784331c"/><file name="Intervalminute.php" hash="7777a4757d8fa8deebfa94cca9ac4053"/></dir><file name="Orderstatus.php" hash="b02456d91d6e27ae9f330c2b16b0fb8f"/><file name="Publicdatafields.php" hash="28c5710e4618e3ee90e8432a66aad31e"/><dir name="Reviews"><file name="Delay.php" hash="393704cfa870165ef3b3ba59e454953b"/></dir><dir name="Rules"><file name="Condition.php" hash="377f65c9b5ee85e44b2fb4ac72021770"/><file name="Type.php" hash="2ccd61f1f5a098e876b79ac24529d41b"/><file name="Value.php" hash="94d4df5777c098e5f04f5be125772ce5"/></dir><file name="Styling.php" hash="ff6d61cb3b533db33c26fd303befd09c"/><dir name="Sweettooth"><file name="Yesno.php" hash="8345e519b0e6b8eb75bca72a16e66014"/></dir><dir name="Sync"><dir name="Catalog"><file name="Attributes.php" hash="323d3400bb91b89ff880421823f54052"/><file name="Type.php" hash="265862a32c3d11509bf4f9ec3fac65fb"/><file name="Values.php" hash="30eedb9ac9f72edb94d9abef91b9fcfb"/><file name="Visibility.php" hash="84cc10186bfc1d00dd967027f6c2a413"/></dir><file name="Yesno.php" hash="00c1b84aeb7f10fafea884410e4e408a"/></dir><dir name="Transactional"><file name="Mode.php" hash="02f45553e3bc342ddd3f205993a5384e"/><file name="Port.php" hash="3dc1b86a9034e2098f98921109d7187f"/></dir></dir></dir><dir name="Api2"><dir name="Subscriber"><dir name="Rest"><dir name="Admin"><file name="V1.php" hash="388059f47bcfc581ab084676e5fa5953"/></dir></dir></dir></dir><dir name="Apiconnector"><file name="Client.php" hash="b1c5be1d82dd1e745d064fbaed23ec6a"/><file name="Contact.php" hash="4f041bb45a08415faef415f6f7b8e2fb"/><file name="Customer.php" hash="b83a108e33c28fd6ec8c46adde3cb446"/><file name="Test.php" hash="c1c0274bb9b707af55ebdd7a4263bf6e"/></dir><file name="Automation.php" hash="bfa50bdec7764e573391003773d5c70b"/><file name="Campaign.php" hash="08e6f1f963c05afac07288b66b305609"/><file name="Catalog.php" hash="4aa25dbe530cb3f2ad6c57d0a0f88cb4"/><dir name="Connector"><file name="Account.php" hash="11d1674896695b0cd15b891ab5165fb4"/><file name="Campaign.php" hash="6358f4a22cadd80a985865353eec0112"/><file name="Datafield.php" hash="616fa71b66833c5bb6abd5c3e24876f9"/><file name="Order.php" hash="f04d71407c48dcaa72725fdb664d8d82"/><file name="Product.php" hash="d1d35faa5a0d9f7a4e6ec900b8413cfa"/><file name="Quote.php" hash="3f5a94f5de010c1a2c5e96c27e6b14f4"/></dir><file name="Contact.php" hash="f12c9ddaf0ee9156c4521f6d37d7b00f"/><dir name="Controller"><file name="Observer.php" hash="b01537009a0061c4266fbf2f8c52251d"/></dir><file name="Cron.php" hash="ff2fcf008d5b4b16e4c1cd5616bfcc5a"/><dir name="Customer"><file name="Guest.php" hash="bd1e1b8f82f25d808700c33f726cb19a"/><file name="Observer.php" hash="07d97d2871ee5ceb48a37425b54d64dd"/><dir name="Review"><file name="Rating.php" hash="a91b68302e270aa08ea3762f63225a80"/></dir><file name="Review.php" hash="f17180683194eca1e49782c36e310200"/><dir name="Wishlist"><file name="Item.php" hash="c5faac748a970502457e92dbb1f2df69"/></dir><file name="Wishlist.php" hash="598eddf031e56fa752bf64fe32773da5"/></dir><file name="Customer.php" hash="e1dd3b479c9bbf125cf1ec36206d1c7f"/><dir name="Email"><file name="Template.php" hash="1b6d1a45b2af72a7a0aa92a835f2c558"/></dir><file name="Email.php" hash="6cf3844e7f4c75c534a50486631ec10e"/><file name="Feed.php" hash="09151ffa241990ed28f4acb99c7d72ca"/><file name="Importer.php" hash="4aa186976b8df0dcdba794657b5a7753"/><dir name="Newsletter"><file name="Observer.php" hash="ab58ec4cbea7e77a8a9ea80b0c576879"/><file name="Sub.php" hash="a8a3fd672f62288be68001b3dc0bd58d"/><file name="Subscriber.php" hash="53c2ba474048763384dbcd0a6d590488"/></dir><file name="Order.php" hash="012e78e61057a2a33285a68ec93a7999"/><file name="Quote.php" hash="7c13764201f798464dfbbb6123370b76"/><dir name="Resource"><dir name="Automation"><file name="Collection.php" hash="b0e7826c3c153cac3d9bcaed76d1d75e"/></dir><file name="Automation.php" hash="902f696eb797323101f1a3b4c9abf84d"/><dir name="Campaign"><file name="Collection.php" hash="736cc4414d45d0dca975101bc75919c6"/></dir><file name="Campaign.php" hash="b2d6c5e4396794efd97562f2f23f2f40"/><dir name="Catalog"><file name="Collection.php" hash="ef157bd81d50a49e94058b986aac5b2e"/></dir><file name="Catalog.php" hash="e447f04904e9b964359497c79a6ea1eb"/><dir name="Contact"><file name="Collection.php" hash="a6da2689f90a668b08a549a200f9c6a9"/></dir><file name="Contact.php" hash="621839c28822845ca7c9566cd7d91557"/><dir name="Importer"><file name="Collection.php" hash="605d0e7091f309e6a5f6e2d15513c8bf"/></dir><file name="Importer.php" hash="565087fd0df9fa9c2f84cc5ac5e20e17"/><dir name="Order"><file name="Collection.php" hash="87cf24cbbd5d6c0141b7c401238b5c50"/></dir><file name="Order.php" hash="11fcf2784fb5f80594e6672d867c3d5a"/><dir name="Quote"><file name="Collection.php" hash="4d9ed530f86edb24c2d8e89db3c2b6b1"/></dir><file name="Quote.php" hash="598747a52e2a2d41dd7582bba69fef4a"/><dir name="Review"><file name="Collection.php" hash="c7e03d9bd662df5dd2a1a31e246b97e4"/></dir><file name="Review.php" hash="761eec4269e616ec356634d9346020b6"/><dir name="Rules"><file name="Collection.php" hash="b0da90dc943d5c6a8dd47d3fe245677c"/></dir><file name="Rules.php" hash="4b688c552b91487c22482f059cb49bc9"/><file name="Segment.php" hash="32b94ab790a3508658a663d2e2361065"/><file name="Setup.php" hash="442dda9eabbd1fb6e88e7d2baaa2a28c"/><dir name="Wishlist"><file name="Collection.php" hash="6d75820d8b8d5ed1af2fc77522205a8d"/></dir><file name="Wishlist.php" hash="6047d392299414bbf17c9aaf83a159ff"/></dir><file name="Review.php" hash="c3be61564625a5fb75dc927c3501e083"/><file name="Rules.php" hash="ab5ece927a411a2f77e5c515555f814f"/><dir name="Sales"><file name="Observer.php" hash="1fb5ec2d0ac4f8c11649c99a351d2f6e"/><file name="Order.php" hash="cd5abf018a37abdccc60a595b5e00217"/><file name="Quote.php" hash="64c06195c9c0ec2dba0d59e3b9848375"/></dir><dir name="Sms"><file name="Campaign.php" hash="79714d233916229b905a081fbda164c5"/></dir><dir name="Sweettooth"><file name="Observer.php" hash="36ce70503cd8abbafd8b5340a06d2072"/></dir><file name="Wishlist.php" hash="7574e06a6bae577ab18322d5229e9661"/></dir><dir name="controllers"><dir name="Adminhtml"><file name="ConnectorController.php" hash="251a71b0f363ef11c770c292e7bf9a2f"/><dir name="Email"><file name="AutomationController.php" hash="12ebc887254ac470d418492eb0bacba8"/><file name="CampaignController.php" hash="dbe5e2bbfeab5b33315dc63f9c5ee7ad"/><file name="CatalogController.php" hash="e43c7a33bec07c1cedbd73a0aa9c54af"/><file name="ContactController.php" hash="b9c342c297d243661cc9a8e58f778257"/><file name="DashboardController.php" hash="13572a0ae47a09ed1cd4af0b870e8320"/><file name="ImporterController.php" hash="21540bb7f839cafcc6f70b7bee5b2774"/><file name="OrderController.php" hash="64b719cf2a80847b82a7849be7ffe68c"/><file name="QuoteController.php" hash="4167890a19fa6716e64a79afca55e2e3"/><file name="ReviewController.php" hash="13d74d52e160555e0c029a360d562a51"/><file name="RulesController.php" hash="6e33826563242604e83fe25344f7bf3e"/><file name="StudioController.php" hash="c24e13f8fb26805937b71d8d3eebcddc"/><file name="WishlistController.php" hash="b4d3a20f38a0a45886cc7dfa963894dc"/></dir><file name="RulesController.php" hash="629d3517648602792cb43c71c97dc0c9"/><dir name="System"><dir name="Email"><file name="TemplateController.php" hash="98d9c1f5aae8f94de0102ccdcdb2fe7c"/></dir></dir><dir name="Widget"><file name="ChooserController.php" hash="7607cec3305ab9d4381c89fa12703a64"/></dir></dir><file name="AjaxController.php" hash="db9e4860fd6963717ae51cc6ac62bb97"/><dir name="Customer"><file name="AccountController.php" hash="4b78330a34d2985fa2526c935073a65f"/><file name="NewsletterController.php" hash="f7425d9524504163d6e91ae3fa640c88"/></dir><file name="DynamicContentController.php" hash="c8e6dd34bfadc36701ce15478c79cddd"/><file name="EmailController.php" hash="c9a9a843d2f8e386a5669fd27c1cd79c"/><file name="FeefoController.php" hash="f3613defc5132cdabc5536483ae75bb5"/><file name="ProductsController.php" hash="d54c85bc071a0fcda6a8e5969e3c5f63"/><file name="QuoteproductsController.php" hash="3867af36e829e4cf22d81a4d96757d6a"/><file name="ReportController.php" hash="c8c670deae7bec4e17bb3251015dfffb"/><file name="ResponseController.php" hash="a59a752342c3f93946cb4061e6de17f6"/><file name="WishlistController.php" hash="a8d20ad1304bf13a5de8847e726d9ee5"/></dir><dir name="etc"><file name="adminhtml.xml" hash="6cceb9fd48260c046b190bc8002df639"/><file name="api2.xml" hash="e6be0fdc4206cb242f22b2335476b497"/><file name="config.xml" hash="ec90fc12ef21125e84e7fb902d59e39e"/><file name="files.yaml" hash="f84a8e4814f128cd57cabe1f64f5360e"/><file name="system.xml" hash="213ddebb6c4e38abe7a861a1cf1e4aa5"/></dir><dir name="sql"><dir name="email_connector_setup"><file name="mysql4-install-0.1.0.php" hash="26042b2a6d9cd6241d52f826188483f4"/><file name="mysql4-install-3.0.0.php" hash="0874c77e934295ba2c68f9d553eb90ba"/><file name="mysql4-install-4.0.0.php" hash="8b534d2b2f5e2ef7443108fdf57ebdf0"/><file name="mysql4-install-5.0.0.php" hash="911128612ce03cd67068bb821af024f0"/><file name="mysql4-upgrade-1.1.1-1.1.2.php" hash="7fae25a8ae47fe0ba692076ac04237a4"/><file name="mysql4-upgrade-1.1.2-1.5.0.php" hash="34ac896f6e681c56d8d2dd6bf411215e"/><file name="mysql4-upgrade-1.5.0-2.0.0.php" hash="75020a02255ea63e9bc4599d85ab4e2f"/><file name="mysql4-upgrade-2.0.0-2.0.1.php" hash="2f71a10d19eddd97c9eba9af840e4f09"/><file name="mysql4-upgrade-2.0.1-2.0.2.php" hash="6b7af944ebc76328d16223cdb245c568"/><file name="mysql4-upgrade-2.0.3-2.0.4.php" hash="97ff7b08533c33b97398b91ec68ceaf1"/><file name="mysql4-upgrade-2.0.4-2.0.5.php" hash="f2080852fd1e0512da9bf1074767a9b3"/><file name="mysql4-upgrade-2.0.5-2.0.6.php" hash="438ea31fe7b8ed88160ae8c231ec9ccc"/><file name="mysql4-upgrade-3.0.1-3.0.2.php" hash="7c53b291487987ae73929acea576bc51"/><file name="mysql4-upgrade-3.0.3-3.0.4.php" hash="7adaa83b6da0000ca7d1491c3af76682"/><file name="mysql4-upgrade-3.0.4-3.0.5.php" hash="c08939ca13713f335bacc593d0e780d3"/><file name="mysql4-upgrade-3.1.2-3.1.3.php" hash="f5ba2c14acd01144297fab7070558ddd"/><file name="mysql4-upgrade-3.2.1-3.3.0.php" hash="1b6540a260f25ae849f433cb60f0c39d"/><file name="mysql4-upgrade-3.3.0-3.3.1.php" hash="df5afd27a3d0e542f85f762af28d5c85"/><file name="mysql4-upgrade-3.3.2-3.3.3.php" hash="1707de69aa9294821195cfafa1a1798e"/><file name="mysql4-upgrade-3.4.0-4.0.0.php" hash="39b55697d152529c4ba32ff6b9cffa48"/><file name="mysql4-upgrade-4.0.0-4.1.0.php" hash="fd8ffbebbbc4d04a2b9e1c90344ae6cc"/><file name="mysql4-upgrade-4.1.3-5.0.0.php" hash="c762c1263e3595162100ff48db52597b"/><file name="mysql4-upgrade-5.0.0-5.0.1.php" hash="a8603a251c822c67d0afde4b64d82da6"/><file name="mysql4-upgrade-5.0.4-5.1.0.php" hash="4640e2ea0587c2b3ead18cfa29b5fa04"/></dir></dir></dir><dir name="Mailcheck"><dir name="Helper"><file name="Data.php" hash="589b8909f08143ad44234f05911488df"/></dir><dir name="etc"><file name="config.xml" hash="841542418fa8e50cb53a3bde50ce38f4"/><file name="jstranslator.xml" hash="d0f175944d2c14badd2cade8d4a40585"/><file name="system.xml" hash="7d64665436e5eb104a1316c32338ec72"/></dir></dir></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="connector.xml" hash="16858a24b4e575254124058e6de09f49"/><file name="mailcheck.xml" hash="ff97a71e8124f8e6e55d951124addace"/></dir><dir name="template"><dir name="connector"><file name="additional-newsletter-pref.phtml" hash="db1251a0475c0947fd8e5854da4fd9ae"/><file name="basket.phtml" hash="856f6612aa23210f35cba8313edbe08b"/><file name="coupon.phtml" hash="aee5dd843d100228a51bd1b82ae62b59"/><dir name="customer"><file name="stats.phtml" hash="b26f6331faa6b3e662b14e5bde8c66d8"/></dir><file name="email_capture.phtml" hash="faf17eaeb824877f5998f1e3ab91504d"/><file name="email_capture_init.phtml" hash="f485003272b78400308d3af73574f4a7"/><dir name="feefo"><file name="reviews.phtml" hash="cd1dc08242588b1427534326eb7525ab"/><file name="score.phtml" hash="74d48f68f5d0ec044a8c067fa7f3c631"/></dir><dir name="product"><file name="list.phtml" hash="46dbd832182739db91a38aaa8c1af656"/><file name="nosto.phtml" hash="fe3d6efaca5d739374c29046c87c8a86"/><file name="price.phtml" hash="4d0674f2d03160617536338744330ff4"/></dir><file name="review.phtml" hash="6f1bac730b6309572ae30bee005f64b3"/><file name="roi_code.phtml" hash="108934652f443d0328a60893cad70742"/><file name="tracking_code.phtml" hash="1bbccb72db1a769ef8e14e0df2c9febd"/><file name="wishlist.phtml" hash="c52ad7ebc198972f716c40aa9f2f199e"/></dir><dir name="mailcheck"><file name="scripts.phtml" hash="adbf073bb2cb944c44b11d79bcca1eb5"/></dir><dir name="page"><file name="blank.phtml" hash="7a10ef1534ebe3b449cf051799e5a066"/></dir></dir></dir></dir></dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><dir name="connector"><file name="email.xml" hash="907e33ef044db87b0cbdadd480c5c43a"/></dir></dir><dir name="template"><dir name="connector"><file name="appcues.phtml" hash="11bb1143b5334bbcbf182d17a118f281"/><file name="beacon.phtml" hash="18d507b6041ac64b167d27a606fdcb83"/><dir name="customer"><file name="stats.phtml" hash="0b842d3ccaa1cc33098be44a7935f97f"/></dir><dir name="dashboard"><file name="accountbar.phtml" hash="e01c432f6690613fd2845769777830cf"/><file name="content.phtml" hash="9e5c843b6323ea80c410662fb4f39793"/><file name="logs.phtml" hash="0a06f9e56b4113e8face6ce325f4b0d1"/><file name="status.phtml" hash="bdbe1b08db2f733b4135782e7666c186"/><dir name="tabs"><dir name="analysis"><file name="index.phtml" hash="a9ef11d470dae139ad5243fc1bc91431"/><file name="rfm.phtml" hash="ba40514bd39c3c582eb1b141b71c6158"/></dir><file name="data.phtml" hash="bd7952625a3697cf4e5ef3cd0feb0a80"/><dir name="general"><file name="index.phtml" hash="68fa10c2aeef745d80b60317c9461a94"/></dir></dir><file name="tabs.phtml" hash="8df8befdd2f2300b177aacaca5d8a278"/></dir><dir name="system"><dir name="config"><file name="createdatafield.phtml" hash="a1a571fa0957d7fadf346d1b89c5a0b0"/></dir></dir></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Dotdigitalgroup_Email.xml" hash="8745c0b2eae08783b6203a613acdbcb8"/><file name="Dotdigitalgroup_Mailcheck.xml" hash="247272e2cc981e8b91af95962b0f0470"/></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="connector"><file name="config.css" hash="433bf71f40517a667ee9aba495f1746c"/><file name="dashboard.css" hash="08e2c6ae799757fd68a85781311f2b97"/></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="js"><dir name="mailcheck"><file name="init.js" hash="585e518d5d2dd2d0f50243f51a3c881b"/></dir></dir></dir></dir></dir></target><target name="magelocale"><dir name="en_US"><file name="Dotdigitalgroup_Email.csv" hash="67022e746e28d74b86509b70f336db4f"/></dir></target><target name="mageweb"><dir name="lib"><dir name="Raygun4php"><dir name="Exception"><file name="UnsatisfiedDependencyException.php" hash="32b7fff3854ba20107b89a100550dc41"/><file name="UnsupportedOperationException.php" hash="951d8a9fc2bdfae0acc432ea6dabffa4"/></dir><file name="README.md" hash="0aed7c6a52f358016b2c1b8f5e4e35ed"/><file name="Raygun4PhpException.php" hash="f6d4ef9f38a74578b115fbdf6e2fd3c5"/><file name="RaygunClient.php" hash="f9511057d3280a3a6d02b9b2a1517fd1"/><file name="RaygunClientMessage.php" hash="df9bd918ff13b50146b252208a5ce737"/><file name="RaygunEnvironmentMessage.php" hash="a7dff1914fcb7f6a61577b758edba47e"/><file name="RaygunExceptionMessage.php" hash="fcf7e3cbf9fbafb3ff4a6d56135a190d"/><file name="RaygunExceptionTraceLineMessage.php" hash="8aa87f7ddee8c00855737e85bbcb29cd"/><file name="RaygunIdentifier.php" hash="49461fa525594b15f3a350fd1da1c2a0"/><file name="RaygunMessage.php" hash="865eaa58577265fb52a85ee861102625"/><file name="RaygunMessageDetails.php" hash="2403453f658d7a943bd476e7fad186d7"/><file name="RaygunRequestMessage.php" hash="038703138dcd19aefbc9a7e44bd6f198"/><file name="Uuid.php" hash="9db740992b0dad17bf2047d13565b428"/><file name="cacert.crt" hash="47961e7ef15667c93cd99be01b51f00a"/></dir><dir name="connector"><dir name="feefo"><file name="feedback-no-th.xsl" hash="239c40764293a65b85d9f86479ced8b6"/><file name="feedback.xsl" hash="7167570192e48fdf57baa9c2cf56986b"/></dir></dir></dir><dir name="js"><dir name="connector"><dir name="procolor-1.0"><dir name="img"><file name="procolor_win_bars.png" hash="a8e41fdddd2253309e0b3e5154668c24"/><file name="procolor_win_bg.gif" hash="c0558cecd0e0ffb9ca89efe00f422261"/><file name="procolor_win_bg.png" hash="4e2a34cc64888fe264fcf6249dfe40da"/><file name="procolor_win_boxes.png" hash="e971c1ca87a0cb52d32408270d00a0da"/><file name="procolor_win_close.png" hash="20a8bb9433157962ab25d86d28d088a3"/><file name="procolor_win_drop.png" hash="9ddce741de330573f082ffe83005d691"/><file name="procolor_win_palette_raw.png" hash="ea98dde528e987029af6e24dbef53922"/><file name="procolor_win_sel_circle.gif" hash="3674b62db5a6eaa4dcedb0749dde4106"/><file name="procolor_win_sel_circle.png" hash="d76195d1777e9a14ebc1a242ab712037"/><file name="procolor_win_sel_rect.gif" hash="b74a72aaf1ea21d55b8751079f283537"/><file name="procolor_win_sel_rect.png" hash="5513589e2b6dc1a980a4e65a746005d0"/><file name="procolor_win_wheel_black.png" hash="62353005bb70bbfa8ffd700112d72582"/><file name="procolor_win_wheel_rgb.jpg" hash="afdd3852c3788a58794ddf1de9557fd8"/></dir><file name="procolor.compressed.js" hash="79e463efad21212e4096d40b9e17d96c"/><file name="procolor.js" hash="93ec3cb6a0356cce4cf8e51006dfaeec"/></dir><file name="selector.js" hash="5dc1900967679a41c70ed5f1755240e2"/></dir><dir name="mailcheck"><file name="magentoMailcheck.js" hash="b4eaabac0b6e8753e09ab6ea449e6519"/><file name="mailcheck.min.js" hash="25966edf6e585822063b48dd34bcee9b"/></dir></dir></target></contents>
 
 
 
 
 
 
 
 
 
 
 
 
20
  <compatible/>
21
  <dependencies><required><php><min>1.5.2</min><max>6.0.0</max></php><extension><name>curl</name><min>7.15.1</min><max>7.30.0</max></extension></required></dependencies>
22
  </package>