Bronto_Extension - Version 2.0.3

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.3
Comparing to
See all releases


Code changes from version 2.0.2.1 to 2.0.3

Files changed (39) hide show
  1. app/code/community/Bronto/Common/Block/Adminhtml/System/Config/About.php +1 -1
  2. app/code/community/Bronto/Common/Block/Adminhtml/System/Config/Cron.php +1 -1
  3. app/code/community/Bronto/Common/Helper/Data.php +52 -0
  4. app/code/community/Bronto/Common/Model/System/Config/Source/Field.php +24 -0
  5. app/code/community/Bronto/Common/etc/config.xml +1 -1
  6. app/code/community/Bronto/Customer/Block/Adminhtml/System/Config/Cron.php +1 -1
  7. app/code/community/Bronto/Customer/Block/Adminhtml/System/Config/Form/Fieldset/Attributes.php +206 -53
  8. app/code/community/Bronto/Customer/Block/Adminhtml/System/Config/Form/Fieldset/Attributes/Address.php +3 -0
  9. app/code/community/Bronto/Customer/Block/Adminhtml/System/Config/Form/Fieldset/Attributes/Customer.php +3 -0
  10. app/code/community/Bronto/Customer/Helper/Data.php +18 -0
  11. app/code/community/Bronto/Customer/Model/{Resource → Mysql4}/Setup.php +2 -2
  12. app/code/community/Bronto/Customer/Model/Observer.php +157 -35
  13. app/code/community/Bronto/Customer/Model/Resource/Customer/Collection.php +0 -100
  14. app/code/community/Bronto/Customer/Model/System/Config/Backend/Brontofield.php +62 -0
  15. app/code/community/Bronto/Customer/etc/config.xml +10 -5
  16. app/code/community/Bronto/Customer/etc/system.xml +20 -20
  17. app/code/community/Bronto/Customer/sql/bronto_customer_setup/mysql4-upgrade-1.0.0-1.0.1.php +1 -1
  18. app/code/community/Bronto/Customer/sql/bronto_customer_setup/mysql4-upgrade-1.0.1-1.0.2.php +1 -1
  19. app/code/community/Bronto/Email/Block/Adminhtml/System/Email/Template/Grid.php +3 -2
  20. app/code/community/Bronto/Newsletter/Block/Adminhtml/System/Config/Cron.php +11 -18
  21. app/code/community/Bronto/Newsletter/Block/Checkout/Onepage/Newsletter.php +52 -0
  22. app/code/community/Bronto/Newsletter/Helper/Contact.php +41 -69
  23. app/code/community/Bronto/Newsletter/Model/Mysql4/Queue/Collection.php +50 -0
  24. app/code/community/Bronto/Newsletter/Model/Observer.php +118 -101
  25. app/code/community/Bronto/Order/Block/Adminhtml/System/Config/Cron.php +1 -1
  26. app/code/community/Bronto/Order/Model/{Resource → Mysql4}/Setup.php +8 -10
  27. app/code/community/Bronto/Order/Model/Observer.php +6 -0
  28. app/code/community/Bronto/Order/Model/Resource/Order/Collection.php +0 -81
  29. app/code/community/Bronto/Order/Test/Config/Config.php +1 -2
  30. app/code/community/Bronto/Order/etc/config.xml +1 -5
  31. app/code/community/Bronto/Order/sql/bronto_order_setup/mysql4-upgrade-1.1.5-1.1.6.php +1 -1
  32. app/code/community/Bronto/Order/sql/bronto_order_setup/mysql4-upgrade-1.1.6-1.1.7.php +1 -1
  33. app/code/community/Bronto/Reminder/Block/Adminhtml/Reminder/Edit/Tab/Customers.php +2 -1
  34. app/code/community/Bronto/Reminder/Model/Rule.php +120 -53
  35. app/code/community/Bronto/Reminder/Test/Config/Config.php +1 -1
  36. app/code/community/Bronto/Reminder/Test/Model/Rule.php +36 -36
  37. app/code/community/Bronto/Reminder/etc/config.xml +1 -1
  38. app/design/frontend/base/default/template/bronto/newsletter/js.phtml +26 -47
  39. package.xml +5 -5
app/code/community/Bronto/Common/Block/Adminhtml/System/Config/About.php CHANGED
@@ -5,7 +5,7 @@
5
  * @copyright 2011-2013 Bronto Software, Inc.
6
  * @license http://opensource.org/licenses/OSL-3.0 Open Software License v. 3.0 (OSL-3.0)
7
  *
8
- * @version 2.0.2.1
9
  */
10
  class Bronto_Common_Block_Adminhtml_System_Config_About extends Mage_Adminhtml_Block_System_Config_Form_Fieldset
11
  {
5
  * @copyright 2011-2013 Bronto Software, Inc.
6
  * @license http://opensource.org/licenses/OSL-3.0 Open Software License v. 3.0 (OSL-3.0)
7
  *
8
+ * @version 2.0.3
9
  */
10
  class Bronto_Common_Block_Adminhtml_System_Config_About extends Mage_Adminhtml_Block_System_Config_Form_Fieldset
11
  {
app/code/community/Bronto/Common/Block/Adminhtml/System/Config/Cron.php CHANGED
@@ -113,7 +113,7 @@ class Bronto_Common_Block_Adminhtml_System_Config_Cron extends Mage_Adminhtml_Bl
113
  $percent = 0;
114
  $pending = (int) $this->getProgressBarPending();
115
  $total = (int) $this->getProgressBarTotal();
116
-
117
  $complete = $total - $pending;
118
  if ($complete > 0) {
119
  $percent = round(($complete / $total) * 100);
113
  $percent = 0;
114
  $pending = (int) $this->getProgressBarPending();
115
  $total = (int) $this->getProgressBarTotal();
116
+
117
  $complete = $total - $pending;
118
  if ($complete > 0) {
119
  $percent = round(($complete / $total) * 100);
app/code/community/Bronto/Common/Helper/Data.php CHANGED
@@ -435,9 +435,61 @@ class Bronto_Common_Helper_Data extends Mage_Core_Helper_Abstract
435
  return false;
436
  }
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
435
  return false;
436
  }
437
  }
438
+
439
+ // Apply advanced logging data to bronto_common logging
440
+ if (strtolower($this->_getModuleName()) == 'bronto_common') {
441
+ $this->_advancedLogging($level, $file);
442
+ }
443
+
444
  return Mage::log($message, $level, $file, true);
445
  }
446
 
447
+ /**
448
+ * Adds Advanced logging data to
449
+ * @param string $level
450
+ * @param string $file
451
+ * @return bool|null
452
+ */
453
+ protected function _advancedLogging($level, $file)
454
+ {
455
+ // Log Magento version
456
+ $edition = (class_exists('Enterprise_Cms_Helper_Data')) ? 'EE' : 'CE';
457
+ $message = 'Magento ' . $edition . ' v' . Mage::getVersion() . ' - ';
458
+
459
+ // Log PHP version
460
+ if (phpversion()) {
461
+ $message .= 'PHP v' . phpversion() . ' - ';
462
+ }
463
+
464
+ if (constant('PCRE_VERSION')) {
465
+ $message .= 'PECL v' . strstr(constant('PCRE_VERSION'), ' ', true) . ' - ';
466
+ }
467
+
468
+ // append with list of custom modules
469
+ $modules = $this->_getModuleList();
470
+ $message .= 'Installed Modules: ' . $modules;
471
+
472
+ Mage::log($message, $level, $file, true);
473
+ }
474
+
475
+ /**
476
+ * Get list of active custom modules
477
+ * @return string
478
+ */
479
+ protected function _getModuleList()
480
+ {
481
+ $moduleList = array();
482
+ $modules = Mage::getConfig()->getNode('modules')->children();
483
+
484
+ foreach ($modules as $name => $module) {
485
+ if (strpos($name, 'Mage_') === FALSE && strpos($name, 'Enterprise_') === FALSE && $module->active == 'true') {
486
+ $moduleList[] = $name . ' [v' . $module->version . ' codePool: ' . $module->codePool . ']';
487
+ }
488
+ }
489
+
490
+ return implode(', ', $moduleList);
491
+ }
492
+
493
  /**
494
  * Get Array of Store Ids based on current store/website/group
495
  * @return boolean|array
app/code/community/Bronto/Common/Model/System/Config/Source/Field.php CHANGED
@@ -47,4 +47,28 @@ class Bronto_Common_Model_System_Config_Source_Field
47
 
48
  return $this->_options;
49
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
50
  }
47
 
48
  return $this->_options;
49
  }
50
+
51
+ /**
52
+ * Get Field Object by ID
53
+ * @param string $id
54
+ * @return boolean|Bronto_Api_Field_Row
55
+ */
56
+ public function getFieldObjectById($id)
57
+ {
58
+ try {
59
+ if ($api = Mage::helper('bronto_common')->getApi()) {
60
+ /* @var $fieldObject Bronto_Api_Field */
61
+ $fieldObject = $api->getFieldObject();
62
+ foreach ($fieldObject->readAll()->iterate() as $field /* @var $field Bronto_Api_Field_Row */) {
63
+ if ($field->id == $id) {
64
+ return $field;
65
+ }
66
+ }
67
+ }
68
+ } catch (Exception $e) {
69
+ Mage::helper('bronto_common')->writeError($e);
70
+ }
71
+
72
+ return false;
73
+ }
74
  }
app/code/community/Bronto/Common/etc/config.xml CHANGED
@@ -2,7 +2,7 @@
2
  <config>
3
  <modules>
4
  <Bronto_Common>
5
- <version>2.0.2.1</version>
6
  </Bronto_Common>
7
  </modules>
8
  <global>
2
  <config>
3
  <modules>
4
  <Bronto_Common>
5
+ <version>2.0.3</version>
6
  </Bronto_Common>
7
  </modules>
8
  <global>
app/code/community/Bronto/Customer/Block/Adminhtml/System/Config/Cron.php CHANGED
@@ -42,7 +42,7 @@ class Bronto_Customer_Block_Adminhtml_System_Config_Cron extends Bronto_Common_B
42
  }
43
 
44
  /**
45
- * @return Bronto_Customer_Model_Resource_Customer_Collection
46
  */
47
  protected function getCustomerResourceCollection()
48
  {
42
  }
43
 
44
  /**
45
+ * @return Bronto_Customer_Model_Mysql4_Queue_Collection
46
  */
47
  protected function getCustomerResourceCollection()
