Bronto_Extension - Version 2.0.2

Version Notes

For installation and configuration instructions, as well as a full list of new features and known issues, please review the Implementation Guide.

Download this release

Release Info

Developer Chris Geiss
Extension Bronto_Extension
Version 2.0.2
Comparing to
See all releases


Code changes from version 2.0.1 to 2.0.2

Files changed (50) hide show
  1. app/code/community/Bronto/Common/Block/Adminhtml/System/Config/About.php +1 -1
  2. app/code/community/Bronto/Common/Helper/Data.php +22 -0
  3. app/code/community/Bronto/Common/etc/config.xml +1 -1
  4. app/code/community/Bronto/Customer/Block/Adminhtml/System/Config/Cron.php +7 -23
  5. app/code/community/Bronto/Customer/Helper/Data.php +19 -0
  6. app/code/community/Bronto/Customer/Model/Mysql4/Queue.php +22 -0
  7. app/code/community/Bronto/Customer/Model/Mysql4/Queue/Collection.php +88 -0
  8. app/code/community/Bronto/Customer/Model/Observer.php +58 -43
  9. app/code/community/Bronto/Customer/Model/Queue.php +10 -0
  10. app/code/community/Bronto/Customer/Model/Resource/Customer/Collection.php +1 -1
  11. app/code/community/Bronto/Customer/Test/Config/Config.php +15 -4
  12. app/code/community/Bronto/Customer/controllers/Adminhtml/CustomerController.php +16 -31
  13. app/code/community/Bronto/Customer/etc/config.xml +12 -11
  14. app/code/community/Bronto/Customer/sql/bronto_customer_setup/mysql4-upgrade-1.0.0-1.0.1.php +46 -0
  15. app/code/community/Bronto/Newsletter/Block/Adminhtml/System/Config/Cron.php +1 -1
  16. app/code/community/Bronto/Newsletter/Block/Adminhtml/Widget/Button/Reset.php +23 -0
  17. app/code/community/Bronto/Newsletter/Block/Adminhtml/Widget/Button/Run.php +6 -1
  18. app/code/community/Bronto/Newsletter/Model/Mysql4/Queue.php +12 -6
  19. app/code/community/Bronto/Newsletter/Model/Mysql4/Queue/Collection.php +5 -6
  20. app/code/community/Bronto/Newsletter/Model/Observer.php +194 -25
  21. app/code/community/Bronto/Newsletter/Model/Queue.php +22 -7
  22. app/code/community/Bronto/Newsletter/Model/System/Config/Backend/Cron.php +11 -0
  23. app/code/community/Bronto/Newsletter/Test/Config/Config.php +2 -0
  24. app/code/community/Bronto/Newsletter/controllers/Adminhtml/NewsletterController.php +14 -33
  25. app/code/community/Bronto/Newsletter/etc/config.xml +13 -15
  26. app/code/community/Bronto/Newsletter/etc/system.xml +3 -2
  27. app/code/community/Bronto/Newsletter/sql/bronto_newsletter_setup/mysql4-install-1.0.0.php +1 -1
  28. app/code/community/Bronto/Newsletter/sql/bronto_newsletter_setup/mysql4-install-1.4.0.php +1 -1
  29. app/code/community/Bronto/Newsletter/sql/bronto_newsletter_setup/mysql4-upgrade-1.4.0-1.4.1.php +1 -1
  30. app/code/community/Bronto/Newsletter/sql/bronto_newsletter_setup/mysql4-upgrade-1.4.1-1.4.2.php +21 -0
  31. app/code/community/Bronto/Newsletter/sql/bronto_newsletter_setup/mysql4-upgrade-1.4.2-1.4.3.php +21 -0
  32. app/code/community/Bronto/Newsletter/sql/bronto_newsletter_setup/mysql4-upgrade-1.4.3-1.4.4.php +25 -0
  33. app/code/community/Bronto/Order/Block/Adminhtml/Sales/Order/View/Tab/Info.php +4 -2
  34. app/code/community/Bronto/Order/Block/Adminhtml/System/Config/Cron.php +8 -16
  35. app/code/community/Bronto/Order/Model/Mysql4/Queue.php +22 -0
  36. app/code/community/Bronto/Order/Model/Mysql4/Queue/Collection.php +88 -0
  37. app/code/community/Bronto/Order/Model/Observer.php +29 -23
  38. app/code/community/Bronto/Order/Model/Order/Observer.php +32 -3
  39. app/code/community/Bronto/Order/Model/Queue.php +28 -0
  40. app/code/community/Bronto/Order/Model/Quote/Observer.php +5 -1
  41. app/code/community/Bronto/Order/Model/Resource/Setup.php +53 -0
  42. app/code/community/Bronto/Order/Test/Config/Config.php +3 -0
  43. app/code/community/Bronto/Order/controllers/Adminhtml/OrderController.php +13 -42
  44. app/code/community/Bronto/Order/etc/config.xml +17 -11
  45. app/code/community/Bronto/Order/sql/bronto_order_setup/mysql4-upgrade-1.1.5-1.1.6.php +51 -0
  46. app/code/community/Bronto/Reminder/Test/Config/Config.php +1 -2
  47. app/code/community/Bronto/Reminder/etc/config.xml +1 -2
  48. app/code/community/Bronto/Roundtrip/Test/Model/Roundtrip.php +7 -0
  49. app/design/frontend/base/default/template/bronto/newsletter/js.phtml +11 -2
  50. package.xml +4 -4
app/code/community/Bronto/Common/Block/Adminhtml/System/Config/About.php CHANGED
@@ -3,7 +3,7 @@
3
  /**
4
  * @package Bronto\Common
5
  * @copyright 2011-2013 Bronto Software, Inc.
6
- * @version 2.0.1
7
  */
8
  class Bronto_Common_Block_Adminhtml_System_Config_About extends Mage_Adminhtml_Block_System_Config_Form_Fieldset
9
  {
3
  /**
4
  * @package Bronto\Common
5
  * @copyright 2011-2013 Bronto Software, Inc.
6
+ * @version 2.0.2
7
  */
8
  class Bronto_Common_Block_Adminhtml_System_Config_About extends Mage_Adminhtml_Block_System_Config_Form_Fieldset
9
  {
app/code/community/Bronto/Common/Helper/Data.php CHANGED
@@ -437,4 +437,26 @@ class Bronto_Common_Helper_Data extends Mage_Core_Helper_Abstract
437
  }
438
  return Mage::log($message, $level, $file, true);
439
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
440
  }
437
  }
438
  return Mage::log($message, $level, $file, true);
439
  }
440
+
441
+ /**
442
+ * Get Array of Store Ids based on current store/website/group
443
+ * @return boolean|array
444
+ */
445
+ public function getStoreIds()
446
+ {
447
+ if ($storeCode = Mage::app()->getRequest()->getParam('store')) {
448
+ $store = Mage::app()->getStore($storeCode);
449
+ $storeIds[] = $store->getId();
450
+ } elseif ($websiteCode = Mage::app()->getRequest()->getParam('website')){
451
+ $website = Mage::app()->getWebsite($websiteCode);
452
+ $storeIds = $website->getStoreIds();
453
+ } elseif ($groupCode = Mage::app()->getRequest()->getParam('group')){
454
+ $website = Mage::app()->getGroup($groupCode)->getWebsite();
455
+ $storeIds = $website->getStoreIds();
456
+ } else {
457
+ $storeIds = false;
458
+ }
459
+
460
+ return $storeIds;
461
+ }
462
  }
app/code/community/Bronto/Common/etc/config.xml CHANGED
@@ -2,7 +2,7 @@
2
  <config>
3
  <modules>
4
  <Bronto_Common>
5
- <version>2.0.1</version>
6
  </Bronto_Common>
7
  </modules>
8
  <global>
2
  <config>
3
  <modules>
4
  <Bronto_Common>
5
+ <version>2.0.2</version>
6
  </Bronto_Common>
7
  </modules>
8
  <global>
app/code/community/Bronto/Customer/Block/Adminhtml/System/Config/Cron.php CHANGED
@@ -36,19 +36,9 @@ class Bronto_Customer_Block_Adminhtml_System_Config_Cron extends Bronto_Common_B
36
  */
37
  protected function getProgressBarPending()
38
  {
39
- $notImportedCustomersWithAttribute = Mage::getModel('bronto_customer/resource_customer_collection')
40
  ->addBrontoNotImportedFilter()
41
- ->orderByUpdatedAt()
42
- ->getAllIds();
43
-
44
- // This will find all customers who are missing the bronto_imported attribute on their entity
45
- $notImportedCustomersWithoutAttribute = Mage::getModel('bronto_customer/resource_customer_collection')
46
- ->addBrontoMissingImportedAttribute()
47
- ->orderByUpdatedAt()
48
- ->getAllIds();
49
-
50
- $allCustomerIds = array_merge($notImportedCustomersWithAttribute, $notImportedCustomersWithoutAttribute);
51
- return count($allCustomerIds);
52
  }
53
 
54
  /**
@@ -56,17 +46,11 @@ class Bronto_Customer_Block_Adminhtml_System_Config_Cron extends Bronto_Common_B
56
  */
57
  protected function getCustomerResourceCollection()
58
  {
59
- $collection = Mage::getModel('bronto_customer/resource_customer_collection');
60
-
61
- if ($storeCode = Mage::app()->getRequest()->getParam('store')) {
62
- $store = Mage::app()->getStore($storeCode);
63
- $collection->addStoreFilter($store->getId());
64
- } else if ($websiteCode = Mage::app()->getRequest()->getParam('website')){
65
- $website = Mage::app()->getWebsite($websiteCode);
66
- $collection->addStoreFilter($website->getStoreids());
67
- } else if ($groupCode = Mage::app()->getRequest()->getParam('group')){
68
- $website = Mage::app()->getGroup($groupCode)->getWebsite();
69
- $collection->addStoreFilter($website->getStoreids());
70
  }
71
 
72
  return $collection;
36
  */
37
  protected function getProgressBarPending()
38
  {
39
+ return $this->getCustomerResourceCollection()
40
  ->addBrontoNotImportedFilter()
41
+ ->getSize();
 
 
 
 
 
 
 
 
 
 
42
  }
43
 
44
  /**
46
  */
47
  protected function getCustomerResourceCollection()
48
  {
49
+ $collection = Mage::getModel('bronto_customer/queue')->getCollection();
50
+ $storeIds = Mage::helper('bronto_customer')->getStoreIds();
51
+
52
+ if ($storeIds) {
53
+ $collection->addStoreFilter($storeIds);
 
 
 
 
 
 
54
  }
55
 
56
  return $collection;
app/code/community/Bronto/Customer/Helper/Data.php CHANGED
@@ -60,4 +60,23 @@ class Bronto_Customer_Helper_Data extends Bronto_Common_Helper_Data implements B
60
  {
61
  return 'bronto_customer';
62
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
63
  }
60
  {
61
  return 'bronto_customer';
62
  }
63
+
64
+ /**
65
+ * Get Human Readable label for attribute value option
66
+ * @param Mage_Eav_Model_Entity_Attribute $attribute
67
+ * @param int|string $attributeValueId
68
+ * @return string|boolean
69
+ */
70
+ public function getAttributeAdminLabel($attribute, $attributeValueId) {
71
+ $_collection = Mage::getResourceModel('eav/entity_attribute_option_collection')
72
+ ->setStoreFilter(0)
73
+ ->setAttributeFilter($attribute->getId())
74
+ ->load();
75
+
76
+ foreach( $_collection->toOptionArray() as $_cur_option ) {
77
+ if ($_cur_option['value'] == $attributeValueId){ return $_cur_option['label']; }
78
+
79
+ }
80
+ return false;
81
+ }
82
  }
app/code/community/Bronto/Customer/Model/Mysql4/Queue.php ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Bronto_Customer_Model_Mysql4_Queue extends Mage_Core_Model_Mysql4_Abstract
4
+ {
5
+ /**
6
+ * Primary key auto increment flag
7
+ *
8
+ * @var bool
9
+ */
10
+ protected $_isPkAutoIncrement = false;
11
+
12
+ /**
13
+ * Initialize Model
14
+ *
15
+ * @return void
16
+ * @access public
17
+ */
18
+ public function _construct()
19
+ {
20
+ $this->_init('bronto_customer/queue', 'customer_id');
21
+ }
22
+ }
app/code/community/Bronto/Customer/Model/Mysql4/Queue/Collection.php ADDED
@@ -0,0 +1,88 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Bronto_Customer_Model_Mysql4_Queue_Collection
4
+ extends Mage_Core_Model_Mysql4_Collection_Abstract
5
+ {
6
+ /**
7
+ * Initialize Model
8
+ *
9
+ * @return void
10
+ * @access public
11
+ */
12
+ public function _construct() {
13
+ parent::_construct();
14
+ $this->_init('bronto_customer/queue');
15
+ }
16
+
17
+ /**
18
+ * @return Bronto_Order_Model_Mysql4_Queue_Collection
19
+ */
20
+ public function addBrontoImportedFilter()
21
+ {
22
+ $this->addFieldToFilter('bronto_imported', array('notnull' => true));
23
+ return $this;
24
+ }
25
+
26
+ /**
27
+ * @return Bronto_Order_Model_Mysql4_Queue_Collection
28
+ */
29
+ public function addBrontoNotImportedFilter()
30
+ {
31
+ $this->addFieldToFilter('bronto_imported', array('null' => true));
32
+ return $this;
33
+ }
34
+
35
+ /**
36
+ * @param mixed $storeIds (null, int|string, array, array may contain null)
37
+ * @return Bronto_Order_Model_Mysql4_Queue_Collection
38
+ */
39
+ public function addStoreFilter($storeIds)
40
+ {
41
+ $nullCheck = false;
42
+
43
+ if (!is_array($storeIds)) {
44
+ $storeIds = array($storeIds);
45
+ }
46
+
47
+ $storeIds = array_unique($storeIds);
48
+
49
+ if ($index = array_search(null, $storeIds)) {
50
+ unset($storeIds[$index]);
51
+ $nullCheck = true;
52
+ }
53
+
54
+ $storeIds[0] = ($storeIds[0] == '') ? 0 : $storeIds[0];
55
+
56
+ if ($nullCheck) {
57
+ $this->getSelect()->where('store_id IN(?) OR store_id IS NULL', $storeIds);
58
+ } else {
59
+ $this->getSelect()->where('store_id IN(?)', $storeIds);
60
+ }
61
+
62
+ return $this;
63
+ }
64
+
65
+ /**
66
+ * Sort order by order created_at date
67
+ *
68
+ * @param string $dir
69
+ * @return Bronto_Order_Model_Mysql4_Queue_Collection
70
+ */
71
+ public function orderByCreatedAt($dir = self::SORT_ORDER_DESC)
72
+ {
73
+ $this->setOrder('created_at', $dir);
74
+ return $this;
75
+ }
76
+
77
+ /**
78
+ * Sort order by order updated_at date
79
+ *
80
+ * @param string $dir
81
+ * @return Bronto_Order_Model_Mysql4_Queue_Collection
82
+ */
83
+ public function orderByUpdatedAt($dir = self::SORT_ORDER_DESC)
84
+ {
85
+ $this->setOrder('updated_at', $dir);
86
+ return $this;
87
+ }
88
+ }
app/code/community/Bronto/Customer/Model/Observer.php CHANGED
@@ -46,27 +46,17 @@ class Bronto_Customer_Model_Observer extends Mage_Core_Model_Abstract
46
  Mage::helper('bronto_customer')->writeDebug(' Limit empty. Skipping...');
47
  return false;
48
  }
49
-
50
- // This will find all customers who already have the bronto_imported attribute set on them
51
- // and are not imported into Bronto already. But will exclude to get any customer who is not
52
- // imported and does not have the bronto_imported attribute set
53
- $notImportedCustomersWithAttribute = Mage::getModel('bronto_customer/resource_customer_collection')
54
- ->addStoreFilter($storeId)
55
  ->addBrontoNotImportedFilter()
56
  ->orderByUpdatedAt()
57
- ->getAllIds();
58
-
59
- // This will find all customers who are missing the bronto_imported attribute on their entity
60
- $notImportedCustomersWithoutAttribute = Mage::getModel('bronto_customer/resource_customer_collection')
61
  ->addStoreFilter($storeId)
62
- ->addBrontoMissingImportedAttribute()
63
- ->orderByUpdatedAt()
64
- ->getAllIds();
65
 
66
- $allCustomerIds = array_merge($notImportedCustomersWithAttribute, $notImportedCustomersWithoutAttribute);
67
- $customerIds = array_slice($allCustomerIds, 0, $limit);
68
-
69
- if (empty($customerIds)) {
70
  Mage::helper('bronto_customer')->writeVerboseDebug(' No Customers to process. Skipping...');
71
  return $result;
72
  }
@@ -76,21 +66,35 @@ class Bronto_Customer_Model_Observer extends Mage_Core_Model_Abstract
76
  $customerCache = array();
77
 
78
  // For each Customer...
79
- foreach ($customerIds as $customerId) {
 
80
  if ($customer = Mage::getModel('customer/customer')->load($customerId) /* @var $customer Mage_Customer_Model_Customer */) {
81
  Mage::helper('bronto_customer')->writeDebug(" Processing Customer ID: {$customerId}");
82
  $customerCache[] = $customerId;
83
-
84
  /* @var $brontoContact Bronto_Api_Contact_Row */
85
  $brontoContact = $contactObject->createRow();
86
  $brontoContact->email = $customer->getEmail();
87
-
88
  // For each Customer attribute
89
  foreach ($customerAttributes as $attributeId => $attribute) {
90
  $_attributeCode = $attribute->getAttributeCode();
91
  $_fieldName = Mage::helper('bronto_customer')->getCustomerAttributeField($_attributeCode, $store);
92
- if (!empty($_fieldName)) {
93
- $brontoContact->setField($_fieldName, $customer->getData($_attributeCode));
 
 
 
 
 
 
 
 
 
 
 
 
 
94
  }
95
  }
96
 
@@ -100,19 +104,20 @@ class Bronto_Customer_Model_Observer extends Mage_Core_Model_Abstract
100
  foreach ($addressAttributes as $attributeId => $attribute) {
101
  $_attributeCode = $attribute->getAttributeCode();
102
  $_fieldName = Mage::helper('bronto_customer')->getAddressAttributeField($_attributeCode, $store);
103
- if (!empty($_fieldName)) {
 
104
  $brontoContact->setField($_fieldName, $primaryAddress->getData($_attributeCode));
105
  }
106
  }
107
  }
108
-
109
  $brontoContact->persist();
110
 
111
  try {
112
  // Mark Customer as imported
113
- $customer->setBrontoImported(Mage::getSingleton('core/date')->gmtDate());
114
- $customer->save();
115
-
116
  // Flush every 10 Customers
117
  if ($result['total'] % 100 === 0) {
118
  $result = $this->flushCustomers($contactObject, $customerCache, $result);
@@ -122,8 +127,8 @@ class Bronto_Customer_Model_Observer extends Mage_Core_Model_Abstract
122
  Mage::helper('bronto_customer')->writeError($e);
123
 
124
  // Mark Customer as *not* imported
125
- $customer->setBrontoImported();
126
- $customer->save();
127
 
128
  $result['error']++;
129
  }
@@ -133,13 +138,13 @@ class Bronto_Customer_Model_Observer extends Mage_Core_Model_Abstract
133
  }
134
 
135
  // Final flush (for any we miss)
136
- $result = $this->flushCustomers($contactObject, $customerCache, $result);
137
 
138
- Mage::helper('bronto_customer')->writeDebug(' Success: ' . $result['success']);
139
- Mage::helper('bronto_customer')->writeDebug(' Error: ' . $result['error']);
140
- Mage::helper('bronto_customer')->writeDebug(' Total: ' . $result['total']);
141
 
142
- return $result;
143
  }
144
 
145
  // }}}
@@ -165,10 +170,14 @@ class Bronto_Customer_Model_Observer extends Mage_Core_Model_Abstract
165
  $errorCode = $flushResultRow->getErrorCode();
166
  $errorMessage = $flushResultRow->getErrorMessage();
167
  if (isset($customerCache[$i])) {
168
- // Reset Bronto Import status
169
  $customer = Mage::getModel('customer/customer')->load($customerCache[$i]);
170
- $customer->setBrontoImported(null);
171
- $customer->save();
 
 
 
 
172
  Mage::helper('bronto_customer')->writeError("[{$errorCode}] {$errorMessage} ({$customer->getIncrementId})");
173
  } else {
174
  Mage::helper('bronto_customer')->writeError("[{$errorCode}] {$errorMessage}");
@@ -197,7 +206,7 @@ class Bronto_Customer_Model_Observer extends Mage_Core_Model_Abstract
197
  );
198
 
199
  $stores = Mage::app()->getStores();
200
- foreach ($stores as $_storeId => $_store) {
201
  $storeResult = $this->processCustomersForStore($_store);
202
  $result['total'] += $storeResult['total'];
203
  $result['success'] += $storeResult['success'];
@@ -217,11 +226,17 @@ class Bronto_Customer_Model_Observer extends Mage_Core_Model_Abstract
217
  {
218
  /* @var $customer Mage_Customer_Model_Customer */
219
  $customer = $observer->getCustomer();
220
- if ( $customer->hasDataChanges()
221
- && !$customer->dataHasChangedFor('bronto_imported')
222
- ) {
223
- $customer->setBrontoImported(null);
224
- }
 
 
 
 
 
 
225
  }
226
 
227
  // }}}
46
  Mage::helper('bronto_customer')->writeDebug(' Limit empty. Skipping...');
47
  return false;
48
  }
49
+
50
+ // Get all customers in queue who haven't been imported into bronto
51
+ $customerRows = Mage::getModel('bronto_customer/queue')
52
+ ->getCollection()
 
 
53
  ->addBrontoNotImportedFilter()
54
  ->orderByUpdatedAt()
55
+ ->setPageSize($limit)
 
 
 
56
  ->addStoreFilter($storeId)
57
+ ->getItems();
 
 
58
 
59
+ if (empty($customerRows)) {
 
 
 
60
  Mage::helper('bronto_customer')->writeVerboseDebug(' No Customers to process. Skipping...');
61
  return $result;
62
  }
66
  $customerCache = array();
67
 
68
  // For each Customer...
69
+ foreach ($customerRows as $customerRow) {
70
+ $customerId = $customerRow->getCustomerId();
71
  if ($customer = Mage::getModel('customer/customer')->load($customerId) /* @var $customer Mage_Customer_Model_Customer */) {
72
  Mage::helper('bronto_customer')->writeDebug(" Processing Customer ID: {$customerId}");
73
  $customerCache[] = $customerId;
74
+
75
  /* @var $brontoContact Bronto_Api_Contact_Row */
76
  $brontoContact = $contactObject->createRow();
77
  $brontoContact->email = $customer->getEmail();
78
+
79
  // For each Customer attribute
80
  foreach ($customerAttributes as $attributeId => $attribute) {
81
  $_attributeCode = $attribute->getAttributeCode();
82
  $_fieldName = Mage::helper('bronto_customer')->getCustomerAttributeField($_attributeCode, $store);
83
+
84
+ if (!empty($_fieldName) && $_fieldName != '_none_') {
85
+ switch ($_attributeCode) {
86
+ case 'gender':
87
+ $attrValue = Mage::helper('bronto_customer')->getAttributeAdminLabel($attribute, $customer->getData($_attributeCode));
88
+ break;
89
+ case 'dob':
90
+ $attrValue = Mage::getSingleton('core/date')->date('Y-m-d', $customer->getData($_attributeCode));
91
+ break;
92
+ default:
93
+ $attrValue = $customer->getData($_attributeCode);
94
+ break;
95
+ }
96
+
97
+ $brontoContact->setField($_fieldName, $attrValue);
98
  }
99
  }
100
 
104
  foreach ($addressAttributes as $attributeId => $attribute) {
105
  $_attributeCode = $attribute->getAttributeCode();
106
  $_fieldName = Mage::helper('bronto_customer')->getAddressAttributeField($_attributeCode, $store);
107
+
108
+ if (!empty($_fieldName) && $_fieldName != '_none_') {
109
  $brontoContact->setField($_fieldName, $primaryAddress->getData($_attributeCode));
110
  }
111
  }
112
  }
113
+
114
  $brontoContact->persist();
115
 
116
  try {
117
  // Mark Customer as imported
118
+ $customerRow->setBrontoImported(Mage::getSingleton('core/date')->gmtDate());
119
+ $customerRow->save();
120
+
121
  // Flush every 10 Customers
122
  if ($result['total'] % 100 === 0) {
123
  $result = $this->flushCustomers($contactObject, $customerCache, $result);
127
  Mage::helper('bronto_customer')->writeError($e);
128
 
129
  // Mark Customer as *not* imported
130
+ $customerRow->setBrontoImported(null);
131
+ $customerRow->save();
132
 
133
  $result['error']++;
134
  }
138
  }
139
 
140
  // Final flush (for any we miss)
141
+ $results = $this->flushCustomers($contactObject, $customerCache, $result);
142
 
143
+ Mage::helper('bronto_customer')->writeDebug(' Success: ' . $results['success']);
144
+ Mage::helper('bronto_customer')->writeDebug(' Error: ' . $results['error']);
145
+ Mage::helper('bronto_customer')->writeDebug(' Total: ' . $results['total']);
146
 
147
+ return $results;
148
  }
149
 
150
  // }}}
170
  $errorCode = $flushResultRow->getErrorCode();
171
  $errorMessage = $flushResultRow->getErrorMessage();