48
  {
app/code/community/Bronto/Customer/Block/Adminhtml/System/Config/Form/Fieldset/Attributes.php CHANGED
@@ -6,61 +6,219 @@
6
  * @version 1.0.0
7
  */
8
  abstract class Bronto_Customer_Block_Adminhtml_System_Config_Form_Fieldset_Attributes extends Mage_Adminhtml_Block_System_Config_Form_Fieldset
9
- {
10
  protected $_ignoreAttributes = array();
11
- protected $_clonedSelect;
12
- protected $_clonedSelectName;
13
- protected $_clonedText;
14
- protected $_clonedTextName;
15
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
  /**
17
- * Return header html for fieldset
18
- *
19
- * @param Varien_Data_Form_Element_Fieldset $fieldset
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20
  * @return string
21
  */
22
- protected function _getHeaderHtml($fieldset)
23
  {
24
- $ignoreAttributeCodes = $this->_getUsedAttributeCodes($fieldset);
25
- $ignoreAttributeCodes = array_merge($ignoreAttributeCodes, $this->_ignoreAttributes);
26
-
27
- // Append any extra Customer attributes
28
- foreach ($this->_getAttributes() as $_attributeId => $_attribute) {
29
- $_attributeCode = $_attribute->getAttributeCode();
30
- if (in_array($_attributeCode, $ignoreAttributeCodes)) {
31
- continue;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32
  }
33
-
34
- if ($_label = $_attribute->getFrontendLabel()) {
35
- // Add select
36
- $appendSelect = clone $this->_clonedSelect;
37
- $appendSelect->setLabel($_label);
38
- $appendSelect->setId(str_replace($this->_clonedSelectName, $_attributeCode, $appendSelect->getId()));
39
- $appendSelect->setHtmlId(str_replace($this->_clonedSelectName, $_attributeCode, $appendSelect->getHtmlId()));
40
- $appendSelect->setName(str_replace($this->_clonedSelectName, $_attributeCode, $appendSelect->getName()));
41
- $fieldset->addElement($appendSelect);
42
-
43
- // Add custom field name input
44
- $appendText = clone $this->_clonedText;
45
- $appendText->setId(str_replace($this->_clonedTextName, "new_{$_attributeCode}", $appendText->getId()));
46
- $appendText->setHtmlId(str_replace($this->_clonedTextName, "new_{$_attributeCode}", $appendText->getHtmlId()));
47
- $appendText->setName(str_replace($this->_clonedTextName, "new_{$_attributeCode}", $appendText->getName()));
48
- $fieldset->addElement($appendText);
49
-
50
- // Field dependencies
51
- $this->getForm()->getChild('element_dependense')
52
- ->addFieldMap($appendSelect->getHtmlId(), $appendSelect->getName())
53
- ->addFieldMap($appendText->getHtmlId(), $appendText->getName())
54
- ->addFieldDependence($appendText->getName(), $appendSelect->getName(), '_new_')
55
- ;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
56
  }
 
57
  }
58
-
59
- return parent::_getHeaderHtml($fieldset);
60
  }
61
-
62
  abstract protected function _getAttributes();
63
-
64
  /**
65
  * @param Varien_Data_Form_Element_Fieldset $fieldset
66
  * @return array<string>
@@ -72,18 +230,13 @@ abstract class Bronto_Customer_Block_Adminhtml_System_Config_Form_Fieldset_Attri
72
  // Determine the *actual* name for this select box
73
  preg_match('/\[(\w+)\]\[value\]/', $_element->getName(), $matches);
74
  if (isset($matches[1])) {
75
- if (stripos($_element->getName(), 'new_') === false) {
76
- $this->_clonedSelect = $_element;
77
- $this->_clonedSelectName = $matches[1];
78
- } else {
79
- $this->_clonedText = $_element;
80
- $this->_clonedTextName = $matches[1];
81
- }
82
-
83
  // Add to list
84
  $usedAttributeCodes[] = $matches[1];
85
  }
86
  }
 
 
 
87
 
88
  return $usedAttributeCodes;
89
  }
6
  * @version 1.0.0
7
  */
8
  abstract class Bronto_Customer_Block_Adminhtml_System_Config_Form_Fieldset_Attributes extends Mage_Adminhtml_Block_System_Config_Form_Fieldset
9
+ {
10
  protected $_ignoreAttributes = array();
11
+ protected $_configPath = '';
12
+ protected $_dummyElement;
13
+ protected $_dummyNewElement;
14
+ protected $_fieldRenderer;
15
+ protected $_values;
16
+
17
+ public function render(Varien_Data_Form_Element_Abstract $element)
18
+ {
19
+ $html = $this->_getHeaderHtml($element);
20
+
21
+ // Render Existing elements
22
+ foreach ($element->getSortedElements() as $field) {
23
+ $html.= $field->toHtml();
24
+ }
25
+
26
+ // Get Array of existing fields
27
+ $skips = $this->_getUsedAttributeCodes($element);
28
+ $order = 100;
29
+ // Cycle through Attributes and skip ignored attributes
30
+ foreach ($this->_getAttributes() as $_attribute) {
31
+ $_attributeCode = $_attribute->getAttributeCode();
32
+ if (in_array($_attributeCode, $skips)) {
33
+ continue;
34
+ } else {
35
+ $order = $order+5;
36
+ $html.= $this->_getFieldHtml($element, $_attribute, $order);
37
+ }
38
+ }
39
+
40
+ $html .= $this->_getFooterHtml($element);
41
+
42
+ return $html;
43
+ }
44
+
45
  /**
46
+ * this creates a dummy element so you can say if your config fields are available on default and website level -
47
+ * you can skip this and add the scope for each element in _getFieldHtml method
48
+ * @return type
49
+ */
50
+ protected function _getDummyElement($order)
51
+ {
52
+ if (empty($this->_dummyElement)) {
53
+ $this->_dummyElement = new Varien_Object(array(
54
+ 'sort_order' => $order,
55
+ 'frontend_type' => 'select',
56
+ 'frontend_model' => 'bronto_common/adminhtml_system_config_form_field',
57
+ 'backend_model' => 'bronto_customer/system_config_backend_newfield',
58
+ 'source_model' => 'bronto_common/system_config_source_field',
59
+ 'show_in_default' => 1,
60
+ 'show_in_website' => 1,
61
+ 'show_in_store' => 0,
62
+ ));
63
+ }
64
+
65
+ return $this->_dummyElement;
66
+ }
67
+
68
+ /**
69
+ * Get Dummy Element for 'Create New...' form
70
+ * @param int $order
71
+ * @return type
72
+ */
73
+ protected function _getDummyNewElement($order)
74
+ {
75
+ if (empty($this->_dummyNewElement)) {
76
+ $this->_dummyNewElement = new Varien_Object(array(
77
+ 'sort_order' => $order,
78
+ 'frontend_type' => 'text',
79
+ 'backend_model' => 'bronto_customer/system_config_backend_newfield',
80
+ 'show_in_default' => 1,
81
+ 'show_in_website' => 1,
82
+ 'show_in_store' => 0,
83
+ ));
84
+ }
85
+ return $this->_dummyNewElement;
86
+ }
87
+
88
+ /**
89
+ * this sets the fields renderer. If you have a custom renderer you can change this.
90
+ * @return type
91
+ */
92
+ protected function _getFieldRenderer()
93
+ {
94
+ if (empty($this->_fieldRenderer)) {
95
+ $this->_fieldRenderer = Mage::getBlockSingleton('adminhtml/system_config_form_field');
96
+ }
97
+ return $this->_fieldRenderer;
98
+ }
99
+
100
+ /**
101
+ * this actually gets the html for a field
102
+ * @param Varien_Data_Form_Element_Abstract $fieldset
103
+ * @param Mage_Eav_Model_Entity_Attribute $attribute
104
+ * @param int $order
105
  * @return string
106
  */
107
+ protected function _getFieldHtml(Varien_Data_Form_Element_Abstract $fieldset, Mage_Eav_Model_Entity_Attribute $attribute, int $order)
108
  {
109
+ // Create Select Field
110
+ $e = $this->_getDummyElement($order);
111
+ $field = $this->_createField($fieldset, $e, $attribute);
112
+
113
+ // Create New Field
114
+ $en = $this->_getDummyNewElement($order+1);
115
+ $newField = $this->_createField($fieldset, $en, $attribute, 'newfield');
116
+
117
+ // Define Field Dependencies
118
+ $this->getForm()->getChild('element_dependense')
119
+ ->addFieldMap($field->getHtmlId(), $field->getName())
120
+ ->addFieldMap($newField->getHtmlId(), $newField->getName())
121
+ ->addFieldDependence($newField->getName(), $field->getName(), '_new_');
122
+
123
+ return $field->toHtml() . $newField->toHtml();
124
+ }
125
+
126
+ /**
127
+ * Create Field and Return it
128
+ * @param Varien_Data_Form_Element_Abstract $fieldset
129
+ * @param Varien_Object $e
130
+ * @param Mage_Eav_Model_Entity_Attribute $attribute
131
+ * @param string $fieldStep
132
+ * @return Varien_Data_Form_Element_Abstract
133
+ */
134
+ protected function _createField(
135
+ Varien_Data_Form_Element_Abstract $fieldset,
136
+ Varien_Object $e,
137
+ Mage_Eav_Model_Entity_Attribute $attribute,
138
+ $fieldStep = 'standard'
139
+ )
140
+ {
141
+ // Get Config Data
142
+ $configData = $this->getConfigData();
143
+
144
+ // Define Attribute Code
145
+ $attributeCode = $attribute->getAttributeCode();
146
+ $attributeCode = ($fieldStep == 'newfield') ? "dynamic_new_{$attributeCode}" : $attributeCode;
147
+
148
+ // Get Attribute Data and Inheritance
149
+ $path = $this->_configPath . $attributeCode;
150
+ if (isset($configData[$path])) {
151
+ $data = $configData[$path];
152
+ $inherit = false;
153
+ } else {
154
+ $data = (string)$this->getForm()->getConfigRoot()->descend($path);
155
+ $inherit = true;
156
+ }
157
+
158
+ // Get field Renderer
159
+ if ($e->frontend_model) {
160
+ $fieldRenderer = Mage::getBlockSingleton((string)$e->frontend_model);
161
+ } else {
162
+ $fieldRenderer = $this->_getFieldRenderer();
163
+ }
164
+
165
+ // Define Type, Name, and Label
166
+ $fieldType = (string)$e->frontend_type ? (string)$e->frontend_type : 'text';
167
+ $name = str_replace('_attrCode_', $attributeCode, $this->_fieldNameTemplate);
168
+ $label = ($fieldStep == 'newfield') ? "" : $attribute->getFrontendLabel();
169
+
170
+ // Pass through backend model in case it needs to modify value
171
+ if ($e->backend_model) {
172
+ $model = Mage::getModel((string)$e->backend_model);
173
+ if (!$model instanceof Mage_Core_Model_Config_Data) {
174
+ Mage::throwException('Invalid config field backend model: ' . (string)$e->backend_model);
175
  }
176
+ $model->setPath($path)->setValue($data)->afterLoad();
177
+ $data = $model->getValue();
178
+ }
179
+
180
+ // Select Field for Existing attributes
181
+ $field = $fieldset->addField($attributeCode, $fieldType,
182
+ array(
183
+ 'name' => $name,
184
+ 'label' => $label,
185
+ 'value' => ($data === 0) ? '' : $data,
186
+ 'inherit' => ($fieldStep == 'newfield') ? false : $inherit,
187
+ 'field_config' => $e,
188
+ 'scope' => $this->getForm()->getScope(),
189
+ 'scopeId' => $this->getForm()->getScopeId(),
190
+ 'scope_label' => '[WEBSITE]',
191
+ 'can_use_default_value' => $this->getForm()->canUseDefaultValue((int)$e->show_in_default),
192
+ 'can_use_website_value' => $this->getForm()->canUseWebsiteValue((int)$e->show_in_website),
193
+ ));
194
+
195
+ // Add Validation
196
+ if ($e->validate) {
197
+ $field->addClass($e->validate);
198
+ }
199
+
200
+ // Determine if value can be empty
201
+ if (isset($e->frontend_type) && 'multiselect' === (string)$e->frontend_type && isset($e->can_be_empty)) {
202
+ $field->setCanBeEmpty(true);
203
+ }
204
+
205
+ // Set Field Renderer
206
+ $field->setRenderer($fieldRenderer);
207
+
208
+ // Use Source Model to define available options
209
+ if ($e->source_model) {
210
+ $sourceModel = Mage::getSingleton((string)$e->source_model);
211
+ if ($sourceModel instanceof Varien_Object) {
212
+ $sourceModel->setPath($path);
213
  }
214
+ $field->setValues($sourceModel->toOptionArray());
215
  }
216
+
217
+ return $field;
218
  }
219
+
220
  abstract protected function _getAttributes();
221
+
222
  /**
223
  * @param Varien_Data_Form_Element_Fieldset $fieldset
224
  * @return array<string>
230
  // Determine the *actual* name for this select box
231
  preg_match('/\[(\w+)\]\[value\]/', $_element->getName(), $matches);
232
  if (isset($matches[1])) {
 
 
 
 
 
 
 
 
233
  // Add to list
234
  $usedAttributeCodes[] = $matches[1];
235
  }
236
  }
237
+
238
+ // Merge in ignored attribute codes
239
+ $usedAttributeCodes = array_merge($usedAttributeCodes, $this->_ignoreAttributes);
240
 
241
  return $usedAttributeCodes;
242
  }
app/code/community/Bronto/Customer/Block/Adminhtml/System/Config/Form/Fieldset/Attributes/Address.php CHANGED
@@ -24,6 +24,9 @@ class Bronto_Customer_Block_Adminhtml_System_Config_Form_Fieldset_Attributes_Add
24
  'suffix',
25
  'vat_id',
26
  );
 
 
 
27
 
28
  /**
29
  * @return array
24
  'suffix',
25
  'vat_id',
26
  );
27
+
28
+ protected $_configPath = Bronto_Customer_Helper_Data::XML_PREFIX_ADDRESS_ATTR;
29
+ protected $_fieldNameTemplate = 'groups[address_attributes][fields][_attrCode_][value]';
30
 
31
  /**
32
  * @return array
app/code/community/Bronto/Customer/Block/Adminhtml/System/Config/Form/Fieldset/Attributes/Customer.php CHANGED
@@ -30,6 +30,9 @@ class Bronto_Customer_Block_Adminhtml_System_Config_Form_Fieldset_Attributes_Cus
30
  'reward_warning_notification',
31
  'disable_auto_group_change',
32
  );
 
 
 
33
 
34
  /**
35
  * @return array
30
  'reward_warning_notification',
31
  'disable_auto_group_change',
32
  );
33
+
34
+ protected $_configPath = Bronto_Customer_Helper_Data::XML_PREFIX_CUSTOMER_ATTR;
35
+ protected $_fieldNameTemplate = 'groups[attributes][fields][_attrCode_][value]';
36
 
37
  /**
38
  * @return array
app/code/community/Bronto/Customer/Helper/Data.php CHANGED
@@ -79,4 +79,22 @@ class Bronto_Customer_Helper_Data extends Bronto_Common_Helper_Data implements B
79
  }
80
  return false;
81
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
82
  }
79
  }
80
  return false;
81
  }
82
+
83
+ /**
84
+ *
85
+ * @param Bronto_Api_Field_Row $field
86
+ * @return boolean
87
+ */
88
+ public function getFieldOptionArray(Bronto_Api_Field_Row $field)
89
+ {
90
+ $fieldObjectOptions = $field->options;
91
+ if ($fieldObjectOptions) {
92
+ $options = array();
93
+ foreach ($fieldObjectOptions as $option) {
94
+ $options[] = $option->value;
95
+ }
96
+ return $options;
97
+ }
98
+ return false;
99
+ }
100
  }
app/code/community/Bronto/Customer/Model/{Resource → Mysql4}/Setup.php RENAMED
@@ -3,9 +3,9 @@
3
  /**
4
  * @package Bronto\Customer
5
  * @copyright 2011-2012 Bronto Software, Inc.
6
- * @version 1.1.5
7
  */
8
- class Bronto_Customer_Model_Resource_Setup extends Mage_Customer_Model_Entity_Setup
9
  {
10
  protected function _getAttributeColumnDefinition($code, $data)
11
  {
3
  /**
4
  * @package Bronto\Customer
5
  * @copyright 2011-2012 Bronto Software, Inc.
6
+ * @version 1.0.2
7
  */
8
+ class Bronto_Customer_Model_Mysql4_Setup extends Mage_Customer_Model_Entity_Setup
9
  {
10
  protected function _getAttributeColumnDefinition($code, $data)
11
  {
app/code/community/Bronto/Customer/Model/Observer.php CHANGED
@@ -76,43 +76,13 @@ class Bronto_Customer_Model_Observer extends Mage_Core_Model_Abstract
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
- if ($dob = $customer->getData($_attributeCode)) {
91
- $attrValue = Mage::getSingleton('core/date')->date('Y-m-d', $dob);
92
- }
93
- break;
94
- default:
95
- $attrValue = $customer->getData($_attributeCode);
96
- break;
97
- }
98
-
99
- if ($attrValue != '') {
100
- $brontoContact->setField($_fieldName, $attrValue);
101
- }
102
- }
103
- }
104
-
105
- // For each Customer Address attribute
106
  $primaryAddress = $customer->getPrimaryShippingAddress();
107
  if (!empty($primaryAddress)) {
108
- foreach ($addressAttributes as $attributeId => $attribute) {
109
- $_attributeCode = $attribute->getAttributeCode();
110
- $_fieldName = Mage::helper('bronto_customer')->getAddressAttributeField($_attributeCode, $store);
111
-
112
- if (!empty($_fieldName) && $_fieldName != '_none_') {
113
- $brontoContact->setField($_fieldName, $primaryAddress->getData($_attributeCode));
114
- }
115
- }
116
  }
117
 
118
  $brontoContact->persist();
@@ -152,6 +122,78 @@ class Bronto_Customer_Model_Observer extends Mage_Core_Model_Abstract
152
  }
153
 
154
  // }}}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
155
  // {{{ flushCustomers()
156
 
157
  /**
@@ -163,6 +205,7 @@ class Bronto_Customer_Model_Observer extends Mage_Core_Model_Abstract
163
  */
164
  public function flushCustomers($customerObject, $customerCache, $result)
165
  {
 
166
  $flushResult = $customerObject->flush();
167
 
168
  Mage::helper('bronto_customer')->writeVerboseDebug('===== FLUSH =====', 'bronto_customer_api.log');
@@ -173,6 +216,15 @@ class Bronto_Customer_Model_Observer extends Mage_Core_Model_Abstract
173
  if ($flushResultRow->hasError()) {
174
  $errorCode = $flushResultRow->getErrorCode();
175
  $errorMessage = $flushResultRow->getErrorMessage();
 
 
 
 
 
 
 
 
 
176
  if (isset($customerCache[$i])) {
177
  // Get Customer Object
178
  $customer = Mage::getModel('customer/customer')->load($customerCache[$i]['customerId']);
@@ -242,4 +294,74 @@ class Bronto_Customer_Model_Observer extends Mage_Core_Model_Abstract
242
  }
243
 
244
  // }}}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
245
  }
76
  $brontoContact = $contactObject->createRow();
77
  $brontoContact->email = $customer->getEmail();
78
 
79
+ /* Process Customer Attributes */
80
+ $brontoContact = $this->processAttributes($brontoContact, $customer, $customerAttributes, $store, 'customer');
81
+
82
+ /* Process Address Attributes */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
83
  $primaryAddress = $customer->getPrimaryShippingAddress();
84
  if (!empty($primaryAddress)) {
85
+ $brontoContact = $this->processAttributes($brontoContact, $primaryAddress, $addressAttributes, $store, 'address');
 
 
 
 
 
 
 
86
  }
87
 
88
  $brontoContact->persist();
122
  }
123
 
124
  // }}}
125
+
126
+ /**
127
+ * Cycle through attributes and validate against Bronto Field type
128
+ * @param Bronto_Api_Contact_Row $brontoContact
129
+ * @param $source
130
+ * @param $attributes
131
+ * @param Mage_Core_Model_Store $store
132
+ * @param string $type 'customer' or 'address'
133
+ * @return Bronto_Api_Contact_Row
134
+ */
135
+ public function processAttributes(Bronto_Api_Contact_Row $brontoContact, $source, $attributes, Mage_Core_Model_Store $store, $type = 'customer')
136
+ {
137
+ // For each Customer attribute
138
+ foreach ($attributes as $attribute) {
139
+ $_attributeCode = $attribute->getAttributeCode();
140
+
141
+ // Get Attribute Field
142
+ switch ($type) {
143
+ case 'address':
144
+ $_fieldName = Mage::helper('bronto_customer')->getAddressAttributeField($_attributeCode, $store);
145
+ break;
146
+ default:
147
+ $_fieldName = Mage::helper('bronto_customer')->getCustomerAttributeField($_attributeCode, $store);
148
+ break;
149
+ }
150
+
151
+ // Get Customer Attribute Value
152
+ $_attributeValue = $this->getReadableValue($attribute, $source->getData($_attributeCode));
153
+
154
+ // Skip un-mapped or empty attributes
155
+ if (empty($_fieldName) || '_none_' == $_fieldName || !$_attributeValue || '' == $_attributeValue) {
156
+ continue;
157
+ }
158
+
159
+ $brontoContact->setField($_fieldName, $_attributeValue);
160
+ }
161
+
162
+ return $brontoContact;
163
+ }
164
+
165
+ /**
166
+ * Based on attribute type, pull the value or the label
167
+ * @param type $attribute
168
+ * @param type $value
169
+ * @return type
170
+ */
171
+ public function getReadableValue($attribute, $value)
172
+ {
173
+ $_attributeType = $attribute->getFrontendInput();
174
+
175
+ switch ($_attributeType) {
176
+ case 'select':
177
+ case 'boolean':
178
+ return strtolower(Mage::helper('bronto_customer')->getAttributeAdminLabel($attribute, $value));
179
+ break;
180
+ case 'multiselect':
181
+ $values = array();
182
+ foreach ($value as $val) {
183
+ $values[] = strtolower(Mage::helper('bronto_customer')->getAttributeAdminLabel($attribute, $val));
184
+ }
185
+ return $values;
186
+ break;
187
+ case 'date':
188
+ return Mage::getSingleton('core/date')->date('Y-m-d', $value);
189
+ break;
190
+ default:
191
+ return $value;
192
+ break;
193
+ }
194
+ }
195
+
196
+
197
  // {{{ flushCustomers()
198
 
199
  /**
205
  */
206
  public function flushCustomers($customerObject, $customerCache, $result)
207
  {
208
+ $fieldModel = Mage::getModel('bronto_common/system_config_source_field');
209
  $flushResult = $customerObject->flush();
210
 
211
  Mage::helper('bronto_customer')->writeVerboseDebug('===== FLUSH =====', 'bronto_customer_api.log');
216
  if ($flushResultRow->hasError()) {
217
  $errorCode = $flushResultRow->getErrorCode();
218
  $errorMessage = $flushResultRow->getErrorMessage();
219
+
220
+ // Catch Error and Replace Field ID with Field Name
221
+ if ($errorCode === Bronto_Api_Field_Exception::INVALID_FIELD_VALUE || $errorCode === Bronto_Api_Field_Exception::DATA_TRUNCATION) {
222
+ if (preg_match("/'([^']+)'/", $errorMessage, $matches)) { // Grab field id if exists
223
+ $fieldObject = $fieldModel->getFieldObjectById($matches[1]);
224
+ $errorMessage = str_replace($matches[1], $fieldObject->name, $errorMessage);
225
+ }
226
+ }
227
+
228
  if (isset($customerCache[$i])) {
229
  // Get Customer Object
230
  $customer = Mage::getModel('customer/customer')->load($customerCache[$i]['customerId']);
294
  }
295
 
296
  // }}}
297
+
298
+ /**
299
+ * Grab Config Data Object before save and handle the 'Create New...' value for
300
+ * fields that were generated dynamically
301
+ * @param Varien_Event_Observer $observer
302
+ * @return Varien_Event_Observer
303
+ */
304
+ public function saveDynamicField(Varien_Event_Observer $observer)
305
+ {
306
+ if ($observer->getObject()->getSection() == 'bronto_customer') {
307
+ $observer = $this->_handleAttributes($observer);
308
+ }
309
+
310
+ return $observer;
311
+ }
312
+
313
+ /**
314
+ * Process customer and address attributes and save back to observer
315
+ * @param Varien_Event_Observer $observer
316
+ * @return Varien_Event_Observer
317
+ */
318
+ protected function _handleAttributes(Varien_Event_Observer $observer)
319
+ {
320
+ $data = $observer->getObject()->getData();
321
+
322
+ $attrFieldsCustomer = $this->_processAttributes($data['groups']['attributes']['fields']);
323
+ $data['groups']['attributes']['fields'] = $attrFieldsCustomer;
324
+
325
+ $attrFieldsAddress = $this->_processAttributes($data['groups']['address_attributes']['fields']);
326
+ $data['groups']['address_attributes']['fields'] = $attrFieldsAddress;
327
+
328
+ $observer->getObject()->setData($data);
329
+
330
+ return $observer;
331
+ }
332
+
333
+ /**
334
+ * Capture "Create New..." attributes, create field in Bronto, and save field id
335
+ * @param array $attributesFields
336
+ * @return array
337
+ */
338
+ protected function _processAttributes(array $attributesFields)
339
+ {
340
+ foreach ($attributesFields as $fieldId => $field) {
341
+ if (preg_match('/dynamic_new_/', $fieldId)) {
342
+ $realfield = str_replace('dynamic_new_', '', $fieldId);
343
+ $value = $field['value'];
344
+
345
+ /* @var $fieldObject Bronto_Api_Field */
346
+ $fieldObject = Mage::helper('bronto_common')->getApi()->getFieldObject();
347
+
348
+ $field = $fieldObject->createRow();
349
+ $field->name = $fieldObject->normalize($value);
350
+ $field->label = $value;
351
+ $field->type = Bronto_Api_Field::TYPE_TEXT;
352
+
353
+ try {
354
+ $field->save();
355
+ $fieldObject->addToCache($field->name, $field);
356
+
357
+ $attributesFields[$realfield] = array('value' => $field->id);
358
+ unset($attributesFields[$fieldId]);
359
+ } catch (Exception $e) {
360
+ Mage::helper('bronto_customer')->writeError("Unable to save new field: {$value}");
361
+ }
362
+ }
363
+ }
364
+
365
+ return $attributesFields;
366
+ }
367
  }
app/code/community/Bronto/Customer/Model/Resource/Customer/Collection.php DELETED
@@ -1,100 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * @package Bronto\Customer
5
- * @copyright 2011-2013 Bronto Software, Inc.
6
- * @version 1.1.5
7
- */
8
- class Bronto_Customer_Model_Resource_Customer_Collection
9
- extends Mage_Customer_Model_Entity_Customer_Collection
10
- {
11
- /**
12
- * @return Bronto_Customer_Model_Resource_Customer_Collection
13
- */
14
- public function addBrontoImportedFilter()
15
- {
16
- $this->addAttributeToFilter('bronto_imported', array('notnull' => true));
17
- return $this;
18
- }
19
-
20
- /**
21
- * @return Bronto_Customer_Model_Resource_Customer_Collection
22
- */
23
- public function addBrontoNotImportedFilter()
24
- {
25
- $this->addFieldToFilter('bronto_imported', array('null' => true));
26
- return $this;
27
- }
28
-
29
- public function addBrontoMissingImportedAttribute()
30
- {
31
- $resource = Mage::getSingleton('core/resource');
32
- $db = $resource->getConnection('core_read');
33
-
34
- $attributeId = Mage::getModel('eav/config')
35
- ->getAttribute('customer', 'bronto_imported')
36
- ->getId();
37
-
38
- $subSelect = $db->select()
39
- ->from($resource->getTableName('customer_entity_datetime'), array('entity_id'))
40
- ->where($db->quoteInto('`attribute_id` = ?', $attributeId));
41
- $this->getSelect()
42
- ->where($db->quoteInto('`e`.`entity_id` not in ?', $subSelect));
43
-
44
- return $this;
45
- }
46
-
47
- /**
48
- * @param mixed $storeIds (null, int|string, array, array may contain null)
49
- * @return Bronto_Customer_Model_Resource_Customer_Collection
50
- */
51
- public function addStoreFilter($storeIds)
52
- {
53
- $nullCheck = false;
54
-
55
- if (!is_array($storeIds)) {
56
- $storeIds = array($storeIds);
57
- }
58
-
59
- $storeIds = array_unique($storeIds);
60
-
61
- if ($index = array_search(null, $storeIds)) {
62
- unset($storeIds[$index]);
63
- $nullCheck = true;
64
- }
65
-
66
- $storeIds[0] = ($storeIds[0] == '') ? 0 : $storeIds[0];
67
-
68
- if ($nullCheck) {
69
- $this->getSelect()->where('store_id IN(?) OR store_id IS NULL', $storeIds);
70
- } else {
71
- $this->getSelect()->where('store_id IN(?)', $storeIds);
72
- }
73
-
74
- return $this;
75
- }
76
-
77
- /**
78
- * Sort order by order created_at date
79
- *
80
- * @param string $dir
81
- * @return Bronto_Customer_Model_Resource_Customer_Collection
82
- */
83
- public function orderByCreatedAt($dir = self::SORT_ORDER_DESC)
84
- {
85
- $this->setOrder('created_at', $dir);
86
- return $this;
87
- }
88
-
89
- /**
90
- * Sort order by order updated_at date
91
- *
92
- * @param string $dir
93
- * @return Bronto_Customer_Model_Resource_Customer_Collection
94
- */
95
- public function orderByUpdatedAt($dir = self::SORT_ORDER_DESC)
96
- {
97
- $this->setOrder('updated_at', $dir);
98
- return $this;
99
- }
100
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Bronto/Customer/Model/System/Config/Backend/Brontofield.php ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * @package Bronto\Customer
5
+ * @copyright 2011-2012 Bronto Software, Inc.
6
+ */
7
+ class Bronto_Customer_Model_System_Config_Backend_Brontofield extends Mage_Core_Model_Config_Data
8
+ {
9
+ /**
10
+ * Processing object before save data
11
+ *
12
+ * @return Mage_Core_Model_Abstract
13
+ */
14
+ protected function _beforeSave()
15
+ {
16
+ // if ($this->isValueChanged()) {
17
+ /* @var $fieldObject Bronto_Api_Field */
18
+ $fieldObject = Mage::getModel('bronto_common/system_config_source_field')->getFieldObjectById($this->getValue());
19
+
20
+ if ($fieldObject) {
21
+ if ('attributes' == $this->group_id) {
22
+ $attributes = Mage::getModel('customer/entity_attribute_collection');
23
+ } elseif ('address_attributes' == $this->group_id) {
24
+ $attributes = Mage::getModel('customer/entity_address_attribute_collection')->addVisibleFilter();
25
+ }
26
+
27
+ if ($attributes) {
28
+ foreach ($attributes as $attribute) {
29
+ if ($this->field == $attribute->attribute_code) {
30
+ if ($attribute->frontend_input != $fieldObject->type && $fieldObject->type != 'text') {
31
+ $message = "Input type doesn't match: {$this->getFieldConfig()->label} [type: {$attribute->frontend_input}] => {$fieldObject->label} [type: {$fieldObject->type}]"
32
+ . "... Please note that this could cause issues when attempting to import customers";
33
+ // Throw Warning, but allow saving
34
+ Mage::getSingleton('core/session')->addWarning(Mage::helper('adminhtml')->__($message));
35
+ // Throw Exception and prevent saving
36
+ // Mage::throwException(Mage::helper('adminhtml')->__($message));
37
+ }
38
+ }
39
+ }
40
+ }
41
+ }
42
+ // }
43
+
44
+ return parent::_beforeSave();
45
+ }
46
+
47
+ /**
48
+ * @param type $path
49
+ * @param type $value
50
+ * @return Bronto_Customer_Model_System_Config_Backend_Brontofield
51
+ */
52
+ protected function _saveConfigData($path, $value)
53
+ {
54
+ Mage::getModel('core/config_data')
55
+ ->load($path, 'path')
56
+ ->setValue($value)
57
+ ->setPath($path)
58
+ ->save();
59
+
60
+ return $this;
61
+ }
62
+ }
app/code/community/Bronto/Customer/etc/config.xml CHANGED
@@ -19,12 +19,8 @@
19
  <models>
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>
@@ -36,7 +32,7 @@
36
  <bronto_customer_setup>
37
  <setup>
38
  <module>Bronto_Customer</module>
39
- <class>Bronto_Customer_Model_Resource_Setup</class>
40
  </setup>
41
  <connection>
42
  <use>core_setup</use>
@@ -63,6 +59,15 @@
63
  </bronto_customer_sales_customer_save_after>
64
  </observers>
65
  </customer_save_after>
 
 
 
 
 
 
 
 
 
66
  </events>
67
  </global>
68
  <adminhtml>
19
  <models>
20
  <bronto_customer>
21
  <class>Bronto_Customer_Model</class>
 
22
  <resourceModel>bronto_customer_mysql4</resourceModel>
23
  </bronto_customer>
 
 
 
24
  <bronto_customer_mysql4>
25
  <class>Bronto_Customer_Model_Mysql4</class>
26
  <entities>
32
  <bronto_customer_setup>
33
  <setup>
34
  <module>Bronto_Customer</module>
35
+ <class>Bronto_Customer_Model_Mysql4_Setup</class>
36
  </setup>
37
  <connection>
38
  <use>core_setup</use>
59
  </bronto_customer_sales_customer_save_after>
60
  </observers>
61
  </customer_save_after>
62
+ <model_config_data_save_before>
63
+ <observers>
64
+ <bronto_customer_config_data_save_before>
65
+ <type>singleton</type>
66
+ <class>bronto_customer/observer</class>
67
+ <method>saveDynamicField</method>
68
+ </bronto_customer_config_data_save_before>
69
+ </observers>
70
+ </model_config_data_save_before>
71
  </events>
72
  </global>
73
  <adminhtml>
app/code/community/Bronto/Customer/etc/system.xml CHANGED
@@ -114,6 +114,7 @@
114
  <label>Prefix</label>
115
  <frontend_type>select</frontend_type>
116
  <frontend_model>bronto_common/adminhtml_system_config_form_field</frontend_model>
 
117
  <source_model>bronto_common/system_config_source_field</source_model>
118
  <show_in_default>1</show_in_default>
119
  <show_in_website>1</show_in_website>
@@ -127,7 +128,6 @@
127
  <show_in_website>1</show_in_website>
128
  <show_in_store>0</show_in_store>
129
  <depends><prefix>_new_</prefix></depends>
130
- <validate>validate-length minimum-length-5</validate>
131
  </new_prefix>
132
  <!-- firstname -->
133
  <firstname>
@@ -135,6 +135,7 @@
135
  <label>First Name</label>
136
  <frontend_type>select</frontend_type>
137
  <frontend_model>bronto_common/adminhtml_system_config_form_field</frontend_model>
 
138
  <source_model>bronto_common/system_config_source_field</source_model>
139
  <show_in_default>1</show_in_default>
140
  <show_in_website>1</show_in_website>
@@ -148,7 +149,6 @@
148
  <show_in_website>1</show_in_website>
149
  <show_in_store>0</show_in_store>
150
  <depends><firstname>_new_</firstname></depends>
151
- <validate>validate-length minimum-length-5</validate>
152
  </new_firstname>
153
  <!-- middlename -->
154
  <middlename>
@@ -156,6 +156,7 @@
156
  <label>Middle Name/Initial</label>
157
  <frontend_type>select</frontend_type>
158
  <frontend_model>bronto_common/adminhtml_system_config_form_field</frontend_model>
 
159
  <source_model>bronto_common/system_config_source_field</source_model>
160
  <show_in_default>1</show_in_default>
161
  <show_in_website>1</show_in_website>
@@ -169,7 +170,6 @@
169
  <show_in_website>1</show_in_website>
170
  <show_in_store>0</show_in_store>
171
  <depends><middlename>_new_</middlename></depends>
172
- <validate>validate-length minimum-length-5</validate>
173
  </new_middlename>
174
  <!-- lastname -->
175
  <lastname>
@@ -177,6 +177,7 @@
177
  <label>Last Name</label>
178
  <frontend_type>select</frontend_type>
179
  <frontend_model>bronto_common/adminhtml_system_config_form_field</frontend_model>
 
180
  <source_model>bronto_common/system_config_source_field</source_model>
181
  <show_in_default>1</show_in_default>
182
  <show_in_website>1</show_in_website>
@@ -190,7 +191,6 @@
190
  <show_in_website>1</show_in_website>
191
  <show_in_store>0</show_in_store>
192
  <depends><lastname>_new_</lastname></depends>
193
- <validate>validate-length minimum-length-5</validate>
194
  </new_lastname>
195
  <!-- suffix -->
196
  <suffix>
@@ -198,6 +198,7 @@
198
  <label>Suffix</label>
199
  <frontend_type>select</frontend_type>
200
  <frontend_model>bronto_common/adminhtml_system_config_form_field</frontend_model>
 
201
  <source_model>bronto_common/system_config_source_field</source_model>
202
  <show_in_default>1</show_in_default>
203
  <show_in_website>1</show_in_website>
@@ -211,7 +212,6 @@
211
  <show_in_website>1</show_in_website>
212
  <show_in_store>0</show_in_store>
213
  <depends><suffix>_new_</suffix></depends>
214
- <validate>validate-length minimum-length-5</validate>
215
  </new_suffix>
216
  <!-- gender -->
217
  <gender>
@@ -219,6 +219,7 @@
219
  <label>Gender</label>
220
  <frontend_type>select</frontend_type>
221
  <frontend_model>bronto_common/adminhtml_system_config_form_field</frontend_model>
 
222
  <source_model>bronto_common/system_config_source_field</source_model>
223
  <show_in_default>1</show_in_default>
224
  <show_in_website>1</show_in_website>
@@ -232,7 +233,6 @@
232
  <show_in_website>1</show_in_website>
233
  <show_in_store>0</show_in_store>
234
  <depends><gender>_new_</gender></depends>
235
- <validate>validate-length minimum-length-5</validate>
236
  </new_gender>
237
  <!-- dob -->
238
  <dob>
@@ -240,6 +240,7 @@
240
  <label>Date of Birth</label>
241
  <frontend_type>select</frontend_type>
242
  <frontend_model>bronto_common/adminhtml_system_config_form_field</frontend_model>
 
243
  <source_model>bronto_common/system_config_source_field</source_model>
244
  <show_in_default>1</show_in_default>
245
  <show_in_website>1</show_in_website>
@@ -253,7 +254,6 @@
253
  <show_in_website>1</show_in_website>
254
  <show_in_store>0</show_in_store>
255
  <depends><dob>_new_</dob></depends>
256
- <validate>validate-length minimum-length-5</validate>
257
  </new_dob>
258
  <!-- taxvat -->
259
  <taxvat>
@@ -261,6 +261,7 @@
261
  <label>Tax/VAT Number</label>
262
  <frontend_type>select</frontend_type>
263
  <frontend_model>bronto_common/adminhtml_system_config_form_field</frontend_model>
 
264
  <source_model>bronto_common/system_config_source_field</source_model>
265
  <show_in_default>1</show_in_default>
266
  <show_in_website>1</show_in_website>
@@ -274,7 +275,6 @@
274
  <show_in_website>1</show_in_website>
275
  <show_in_store>0</show_in_store>
276
  <depends><taxvat>_new_</taxvat></depends>
277
- <validate>validate-length minimum-length-5</validate>
278
  </new_taxvat>
279
  <!-- website_id -->
280
  <website_id>
@@ -282,6 +282,7 @@
282
  <label>Website Association</label>
283
  <frontend_type>select</frontend_type>
284
  <frontend_model>bronto_common/adminhtml_system_config_form_field</frontend_model>
 
285
  <source_model>bronto_common/system_config_source_field</source_model>
286
  <show_in_default>1</show_in_default>
287
  <show_in_website>1</show_in_website>
@@ -295,7 +296,6 @@
295
  <show_in_website>1</show_in_website>
296
  <show_in_store>0</show_in_store>
297
  <depends><website_id>_new_</website_id></depends>
298
- <validate>validate-length minimum-length-5</validate>
299
  </new_website_id>
300
  <!-- group_id -->
301
  <group_id>
@@ -303,6 +303,7 @@
303
  <label>Customer Group</label>
304
  <frontend_type>select</frontend_type>
305
  <frontend_model>bronto_common/adminhtml_system_config_form_field</frontend_model>
 
306
  <source_model>bronto_common/system_config_source_field</source_model>
307
  <show_in_default>1</show_in_default>
308
  <show_in_website>1</show_in_website>
@@ -316,7 +317,6 @@
316
  <show_in_website>1</show_in_website>
317
  <show_in_store>0</show_in_store>
318
  <depends><group_id>_new_</group_id></depends>
319
- <validate>validate-length minimum-length-5</validate>
320
  </new_group_id>
321
  <!-- created_at -->
322
  <created_at>
@@ -324,6 +324,7 @@
324
  <label>Created At</label>
325
  <frontend_type>select</frontend_type>
326
  <frontend_model>bronto_common/adminhtml_system_config_form_field</frontend_model>
 
327
  <source_model>bronto_common/system_config_source_field</source_model>
328
  <show_in_default>1</show_in_default>
329
  <show_in_website>1</show_in_website>
@@ -337,7 +338,6 @@
337
  <show_in_website>1</show_in_website>
338
  <show_in_store>0</show_in_store>
339
  <depends><created_at>_new_</created_at></depends>
340
- <validate>validate-length minimum-length-5</validate>
341
  </new_created_at>
342
  <!-- created_in -->
343
  <created_in>
@@ -345,6 +345,7 @@
345
  <label>Created From</label>
346
  <frontend_type>select</frontend_type>
347
  <frontend_model>bronto_common/adminhtml_system_config_form_field</frontend_model>
 
348
  <source_model>bronto_common/system_config_source_field</source_model>
349
  <show_in_default>1</show_in_default>
350
  <show_in_website>1</show_in_website>
@@ -358,7 +359,6 @@
358
  <show_in_website>1</show_in_website>
359
  <show_in_store>0</show_in_store>
360
  <depends><created_in>_new_</created_in></depends>
361
- <validate>validate-length minimum-length-5</validate>
362
  </new_created_in>
363
  </fields>
364
  </attributes>
@@ -377,6 +377,7 @@
377
  <label>Street Address</label>
378
  <frontend_type>select</frontend_type>
379
  <frontend_model>bronto_common/adminhtml_system_config_form_field</frontend_model>
 
380
  <source_model>bronto_common/system_config_source_field</source_model>
381
  <show_in_default>1</show_in_default>
382
  <show_in_website>1</show_in_website>
@@ -390,7 +391,6 @@
390
  <show_in_website>1</show_in_website>
391
  <show_in_store>0</show_in_store>
392
  <depends><street>_new_</street></depends>
393
- <validate>validate-length minimum-length-5</validate>
394
  </new_street>
395
  <!-- city -->
396
  <city>
@@ -398,6 +398,7 @@
398
  <label>City</label>
399
  <frontend_type>select</frontend_type>
400
  <frontend_model>bronto_common/adminhtml_system_config_form_field</frontend_model>
 
401
  <source_model>bronto_common/system_config_source_field</source_model>
402
  <show_in_default>1</show_in_default>
403
  <show_in_website>1</show_in_website>
@@ -411,7 +412,6 @@
411
  <show_in_website>1</show_in_website>
412
  <show_in_store>0</show_in_store>
413
  <depends><city>_new_</city></depends>
414
- <validate>validate-length minimum-length-5</validate>
415
  </new_city>
416
  <!-- region -->
417
  <region>
@@ -419,6 +419,7 @@
419
  <label>State/Province</label>
420
  <frontend_type>select</frontend_type>
421
  <frontend_model>bronto_common/adminhtml_system_config_form_field</frontend_model>
 
422
  <source_model>bronto_common/system_config_source_field</source_model>
423
  <show_in_default>1</show_in_default>
424
  <show_in_website>1</show_in_website>
@@ -432,7 +433,6 @@
432
  <show_in_website>1</show_in_website>
433
  <show_in_store>0</show_in_store>
434
  <depends><region>_new_</region></depends>
435
- <validate>validate-length minimum-length-5</validate>
436
  </new_region>
437
  <!-- postcode -->
438
  <postcode>
@@ -440,6 +440,7 @@
440
  <label>Zip/Postal Code</label>
441
  <frontend_type>select</frontend_type>
442
  <frontend_model>bronto_common/adminhtml_system_config_form_field</frontend_model>
 
443
  <source_model>bronto_common/system_config_source_field</source_model>
444
  <show_in_default>1</show_in_default>
445
  <show_in_website>1</show_in_website>
@@ -453,7 +454,6 @@
453
  <show_in_website>1</show_in_website>
454
  <show_in_store>0</show_in_store>
455
  <depends><postcode>_new_</postcode></depends>
456
- <validate>validate-length minimum-length-5</validate>
457
  </new_postcode>
458
  <!-- country_id -->
459
  <country_id>
@@ -461,6 +461,7 @@
461
  <label>Country</label>
462
  <frontend_type>select</frontend_type>
463
  <frontend_model>bronto_common/adminhtml_system_config_form_field</frontend_model>
 
464
  <source_model>bronto_common/system_config_source_field</source_model>
465
  <show_in_default>1</show_in_default>
466
  <show_in_website>1</show_in_website>
@@ -474,7 +475,6 @@
474
  <show_in_website>1</show_in_website>
475
  <show_in_store>0</show_in_store>
476
  <depends><country_id>_new_</country_id></depends>
477
- <validate>validate-length minimum-length-5</validate>
478
  </new_country_id>
479
  <!-- company -->
480
  <company>
@@ -482,6 +482,7 @@
482
  <label>Company</label>
483
  <frontend_type>select</frontend_type>
484
  <frontend_model>bronto_common/adminhtml_system_config_form_field</frontend_model>
 
485
  <source_model>bronto_common/system_config_source_field</source_model>
486
  <show_in_default>1</show_in_default>
487
  <show_in_website>1</show_in_website>
@@ -495,7 +496,6 @@
495
  <show_in_website>1</show_in_website>
496
  <show_in_store>0</show_in_store>
497
  <depends><company>_new_</company></depends>
498
- <validate>validate-length minimum-length-5</validate>
499
  </new_company>
500
  <!-- telephone -->
501
  <telephone>
@@ -503,6 +503,7 @@
503
  <label>Telephone</label>
504
  <frontend_type>select</frontend_type>
505
  <frontend_model>bronto_common/adminhtml_system_config_form_field</frontend_model>
 
506
  <source_model>bronto_common/system_config_source_field</source_model>
507
  <show_in_default>1</show_in_default>
508
  <show_in_website>1</show_in_website>
@@ -516,7 +517,6 @@
516
  <show_in_website>1</show_in_website>
517
  <show_in_store>0</show_in_store>
518
  <depends><telephone>_new_</telephone></depends>
519
- <validate>validate-length minimum-length-5</validate>
520
  </new_telephone>
521
  <!-- fax -->
522
  <fax>
@@ -524,6 +524,7 @@
524
  <label>Fax</label>
525
  <frontend_type>select</frontend_type>
526
  <frontend_model>bronto_common/adminhtml_system_config_form_field</frontend_model>
 
527
  <source_model>bronto_common/system_config_source_field</source_model>
528
  <show_in_default>1</show_in_default>
529
  <show_in_website>1</show_in_website>
@@ -537,7 +538,6 @@
537
  <show_in_website>1</show_in_website>
538
  <show_in_store>0</show_in_store>
539
  <depends><fax>_new_</fax></depends>
540
- <validate>validate-length minimum-length-5</validate>
541
  </new_fax>
542
  </fields>
543
  </address_attributes>
114
  <label>Prefix</label>
115
  <frontend_type>select</frontend_type>
116
  <frontend_model>bronto_common/adminhtml_system_config_form_field</frontend_model>
117
+ <backend_model>bronto_customer/system_config_backend_brontofield</backend_model>
118
  <source_model>bronto_common/system_config_source_field</source_model>
119
  <show_in_default>1</show_in_default>
120
  <show_in_website>1</show_in_website>
128
  <show_in_website>1</show_in_website>
129
  <show_in_store>0</show_in_store>
130
  <depends><prefix>_new_</prefix></depends>
 
131
  </new_prefix>
132
  <!-- firstname -->
133
  <firstname>
135
  <label>First Name</label>
136
  <frontend_type>select</frontend_type>
137
  <frontend_model>bronto_common/adminhtml_system_config_form_field</frontend_model>
138
+ <backend_model>bronto_customer/system_config_backend_brontofield</backend_model>
139
  <source_model>bronto_common/system_config_source_field</source_model>
140
  <show_in_default>1</show_in_default>
141
  <show_in_website>1</show_in_website>
149
  <show_in_website>1</show_in_website>
150
  <show_in_store>0</show_in_store>
151
  <depends><firstname>_new_</firstname></depends>
 
152
  </new_firstname>
153
  <!-- middlename -->
154
  <middlename>
156
  <label>Middle Name/Initial</label>
157
  <frontend_type>select</frontend_type>
158
  <frontend_model>bronto_common/adminhtml_system_config_form_field</frontend_model>
159
+ <backend_model>bronto_customer/system_config_backend_brontofield</backend_model>
160
  <source_model>bronto_common/system_config_source_field</source_model>
161
  <show_in_default>1</show_in_default>
162
  <show_in_website>1</show_in_website>
170
  <show_in_website>1</show_in_website>
171
  <show_in_store>0</show_in_store>
172
  <depends><middlename>_new_</middlename></depends>
 
173
  </new_middlename>
174
  <!-- lastname -->
175
  <lastname>
177
  <label>Last Name</label>
178
  <frontend_type>select</frontend_type>
179
  <frontend_model>bronto_common/adminhtml_system_config_form_field</frontend_model>
180
+ <backend_model>bronto_customer/system_config_backend_brontofield</backend_model>
181
  <source_model>bronto_common/system_config_source_field</source_model>
182
  <show_in_default>1</show_in_default>
183
  <show_in_website>1</show_in_website>
191
  <show_in_website>1</show_in_website>
192
  <show_in_store>0</show_in_store>
193
  <depends><lastname>_new_</lastname></depends>
 
194
  </new_lastname>
195
  <!-- suffix -->
196
  <suffix>
198
  <label>Suffix</label>
199
  <frontend_type>select</frontend_type>
200
  <frontend_model>bronto_common/adminhtml_system_config_form_field</frontend_model>
201
+ <backend_model>bronto_customer/system_config_backend_brontofield</backend_model>
202
  <source_model>bronto_common/system_config_source_field</source_model>
203
  <show_in_default>1</show_in_default>
204
  <show_in_website>1</show_in_website>
212
  <show_in_website>1</show_in_website>
213
  <show_in_store>0</show_in_store>
214
  <depends><suffix>_new_</suffix></depends>
 
215
  </new_suffix>
216
  <!-- gender -->
217
  <gender>
219
  <label>Gender</label>
220
  <frontend_type>select</frontend_type>
221
  <frontend_model>bronto_common/adminhtml_system_config_form_field</frontend_model>
222
+ <backend_model>bronto_customer/system_config_backend_brontofield</backend_model>
223
  <source_model>bronto_common/system_config_source_field</source_model>
224
  <show_in_default>1</show_in_default>
225
  <show_in_website>1</show_in_website>
233
  <show_in_website>1</show_in_website>
234
  <show_in_store>0</show_in_store>
235
  <depends><gender>_new_</gender></depends>
 
236
  </new_gender>
237
  <!-- dob -->
238
  <dob>
240
  <label>Date of Birth</label>
241
  <frontend_type>select</frontend_type>
242
  <frontend_model>bronto_common/adminhtml_system_config_form_field</frontend_model>
243
+ <backend_model>bronto_customer/system_config_backend_brontofield</backend_model>
244
  <source_model>bronto_common/system_config_source_field</source_model>
245
  <show_in_default>1</show_in_default>
246
  <show_in_website>1</show_in_website>
254
  <show_in_website>1</show_in_website>
255
  <show_in_store>0</show_in_store>
256
  <depends><dob>_new_</dob></depends>
 
257
  </new_dob>
258
  <!-- taxvat -->
259
  <taxvat>
261
  <label>Tax/VAT Number</label>
262
  <frontend_type>select</frontend_type>
263
  <frontend_model>bronto_common/adminhtml_system_config_form_field</frontend_model>
264
+ <backend_model>bronto_customer/system_config_backend_brontofield</backend_model>
265
  <source_model>bronto_common/system_config_source_field</source_model>
266
  <show_in_default>1</show_in_default>
267
  <show_in_website>1</show_in_website>
275
  <show_in_website>1</show_in_website>
276
  <show_in_store>0</show_in_store>
277
  <depends><taxvat>_new_</taxvat></depends>
 
278
  </new_taxvat>
279
  <!-- website_id -->
280
  <website_id>
282
  <label>Website Association</label>
283
  <frontend_type>select</frontend_type>
284
  <frontend_model>bronto_common/adminhtml_system_config_form_field</frontend_model>
285
+ <backend_model>bronto_customer/system_config_backend_brontofield</backend_model>
286
  <source_model>bronto_common/system_config_source_field</source_model>
287
  <show_in_default>1</show_in_default>
288
  <show_in_website>1</show_in_website>
296
  <show_in_website>1</show_in_website>
297
  <show_in_store>0</show_in_store>
298
  <depends><website_id>_new_</website_id></depends>
 
299
  </new_website_id>
300
  <!-- group_id -->
301
  <group_id>
303
  <label>Customer Group</label>
304
  <frontend_type>select</frontend_type>
305
  <frontend_model>bronto_common/adminhtml_system_config_form_field</frontend_model>
306
+ <backend_model>bronto_customer/system_config_backend_brontofield</backend_model>
307
  <source_model>bronto_common/system_config_source_field</source_model>
308
  <show_in_default>1</show_in_default>
309
  <show_in_website>1</show_in_website>
317
  <show_in_website>1</show_in_website>
318
  <show_in_store>0</show_in_store>
319
  <depends><group_id>_new_</group_id></depends>
 
320
  </new_group_id>
321
  <!-- created_at -->
322
  <created_at>
324
  <label>Created At</label>
325
  <frontend_type>select</frontend_type>
326
  <frontend_model>bronto_common/adminhtml_system_config_form_field</frontend_model>
327
+ <backend_model>bronto_customer/system_config_backend_brontofield</backend_model>
328
  <source_model>bronto_common/system_config_source_field</source_model>
329
  <show_in_default>1</show_in_default>
330
  <show_in_website>1</show_in_website>
338
  <show_in_website>1</show_in_website>
339
  <show_in_store>0</show_in_store>
340
  <depends><created_at>_new_</created_at></depends>
 
341
  </new_created_at>
342
  <!-- created_in -->
343
  <created_in>
345
  <label>Created From</label>
346
  <frontend_type>select</frontend_type>
347
  <frontend_model>bronto_common/adminhtml_system_config_form_field</frontend_model>
348
+ <backend_model>bronto_customer/system_config_backend_brontofield</backend_model>
349
  <source_model>bronto_common/system_config_source_field</source_model>
350
  <show_in_default>1</show_in_default>
351
  <show_in_website>1</show_in_website>
359
  <show_in_website>1</show_in_website>
360
  <show_in_store>0</show_in_store>
361
  <depends><created_in>_new_</created_in></depends>
 
362
  </new_created_in>
363
  </fields>
364
  </attributes>
377
  <label>Street Address</label>
378
  <frontend_type>select</frontend_type>
379
  <frontend_model>bronto_common/adminhtml_system_config_form_field</frontend_model>
380
+ <backend_model>bronto_customer/system_config_backend_brontofield</backend_model>
381
  <source_model>bronto_common/system_config_source_field</source_model>
382
  <show_in_default>1</show_in_default>
383
  <show_in_website>1</show_in_website>
391
  <show_in_website>1</show_in_website>
392
  <show_in_store>0</show_in_store>
393
  <depends><street>_new_</street></depends>
 
394
  </new_street>
395
  <!-- city -->
396
  <city>
398
  <label>City</label>
399
  <frontend_type>select</frontend_type>
400
  <frontend_model>bronto_common/adminhtml_system_config_form_field</frontend_model>
401
+ <backend_model>bronto_customer/system_config_backend_brontofield</backend_model>
402
  <source_model>bronto_common/system_config_source_field</source_model>
403
  <show_in_default>1</show_in_default>
404
  <show_in_website>1</show_in_website>
412
  <show_in_website>1</show_in_website>
413
  <show_in_store>0</show_in_store>
414
  <depends><city>_new_</city></depends>
 
415
  </new_city>
416
  <!-- region -->
417
  <region>
419
  <label>State/Province</label>
420
  <frontend_type>select</frontend_type>
421
  <frontend_model>bronto_common/adminhtml_system_config_form_field</frontend_model>
422
+ <backend_model>bronto_customer/system_config_backend_brontofield</backend_model>
423
  <source_model>bronto_common/system_config_source_field</source_model>
424
  <show_in_default>1</show_in_default>
425
  <show_in_website>1</show_in_website>
433
  <show_in_website>1</show_in_website>
434
  <show_in_store>0</show_in_store>
435
  <depends><region>_new_</region></depends>
 
436
  </new_region>
437
  <!-- postcode -->
438
  <postcode>
440
  <label>Zip/Postal Code</label>
441
  <frontend_type>select</frontend_type>
442
  <frontend_model>bronto_common/adminhtml_system_config_form_field</frontend_model>
443
+ <backend_model>bronto_customer/system_config_backend_brontofield</backend_model>
444
  <source_model>bronto_common/system_config_source_field</source_model>
445
  <show_in_default>1</show_in_default>
446
  <show_in_website>1</show_in_website>
454
  <show_in_website>1</show_in_website>
455
  <show_in_store>0</show_in_store>
456
  <depends><postcode>_new_</postcode></depends>
 
457
  </new_postcode>
458
  <!-- country_id -->
459
  <country_id>
461
  <label>Country</label>
462
  <frontend_type>select</frontend_type>
463
  <frontend_model>bronto_common/adminhtml_system_config_form_field</frontend_model>
464
+ <backend_model>bronto_customer/system_config_backend_brontofield</backend_model>
465
  <source_model>bronto_common/system_config_source_field</source_model>
466
  <show_in_default>1</show_in_default>
467
  <show_in_website>1</show_in_website>
475
  <show_in_website>1</show_in_website>
476
  <show_in_store>0</show_in_store>
477
  <depends><country_id>_new_</country_id></depends>
 
478
  </new_country_id>
479
  <!-- company -->
480
  <company>
482
  <label>Company</label>
483
  <frontend_type>select</frontend_type>
484
  <frontend_model>bronto_common/adminhtml_system_config_form_field</frontend_model>
485
+ <backend_model>bronto_customer/system_config_backend_brontofield</backend_model>
486
  <source_model>bronto_common/system_config_source_field</source_model>
487
  <show_in_default>1</show_in_default>
488
  <show_in_website>1</show_in_website>
496
  <show_in_website>1</show_in_website>
497
  <show_in_store>0</show_in_store>
498
  <depends><company>_new_</company></depends>
 
499
  </new_company>
500
  <!-- telephone -->
501
  <telephone>
503
  <label>Telephone</label>
504
  <frontend_type>select</frontend_type>
505
  <frontend_model>bronto_common/adminhtml_system_config_form_field</frontend_model>
506
+ <backend_model>bronto_customer/system_config_backend_brontofield</backend_model>
507
  <source_model>bronto_common/system_config_source_field</source_model>
508
  <show_in_default>1</show_in_default>
509
  <show_in_website>1</show_in_website>
517
  <show_in_website>1</show_in_website>
518
  <show_in_store>0</show_in_store>
519
  <depends><telephone>_new_</telephone></depends>
 
520
  </new_telephone>
521
  <!-- fax -->
522
  <fax>
524
  <label>Fax</label>
525
  <frontend_type>select</frontend_type>
526
  <frontend_model>bronto_common/adminhtml_system_config_form_field</frontend_model>
527
+ <backend_model>bronto_customer/system_config_backend_brontofield</backend_model>
528
  <source_model>bronto_common/system_config_source_field</source_model>
529
  <show_in_default>1</show_in_default>
530
  <show_in_website>1</show_in_website>
538
  <show_in_website>1</show_in_website>
539
  <show_in_store>0</show_in_store>
540
  <depends><fax>_new_</fax></depends>
 
541
  </new_fax>
542
  </fields>
543
  </address_attributes>
app/code/community/Bronto/Customer/sql/bronto_customer_setup/mysql4-upgrade-1.0.0-1.0.1.php CHANGED
@@ -4,7 +4,7 @@
4
  */
5
 
6
  $installer = $this;
7
- /* @var $installer Mage_Core_Model_Resource_Setup */
8
 
9
  $installer->startSetup();
10
 
4
  */
5
 
6
  $installer = $this;
7
+ /* @var $installer Mage_Core_Model_Mysql4_Setup */
8
 
9
  $installer->startSetup();
10
 
app/code/community/Bronto/Customer/sql/bronto_customer_setup/mysql4-upgrade-1.0.1-1.0.2.php CHANGED
@@ -4,7 +4,7 @@
4
  */
5
 
6
  $installer = $this;
7
- /* @var $installer Mage_Core_Model_Resource_Setup */
8
 
9
  $installer->startSetup();
10
 
4
  */
5
 
6
  $installer = $this;
7
+ /* @var $installer Mage_Core_Model_Mysql4_Setup */
8
 
9
  $installer->startSetup();
10
 
app/code/community/Bronto/Email/Block/Adminhtml/System/Email/Template/Grid.php CHANGED
@@ -19,12 +19,13 @@ class Bronto_Email_Block_Adminhtml_System_Email_Template_Grid extends Mage_Admin
19
  }
20
 
21
  // Change how table names and SQL aliases are mapped resource
22
- // to account for version 1.9 differences
23
  $resource = Mage::getSingleton('core/resource');
24
  $tableName = $resource->getTableName('core/store');
25
  $mainTable = $resource->getTableName('core/email_template');
26
  $version = Mage::getVersionInfo();
27
- if (1 == $version['major'] && 9 != $version['minor']) {
 
28
  $mainTable = 'main_table';
29
  }
30
  $collection->getSelect()
19
  }
20
 
21
  // Change how table names and SQL aliases are mapped resource
22
+ // to account for version 1.9 and 1.10 differences
23
  $resource = Mage::getSingleton('core/resource');
24
  $tableName = $resource->getTableName('core/store');
25
  $mainTable = $resource->getTableName('core/email_template');
26
  $version = Mage::getVersionInfo();
27
+
28
+ if (1 == $version['major'] && 9 != $version['minor'] && 10 != $version['minor'] && 11 != $version['minor']) {
29
  $mainTable = 'main_table';
30
  }
31
  $collection->getSelect()
app/code/community/Bronto/Newsletter/Block/Adminhtml/System/Config/Cron.php CHANGED
@@ -8,7 +8,7 @@
8
  class Bronto_Newsletter_Block_Adminhtml_System_Config_Cron extends Bronto_Common_Block_Adminhtml_System_Config_Cron
9
  {
10
  protected $_jobCode = 'bronto_newsletter_import';
11
- protected $_hasProgressBar = false;
12
 
13
  /**
14
  * @return Bronto_Order_Block_Adminhtml_System_Config_Cron
@@ -26,8 +26,7 @@ class Bronto_Newsletter_Block_Adminhtml_System_Config_Cron extends Bronto_Common
26
  */
27
  protected function getProgressBarTotal()
28
  {
29
- return $this->getOrderResourceCollection()
30
- ->addStoreFilter($storeId)
31
  ->getSize()
32
  ;
33
  }
@@ -37,30 +36,24 @@ class Bronto_Newsletter_Block_Adminhtml_System_Config_Cron extends Bronto_Common
37
  */
38
  protected function getProgressBarPending()
39
  {
40
- return $this->getOrderResourceCollection()
41
  ->addBrontoNotImportedFilter()
42
  ->getSize()
43
  ;
44
  }
45
 
46
  /**
47
- * @return Bronto_Order_Model_Resource_Order_Collection
48
  */
49
- protected function getOrderResourceCollection()
50
  {
51
- $collection = Mage::getModel('bronto_order/resource_order_collection');
52
-
53
- if ($storeCode = Mage::app()->getRequest()->getParam('store')) {
54
- $store = Mage::app()->getStore($storeCode);
55
- $collection->addStoreFilter($store->getId());
56
- } else if ($websiteCode = Mage::app()->getRequest()->getParam('website')){
57
- $website = Mage::app()->getWebsite($websiteCode);
58
- $collection->addStoreFilter($website->getStoreids());
59
- } else if ($groupCode = Mage::app()->getRequest()->getParam('group')){
60
- $website = Mage::app()->getGroup($groupCode)->getWebsite();
61
- $collection->addStoreFilter($website->getStoreids());
62
  }
63
-
64
  return $collection;
65
  }
66
  }
8
  class Bronto_Newsletter_Block_Adminhtml_System_Config_Cron extends Bronto_Common_Block_Adminhtml_System_Config_Cron
9
  {
10
  protected $_jobCode = 'bronto_newsletter_import';
11
+ protected $_hasProgressBar = true;
12
 
13
  /**
14
  * @return Bronto_Order_Block_Adminhtml_System_Config_Cron
26
  */
27
  protected function getProgressBarTotal()
28
  {
29
+ return $this->getNewsletterResourceCollection()
 
30
  ->getSize()
31
  ;
32
  }
36
  */
37
  protected function getProgressBarPending()
38
  {
39
+ return $this->getNewsletterResourceCollection()
40
  ->addBrontoNotImportedFilter()
41
  ->getSize()
42
  ;
43
  }
44
 
45
  /**
46
+ * @return Bronto_Newsletter_Model_Mysql4_Queue_Collection
47
  */
48
+ protected function getNewsletterResourceCollection()
49
  {
50
+ $collection = Mage::getModel('bronto_newsletter/queue')->getCollection();
51
+ $storeIds = Mage::helper('bronto_customer')->getStoreIds();
52
+
53
+ if ($storeIds) {
54
+ $collection->addStoreFilter($storeIds);
 
 
 
 
 
 
55
  }
56
+
57
  return $collection;
58
  }
59
  }
app/code/community/Bronto/Newsletter/Block/Checkout/Onepage/Newsletter.php CHANGED
@@ -46,6 +46,15 @@ class Bronto_Newsletter_Block_Checkout_Onepage_Newsletter extends Mage_Checkout_
46
  {
47
  return Mage::helper('bronto_newsletter')->isEnabledForRegisterCheckout();
48
  }
 
 
 
 
 
 
 
 
 
49
 
50
  /**
51
  * @return bool
@@ -62,4 +71,47 @@ class Bronto_Newsletter_Block_Checkout_Onepage_Newsletter extends Mage_Checkout_
62
  {
63
  return Mage::helper('bronto_newsletter')->getCheckboxLabelText();
64
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
65
  }
46
  {
47
  return Mage::helper('bronto_newsletter')->isEnabledForRegisterCheckout();
48
  }
49
+
50
+ /**
51
+ * @return bool
52
+ */
53
+ public function isEnabledForLoggedinCheckout()
54
+ {
55
+ // TODO: This can be replaced when fourth case is added
56
+ return true;
57
+ }
58
 
59
  /**
60
  * @return bool
71
  {
72
  return Mage::helper('bronto_newsletter')->getCheckboxLabelText();
73
  }
74
+
75
+ /**
76
+ *
77
+ * @param string $method
78
+ * @return string
79
+ */
80
+ public function getJsCheckedCode($method)
81
+ {
82
+ $js = "";
83
+ $methodName = 'isEnabledFor' . ucfirst($method) . 'Checkout';
84
+
85
+ // Default Values
86
+ $action = 'hide';
87
+ $checked = 'false';
88
+ $value = 'null';
89
+
90
+ // If function exists, use it, otherwise we hide and disable values
91
+ if (method_exists($this, $methodName)) {
92
+ if ($this->$methodName()) {
93
+ $action = 'show';
94
+ if ($this->isSubscribed() || $this->isEnabledCheckedByDefault()) {
95
+ $checked = 'true';
96
+ $value = '1';
97
+ }
98
+ }
99
+ }
100
+
101
+ // If user is subscribed and enabled if already subscribed is not allowed,
102
+ // Hide it, but set the values to true
103
+ if ($this->isSubscribed() && !$this->isEnabledIfAlreadySubscribed()) {
104
+ $action = 'hide';
105
+ $checked = 'true';
106
+ $value = '1';
107
+ }
108
+
109
+ // Create JS
110
+ $js.= "Element.{$action}('register-customer-newsletter');\r\n";
111
+ $js.= "$('billing:is_subscribed_box').checked = {$checked};\r\n";
112
+ $js.= "$('billing:is_subscribed').value = {$value};\r\n";
113
+ $js.= "$('billing:is_subscribed').value = {$value};\r\n";
114
+
115
+ return $js;
116
+ }
117
  }
app/code/community/Bronto/Newsletter/Helper/Contact.php CHANGED
@@ -18,61 +18,6 @@ class Bronto_Newsletter_Helper_Contact extends Bronto_Common_Helper_Contact
18
  */
19
  const XML_PATH_LISTS = 'bronto_newsletter/contacts/lists';
20
 
21
- /**
22
- * @param string $email
23
- * @param string $customSource
24
- * @return Bronto_Api_Contact_Row
25
- */
26
- public function getContactByEmail($email, $customSource = 'bronto_newsletter', $store = null)
27
- {
28
- if ($contact = parent::getContactByEmail($email, $customSource, $store)) {
29
- if ($this->getUpdateStatus()) {
30
- // We want to use the Newsletter status
31
- $contact = $this->setStatusFromNewsletter($contact);
32
- }
33
-
34
- $contact = $this->_addContactToLists($contact, $this->getListIds($store));
35
- }
36
-
37
- return $contact;
38
- }
39
-
40
- /**
41
- * @param Bronto_Api_Contact_Row $contact
42
- * @param Mage_Newsletter_Model_Subscriber $subscriber
43
- * @return Bronto_Api_Contact_Row
44
- */
45
- public function setStatusFromNewsletter(Bronto_Api_Contact_Row $contact, Mage_Newsletter_Model_Subscriber $subscriber = null)
46
- {
47
- if (!is_object($subscriber) || !($subscriber instanceOf Mage_Newsletter_Model_Subscriber)) {
48
- /* @var $subscriber Mage_Newsletter_Model_Subscriber */
49
- $subscriber = Mage::getModel('newsletter/subscriber')->loadByEmail($contact->email);
50
- }
51
-
52
- switch ($subscriber->getStatus()) {
53
- case Mage_Newsletter_Model_Subscriber::STATUS_SUBSCRIBED:
54
- $contact->status = Bronto_Api_Contact::STATUS_ONBOARDING;
55
- break;
56
- case Mage_Newsletter_Model_Subscriber::STATUS_UNSUBSCRIBED:
57
- $contact->status = Bronto_Api_Contact::STATUS_UNSUBSCRIBED;
58
- break;
59
- case Mage_Newsletter_Model_Subscriber::STATUS_NOT_ACTIVE:
60
- default:
61
- $contact->status = Bronto_Api_Contact::STATUS_TRANSACTIONAL;
62
- break;
63
- }
64
-
65
- // Special check for old Magento versions
66
- if (defined('Mage_Newsletter_Model_Subscriber::STATUS_UNCONFIRMED')) {
67
- if (Mage_Newsletter_Model_Subscriber::STATUS_UNCONFIRMED == $subscriber->getStatus()) {
68
- $contact->status = Bronto_Api_Contact::STATUS_UNCONFIRMED;
69
- }
70
- }
71
-
72
- $this->writeInfo(" Setting Contact ({$contact->email}) status to: {$contact->status}");
73
- return $contact;
74
- }
75
-
76
  /**
77
  * @return bool
78
  */
@@ -97,24 +42,25 @@ class Bronto_Newsletter_Helper_Contact extends Bronto_Common_Helper_Contact
97
 
98
  return $listIds;
99
  }