172
  if (isset($customerCache[$i])) {
173
+ // Get Customer Object
174
  $customer = Mage::getModel('customer/customer')->load($customerCache[$i]);
175
+
176
+ // Reset Bronto Import status
177
+ $customerRow = Mage::getModel('bronto_customer/queue')->load($customerCache[$i]);
178
+ $customerRow->setBrontoImported(null);
179
+ $customerRow->save();
180
+ Mage::log($customerRow->getId());
181
  Mage::helper('bronto_customer')->writeError("[{$errorCode}] {$errorMessage} ({$customer->getIncrementId})");
182
  } else {
183
  Mage::helper('bronto_customer')->writeError("[{$errorCode}] {$errorMessage}");
206
  );
207
 
208
  $stores = Mage::app()->getStores();
209
+ foreach ($stores as $_store) {
210
  $storeResult = $this->processCustomersForStore($_store);
211
  $result['total'] += $storeResult['total'];
212
  $result['success'] += $storeResult['success'];
226
  {
227
  /* @var $customer Mage_Customer_Model_Customer */
228
  $customer = $observer->getCustomer();
229
+
230
+ /* @var $contactQueue Bronto_Customer_Model_Queue */
231
+ $customerRow = Mage::getModel('bronto_customer/queue');
232
+
233
+ // Save Information to Queue table
234
+ $customerRow->setId($customer->getId())
235
+ ->setStoreId($customer->getStoreId())
236
+ ->setBrontoImported(null)
237
+ ->setCreatedAt($customer->getCreatedAt())
238
+ ->setUpdatedAt(Mage::getSingleton('core/date')->gmtDate())
239
+ ->save();
240
  }
241
 
242
  // }}}
app/code/community/Bronto/Customer/Model/Queue.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Bronto_Customer_Model_Queue extends Mage_Core_Model_Abstract
4
+ {
5
+ public function _construct()
6
+ {
7
+ parent::_construct();
8
+ $this->_init('bronto_customer/queue');
9
+ }
10
+ }
app/code/community/Bronto/Customer/Model/Resource/Customer/Collection.php CHANGED
@@ -22,7 +22,7 @@ class Bronto_Customer_Model_Resource_Customer_Collection
22
  */
23
  public function addBrontoNotImportedFilter()
24
  {
25
- $this->addAttributeToFilter('bronto_imported', array('null' => true));
26
  return $this;
27
  }
28
 
22
  */
23
  public function addBrontoNotImportedFilter()
24
  {
25
+ $this->addFieldToFilter('bronto_imported', array('null' => true));
26
  return $this;
27
  }
28
 
app/code/community/Bronto/Customer/Test/Config/Config.php CHANGED
@@ -14,17 +14,28 @@ class Bronto_Customer_Test_Config_Config
14
 
15
  public function modelsProvider()
16
  {
17
- return array();
 
 
 
 
18
  }
19
 
20
  public function resourceModelProvider()
21
  {
22
- return array();
 
 
 
 
 
23
  }
24
 
25
  public function observersProvider()
26
  {
27
- return array();
 
 
28
  }
29
 
30
  public function helpersProvider()
@@ -48,7 +59,7 @@ class Bronto_Customer_Test_Config_Config
48
  */
49
  public function assertCustomerModuleVersionGreaterThanOrEquals()
50
  {
51
- $this->assertModuleVersionGreaterThanOrEquals('1.0.0');
52
  }
53
 
54
 
14
 
15
  public function modelsProvider()
16
  {
17
+ return array(
18
+ array('bronto_customer/system_config_backend_cron', 'Bronto_Customer_Model_System_Config_Backend_Cron'),
19
+ array('bronto_customer/system_config_backend_newfield', 'Bronto_Customer_Model_System_Config_Backend_Newfield'),
20
+ array('bronto_customer/queue', 'Bronto_Customer_Model_Queue'),
21
+ );
22
  }
23
 
24
  public function resourceModelProvider()
25
  {
26
+ return array(
27
+ array('bronto_customer_resource/setup', 'Bronto_Customer_Model_Resource_Setup'),
28
+ array('bronto_customer_resource/customer_collection', 'Bronto_Customer_Model_Resource_Customer_Collection'),
29
+ array('bronto_customer_mysql4/queue', 'Bronto_Customer_Model_Mysql4_Queue'),
30
+ array('bronto_customer_mysql4/queue_collection', 'Bronto_Customer_Model_Mysql4_Queue_Collection'),
31
+ );
32
  }
33
 
34
  public function observersProvider()
35
  {
36
+ return array(
37
+ array('global', 'customer_save_after', 'bronto_customer/observer', 'markCustomerForReimport'),
38
+ );
39
  }
40
 
41
  public function helpersProvider()
59
  */
60
  public function assertCustomerModuleVersionGreaterThanOrEquals()
61
  {
62
+ $this->assertModuleVersionGreaterThanOrEquals('1.0.1');
63
  }
64
 
65
 
app/code/community/Bronto/Customer/controllers/Adminhtml/CustomerController.php CHANGED
@@ -14,21 +14,9 @@ class Bronto_Customer_Adminhtml_CustomerController extends Mage_Adminhtml_Contro
14
  try {
15
  $result = array('total' => 0, 'success' => 0, 'error' => 0);
16
  $model = Mage::getModel('bronto_customer/observer');
 
17
 
18
- if ($storeCode = Mage::app()->getRequest()->getParam('store')) {
19
- $store = Mage::app()->getStore($storeCode);
20
- $storeIds[] = $store->getId();
21
- } else if ($websiteCode = Mage::app()->getRequest()->getParam('website')){
22
- $website = Mage::app()->getWebsite($websiteCode);
23
- $storeIds = $website->getStoreIds();
24
- } else if ($groupCode = Mage::app()->getRequest()->getParam('group')){
25
- $website = Mage::app()->getGroup($groupCode)->getWebsite();
26
- $storeIds = $website->getStoreIds();
27
- } else {
28
- $storeIds = false;
29
- }
30
-
31
- if ($storeIds) {
32
  foreach ($storeIds as $storeId) {
33
  $storeResult = $model->processCustomersForStore($storeId);
34
  $result['total'] += $storeResult['total'];
@@ -58,25 +46,22 @@ class Bronto_Customer_Adminhtml_CustomerController extends Mage_Adminhtml_Contro
58
  */
59
  public function resetAction()
60
  {
61
- $storeIds = array();
62
- $writeConnection = Mage::getSingleton('core/resource')->getConnection('core_write');
63
- $tablePrefix = Mage::getConfig()->getTablePrefix();
 
64
 
65
- if ($storeCode = Mage::app()->getRequest()->getParam('store')) {
66
- $store = Mage::app()->getStore($storeCode);
67
- $storeIds[] = $store->getId();
68
- } else if ($websiteCode = Mage::app()->getRequest()->getParam('website')){
69
- $website = Mage::app()->getWebsite($websiteCode);
70
- $storeIds = $website->getStoreIds();
71
- } else if ($groupCode = Mage::app()->getRequest()->getParam('group')){
72
- $website = Mage::app()->getGroup($groupCode)->getWebsite();
73
- $storeIds = $website->getStoreIds();
74
- } else {
75
- $storeIds[] = null;
76
  }
77
-
78
- foreach ($storeIds as $storeId) {
79
- //
 
 
 
 
 
80
  }
81
 
82
  $this->_redirect('*/system_config/edit', array('section' => 'bronto_customer'));
14
  try {
15
  $result = array('total' => 0, 'success' => 0, 'error' => 0);
16
  $model = Mage::getModel('bronto_customer/observer');
17
+ $helper = Mage::helper('bronto_customer');
18
 
19
+ if ($storeIds = $helper->getStoreIds()) {
 
 
 
 
 
 
 
 
 
 
 
 
 
20
  foreach ($storeIds as $storeId) {
21
  $storeResult = $model->processCustomersForStore($storeId);
22
  $result['total'] += $storeResult['total'];
46
  */
47
  public function resetAction()
48
  {
49
+ $helper = Mage::helper('bronto_customer');
50
+ $storeIds = $helper->getStoreIds();
51
+
52
+ $collection = Mage::getModel('bronto_customer/queue')->getCollection();
53
 
54
+ if ($storeIds) {
55
+ $collection->addStoreFilter($storeIds);
 
 
 
 
 
 
 
 
 
56
  }
57
+
58
+ foreach ($collection->getItems() as $customerRow) {
59
+ try {
60
+ $customerRow->setBrontoImported(null)->save();
61
+ } catch (Exception $e) {
62
+ Mage::helper('bronto_customer')->writeError($e);
63
+ $this->_getSession()->addError('Reset failed: ' . $e->getMessage());
64
+ }
65
  }
66
 
67
  $this->_redirect('*/system_config/edit', array('section' => 'bronto_customer'));
app/code/community/Bronto/Customer/etc/config.xml CHANGED
@@ -2,7 +2,7 @@
2
  <config>
3
  <modules>
4
  <Bronto_Customer>
5
- <version>1.0.0</version>
6
  </Bronto_Customer>
7
  </modules>
8
  <global>
@@ -20,15 +20,17 @@
20
  <bronto_customer>
21
  <class>Bronto_Customer_Model</class>
22
  <resourceModel>bronto_customer_resource</resourceModel>
 
23
  </bronto_customer>
24
  <bronto_customer_resource>
25
  <class>Bronto_Customer_Model_Resource</class>
 
 
 
26
  <entities>
27
- <imported>
28
- <table>bronto_imported</table>
29
- </imported>
30
  </entities>
31
- </bronto_customer_resource>
32
  </models>
33
  <resources>
34
  <bronto_customer_setup>
@@ -52,15 +54,15 @@
52
  </bronto_customer_read>
53
  </resources>
54
  <events>
55
- <customer_save_before>
56
  <observers>
57
- <bronto_customer_sales_customer_save_before>
58
  <type>singleton</type>
59
  <class>bronto_customer/observer</class>
60
  <method>markCustomerForReimport</method>
61
- </bronto_customer_sales_customer_save_before>
62
  </observers>
63
- </customer_save_before>
64
  </events>
65
  </global>
66
  <adminhtml>
@@ -132,8 +134,7 @@
132
  </default>
133
  <crontab>
134
  <jobs>
135
- <bronto_customer_import>
136
- <schedule><cron_expr>*/15 * * * *</cron_expr></schedule>
137
  <run><model>bronto_customer/observer::processCustomers</model></run>
138
  </bronto_customer_import>
139
  </jobs>
2
  <config>
3
  <modules>
4
  <Bronto_Customer>
5
+ <version>1.0.1</version>
6
  </Bronto_Customer>
7
  </modules>
8
  <global>
20
  <bronto_customer>
21
  <class>Bronto_Customer_Model</class>
22
  <resourceModel>bronto_customer_resource</resourceModel>
23
+ <resourceModel>bronto_customer_mysql4</resourceModel>
24
  </bronto_customer>
25
  <bronto_customer_resource>
26
  <class>Bronto_Customer_Model_Resource</class>
27
+ </bronto_customer_resource>
28
+ <bronto_customer_mysql4>
29
+ <class>Bronto_Customer_Model_Mysql4</class>
30
  <entities>
31
+ <queue><table>bronto_customer_queue</table></queue>
 
 
32
  </entities>
33
+ </bronto_customer_mysql4>
34
  </models>
35
  <resources>
36
  <bronto_customer_setup>
54
  </bronto_customer_read>
55
  </resources>
56
  <events>
57
+ <customer_save_after>
58
  <observers>
59
+ <bronto_customer_sales_customer_save_after>
60
  <type>singleton</type>
61
  <class>bronto_customer/observer</class>
62
  <method>markCustomerForReimport</method>
63
+ </bronto_customer_sales_customer_save_after>
64
  </observers>
65
+ </customer_save_after>
66
  </events>
67
  </global>
68
  <adminhtml>
134
  </default>
135
  <crontab>
136
  <jobs>
137
+ <bronto_customer_import>
 
138
  <run><model>bronto_customer/observer::processCustomers</model></run>
139
  </bronto_customer_import>
140
  </jobs>
app/code/community/Bronto/Customer/sql/bronto_customer_setup/mysql4-upgrade-1.0.0-1.0.1.php ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * fall back to create table if existing modules already exists to support upgrade
4
+ */
5
+
6
+ $installer = $this;
7
+ /* @var $installer Mage_Core_Model_Resource_Setup */
8
+
9
+ $installer->startSetup();
10
+
11
+ try {
12
+ // Create New Table
13
+ $installer->run("
14
+ CREATE TABLE IF NOT EXISTS `{$this->getTable('bronto_customer_queue')}` (
15
+ `customer_id` int(10) unsigned NOT NULL COMMENT 'Customer Entity Id',
16
+ `store_id` smallint(5) unsigned DEFAULT NULL COMMENT 'Store Id',
17
+ `bronto_imported` datetime DEFAULT NULL COMMENT 'Bronto Imported',
18
+ `created_at` timestamp NULL DEFAULT NULL COMMENT 'Created At',
19
+ `updated_at` timestamp NULL DEFAULT NULL COMMENT 'Updated At',
20
+ PRIMARY KEY (`customer_id`),
21
+ KEY `IDX_BRONTO_CUSTOMER_QUEUE_STORE_ID` (`store_id`),
22
+ KEY `IDX_BRONTO_CUSTOMER_QUEUE_BRONTO_IMPORTED` (`bronto_imported`),
23
+ KEY `IDX_BRONTO_CUSTOMER_QUEUE_CREATED_AT` (`created_at`),
24
+ KEY `IDX_BRONTO_CUSTOMER_QUEUE_UPDATED_AT` (`updated_at`),
25
+ CONSTRAINT `FK_BRONTO_CUSTOMER_QUEUE_STORE_ID_CORE_STORE_STORE_ID` FOREIGN KEY (`store_id`) REFERENCES `{$this->getTable('core_store')}` (`store_id`) ON DELETE SET NULL ON UPDATE CASCADE
26
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Bronto Customer Import Queue';
27
+ ");
28
+
29
+ // Populate New Table
30
+ $installer->run("
31
+ INSERT IGNORE INTO `{$this->getTable('bronto_customer_queue')}`
32
+ (`customer_id`, `store_id`, `bronto_imported`, `created_at`, `updated_at`)
33
+ SELECT `ce`.`entity_id`, `ce`.`store_id`, `eav`.`value`, `ce`.`created_at`, `ce`.`updated_at`
34
+ FROM `{$this->getTable('customer_entity')}` `ce`
35
+ LEFT JOIN `{$this->getTable('eav_attribute')}` `ea` ON `ea`.`attribute_code` = 'bronto_imported'
36
+ LEFT JOIN `{$this->getTable('customer_entity_datetime')}` `eav` ON `eav`.`attribute_id` = `ea`.`attribute_id` AND `eav`.`entity_id` = `ce`.`entity_id`
37
+ WHERE `ce`.`is_active` = 1;
38
+ ");
39
+
40
+ // Remove Customer Attribute that was added on install
41
+ $installer->removeAttribute('customer', 'bronto_imported');
42
+ } catch (Exception $e) {
43
+ throw new RuntimeException('Failed Creating and Populating Table: ' . $e->getMessage());
44
+ }
45
+
46
+ $installer->endSetup();
app/code/community/Bronto/Newsletter/Block/Adminhtml/System/Config/Cron.php CHANGED
@@ -15,7 +15,7 @@ class Bronto_Newsletter_Block_Adminhtml_System_Config_Cron extends Bronto_Common
15
  */
16
  protected function _prepareLayout()
17
  {
18
- // $this->addButton($this->getLayout()->createBlock('bronto_newsletter/adminhtml_widget_button_reset'));
19
  $this->addButton($this->getLayout()->createBlock('bronto_newsletter/adminhtml_widget_button_run'));
20
 
21
  return parent::_prepareLayout();
15
  */
16
  protected function _prepareLayout()
17
  {
18
+ $this->addButton($this->getLayout()->createBlock('bronto_newsletter/adminhtml_widget_button_reset'));
19
  $this->addButton($this->getLayout()->createBlock('bronto_newsletter/adminhtml_widget_button_run'));
20
 
21
  return parent::_prepareLayout();
app/code/community/Bronto/Newsletter/Block/Adminhtml/Widget/Button/Reset.php ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * @package Bronto\Newsletter
5
+ * @copyright 2011-2012 Bronto Software, Inc.
6
+ * @version 1.1.5
7
+ */
8
+ class Bronto_Newsletter_Block_Adminhtml_Widget_Button_Reset extends Mage_Adminhtml_Block_Widget_Button
9
+ {
10
+ /**
11
+ * Internal constructor not depended on params. Can be used for object initialization
12
+ */
13
+ protected function _construct()
14
+ {
15
+ $this->setLabel('Reset All Subscribers');
16
+ $this->setOnClick("deleteConfirm('This will mark all subscribers as not-imported and will cause the importer to re-process each subscriber again.\\n\\nAre you sure you want to do this?', '" . Mage::helper('adminhtml')->getUrl('*/newsletter/reset') . "'); return false;");
17
+ $this->setClass('delete');
18
+
19
+ if (!extension_loaded('soap') || !extension_loaded('openssl') || !Mage::helper('bronto_common')->getApiToken() || !Mage::helper('bronto_customer')->isEnabled() || (!Mage::helper('bronto_customer')->isDebugEnabled() && !Mage::helper('bronto_customer')->isTestModeEnabled())) {
20
+ $this->setDisabled(true)->setClass('disabled');
21
+ }
22
+ }
23
+ }
app/code/community/Bronto/Newsletter/Block/Adminhtml/Widget/Button/Run.php CHANGED
@@ -12,8 +12,13 @@ class Bronto_Newsletter_Block_Adminhtml_Widget_Button_Run extends Mage_Adminhtml
12
  */
13
  protected function _construct()
14
  {
 
 
 
 
 
15
  $this->setLabel('Run Now');
16
- $this->setOnClick("setLocation('" . Mage::helper('adminhtml')->getUrl('*/newsletter/run') . "'); return false;");
17
 
18
  if (!extension_loaded('soap') || !extension_loaded('openssl') || !Mage::helper('bronto_common')->getApiToken() || !Mage::helper('bronto_newsletter')->isEnabled()) {
19
  $this->setDisabled(true)->setClass('disabled');
12
  */
13
  protected function _construct()
14
  {
15
+ $params = array(
16
+ 'section' => Mage::app()->getRequest()->getParam('section'),
17
+ 'website' => Mage::app()->getRequest()->getParam('website'),
18
+ 'store' => Mage::app()->getRequest()->getParam('store'),
19
+ );
20
  $this->setLabel('Run Now');
21
+ $this->setOnClick("setLocation('" . Mage::helper('adminhtml')->getUrl('*/newsletter/run', $params) . "'); return false;");
22
 
23
  if (!extension_loaded('soap') || !extension_loaded('openssl') || !Mage::helper('bronto_common')->getApiToken() || !Mage::helper('bronto_newsletter')->isEnabled()) {
24
  $this->setDisabled(true)->setClass('disabled');
app/code/community/Bronto/Newsletter/Model/Mysql4/Queue.php CHANGED
@@ -20,10 +20,16 @@
20
  */
21
  /**
22
  * @author Jeff Lambert <jeff.lambert@atlanticbt.com>
23
- * */
24
  class Bronto_Newsletter_Model_Mysql4_Queue extends Mage_Core_Model_Mysql4_Abstract
25
  {
26
-
 
 
 
 
 
 
27
  /**
28
  * Short description for function
29
  *
@@ -32,8 +38,8 @@ class Bronto_Newsletter_Model_Mysql4_Queue extends Mage_Core_Model_Mysql4_Abstra
32
  * @return void
33
  * @access public
34
  */
35
- public function _construct()
36
- {
37
- $this->_init('bronto_newsletter/queue', 'subscriber_id');
38
- }
39
  }
20
  */
21
  /**
22
  * @author Jeff Lambert <jeff.lambert@atlanticbt.com>
23
+ */
24
  class Bronto_Newsletter_Model_Mysql4_Queue extends Mage_Core_Model_Mysql4_Abstract
25
  {
26
+ /**
27
+ * Primary key auto increment flag
28
+ *
29
+ * @var bool
30
+ */
31
+ protected $_isPkAutoIncrement = false;
32
+
33
  /**
34
  * Short description for function
35
  *
38
  * @return void
39
  * @access public
40
  */
41
+ public function _construct()
42
+ {
43
+ $this->_init('bronto_newsletter/queue', 'queue_id');
44
+ }
45
  }
app/code/community/Bronto/Newsletter/Model/Mysql4/Queue/Collection.php CHANGED
@@ -23,8 +23,7 @@
23
  * */
24
  class Bronto_Newsletter_Model_Mysql4_Queue_Collection
25
  extends Mage_Core_Model_Mysql4_Collection_Abstract
26
- {
27
-
28
  /**
29
  * Short description for function
30
  *
@@ -33,8 +32,8 @@ class Bronto_Newsletter_Model_Mysql4_Queue_Collection
33
  * @return void
34
  * @access public
35
  */
36
- public function _construct() {
37
- parent::_construct();
38
- $this->_init('bronto_newsletter/queue');
39
- }
40
  }
23
  * */
24
  class Bronto_Newsletter_Model_Mysql4_Queue_Collection
25
  extends Mage_Core_Model_Mysql4_Collection_Abstract
26
+ {
 
27
  /**
28
  * Short description for function
29
  *
32
  * @return void
33
  * @access public
34
  */
35
+ public function _construct() {
36
+ parent::_construct();
37
+ $this->_init('bronto_newsletter/queue');
38
+ }
39
  }
app/code/community/Bronto/Newsletter/Model/Observer.php CHANGED
@@ -70,12 +70,14 @@ class Bronto_Newsletter_Model_Observer extends Mage_Core_Model_Abstract
70
  /* @var $subscriber Mage_Newsletter_Model_Subscriber */
71
  $subscriber = Mage::getModel('newsletter/subscriber')->loadByEmail($email);
72
  $isSubscribed = Mage::getSingleton('checkout/session')->getIsSubscribed();
73
-
74
  switch ($isSubscribed) {
75
  case self::BOX_UNCHECKED:
76
  // Unsubscribe the Customer
77
  if ($subscriber && $subscriber->isSubscribed()) {
78
  return $subscriber->unsubscribe();
 
 
79
  }
80
  break;
81
  case self::BOX_CHECKED:
@@ -95,6 +97,40 @@ class Bronto_Newsletter_Model_Observer extends Mage_Core_Model_Abstract
95
  Mage::helper('bronto_newsletter')->writeError($e);
96
  }
97
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
98
 
99
  /**
100
  * @param Varien_Event_Observer $observer
@@ -105,21 +141,14 @@ class Bronto_Newsletter_Model_Observer extends Mage_Core_Model_Abstract
105
  return;
106
  }
107
 
 
 
108
  try {
109
- // Insert contact email into queuing table. Cron will
110
- // then issue an update to Bronto on its next run.
111
  if ($subscriber = $observer->getEvent()->getSubscriber()) {
112
- $email = $subscriber->getEmail();
113
  if (!empty($email)) {
114
- /* @var $contactHelper Bronto_Newsletter_Helper_Contact */
115
- $contactHelper = Mage::helper('bronto_newsletter/contact');
116
-
117
- if (!$contactHelper->getUpdateStatus()) {
118
- $status = Bronto_Api_Contact::STATUS_TRANSACTIONAL;
119
- } else {
120
- $status = $contactHelper->getContactByEmail($email)->status;
121
- }
122
- $this->_saveToQueue($email, $contactHelper, Mage::app()->getStore()->getId());
123
  }
124
  }
125
  } catch (Exception $e) {
@@ -127,24 +156,164 @@ class Bronto_Newsletter_Model_Observer extends Mage_Core_Model_Abstract
127
  }
128
  }
129
 
130
- private function _saveToQueue($email, $helper, $storeId) {
131
- /* var $contactQueue Bronto_Newsletter_Model_Queue */
 
 
 
 
 
 
 
 
 
 
 
132
  $contactQueue = Mage::getModel('bronto_newsletter/queue');
133
 
134
- if(!$helper->getUpdateStatus()) {
135
- $status = Bronto_Api_Contact::STATUS_TRANSACTIONAL;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
136
  } else {
137
- $status = Bronto_Api_Contact::STATUS_ONBOARDING;
 
138
  }
139
 
140
- $contactQueue->setSubscriberEmail( $email )
141
- ->setStatus( $status )
142
- ->setMessagePreference( 'html' )
143
- ->setSource( 'api' )
144
- ->setStore( $storeId )
145
- ->save();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
146
  }
 
 
 
 
 
 
 
 
 
 
 
147
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
148
  static public function cronImport() {
149
  /* var $contactHelper Bronto_Newsletter_Helper_Contact */
150
  $contactHelper = Mage::helper('bronto_newsletter/contact');
@@ -159,7 +328,7 @@ class Bronto_Newsletter_Model_Observer extends Mage_Core_Model_Abstract
159
  $contact->status = $subscriber->getStatus();
160
 
161
  try {
162
- $contactHelper->saveContact($contact);
163
  $subscriber->setImported(1)->save();
164
  } catch(Exception $e) {
165
  Mage::helper('bronto_newsletter')->writeError($e);
70
  /* @var $subscriber Mage_Newsletter_Model_Subscriber */
71
  $subscriber = Mage::getModel('newsletter/subscriber')->loadByEmail($email);
72
  $isSubscribed = Mage::getSingleton('checkout/session')->getIsSubscribed();
73
+
74
  switch ($isSubscribed) {
75
  case self::BOX_UNCHECKED:
76
  // Unsubscribe the Customer
77
  if ($subscriber && $subscriber->isSubscribed()) {
78
  return $subscriber->unsubscribe();
79
+ } else {
80
+ $this->_makeTransactional($subscriber, $email);
81
  }
82
  break;
83
  case self::BOX_CHECKED:
97
  Mage::helper('bronto_newsletter')->writeError($e);
98
  }
99
  }
100
+
101
+ private function _makeTransactional($subscriber, $email)
102
+ {
103
+ // Check For Existing Contact from Bronto
104
+ try {
105
+ $contactHelper = Mage::helper('bronto_common/contact');
106
+ $contact = $contactHelper->getContactByEmail($subscriber->getSubscriberEmail(), null, Mage::app()->getStore()->getId());
107
+ } catch (Exception $e) {
108
+ Mage::helper('bronto_newsletter')->writeError($e);
109
+ return false;
110
+ }
111
+
112
+ $ownerId = Mage::getModel('customer/customer')
113
+ ->setWebsiteId(Mage::app()->getStore()->getWebsiteId())
114
+ ->loadByEmail($email)
115
+ ->getId();
116
+
117
+ if (!$ownerId) {
118
+ $ownerId = Mage::getSingleton('customer/session')->getId();
119
+ }
120
+
121
+ $subscriber->setCustomerId($ownerId);
122
+ $subscriber->setSubscriberEmail($email);
123
+ $subscriber->setStoreId(Mage::app()->getStore()->getId());
124
+ if ($contact->status == Bronto_Api_Contact::STATUS_UNSUBSCRIBED) {
125
+ $subscriber->setStatus(Mage_Newsletter_Model_Subscriber::STATUS_UNSUBSCRIBED);
126
+ } else {
127
+ $subscriber->setStatus(Mage_Newsletter_Model_Subscriber::STATUS_NOT_ACTIVE);
128
+ }
129
+
130
+ $subscriber->save();
131
+
132
+ $this->_saveToQueue($subscriber, Mage::app()->getStore()->getId());
133
+ }
134
 
135
  /**
136
  * @param Varien_Event_Observer $observer
141
  return;
142
  }
143
 
144
+ // Insert contact email into queuing table. Cron will
145
+ // then issue an update to Bronto on its next run.
146
  try {
147
+ /* @var $subscriber Mage_Newsletter_Model_Subscriber */
 
148
  if ($subscriber = $observer->getEvent()->getSubscriber()) {
149
+ $email = $subscriber->getEmail();
150
  if (!empty($email)) {
151
+ $this->_saveToQueue($subscriber, Mage::app()->getStore()->getId());
 
 
 
 
 
 
 
 
152
  }
153
  }
154
  } catch (Exception $e) {
156
  }
157
  }
158
 
159
+ /**
160
+ * Add Subscriber to Bronto Newsletter Opt-in queue
161
+ * @param Mage_Newsletter_Model_Subscriber $subscriber
162
+ * @param int $storeId
163
+ * @param string $status
164
+ * @return void
165
+ */
166
+ private function _saveToQueue($subscriber, $storeId)
167
+ {
168
+ // Get Calculated Status
169
+ $status = $this->_getQueueStatus($subscriber);
170
+
171
+ /* @var $contactQueue Bronto_Newsletter_Model_Queue */
172
  $contactQueue = Mage::getModel('bronto_newsletter/queue');
173
 
174
+ $contact = $contactQueue->getContactRow($subscriber->getId(), $storeId)
175
+ ->setSubscriberEmail($subscriber->getEmail())
176
+ ->setStatus($status)
177
+ ->setMessagePreference('html')
178
+ ->setSource('api')
179
+ ->setImported(0)
180
+ ->save();
181
+ }
182
+
183
+ /**
184
+ * Determine Status to use when sending subscriber to opt-in queue
185
+ * @param Mage_Newsletter_Model_Subscriber $subscriber
186
+ * @param int $storeId
187
+ * @return boolean
188
+ */
189
+ private function _getQueueStatus($subscriber)
190
+ {
191
+ // Set correct status based on subscriber status
192
+ switch ($subscriber->getStatus()) {
193
+ case Mage_Newsletter_Model_Subscriber::STATUS_SUBSCRIBED:
194
+ $status = Bronto_Api_Contact::STATUS_ONBOARDING;
195
+ break;
196
+
197
+ case Mage_Newsletter_Model_Subscriber::STATUS_UNSUBSCRIBED:
198
+ $status = Bronto_Api_Contact::STATUS_UNSUBSCRIBED;
199
+ break;
200
+
201
+ case Mage_Newsletter_Model_Subscriber::STATUS_NOT_ACTIVE:
202
+ $status = Bronto_Api_Contact::STATUS_TRANSACTIONAL;
203
+ break;
204
+
205
+ default:
206
+ $status = false;
207
+ break;
208
+ }
209
+
210
+ return $status;
211
+ }
212
+
213
+ /**
214
+ * @param int $storeId
215
+ * @return array
216
+ */
217
+ public function processSubscribersForStore($storeId = null)
218
+ {
219
+ if (is_object($storeId)) {
220
+ $store = $storeId;
221
+ $storeId = $store->getId();
222
  } else {
223
+ $store = Mage::app()->getStore($storeId);
224
+ $storeId = $store->getId();
225
  }
226
 
227
+
228
+
229
+ $result = array('total' => 0, 'success' => 0, 'error' => 0);
230
+ Mage::helper('bronto_newsletter')->writeDebug("Starting Subscriber Opt-In process for store: {$store->getName()} ({$storeId})");
231
+
232
+ if (!$store->getConfig(Bronto_Newsletter_Helper_Data::XML_PATH_ENABLED)) {
233
+ die('not enabled');
234
+ Mage::helper('bronto_newsletter')->writeDebug(' Module disabled for this store. Skipping...');
235
+ return false;
236
+ }
237
+
238
+ $limit = $store->getConfig(Bronto_Newsletter_Helper_Data::XML_PATH_LIMIT);
239
+ if (!$limit) {
240
+ die('no limit');
241
+ Mage::helper('bronto_newsletter')->writeDebug(' Limit empty. Skipping...');
242
+ return false;
243
+ }
244
+
245
+ $helper = Mage::helper('bronto_newsletter/contact');
246
+ $contactHelper = Mage::helper('bronto_common/contact');
247
+
248
+ $lists = $helper->getListIds($storeId);
249
+
250
+ // Get Subscriber Queue for store
251
+ /* var $subscribers Bronto_Newsletter_Model_Mysql4_Queue_Collection */
252
+ $subscribers = Mage::getModel('bronto_newsletter/queue')
253
+ ->getCollection()
254
+ ->addFilter('imported', 0)
255
+ ->addFilter('store', $storeId);
256
+
257
+ $subscribers->getSelect()->limit($limit);
258
+ foreach ($subscribers as $subscriber) {
259
+ echo 'inside foreach';
260
+ try {
261
+ echo 'inside try';
262
+ $contact = $contactHelper->getContactByEmail($subscriber->getSubscriberEmail(), null, $storeId);
263
+
264
+ foreach ($lists as $listId) {
265
+ $contactHelper->writeInfo(" Adding Contact to list: {$listId}");
266
+ $contact->addToList($listId);
267
+ }
268
+
269
+ var_dump($helper->getUpdateStatus());
270
+ if ($helper->getUpdateStatus()) {
271
+ echo 'update status set';
272
+ $contact->status = $subscriber->getStatus();
273
+ $contactHelper->writeInfo(" Setting Contact ({$contact->email}) status to: {$contact->status}");
274
+ }
275
+ $contact->save();
276
+ echo 'past save';
277
+ $subscriber->setImported(1)->save();
278
+ $result['success']++;
279
+ } catch (Exception $e) {
280
+ die($e->getMessage());
281
+ Mage::helper('bronto_newsletter')->writeError($e);
282
+
283
+ $subscriber->setImported(0)->save();
284
+ $result['error']++;
285
+ }
286
+ $result['total']++;
287
+ }
288
+
289
+ return $result;
290
  }
291
+
292
+ /**
293
+ * @return array
294
+ */
295
+ public function processSubscribers()
296
+ {
297
+ $result = array(
298
+ 'total' => 0,
299
+ 'success' => 0,
300
+ 'error' => 0,
301
+ );
302
 
303
+ $stores = Mage::app()->getStores();
304
+ foreach ($stores as $_store) {
305
+ $storeResult = $this->processSubscribersForStore($_store);
306
+ $result['total'] += $storeResult['total'];
307
+ $result['success'] += $storeResult['success'];
308
+ $result['error'] += $storeResult['error'];
309
+ }
310
+
311
+ return $result;
312
+ }
313
+
314
+ /**
315
+ * @depricated
316
+ */
317
  static public function cronImport() {
318
  /* var $contactHelper Bronto_Newsletter_Helper_Contact */
319
  $contactHelper = Mage::helper('bronto_newsletter/contact');
328
  $contact->status = $subscriber->getStatus();
329
 
330
  try {
331
+ //$contactHelper->saveContact($contact);
332
  $subscriber->setImported(1)->save();
333
  } catch(Exception $e) {
334
  Mage::helper('bronto_newsletter')->writeError($e);
app/code/community/Bronto/Newsletter/Model/Queue.php CHANGED
@@ -20,7 +20,7 @@
20
  */
21
  /**
22
  * @author Jeff Lambert <jeff.lambert@atlanticbt.com>
23
- * */
24
  class Bronto_Newsletter_Model_Queue extends Mage_Core_Model_Abstract
25
  {
26
 
@@ -32,10 +32,25 @@ class Bronto_Newsletter_Model_Queue extends Mage_Core_Model_Abstract
32
  * @return void
33
  * @access public
34
  */
35
- public function _construct()
36
- {
37
- parent::_construct();
38
- $this->_init('bronto_newsletter/queue');
39
- }
40
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
41
  }
20
  */
21
  /**
22
  * @author Jeff Lambert <jeff.lambert@atlanticbt.com>
23
+ */
24
  class Bronto_Newsletter_Model_Queue extends Mage_Core_Model_Abstract
25
  {
26
 
32
  * @return void
33
  * @access public
34
  */
35
+ public function _construct()
36
+ {
37
+ parent::_construct();
38
+ $this->_init('bronto_newsletter/queue');
39
+ }
40
+
41
+ public function getContactRow($subscriber_id, $store_id)
42
+ {
43
+ $collection = $this->getCollection()
44
+ ->addFieldToFilter('subscriber_id', $subscriber_id)
45
+ ->addFieldToFilter('store', $store_id);
46
+
47
+ if ($collection->count() == 1) {
48
+ return $collection->getFirstItem();
49
+ } else {
50
+ $this->setSubscriberId($subscriber_id)
51
+ ->setStore($store_id);
52
+ }
53
+
54
+ return $this;
55
+ }
56
  }
app/code/community/Bronto/Newsletter/Model/System/Config/Backend/Cron.php ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * @package Newsletter
5
+ * @copyright 2011-2013 Bronto Software, Inc.
6
+ */
7
+ class Bronto_Newsletter_Model_System_Config_Backend_Cron extends Bronto_Common_Model_System_Config_Backend_Cron
8
+ {
9
+ protected $_cron_string_path = 'crontab/jobs/bronto_newsletter_import/schedule/cron_expr';
10
+ protected $_cron_model_path = 'crontab/jobs/bronto_newsletter_import/run/model';
11
+ }
app/code/community/Bronto/Newsletter/Test/Config/Config.php CHANGED
@@ -9,6 +9,8 @@ class Bronto_Newsletter_Test_Config_Config
9
  return array(
10
  array('bronto_newsletter/adminhtml_system_config_about', 'Bronto_Newsletter_Block_Adminhtml_System_Config_About'),
11
  array('bronto_newsletter/checkout_onepage_newsletter', 'Bronto_Newsletter_Block_Checkout_Onepage_Newsletter'),
 
 
12
  );
13
  }
14
 
9
  return array(
10
  array('bronto_newsletter/adminhtml_system_config_about', 'Bronto_Newsletter_Block_Adminhtml_System_Config_About'),
11
  array('bronto_newsletter/checkout_onepage_newsletter', 'Bronto_Newsletter_Block_Checkout_Onepage_Newsletter'),
12
+ array('bronto_newsletter/adminhtml_widget_button_run', 'Bronto_Newsletter_Block_Adminhtml_Widget_Button_Run'),
13
+ array('bronto_newsletter/adminhtml_widget_button_reset', 'Bronto_Newsletter_Block_Adminhtml_Widget_Button_Run'),
14
  );
15
  }
16
 
app/code/community/Bronto/Newsletter/controllers/Adminhtml/NewsletterController.php CHANGED
@@ -14,35 +14,23 @@ class Bronto_Newsletter_Adminhtml_NewsletterController extends Mage_Adminhtml_Co
14
  try {
15
  $result = array('total' => 0, 'success' => 0, 'error' => 0);
16
  $model = Mage::getModel('bronto_newsletter/observer');
 
17
 
18
- if ($storeCode = Mage::app()->getRequest()->getParam('store')) {
19
- $store = Mage::app()->getStore($storeCode);
20
- $storeIds[] = $store->getId();
21
- } else if ($websiteCode = Mage::app()->getRequest()->getParam('website')){
22
- $website = Mage::app()->getWebsite($websiteCode);
23
- $storeIds = $website->getStoreIds();
24
- } else if ($groupCode = Mage::app()->getRequest()->getParam('group')){
25
- $website = Mage::app()->getGroup($groupCode)->getWebsite();
26
- $storeIds = $website->getStoreIds();
27
- } else {
28
- $storeIds = false;
29
- }
30
-
31
- if ($storeIds) {
32
  foreach ($storeIds as $storeId) {
33
- // $storeResult = $model->processCustomersForStore($storeId);
34
  $result['total'] += $storeResult['total'];
35
  $result['success'] += $storeResult['success'];
36
  $result['error'] += $storeResult['error'];
37
  }
38
  } else {
39
- // $result = $model->processCustomers();
40
  }
41
 
42
  if (is_array($result)) {
43
  $this->_getSession()->addSuccess(sprintf("Processed %d Subscribers (%d Error / %d Success)", $result['total'], $result['error'], $result['success']));
44
  } else {
45
- $this->_getSession()->addError('Scheduled Import failed: ' . $result);
46
  }
47
 
48
  } catch (Exception $e) {
@@ -58,25 +46,18 @@ class Bronto_Newsletter_Adminhtml_NewsletterController extends Mage_Adminhtml_Co
58
  */
59
  public function resetAction()
60
  {
61
- $storeIds = array();
62
- $writeConnection = Mage::getSingleton('core/resource')->getConnection('core_write');
63
- $tablePrefix = Mage::getConfig()->getTablePrefix();
64
 
65
- if ($storeCode = Mage::app()->getRequest()->getParam('store')) {
66
- $store = Mage::app()->getStore($storeCode);
67
- $storeIds[] = $store->getId();
68
- } else if ($websiteCode = Mage::app()->getRequest()->getParam('website')){
69
- $website = Mage::app()->getWebsite($websiteCode);
70
- $storeIds = $website->getStoreIds();
71
- } else if ($groupCode = Mage::app()->getRequest()->getParam('group')){
72
- $website = Mage::app()->getGroup($groupCode)->getWebsite();
73
- $storeIds = $website->getStoreIds();
74
- } else {
75
- $storeIds[] = null;
76
  }
77
 
78
- foreach ($storeIds as $storeId) {
79
- //
80
  }
81
 
82
  $this->_redirect('*/system_config/edit', array('section' => 'bronto_newsletter'));
14
  try {
15
  $result = array('total' => 0, 'success' => 0, 'error' => 0);
16
  $model = Mage::getModel('bronto_newsletter/observer');
17
+ $helper = Mage::helper('bronto_common');
18
 
19
+ if ($storeIds = $helper->getStoreIds()) {
 
 
 
 
 
 
 
 
 
 
 
 
 
20
  foreach ($storeIds as $storeId) {
21
+ $storeResult = $model->processSubscribersForStore($storeId);
22
  $result['total'] += $storeResult['total'];
23
  $result['success'] += $storeResult['success'];
24
  $result['error'] += $storeResult['error'];
25
  }
26
  } else {
27
+ $result = $model->processSubscribers();
28
  }
29
 
30
  if (is_array($result)) {
31
  $this->_getSession()->addSuccess(sprintf("Processed %d Subscribers (%d Error / %d Success)", $result['total'], $result['error'], $result['success']));
32
  } else {
33
+ $this->_getSession()->addError('Scheduled Sync failed: ' . $result);
34
  }
35
 
36
  } catch (Exception $e) {
46
  */
47
  public function resetAction()
48
  {
49
+ $subscribers = Mage::getModel('bronto_newsletter/queue')
50
+ ->getCollection()
51
+ ->addFilter('imported', 1);
52
 
53
+ foreach($subscribers as $subscriber) {
54
+ try {
55
+ $subscriber->setImported(0)->save();
56
+ } catch(Exception $e) {
57
+ Mage::helper('bronto_newsletter')->writeError($e);
 
 
 
 
 
 
58
  }
59
 
60
+
 
61
  }
62
 
63
  $this->_redirect('*/system_config/edit', array('section' => 'bronto_newsletter'));
app/code/community/Bronto/Newsletter/etc/config.xml CHANGED
@@ -2,7 +2,7 @@
2
  <config>
3
  <modules>
4
  <Bronto_Newsletter>
5
- <version>1.4.1</version>
6
  </Bronto_Newsletter>
7
  </modules>
8
  <global>
@@ -108,15 +108,7 @@
108
  <update_status>1</update_status>
109
  </contacts>
110
  </bronto_newsletter>
111
- </default>
112
- <crontab>
113
- <jobs>
114
- <bronto_newsletter_import>
115
- <schedule><cron_expr>*/15 * * * *</cron_expr></schedule>
116
- <run><model>bronto_newsletter/observer::processSubscribers</model></run>
117
- </bronto_newsletter_import>
118
- </jobs>
119
- </crontab>
120
  <adminhtml>
121
  <events>
122
  <controller_action_predispatch>
@@ -149,6 +141,15 @@
149
  </acl>
150
  </adminhtml>
151
  <admin>
 
 
 
 
 
 
 
 
 
152
  <fieldsets>
153
  <customer_account>
154
  <bronto_contact_id><create>1</create></bronto_contact_id>
@@ -157,12 +158,9 @@
157
  </admin>
158
  <crontab>
159
  <jobs>
160
- <bronto_newsletter_import>
161
- <schedule>
162
- <cron_expr>*/5 * * * *</cron_expr>
163
- </schedule>
164
  <run>
165
- <model>bronto_newsletter/observer::cronImport</model>
166
  </run>
167
  </bronto_newsletter_import>
168
  </jobs>
2
  <config>
3
  <modules>
4
  <Bronto_Newsletter>
5
+ <version>1.4.4</version>
6
  </Bronto_Newsletter>
7
  </modules>
8
  <global>
108
  <update_status>1</update_status>
109
  </contacts>
110
  </bronto_newsletter>
111
+ </default>
 
 
 
 
 
 
 
 
112
  <adminhtml>
113
  <events>
114
  <controller_action_predispatch>
141
  </acl>
142
  </adminhtml>
143
  <admin>
144
+ <routers>
145
+ <adminhtml>
146
+ <args>
147
+ <modules>
148
+ <bronto_newsletter before="Mage_Adminhtml">Bronto_Newsletter_Adminhtml</bronto_newsletter>
149
+ </modules>
150
+ </args>
151
+ </adminhtml>
152
+ </routers>
153
  <fieldsets>
154
  <customer_account>
155
  <bronto_contact_id><create>1</create></bronto_contact_id>
158
  </admin>
159
  <crontab>
160
  <jobs>
161
+ <bronto_newsletter_import>
 
 
 
162
  <run>
163
+ <model>bronto_newsletter/observer::processSubscribers</model>
164
  </run>
165
  </bronto_newsletter_import>
166
  </jobs>
app/code/community/Bronto/Newsletter/etc/system.xml CHANGED
@@ -41,7 +41,7 @@
41
  <depends><enabled>1</enabled></depends>
42
  <frontend_type>select</frontend_type>
43
  <source_model>bronto_common/system_config_source_cron_frequency</source_model>
44
- <backend_model>bronto_order/system_config_backend_cron</backend_model>
45
  <sort_order>20</sort_order>
46
  <show_in_default>1</show_in_default>
47
  <show_in_website>0</show_in_website>
@@ -143,6 +143,7 @@
143
  <show_in_website>1</show_in_website>
144
  <show_in_store>1</show_in_store>
145
  </label_text>
 
146
  <use_custom_template>
147
  <label>Use Custom Billing Template?</label>
148
  <frontend_type>select</frontend_type>
@@ -162,7 +163,7 @@
162
  <show_in_website>1</show_in_website>
163
  <show_in_store>1</show_in_store>
164
  <comment><![CDATA[<strong>Magento Default:</strong> <code>checkout/onepage/billing.phtml</code>]]></comment>
165
- </billing_template>
166
  </fields>
167
  </checkout>
168
  <contacts>
41
  <depends><enabled>1</enabled></depends>
42
  <frontend_type>select</frontend_type>
43
  <source_model>bronto_common/system_config_source_cron_frequency</source_model>
44
+ <backend_model>bronto_newsletter/system_config_backend_cron</backend_model>
45
  <sort_order>20</sort_order>
46
  <show_in_default>1</show_in_default>
47
  <show_in_website>0</show_in_website>
143
  <show_in_website>1</show_in_website>
144
  <show_in_store>1</show_in_store>
145
  </label_text>
146
+ <!-- Deprecated: Custom Billing Template not needed
147
  <use_custom_template>
148
  <label>Use Custom Billing Template?</label>
149
  <frontend_type>select</frontend_type>
163
  <show_in_website>1</show_in_website>
164
  <show_in_store>1</show_in_store>
165
  <comment><![CDATA[<strong>Magento Default:</strong> <code>checkout/onepage/billing.phtml</code>]]></comment>
166
+ </billing_template>-->
167
  </fields>
168
  </checkout>
169
  <contacts>
app/code/community/Bronto/Newsletter/sql/bronto_newsletter_setup/mysql4-install-1.0.0.php CHANGED
@@ -17,7 +17,7 @@ try {
17
  $installer->getTable('newsletter/subscriber'), 'IDX_BRONTO_IMPORTED', 'bronto_imported'
18
  );
19
  } catch (Exception $e) {
20
- // Already exists...
21
  }
22
 
23
  $installer->endSetup();
17
  $installer->getTable('newsletter/subscriber'), 'IDX_BRONTO_IMPORTED', 'bronto_imported'
18
  );
19
  } catch (Exception $e) {
20
+ throw new RuntimeException('Table Already Exists');
21
  }
22
 
23
  $installer->endSetup();
app/code/community/Bronto/Newsletter/sql/bronto_newsletter_setup/mysql4-install-1.4.0.php CHANGED
@@ -21,7 +21,7 @@ CREATE TABLE `{$this->getTable('bronto_newsletter_queue')}` (
21
  ");
22
 
23
  } catch (Exception $e) {
24
- //
25
  }
26
 
27
  $installer->endSetup();
21
  ");
22
 
23
  } catch (Exception $e) {
24
+ throw new RuntimeException('Table Already Exists');
25
  }
26
 
27
  $installer->endSetup();
app/code/community/Bronto/Newsletter/sql/bronto_newsletter_setup/mysql4-upgrade-1.4.0-1.4.1.php CHANGED
@@ -23,7 +23,7 @@ try {
23
  ");
24
 
25
  } catch (Exception $e) {
26
- //
27
  }
28
 
29
  $installer->endSetup();
23
  ");
24
 
25
  } catch (Exception $e) {
26
+ throw new RuntimeException('Table Already Exists');
27
  }
28
 
29
  $installer->endSetup();
app/code/community/Bronto/Newsletter/sql/bronto_newsletter_setup/mysql4-upgrade-1.4.1-1.4.2.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * fall back to create table if existing modules already exists to support upgrade
4
+ */
5
+
6
+ $installer = $this;
7
+ /* @var $installer Mage_Core_Model_Resource_Setup */
8
+
9
+ $installer->startSetup();
10
+
11
+ try {
12
+ $installer->run("
13
+ ALTER TABLE `{$this->getTable('bronto_newsletter_queue')}`
14
+ CHANGE COLUMN `messagePreference` `message_preference` VARCHAR(16) CHARACTER SET 'utf8' NOT NULL;
15
+ ");
16
+
17
+ } catch (Exception $e) {
18
+ throw new RuntimeException('Error altering table');
19
+ }
20
+
21
+ $installer->endSetup();
app/code/community/Bronto/Newsletter/sql/bronto_newsletter_setup/mysql4-upgrade-1.4.2-1.4.3.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * fall back to create table if existing modules already exists to support upgrade
4
+ */
5
+
6
+ $installer = $this;
7
+ /* @var $installer Mage_Core_Model_Resource_Setup */
8
+
9
+ $installer->startSetup();
10
+
11
+ try {
12
+ $installer->run("
13
+ ALTER TABLE `{$this->getTable('bronto_newsletter_queue')}`
14
+ CHANGE COLUMN `subscriber_id` `subscriber_id` INT(11) NOT NULL;
15
+ ");
16
+
17
+ } catch (Exception $e) {
18
+ throw new RuntimeException('Error altering table');
19
+ }
20
+
21
+ $installer->endSetup();
app/code/community/Bronto/Newsletter/sql/bronto_newsletter_setup/mysql4-upgrade-1.4.3-1.4.4.php ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * fall back to create table if existing modules already exists to support upgrade
4
+ */
5
+
6
+ $installer = $this;
7
+ /* @var $installer Mage_Core_Model_Resource_Setup */
8
+
9
+ $installer->startSetup();
10
+
11
+ try {
12
+ $installer->run("
13
+ ALTER TABLE `{$this->getTable('bronto_newsletter_queue')}`
14
+ ADD COLUMN `queue_id` INT(11) NOT NULL AUTO_INCREMENT FIRST ,
15
+ CHANGE COLUMN `subscriber_id` `subscriber_id` INT(11) NOT NULL AFTER `queue_id` ,
16
+ CHANGE COLUMN `store` `store` TINYINT(4) NOT NULL AFTER `subscriber_id`,
17
+ DROP PRIMARY KEY,
18
+ ADD PRIMARY KEY (`queue_id`, `subscriber_id`, `store`);
19
+ ");
20
+
21
+ } catch (Exception $e) {
22
+ throw new RuntimeException('Error altering table');
23
+ }
24
+
25
+ $installer->endSetup();
app/code/community/Bronto/Order/Block/Adminhtml/Sales/Order/View/Tab/Info.php CHANGED
@@ -15,8 +15,10 @@ class Bronto_Order_Block_Adminhtml_Sales_Order_View_Tab_Info extends Mage_Adminh
15
  protected function _toHtml()
16
  {
17
  $order = $this->getOrder();
18
- $tid = $order->getBrontoTid();
19
- $imported = $order->getBrontoImported();
 
 
20
 
21
  $deliveryHtml = empty($tid) ? $this->_getNoHtml() : $this->_getYesHtml();
22
  $importedHtml = empty($imported) ? $this->_getNoHtml() : $this->_getYesHtml();
15
  protected function _toHtml()
16
  {
17
  $order = $this->getOrder();
18
+ $orderRow = Mage::getModel('bronto_order/queue')->load($order->getId());
19
+
20
+ $tid = $orderRow->getBrontoTid();
21
+ $imported = $orderRow->getBrontoImported();
22
 
23
  $deliveryHtml = empty($tid) ? $this->_getNoHtml() : $this->_getYesHtml();
24
  $importedHtml = empty($imported) ? $this->_getNoHtml() : $this->_getYesHtml();
app/code/community/Bronto/Order/Block/Adminhtml/System/Config/Cron.php CHANGED
@@ -34,8 +34,7 @@ class Bronto_Order_Block_Adminhtml_System_Config_Cron extends Bronto_Common_Bloc
34
  protected function getProgressBarTotal()
35
  {
36
  return $this->getOrderResourceCollection()
37
- ->getSize()
38
- ;
39
  }
40
 
41
  /**
@@ -45,8 +44,7 @@ class Bronto_Order_Block_Adminhtml_System_Config_Cron extends Bronto_Common_Bloc
45
  {
46
  return $this->getOrderResourceCollection()
47
  ->addBrontoNotImportedFilter()
48
- ->getSize()
49
- ;
50
  }
51
 
52
  /**
@@ -54,19 +52,13 @@ class Bronto_Order_Block_Adminhtml_System_Config_Cron extends Bronto_Common_Bloc
54
  */
55
  protected function getOrderResourceCollection()
56
  {
57
- $collection = Mage::getModel('bronto_order/resource_order_collection');
58
-
59
- if ($storeCode = Mage::app()->getRequest()->getParam('store')) {
60
- $store = Mage::app()->getStore($storeCode);
61
- $collection->addStoreFilter($store->getId());
62
- } else if ($websiteCode = Mage::app()->getRequest()->getParam('website')){
63
- $website = Mage::app()->getWebsite($websiteCode);
64
- $collection->addStoreFilter($website->getStoreids());
65
- } else if ($groupCode = Mage::app()->getRequest()->getParam('group')){
66
- $website = Mage::app()->getGroup($groupCode)->getWebsite();
67
- $collection->addStoreFilter($website->getStoreids());
68
  }
69
-
70
  return $collection;
71
  }
72
  }
34
  protected function getProgressBarTotal()
35
  {
36
  return $this->getOrderResourceCollection()
37
+ ->getSize();
 
38
  }
39
 
40
  /**
44
  {
45
  return $this->getOrderResourceCollection()
46
  ->addBrontoNotImportedFilter()
47
+ ->getSize();
 
48
  }
49
 
50
  /**
52
  */
53
  protected function getOrderResourceCollection()
54
  {
55
+ $collection = Mage::getModel('bronto_order/queue')->getCollection();
56
+ $storeIds = Mage::helper('bronto_order')->getStoreIds();
57
+
58
+ if ($storeIds) {
59
+ $collection->addStoreFilter($storeIds);
 
 
 
 
 
 
60
  }
61
+
62
  return $collection;
63
  }
64
  }
app/code/community/Bronto/Order/Model/Mysql4/Queue.php ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Bronto_Order_Model_Mysql4_Queue extends Mage_Core_Model_Mysql4_Abstract
4
+ {
5
+ /**
6
+ * Primary key auto increment flag
7
+ *
8
+ * @var bool
9
+ */
10
+ protected $_isPkAutoIncrement = false;
11
+
12
+ /**
13
+ * Initialize Model
14
+ *
15
+ * @return void
16
+ * @access public
17
+ */
18
+ public function _construct()
19
+ {
20
+ $this->_init('bronto_order/queue', 'order_id');
21
+ }
22
+ }
app/code/community/Bronto/Order/Model/Mysql4/Queue/Collection.php ADDED
@@ -0,0 +1,88 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Bronto_Order_Model_Mysql4_Queue_Collection
4
+ extends Mage_Core_Model_Mysql4_Collection_Abstract
5
+ {
6
+ /**
7
+ * Initialize Model
8
+ *
9
+ * @return void
10
+ * @access public
11
+ */
12
+ public function _construct() {
13
+ parent::_construct();
14
+ $this->_init('bronto_order/queue');
15
+ }
16
+
17
+ /**
18
+ * @return Bronto_Order_Model_Mysql4_Queue_Collection
19
+ */
20
+ public function addBrontoImportedFilter()
21
+ {
22
+ $this->addFieldToFilter('bronto_imported', array('notnull' => true));
23
+ return $this;
24
+ }
25
+
26
+ /**
27
+ * @return Bronto_Order_Model_Mysql4_Queue_Collection
28
+ */
29
+ public function addBrontoNotImportedFilter()
30
+ {
31
+ $this->addFieldToFilter('bronto_imported', array('null' => true));
32
+ return $this;
33
+ }
34
+
35
+ /**
36
+ * @param mixed $storeIds (null, int|string, array, array may contain null)
37
+ * @return Bronto_Order_Model_Mysql4_Queue_Collection
38
+ */
39
+ public function addStoreFilter($storeIds)
40
+ {
41
+ $nullCheck = false;
42
+
43
+ if (!is_array($storeIds)) {
44
+ $storeIds = array($storeIds);
45
+ }
46
+
47
+ $storeIds = array_unique($storeIds);
48
+
49
+ if ($index = array_search(null, $storeIds)) {
50
+ unset($storeIds[$index]);
51
+ $nullCheck = true;
52
+ }
53
+
54
+ $storeIds[0] = ($storeIds[0] == '') ? 0 : $storeIds[0];
55
+
56
+ if ($nullCheck) {
57
+ $this->getSelect()->where('store_id IN(?) OR store_id IS NULL', $storeIds);
58
+ } else {
59
+ $this->getSelect()->where('store_id IN(?)', $storeIds);
60
+ }
61
+
62
+ return $this;
63
+ }
64
+
65
+ /**
66
+ * Sort order by order created_at date
67
+ *
68
+ * @param string $dir
69
+ * @return Bronto_Order_Model_Mysql4_Queue_Collection
70
+ */
71
+ public function orderByCreatedAt($dir = self::SORT_ORDER_DESC)
72
+ {
73
+ $this->setOrder('created_at', $dir);
74
+ return $this;
75
+ }
76
+
77
+ /**
78
+ * Sort order by order updated_at date
79
+ *
80
+ * @param string $dir
81
+ * @return Bronto_Order_Model_Mysql4_Queue_Collection
82
+ */
83
+ public function orderByUpdatedAt($dir = self::SORT_ORDER_DESC)
84
+ {
85
+ $this->setOrder('updated_at', $dir);
86
+ return $this;
87
+ }
88
+ }
app/code/community/Bronto/Order/Model/Observer.php CHANGED
@@ -3,7 +3,7 @@
3
  /**
4
  * @package Bronto\Order
5
  * @copyright 2011-2013 Bronto Software, Inc.
6
- * @version 1.1.5
7
  */
8
  class Bronto_Order_Model_Observer
9
  {
@@ -61,13 +61,15 @@ class Bronto_Order_Model_Observer
61
  return $result;
62
  }
63
 
64
- $orderIds = Mage::getModel('bronto_order/resource_order_collection')
65
- ->addStoreFilter($storeId)
66
  ->addBrontoNotImportedFilter()
67
  ->orderByUpdatedAt()
68
- ->getAllIds($limit);
69
-
70
- if (empty($orderIds)) {
 
 
71
  Mage::helper('bronto_order')->writeVerboseDebug(' No Orders to process. Skipping...');
72
  return $result;
73
  }
@@ -77,7 +79,8 @@ class Bronto_Order_Model_Observer
77
  $descriptionAttr = $store->getConfig(Bronto_Order_Helper_Data::XML_PATH_DESCRIPTION);
78
  $orderCache = array();
79
 
80
- foreach ($orderIds as $orderId) {
 
81
  if ($order = Mage::getModel('sales/order')->load($orderId) /* @var $order Mage_Sales_Model_Order */) {
82
  Mage::helper('bronto_order')->writeDebug(" Processing Order ID: {$orderId}");
83
  $orderCache[] = $orderId;
@@ -87,7 +90,7 @@ class Bronto_Order_Model_Observer
87
  $brontoOrder->email = $order->getCustomerEmail();
88
  $brontoOrder->id = $order->getIncrementId();
89
  $brontoOrder->orderDate = date('c', strtotime($order->getCreatedAt()));
90
- if ($tid = $order->getBrontoTid()) {
91
  $brontoOrder->tid = $tid;
92
  }
93
  $brontoOrderItems = array();
@@ -147,9 +150,9 @@ class Bronto_Order_Model_Observer
147
 
148
  try {
149
  // Mark order as imported
150
- $order->setBrontoImported(Mage::getSingleton('core/date')->gmtDate());
151
- $order->save();
152
-
153
  // Flush every 10 orders
154
  if ($result['total'] % 100 === 0) {
155
  $result = $this->flushOrders($orderObject, $orderCache, $result);
@@ -159,8 +162,8 @@ class Bronto_Order_Model_Observer
159
  Mage::helper('bronto_order')->writeError($e);
160
 
161
  // Mark import as *not* imported
162
- $order->setBrontoImported(null);
163
- $order->save();
164
 
165
  $result['error']++;
166
  }
@@ -168,15 +171,15 @@ class Bronto_Order_Model_Observer
168
  $result['total']++;
169
  }
170
  }
171
-
172
  // Final flush (for any we miss)
173
- $result = $this->flushOrders($orderObject, $orderCache, $result);
174
 
175
- Mage::helper('bronto_order')->writeDebug(' Success: ' . $result['success']);
176
- Mage::helper('bronto_order')->writeDebug(' Error: ' . $result['error']);
177
- Mage::helper('bronto_order')->writeDebug(' Total: ' . $result['total']);
178
 
179
- return $result;
180
  }
181
 
182
  /**
@@ -198,10 +201,13 @@ class Bronto_Order_Model_Observer
198
  $errorCode = $flushResultRow->getErrorCode();
199
  $errorMessage = $flushResultRow->getErrorMessage();
200
  if (isset($orderCache[$i])) {
201
- // Reset Bronto Import status
202
  $order = Mage::getModel('sales/order')->load($orderCache[$i]);
203
- $order->setBrontoImported(null);
204
- $order->save();
 
 
 
205
  Mage::helper('bronto_order')->writeError("[{$errorCode}] {$errorMessage} ({$order->getIncrementId})");
206
  } else {
207
  Mage::helper('bronto_order')->writeError("[{$errorCode}] {$errorMessage}");
@@ -227,7 +233,7 @@ class Bronto_Order_Model_Observer
227
  );
228
 
229
  $stores = Mage::app()->getStores();
230
- foreach ($stores as $_storeId => $_store) {
231
  $storeResult = $this->processOrdersForStore($_store);
232
  $result['total'] += $storeResult['total'];
233
  $result['success'] += $storeResult['success'];
3
  /**
4
  * @package Bronto\Order
5
  * @copyright 2011-2013 Bronto Software, Inc.
6
+ * @version 1.1.6
7
  */
8
  class Bronto_Order_Model_Observer
9
  {
61
  return $result;
62
  }
63
 
64
+ $orderRows = Mage::getModel('bronto_order/queue')
65
+ ->getCollection()
66
  ->addBrontoNotImportedFilter()
67
  ->orderByUpdatedAt()
68
+ ->setPageSize($limit)
69
+ ->addStoreFilter($storeId)
70
+ ->getItems();
71
+
72
+ if (empty($orderRows)) {
73
  Mage::helper('bronto_order')->writeVerboseDebug(' No Orders to process. Skipping...');
74
  return $result;
75
  }
79
  $descriptionAttr = $store->getConfig(Bronto_Order_Helper_Data::XML_PATH_DESCRIPTION);
80
  $orderCache = array();
81
 
82
+ foreach ($orderRows as $orderRow) {
83
+ $orderId = $orderRow->getOrderId();
84
  if ($order = Mage::getModel('sales/order')->load($orderId) /* @var $order Mage_Sales_Model_Order */) {
85
  Mage::helper('bronto_order')->writeDebug(" Processing Order ID: {$orderId}");
86
  $orderCache[] = $orderId;
90
  $brontoOrder->email = $order->getCustomerEmail();
91
  $brontoOrder->id = $order->getIncrementId();
92
  $brontoOrder->orderDate = date('c', strtotime($order->getCreatedAt()));
93
+ if ($tid = $orderRow->getBrontoTid()) {
94
  $brontoOrder->tid = $tid;
95
  }
96
  $brontoOrderItems = array();
150
 
151
  try {
152
  // Mark order as imported
153
+ $orderRow->setBrontoImported(Mage::getSingleton('core/date')->gmtDate());
154
+ $orderRow->save();
155
+
156
  // Flush every 10 orders
157
  if ($result['total'] % 100 === 0) {
158
  $result = $this->flushOrders($orderObject, $orderCache, $result);
162
  Mage::helper('bronto_order')->writeError($e);
163
 
164
  // Mark import as *not* imported
165
+ $orderRow->setBrontoImported(null);
166
+ $orderRow->save();
167
 
168
  $result['error']++;
169
  }
171
  $result['total']++;
172
  }
173
  }
174
+
175
  // Final flush (for any we miss)
176
+ $results = $this->flushOrders($orderObject, $orderCache, $result);
177
 
178
+ Mage::helper('bronto_order')->writeDebug(' Success: ' . $results['success']);
179
+ Mage::helper('bronto_order')->writeDebug(' Error: ' . $results['error']);
180
+ Mage::helper('bronto_order')->writeDebug(' Total: ' . $results['total']);
181
 
182
+ return $results;
183
  }
184
 
185
  /**
201
  $errorCode = $flushResultRow->getErrorCode();
202
  $errorMessage = $flushResultRow->getErrorMessage();
203
  if (isset($orderCache[$i])) {
204
+ // Get Order Object
205
  $order = Mage::getModel('sales/order')->load($orderCache[$i]);
206
+
207
+ // Reset Bronto Import status
208
+ $orderRow = Mage::getModel('bronto_order/queue')->load($orderCache[$i]);
209
+ $orderRow->setBrontoImported(null);
210
+ $orderRow->save();
211
  Mage::helper('bronto_order')->writeError("[{$errorCode}] {$errorMessage} ({$order->getIncrementId})");
212
  } else {
213
  Mage::helper('bronto_order')->writeError("[{$errorCode}] {$errorMessage}");
233
  );
234
 
235
  $stores = Mage::app()->getStores();
236
+ foreach ($stores as $_store) {
237
  $storeResult = $this->processOrdersForStore($_store);
238
  $result['total'] += $storeResult['total'];
239
  $result['success'] += $storeResult['success'];
app/code/community/Bronto/Order/Model/Order/Observer.php CHANGED
@@ -16,7 +16,16 @@ class Bronto_Order_Model_Order_Observer
16
  {
17
  /* @var $order Mage_Sales_Model_Order */
18
  $order = $observer->getCreditmemo()->getOrder();
19
- $order->setBrontoImported(null);
 
 
 
 
 
 
 
 
 
20
  }
21
 
22
  /**
@@ -28,7 +37,16 @@ class Bronto_Order_Model_Order_Observer
28
  {
29
  /* @var $order Mage_Sales_Model_Order */
30
  $order = $observer->getPayment()->getOrder();
31
- $order->setBrontoImported(null);
 
 
 
 
 
 
 
 
 
32
  }
33
 
34
  /**
@@ -41,6 +59,17 @@ class Bronto_Order_Model_Order_Observer
41
  {
42
  /* @var $order Mage_Sales_Model_Order */
43
  $order = $observer->getOrder();
44
- $order->setBrontoImported(null);
 
 
 
 
 
 
 
 
 
 
 
45
  }
46
  }
16
  {
17
  /* @var $order Mage_Sales_Model_Order */
18
  $order = $observer->getCreditmemo()->getOrder();
19
+
20
+ /* @var $contactQueue Bronto_Order_Model_Queue */
21
+ $orderRow = Mage::getModel('bronto_order/queue');
22
+
23
+ // Save Information to Queue table
24
+ $orderRow->setId($order->getId())
25
+ ->setQuoteId($order->getQuoteId())
26
+ ->setStoreId($order->getStoreId())
27
+ ->setBrontoImported(null)
28
+ ->save();
29
  }
30
 
31
  /**
37
  {
38
  /* @var $order Mage_Sales_Model_Order */
39
  $order = $observer->getPayment()->getOrder();
40
+
41
+ /* @var $contactQueue Bronto_Order_Model_Queue */
42
+ $orderRow = Mage::getModel('bronto_order/queue');
43
+
44
+ // Save Information to Queue table
45
+ $orderRow->setId($order->getId())
46
+ ->setQuoteId($order->getQuoteId())
47
+ ->setStoreId($order->getStoreId())
48
+ ->setBrontoImported(null)
49
+ ->save();
50
  }
51
 
52
  /**
59
  {
60
  /* @var $order Mage_Sales_Model_Order */
61
  $order = $observer->getOrder();
62
+
63
+ /* @var $contactQueue Bronto_Order_Model_Queue */
64
+ $orderRow = Mage::getModel('bronto_order/queue');
65
+
66
+ // Save Information to Queue table
67
+ $orderRow->setId($order->getId())
68
+ ->setQuoteId($order->getQuoteId())
69
+ ->setStoreId($order->getStoreId())
70
+ ->setCreatedAt($order->getCreatedAt())
71
+ ->setUpdatedAt($order->getUpdatedAt())
72
+ ->setBrontoImported(null)
73
+ ->save();
74
  }
75
  }
app/code/community/Bronto/Order/Model/Queue.php ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Bronto_Order_Model_Queue extends Mage_Core_Model_Abstract
4
+ {
5
+ public function _construct()
6
+ {
7
+ parent::_construct();
8
+ $this->_init('bronto_order/queue');
9
+ }
10
+
11
+ public function loadByQuote(Mage_Sales_Model_Quote $quote)
12
+ {
13
+ $collection = $this->getCollection()
14
+ ->addFieldToFilter('quote_id', $quote->getId());
15
+
16
+ if ($collection->count() > 0) {
17
+ return $collection->getFirstItem();
18
+ } else {
19
+ if (!is_null($quote->getReservedOrderId()) && $quote->getReservedOrderId() != 0) {
20
+ Mage::log('Quote Order ID: ' . $quote->getReservedOrderId());
21
+ $this->setId($quote->getReservedOrderId())
22
+ ->setQuoteId($quote->getId())
23
+ ->setStoreId($quote->getStoreId());
24
+ }
25
+ return $this;
26
+ }
27
+ }
28
+ }
app/code/community/Bronto/Order/Model/Quote/Observer.php CHANGED
@@ -17,10 +17,14 @@ class Bronto_Order_Model_Quote_Observer
17
  {
18
  /* @var $quote Mage_Sales_Model_Quote */
19
  $quote = $observer->getQuote();
 
 
 
 
20
 
21
  foreach (Mage::getModel('core/cookie')->get() as $key => $value) {
22
  if (stripos($key, "tid_") !== false) {
23
- $quote->setBrontoTid($value);
24
  break;
25
  }
26
  }
17
  {
18
  /* @var $quote Mage_Sales_Model_Quote */
19
  $quote = $observer->getQuote();
20
+
21
+ /* @var $contactQueue Bronto_Order_Model_Queue */
22
+ $orderRow = Mage::getModel('bronto_order/queue')
23
+ ->loadByQuote($quote);
24
 
25
  foreach (Mage::getModel('core/cookie')->get() as $key => $value) {
26
  if (stripos($key, "tid_") !== false) {
27
+ $orderRow->setBrontoTid($value)->save();
28
  break;
29
  }
30
  }
app/code/community/Bronto/Order/Model/Resource/Setup.php CHANGED
@@ -28,4 +28,57 @@ class Bronto_Order_Model_Resource_Setup extends Mage_Sales_Model_Mysql4_Setup
28
 
29
  return $definition;
30
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31
  }
28
 
29
  return $definition;
30
  }
31
+
32
+ /**
33
+ * Remove entity attribute. Overwritten for flat entities support
34
+ *
35
+ * @param int|string $entityTypeId
36
+ * @param string $code
37
+ * @param array $attr
38
+ * @return Mage_Sales_Model_Resource_Setup
39
+ */
40
+ public function removeAttribute($entityTypeId, $code)
41
+ {
42
+ if (isset($this->_flatEntityTables[$entityTypeId]) &&
43
+ $this->_flatTableExist($this->_flatEntityTables[$entityTypeId]))
44
+ {
45
+ $this->_removeFlatAttribute($this->_flatEntityTables[$entityTypeId], $code);
46
+ $this->_removeGridAttribute($this->_flatEntityTables[$entityTypeId], $code, $entityTypeId);
47
+ } else {
48
+ parent::removeAttribute($entityTypeId, $code, $attr);
49
+ }
50
+ return $this;
51
+ }
52
+
53
+ /**
54
+ * Remove an attribute as separate column in the table
55
+ * The sales setup class doesn't support it by default
56
+ *
57
+ * @param string $table
58
+ * @param string $attribute
59
+ * @param array $attr
60
+ * @return Mage_Sales_Model_Resource_Setup
61
+ */
62
+ protected function _removeFlatAttribute($table, $attribute)
63
+ {
64
+ $this->getConnection()->dropColumn($this->getTable($table), $attribute);
65
+ return $this;
66
+ }
67
+
68
+ /**
69
+ * Remove attribute from grid
70
+ *
71
+ * @param string $table
72
+ * @param string $attribute
73
+ * @param array $attr
74
+ * @param string $entityTypeId
75
+ * @return Mage_Sales_Model_Resource_Setup
76
+ */
77
+ protected function _removeGridAttribute($table, $attribute, $entityTypeId)
78
+ {
79
+ if (in_array($entityTypeId, $this->_flatEntitiesGrid)) {
80
+ $this->getConnection()->dropColumn($this->getTable($table . '_grid'), $attribute);
81
+ }
82
+ return $this;
83
+ }
84
  }
app/code/community/Bronto/Order/Test/Config/Config.php CHANGED
@@ -24,6 +24,8 @@ class Bronto_Order_Test_Config_Config
24
  return array(
25
  array('bronto_order_resource/setup', 'Bronto_Order_Model_Resource_Setup'),
26
  array('bronto_order_resource/order_collection', 'Bronto_Order_Model_Resource_Order_Collection'),
 
 
27
  );
28
  }
29
 
@@ -36,6 +38,7 @@ class Bronto_Order_Test_Config_Config
36
  array('bronto_order/system_config_backend_cron', 'Bronto_Order_Model_System_Config_Backend_Cron'),
37
  array('bronto_order/system_config_source_description', 'Bronto_Order_Model_System_Config_Source_Description'),
38
  array('bronto_order/system_config_source_limit', 'Bronto_Order_Model_System_Config_Source_Limit'),
 
39
  );
40
  }
41
 
24
  return array(
25
  array('bronto_order_resource/setup', 'Bronto_Order_Model_Resource_Setup'),
26
  array('bronto_order_resource/order_collection', 'Bronto_Order_Model_Resource_Order_Collection'),
27
+ array('bronto_order_mysql4/queue', 'Bronto_Order_Model_Mysql4_Queue'),
28
+ array('bronto_order_mysql4/queue_collection', 'Bronto_Order_Model_Mysql4_Queue_Collection'),
29
  );
30
  }
31
 
38
  array('bronto_order/system_config_backend_cron', 'Bronto_Order_Model_System_Config_Backend_Cron'),
39
  array('bronto_order/system_config_source_description', 'Bronto_Order_Model_System_Config_Source_Description'),
40
  array('bronto_order/system_config_source_limit', 'Bronto_Order_Model_System_Config_Source_Limit'),
41
+ array('bronto_order/queue', 'Bronto_Order_Model_Queue'),
42
  );
43
  }
44
 
app/code/community/Bronto/Order/controllers/Adminhtml/OrderController.php CHANGED
@@ -14,21 +14,9 @@ class Bronto_Order_Adminhtml_OrderController extends Mage_Adminhtml_Controller_A
14
  try {
15
  $result = array('total' => 0, 'success' => 0, 'error' => 0);
16
  $model = Mage::getModel('bronto_order/observer');
17
-
18
- if ($storeCode = Mage::app()->getRequest()->getParam('store')) {
19
- $store = Mage::app()->getStore($storeCode);
20
- $storeIds[] = $store->getId();
21
- } elseif ($websiteCode = Mage::app()->getRequest()->getParam('website')){
22
- $website = Mage::app()->getWebsite($websiteCode);
23
- $storeIds = $website->getStoreIds();
24
- } elseif ($groupCode = Mage::app()->getRequest()->getParam('group')){
25
- $website = Mage::app()->getGroup($groupCode)->getWebsite();
26
- $storeIds = $website->getStoreIds();
27
- } else {
28
- $storeIds = false;
29
- }
30
-
31
- if ($storeIds) {
32
  foreach ($storeIds as $storeId) {
33
  $storeResult = $model->processOrdersForStore($storeId);
34
  $result['total'] += $storeResult['total'];
@@ -58,41 +46,24 @@ class Bronto_Order_Adminhtml_OrderController extends Mage_Adminhtml_Controller_A
58
  */
59
  public function resetAction()
60
  {
61
- $storeIds = array();
62
- $writeConnection = Mage::getSingleton('core/resource')->getConnection('core_write');
63
- $tablePrefix = Mage::getConfig()->getTablePrefix();
 
64
 
65
- if ($storeCode = Mage::app()->getRequest()->getParam('store')) {
66
- $store = Mage::app()->getStore($storeCode);
67
- $storeIds[] = $store->getId();
68
- } elseif ($websiteCode = Mage::app()->getRequest()->getParam('website')){
69
- $website = Mage::app()->getWebsite($websiteCode);
70
- $storeIds = $website->getStoreIds();
71
- } elseif ($groupCode = Mage::app()->getRequest()->getParam('group')){
72
- $website = Mage::app()->getGroup($groupCode)->getWebsite();
73
- $storeIds = $website->getStoreIds();
74
- } else {
75
- $storeIds[] = null;
76
  }
77
-
78
- foreach ($storeIds as $storeId) {
79
- $sql = "
80
- UPDATE {$tablePrefix}sales_flat_order
81
- SET bronto_imported = null
82
- ";
83
- if (!empty($storeId)) {
84
- $storeId = (int) $storeId;
85
- $sql .= " WHERE store_id = {$storeId}";
86
- }
87
-
88
  try {
89
- $writeConnection->query($sql);
90
  } catch (Exception $e) {
91
  Mage::helper('bronto_order')->writeError($e);
92
  $this->_getSession()->addError('Reset failed: ' . $e->getMessage());
93
  }
94
  }
95
-
96
  $this->_redirect('*/system_config/edit', array('section' => 'bronto_order'));
97
  }
98
 
14
  try {
15
  $result = array('total' => 0, 'success' => 0, 'error' => 0);
16
  $model = Mage::getModel('bronto_order/observer');
17
+ $helper = Mage::helper('bronto_order');
18
+
19
+ if ($storeIds = $helper->getStoreIds()) {
 
 
 
 
 
 
 
 
 
 
 
 
20
  foreach ($storeIds as $storeId) {
21
  $storeResult = $model->processOrdersForStore($storeId);
22
  $result['total'] += $storeResult['total'];
46
  */
47
  public function resetAction()
48
  {
49
+ $helper = Mage::helper('bronto_order');
50
+ $storeIds = $helper->getStoreIds();
51
+
52
+ $collection = Mage::getModel('bronto_order/queue')->getCollection();
53
 
54
+ if ($storeIds) {
55
+ $collection->addStoreFilter($storeIds);
 
 
 
 
 
 
 
 
 
56
  }
57
+
58
+ foreach ($collection->getItems() as $orderRow) {
 
 
 
 
 
 
 
 
 
59
  try {
60
+ $orderRow->setBrontoImported(null)->save();
61
  } catch (Exception $e) {
62
  Mage::helper('bronto_order')->writeError($e);
63
  $this->_getSession()->addError('Reset failed: ' . $e->getMessage());
64
  }
65
  }
66
+
67
  $this->_redirect('*/system_config/edit', array('section' => 'bronto_order'));
68
  }
69
 
app/code/community/Bronto/Order/etc/config.xml CHANGED
@@ -2,7 +2,7 @@
2
  <config>
3
  <modules>
4
  <Bronto_Order>
5
- <version>1.1.5</version>
6
  </Bronto_Order>
7
  </modules>
8
  <global>
@@ -28,10 +28,17 @@
28
  <bronto_order>
29
  <class>Bronto_Order_Model</class>
30
  <resourceModel>bronto_order_resource</resourceModel>
 
31
  </bronto_order>
32
  <bronto_order_resource>
33
  <class>Bronto_Order_Model_Resource</class>
34
  </bronto_order_resource>
 
 
 
 
 
 
35
  </models>
36
  <resources>
37
  <bronto_order_setup>
@@ -55,15 +62,15 @@
55
  </bronto_order_read>
56
  </resources>
57
  <events>
58
- <sales_order_save_before>
59
  <observers>
60
- <bronto_order_sales_order_save_before>
61
  <type>singleton</type>
62
  <class>bronto_order/order_observer</class>
63
  <method>markOrderForReimport</method>
64
- </bronto_order_sales_order_save_before>
65
  </observers>
66
- </sales_order_save_before>
67
  <sales_order_creditmemo_refund>
68
  <observers>
69
  <bronto_order_sales_order_creditmemo_refund>
@@ -86,15 +93,15 @@
86
  </global>
87
  <frontend>
88
  <events>
89
- <sales_quote_save_before>
90
  <observers>
91
- <bronto_order_sales_quote_save_before>
92
  <type>singleton</type>
93
  <class>bronto_order/quote_observer</class>
94
  <method>addTidToQuote</method>
95
- </bronto_order_sales_quote_save_before>
96
  </observers>
97
- </sales_quote_save_before>
98
  </events>
99
  </frontend>
100
  <admin>
@@ -129,8 +136,7 @@
129
  </default>
130
  <crontab>
131
  <jobs>
132
- <bronto_order_import>
133
- <schedule><cron_expr>*/15 * * * *</cron_expr></schedule>
134
  <run><model>bronto_order/observer::processOrders</model></run>
135
  </bronto_order_import>
136
  </jobs>
2
  <config>
3
  <modules>
4
  <Bronto_Order>
5
+ <version>1.1.6</version>
6
  </Bronto_Order>
7
  </modules>
8
  <global>
28
  <bronto_order>
29
  <class>Bronto_Order_Model</class>
30
  <resourceModel>bronto_order_resource</resourceModel>
31
+ <resourceModel>bronto_order_mysql4</resourceModel>
32
  </bronto_order>
33
  <bronto_order_resource>
34
  <class>Bronto_Order_Model_Resource</class>
35
  </bronto_order_resource>
36
+ <bronto_order_mysql4>
37
+ <class>Bronto_Order_Model_Mysql4</class>
38
+ <entities>
39
+ <queue><table>bronto_order_queue</table></queue>
40
+ </entities>
41
+ </bronto_order_mysql4>
42
  </models>
43
  <resources>
44
  <bronto_order_setup>
62
  </bronto_order_read>
63
  </resources>
64
  <events>
65
+ <sales_order_save_after>
66
  <observers>
67
+ <bronto_order_sales_order_save_after>
68
  <type>singleton</type>
69
  <class>bronto_order/order_observer</class>
70
  <method>markOrderForReimport</method>
71
+ </bronto_order_sales_order_save_after>
72
  </observers>
73
+ </sales_order_save_after>
74
  <sales_order_creditmemo_refund>
75
  <observers>
76
  <bronto_order_sales_order_creditmemo_refund>
93
  </global>
94
  <frontend>
95
  <events>
96
+ <sales_quote_save_after>
97
  <observers>
98
+ <bronto_order_sales_quote_save_after>
99
  <type>singleton</type>
100
  <class>bronto_order/quote_observer</class>
101
  <method>addTidToQuote</method>
102
+ </bronto_order_sales_quote_save_after>
103
  </observers>
104
+ </sales_quote_save_after>
105
  </events>
106
  </frontend>
107
  <admin>
136
  </default>
137
  <crontab>
138
  <jobs>
139
+ <bronto_order_import>
 
140
  <run><model>bronto_order/observer::processOrders</model></run>
141
  </bronto_order_import>
142
  </jobs>
app/code/community/Bronto/Order/sql/bronto_order_setup/mysql4-upgrade-1.1.5-1.1.6.php ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * fall back to create table if existing modules already exists to support upgrade
4
+ */
5
+
6
+ $installer = $this;
7
+ /* @var $installer Mage_Core_Model_Resource_Setup */
8
+
9
+ $installer->startSetup();
10
+
11
+ try {
12
+ // Create New Table
13
+ $installer->run("
14
+ CREATE TABLE IF NOT EXISTS `{$this->getTable('bronto_order_queue')}` (
15
+ `order_id` int(10) unsigned NOT NULL COMMENT 'Order Entity Id',
16
+ `quote_id` int(11) DEFAULT NULL COMMENT 'Quote Id',
17
+ `store_id` smallint(5) unsigned DEFAULT NULL COMMENT 'Store Id',
18
+ `bronto_tid` varchar(255) DEFAULT NULL COMMENT 'Bronto Tid',
19
+ `bronto_imported` datetime DEFAULT NULL COMMENT 'Bronto Imported',
20
+ `created_at` timestamp NULL DEFAULT NULL COMMENT 'Created At',
21
+ `updated_at` timestamp NULL DEFAULT NULL COMMENT 'Updated At',
22
+ PRIMARY KEY (`order_id`),
23
+ KEY `IDX_BRONTO_ORDER_QUEUE_STORE_ID` (`store_id`),
24
+ KEY `IDX_BRONTO_ORDER_QUEUE_QUOTE_ID` (`quote_id`),
25
+ KEY `IDX_BRONTO_ORDER_QUEUE_BRONTO_IMPORTED` (`bronto_imported`),
26
+ KEY `IDX_BRONTO_ORDER_QUEUE_CREATED_AT` (`created_at`),
27
+ KEY `IDX_BRONTO_ORDER_QUEUE_UPDATED_AT` (`updated_at`),
28
+ CONSTRAINT `FK_BRONTO_ORDER_QUEUE_STORE_ID_CORE_STORE_STORE_ID` FOREIGN KEY (`store_id`) REFERENCES {$this->getTable('core_store')} (`store_id`) ON DELETE SET NULL ON UPDATE CASCADE
29
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Bronto Order Import Queue';
30
+ ");
31
+
32
+ // Populate New Table
33
+ $installer->run("
34
+ INSERT IGNORE INTO `{$this->getTable('bronto_order_queue')}`
35
+ (`order_id`, `quote_id`, `store_id`, `bronto_tid`, `bronto_imported`, `created_at`, `updated_at`)
36
+ SELECT `entity_id`, `quote_id`, `store_id`, `bronto_tid`, `bronto_imported`, `created_at`, `updated_at`
37
+ FROM `{$this->getTable('sales/order')}`;
38
+ ");
39
+
40
+ // Remove Quote and Order Attributes that were added on install
41
+ $installer->getConnection()->dropKey(
42
+ $installer->getTable('sales/order'), 'IDX_BRONTO_IMPORTED'
43
+ );
44
+ $installer->removeAttribute('quote', 'bronto_tid');
45
+ $installer->removeAttribute('order', 'bronto_tid');
46
+ $installer->removeAttribute('order', 'bronto_imported');
47
+ } catch (Exception $e) {
48
+ throw new RuntimeException('Failed Creating and Populating Table: ' . $e->getMessage());
49
+ }
50
+
51
+ $installer->endSetup();
app/code/community/Bronto/Reminder/Test/Config/Config.php CHANGED
@@ -29,8 +29,7 @@ class Bronto_Reminder_Test_Config_Config
29
  {
30
  return array(
31
  array('adminhtml', 'controller_action_predispatch', 'bronto_reminder/observer', 'checkBrontoRequirements'),
32
- array('global', 'salesrule_rule_get_coupon_types', 'bronto_reminder/observer', 'getCouponTypes'),
33
- array('global', 'checkout_allow_guest', 'bronto_reminder/observer', 'storeGuestEmailCheckout'),
34
  array('global', 'adminhtml_promo_quote_edit_tab_main_prepare_form', 'bronto_reminder/observer', 'updatePromoQuoteTabMainForm'),
35
  array('frontend', 'sales_quote_save_before', 'bronto_reminder/observer', 'storeGuestEmailCheckout'),
36
  );
29
  {
30
  return array(
31
  array('adminhtml', 'controller_action_predispatch', 'bronto_reminder/observer', 'checkBrontoRequirements'),
32
+ array('global', 'salesrule_rule_get_coupon_types', 'bronto_reminder/observer', 'getCouponTypes'),
 
33
  array('global', 'adminhtml_promo_quote_edit_tab_main_prepare_form', 'bronto_reminder/observer', 'updatePromoQuoteTabMainForm'),
34
  array('frontend', 'sales_quote_save_before', 'bronto_reminder/observer', 'storeGuestEmailCheckout'),
35
  );
app/code/community/Bronto/Reminder/etc/config.xml CHANGED
@@ -177,8 +177,7 @@
177
  </adminhtml>
178
  <crontab>
179
  <jobs>
180
- <bronto_reminder_send_notification>
181
- <schedule><cron_expr>*/15 * * * *</cron_expr></schedule>
182
  <run><model>bronto_reminder/observer::scheduledNotification</model></run>
183
  </bronto_reminder_send_notification>
184
  </jobs>
177
  </adminhtml>
178
  <crontab>
179
  <jobs>
180
+ <bronto_reminder_send_notification>
 
181
  <run><model>bronto_reminder/observer::scheduledNotification</model></run>
182
  </bronto_reminder_send_notification>
183
  </jobs>
app/code/community/Bronto/Roundtrip/Test/Model/Roundtrip.php CHANGED
@@ -15,6 +15,7 @@ class Bronto_RoundTrip_Test_Model_Roundtrip
15
  */
16
  public function processOrderShouldFailGracefully()
17
  {
 
18
  $sessions = array('admin/session', 'adminhtml/session', 'core/session');
19
  foreach ($sessions as $session) {
20
  $sessionMock = $this->getModelMockBuilder($session)
@@ -70,6 +71,11 @@ class Bronto_RoundTrip_Test_Model_Roundtrip
70
  ->method('getOrderObject')
71
  ->will($this->returnValue($orderObjectMock));
72
 
 
 
 
 
 
73
  // Don't care about any of the following methods - just need to be
74
  // Mocked so they don't choke the system when testing.
75
  $roundTrip->expects($this->any())
@@ -78,6 +84,7 @@ class Bronto_RoundTrip_Test_Model_Roundtrip
78
 
79
  $roundTrip->expects($this->any())
80
  ->method('_testCreateContact')
 
81
  ->will($this->returnValue(true));
82
 
83
  $roundTrip->expects($this->any())
15
  */
16
  public function processOrderShouldFailGracefully()
17
  {
18
+ $this->markTestIncomplete('_createContact is not mocked correctly - should prob be refactored instead');
19
  $sessions = array('admin/session', 'adminhtml/session', 'core/session');
20
  foreach ($sessions as $session) {
21
  $sessionMock = $this->getModelMockBuilder($session)
71
  ->method('getOrderObject')
72
  ->will($this->returnValue($orderObjectMock));
73
 
74
+ /*$commonApi = $this->getMock('Bronto_Common_Model_Api', array('getOrderObject'));
75
+ $commonApi->expects($this->any())
76
+ ->method('getContactObject()')
77
+ ->will($this->returnValue());*/
78
+
79
  // Don't care about any of the following methods - just need to be
80
  // Mocked so they don't choke the system when testing.
81
  $roundTrip->expects($this->any())
84
 
85
  $roundTrip->expects($this->any())
86
  ->method('_testCreateContact')
87
+ //->with($this->returnValue($commonApi))
88
  ->will($this->returnValue(true));
89
 
90
  $roundTrip->expects($this->any())
app/design/frontend/base/default/template/bronto/newsletter/js.phtml CHANGED
@@ -16,6 +16,9 @@ function prepareNewsletterField() {
16
  <?php if ($this->isSubscribed() || $this->isEnabledCheckedByDefault()): ?>
17
  $('billing:is_subscribed_box').checked = true;
18
  $('billing:is_subscribed').value = 1;
 
 
 
19
  <?php endif ?>
20
  <?php else: ?>
21
  Element.hide('register-customer-newsletter');
@@ -28,6 +31,9 @@ function prepareNewsletterField() {
28
  <?php if ($this->isSubscribed() || $this->isEnabledCheckedByDefault()): ?>
29
  $('billing:is_subscribed_box').checked = true;
30
  $('billing:is_subscribed').value = 1;
 
 
 
31
  <?php endif ?>
32
  <?php else: ?>
33
  Element.hide('register-customer-newsletter');
@@ -38,6 +44,8 @@ function prepareNewsletterField() {
38
  }
39
  <?php if ($this->isSubscribed() && !$this->isEnabledIfAlreadySubscribed()): ?>
40
  Element.hide('register-customer-newsletter');
 
 
41
  <?php endif; ?>
42
  }
43
 
@@ -47,8 +55,9 @@ Event.observe(window, 'load', function() {
47
  prepareNewsletterField();
48
  });
49
  }
50
- $$('#co-billing-form fieldset')[0].insert('<style>.col1-layout .billing_is_subscribed_box { margin-left: 240px !important; } .col1-layout #billing_subscribed_label { text-align: left; }</style>');
51
- $$('#co-billing-form fieldset')[0].insert('<input id="billing:is_subscribed" type="hidden" name="billing[is_subscribed]" value="1" /><input id="billing:is_subscribed_box" class="billing_is_subscribed_box" type="checkbox" onchange="$(\'billing:is_subscribed\').value = this.checked ? 1 : 0" checked="checked" title="<?php echo $this->__($this->getCheckboxLabelText()) ?>" style="float:left; width: auto; margin: 2px 8px 0 0;" /><label id="billing_subscribed_label" for="billing[is_subscribed]"><?php echo $this->__($this->getCheckboxLabelText()) ?></label>');
 
52
  prepareNewsletterField();
53
  });
54
  </script>
16
  <?php if ($this->isSubscribed() || $this->isEnabledCheckedByDefault()): ?>
17
  $('billing:is_subscribed_box').checked = true;
18
  $('billing:is_subscribed').value = 1;
19
+ <?php else: ?>
20
+ $('billing:is_subscribed_box').checked = false;
21
+ $('billing:is_subscribed').value = 0;
22
  <?php endif ?>
23
  <?php else: ?>
24
  Element.hide('register-customer-newsletter');
31
  <?php if ($this->isSubscribed() || $this->isEnabledCheckedByDefault()): ?>
32
  $('billing:is_subscribed_box').checked = true;
33
  $('billing:is_subscribed').value = 1;
34
+ <?php else: ?>
35
+ $('billing:is_subscribed_box').checked = false;
36
+ $('billing:is_subscribed').value = 0;
37
  <?php endif ?>
38
  <?php else: ?>
39
  Element.hide('register-customer-newsletter');
44
  }
45
  <?php if ($this->isSubscribed() && !$this->isEnabledIfAlreadySubscribed()): ?>
46
  Element.hide('register-customer-newsletter');
47
+ $('billing:is_subscribed_box').checked = true;
48
+ $('billing:is_subscribed').value = 1;
49
  <?php endif; ?>
50
  }
51
 
55
  prepareNewsletterField();
56
  });
57
  }
58
+ $$('#co-billing-form fieldset')[0].insert('<span id="register-customer-newsletter" style="display:none;"></span>')
59
+ $$('#co-billing-form fieldset #register-customer-newsletter')[0].insert('<style>.col1-layout .billing_is_subscribed_box { margin-left: 240px !important; } .col1-layout #billing_subscribed_label { text-align: left; }</style>');
60
+ $$('#co-billing-form fieldset #register-customer-newsletter')[0].insert('<input id="billing:is_subscribed" type="hidden" name="billing[is_subscribed]" value="1" /><input id="billing:is_subscribed_box" class="billing_is_subscribed_box" type="checkbox" onchange="$(\'billing:is_subscribed\').value = this.checked ? 1 : 0" checked="checked" title="<?php echo $this->__($this->getCheckboxLabelText()) ?>" style="float:left; width: auto; margin: 2px 8px 0 0;" /><label id="billing_subscribed_label" for="billing[is_subscribed]"><?php echo $this->__($this->getCheckboxLabelText()) ?></label>');
61
  prepareNewsletterField();
62
  });
63
  </script>
package.xml CHANGED
@@ -1,7 +1,7 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Bronto_Extension</name>
4
- <version>2.0.1</version>
5
  <stability>stable</stability>
6
  <license uri="http://opensource.org/licenses/osl-3.0.php">OSL</license>
7
  <channel>community</channel>
@@ -55,9 +55,9 @@
55
  &lt;p /&gt;Bronto Software provides a cloud-based marketing platform for retailers to drive revenue through their email, mobile and social campaigns. The platform is used by over 1000 organizations worldwide, including Party City, Armani Exchange, Timex, Samsonite and Gander Mountain. Bronto is a Gold Magento Industry Partner and the leading self-service email marketing provider to the Internet Retailer Top 1000. Bronto is headquartered in Durham, NC with an office in London, UK. For more information, visit &lt;a href="http://bronto.com"&gt;bronto.com&lt;/a&gt;.&lt;/p&gt;</description>
56
  <notes>&lt;p /&gt;For installation and configuration instructions, as well as a full list of new features and known issues, please review the &lt;a href="http://a.bron.to/magento"&gt;Implementation Guide&lt;/a&gt;.</notes>
57
  <authors><author><name>Dave Johnson</name><user>BrontoSoftware</user><email>dave.johnson@bronto.com</email></author></authors>
58
- <date>2013-03-05</date>
59
- <time>18:18:40</time>
60
- <contents><target name="magecommunity"><dir name="Bronto"><dir name="Common"><dir name="Block"><dir name="Adminhtml"><dir name="System"><dir name="Config"><file name="About.php" hash="b9a97e617dd42ef7d79e928338b9c845"/><file name="Cron.php" hash="b1c18891073fa233cd5e44f16c60ec97"/><dir name="Form"><dir name="Field"><file name="Apitoken.php" hash="6f3121e8a5ee54c58993654018048b9e"/><file name="Hidden.php" hash="18a13153df6dd084840086105f8117cc"/><file name="List.php" hash="48f36e9d06e6bc759e36ebb1128aa513"/></dir><file name="Field.php" hash="bfc0b65b927934ba54bb5225c0fb9247"/></dir></dir></dir></dir></dir><dir name="Helper"><file name="Contact.php" hash="aa0f86b84c97399bdf259935de33dca0"/><file name="Data.php" hash="51ab32c1c02291919613d0cd55b5f68f"/><file name="DataInterface.php" hash="a6700f3a4a79f6d6468df24f714427a9"/><file name="Field.php" hash="683839cfcd4fd5cd81b0393fc67b019c"/><file name="Message.php" hash="22d6224ab354a6ed7dc13d1e6e0a2fc5"/><file name="Product.php" hash="64202787e5f0c63a38efff387ab3c325"/></dir><dir name="Model"><file name="Api.php" hash="3716948a5e50e621625714a1e3a93263"/><dir name="Email"><dir name="Message"><file name="Filter.php" hash="4668bb03abbb5029980765c0b712fd5c"/><file name="Templatefilter.php" hash="783dcbb689021665f2b7f34f83bb99c2"/></dir><file name="Message.php" hash="17086fba16eed6986c0ab1fafbeffbd6"/></dir><file name="Keysentry.php" hash="fd39d0a0208668723d0c0adb0b31bd67"/><file name="Observer.php" hash="73b02a94aba279c05dd7753ac10fdb75"/><dir name="Resource"><file name="Setup.php" hash="780f5c070cbd9da2f003372ee90a0891"/></dir><dir name="System"><dir name="Config"><dir name="Backend"><file name="Cron.php" hash="b05e28fb0cc0db0377eee68ffc712c10"/><file name="Token.php" hash="03a0cf45efe77307e06afa3b4a98b214"/></dir><dir name="Source"><dir name="Contact"><file name="Status.php" hash="1bf6c053f8132a36dd6882e0f1faf45f"/></dir><dir name="Cron"><file name="Frequency.php" hash="c6689871a7a8add3dc4b84e4a2ff6f10"/><file name="Minutes.php" hash="be3e3066819785b55a25f22c5bc9392a"/></dir><file name="Field.php" hash="36d8ea711c4eecfa6eaa6b6e3216920e"/><file name="List.php" hash="69497100fe9f036c442b9d94133c8f4a"/><file name="Message.php" hash="4fb4e4f9deaabe4971bfcdf3e12b0da4"/></dir></dir></dir></dir><dir name="Test"><dir name="Config"><file name="Config.php" hash="02b55ba2804a024740506c4df0ebdd42"/></dir><dir name="Model"><file name="Checkout.php" hash="9716ab2c76558e463f1a105308973b74"/><dir name="Keysentry"><dir name="fixtures"><file name="seed.yaml" hash="3a9b13b2ef5a72bea298be72edba821d"/></dir></dir><file name="Keysentry.php" hash="fe06eff7212d57057ed1ee490238694f"/></dir></dir><dir name="controllers"><file name="LogController.php" hash="d97e8dc3624053d563389b8b19c71c06"/></dir><dir name="etc"><file name="adminhtml.xml" hash="f5792bf262cf83cc193d23c09a17a03f"/><file name="config.xml" hash="598489278d358a7297d3ef0f97e5bce2"/><file name="system.xml" hash="3a7ab89d5c344d5600b52604ee5b681a"/></dir><dir name="sql"><dir name="bronto_common_setup"><file name="mysql4-install-1.7.0.php" hash="c8459d26fdfea2fb9430e8829b3257e1"/></dir></dir></dir><dir name="ConflictChecker"><dir name="Block"><dir name="Adminhtml"><dir name="System"><dir name="Config"><file name="About.php" hash="9049055c03e261b2452c926d801196a6"/><file name="Conflictchecker.php" hash="c00f929ef55e95597761871674077b10"/></dir></dir></dir><file name="Printer.php" hash="cd8ef4c01028da3d690ce6f5c53d1f61"/></dir><dir name="Helper"><file name="Data.php" hash="0f5c562370c77b6cfe9579dc7fe396d0"/></dir><dir name="Model"><dir name="Config"><file name="Blocks.php" hash="78eb63947ae94be2b1dc9ee42de52152"/><file name="Checker.php" hash="a1a38b9c4a518e0be2e4ea84adab0107"/><file name="ConfigAbstract.php" hash="8bc2be8485543a17338cb953d760c71c"/><file name="ConfigInterface.php" hash="86a788c1b1971828c8f947b42f03baea"/><file name="Datastore.php" hash="d2b37735fe127d831e6055e05b232fb8"/><file name="Helpers.php" hash="3de600b842bf90c53417843e9b4c1946"/><file name="Models.php" hash="0358f506ff4e5820b61b076701f0746d"/><file name="Printer.php" hash="6d2aec31a623b943d3d982c97999be13"/><file name="Resources.php" hash="9f12487e864cd4005c53b72fe02e4cf4"/></dir><dir name="Core"><dir name="Config"><file name="Base.php" hash="b1ecb5cd90e050d1c825beb65e6d888e"/><file name="Element.php" hash="2efb1a1c022cb393ab5718c1f7eafd1f"/></dir><file name="Config.php" hash="29408203a0aa8b7afa84ba16b1416f91"/></dir><dir name="Lib"><dir name="Varien"><dir name="Simplexml"><file name="Config.php" hash="3acbdd7d7c9fa6c346688e5083569596"/><file name="Element.php" hash="f5961e7a41035851cabf7fcd8022a13a"/></dir></dir></dir><dir name="Mysql4"><dir name="Core"><file name="Config.php" hash="36685bb89b45c71cfc447727ce66ea9a"/></dir></dir><dir name="Path"><dir name="Locator"><file name="Array.php" hash="f82c5966dab92ed91a9441a0231e7ace"/><file name="Factory.php" hash="bea2e4a6bea17815a9040341209f4256"/><file name="IteratorAbstract.php" hash="9adccb7c853d80e8d64a0eb8346f3cbc"/><file name="LocatorInterface.php" hash="b3cf0d528296ee0e87e7898da44baa47"/><file name="Stack.php" hash="4524078604b43dffcf57c7a23959ef03"/></dir></dir><dir name="Resource"><dir name="Core"><file name="Config.php" hash="6b69bd1c0ce0e4c92c1c96436f79e83d"/></dir></dir></dir><dir name="Test"><dir name="Config"><file name="Config.php" hash="23de17a20f7a5588bb9761a2d3eb79ae"/></dir><dir name="Model"><dir name="Path"><dir name="Locator"><file name="Array.php" hash="e219f193e027d5c9a5d9cb9d7a27a6ac"/><file name="Factory.php" hash="36ffe1ec656f3f3ba1f99dd743e52c0b"/><file name="Stack.php" hash="29cbf00cd66bc61ee16c740847d9f400"/></dir></dir></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="9d5cab56f52b0d12688c5787e3bfa03f"/><file name="config.xml" hash="0497e6c9bf942db62d01e0595437166b"/><file name="system.xml" hash="6d6b10860c55f815efe815d7ee0c2290"/></dir></dir><dir name="Customer"><dir name="Block"><dir name="Adminhtml"><dir name="System"><dir name="Config"><file name="About.php" hash="5874d9bf1ff106212a348815104c5244"/><file name="Cron.php" hash="28f60152deb249501def5ec612623398"/><dir name="Form"><dir name="Fieldset"><dir name="Attributes"><file name="Address.php" hash="3dc1e6ab5531e65d229f136b0e7cf1fe"/><file name="Customer.php" hash="655784371a5be6e32b12ad3742145d6d"/></dir><file name="Attributes.php" hash="fd77169977b903ecbd179723c9bad5dd"/></dir></dir></dir></dir><dir name="Widget"><dir name="Button"><file name="Reset.php" hash="74d38897533f7b4e67d476dd791a38ee"/><file name="Run.php" hash="e707627c781ea4323d1924fa33094320"/></dir></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="4c9539a4521e77e961f761301a81a191"/></dir><dir name="Model"><file name="Observer.php" hash="6bff80541229952a66c3c8ffc79bae73"/><dir name="Resource"><dir name="Customer"><file name="Collection.php" hash="35a0ce62d2a29b9cb768698121dfe87b"/></dir><file name="Setup.php" hash="6e988a951049e5b0e0e7ed214e84f277"/></dir><dir name="System"><dir name="Config"><dir name="Backend"><file name="Cron.php" hash="dbcd55d41447d46fded27dfa2e6febb0"/><file name="Newfield.php" hash="d9a66dbc0b932fb80c7c947c3ce29bba"/></dir></dir></dir></dir><dir name="Test"><dir name="Config"><file name="Config.php" hash="1610a3a3256fc0d1b277bb2d82431ae0"/></dir></dir><dir name="controllers"><dir name="Adminhtml"><file name="CustomerController.php" hash="d25faab3ee92f4af43347d7924239592"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="6cc229b440b34da710887aaf96bbcf81"/><file name="config.xml" hash="8e547a9e25ef2b203cacaf420107044b"/><file name="system.xml" hash="4ea888d7af3d269937ac8358e8c862ff"/></dir><dir name="sql"><dir name="bronto_customer_setup"><file name="mysql4-install-1.0.0.php" hash="871c225318588b2804a05751bce45e1f"/></dir></dir></dir><dir name="Email"><dir name="Block"><dir name="Adminhtml"><dir name="System"><dir name="Config"><file name="About.php" hash="10cb51420b205c100ef46cf59edef05b"/></dir><dir name="Email"><dir name="Log"><dir name="Grid"><dir name="Renderer"><file name="Customer.php" hash="c2530287b293e05508816049586ef5c2"/><file name="Fields.php" hash="6c5d921b6c636329f035381af4c7f028"/></dir></dir><file name="Grid.php" hash="b54cada4029aa45290679e6cf69f8c47"/></dir><file name="Log.php" hash="3fa0b873d262b3d5c6161c1aef33e6ae"/><dir name="Template"><dir name="Edit"><file name="Form.php" hash="804a3fc8d0e773639f8eb2fe3df1ab1f"/></dir><file name="Edit.php" hash="bcc5b9ba9bee92a3e8f33684dd02506f"/><dir name="Grid"><dir name="Renderer"><file name="Message.php" hash="bf56f19c9f4310609fbb9a788768e222"/></dir></dir><file name="Grid.php" hash="6a253035cf2db239f93b73667e92ee63"/></dir><file name="Template.php" hash="b33503babba2480ca840569629dfbb07"/></dir></dir></dir></dir><dir name="Helper"><file name="Contact.php" hash="712033409f93712e4a22cf89252d44e4"/><file name="Data.php" hash="e582e103dfe73cb4ab9e6eb675f81309"/><file name="Field.php" hash="e4714e9cc95bdfe4da9a16feb604f44c"/><file name="Message.php" hash="f328dcee7934ddc48d6f4d40afff74cc"/></dir><dir name="Model"><dir name="Email"><file name="Message.php" hash="5d2c4b3ac3120352f8424863ad176dc6"/></dir><file name="Log.php" hash="2740d9cd5073106f58880e57e84ce8ee"/><dir name="Mysql4"><dir name="Log"><file name="Collection.php" hash="6de4819537636d3ea7816cb7c6fc250c"/></dir><file name="Log.php" hash="15ffb2c83281c77b5d427ff29abac776"/></dir><file name="Observer.php" hash="0b67950706c21220a4712bc0c279ba00"/><dir name="System"><dir name="Config"><dir name="Source"><dir name="Email"><file name="Template.php" hash="ba80e6553c61e731b85c027cd688ca8f"/></dir></dir></dir></dir><dir name="Template"><file name="Import.php" hash="b808d3e5a70dc30e09448b20dd000708"/></dir></dir><dir name="Test"><dir name="Config"><file name="Config.php" hash="8a74889c3f24c3053baefca6e7d7eddb"/></dir><dir name="Model"><dir name="Email"><file name="Message.php" hash="11a9aded1841673bdafd4675de78a19e"/></dir></dir></dir><dir name="controllers"><dir name="Adminhtml"><dir name="System"><dir name="Email"><file name="LogController.php" hash="386560ba30da12796614db1d0381bb7c"/><file name="TemplateController.php" hash="578112502761e70000ff10ca67502034"/></dir></dir></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="35a2ffa5e273f87b6d2de172cea4a219"/><file name="config.xml" hash="37e21ee9d0458bd28379446f063457a5"/><file name="system.xml" hash="2e6f8375e4794780c2f49f68536d2c6b"/></dir><dir name="sql"><dir name="bronto_email_setup"><file name="mysql4-install-1.0.0.php" hash="516265312ede986c1a35a19b9e5bbfea"/><file name="mysql4-install-1.0.2.php" hash="327ac219e947d608fbf9d3209dd03bab"/><file name="mysql4-install-1.0.5.php" hash="327ac219e947d608fbf9d3209dd03bab"/><file name="mysql4-install-1.0.8.php" hash="b572625c1380dfffe3b089275ac1dc7e"/><file name="mysql4-install-1.1.2.php" hash="bf80f7b12eccdad2e0e36a564e18530c"/><file name="mysql4-upgrade-1.0.0-1.0.2.php" hash="1f797c3f909d72219ef5d00017b10554"/><file name="mysql4-upgrade-1.0.2-1.0.5.php" hash="f2c83b65500d9df0fd10c2e6721f2bfe"/><file name="mysql4-upgrade-1.0.5-1.0.8.php" hash="cdbda7aa084e51b9b222c56e548462a6"/><file name="mysql4-upgrade-1.0.8-1.1.1.php" hash="f2c83b65500d9df0fd10c2e6721f2bfe"/><file name="mysql4-upgrade-1.1.1-1.1.2.php" hash="0538afef03b1e21d509593e2ad275c34"/></dir></dir></dir><dir name="Newsletter"><dir name="Block"><dir name="Adminhtml"><dir name="System"><dir name="Config"><file name="About.php" hash="bc44a52305e7cbe3a41c5f19e6257ede"/><file name="Cron.php" hash="1b4aca8bcab75685754a441e4dd77b04"/></dir></dir><dir name="Widget"><dir name="Button"><file name="Run.php" hash="4d23a9eba8aab13d9fc71ed369e42e4e"/></dir></dir></dir><dir name="Checkout"><dir name="Onepage"><file name="Newsletter.php" hash="e0ba7884794f68fe3c299946ef8e63a4"/></dir></dir></dir><dir name="Helper"><file name="Contact.php" hash="85dffba4f8edd375e53ca59f7a4bf1a0"/><file name="Data.php" hash="62e5be8e1326862fee10774654daad15"/></dir><dir name="Model"><dir name="Mysql4"><dir name="Queue"><file name="Collection.php" hash="de63f9f3b73cf040d16b1eb971d499a5"/></dir><file name="Queue.php" hash="f5a1e0ee4f7901fc555313d9828761c5"/></dir><file name="Observer.php" hash="8318825696a7020c88cec0b459843c5f"/><file name="Queue.php" hash="e7bf4ff44b4033257ae7892f1966e20d"/></dir><dir name="Test"><dir name="Config"><file name="Config.php" hash="c749aea6f1147d0b164de83c7eb0d8d1"/></dir></dir><dir name="controllers"><dir name="Adminhtml"><file name="NewsletterController.php" hash="18972c972f84cf8d267bfead4ffc1b7d"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="253518e92554bf89fabe7b832a7a562c"/><file name="config.xml" hash="5f292e14c0f89d901ed94de2351ca978"/><file name="system.xml" hash="b1cfe14bf4b8c5c4097790996bddd2f0"/></dir><dir name="sql"><dir name="bronto_newsletter_setup"><file name="mysql4-install-1.0.0.php" hash="49beafe0e59744cfe7dd1297da7c5975"/><file name="mysql4-install-1.4.0.php" hash="fa8797dee2ef1096292aefb983487eb2"/><file name="mysql4-upgrade-1.4.0-1.4.1.php" hash="bd58648cbf4a65e300ef386db3f51de5"/></dir></dir></dir><dir name="Order"><dir name="Block"><dir name="Adminhtml"><dir name="Sales"><dir name="Order"><dir name="View"><dir name="Tab"><file name="Info.php" hash="7ba16c9e796b59a179ae8af230ccf33e"/></dir></dir></dir></dir><dir name="System"><dir name="Config"><file name="About.php" hash="126e3166dace48941fccbe2bb4c80264"/><file name="Cron.php" hash="ce303baf533f78ce71680602cae07e94"/></dir></dir><dir name="Widget"><dir name="Button"><file name="Reset.php" hash="9bfbc1f1ffb38389a3a47ca009a24a35"/><file name="Run.php" hash="5b833a216bea22b962f633e33f6a86b8"/></dir></dir></dir><file name="Bta.php" hash="10f7f6f5e5e701dafefe8034095ae11e"/></dir><dir name="Helper"><file name="Data.php" hash="87f5a3a40ce32e8fcb2588ef7971c38d"/></dir><dir name="Model"><file name="Observer.php" hash="ef95f78e32c6097f97c8fe34ef951755"/><dir name="Order"><file name="Observer.php" hash="6cd2eab4b2f3535ad51125207f51a329"/></dir><dir name="Quote"><file name="Observer.php" hash="e3edc38e2c4a29c67a65348d1998bded"/></dir><dir name="Resource"><dir name="Order"><file name="Collection.php" hash="115c9b1e668b6c832b158cbce3544254"/></dir><file name="Setup.php" hash="6ad289c714abf1cf9caba38014998838"/></dir><dir name="System"><dir name="Config"><dir name="Backend"><file name="Cron.php" hash="96199a296f15518a89fde9384cf5fb0d"/></dir><dir name="Source"><file name="Description.php" hash="67364bc17dc197e4dd2a6e0382c75722"/><file name="Limit.php" hash="789f0e42eaafa65b4970ad107206102c"/></dir></dir></dir></dir><dir name="Test"><dir name="Config"><file name="Config.php" hash="34bc93c0aab6b4898e3637d2307cab3f"/></dir></dir><dir name="controllers"><dir name="Adminhtml"><file name="OrderController.php" hash="c1873347a5d6046ed593d52a74d307e2"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="0c4a0a1117117613d148157557f2abb3"/><file name="config.xml" hash="00072f04579c82955d6215dde944659d"/><file name="system.xml" hash="131d320296a91ef24c43dcb60c01ec8e"/></dir><dir name="sql"><dir name="bronto_order_setup"><file name="mysql4-install-1.0.0.php" hash="81b57488dbc44047db4099c41fdac54e"/></dir></dir></dir><dir name="PermissionChecker"><dir name="Block"><dir name="Adminhtml"><dir name="System"><dir name="Config"><file name="About.php" hash="5c0990417244c38485b5c9eda45fa80a"/><file name="Permissionchecker.php" hash="9cabf571a4dab49fa26d8ff1b35b0646"/></dir></dir></dir><file name="Printer.php" hash="7f9d480227c8211aa9e2db66ecd34f3f"/></dir><dir name="Helper"><file name="Data.php" hash="4fab093494eb9a793583e2294d2a2489"/></dir><dir name="Model"><dir name="Validator"><file name="Checker.php" hash="2a8259840b7f0e75b52bdcc93adb8922"/><file name="Directory.php" hash="89a0981e5ed7b70446054d9e8f31300e"/><file name="File.php" hash="539342c217889f7fd0f19f3b731bea23"/><dir name="Filter"><file name="PatternIterator.php" hash="9bdc50cda8d18e3335d8fc07fa72f733"/></dir><file name="Group.php" hash="8dc26a97c43fa2bbe58264b3117324a9"/><file name="Owner.php" hash="fc20d838f28c3406d74475fd4dbf33f0"/><file name="Printer.php" hash="e49b843f43f835d35ba838a2b8c7d00d"/><file name="ValidatorAbstract.php" hash="bccd4db6601922c5a632680c226e03c6"/><file name="ValidatorInterface.php" hash="877e881c030573fdbcd344174eceec8a"/></dir></dir><dir name="Test"><dir name="Config"><file name="Config.php" hash="672ed6161380fbf88a516377e62031be"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="058c7be44feea32fc5bc646a5632b4f3"/><file name="config.xml" hash="c4df9b0d873371a626029bd25cfe1c41"/><file name="system.xml" hash="4bb28ac8646a04f6ea857f79cd75475e"/></dir></dir><dir name="Reminder"><dir name="Block"><dir name="Adminhtml"><dir name="Promo"><file name="Notice.php" hash="d5991ebe75066fa76f23eb9464619f08"/></dir><dir name="Reminder"><dir name="Edit"><file name="Form.php" hash="779f8effae92303da303c889db9cef65"/><dir name="Tab"><file name="Bronto.php" hash="a4f19c14cddab68e1180723984f10ccb"/><file name="Conditions.php" hash="f3ad1c6438079bf43183825b52fde3f3"/><file name="Customers.php" hash="668c91478d859d2aa1eb6027d2bbef75"/><file name="General.php" hash="8c7ff650f320b57a208ecf825142e877"/></dir><file name="Tabs.php" hash="accefd148ad3cf28d36e890c138078f2"/></dir><file name="Edit.php" hash="a05e23f5249c97ac7965ecf27672d1a6"/><file name="Grid.php" hash="ebbe203d00c8e21ca591b55c48572cdb"/></dir><file name="Reminder.php" hash="82d616907ffc84eed0aa688f218ed7f1"/><dir name="System"><dir name="Config"><file name="About.php" hash="ce52e60802d1b9d251cef6a7c34564ce"/><file name="Cron.php" hash="ba8f69a491407b48ec72eb7351249c98"/></dir></dir><dir name="Widget"><dir name="Grid"><dir name="Column"><dir name="Renderer"><file name="Email.php" hash="5d9cbf69ea3bfcbc0f96d9a3dd8f613a"/><file name="Id.php" hash="e221f8f87969c1299a7daf3796dd7bbf"/></dir></dir></dir></dir></dir></dir><dir name="Helper"><file name="Contact.php" hash="a46c741761b5440eda28c9a8ac2df080"/><file name="Data.php" hash="36eff50aafd65ca66f13aa15c5e65beb"/><file name="Message.php" hash="a02936281f98cd990ecd17c32bfada46"/></dir><dir name="Model"><dir name="Condition"><file name="Abstract.php" hash="92b5e50a4e9b39dff50d83f1099db882"/><dir name="Combine"><file name="Abstract.php" hash="ea03be5f19662b5392147b64c1049e2c"/></dir></dir><dir name="Email"><file name="Message.php" hash="fe2f318ef70bd0d7be3de34b77b5ef2d"/></dir><file name="Guest.php" hash="4e220c343693ca30560294f8e4cfc9be"/><dir name="Mysql4"><dir name="Customer"><file name="Collection.php" hash="4fc63d20f3f7a92770dcaebf17bba84e"/></dir><dir name="Guest"><file name="Collection.php" hash="9002af1ece49d28124724db5dd112119"/></dir><file name="Guest.php" hash="e8b815dce460b039053ef224628ad676"/><dir name="Rule"><file name="Collection.php" hash="2969bb11fa9e83523da7b41d834381b4"/></dir><file name="Rule.php" hash="38a1ac22b504900fe3b0d11426c3f7cf"/></dir><file name="Observer.php" hash="fc4471bd9b2aaaaa8eb689b591cce43f"/><dir name="Rule"><dir name="Condition"><dir name="Cart"><file name="Amount.php" hash="8b2a76a43ebe3735556757db407e3409"/><file name="Attributes.php" hash="6bc41aca8c8a7846fae4f894306ffa45"/><file name="Combine.php" hash="add54bf57284e6c48008db605e0df3d4"/><file name="Couponcode.php" hash="f0144e4e5bbf157e2268e3765b46dd24"/><file name="Itemsquantity.php" hash="6c605a49ebe9582f5b57e24085079a6b"/><file name="Sku.php" hash="090610f405b398600e00d33325ec12c4"/><file name="Storeview.php" hash="00262bc083ef7297989056cdf768274e"/><file name="Subcombine.php" hash="b10d46333d76a881654cc6d2a67e6880"/><file name="Subselection.php" hash="8873aa2845c638d6a7658652eec40f0e"/><file name="Totalquantity.php" hash="5edc528cbd0688746a01157595720076"/><file name="Virtual.php" hash="f65e64572c526c6c50e38d1bb9d9a52f"/></dir><file name="Cart.php" hash="399ea955cdabbaf90155b6a929435a50"/><dir name="Combine"><file name="Root.php" hash="4d020e164faa06fb94c01bc2f7c110b4"/></dir><file name="Combine.php" hash="74f9ec5b8560dabad1e303af18f4cff9"/><dir name="Wishlist"><file name="Attributes.php" hash="bb8205a2b00b58f2a092887db5ef8b63"/><file name="Combine.php" hash="b17a452ea9c090bea3cd1b2529171394"/><file name="Quantity.php" hash="6d228a7fbefd393924d9301c16c8e4b2"/><file name="Sharing.php" hash="9b1d05f4062a8bcda277be627a390c1d"/><file name="Storeview.php" hash="5edfdacb3d69379a4a144df29994ae97"/><file name="Subcombine.php" hash="a063b405ed07c454b5dd0b1d71af430f"/><file name="Subselection.php" hash="4640a52371cdb38c3eee73bd8b215b48"/></dir><file name="Wishlist.php" hash="3e19189f6a045df483635abfdd723304"/></dir></dir><file name="Rule.php" hash="9182c2047b8e79d3ba58b75ef2b58efb"/><dir name="System"><dir name="Config"><dir name="Backend"><file name="Cron.php" hash="3c9c134aee05b3b32fc64a549a3e7cb3"/></dir></dir></dir></dir><dir name="Test"><dir name="Config"><file name="Config.php" hash="1a522335b3e13dd06b4a74576a4ae948"/></dir><dir name="Helper"><file name="Contact.php" hash="e348af94ff0f5444e766fc17f3e6c774"/><file name="Data.php" hash="1b8a488f5aa2892bc39a2a3ad6ffd1d8"/><file name="Message.php" hash="4f4cc99f871c3da8ad0c1a35b7ec04df"/></dir><dir name="Model"><file name="Observer.php" hash="6740f1fa9261885c3ace0769c9dbff67"/><file name="Rule.php" hash="aba91c2be53965dbbd45246990c63d55"/></dir></dir><dir name="controllers"><dir name="Adminhtml"><file name="RemindersController.php" hash="f6854e9616c94294236f0aa3f8d91424"/></dir><file name="LoadController.php" hash="563a01392d2df74bd929d9d9e6de5060"/></dir><dir name="etc"><file name="adminhtml.xml" hash="772c6847e1961a7a56fdbcfbce6aaf91"/><file name="config.xml" hash="2607d22509ac28b656efcbfe18188518"/><file name="system.xml" hash="e772ad2e0cf1790c397fcb035eb5f0dd"/></dir><dir name="sql"><dir name="bronto_reminder_setup"><file name="mysql4-install-1.4.2.php" hash="1372af1369e9608159f5b59af75f367e"/><file name="mysql4-upgrade-1.4.0-1.4.2.php" hash="fefa638ca0ed7c5bc80a1b67e27c8703"/><file name="mysql4-upgrade-1.4.10-1.4.11.php" hash="130a688eb03e4f476308d0d11c32141a"/><file name="mysql4-upgrade-1.4.2-1.4.9.php" hash="4692060e7c938aea129c53619f0b3c19"/><file name="mysql4-upgrade-1.4.9-1.4.10.php" hash="9698883135211d54a3c711fead02c187"/></dir><dir name="reference"><file name="saveMatchedCustomers.sql" hash="c4f32ee8be31f7a652369c148271a6c7"/></dir></dir></dir><dir name="Roundtrip"><dir name="Block"><dir name="Adminhtml"><dir name="System"><dir name="Config"><file name="About.php" hash="6adab60e3a5a4668fdf5da8d8d33a024"/><file name="Status.php" hash="c623240112f1f15200f918394f736720"/></dir></dir><dir name="Widget"><dir name="Button"><file name="Run.php" hash="f83df57a3248439261ccf9837a5d2ff9"/></dir></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="231a77cbc7f38838454437c600189217"/></dir><dir name="Model"><dir name="Contact"><file name="Builder.php" hash="e81e78a7e07a81f5a0ec53990d629a31"/></dir><dir name="Roundtrip"><dir name="Test"><file name="Order.php" hash="04ebcb9f0010cab7952b08014010f721"/></dir></dir><file name="Roundtrip.php" hash="9325c6d924c2b9f4cda49ef0a5168d29"/></dir><dir name="Test"><dir name="Config"><file name="Config.php" hash="dbe4fb05bff7630d6130f8d458ed1f57"/></dir><dir name="Model"><dir name="Roundtrip"><file name="Contact.php" hash="787fe5d49eba3819e9af030bb80beeaa"/><dir name="Test"><file name="Order.php" hash="5bf175ebba99f97a93fb6755977dbfa0"/></dir></dir><file name="Roundtrip.php" hash="b4b9ff42575091019e3dcad4d1780eec"/></dir></dir><dir name="controllers"><dir name="Adminhtml"><file name="RoundtripController.php" hash="f52fcbd911f40b7637a88a96b0b40869"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="56be6bdda5b7652427bbab1e447a0d2e"/><file name="config.xml" hash="b34c9716b4c6fee7a1d8837b8debff65"/><file name="system.xml" hash="901a0736fb1109f9092fc98daa46dde7"/></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Bronto_All.xml" hash="5a9c06b6313882589765b9bcf0402bbb"/><file name="Bronto_ConflictChecker.xml" hash="1a7dc00b830ca2cc696e67d94b85be5d"/><file name="Bronto_Customer.xml" hash="a11c20f008ee2eae14baa3b549d5adee"/><file name="Bronto_Email.xml" hash="b7cdca4b15753edcefe8b9e0abb780bd"/><file name="Bronto_Newsletter.xml" hash="2115c5225e02ab5d4e56749cc5eff6ad"/><file name="Bronto_Order.xml" hash="63f1537add6088417945657bec98ffe9"/><file name="Bronto_PermissionChecker.xml" hash="55ff239c291529be2dc05799102d24a1"/><file name="Bronto_Reminder.xml" hash="08503ab78994178b822ef9b0add243f9"/><file name="Bronto_Roundtrip.xml" hash="bd2b89f3254e995904da92f025b6321c"/></dir></target><target name="magelib"><dir name="Bronto"><dir name="Api"><dir name="Account"><file name="Exception.php" hash="6048e32e08bac337f37e22918ae92e6a"/><file name="Row.php" hash="de3cb2496c217c25e850573c4d5b2dc2"/></dir><file name="Account.php" hash="30d5ef4bb101748553e239ffe2481183"/><dir name="Activity"><file name="Exception.php" hash="39ac264e8429c000372e849327372471"/><file name="Row.php" hash="b5612081f50d117a7c66f93f9b90382a"/></dir><file name="Activity.php" hash="35aaf580eb62df39b631041937c10187"/><dir name="ApiToken"><file name="Exception.php" hash="ff31b1be1c06581a115aabb7a782d9b5"/><file name="Row.php" hash="1716b6859c05b82301cf28bc7dcca4be"/></dir><file name="ApiToken.php" hash="20ecd2591d6634c42de7b05879c4bc04"/><dir name="Contact"><file name="Exception.php" hash="232fece284740b8e49a5d22ba3082b32"/><file name="Row.php" hash="a85937ee83f1a852372782a8dc1d2eab"/></dir><file name="Contact.php" hash="0413b22277d97b9d9f910281c14a6cea"/><dir name="Conversion"><file name="Exception.php" hash="edaba96e7118b8ce27220ffdabf56721"/><file name="Row.php" hash="495064d7f358f568c0c93b291a267b33"/></dir><file name="Conversion.php" hash="17d45962719271cdc834660cc3478071"/><dir name="Delivery"><file name="Exception.php" hash="c9c746a033ef90ac5e7c70e906331779"/><file name="Recipient.php" hash="9756477b2cbde59ece2b3720c02a5d75"/><file name="Row.php" hash="ca0880566674966a7aa9dee7c4c2c6eb"/></dir><file name="Delivery.php" hash="1866bf3ae809010f630deead7c76a09e"/><dir name="DeliveryGroup"><file name="Exception.php" hash="6ae170c14038a49413580a19ce7ee144"/><file name="Row.php" hash="d5046f7a5dbf39442730f45d17aeaf87"/></dir><file name="DeliveryGroup.php" hash="0e4572ad563c61dd78229af2b6d35cad"/><file name="Exception.php" hash="0df72a2002acff46885dd3978ea95678"/><dir name="Field"><file name="Exception.php" hash="3f900dcdbf5b8b321e48fa6d4a4a5ae1"/><file name="Predefined.php" hash="e876d133b211c4d66ad70ccba7bdff04"/><file name="Row.php" hash="d0c4001b14954dc45e35c8bf8e89cb65"/><file name="TypeGuesser.php" hash="d74ed1da1bd21c93ec68e753edee745f"/></dir><file name="Field.php" hash="4d42365676ef739f72ab50b09595bfa0"/><dir name="List"><file name="Exception.php" hash="ba39e47457265a2042dfaaf0b1c93d70"/><file name="Row.php" hash="bc8f0c84d486f1a41b113529e0da4cc4"/></dir><file name="List.php" hash="589a011d54b9cd6e2400f42fb0391967"/><dir name="Login"><file name="ContactInformation.php" hash="871630e7a0762cb4055183fe9b52b8ea"/><file name="Exception.php" hash="37a401b1206264c7865c62c1c62d394c"/><file name="Row.php" hash="3bfc793c2defa6f538c4b8749dbac22a"/></dir><file name="Login.php" hash="57afd59cd524e57e5a2bdb839a6207e4"/><dir name="Message"><file name="Exception.php" hash="3688ca7320fa9b0a5a3bba80ac4ed072"/><file name="Row.php" hash="ed93a1f123c65324b05e1d2c7b8b4b12"/></dir><file name="Message.php" hash="993e0bfd24d5663078735cbeae9a4b23"/><dir name="MessageRule"><file name="Exception.php" hash="500de77f33962484a640c24521f63659"/><file name="Row.php" hash="5a16b597def2515423e58ab36d17ff01"/></dir><file name="MessageRule.php" hash="bd30a4aa770714ac17b1b33da363aa60"/><file name="Object.php" hash="9681a0940cf96835f2d14b876cce0a4e"/><dir name="Order"><file name="Exception.php" hash="843fd9b527ad8be267664e59e803a2d8"/><file name="Product.php" hash="446161d2fe36cfd849f72066bda8c2ff"/><file name="Row.php" hash="470b921a06f832a0cad81c869038b26e"/></dir><file name="Order.php" hash="9a27755d756a06b82a0cc0d97c315519"/><dir name="Row"><file name="Exception.php" hash="2a48372f5f71cbaad940bc0a62327cff"/></dir><file name="Row.php" hash="459df27d460fd4c3923e860bc8a76a78"/><dir name="Rowset"><file name="Exception.php" hash="5b109a1eef32d14cbc66016fdf65ad9c"/><file name="Iterator.php" hash="0797f8c5a95d47a521ac333e853e6cd3"/></dir><file name="Rowset.php" hash="a10029ba58512887eb7aeb8e40a96a33"/><dir name="Segment"><file name="Exception.php" hash="c0fb3c3a1ed79177f5247abe40adf504"/><file name="Row.php" hash="5211fe7639821a8e413f7832d33dca3c"/></dir><file name="Segment.php" hash="67cf81752cd21a42ad7b6b2ab713c9eb"/></dir><file name="Api.php" hash="2f4d300d9921f4b46faf7d78e34466d9"/><file name="SoapClient.php" hash="f07d2c4551825a1018ddfbd997d660d8"/><dir name="Util"><file name="Colors.php" hash="9bc5a4ce486972d493c82fcb671b416c"/><file name="CountryCodes.php" hash="c666d446d3a156fb2881bf33f2acfc80"/><dir name="Retryer"><file name="FileRetryer.php" hash="6ce89108476048a6e45a7457f53272de"/><file name="RetryerException.php" hash="65ab6cc1f4e71fad55832657f700c653"/><file name="RetryerInterface.php" hash="29aab11684d6eb27439281cd9f6cee76"/></dir><file name="Uuid.php" hash="00f349c1dc57463ebf13639a6bbff6fd"/></dir></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="base"><dir name="default"><dir name="bronto"><file name="cron.css" hash="c7260d3aa14b5945ee76c72dbd914efa"/><dir name="images"><file name="bg_notifications.gif" hash="df73b8aa7e48bb56e0a644245aa3683f"/><file name="logo.jpg" hash="3c6059218195679d99dbb874bdabbd07"/><file name="message_approved.gif" hash="465a056a3ba3d94367f51c3c0b751391"/><file name="message_not_approved.gif" hash="e4f28607f075a105e53fa3113d84bd26"/></dir></dir></dir></dir></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="template"><dir name="bronto"><dir name="newsletter"><file name="js.phtml" hash="1b36b8d1f438d5970b4ab0e8f97246d7"/></dir></dir></dir><dir name="layout"><dir name="bronto"><file name="newsletter.xml" hash="b7d4c9b1fb4fabb4255c6df64e98d332"/></dir></dir></dir></dir></dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="template"><dir name="bronto"><dir name="common"><file name="about.phtml" hash="f115cbc70309f4e3b14d33cf29bdb274"/><file name="cron.phtml" hash="f1dbdea68c377d7057230697450e16b1"/></dir><dir name="conflictchecker"><file name="errors.phtml" hash="26c9fa4332b8518141de9dab0db0c823"/></dir><dir name="email"><dir name="template"><file name="edit.phtml" hash="35c4f68337a6be7186be1aac0fbe404e"/><file name="list.phtml" hash="cf2503d79273b5a611cde3acde2bb79d"/></dir></dir><dir name="permissionchecker"><file name="errors.phtml" hash="0306e132afed0c88058be67d37dd211c"/></dir><dir name="roundtrip"><file name="status.phtml" hash="9ce88385bb507dfeb2df9e049a5f9f9d"/></dir></dir></dir><dir name="layout"><dir name="bronto"><file name="email.xml" hash="be77c906770a0d818898a910b03cbe4f"/><file name="reminder.xml" hash="98d835f287cb3aa2ff801f0219f88ccc"/><file name="roundtrip.xml" hash="3da91d3bcb40e1805a80fb2a18ed9cee"/></dir></dir></dir></dir></dir></target><target name="magelocale"><dir name="en_US"><dir name="template"><dir name="email"><dir name="bronto"><file name="abandoned_cart.html" hash="20b0f55098c0f07bf96da3c5309d9192"/></dir></dir></dir></dir></target></contents>
61
  <compatible/>
62
  <dependencies><required><php><min>5.2.13</min><max>5.5.0</max></php><extension><name>soap</name><min></min><max></max></extension><extension><name>openssl</name><min></min><max></max></extension></required></dependencies>
63
  </package>
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Bronto_Extension</name>
4
+ <version>2.0.2</version>
5
  <stability>stable</stability>
6
  <license uri="http://opensource.org/licenses/osl-3.0.php">OSL</license>
7
  <channel>community</channel>
55
  &lt;p /&gt;Bronto Software provides a cloud-based marketing platform for retailers to drive revenue through their email, mobile and social campaigns. The platform is used by over 1000 organizations worldwide, including Party City, Armani Exchange, Timex, Samsonite and Gander Mountain. Bronto is a Gold Magento Industry Partner and the leading self-service email marketing provider to the Internet Retailer Top 1000. Bronto is headquartered in Durham, NC with an office in London, UK. For more information, visit &lt;a href="http://bronto.com"&gt;bronto.com&lt;/a&gt;.&lt;/p&gt;</description>
56
  <notes>&lt;p /&gt;For installation and configuration instructions, as well as a full list of new features and known issues, please review the &lt;a href="http://a.bron.to/magento"&gt;Implementation Guide&lt;/a&gt;.</notes>
57
  <authors><author><name>Dave Johnson</name><user>BrontoSoftware</user><email>dave.johnson@bronto.com</email></author></authors>
58
+ <date>2013-04-04</date>
59
+ <time>13:25:42</time>
60
+ <contents><target name="magecommunity"><dir name="Bronto"><dir name="Common"><dir name="Block"><dir name="Adminhtml"><dir name="System"><dir name="Config"><file name="About.php" hash="e4647293bfef908940de7df33e0e754f"/><file name="Cron.php" hash="b1c18891073fa233cd5e44f16c60ec97"/><dir name="Form"><dir name="Field"><file name="Apitoken.php" hash="6f3121e8a5ee54c58993654018048b9e"/><file name="Hidden.php" hash="18a13153df6dd084840086105f8117cc"/><file name="List.php" hash="48f36e9d06e6bc759e36ebb1128aa513"/></dir><file name="Field.php" hash="bfc0b65b927934ba54bb5225c0fb9247"/></dir></dir></dir></dir></dir><dir name="Helper"><file name="Contact.php" hash="aa0f86b84c97399bdf259935de33dca0"/><file name="Data.php" hash="751e551f997c4b1a62ad0e3ebc96512a"/><file name="DataInterface.php" hash="a6700f3a4a79f6d6468df24f714427a9"/><file name="Field.php" hash="683839cfcd4fd5cd81b0393fc67b019c"/><file name="Message.php" hash="22d6224ab354a6ed7dc13d1e6e0a2fc5"/><file name="Product.php" hash="64202787e5f0c63a38efff387ab3c325"/></dir><dir name="Model"><file name="Api.php" hash="3716948a5e50e621625714a1e3a93263"/><dir name="Email"><dir name="Message"><file name="Filter.php" hash="4668bb03abbb5029980765c0b712fd5c"/><file name="Templatefilter.php" hash="783dcbb689021665f2b7f34f83bb99c2"/></dir><file name="Message.php" hash="17086fba16eed6986c0ab1fafbeffbd6"/></dir><file name="Keysentry.php" hash="fd39d0a0208668723d0c0adb0b31bd67"/><file name="Observer.php" hash="73b02a94aba279c05dd7753ac10fdb75"/><dir name="Resource"><file name="Setup.php" hash="780f5c070cbd9da2f003372ee90a0891"/></dir><dir name="System"><dir name="Config"><dir name="Backend"><file name="Cron.php" hash="b05e28fb0cc0db0377eee68ffc712c10"/><file name="Token.php" hash="03a0cf45efe77307e06afa3b4a98b214"/></dir><dir name="Source"><dir name="Contact"><file name="Status.php" hash="1bf6c053f8132a36dd6882e0f1faf45f"/></dir><dir name="Cron"><file name="Frequency.php" hash="c6689871a7a8add3dc4b84e4a2ff6f10"/><file name="Minutes.php" hash="be3e3066819785b55a25f22c5bc9392a"/></dir><file name="Field.php" hash="36d8ea711c4eecfa6eaa6b6e3216920e"/><file name="List.php" hash="69497100fe9f036c442b9d94133c8f4a"/><file name="Message.php" hash="4fb4e4f9deaabe4971bfcdf3e12b0da4"/></dir></dir></dir></dir><dir name="Test"><dir name="Config"><file name="Config.php" hash="02b55ba2804a024740506c4df0ebdd42"/></dir><dir name="Model"><file name="Checkout.php" hash="9716ab2c76558e463f1a105308973b74"/><dir name="Keysentry"><dir name="fixtures"><file name="seed.yaml" hash="3a9b13b2ef5a72bea298be72edba821d"/></dir></dir><file name="Keysentry.php" hash="fe06eff7212d57057ed1ee490238694f"/></dir></dir><dir name="controllers"><file name="LogController.php" hash="d97e8dc3624053d563389b8b19c71c06"/></dir><dir name="etc"><file name="adminhtml.xml" hash="f5792bf262cf83cc193d23c09a17a03f"/><file name="config.xml" hash="0ac1a5e5c10578dab9389b782e5c3a64"/><file name="system.xml" hash="3a7ab89d5c344d5600b52604ee5b681a"/></dir><dir name="sql"><dir name="bronto_common_setup"><file name="mysql4-install-1.7.0.php" hash="c8459d26fdfea2fb9430e8829b3257e1"/></dir></dir></dir><dir name="ConflictChecker"><dir name="Block"><dir name="Adminhtml"><dir name="System"><dir name="Config"><file name="About.php" hash="9049055c03e261b2452c926d801196a6"/><file name="Conflictchecker.php" hash="c00f929ef55e95597761871674077b10"/></dir></dir></dir><file name="Printer.php" hash="cd8ef4c01028da3d690ce6f5c53d1f61"/></dir><dir name="Helper"><file name="Data.php" hash="0f5c562370c77b6cfe9579dc7fe396d0"/></dir><dir name="Model"><dir name="Config"><file name="Blocks.php" hash="78eb63947ae94be2b1dc9ee42de52152"/><file name="Checker.php" hash="a1a38b9c4a518e0be2e4ea84adab0107"/><file name="ConfigAbstract.php" hash="8bc2be8485543a17338cb953d760c71c"/><file name="ConfigInterface.php" hash="86a788c1b1971828c8f947b42f03baea"/><file name="Datastore.php" hash="d2b37735fe127d831e6055e05b232fb8"/><file name="Helpers.php" hash="3de600b842bf90c53417843e9b4c1946"/><file name="Models.php" hash="0358f506ff4e5820b61b076701f0746d"/><file name="Printer.php" hash="6d2aec31a623b943d3d982c97999be13"/><file name="Resources.php" hash="9f12487e864cd4005c53b72fe02e4cf4"/></dir><dir name="Core"><dir name="Config"><file name="Base.php" hash="b1ecb5cd90e050d1c825beb65e6d888e"/><file name="Element.php" hash="2efb1a1c022cb393ab5718c1f7eafd1f"/></dir><file name="Config.php" hash="29408203a0aa8b7afa84ba16b1416f91"/></dir><dir name="Lib"><dir name="Varien"><dir name="Simplexml"><file name="Config.php" hash="3acbdd7d7c9fa6c346688e5083569596"/><file name="Element.php" hash="f5961e7a41035851cabf7fcd8022a13a"/></dir></dir></dir><dir name="Mysql4"><dir name="Core"><file name="Config.php" hash="36685bb89b45c71cfc447727ce66ea9a"/></dir></dir><dir name="Path"><dir name="Locator"><file name="Array.php" hash="f82c5966dab92ed91a9441a0231e7ace"/><file name="Factory.php" hash="bea2e4a6bea17815a9040341209f4256"/><file name="IteratorAbstract.php" hash="9adccb7c853d80e8d64a0eb8346f3cbc"/><file name="LocatorInterface.php" hash="b3cf0d528296ee0e87e7898da44baa47"/><file name="Stack.php" hash="4524078604b43dffcf57c7a23959ef03"/></dir></dir><dir name="Resource"><dir name="Core"><file name="Config.php" hash="6b69bd1c0ce0e4c92c1c96436f79e83d"/></dir></dir></dir><dir name="Test"><dir name="Config"><file name="Config.php" hash="23de17a20f7a5588bb9761a2d3eb79ae"/></dir><dir name="Model"><dir name="Path"><dir name="Locator"><file name="Array.php" hash="e219f193e027d5c9a5d9cb9d7a27a6ac"/><file name="Factory.php" hash="36ffe1ec656f3f3ba1f99dd743e52c0b"/><file name="Stack.php" hash="29cbf00cd66bc61ee16c740847d9f400"/></dir></dir></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="9d5cab56f52b0d12688c5787e3bfa03f"/><file name="config.xml" hash="0497e6c9bf942db62d01e0595437166b"/><file name="system.xml" hash="6d6b10860c55f815efe815d7ee0c2290"/></dir></dir><dir name="Customer"><dir name="Block"><dir name="Adminhtml"><dir name="System"><dir name="Config"><file name="About.php" hash="5874d9bf1ff106212a348815104c5244"/><file name="Cron.php" hash="d934d6f31ed8afd9b96fd9c7646542bc"/><dir name="Form"><dir name="Fieldset"><dir name="Attributes"><file name="Address.php" hash="3dc1e6ab5531e65d229f136b0e7cf1fe"/><file name="Customer.php" hash="655784371a5be6e32b12ad3742145d6d"/></dir><file name="Attributes.php" hash="fd77169977b903ecbd179723c9bad5dd"/></dir></dir></dir></dir><dir name="Widget"><dir name="Button"><file name="Reset.php" hash="74d38897533f7b4e67d476dd791a38ee"/><file name="Run.php" hash="e707627c781ea4323d1924fa33094320"/></dir></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="570be85ed2fbd1ae659427b55cc481d9"/></dir><dir name="Model"><dir name="Mysql4"><dir name="Queue"><file name="Collection.php" hash="79c019779d2de90cb101e63cf6f00a93"/></dir><file name="Queue.php" hash="2c862d84f2d1ac55dde6bebaacdb7d3e"/></dir><file name="Observer.php" hash="0448ffea19c272c8248006893023db55"/><file name="Queue.php" hash="4e72a63d48744be9115a27a006cfa59d"/><dir name="Resource"><dir name="Customer"><file name="Collection.php" hash="7382503a6ab735f3f4345315993a64cb"/></dir><file name="Setup.php" hash="6e988a951049e5b0e0e7ed214e84f277"/></dir><dir name="System"><dir name="Config"><dir name="Backend"><file name="Cron.php" hash="dbcd55d41447d46fded27dfa2e6febb0"/><file name="Newfield.php" hash="d9a66dbc0b932fb80c7c947c3ce29bba"/></dir></dir></dir></dir><dir name="Test"><dir name="Config"><file name="Config.php" hash="20025141111083480c8109d9619598bf"/></dir></dir><dir name="controllers"><dir name="Adminhtml"><file name="CustomerController.php" hash="fd3bf1d27f31d8d3cab6e4432f7a7fbb"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="6cc229b440b34da710887aaf96bbcf81"/><file name="config.xml" hash="5a60622386fb72e56ded3ddab0d1854d"/><file name="system.xml" hash="4ea888d7af3d269937ac8358e8c862ff"/></dir><dir name="sql"><dir name="bronto_customer_setup"><file name="mysql4-install-1.0.0.php" hash="871c225318588b2804a05751bce45e1f"/><file name="mysql4-upgrade-1.0.0-1.0.1.php" hash="145b73141d7f20ac0707c0db80c9564c"/></dir></dir></dir><dir name="Email"><dir name="Block"><dir name="Adminhtml"><dir name="System"><dir name="Config"><file name="About.php" hash="10cb51420b205c100ef46cf59edef05b"/></dir><dir name="Email"><dir name="Log"><dir name="Grid"><dir name="Renderer"><file name="Customer.php" hash="c2530287b293e05508816049586ef5c2"/><file name="Fields.php" hash="6c5d921b6c636329f035381af4c7f028"/></dir></dir><file name="Grid.php" hash="b54cada4029aa45290679e6cf69f8c47"/></dir><file name="Log.php" hash="3fa0b873d262b3d5c6161c1aef33e6ae"/><dir name="Template"><dir name="Edit"><file name="Form.php" hash="804a3fc8d0e773639f8eb2fe3df1ab1f"/></dir><file name="Edit.php" hash="bcc5b9ba9bee92a3e8f33684dd02506f"/><dir name="Grid"><dir name="Renderer"><file name="Message.php" hash="bf56f19c9f4310609fbb9a788768e222"/></dir></dir><file name="Grid.php" hash="6a253035cf2db239f93b73667e92ee63"/></dir><file name="Template.php" hash="b33503babba2480ca840569629dfbb07"/></dir></dir></dir></dir><dir name="Helper"><file name="Contact.php" hash="712033409f93712e4a22cf89252d44e4"/><file name="Data.php" hash="e582e103dfe73cb4ab9e6eb675f81309"/><file name="Field.php" hash="e4714e9cc95bdfe4da9a16feb604f44c"/><file name="Message.php" hash="f328dcee7934ddc48d6f4d40afff74cc"/></dir><dir name="Model"><dir name="Email"><file name="Message.php" hash="5d2c4b3ac3120352f8424863ad176dc6"/></dir><file name="Log.php" hash="2740d9cd5073106f58880e57e84ce8ee"/><dir name="Mysql4"><dir name="Log"><file name="Collection.php" hash="6de4819537636d3ea7816cb7c6fc250c"/></dir><file name="Log.php" hash="15ffb2c83281c77b5d427ff29abac776"/></dir><file name="Observer.php" hash="0b67950706c21220a4712bc0c279ba00"/><dir name="System"><dir name="Config"><dir name="Source"><dir name="Email"><file name="Template.php" hash="ba80e6553c61e731b85c027cd688ca8f"/></dir></dir></dir></dir><dir name="Template"><file name="Import.php" hash="b808d3e5a70dc30e09448b20dd000708"/></dir></dir><dir name="Test"><dir name="Config"><file name="Config.php" hash="8a74889c3f24c3053baefca6e7d7eddb"/></dir><dir name="Model"><dir name="Email"><file name="Message.php" hash="11a9aded1841673bdafd4675de78a19e"/></dir></dir></dir><dir name="controllers"><dir name="Adminhtml"><dir name="System"><dir name="Email"><file name="LogController.php" hash="386560ba30da12796614db1d0381bb7c"/><file name="TemplateController.php" hash="578112502761e70000ff10ca67502034"/></dir></dir></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="35a2ffa5e273f87b6d2de172cea4a219"/><file name="config.xml" hash="37e21ee9d0458bd28379446f063457a5"/><file name="system.xml" hash="2e6f8375e4794780c2f49f68536d2c6b"/></dir><dir name="sql"><dir name="bronto_email_setup"><file name="mysql4-install-1.0.0.php" hash="516265312ede986c1a35a19b9e5bbfea"/><file name="mysql4-install-1.0.2.php" hash="327ac219e947d608fbf9d3209dd03bab"/><file name="mysql4-install-1.0.5.php" hash="327ac219e947d608fbf9d3209dd03bab"/><file name="mysql4-install-1.0.8.php" hash="b572625c1380dfffe3b089275ac1dc7e"/><file name="mysql4-install-1.1.2.php" hash="bf80f7b12eccdad2e0e36a564e18530c"/><file name="mysql4-upgrade-1.0.0-1.0.2.php" hash="1f797c3f909d72219ef5d00017b10554"/><file name="mysql4-upgrade-1.0.2-1.0.5.php" hash="f2c83b65500d9df0fd10c2e6721f2bfe"/><file name="mysql4-upgrade-1.0.5-1.0.8.php" hash="cdbda7aa084e51b9b222c56e548462a6"/><file name="mysql4-upgrade-1.0.8-1.1.1.php" hash="f2c83b65500d9df0fd10c2e6721f2bfe"/><file name="mysql4-upgrade-1.1.1-1.1.2.php" hash="0538afef03b1e21d509593e2ad275c34"/></dir></dir></dir><dir name="Newsletter"><dir name="Block"><dir name="Adminhtml"><dir name="System"><dir name="Config"><file name="About.php" hash="bc44a52305e7cbe3a41c5f19e6257ede"/><file name="Cron.php" hash="f7a3a33f6ba8c7ad7cd125818f76b088"/></dir></dir><dir name="Widget"><dir name="Button"><file name="Reset.php" hash="98efb50dd447e6a60db7c25846ae0432"/><file name="Run.php" hash="49efe1ee4550454366fe5631fa2c6e88"/></dir></dir></dir><dir name="Checkout"><dir name="Onepage"><file name="Newsletter.php" hash="e0ba7884794f68fe3c299946ef8e63a4"/></dir></dir></dir><dir name="Helper"><file name="Contact.php" hash="85dffba4f8edd375e53ca59f7a4bf1a0"/><file name="Data.php" hash="62e5be8e1326862fee10774654daad15"/></dir><dir name="Model"><dir name="Mysql4"><dir name="Queue"><file name="Collection.php" hash="65965036fde6a83984239a2237232d1c"/></dir><file name="Queue.php" hash="9a890d3fe569edd426ce38afe564dc7a"/></dir><file name="Observer.php" hash="d7245de664cc1021ca981cfefb5e3def"/><file name="Queue.php" hash="89e6276cab088714b555c052172c4989"/><dir name="System"><dir name="Config"><dir name="Backend"><file name="Cron.php" hash="a270f0a31c390383cdabc0021baf3d3c"/></dir></dir></dir></dir><dir name="Test"><dir name="Config"><file name="Config.php" hash="d88d07780bb3ded63c2c35439840dad5"/></dir></dir><dir name="controllers"><dir name="Adminhtml"><file name="NewsletterController.php" hash="fb1b701c2335e82e258ed16d2a5c8975"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="253518e92554bf89fabe7b832a7a562c"/><file name="config.xml" hash="1d0adbc56975d579620dabd02394ff38"/><file name="system.xml" hash="a71a2ace3b3dbaa6d5e2c2b5a657ea48"/></dir><dir name="sql"><dir name="bronto_newsletter_setup"><file name="mysql4-install-1.0.0.php" hash="0f21d5315bbc4c27d0d38f9cf8c99bf3"/><file name="mysql4-install-1.4.0.php" hash="9bd28347f3330b857102900adf702bed"/><file name="mysql4-upgrade-1.4.0-1.4.1.php" hash="7eeba27e7b5480c8b502c3805554e2de"/><file name="mysql4-upgrade-1.4.1-1.4.2.php" hash="32f724b99d88e037ade72c8a9f1e0da7"/><file name="mysql4-upgrade-1.4.2-1.4.3.php" hash="63c728bb0cd7fa83bb5536d4500548f4"/><file name="mysql4-upgrade-1.4.3-1.4.4.php" hash="4f08a427c7706ea0988bcdcca6072218"/></dir></dir></dir><dir name="Order"><dir name="Block"><dir name="Adminhtml"><dir name="Sales"><dir name="Order"><dir name="View"><dir name="Tab"><file name="Info.php" hash="ca80d06fb86b6bf676fc21188d5f2685"/></dir></dir></dir></dir><dir name="System"><dir name="Config"><file name="About.php" hash="126e3166dace48941fccbe2bb4c80264"/><file name="Cron.php" hash="8f07a9b6bf4ead5f7909204c9bfb869d"/></dir></dir><dir name="Widget"><dir name="Button"><file name="Reset.php" hash="9bfbc1f1ffb38389a3a47ca009a24a35"/><file name="Run.php" hash="5b833a216bea22b962f633e33f6a86b8"/></dir></dir></dir><file name="Bta.php" hash="10f7f6f5e5e701dafefe8034095ae11e"/></dir><dir name="Helper"><file name="Data.php" hash="87f5a3a40ce32e8fcb2588ef7971c38d"/></dir><dir name="Model"><dir name="Mysql4"><dir name="Queue"><file name="Collection.php" hash="2d5a2cacddad69f5ef95e9ea87a3b1b5"/></dir><file name="Queue.php" hash="5ec75386fc64daefbd2478bf28581097"/></dir><file name="Observer.php" hash="791d6ff2169b9ec669c11033478f8118"/><dir name="Order"><file name="Observer.php" hash="5c889edb642d2dec09013a666a870ea5"/></dir><file name="Queue.php" hash="3a8d6d86018e694da6f9bfb6ade2f9ca"/><dir name="Quote"><file name="Observer.php" hash="d59ed7a18787b6b68b988ca383a615a3"/></dir><dir name="Resource"><dir name="Order"><file name="Collection.php" hash="115c9b1e668b6c832b158cbce3544254"/></dir><file name="Setup.php" hash="6397d195901c57062f124fde1dbfbf32"/></dir><dir name="System"><dir name="Config"><dir name="Backend"><file name="Cron.php" hash="96199a296f15518a89fde9384cf5fb0d"/></dir><dir name="Source"><file name="Description.php" hash="67364bc17dc197e4dd2a6e0382c75722"/><file name="Limit.php" hash="789f0e42eaafa65b4970ad107206102c"/></dir></dir></dir></dir><dir name="Test"><dir name="Config"><file name="Config.php" hash="ca702ba9aafc61c93e19305005e952c8"/></dir></dir><dir name="controllers"><dir name="Adminhtml"><file name="OrderController.php" hash="1571c3dab9923178465f009cc052afb7"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="0c4a0a1117117613d148157557f2abb3"/><file name="config.xml" hash="3f9b33c2e3af4625bca407f1502353b1"/><file name="system.xml" hash="131d320296a91ef24c43dcb60c01ec8e"/></dir><dir name="sql"><dir name="bronto_order_setup"><file name="mysql4-install-1.0.0.php" hash="81b57488dbc44047db4099c41fdac54e"/><file name="mysql4-upgrade-1.1.5-1.1.6.php" hash="62be13b1013b03e3f2d24c005c46a573"/></dir></dir></dir><dir name="PermissionChecker"><dir name="Block"><dir name="Adminhtml"><dir name="System"><dir name="Config"><file name="About.php" hash="5c0990417244c38485b5c9eda45fa80a"/><file name="Permissionchecker.php" hash="9cabf571a4dab49fa26d8ff1b35b0646"/></dir></dir></dir><file name="Printer.php" hash="7f9d480227c8211aa9e2db66ecd34f3f"/></dir><dir name="Helper"><file name="Data.php" hash="4fab093494eb9a793583e2294d2a2489"/></dir><dir name="Model"><dir name="Validator"><file name="Checker.php" hash="2a8259840b7f0e75b52bdcc93adb8922"/><file name="Directory.php" hash="89a0981e5ed7b70446054d9e8f31300e"/><file name="File.php" hash="539342c217889f7fd0f19f3b731bea23"/><dir name="Filter"><file name="PatternIterator.php" hash="9bdc50cda8d18e3335d8fc07fa72f733"/></dir><file name="Group.php" hash="8dc26a97c43fa2bbe58264b3117324a9"/><file name="Owner.php" hash="fc20d838f28c3406d74475fd4dbf33f0"/><file name="Printer.php" hash="e49b843f43f835d35ba838a2b8c7d00d"/><file name="ValidatorAbstract.php" hash="bccd4db6601922c5a632680c226e03c6"/><file name="ValidatorInterface.php" hash="877e881c030573fdbcd344174eceec8a"/></dir></dir><dir name="Test"><dir name="Config"><file name="Config.php" hash="672ed6161380fbf88a516377e62031be"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="058c7be44feea32fc5bc646a5632b4f3"/><file name="config.xml" hash="c4df9b0d873371a626029bd25cfe1c41"/><file name="system.xml" hash="4bb28ac8646a04f6ea857f79cd75475e"/></dir></dir><dir name="Reminder"><dir name="Block"><dir name="Adminhtml"><dir name="Promo"><file name="Notice.php" hash="d5991ebe75066fa76f23eb9464619f08"/></dir><dir name="Reminder"><dir name="Edit"><file name="Form.php" hash="779f8effae92303da303c889db9cef65"/><dir name="Tab"><file name="Bronto.php" hash="a4f19c14cddab68e1180723984f10ccb"/><file name="Conditions.php" hash="f3ad1c6438079bf43183825b52fde3f3"/><file name="Customers.php" hash="668c91478d859d2aa1eb6027d2bbef75"/><file name="General.php" hash="8c7ff650f320b57a208ecf825142e877"/></dir><file name="Tabs.php" hash="accefd148ad3cf28d36e890c138078f2"/></dir><file name="Edit.php" hash="a05e23f5249c97ac7965ecf27672d1a6"/><file name="Grid.php" hash="ebbe203d00c8e21ca591b55c48572cdb"/></dir><file name="Reminder.php" hash="82d616907ffc84eed0aa688f218ed7f1"/><dir name="System"><dir name="Config"><file name="About.php" hash="ce52e60802d1b9d251cef6a7c34564ce"/><file name="Cron.php" hash="ba8f69a491407b48ec72eb7351249c98"/></dir></dir><dir name="Widget"><dir name="Grid"><dir name="Column"><dir name="Renderer"><file name="Email.php" hash="5d9cbf69ea3bfcbc0f96d9a3dd8f613a"/><file name="Id.php" hash="e221f8f87969c1299a7daf3796dd7bbf"/></dir></dir></dir></dir></dir></dir><dir name="Helper"><file name="Contact.php" hash="a46c741761b5440eda28c9a8ac2df080"/><file name="Data.php" hash="36eff50aafd65ca66f13aa15c5e65beb"/><file name="Message.php" hash="a02936281f98cd990ecd17c32bfada46"/></dir><dir name="Model"><dir name="Condition"><file name="Abstract.php" hash="92b5e50a4e9b39dff50d83f1099db882"/><dir name="Combine"><file name="Abstract.php" hash="ea03be5f19662b5392147b64c1049e2c"/></dir></dir><dir name="Email"><file name="Message.php" hash="fe2f318ef70bd0d7be3de34b77b5ef2d"/></dir><file name="Guest.php" hash="4e220c343693ca30560294f8e4cfc9be"/><dir name="Mysql4"><dir name="Customer"><file name="Collection.php" hash="4fc63d20f3f7a92770dcaebf17bba84e"/></dir><dir name="Guest"><file name="Collection.php" hash="9002af1ece49d28124724db5dd112119"/></dir><file name="Guest.php" hash="e8b815dce460b039053ef224628ad676"/><dir name="Rule"><file name="Collection.php" hash="2969bb11fa9e83523da7b41d834381b4"/></dir><file name="Rule.php" hash="38a1ac22b504900fe3b0d11426c3f7cf"/></dir><file name="Observer.php" hash="fc4471bd9b2aaaaa8eb689b591cce43f"/><dir name="Rule"><dir name="Condition"><dir name="Cart"><file name="Amount.php" hash="8b2a76a43ebe3735556757db407e3409"/><file name="Attributes.php" hash="6bc41aca8c8a7846fae4f894306ffa45"/><file name="Combine.php" hash="add54bf57284e6c48008db605e0df3d4"/><file name="Couponcode.php" hash="f0144e4e5bbf157e2268e3765b46dd24"/><file name="Itemsquantity.php" hash="6c605a49ebe9582f5b57e24085079a6b"/><file name="Sku.php" hash="090610f405b398600e00d33325ec12c4"/><file name="Storeview.php" hash="00262bc083ef7297989056cdf768274e"/><file name="Subcombine.php" hash="b10d46333d76a881654cc6d2a67e6880"/><file name="Subselection.php" hash="8873aa2845c638d6a7658652eec40f0e"/><file name="Totalquantity.php" hash="5edc528cbd0688746a01157595720076"/><file name="Virtual.php" hash="f65e64572c526c6c50e38d1bb9d9a52f"/></dir><file name="Cart.php" hash="399ea955cdabbaf90155b6a929435a50"/><dir name="Combine"><file name="Root.php" hash="4d020e164faa06fb94c01bc2f7c110b4"/></dir><file name="Combine.php" hash="74f9ec5b8560dabad1e303af18f4cff9"/><dir name="Wishlist"><file name="Attributes.php" hash="bb8205a2b00b58f2a092887db5ef8b63"/><file name="Combine.php" hash="b17a452ea9c090bea3cd1b2529171394"/><file name="Quantity.php" hash="6d228a7fbefd393924d9301c16c8e4b2"/><file name="Sharing.php" hash="9b1d05f4062a8bcda277be627a390c1d"/><file name="Storeview.php" hash="5edfdacb3d69379a4a144df29994ae97"/><file name="Subcombine.php" hash="a063b405ed07c454b5dd0b1d71af430f"/><file name="Subselection.php" hash="4640a52371cdb38c3eee73bd8b215b48"/></dir><file name="Wishlist.php" hash="3e19189f6a045df483635abfdd723304"/></dir></dir><file name="Rule.php" hash="9182c2047b8e79d3ba58b75ef2b58efb"/><dir name="System"><dir name="Config"><dir name="Backend"><file name="Cron.php" hash="3c9c134aee05b3b32fc64a549a3e7cb3"/></dir></dir></dir></dir><dir name="Test"><dir name="Config"><file name="Config.php" hash="f6392fbcafbfc5ad04b66ae6a42bf899"/></dir><dir name="Helper"><file name="Contact.php" hash="e348af94ff0f5444e766fc17f3e6c774"/><file name="Data.php" hash="1b8a488f5aa2892bc39a2a3ad6ffd1d8"/><file name="Message.php" hash="4f4cc99f871c3da8ad0c1a35b7ec04df"/></dir><dir name="Model"><file name="Observer.php" hash="6740f1fa9261885c3ace0769c9dbff67"/><file name="Rule.php" hash="aba91c2be53965dbbd45246990c63d55"/></dir></dir><dir name="controllers"><dir name="Adminhtml"><file name="RemindersController.php" hash="f6854e9616c94294236f0aa3f8d91424"/></dir><file name="LoadController.php" hash="563a01392d2df74bd929d9d9e6de5060"/></dir><dir name="etc"><file name="adminhtml.xml" hash="772c6847e1961a7a56fdbcfbce6aaf91"/><file name="config.xml" hash="e8a1d8fa27cc5b1c3ed3e0876a85a413"/><file name="system.xml" hash="e772ad2e0cf1790c397fcb035eb5f0dd"/></dir><dir name="sql"><dir name="bronto_reminder_setup"><file name="mysql4-install-1.4.2.php" hash="1372af1369e9608159f5b59af75f367e"/><file name="mysql4-upgrade-1.4.0-1.4.2.php" hash="fefa638ca0ed7c5bc80a1b67e27c8703"/><file name="mysql4-upgrade-1.4.10-1.4.11.php" hash="130a688eb03e4f476308d0d11c32141a"/><file name="mysql4-upgrade-1.4.2-1.4.9.php" hash="4692060e7c938aea129c53619f0b3c19"/><file name="mysql4-upgrade-1.4.9-1.4.10.php" hash="9698883135211d54a3c711fead02c187"/></dir><dir name="reference"><file name="saveMatchedCustomers.sql" hash="c4f32ee8be31f7a652369c148271a6c7"/></dir></dir></dir><dir name="Roundtrip"><dir name="Block"><dir name="Adminhtml"><dir name="System"><dir name="Config"><file name="About.php" hash="6adab60e3a5a4668fdf5da8d8d33a024"/><file name="Status.php" hash="c623240112f1f15200f918394f736720"/></dir></dir><dir name="Widget"><dir name="Button"><file name="Run.php" hash="f83df57a3248439261ccf9837a5d2ff9"/></dir></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="231a77cbc7f38838454437c600189217"/></dir><dir name="Model"><dir name="Contact"><file name="Builder.php" hash="e81e78a7e07a81f5a0ec53990d629a31"/></dir><dir name="Roundtrip"><dir name="Test"><file name="Order.php" hash="04ebcb9f0010cab7952b08014010f721"/></dir></dir><file name="Roundtrip.php" hash="9325c6d924c2b9f4cda49ef0a5168d29"/></dir><dir name="Test"><dir name="Config"><file name="Config.php" hash="dbe4fb05bff7630d6130f8d458ed1f57"/></dir><dir name="Model"><dir name="Roundtrip"><file name="Contact.php" hash="787fe5d49eba3819e9af030bb80beeaa"/><dir name="Test"><file name="Order.php" hash="5bf175ebba99f97a93fb6755977dbfa0"/></dir></dir><file name="Roundtrip.php" hash="c515d5cf63bdfbdab39e3f23901b4e47"/></dir></dir><dir name="controllers"><dir name="Adminhtml"><file name="RoundtripController.php" hash="f52fcbd911f40b7637a88a96b0b40869"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="56be6bdda5b7652427bbab1e447a0d2e"/><file name="config.xml" hash="b34c9716b4c6fee7a1d8837b8debff65"/><file name="system.xml" hash="901a0736fb1109f9092fc98daa46dde7"/></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Bronto_All.xml" hash="5a9c06b6313882589765b9bcf0402bbb"/><file name="Bronto_ConflictChecker.xml" hash="1a7dc00b830ca2cc696e67d94b85be5d"/><file name="Bronto_Customer.xml" hash="a11c20f008ee2eae14baa3b549d5adee"/><file name="Bronto_Email.xml" hash="b7cdca4b15753edcefe8b9e0abb780bd"/><file name="Bronto_Newsletter.xml" hash="2115c5225e02ab5d4e56749cc5eff6ad"/><file name="Bronto_Order.xml" hash="63f1537add6088417945657bec98ffe9"/><file name="Bronto_PermissionChecker.xml" hash="55ff239c291529be2dc05799102d24a1"/><file name="Bronto_Reminder.xml" hash="08503ab78994178b822ef9b0add243f9"/><file name="Bronto_Roundtrip.xml" hash="bd2b89f3254e995904da92f025b6321c"/></dir></target><target name="magelib"><dir name="Bronto"><dir name="Api"><dir name="Account"><file name="Exception.php" hash="6048e32e08bac337f37e22918ae92e6a"/><file name="Row.php" hash="de3cb2496c217c25e850573c4d5b2dc2"/></dir><file name="Account.php" hash="30d5ef4bb101748553e239ffe2481183"/><dir name="Activity"><file name="Exception.php" hash="39ac264e8429c000372e849327372471"/><file name="Row.php" hash="b5612081f50d117a7c66f93f9b90382a"/></dir><file name="Activity.php" hash="35aaf580eb62df39b631041937c10187"/><dir name="ApiToken"><file name="Exception.php" hash="ff31b1be1c06581a115aabb7a782d9b5"/><file name="Row.php" hash="1716b6859c05b82301cf28bc7dcca4be"/></dir><file name="ApiToken.php" hash="20ecd2591d6634c42de7b05879c4bc04"/><dir name="Contact"><file name="Exception.php" hash="232fece284740b8e49a5d22ba3082b32"/><file name="Row.php" hash="a85937ee83f1a852372782a8dc1d2eab"/></dir><file name="Contact.php" hash="0413b22277d97b9d9f910281c14a6cea"/><dir name="Conversion"><file name="Exception.php" hash="edaba96e7118b8ce27220ffdabf56721"/><file name="Row.php" hash="495064d7f358f568c0c93b291a267b33"/></dir><file name="Conversion.php" hash="17d45962719271cdc834660cc3478071"/><dir name="Delivery"><file name="Exception.php" hash="c9c746a033ef90ac5e7c70e906331779"/><file name="Recipient.php" hash="9756477b2cbde59ece2b3720c02a5d75"/><file name="Row.php" hash="ca0880566674966a7aa9dee7c4c2c6eb"/></dir><file name="Delivery.php" hash="1866bf3ae809010f630deead7c76a09e"/><dir name="DeliveryGroup"><file name="Exception.php" hash="6ae170c14038a49413580a19ce7ee144"/><file name="Row.php" hash="d5046f7a5dbf39442730f45d17aeaf87"/></dir><file name="DeliveryGroup.php" hash="0e4572ad563c61dd78229af2b6d35cad"/><file name="Exception.php" hash="0df72a2002acff46885dd3978ea95678"/><dir name="Field"><file name="Exception.php" hash="3f900dcdbf5b8b321e48fa6d4a4a5ae1"/><file name="Predefined.php" hash="e876d133b211c4d66ad70ccba7bdff04"/><file name="Row.php" hash="d0c4001b14954dc45e35c8bf8e89cb65"/><file name="TypeGuesser.php" hash="d74ed1da1bd21c93ec68e753edee745f"/></dir><file name="Field.php" hash="4d42365676ef739f72ab50b09595bfa0"/><dir name="List"><file name="Exception.php" hash="ba39e47457265a2042dfaaf0b1c93d70"/><file name="Row.php" hash="bc8f0c84d486f1a41b113529e0da4cc4"/></dir><file name="List.php" hash="589a011d54b9cd6e2400f42fb0391967"/><dir name="Login"><file name="ContactInformation.php" hash="871630e7a0762cb4055183fe9b52b8ea"/><file name="Exception.php" hash="37a401b1206264c7865c62c1c62d394c"/><file name="Row.php" hash="3bfc793c2defa6f538c4b8749dbac22a"/></dir><file name="Login.php" hash="57afd59cd524e57e5a2bdb839a6207e4"/><dir name="Message"><file name="Exception.php" hash="3688ca7320fa9b0a5a3bba80ac4ed072"/><file name="Row.php" hash="ed93a1f123c65324b05e1d2c7b8b4b12"/></dir><file name="Message.php" hash="993e0bfd24d5663078735cbeae9a4b23"/><dir name="MessageRule"><file name="Exception.php" hash="500de77f33962484a640c24521f63659"/><file name="Row.php" hash="5a16b597def2515423e58ab36d17ff01"/></dir><file name="MessageRule.php" hash="bd30a4aa770714ac17b1b33da363aa60"/><file name="Object.php" hash="9681a0940cf96835f2d14b876cce0a4e"/><dir name="Order"><file name="Exception.php" hash="843fd9b527ad8be267664e59e803a2d8"/><file name="Product.php" hash="446161d2fe36cfd849f72066bda8c2ff"/><file name="Row.php" hash="470b921a06f832a0cad81c869038b26e"/></dir><file name="Order.php" hash="9a27755d756a06b82a0cc0d97c315519"/><dir name="Row"><file name="Exception.php" hash="2a48372f5f71cbaad940bc0a62327cff"/></dir><file name="Row.php" hash="459df27d460fd4c3923e860bc8a76a78"/><dir name="Rowset"><file name="Exception.php" hash="5b109a1eef32d14cbc66016fdf65ad9c"/><file name="Iterator.php" hash="0797f8c5a95d47a521ac333e853e6cd3"/></dir><file name="Rowset.php" hash="a10029ba58512887eb7aeb8e40a96a33"/><dir name="Segment"><file name="Exception.php" hash="c0fb3c3a1ed79177f5247abe40adf504"/><file name="Row.php" hash="5211fe7639821a8e413f7832d33dca3c"/></dir><file name="Segment.php" hash="67cf81752cd21a42ad7b6b2ab713c9eb"/></dir><file name="Api.php" hash="2f4d300d9921f4b46faf7d78e34466d9"/><file name="SoapClient.php" hash="f07d2c4551825a1018ddfbd997d660d8"/><dir name="Util"><file name="Colors.php" hash="9bc5a4ce486972d493c82fcb671b416c"/><file name="CountryCodes.php" hash="c666d446d3a156fb2881bf33f2acfc80"/><dir name="Retryer"><file name="FileRetryer.php" hash="6ce89108476048a6e45a7457f53272de"/><file name="RetryerException.php" hash="65ab6cc1f4e71fad55832657f700c653"/><file name="RetryerInterface.php" hash="29aab11684d6eb27439281cd9f6cee76"/></dir><file name="Uuid.php" hash="00f349c1dc57463ebf13639a6bbff6fd"/></dir></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="base"><dir name="default"><dir name="bronto"><file name="cron.css" hash="c7260d3aa14b5945ee76c72dbd914efa"/><dir name="images"><file name="bg_notifications.gif" hash="df73b8aa7e48bb56e0a644245aa3683f"/><file name="logo.jpg" hash="3c6059218195679d99dbb874bdabbd07"/><file name="message_approved.gif" hash="465a056a3ba3d94367f51c3c0b751391"/><file name="message_not_approved.gif" hash="e4f28607f075a105e53fa3113d84bd26"/></dir></dir></dir></dir></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="template"><dir name="bronto"><dir name="newsletter"><file name="js.phtml" hash="6de4664211ad1fc94b226033ef1efc8f"/></dir></dir></dir><dir name="layout"><dir name="bronto"><file name="newsletter.xml" hash="b7d4c9b1fb4fabb4255c6df64e98d332"/></dir></dir></dir></dir></dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="template"><dir name="bronto"><dir name="common"><file name="about.phtml" hash="f115cbc70309f4e3b14d33cf29bdb274"/><file name="cron.phtml" hash="f1dbdea68c377d7057230697450e16b1"/></dir><dir name="conflictchecker"><file name="errors.phtml" hash="26c9fa4332b8518141de9dab0db0c823"/></dir><dir name="email"><dir name="template"><file name="edit.phtml" hash="35c4f68337a6be7186be1aac0fbe404e"/><file name="list.phtml" hash="cf2503d79273b5a611cde3acde2bb79d"/></dir></dir><dir name="permissionchecker"><file name="errors.phtml" hash="0306e132afed0c88058be67d37dd211c"/></dir><dir name="roundtrip"><file name="status.phtml" hash="9ce88385bb507dfeb2df9e049a5f9f9d"/></dir></dir></dir><dir name="layout"><dir name="bronto"><file name="email.xml" hash="be77c906770a0d818898a910b03cbe4f"/><file name="reminder.xml" hash="98d835f287cb3aa2ff801f0219f88ccc"/><file name="roundtrip.xml" hash="3da91d3bcb40e1805a80fb2a18ed9cee"/></dir></dir></dir></dir></dir></target><target name="magelocale"><dir name="en_US"><dir name="template"><dir name="email"><dir name="bronto"><file name="abandoned_cart.html" hash="20b0f55098c0f07bf96da3c5309d9192"/></dir></dir></dir></dir></target></contents>
61
  <compatible/>
62
  <dependencies><required><php><min>5.2.13</min><max>5.5.0</max></php><extension><name>soap</name><min></min><max></max></extension><extension><name>openssl</name><min></min><max></max></extension></required></dependencies>
63
  </package>