100
-
101
  /**
102
- * @param Bronto_Api_Contact_Row $contact
103
- * @param array $listIds
104
- * @return Bronto_Api_Contact_Row
105
  */
106
- protected function _addContactToLists(Bronto_Api_Contact_Row $contact, array $listIds = array())
107
  {
108
- if (empty($listIds)) {
109
- return $contact;
110
- }
111
-
112
- foreach ($listIds as $listId) {
113
- $this->writeInfo(" Adding Contact to list: {$listId}");
114
- $contact->addToList($listId);
 
115
  }
116
-
117
- return $contact;
118
  }
119
 
120
  /**
@@ -126,4 +72,30 @@ class Bronto_Newsletter_Helper_Contact extends Bronto_Common_Helper_Contact
126
  {
127
  return 'Bronto_Newsletter';
128
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
129
  }
18
  */
19
  const XML_PATH_LISTS = 'bronto_newsletter/contacts/lists';
20
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
  /**
22
  * @return bool
23
  */
42
 
43
  return $listIds;
44
  }
45
+
46
  /**
47
+ * Get the list object from list id
48
+ * @param int $listId
49
+ * @return boolean|Bronto_Api_List_Row
50
  */
51
+ public function getListData($listId)
52
  {
53
+ if ($api = $this->getApi()) {
54
+ /* @var $listObject Bronto_Api_List */
55
+ $listObject = $api->getListObject();
56
+ foreach ($listObject->readAll()->iterate() as $list /* @var $list Bronto_Api_List_Row */) {
57
+ if ($list->id == $listId) {
58
+ return $list;
59
+ }
60
+ }
61
  }
62
+
63
+ return false;
64
  }
65
 
66
  /**
72
  {
73
  return 'Bronto_Newsletter';
74
  }
75
+
76
+ /**
77
+ * Convert Magento Newsletter Subscriber Status to Bronto API Contact Status
78
+ * @param Mage_Newsletter_Model_Subscriber $subscriber
79
+ * @return boolean
80
+ */
81
+ public function getQueueStatus(Mage_Newsletter_Model_Subscriber $subscriber)
82
+ {
83
+ // Set correct status based on subscriber status
84
+ switch ($subscriber->getStatus()) {
85
+ case Mage_Newsletter_Model_Subscriber::STATUS_SUBSCRIBED:
86
+ $status = Bronto_Api_Contact::STATUS_ONBOARDING;
87
+ break;
88
+
89
+ case Mage_Newsletter_Model_Subscriber::STATUS_UNSUBSCRIBED:
90
+ $status = Bronto_Api_Contact::STATUS_UNSUBSCRIBED;
91
+ break;
92
+
93
+ case Mage_Newsletter_Model_Subscriber::STATUS_NOT_ACTIVE:
94
+ default:
95
+ $status = Bronto_Api_Contact::STATUS_TRANSACTIONAL;
96
+ break;
97
+ }
98
+
99
+ return $status;
100
+ }
101
  }
app/code/community/Bronto/Newsletter/Model/Mysql4/Queue/Collection.php CHANGED
@@ -36,4 +36,54 @@ class Bronto_Newsletter_Model_Mysql4_Queue_Collection
36
  parent::_construct();
37
  $this->_init('bronto_newsletter/queue');
38
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
39
  }
36
  parent::_construct();
37
  $this->_init('bronto_newsletter/queue');
38
  }
39
+
40
+
41
+
42
+ /**
43
+ * @return Bronto_Newsletter_Model_Mysql4_Queue_Collection
44
+ */
45
+ public function addBrontoImportedFilter()
46
+ {
47
+ $this->addFieldToFilter('imported', array('eq' => '1'));
48
+ return $this;
49
+ }
50
+
51
+ /**
52
+ * @return Bronto_Newsletter_Model_Mysql4_Queue_Collection
53
+ */
54
+ public function addBrontoNotImportedFilter()
55
+ {
56
+ $this->addFieldToFilter('imported', array('eq' => '0'));
57
+ return $this;
58
+ }
59
+
60
+ /**
61
+ * @param mixed $storeIds (null, int|string, array, array may contain null)
62
+ * @return Bronto_Newsletter_Model_Mysql4_Queue_Collection
63
+ */
64
+ public function addStoreFilter($storeIds)
65
+ {
66
+ $nullCheck = false;
67
+
68
+ if (!is_array($storeIds)) {
69
+ $storeIds = array($storeIds);
70
+ }
71
+
72
+ $storeIds = array_unique($storeIds);
73
+
74
+ if ($index = array_search(null, $storeIds)) {
75
+ unset($storeIds[$index]);
76
+ $nullCheck = true;
77
+ }
78
+
79
+ $storeIds[0] = ($storeIds[0] == '') ? 0 : $storeIds[0];
80
+
81
+ if ($nullCheck) {
82
+ $this->getSelect()->where('store IN(?) OR store IS NULL', $storeIds);
83
+ } else {
84
+ $this->getSelect()->where('store IN(?)', $storeIds);
85
+ }
86
+
87
+ return $this;
88
+ }
89
  }
app/code/community/Bronto/Newsletter/Model/Observer.php CHANGED
@@ -10,7 +10,7 @@ class Bronto_Newsletter_Model_Observer extends Mage_Core_Model_Abstract
10
  const NOTICE_IDENTIFER = 'bronto_newsletter';
11
  const BOX_UNCHECKED = 0;
12
  const BOX_CHECKED = 1;
13
- const BOX_NOT_SHOWN = 2;
14
 
15
  /**
16
  * @param Varien_Event_Observer $observer
@@ -27,7 +27,7 @@ class Bronto_Newsletter_Model_Observer extends Mage_Core_Model_Abstract
27
  return;
28
  }
29
  }
30
-
31
  /**
32
  * This event fires when customer continues past the Billing Info step
33
  * on the onepage checkout. We set a flag here in the session to avoid
@@ -40,76 +40,124 @@ class Bronto_Newsletter_Model_Observer extends Mage_Core_Model_Abstract
40
  if (!Mage::helper('bronto_newsletter')->isEnabled()) {
41
  return;
42
  }
43
-
44
  $params = Mage::app()->getRequest()->getParams();
45
- if (isset($params['billing']['is_subscribed'])) {
 
 
 
 
 
46
  $isSubscribed = (int) $params['billing']['is_subscribed'];
47
  Mage::getSingleton('checkout/session')->setIsSubscribed($isSubscribed);
48
  } else {
49
- Mage::getSingleton('checkout/session')->setIsSubscribed(self::BOX_UNCHECKED);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
50
  }
51
  }
52
 
53
  /**
 
54
  * @param Varien_Event_Observer $observer
 
55
  */
56
  public function handleSubscriptionAtCheckout(Varien_Event_Observer $observer)
57
  {
58
  if (!Mage::helper('bronto_newsletter')->isEnabled()) {
59
  return;
60
  }
61
-
62
  try {
63
  // Get e-mail address we are working with
64
  $email = $observer->getEvent()->getOrder()->getData('customer_email');
 
65
  if (empty($email)) {
66
  Mage::helper('bronto_newsletter')->writeError('No customer_email was provided.');
67
  return false;
68
  }
69
 
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
- // Make Custmoer Transactional
81
  $this->_makeTransactional($subscriber, $email);
82
  }
83
  break;
84
- case self::BOX_CHECKED:
85
- // Subscribe the Customer
86
- if (!$subscriber || !$subscriber->isSubscribed()) {
87
- return $subscriber->subscribe($email);
88
  }
89
  break;
90
- case self::BOX_NOT_SHOWN:
91
- // Just save the Customer
92
- $subscriber->setStatus(Mage_Newsletter_Model_Subscriber::STATUS_NOT_ACTIVE);
93
- $subscriber->save();
94
  break;
95
  }
96
-
97
  } catch (Exception $e) {
98
  Mage::helper('bronto_newsletter')->writeError($e);
99
  }
 
 
100
  }
101
 
102
- private function _makeTransactional($subscriber, $email)
 
 
 
 
 
 
 
103
  {
104
- // Check For Existing Contact from Bronto
105
- try {
106
- $contactHelper = Mage::helper('bronto_common/contact');
107
- $contact = $contactHelper->getContactByEmail($subscriber->getSubscriberEmail(), null, Mage::app()->getStore()->getId());
108
- } catch (Exception $e) {
109
- Mage::helper('bronto_newsletter')->writeError($e);
110
  return false;
111
  }
112
 
 
113
  $ownerId = Mage::getModel('customer/customer')
114
  ->setWebsiteId(Mage::app()->getStore()->getWebsiteId())
115
  ->loadByEmail($email)
@@ -119,6 +167,7 @@ class Bronto_Newsletter_Model_Observer extends Mage_Core_Model_Abstract
119
  $ownerId = Mage::getSingleton('customer/session')->getId();
120
  }
121
 
 
122
  $subscriber->setCustomerId($ownerId);
123
  $subscriber->setSubscriberEmail($email);
124
  $subscriber->setStoreId(Mage::app()->getStore()->getId());
@@ -129,8 +178,8 @@ class Bronto_Newsletter_Model_Observer extends Mage_Core_Model_Abstract
129
  }
130
 
131
  $subscriber->save();
132
-
133
- $this->_saveToQueue($subscriber, Mage::app()->getStore()->getId());
134
  }
135
 
136
  /**
@@ -143,15 +192,16 @@ class Bronto_Newsletter_Model_Observer extends Mage_Core_Model_Abstract
143
  }
144
 
145
  // Insert contact email into queuing table. Cron will
146
- // then issue an update to Bronto on its next run.
147
  try {
148
  /* @var $subscriber Mage_Newsletter_Model_Subscriber */
149
- if ($subscriber = $observer->getEvent()->getSubscriber()) {
150
- $email = $subscriber->getEmail();
151
- if (!empty($email)) {
152
- $this->_saveToQueue($subscriber, Mage::app()->getStore()->getId());
153
- }
154
  }
 
 
 
155
  } catch (Exception $e) {
156
  Mage::helper('bronto_newsletter')->writeError($e);
157
  }
@@ -161,54 +211,33 @@ class Bronto_Newsletter_Model_Observer extends Mage_Core_Model_Abstract
161
  * Add Subscriber to Bronto Newsletter Opt-in queue
162
  * @param Mage_Newsletter_Model_Subscriber $subscriber
163
  * @param int $storeId
164
- * @param string $status
165
  * @return void
166
  */
167
  private function _saveToQueue($subscriber, $storeId)
168
  {
 
 
 
 
 
 
 
169
  // Get Calculated Status
170
- $status = $this->_getQueueStatus($subscriber);
171
 
172
  /* @var $contactQueue Bronto_Newsletter_Model_Queue */
173
- $contactQueue = Mage::getModel('bronto_newsletter/queue');
174
-
175
- $contact = $contactQueue->getContactRow($subscriber->getId(), $storeId)
176
- ->setSubscriberEmail($subscriber->getEmail())
177
- ->setStatus($status)
178
- ->setMessagePreference('html')
179
- ->setSource('api')
180
- ->setImported(0)
181
- ->save();
182
- }
183
-
184
- /**
185
- * Determine Status to use when sending subscriber to opt-in queue
186
- * @param Mage_Newsletter_Model_Subscriber $subscriber
187
- * @param int $storeId
188
- * @return boolean
189
- */
190
- private function _getQueueStatus($subscriber)
191
- {
192
- // Set correct status based on subscriber status
193
- switch ($subscriber->getStatus()) {
194
- case Mage_Newsletter_Model_Subscriber::STATUS_SUBSCRIBED:
195
- $status = Bronto_Api_Contact::STATUS_ONBOARDING;
196
- break;
197
-
198
- case Mage_Newsletter_Model_Subscriber::STATUS_UNSUBSCRIBED:
199
- $status = Bronto_Api_Contact::STATUS_UNSUBSCRIBED;
200
- break;
201
-
202
- case Mage_Newsletter_Model_Subscriber::STATUS_NOT_ACTIVE:
203
- $status = Bronto_Api_Contact::STATUS_TRANSACTIONAL;
204
- break;
205
-
206
- default:
207
- $status = false;
208
- break;
209
- }
210
-
211
- return $status;
212
  }
213
 
214
  /**
@@ -239,8 +268,7 @@ class Bronto_Newsletter_Model_Observer extends Mage_Core_Model_Abstract
239
  return false;
240
  }
241
 
242
- $helper = Mage::helper('bronto_newsletter/contact');
243
- $contactHelper = Mage::helper('bronto_common/contact');
244
 
245
  $lists = $helper->getListIds($storeId);
246
 
@@ -254,16 +282,23 @@ class Bronto_Newsletter_Model_Observer extends Mage_Core_Model_Abstract
254
  $subscribers->getSelect()->limit($limit);
255
  foreach ($subscribers as $subscriber) {
256
  try {
257
- $contact = $contactHelper->getContactByEmail($subscriber->getSubscriberEmail(), null, $storeId);
 
258
 
 
259
  foreach ($lists as $listId) {
260
- $contactHelper->writeInfo(" Adding Contact to list: {$listId}");
 
 
 
 
 
261
  $contact->addToList($listId);
262
  }
263
 
264
  if ($helper->getUpdateStatus()) {
265
  $contact->status = $subscriber->getStatus();
266
- $contactHelper->writeInfo(" Setting Contact ({$contact->email}) status to: {$contact->status}");
267
  }
268
  $contact->save();
269
  $subscriber->setImported(1)->save();
@@ -291,7 +326,7 @@ class Bronto_Newsletter_Model_Observer extends Mage_Core_Model_Abstract
291
  'error' => 0,
292
  );
293
 
294
- $stores = Mage::app()->getStores();
295
  foreach ($stores as $_store) {
296
  $storeResult = $this->processSubscribersForStore($_store);
297
  $result['total'] += $storeResult['total'];
@@ -306,24 +341,6 @@ class Bronto_Newsletter_Model_Observer extends Mage_Core_Model_Abstract
306
  * @depricated
307
  */
308
  static public function cronImport() {
309
- /* var $contactHelper Bronto_Newsletter_Helper_Contact */
310
- $contactHelper = Mage::helper('bronto_newsletter/contact');
311
- /* var $subscribers Bronto_Newsletter_Model_Mysql4_Queue_Collection */
312
- $subscribers = Mage::getModel('bronto_newsletter/queue')
313
- ->getCollection()
314
- ->addFilter('imported', 0);
315
-
316
- foreach($subscribers as $subscriber) {
317
- $email = $subscriber->getSubscriberEmail();
318
- $contact = $contactHelper->getContactByEmail($email, null, $subscriber->getStore());
319
- $contact->status = $subscriber->getStatus();
320
-
321
- try {
322
- //$contactHelper->saveContact($contact);
323
- $subscriber->setImported(1)->save();
324
- } catch(Exception $e) {
325
- Mage::helper('bronto_newsletter')->writeError($e);
326
- }
327
- }
328
  }
329
  }
10
  const NOTICE_IDENTIFER = 'bronto_newsletter';
11
  const BOX_UNCHECKED = 0;
12
  const BOX_CHECKED = 1;
13
+ const BOX_NOT_CHANGED = 2;
14
 
15
  /**
16
  * @param Varien_Event_Observer $observer
27
  return;
28
  }
29
  }
30
+
31
  /**
32
  * This event fires when customer continues past the Billing Info step
33
  * on the onepage checkout. We set a flag here in the session to avoid
40
  if (!Mage::helper('bronto_newsletter')->isEnabled()) {
41
  return;
42
  }
43
+ Mage::getSingleton('checkout/session')->unsIsSubscribed();
44
  $params = Mage::app()->getRequest()->getParams();
45
+
46
+ if (
47
+ isset($params['billing']['is_subscribed']) &&
48
+ ($params['billing']['is_subscribed'] === '1' ||
49
+ $params['billing']['is_subscribed'] === '0')
50
+ ) {
51
  $isSubscribed = (int) $params['billing']['is_subscribed'];
52
  Mage::getSingleton('checkout/session')->setIsSubscribed($isSubscribed);
53
  } else {
54
+ Mage::getSingleton('checkout/session')->setIsSubscribed(self::BOX_NOT_CHANGED);
55
+ }
56
+
57
+ return $observer;
58
+ }
59
+
60
+ /**
61
+ * Get Bronto Contact Row via Email address
62
+ * @param string $email
63
+ * @return boolean|Bronto_Api_Contact_Row
64
+ */
65
+ protected function _getBrontoContact($email)
66
+ {
67
+ try {
68
+ /* @var $contact Bronto_Api_Contact_Row */
69
+ $contact = Mage::helper('bronto_newsletter/contact')->getContactByEmail($email, null, Mage::app()->getStore()->getId());
70
+ return $contact;
71
+ } catch (Exception $e) {
72
+ Mage::helper('bronto_newsletter')->writeError($e);
73
+ return false;
74
  }
75
  }
76
 
77
  /**
78
+ * Observe checkout event and handle assigning status
79
  * @param Varien_Event_Observer $observer
80
+ * @return boolean|Varien_Event_Observer
81
  */
82
  public function handleSubscriptionAtCheckout(Varien_Event_Observer $observer)
83
  {
84
  if (!Mage::helper('bronto_newsletter')->isEnabled()) {
85
  return;
86
  }
87
+
88
  try {
89
  // Get e-mail address we are working with
90
  $email = $observer->getEvent()->getOrder()->getData('customer_email');
91
+
92
  if (empty($email)) {
93
  Mage::helper('bronto_newsletter')->writeError('No customer_email was provided.');
94
  return false;
95
  }
96
 
97
  /* @var $subscriber Mage_Newsletter_Model_Subscriber */
98
+ if (!$subscriber = Mage::getModel('newsletter/subscriber')->loadByEmail($email)) {
99
+ Mage::helper('bronto_newsletter')->writeError('Unable to create subscriber object');
100
+ return false;
101
+ }
102
+
103
+ /* @var $contact Bronto_Api_Contact_Row */
104
+ if (!$contact = $this->_getBrontoContact($email)) {
105
+ Mage::helper('bronto_newsletter')->writeError('Unable to create contact object');
106
+ return false;
107
+ }
108
+
109
+ // Get Subscription status
110
  $isSubscribed = Mage::getSingleton('checkout/session')->getIsSubscribed();
111
 
112
+ // Determine action
113
  switch ($isSubscribed) {
114
+ case self::BOX_CHECKED:
115
+ // Subscribe the Customer
116
+ if (!$subscriber->isSubscribed()) {
117
+ return $subscriber->subscribe($email);
118
+ }
119
+ break;
120
  case self::BOX_UNCHECKED:
121
+ // Unsubscribe the Customer if subscribed, Make Transactional if not in bronto
122
+ if ($subscriber->isSubscribed()) {
123
  return $subscriber->unsubscribe();
124
+ } elseif (!$contact->id && !$subscriber->isSubscribed()) {
 
125
  $this->_makeTransactional($subscriber, $email);
126
  }
127
  break;
128
+ case self::BOX_NOT_CHANGED:
129
+ // Make Customer Transactional if not in bronto
130
+ if (!$contact->id && !$subscriber->isSubscribed()) {
131
+ $this->_makeTransactional($subscriber, $email);
132
  }
133
  break;
134
+ default:
135
+ // Intentionally blank
 
 
136
  break;
137
  }
 
138
  } catch (Exception $e) {
139
  Mage::helper('bronto_newsletter')->writeError($e);
140
  }
141
+
142
+ return $observer;
143
  }
144
 
145
+ /**
146
+ * Handle setting subscriber as transactional in bronto queue and
147
+ * removing from magento subscription
148
+ * @param Mage_Newsletter_Model_Subscriber $subscriber
149
+ * @param string $email
150
+ * @return boolean|Mage_Newsletter_Model_Subscriber
151
+ */
152
+ private function _makeTransactional(Mage_Newsletter_Model_Subscriber $subscriber, $email)
153
  {
154
+ /* @var $contact Bronto_Api_Contact_Row */
155
+ if (!$contact = $this->_getBrontoContact($email)) {
156
+ Mage::helper('bronto_newsletter')->writeError('Unable to create contact object');
 
 
 
157
  return false;
158
  }
159
 
160
+ // Get Customer using the email provided
161
  $ownerId = Mage::getModel('customer/customer')
162
  ->setWebsiteId(Mage::app()->getStore()->getWebsiteId())
163
  ->loadByEmail($email)
167
  $ownerId = Mage::getSingleton('customer/session')->getId();
168
  }
169
 
170
+ // Set Magento Subscriber and Status
171
  $subscriber->setCustomerId($ownerId);
172
  $subscriber->setSubscriberEmail($email);
173
  $subscriber->setStoreId(Mage::app()->getStore()->getId());
178
  }
179
 
180
  $subscriber->save();
181
+
182
+ return $subscriber;
183
  }
184
 
185
  /**
192
  }
193
 
194
  // Insert contact email into queuing table. Cron will
195
+ // then issue an update to Bronto on its next run.
196
  try {
197
  /* @var $subscriber Mage_Newsletter_Model_Subscriber */
198
+ if (!$subscriber = $observer->getEvent()->getSubscriber()) {
199
+ Mage::helper('bronto_newsletter')->writeError('Unable to create subscriber object');
200
+ return false;
 
 
201
  }
202
+
203
+ // Send to queue
204
+ $this->_saveToQueue($subscriber, Mage::app()->getStore()->getId());
205
  } catch (Exception $e) {
206
  Mage::helper('bronto_newsletter')->writeError($e);
207
  }
211
  * Add Subscriber to Bronto Newsletter Opt-in queue
212
  * @param Mage_Newsletter_Model_Subscriber $subscriber
213
  * @param int $storeId
 
214
  * @return void
215
  */
216
  private function _saveToQueue($subscriber, $storeId)
217
  {
218
+ // Get e-mail address we are working with
219
+ $email = $subscriber->getEmail();
220
+ if (empty($email)) {
221
+ Mage::helper('bronto_newsletter')->writeError('Subscriber does not have an email address.');
222
+ return false;
223
+ }
224
+
225
  // Get Calculated Status
226
+ $status = Mage::helper('bronto_newsletter/contact')->getQueueStatus($subscriber);
227
 
228
  /* @var $contactQueue Bronto_Newsletter_Model_Queue */
229
+ $contactQueue = Mage::getModel('bronto_newsletter/queue')
230
+ ->getContactRow($subscriber->getId(), $storeId);
231
+
232
+ // If ContactQueue status doesn't match subscriber status, replace it
233
+ if ($status != $contactQueue->getStatus()) {
234
+ $contactQueue->setSubscriberEmail($subscriber->getEmail())
235
+ ->setStatus($status)
236
+ ->setMessagePreference('html')
237
+ ->setSource('api')
238
+ ->setImported(0)
239
+ ->save();
240
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
241
  }
242
 
243
  /**
268
  return false;
269
  }
270
 
271
+ $helper = Mage::helper('bronto_newsletter/contact');
 
272
 
273
  $lists = $helper->getListIds($storeId);
274
 
282
  $subscribers->getSelect()->limit($limit);
283
  foreach ($subscribers as $subscriber) {
284
  try {
285
+ /* @var $contact Bronto_Api_Contact_Row */
286
+ $contact = $helper->getContactByEmail($subscriber->getSubscriberEmail(), null, $storeId);
287
 
288
+ // Get List Details
289
  foreach ($lists as $listId) {
290
+ if ($list = $helper->getListData($listId)) {
291
+ $listName = $list->label;
292
+ } else {
293
+ $listName = $listId;
294
+ }
295
+ $helper->writeInfo(" Adding Contact to list: {$listName}");
296
  $contact->addToList($listId);
297
  }
298
 
299
  if ($helper->getUpdateStatus()) {
300
  $contact->status = $subscriber->getStatus();
301
+ $helper->writeInfo(" Setting Contact ({$contact->email}) status to: {$contact->status}");
302
  }
303
  $contact->save();
304
  $subscriber->setImported(1)->save();
326
  'error' => 0,
327
  );
328
 
329
+ $stores = Mage::app()->getStores(true);
330
  foreach ($stores as $_store) {
331
  $storeResult = $this->processSubscribersForStore($_store);
332
  $result['total'] += $storeResult['total'];
341
  * @depricated
342
  */
343
  static public function cronImport() {
344
+ return;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
345
  }
346
  }
app/code/community/Bronto/Order/Block/Adminhtml/System/Config/Cron.php CHANGED
@@ -48,7 +48,7 @@ class Bronto_Order_Block_Adminhtml_System_Config_Cron extends Bronto_Common_Bloc
48
  }
49
 
50
  /**
51
- * @return Bronto_Order_Model_Resource_Order_Collection
52
  */
53
  protected function getOrderResourceCollection()
54
  {
48
  }
49
 
50
  /**
51
+ * @return Bronto_Order_Model_Mysql4_Queue_Collection
52
  */
53
  protected function getOrderResourceCollection()
54
  {
app/code/community/Bronto/Order/Model/{Resource → Mysql4}/Setup.php RENAMED
@@ -3,19 +3,17 @@
3
  /**
4
  * @package Order
5
  * @copyright 2011-2012 Bronto Software, Inc.
6
- * @version 1.1.5
7
  */
8
- class Bronto_Order_Model_Resource_Setup extends Mage_Sales_Model_Mysql4_Setup
9
  {
10
 
11
  /**
12
- * Short description for function
13
- *
14
- * Long description (if any) ...
15
  *
16
  * @param string $code Parameter description (if any) ...
17
  * @param unknown $data Parameter description (if any) ...
18
- * @return string Return description (if any) ...
19
  * @access protected
20
  */
21
  protected function _getAttributeColumnDefinition($code, $data)
@@ -35,7 +33,7 @@ class Bronto_Order_Model_Resource_Setup extends Mage_Sales_Model_Mysql4_Setup
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
  {
@@ -45,7 +43,7 @@ class Bronto_Order_Model_Resource_Setup extends Mage_Sales_Model_Mysql4_Setup
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
  }
@@ -57,7 +55,7 @@ class Bronto_Order_Model_Resource_Setup extends Mage_Sales_Model_Mysql4_Setup
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
  {
@@ -72,7 +70,7 @@ class Bronto_Order_Model_Resource_Setup extends Mage_Sales_Model_Mysql4_Setup
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
  {
3
  /**
4
  * @package Order
5
  * @copyright 2011-2012 Bronto Software, Inc.
6
+ * @version 1.1.7
7
  */
8
+ class Bronto_Order_Model_Mysql4_Setup extends Mage_Sales_Model_Mysql4_Setup
9
  {
10
 
11
  /**
12
+ * Get column definition for attribute
 
 
13
  *
14
  * @param string $code Parameter description (if any) ...
15
  * @param unknown $data Parameter description (if any) ...
16
+ * @return string Return description (if any) ...
17
  * @access protected
18
  */
19
  protected function _getAttributeColumnDefinition($code, $data)
33
  * @param int|string $entityTypeId
34
  * @param string $code
35
  * @param array $attr
36
+ * @return Mage_Sales_Model_Mysql4_Setup
37
  */
38
  public function removeAttribute($entityTypeId, $code)
39
  {
43
  $this->_removeFlatAttribute($this->_flatEntityTables[$entityTypeId], $code);
44
  $this->_removeGridAttribute($this->_flatEntityTables[$entityTypeId], $code, $entityTypeId);
45
  } else {
46
+ parent::removeAttribute($entityTypeId, $code);
47
  }
48
  return $this;
49
  }
55
  * @param string $table
56
  * @param string $attribute
57
  * @param array $attr
58
+ * @return Mage_Sales_Model_Mysql4_Setup
59
  */
60
  protected function _removeFlatAttribute($table, $attribute)
61
  {
70
  * @param string $attribute
71
  * @param array $attr
72
  * @param string $entityTypeId
73
+ * @return Mage_Sales_Model_Mysql4_Setup
74
  */
75
  protected function _removeGridAttribute($table, $attribute, $entityTypeId)
76
  {
app/code/community/Bronto/Order/Model/Observer.php CHANGED
@@ -37,6 +37,9 @@ class Bronto_Order_Model_Observer
37
  $store = Mage::app()->getStore($storeId);
38
  $storeId = $store->getId();
39
  }
 
 
 
40
 
41
  $result = array('total' => 0, 'success' => 0, 'error' => 0);
42
  Mage::helper('bronto_order')->writeDebug("Starting Order Import process for store: {$store->getName()} ({$storeId})");
@@ -179,6 +182,9 @@ class Bronto_Order_Model_Observer
179
  Mage::helper('bronto_order')->writeDebug(' Error: ' . $results['error']);
180
  Mage::helper('bronto_order')->writeDebug(' Total: ' . $results['total']);
181
 
 
 
 
182
  return $results;
183
  }
184
 
37
  $store = Mage::app()->getStore($storeId);
38
  $storeId = $store->getId();
39
  }
40
+
41
+ // Set the current store ID
42
+ Mage::app()->setCurrentStore($storeId);
43
 
44
  $result = array('total' => 0, 'success' => 0, 'error' => 0);
45
  Mage::helper('bronto_order')->writeDebug("Starting Order Import process for store: {$store->getName()} ({$storeId})");
182
  Mage::helper('bronto_order')->writeDebug(' Error: ' . $results['error']);
183
  Mage::helper('bronto_order')->writeDebug(' Total: ' . $results['total']);
184
 
185
+ // Set store back to admin store
186
+ Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
187
+
188
  return $results;
189
  }
190
 
app/code/community/Bronto/Order/Model/Resource/Order/Collection.php DELETED
@@ -1,81 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * @package Order
5
- * @copyright 2011-2012 Bronto Software, Inc.
6
- * @version 1.1.5
7
- */
8
- class Bronto_Order_Model_Resource_Order_Collection extends Mage_Sales_Model_Mysql4_Order_Collection
9
- {
10
- /**
11
- * @return Bronto_Order_Model_Resource_Order_Collection
12
- */
13
- public function addBrontoImportedFilter()
14
- {
15
- $this->addAttributeToFilter('bronto_imported', array('notnull' => true));
16
- return $this;
17
- }
18
-
19
- /**
20
- * @return Bronto_Order_Model_Resource_Order_Collection
21
- */
22
- public function addBrontoNotImportedFilter()
23
- {
24
- $this->addAttributeToFilter('bronto_imported', array('null' => true));
25
- return $this;
26
- }
27
-
28
- /**
29
- * @param mixed $storeIds (null, int|string, array, array may contain null)
30
- * @return Bronto_Order_Model_Resource_Order_Collection
31
- */
32
- public function addStoreFilter($storeIds)
33
- {
34
- $nullCheck = false;
35
-
36
- if (!is_array($storeIds)) {
37
- $storeIds = array($storeIds);
38
- }
39
-
40
- $storeIds = array_unique($storeIds);
41
-
42
- if ($index = array_search(null, $storeIds)) {
43
- unset($storeIds[$index]);
44
- $nullCheck = true;
45
- }
46
-
47
- $storeIds[0] = ($storeIds[0] == '') ? 0 : $storeIds[0];
48
-
49
- if ($nullCheck) {
50
- $this->getSelect()->where('store_id IN(?) OR store_id IS NULL', $storeIds);
51
- } else {
52
- $this->getSelect()->where('store_id IN(?)', $storeIds);
53
- }
54
-
55
- return $this;
56
- }
57
-
58
- /**
59
- * Sort order by order created_at date
60
- *
61
- * @param string $dir
62
- * @return Bronto_Order_Model_Resource_Order_Collection
63
- */
64
- public function orderByCreatedAt($dir = self::SORT_ORDER_DESC)
65
- {
66
- $this->setOrder('created_at', $dir);
67
- return $this;
68
- }
69
-
70
- /**
71
- * Sort order by order updated_at date
72
- *
73
- * @param string $dir
74
- * @return Bronto_Order_Model_Resource_Order_Collection
75
- */
76
- public function orderByUpdatedAt($dir = self::SORT_ORDER_DESC)
77
- {
78
- $this->setOrder('updated_at', $dir);
79
- return $this;
80
- }
81
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Bronto/Order/Test/Config/Config.php CHANGED
@@ -22,8 +22,7 @@ class Bronto_Order_Test_Config_Config
22
  public function resourceModelProvider()
23
  {
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
  );
22
  public function resourceModelProvider()
23
  {
24
  return array(
25
+ array('bronto_order_mysql4/setup', 'Bronto_Order_Model_Mysql4_Setup'),
 
26
  array('bronto_order_mysql4/queue', 'Bronto_Order_Model_Mysql4_Queue'),
27
  array('bronto_order_mysql4/queue_collection', 'Bronto_Order_Model_Mysql4_Queue_Collection'),
28
  );
app/code/community/Bronto/Order/etc/config.xml CHANGED
@@ -27,12 +27,8 @@
27
  <models>
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>
@@ -44,7 +40,7 @@
44
  <bronto_order_setup>
45
  <setup>
46
  <module>Bronto_Order</module>
47
- <class>Bronto_Order_Model_Resource_Setup</class>
48
  </setup>
49
  <connection>
50
  <use>core_setup</use>
27
  <models>
28
  <bronto_order>
29
  <class>Bronto_Order_Model</class>
 
30
  <resourceModel>bronto_order_mysql4</resourceModel>
31
  </bronto_order>
 
 
 
32
  <bronto_order_mysql4>
33
  <class>Bronto_Order_Model_Mysql4</class>
34
  <entities>
40
  <bronto_order_setup>
41
  <setup>
42
  <module>Bronto_Order</module>
43
+ <class>Bronto_Order_Model_Mysql4_Setup</class>
44
  </setup>
45
  <connection>
46
  <use>core_setup</use>
app/code/community/Bronto/Order/sql/bronto_order_setup/mysql4-upgrade-1.1.5-1.1.6.php CHANGED
@@ -4,7 +4,7 @@
4
  */
5
 
6
  $installer = $this;
7
- /* @var $installer Mage_Core_Model_Resource_Setup */
8
 
9
  $installer->startSetup();
10
 
4
  */
5
 
6
  $installer = $this;
7
+ /* @var $installer Mage_Core_Model_Mysql4_Setup */
8
 
9
  $installer->startSetup();
10
 
app/code/community/Bronto/Order/sql/bronto_order_setup/mysql4-upgrade-1.1.6-1.1.7.php CHANGED
@@ -4,7 +4,7 @@
4
  */
5
 
6
  $installer = $this;
7
- /* @var $installer Mage_Core_Model_Resource_Setup */
8
 
9
  $installer->startSetup();
10
 
4
  */
5
 
6
  $installer = $this;
7
+ /* @var $installer Mage_Core_Model_Mysql4_Setup */
8
 
9
  $installer->startSetup();
10
 
app/code/community/Bronto/Reminder/Block/Adminhtml/Reminder/Edit/Tab/Customers.php CHANGED
@@ -17,7 +17,8 @@ class Bronto_Reminder_Block_Adminhtml_Reminder_Edit_Tab_Customers extends Mage_A
17
  $this->setUseAjax(true);
18
  $this->setDefaultSort('entity_id');
19
  $this->setDefaultDir('ASC');
20
- $this->setDefaultFilter(array('grid_is_active' => 1));
 
21
  }
22
 
23
  /**
17
  $this->setUseAjax(true);
18
  $this->setDefaultSort('entity_id');
19
  $this->setDefaultDir('ASC');
20
+ // Commented out because for some reason all matched are defaulting to active = 0;
21
+ //$this->setDefaultFilter(array('grid_is_active' => 1));
22
  }
23
 
24
  /**
app/code/community/Bronto/Reminder/Model/Rule.php CHANGED
@@ -30,8 +30,8 @@ class Bronto_Reminder_Model_Rule extends Mage_Rule_Model_Rule
30
  Mage_Core_Model_Abstract::_afterLoad();
31
 
32
  $version = Mage::getVersionInfo();
33
- if ( 1 == $version['major']
34
- && (6 >= $version['minor'] || 9 == $version['minor'] || 11 == $version['minor'])
35
  ) {
36
  $conditionsArr = unserialize($this->getConditionsSerialized());
37
  if (!empty($conditionsArr) && is_array($conditionsArr)) {
@@ -96,6 +96,101 @@ class Bronto_Reminder_Model_Rule extends Mage_Rule_Model_Rule
96
  }
97
  return $this->_getData('website_ids');
98
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
99
 
100
  /**
101
  * Send reminder emails
@@ -111,45 +206,29 @@ class Bronto_Reminder_Model_Rule extends Mage_Rule_Model_Rule
111
  $identity = Mage::helper('bronto_reminder')->getEmailIdentity();
112
 
113
  $this->_matchCustomers();
114
-
115
- $recipients = $this->_getResource()->getCustomersForNotification($limit, $this->getRuleId());
116
- $recipients = array_merge( $recipients, $this->_getGuestAbandons() );
117
-
118
  if ($dontSend) {
119
  return $this;
120
  }
121
 
 
 
 
122
  $total = 0;
123
  $success = 0;
124
  $error = 0;
125
  foreach ($recipients as $recipient) {
126
  $total++;
127
 
128
- if($recipient['customer_id'] != 0) {
129
- /* @var $customer Mage_Customer_Model_Customer */
130
- $customer = Mage::getModel('customer/customer')->load($recipient['customer_id']);
131
- if (!$customer || !$customer->getId()) {
132
- $error++;
133
- continue;
134
- }
135
- } else {
136
- // Guest Abandon. Create Customer on the fly
137
- $storeId = $recipient['guest']->getStoreId();
138
- $customer = Mage::getModel('customer/customer');
139
- $customer
140
- ->setFirstName($recipient['guest']->getFirstName())
141
- ->setLastName($recipient['guest']->getLastName())
142
- ->setEmail($recipient['guest']->getEmailAddress())
143
- ->setStoreId($storeId)
144
- ->setId(0)
145
- ->setWebsiteId(Mage::getModel('core/store')->load($storeId)->getWebsiteId());
146
- }
147
-
148
- if ($customer->getStoreId()) {
149
- $store = $customer->getStore();
150
- } else {
151
- $store = Mage::app()->getWebsite($customer->getWebsiteId())->getDefaultStore();
152
  }
 
 
 
 
153
 
154
  $messageData = $this->getMessageData($recipient['rule_id'], $store->getId(), $customer->getWebsiteId());
155
  if (!$messageData) {
@@ -165,16 +244,7 @@ class Bronto_Reminder_Model_Rule extends Mage_Rule_Model_Rule
165
  }
166
 
167
  /* @var $quote Mage_Sales_Model_Quote */
168
- if($customer->getId() != 0) {
169
- $quote = Mage::getModel('sales/quote')
170
- ->setStoreId($store->getId())
171
- ->loadByCustomer($customer->getId());
172
- } else {
173
- // Load quote stored for guest
174
- $quote = Mage::getModel('sales/quote')
175
- ->setStoreId($store->getId())
176
- ->loadByIdWithoutStore($recipient['guest']->getQuoteId());
177
- }
178
 
179
  $templateVars = array(
180
  'store' => $store,
@@ -207,16 +277,11 @@ class Bronto_Reminder_Model_Rule extends Mage_Rule_Model_Rule
207
  if ($mail->getSentSuccess()) {
208
  Mage::helper('bronto_reminder')->writeDebug(' Success');
209
 
210
- if($customer->getId() != 0) {
211
- $this->_getResource()->addNotificationLog(
212
- $recipient['rule_id'], $customer->getId(), $mail->getLastDeliveryId(), $messageData['message_id']
213
- );
214
-
215
- } else {
216
- // Add notification log for guest abandon email
217
- $this->_getResource()->addNotificationLog(
218
- $recipient['rule_id'], 0, $mail->getLastDeliveryId(), $messageData['message_id']
219
- );
220
  // Update guest to reflect they have received a reminder notification
221
  $recipient['guest']->setEmailSent(1)->save();
222
  }
@@ -315,14 +380,16 @@ class Bronto_Reminder_Model_Rule extends Mage_Rule_Model_Rule
315
  /**
316
  * Returns an array containing information for sending abandoned cart notifications
317
  * to guest users who abandoned the checkout process.
318
- *
319
  * @return array
320
  */
321
- private function _getGuestAbandons()
322
  {
323
  $guestAbandons = Mage::getModel('bronto_reminder/guest')
324
  ->getCollection()
325
- ->addFieldToFilter('email_sent', array('eq' => 0));
 
 
326
  $retVal = array();
327
  $ruleId = null;
328
  $couponId = null;
30
  Mage_Core_Model_Abstract::_afterLoad();
31
 
32
  $version = Mage::getVersionInfo();
33
+ if (1 == $version['major']
34
+ && (6 >= $version['minor'] || 9 == $version['minor'] || 10 == $version['minor'] || 11 == $version['minor'])
35
  ) {
36
  $conditionsArr = unserialize($this->getConditionsSerialized());
37
  if (!empty($conditionsArr) && is_array($conditionsArr)) {
96
  }
97
  return $this->_getData('website_ids');
98
  }
99
+
100
+ /**
101
+ * Get Store Object for customer
102
+ * @param Mage_Customer_Model_Customer $customer
103
+ * @return Mage_Core_Model_Store
104
+ */
105
+ protected function _getRuleStore(Mage_Customer_Model_Customer $customer)
106
+ {
107
+ if ($customer->getStoreId()) {
108
+ $store = $customer->getStore();
109
+ } else {
110
+ $store = Mage::app()->getWebsite($customer->getWebsiteId())->getDefaultStore();
111
+ }
112
+
113
+ return $store;
114
+ }
115
+
116
+ /**
117
+ * Get array of Registered User abandons and then Guest abandons
118
+ * @param int $limit
119
+ * @return array
120
+ */
121
+ protected function _getRecipients($limit)
122
+ {
123
+ // Pull in array of customers who abandoned their cart
124
+ $recipients = (array) $this->_getResource()->getCustomersForNotification($limit, $this->getRuleId());
125
+
126
+ // Check how many more we are allowed to pull
127
+ $remainingLimit = $limit - count($recipients);
128
+
129
+ // Pull remining available number from guest abandons
130
+ if ($remainingLimit > 0 && $remainingLimit <= $limit) {
131
+ $guestAbandons = (array) $this->_getGuestAbandons($remainingLimit);
132
+ $recipients = array_merge($recipients, $guestAbandons);
133
+ }
134
+
135
+ // Ensure we aren't pulling more than the limit
136
+ if (count($recipients) > $limit) {
137
+ $recipients = array_slice($recipients, $limit);
138
+ }
139
+
140
+ return $recipients;
141
+ }
142
+
143
+ /**
144
+ * Get customer object for recipient
145
+ * @param array $recipient
146
+ * @return boolean|Mage_Customer_Model_Customer
147
+ */
148
+ protected function _getRecipientCustomer($recipient)
149
+ {
150
+ if($recipient['customer_id'] != 0) {
151
+ /* @var $customer Mage_Customer_Model_Customer */
152
+ $customer = Mage::getModel('customer/customer')->load($recipient['customer_id']);
153
+ } else {
154
+ // Guest Abandon. Create Customer on the fly
155
+ $storeId = $recipient['guest']->getStoreId();
156
+ $customer = Mage::getModel('customer/customer')
157
+ ->setFirstName($recipient['guest']->getFirstName())
158
+ ->setLastName($recipient['guest']->getLastName())
159
+ ->setEmail($recipient['guest']->getEmailAddress())
160
+ ->setStoreId($storeId)
161
+ ->setId(0)
162
+ ->setWebsiteId(Mage::getModel('core/store')->load($storeId)->getWebsiteId());
163
+ }
164
+
165
+ if (!$customer || false === $customer->getId()) {
166
+ return false;
167
+ }
168
+
169
+ return $customer;
170
+ }
171
+
172
+ /**
173
+ * Get Quote Object from customer or guest
174
+ * @param Mage_Customer_Model_Customer $customer
175
+ * @param array $recipient
176
+ * @param Mage_Core_Model_Store $store
177
+ * @return Mage_Sales_Model_Quote
178
+ */
179
+ protected function _getRecipientQuote(Mage_Customer_Model_Customer $customer, array $recipient, Mage_Core_Model_Store $store)
180
+ {
181
+ if($customer->getId() != 0) {
182
+ $quote = Mage::getModel('sales/quote')
183
+ ->setStoreId($store->getId())
184
+ ->loadByCustomer($customer->getId());
185
+ } else {
186
+ // Load quote stored for guest
187
+ $quote = Mage::getModel('sales/quote')
188
+ ->setStoreId($store->getId())
189
+ ->loadByIdWithoutStore($recipient['guest']->getQuoteId());
190
+ }
191
+
192
+ return $quote;
193
+ }
194
 
195
  /**
196
  * Send reminder emails
206
  $identity = Mage::helper('bronto_reminder')->getEmailIdentity();
207
 
208
  $this->_matchCustomers();
209
+
 
 
 
210
  if ($dontSend) {
211
  return $this;
212
  }
213
 
214
+ // Get Array of Recipients
215
+ $recipients = $this->_getRecipients($limit);
216
+
217
  $total = 0;
218
  $success = 0;
219
  $error = 0;
220
  foreach ($recipients as $recipient) {
221
  $total++;
222
 
223
+ // Get Customer Object
224
+ /* @var $customer Mage_Customer_Model_Customer */
225
+ if (!$customer = $this->_getRecipientCustomer($recipient)) {
226
+ $error++;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
227
  }
228
+
229
+ // Get Store Object
230
+ /* @var $store Mage_Core_Model_Store */
231
+ $store = $this->_getRuleStore($customer);
232
 
233
  $messageData = $this->getMessageData($recipient['rule_id'], $store->getId(), $customer->getWebsiteId());
234
  if (!$messageData) {
244
  }
245
 
246
  /* @var $quote Mage_Sales_Model_Quote */
247
+ $quote = $this->_getRecipientQuote($customer, $recipient, $store);
 
 
 
 
 
 
 
 
 
248
 
249
  $templateVars = array(
250
  'store' => $store,
277
  if ($mail->getSentSuccess()) {
278
  Mage::helper('bronto_reminder')->writeDebug(' Success');
279
 
280
+ $this->_getResource()->addNotificationLog(
281
+ $recipient['rule_id'], $customer->getId(), $mail->getLastDeliveryId(), $messageData['message_id']
282
+ );
283
+
284
+ if($customer->getId() == 0) {
 
 
 
 
 
285
  // Update guest to reflect they have received a reminder notification
286
  $recipient['guest']->setEmailSent(1)->save();
287
  }
380
  /**
381
  * Returns an array containing information for sending abandoned cart notifications
382
  * to guest users who abandoned the checkout process.
383
+ * @param int $limit
384
  * @return array
385
  */
386
+ private function _getGuestAbandons($limit)
387
  {
388
  $guestAbandons = Mage::getModel('bronto_reminder/guest')
389
  ->getCollection()
390
+ ->addFieldToFilter('email_sent', array('eq' => 0))
391
+ ->setPageSize($limit);
392
+
393
  $retVal = array();
394
  $ruleId = null;
395
  $couponId = null;
app/code/community/Bronto/Reminder/Test/Config/Config.php CHANGED
@@ -12,7 +12,7 @@ class Bronto_Reminder_Test_Config_Config
12
  return array(
13
  array('bronto_reminder/rule', 'Bronto_Reminder_Model_Rule'),
14
  array('bronto_reminder/email_message', 'Bronto_Reminder_Model_Email_Message'),
15
- array('bronto_reminder/rule_mysql4', 'Bronto_Reminder_Model_Mysql4_rule'),
16
  );
17
  }
18
 
12
  return array(
13
  array('bronto_reminder/rule', 'Bronto_Reminder_Model_Rule'),
14
  array('bronto_reminder/email_message', 'Bronto_Reminder_Model_Email_Message'),
15
+ array('bronto_reminder/mysql4_rule', 'Bronto_Reminder_Model_Mysql4_rule'),
16
  );
17
  }
18
 
app/code/community/Bronto/Reminder/Test/Model/Rule.php CHANGED
@@ -2,46 +2,46 @@
2
  class Bronto_Reminder_Test_Model_Rule
3
  extends EcomDev_PHPUnit_Test_Case
4
  {
5
- private $_fixture;
6
 
7
- public function setUp()
8
- {
9
- $this->_fixture = Mage::getModel('bronto_reminder/rule');
10
- }
11
 
12
- /**
13
- * @test
14
- * @group amd
15
- * @group model
16
- */
17
- public function getConditionsInstance_shouldReturnObject()
18
- {
19
- $instance = $this->_fixture->getConditionsInstance();
20
 
21
- $this->assertInstanceOf('Bronto_Reminder_Model_Rule_Condition_Combine_Root', $instance);
22
- }
23
 
24
- /**
25
- * @test
26
- * @group amd
27
- * @group model
28
- */
29
- public function getWebsiteIds_shouldReturnArrayOfIds()
30
- {
31
- $websiteIds = $this->_fixture->getWebsiteIds();
32
-
33
- $this->assertInternalType('array', $websiteIds);
34
- }
35
 
36
- /**
37
- * @test
38
- * @group amd
39
- * @group model
40
- */
41
- public function sendReminderEmails_withDontSendReturnsObject()
42
- {
43
- $rule = $this->_fixture->sendReminderEmails(true);
44
 
45
- $this->assertInstanceOf('Bronto_Reminder_Model_Rule', $rule);
46
- }
 
 
 
 
 
 
 
 
 
47
  }
2
  class Bronto_Reminder_Test_Model_Rule
3
  extends EcomDev_PHPUnit_Test_Case
4
  {
5
+ private $_fixture;
6
 
7
+ public function setUp()
8
+ {
9
+ $this->_fixture = Mage::getModel('bronto_reminder/rule');
10
+ }
11
 
12
+ /**
13
+ * @test
14
+ * @group amd
15
+ * @group model
16
+ */
17
+ public function getConditionsInstance_shouldReturnObject()
18
+ {
19
+ $instance = $this->_fixture->getConditionsInstance();
20
 
21
+ $this->assertInstanceOf('Bronto_Reminder_Model_Rule_Condition_Combine_Root', $instance);
22
+ }
23
 
24
+ /**
25
+ * @test
26
+ * @group amd
27
+ * @group model
28
+ */
29
+ public function getWebsiteIds_shouldReturnArrayOfIds()
30
+ {
31
+ $websiteIds = $this->_fixture->getWebsiteIds();
 
 
 
32
 
33
+ $this->assertInternalType('array', $websiteIds);
34
+ }
 
 
 
 
 
 
35
 
36
+ /**
37
+ * @test
38
+ * @group amd
39
+ * @group model
40
+ */
41
+ public function sendReminderEmails_withDontSendReturnsObject()
42
+ {
43
+ $rule = $this->_fixture->sendReminderEmails(true);
44
+
45
+ $this->assertInstanceOf('Bronto_Reminder_Model_Rule', $rule);
46
+ }
47
  }
app/code/community/Bronto/Reminder/etc/config.xml CHANGED
@@ -177,7 +177,7 @@
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>
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/design/frontend/base/default/template/bronto/newsletter/js.phtml CHANGED
@@ -9,54 +9,28 @@
9
  <script>
10
  function prepareNewsletterField() {
11
  Element.show('register-customer-newsletter');
12
- if (typeof(checkout) != 'undefined') {
13
- if (checkout.method == 'register') {
14
- <?php if ($this->isEnabledForRegisterCheckout()): ?>
15
- Element.show('register-customer-newsletter');
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');
25
- $('billing:is_subscribed_box').checked = false;
26
- $('billing:is_subscribed').value = 0;
27
- <?php endif ?>
28
- } else if (checkout.method == 'guest') {
29
- <?php if ($this->isEnabledForGuestCheckout()): ?>
30
- Element.show('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');
40
- $('billing:is_subscribed_box').checked = false;
41
- $('billing:is_subscribed').value = 0;
42
- <?php endif ?>
43
- } else {
44
- Element.show('register-customer-newsletter');
45
- <?php if ($this->isSubscribed() || $this->isEnabledCheckedByDefault()): ?>
46
- $('billing:is_subscribed_box').checked = true;
47
- $('billing:is_subscribed').value = 1;
48
- <?php else: ?>
49
- $('billing:is_subscribed_box').checked = false;
50
- $('billing:is_subscribed').value = 0;
51
- <?php endif ?>
52
- }
53
  }
54
 
55
- <?php if ($this->isSubscribed() && !$this->isEnabledIfAlreadySubscribed()): ?>
56
- Element.hide('register-customer-newsletter');
57
- $('billing:is_subscribed_box').checked = true;
58
- $('billing:is_subscribed').value = 1;
59
- <?php endif; ?>
60
  }
61
 
62
  Event.observe(window, 'load', function() {
@@ -67,7 +41,12 @@ Event.observe(window, 'load', function() {
67
  }
68
  $$('#co-billing-form fieldset')[0].insert('<span id="register-customer-newsletter" style="display:none;"></span>')
69
  $$('#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>');
70
- $$('#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>');
 
 
 
 
 
71
  prepareNewsletterField();
72
  });
73
  </script>
9
  <script>
10
  function prepareNewsletterField() {
11
  Element.show('register-customer-newsletter');
12
+
13
+ if (checkout.method == 'register') {
14
+ <?php echo $this->getJsCheckedCode('register'); ?>
15
+ } else if (checkout.method == 'guest') {
16
+ <?php echo $this->getJsCheckedCode('guest'); ?>
17
+ } else {
18
+ <?php echo $this->getJsCheckedCode('loggedin'); ?>
19
+ }
20
+ }
21
+
22
+ function setSubscribedValue(checkbox)
23
+ {
24
+ var checked = checkbox.checked ? 1 : 0;
25
+ var original = $('billing:is_subscribed_original').value;
26
+
27
+ if (checked != original) {
28
+ $('billing:is_subscribed').value = checked;
29
+ } else {
30
+ $('billing:is_subscribed').value = original;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31
  }
32
 
33
+ return false;
 
 
 
 
34
  }
35
 
36
  Event.observe(window, 'load', function() {
41
  }
42
  $$('#co-billing-form fieldset')[0].insert('<span id="register-customer-newsletter" style="display:none;"></span>')
43
  $$('#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>');
44
+ $$('#co-billing-form fieldset #register-customer-newsletter')[0].insert(
45
+ '<input id="billing:is_subscribed_original" type="hidden" name="billing[is_subscribed_original]" value="1" />' +
46
+ '<input id="billing:is_subscribed" type="hidden" name="billing[is_subscribed]" value="1" />' +
47
+ '<input id="billing:is_subscribed_box" class="billing_is_subscribed_box" type="checkbox" onchange="setSubscribedValue(this); return false;" checked="checked" title="<?php echo $this->__($this->getCheckboxLabelText()) ?>" style="float:left; width: auto; margin: 2px 8px 0 0;" />' +
48
+ '<label id="billing_subscribed_label" for="billing[is_subscribed]"><?php echo $this->__($this->getCheckboxLabelText()) ?></label>'
49
+ );
50
  prepareNewsletterField();
51
  });
52
  </script>
package.xml CHANGED
@@ -1,7 +1,7 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Bronto_Extension</name>
4
- <version>2.0.2.1</version>
5
  <stability>stable</stability>
6
  <license uri="http://opensource.org/licenses/osl-3.0.php">OSL</license>
7
  <channel>community</channel>
@@ -54,10 +54,10 @@
54
  &lt;h3&gt;About Bronto&lt;/h3&gt;&#xD;
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-18</date>
59
- <time>15:19:26</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="4010486c8274f801a4a0b99856cf534d"/><file name="Cron.php" hash="b1c18891073fa233cd5e44f16c60ec97"/><dir name="Form"><dir name="Field"><file name="Apitoken.php" hash="d8ed503f8d22d96b0ee79f18426bb8a1"/><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="6e5fc204a5b6c1d8fa40d9ec6fdabb38"/><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="18368da2a435855841c8b5e2b10637b1"/></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="da11dadcd7914d223491842e5063112c"/><file name="system.xml" hash="5952ce44c1df3b13c5cb5a709718df2c"/></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="75692260aa13ebd1b312d016f1e55ea2"/></dir><file name="Queue.php" hash="97d19f161a404e1a92e1d4f17301b162"/></dir><file name="Observer.php" hash="7f22e8752e0b5abd32714df8e982173b"/><file name="Queue.php" hash="bb54d7305845f685fc4d5bf8a0e50710"/><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="b1716afb193a6915d2c0ca6ee40ac153"/><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"/><file name="mysql4-upgrade-1.0.1-1.0.2.php" hash="e4cda1e094bbb1ebdef331d69b82cfc0"/></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="ea9e30ce8eb25b0b7e840a7933640a27"/></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="a157c0dff95dff0ab324aee4e8da7a7e"/><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="1314e4b54d7c89a75f8ca9b7d02623b8"/></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="7c6ffc1f53cdb660b97039736a53f911"/></dir><file name="Queue.php" hash="c25aee2c31258eedfd5734bf1f143979"/></dir><file name="Observer.php" hash="97ba51f6558def0b62248376cf1607b5"/><dir name="Order"><file name="Observer.php" hash="901f9caf696e02ff7f917112c44c0c91"/></dir><file name="Queue.php" hash="bc8ccad1ea2a284d23ac7a0fdc6c3f7a"/><dir name="Quote"><file name="Observer.php" hash="9dc812fa729166fe441e6ef642266cdb"/></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="c65fe3318052cdfa1862e171ef49a684"/><file name="system.xml" hash="4103906da8806c3d5bd68493ce984613"/></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"/><file name="mysql4-upgrade-1.1.6-1.1.7.php" hash="d732120d38b453f9b00bf97f5ead8c54"/></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="f95239748b5ef006a38b1255356c6c65"/></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="1505adbe63b17e79af5b965a4e85bbae"/></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="0170a7af8f6c989c7f4b19cc4dfb8748"/></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="1e07a998085bb9eb367d040c4b171220"/></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="15d8ce6375063346d47ad832c80fd499"/></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="1a851457b2a032fb6d149fe9ef111c57"/><file name="Row.php" hash="3ab1e97019ef87bcd464eeaabf652886"/></dir><file name="Account.php" hash="33b9ba8867fe69135391c26f98b5852a"/><dir name="Activity"><file name="Exception.php" hash="3ac1f2caea6465931cbf927f1033ec06"/><file name="Row.php" hash="de166130c57670bf486a783a4501e2d4"/></dir><file name="Activity.php" hash="f5f48488e40507bc108b35c599e4e5a2"/><dir name="ApiToken"><file name="Exception.php" hash="e06d0a4c9469da7333e6a596e9c37c5d"/><file name="Row.php" hash="f3742811cec1cbf0be583296b617dfbd"/></dir><file name="ApiToken.php" hash="65bbd18974bbbf620dc2df23bdeb4469"/><dir name="Contact"><file name="Exception.php" hash="809bdce6db3bb9c72a3173bb08c1b19e"/><file name="Row.php" hash="2e360d131c2abe19e154b5f3795a58f0"/></dir><file name="Contact.php" hash="55bab8398154e96db6b0ca3ed88718e0"/><dir name="Conversion"><file name="Exception.php" hash="73dd991a663b99050428f54fc13fb433"/><file name="Row.php" hash="115d01ea0e0e6ade42fcab76dff71c35"/></dir><file name="Conversion.php" hash="60ec52dcfeda92294d1ab10bb29a486a"/><dir name="Delivery"><file name="Exception.php" hash="003dbb49ea3be65fe35dfa9b7ec743c5"/><file name="Recipient.php" hash="562bdc8d86b92ec293a338fdd7bf928a"/><file name="Row.php" hash="9c6149e74a305f62b9806df5a20e6a00"/></dir><file name="Delivery.php" hash="668dc6493cefe960c7dc8fe1fe87bf08"/><dir name="DeliveryGroup"><file name="Exception.php" hash="9291b2adb576a6781a0d624cc3288453"/><file name="Row.php" hash="29adb1f866cf1d24ef0abac19f95fbd0"/></dir><file name="DeliveryGroup.php" hash="7dd295b65f22e65dff3bf45c4336e985"/><file name="Exception.php" hash="bacb7c782ef7f612edaf3d39c20118ef"/><dir name="Field"><file name="Exception.php" hash="db651b9fa4b5161e3a32af49cc12cc64"/><file name="Predefined.php" hash="15fadb32175098d9ded60550d1748a4a"/><file name="Row.php" hash="6871d05f399a8a9dfa0742952eaa6481"/><file name="TypeGuesser.php" hash="1027ea97675a16cc964aa0d8ba63e642"/></dir><file name="Field.php" hash="32d5876335ec815acb50d3b4e7bf3ccd"/><dir name="List"><file name="Exception.php" hash="0f964fac998c89a0d4d515979bd81b98"/><file name="Row.php" hash="6516df43a1a94beee7b57fae71c27134"/></dir><file name="List.php" hash="ef240fe5e1422479a83291ad30b468ac"/><dir name="Login"><file name="ContactInformation.php" hash="bc1ce7f57c67fa21cd0881d0384a1cac"/><file name="Exception.php" hash="fff7546235b416b7008a9e4bd646fc19"/><file name="Row.php" hash="578553fcbf1941d0eb5890614c57ae91"/></dir><file name="Login.php" hash="a663864b51795799ff1a61528f380c80"/><dir name="Message"><file name="Exception.php" hash="755f7f14cdb234931708968ac0bad4a4"/><file name="Row.php" hash="5732b5550c8c6444790f2f20e626ff08"/></dir><file name="Message.php" hash="cc3c9939757371ad7fd2d297df394621"/><dir name="MessageRule"><file name="Exception.php" hash="b0398ee96ed70c483f38b50f305e82a8"/><file name="Row.php" hash="8e7532184ee265a927a195ac36e5a518"/></dir><file name="MessageRule.php" hash="ae1b3f16683656066a83bcf9f2863710"/><file name="Object.php" hash="19e3a4bcfd9031fa2c576f9c7f2cd27e"/><dir name="Order"><file name="Exception.php" hash="8312e1a1ab46bcf88b72983bb11a6493"/><file name="Product.php" hash="3785f2f460fec6c18c6164176de52449"/><file name="Row.php" hash="1400de022188806bb94e98544c054ef6"/></dir><file name="Order.php" hash="ad690b37bc577879020d10e5ac70ef3d"/><dir name="Row"><file name="Exception.php" hash="4c1a45512e0912644f94a88d4298d3a9"/></dir><file name="Row.php" hash="259418b11987939378747a9c46fae1ae"/><dir name="Rowset"><file name="Exception.php" hash="b5202ed6f61bfe06b90f73c03ca28ffa"/><file name="Iterator.php" hash="9ea7a244b83e7b9318bfe8ed371a149f"/></dir><file name="Rowset.php" hash="3f40382933e2f392b6320fd79db720cd"/><dir name="Segment"><file name="Exception.php" hash="bd5c2302ef222ff55981cc38477a9310"/><file name="Row.php" hash="b840493b8b2c3cb6686de0e5bedfa2ba"/></dir><file name="Segment.php" hash="0cf99babff6169afa427f302c76023dd"/></dir><file name="Api.php" hash="afcccdc4a3f3b594e985c93afe924df8"/><file name="SoapClient.php" hash="c9e56dc7f88d71cfbb98b3476bad5ead"/><dir name="Util"><file name="Colors.php" hash="14313213b3a70c79a56c574523b9b90b"/><file name="CountryCodes.php" hash="4efb9c354d29a901368c46aab40f79d4"/><dir name="Retryer"><file name="FileRetryer.php" hash="bdc72ace54ace32081115442d28cb972"/><file name="RetryerException.php" hash="54b70d7abbc32b55649a193e8e70dcb5"/><file name="RetryerInterface.php" hash="cc57d5a02a55811a13a31ed9beff126f"/></dir><file name="Uuid.php" hash="ba62bdec6488ccb621e0bfd726c6107a"/></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="ajax-loader-tr.gif" hash="1ae32bc8232ff2527c627e5b38eb319a"/><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="0cce5efcc4164c4e3ed33dff71800dc7"/></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="8dcb1b72071c00888c8f6ad7b6d18d9b"/></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.3</version>
5
  <stability>stable</stability>
6
  <license uri="http://opensource.org/licenses/osl-3.0.php">OSL</license>
7
  <channel>community</channel>
54
  &lt;h3&gt;About Bronto&lt;/h3&gt;&#xD;
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>Chris Geiss</name><user>BrontoSoftware</user><email>chris.geiss@bronto.com</email></author></authors>
58
+ <date>2013-05-08</date>
59
+ <time>18:45:47</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="587a6b5a525a0d695ca1d1c31ca44fb1"/><file name="Cron.php" hash="1a718ab7d39492ff064618f7507d35ef"/><dir name="Form"><dir name="Field"><file name="Apitoken.php" hash="d8ed503f8d22d96b0ee79f18426bb8a1"/><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="d71b8a47d17b6096613b9c004eb76bd9"/><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="18368da2a435855841c8b5e2b10637b1"/></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="d8a4089180cac8527bb98d831629d25c"/><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="41263dadbca9b015cab770431c65b114"/><file name="system.xml" hash="5952ce44c1df3b13c5cb5a709718df2c"/></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="77979625bb4656aae7ed808ae9d19c51"/><dir name="Form"><dir name="Fieldset"><dir name="Attributes"><file name="Address.php" hash="d9b871fc6c94bf3cf78966dd00d36b64"/><file name="Customer.php" hash="ad245540adbc149c27d7f19eab62ab03"/></dir><file name="Attributes.php" hash="b5f1b004acd6a691213c82c59d7f65fb"/></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="176b96d3a5a85c4625b9350014fece2f"/></dir><dir name="Model"><dir name="Mysql4"><dir name="Queue"><file name="Collection.php" hash="75692260aa13ebd1b312d016f1e55ea2"/></dir><file name="Queue.php" hash="97d19f161a404e1a92e1d4f17301b162"/><file name="Setup.php" hash="615e25c2d8493dcd4301650421c87f08"/></dir><file name="Observer.php" hash="3fe3886635517a7e4b08c317e4c5d57a"/><file name="Queue.php" hash="bb54d7305845f685fc4d5bf8a0e50710"/><dir name="System"><dir name="Config"><dir name="Backend"><file name="Brontofield.php" hash="dacabd748e68b2d830c30a839ce79e1f"/><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="a7ece4830e5766062bba51b58944afe0"/><file name="system.xml" hash="0e13fc7e0917b98b5d28aa658cd53027"/></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="e7986d0b22a92f5df7a3480f80d7b937"/><file name="mysql4-upgrade-1.0.1-1.0.2.php" hash="b95305221a61733ff7617ce9307101c2"/></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="05f9642857698519f1b21a3c687abc8a"/></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="ea9e30ce8eb25b0b7e840a7933640a27"/></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="2253dab9a7475df825d4bcb7849cc3e9"/></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="ed221e46e61f3312a038c022dacf5fd7"/></dir></dir></dir><dir name="Helper"><file name="Contact.php" hash="4c1dcd95ea237397ac2ee82090ce32e4"/><file name="Data.php" hash="62e5be8e1326862fee10774654daad15"/></dir><dir name="Model"><dir name="Mysql4"><dir name="Queue"><file name="Collection.php" hash="41a203d85e16a660bf20bec8ecf157fd"/></dir><file name="Queue.php" hash="9a890d3fe569edd426ce38afe564dc7a"/></dir><file name="Observer.php" hash="3688d8bfe594cf668dc255eea019ce45"/><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="1314e4b54d7c89a75f8ca9b7d02623b8"/></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="8af3e2efe08150906d837ca2c991aff8"/></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="7c6ffc1f53cdb660b97039736a53f911"/></dir><file name="Queue.php" hash="c25aee2c31258eedfd5734bf1f143979"/><file name="Setup.php" hash="b3ccddc52af0695c48cff499ed112901"/></dir><file name="Observer.php" hash="f06d0b34e5dc4d47bc173076403c85bd"/><dir name="Order"><file name="Observer.php" hash="901f9caf696e02ff7f917112c44c0c91"/></dir><file name="Queue.php" hash="bc8ccad1ea2a284d23ac7a0fdc6c3f7a"/><dir name="Quote"><file name="Observer.php" hash="9dc812fa729166fe441e6ef642266cdb"/></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="29ce141400ea98642a0c200a721810a8"/></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="a872f39d7af8becb0b47dbae560db5cf"/><file name="system.xml" hash="4103906da8806c3d5bd68493ce984613"/></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="de0e97123c3183c6363c33b1344b76dd"/><file name="mysql4-upgrade-1.1.6-1.1.7.php" hash="fe4f45d4fe4e8d90267d9bb6a6b13b03"/></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="f95239748b5ef006a38b1255356c6c65"/></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="edbda94b225a5f81e5a1a2ee72ab7e53"/><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="2c3a858e05353c216b292451d68d9b85"/><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="9610717f006248a90f113c699df523a6"/></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="eb0d4025dda8b95e65fbd79df7e3d8da"/></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="89f3b5a4225db5b6296938d56ed000ff"/><file name="system.xml" hash="1505adbe63b17e79af5b965a4e85bbae"/></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="0170a7af8f6c989c7f4b19cc4dfb8748"/></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="1e07a998085bb9eb367d040c4b171220"/></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="15d8ce6375063346d47ad832c80fd499"/></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="1a851457b2a032fb6d149fe9ef111c57"/><file name="Row.php" hash="3ab1e97019ef87bcd464eeaabf652886"/></dir><file name="Account.php" hash="33b9ba8867fe69135391c26f98b5852a"/><dir name="Activity"><file name="Exception.php" hash="3ac1f2caea6465931cbf927f1033ec06"/><file name="Row.php" hash="de166130c57670bf486a783a4501e2d4"/></dir><file name="Activity.php" hash="f5f48488e40507bc108b35c599e4e5a2"/><dir name="ApiToken"><file name="Exception.php" hash="e06d0a4c9469da7333e6a596e9c37c5d"/><file name="Row.php" hash="f3742811cec1cbf0be583296b617dfbd"/></dir><file name="ApiToken.php" hash="65bbd18974bbbf620dc2df23bdeb4469"/><dir name="Contact"><file name="Exception.php" hash="809bdce6db3bb9c72a3173bb08c1b19e"/><file name="Row.php" hash="2e360d131c2abe19e154b5f3795a58f0"/></dir><file name="Contact.php" hash="55bab8398154e96db6b0ca3ed88718e0"/><dir name="Conversion"><file name="Exception.php" hash="73dd991a663b99050428f54fc13fb433"/><file name="Row.php" hash="115d01ea0e0e6ade42fcab76dff71c35"/></dir><file name="Conversion.php" hash="60ec52dcfeda92294d1ab10bb29a486a"/><dir name="Delivery"><file name="Exception.php" hash="003dbb49ea3be65fe35dfa9b7ec743c5"/><file name="Recipient.php" hash="562bdc8d86b92ec293a338fdd7bf928a"/><file name="Row.php" hash="9c6149e74a305f62b9806df5a20e6a00"/></dir><file name="Delivery.php" hash="668dc6493cefe960c7dc8fe1fe87bf08"/><dir name="DeliveryGroup"><file name="Exception.php" hash="9291b2adb576a6781a0d624cc3288453"/><file name="Row.php" hash="29adb1f866cf1d24ef0abac19f95fbd0"/></dir><file name="DeliveryGroup.php" hash="7dd295b65f22e65dff3bf45c4336e985"/><file name="Exception.php" hash="bacb7c782ef7f612edaf3d39c20118ef"/><dir name="Field"><file name="Exception.php" hash="db651b9fa4b5161e3a32af49cc12cc64"/><file name="Predefined.php" hash="15fadb32175098d9ded60550d1748a4a"/><file name="Row.php" hash="6871d05f399a8a9dfa0742952eaa6481"/><file name="TypeGuesser.php" hash="1027ea97675a16cc964aa0d8ba63e642"/></dir><file name="Field.php" hash="32d5876335ec815acb50d3b4e7bf3ccd"/><dir name="List"><file name="Exception.php" hash="0f964fac998c89a0d4d515979bd81b98"/><file name="Row.php" hash="6516df43a1a94beee7b57fae71c27134"/></dir><file name="List.php" hash="ef240fe5e1422479a83291ad30b468ac"/><dir name="Login"><file name="ContactInformation.php" hash="bc1ce7f57c67fa21cd0881d0384a1cac"/><file name="Exception.php" hash="fff7546235b416b7008a9e4bd646fc19"/><file name="Row.php" hash="578553fcbf1941d0eb5890614c57ae91"/></dir><file name="Login.php" hash="a663864b51795799ff1a61528f380c80"/><dir name="Message"><file name="Exception.php" hash="755f7f14cdb234931708968ac0bad4a4"/><file name="Row.php" hash="5732b5550c8c6444790f2f20e626ff08"/></dir><file name="Message.php" hash="cc3c9939757371ad7fd2d297df394621"/><dir name="MessageRule"><file name="Exception.php" hash="b0398ee96ed70c483f38b50f305e82a8"/><file name="Row.php" hash="8e7532184ee265a927a195ac36e5a518"/></dir><file name="MessageRule.php" hash="ae1b3f16683656066a83bcf9f2863710"/><file name="Object.php" hash="19e3a4bcfd9031fa2c576f9c7f2cd27e"/><dir name="Order"><file name="Exception.php" hash="8312e1a1ab46bcf88b72983bb11a6493"/><file name="Product.php" hash="3785f2f460fec6c18c6164176de52449"/><file name="Row.php" hash="1400de022188806bb94e98544c054ef6"/></dir><file name="Order.php" hash="ad690b37bc577879020d10e5ac70ef3d"/><dir name="Row"><file name="Exception.php" hash="4c1a45512e0912644f94a88d4298d3a9"/></dir><file name="Row.php" hash="259418b11987939378747a9c46fae1ae"/><dir name="Rowset"><file name="Exception.php" hash="b5202ed6f61bfe06b90f73c03ca28ffa"/><file name="Iterator.php" hash="9ea7a244b83e7b9318bfe8ed371a149f"/></dir><file name="Rowset.php" hash="3f40382933e2f392b6320fd79db720cd"/><dir name="Segment"><file name="Exception.php" hash="bd5c2302ef222ff55981cc38477a9310"/><file name="Row.php" hash="b840493b8b2c3cb6686de0e5bedfa2ba"/></dir><file name="Segment.php" hash="0cf99babff6169afa427f302c76023dd"/></dir><file name="Api.php" hash="afcccdc4a3f3b594e985c93afe924df8"/><file name="SoapClient.php" hash="c9e56dc7f88d71cfbb98b3476bad5ead"/><dir name="Util"><file name="Colors.php" hash="14313213b3a70c79a56c574523b9b90b"/><file name="CountryCodes.php" hash="4efb9c354d29a901368c46aab40f79d4"/><dir name="Retryer"><file name="FileRetryer.php" hash="bdc72ace54ace32081115442d28cb972"/><file name="RetryerException.php" hash="54b70d7abbc32b55649a193e8e70dcb5"/><file name="RetryerInterface.php" hash="cc57d5a02a55811a13a31ed9beff126f"/></dir><file name="Uuid.php" hash="ba62bdec6488ccb621e0bfd726c6107a"/></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="ajax-loader-tr.gif" hash="1ae32bc8232ff2527c627e5b38eb319a"/><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="a01ed75d8aff216f753ac2b13b51a404"/></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="8dcb1b72071c00888c8f6ad7b6d18d9b"/></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>