Springbot - Version 1.4.6.0

Version Notes

Fix for ACL issues after SUPEE-6285 patch
Fix for creating enterprise URL rewrites

Download this release

Release Info

Developer Springbot Integrations Team
Extension Springbot
Version 1.4.6.0
Comparing to
See all releases


Code changes from version 1.4.5.0 to 1.4.6.0

app/code/community/Springbot/Bmbleb/controllers/Adminhtml/HelpController.php CHANGED
@@ -9,4 +9,9 @@ class Springbot_Bmbleb_Adminhtml_HelpController extends Mage_Adminhtml_Controlle
9
  $this->renderLayout();
10
  }
11
 
 
 
 
 
 
12
  }
9
  $this->renderLayout();
10
  }
11
 
12
+ protected function _isAllowed()
13
+ {
14
+ return Mage::getSingleton('admin/session')->isAllowed('springbot_bmbleb/dashboard');
15
+ }
16
+
17
  }
app/code/community/Springbot/Bmbleb/controllers/Adminhtml/IndexController.php CHANGED
@@ -1,6 +1,7 @@
1
  <?php
2
  class Springbot_Bmbleb_Adminhtml_IndexController extends Mage_Adminhtml_Controller_Action
3
  {
 
4
  protected function _init()
5
  {
6
  if(!Mage::helper('bmbleb/Account')->getIsAuthenticated()) {
@@ -65,4 +66,9 @@ class Springbot_Bmbleb_Adminhtml_IndexController extends Mage_Adminhtml_Controll
65
  return;
66
  }
67
 
 
 
 
 
 
68
  }
1
  <?php
2
  class Springbot_Bmbleb_Adminhtml_IndexController extends Mage_Adminhtml_Controller_Action
3
  {
4
+
5
  protected function _init()
6
  {
7
  if(!Mage::helper('bmbleb/Account')->getIsAuthenticated()) {
66
  return;
67
  }
68
 
69
+ protected function _isAllowed()
70
+ {
71
+ return Mage::getSingleton('admin/session')->isAllowed('springbot_bmbleb/dashboard');
72
+ }
73
+
74
  }
app/code/community/Springbot/Bmbleb/controllers/Adminhtml/JobsController.php CHANGED
@@ -74,4 +74,10 @@ class Springbot_Bmbleb_Adminhtml_JobsController extends Mage_Adminhtml_Controlle
74
  {
75
  return Mage::getModel('combine/cron_queue')->load($id);
76
  }
 
 
 
 
 
 
77
  }
74
  {
75
  return Mage::getModel('combine/cron_queue')->load($id);
76
  }
77
+
78
+ protected function _isAllowed()
79
+ {
80
+ return Mage::getSingleton('admin/session')->isAllowed('springbot_bmbleb/dashboard');
81
+ }
82
+
83
  }
app/code/community/Springbot/Bmbleb/controllers/Adminhtml/LogsController.php CHANGED
@@ -27,4 +27,9 @@ class Springbot_Bmbleb_Adminhtml_LogsController extends Mage_Adminhtml_Controlle
27
  exit;
28
  }
29
 
 
 
 
 
 
30
  }
27
  exit;
28
  }
29
 
30
+ protected function _isAllowed()
31
+ {
32
+ return Mage::getSingleton('admin/session')->isAllowed('springbot_bmbleb/dashboard');
33
+ }
34
+
35
  }
app/code/community/Springbot/Bmbleb/controllers/Adminhtml/ProblemsController.php CHANGED
@@ -17,4 +17,9 @@ class Springbot_Bmbleb_Adminhtml_ProblemsController extends Mage_Adminhtml_Contr
17
 
18
  }
19
 
 
 
 
 
 
20
  }
17
 
18
  }
19
 
20
+ protected function _isAllowed()
21
+ {
22
+ return Mage::getSingleton('admin/session')->isAllowed('springbot_bmbleb/dashboard');
23
+ }
24
+
25
  }
app/code/community/Springbot/Bmbleb/controllers/Adminhtml/SettingsController.php CHANGED
@@ -61,4 +61,9 @@ class Springbot_Bmbleb_Adminhtml_SettingsController extends Mage_Adminhtml_Contr
61
  return;
62
  }
63
 
 
 
 
 
 
64
  }
61
  return;
62
  }
63
 
64
+ protected function _isAllowed()
65
+ {
66
+ return Mage::getSingleton('admin/session')->isAllowed('springbot_bmbleb/dashboard');
67
+ }
68
+
69
  }
app/code/community/Springbot/Bmbleb/controllers/HelpController.php CHANGED
@@ -26,5 +26,9 @@ class Springbot_Bmbleb_HelpController extends Mage_Adminhtml_Controller_Action
26
  $this->renderLayout();
27
  }
28
 
 
 
 
 
29
 
30
  }
26
  $this->renderLayout();
27
  }
28
 
29
+ protected function _isAllowed()
30
+ {
31
+ return Mage::getSingleton('admin/session')->isAllowed('springbot_bmbleb/dashboard');
32
+ }
33
 
34
  }
app/code/community/Springbot/Bmbleb/controllers/IndexController.php CHANGED
@@ -12,5 +12,11 @@ class Springbot_Bmbleb_IndexController extends Mage_Adminhtml_Controller_Action
12
  print $this->getLayout()->createBlock("bmbleb/Adminhtml_Index_Terms")->toHtml();
13
  exit();
14
  }
 
 
 
 
 
 
15
  }
16
 
12
  print $this->getLayout()->createBlock("bmbleb/Adminhtml_Index_Terms")->toHtml();
13
  exit();
14
  }
15
+
16
+ protected function _isAllowed()
17
+ {
18
+ return Mage::getSingleton('admin/session')->isAllowed('springbot_bmbleb/dashboard');
19
+ }
20
+
21
  }
22
 
app/code/community/Springbot/Bmbleb/controllers/LoginController.php CHANGED
@@ -70,4 +70,10 @@ class Springbot_Bmbleb_LoginController extends Mage_Adminhtml_Controller_Action
70
  }
71
  }
72
 
 
 
 
 
 
 
73
  }
70
  }
71
  }
72
 
73
+ protected function _isAllowed()
74
+ {
75
+ return Mage::getSingleton('admin/session')->isAllowed('springbot_bmbleb/dashboard');
76
+ }
77
+
78
+
79
  }
app/code/community/Springbot/Bmbleb/controllers/LogoutController.php CHANGED
@@ -40,4 +40,10 @@ class Springbot_Bmbleb_LogoutController extends Mage_Adminhtml_Controller_Action
40
  Mage::helper('bmbleb/externalLogging')->log($payload, $storeId);
41
  return;
42
  }
 
 
 
 
 
 
43
  }
40
  Mage::helper('bmbleb/externalLogging')->log($payload, $storeId);
41
  return;
42
  }
43
+
44
+ protected function _isAllowed()
45
+ {
46
+ return Mage::getSingleton('admin/session')->isAllowed('springbot_bmbleb/dashboard');
47
+ }
48
+
49
  }
app/code/community/Springbot/Combine/Helper/Harvest.php CHANGED
@@ -293,7 +293,7 @@ class Springbot_Combine_Helper_Harvest extends Mage_Core_Helper_Abstract
293
  public function getStoreUrl($storeId)
294
  {
295
  $store = Mage::app()->getStore($storeId);
296
- $url = $store->getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB);
297
 
298
  if($store->getStoreInUrl()) {
299
  $url .= $store->getCode();
293
  public function getStoreUrl($storeId)
294
  {
295
  $store = Mage::app()->getStore($storeId);
296
+ $url = $store->getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB, true);
297
 
298
  if($store->getStoreInUrl()) {
299
  $url .= $store->getCode();
app/code/community/Springbot/Combine/Model/System/Config/Source/Harvestertype.php CHANGED
@@ -6,7 +6,6 @@ class Springbot_Combine_Model_System_Config_Source_Harvestertype
6
  {
7
  return array(
8
  array('value' => 'cron', 'label'=>Mage::helper('combine')->__('Cron')),
9
- array('value' => 'worker', 'label'=>Mage::helper('combine')->__('Worker')),
10
  array('value' => 'prattler', 'label'=>Mage::helper('combine')->__('Prattler')),
11
  );
12
  }
6
  {
7
  return array(
8
  array('value' => 'cron', 'label'=>Mage::helper('combine')->__('Cron')),
 
9
  array('value' => 'prattler', 'label'=>Mage::helper('combine')->__('Prattler')),
10
  );
11
  }
app/code/community/Springbot/Combine/etc/config.xml CHANGED
@@ -2,7 +2,7 @@
2
  <config>
3
  <modules>
4
  <Springbot_Combine>
5
- <version>1.4.5.0</version>
6
  </Springbot_Combine>
7
  </modules>
8
  <global>
2
  <config>
3
  <modules>
4
  <Springbot_Combine>
5
+ <version>1.4.6.0</version>
6
  </Springbot_Combine>
7
  </modules>
8
  <global>
app/code/community/Springbot/Services/Cmd/Harvest.php CHANGED
@@ -1,348 +1,407 @@
1
  <?php
 
2
  class Springbot_Services_Cmd_Harvest extends Springbot_Services
3
  {
4
- const SEGMENT_SIZE = 2000;
5
-
6
- protected $_harvestId;
7
-
8
- // Defines order which entities are harvested during a full harvest
9
- protected static $_classes = array(
10
- 'categories',
11
- 'attributeSets',
12
- 'customerAttributeSets',
13
- 'products',
14
- 'purchases',
15
- 'customers',
16
- 'guests',
17
- 'subscribers',
18
- 'coupons',
19
- 'rules',
20
- //'carts',
21
- );
22
-
23
-
24
- public static function getClasses()
25
- {
26
- // 1.3 does not have salesrule module
27
- if(!mageFindClassFile('Mage_SalesRule_Model_Coupons')) {
28
- self::$_classes = array_merge(array_diff(
29
- self::$_classes, array('coupons', 'rules')
30
- ));
31
- }
32
-
33
- if (Mage::getStoreConfig('springbot/advanced/send_inventory') == 1) {
34
- self::$_classes[] = 'inventories';
35
- }
36
-
37
- return self::$_classes;
38
- }
39
-
40
-
41
-
42
- protected function _init()
43
- {
44
- $service = new Springbot_Services_Store_Register;
45
-
46
- // Init all stores upfront
47
- foreach ($this->getHelper()->getStoresToHarvest() as $store) {
48
- $service->setStoreId($store->getStoreId())->run();
49
- }
50
-
51
- // Have to clear cache in parent thread after config set
52
- Mage::getConfig()->cleanCache();
53
- Springbot_Log::debug(Mage::getStoreConfig('springbot'));
54
- }
55
-
56
- public function run()
57
- {
58
- Springbot_Log::debug(__METHOD__);
59
-
60
- if ($this->getIsResume()) {
61
- $this->_resumeHarvest();
62
- }
63
- else if ($this->hasClass() && $this->hasRange()) {
64
- $this->_harvest($this->getClass(), $this->getStoreId());
65
- }
66
- else if ($this->hasClass()) {
67
- $this->_segmentHarvest($this->getClass(), $this->getStoreId());
68
- }
69
- else {
70
- $this->_fullHarvest();
71
- }
72
- }
73
-
74
- protected function _fullHarvest()
75
- {
76
- if($this->getHelper()->isHarvestRunning()) {
77
- throw new Exception('Harvest is running already!');
78
- }
79
-
80
- $this->_init();
81
-
82
- //Iterate all stores
83
- foreach ($this->getHelper()->getStoresToHarvest() as $store) {
84
- $this->_harvestId = Mage::helper('combine/harvest')->initRemoteHarvest($store->getStoreId());
85
- $this->_harvestStore($store, self::getClasses(), $this->_harvestId);
86
- }
87
- }
88
-
89
- protected function _resumeHarvest()
90
- {
91
- $harvestCursor = Mage::getStoreConfig('springbot/config/harvest_cursor');
92
-
93
- if (!$harvestCursor) {
94
- Springbot_Log::remote('Resume harvest command received, no valid harvest cursor found: Cursor value: ' . $harvestCursor);
95
- }
96
- else {
97
- list($lastClassCompleted, $partition, $storeId) = explode('|', $harvestCursor);
98
- foreach($this->getHelper()->getStoresToHarvest() as $store) {
99
- $this->_harvestId = Mage::helper('combine/harvest')->initRemoteHarvest($store->getStoreId());
100
- if ($store->getStoreId() == $storeId) {
101
- // Only harvest classes for this store that have not been fully or partially harvested yet
102
- $classesLeft = $this->_getClassesSubset($lastClassCompleted);
103
- $this->_partialHarvestClass($store, $lastClassCompleted, $partition, $this->_harvestId);
104
- $this->_harvestStore($store, $classesLeft, $this->_harvestId);
105
- }
106
- else if ($store->getStoreId() > $storeId) {
107
- // Harvest has not begun for this store so harvest all classes
108
- $this->_harvestStore($store, self::getClasses(), $this->_harvestId);
109
- }
110
- }
111
- }
112
- }
113
-
114
- protected function _partialHarvestClass(Mage_Core_Model_Store $store, $class, $partition, $harvestId)
115
- {
116
- Springbot_Log::debug("Partial harvest started {$store->getStoreId()} | $class | {$harvestId}");
117
- Springbot_Boss::scheduleJob(
118
- 'cmd:harvest',
119
- array(
120
- 's' => $store->getStoreId(),
121
- 'c' => $class,
122
- 'v' => $harvestId,
123
- 'i' => $partition,
124
- ),
125
- Springbot_Services::CATEGORY,
126
- 'default',
127
- $store->getStoreId()
128
- );
129
- }
130
-
131
- protected function _harvestStore(Mage_Core_Model_Store $store, array $classes, $harvestId) {
132
- $this->_logStoreHeader($store);
133
-
134
- $forecastService = new Springbot_Services_Cmd_Forecast;
135
- $forecastService->forecastStore($store->getStoreId(), $this->_harvestId);
136
- $this->_registerInstagramRewrites($store);
137
-
138
- foreach ($classes as $class) {
139
- Springbot_Boss::scheduleJob(
140
- 'cmd:harvest',
141
- array(
142
- 's' => $store->getStoreId(),
143
- 'c' => $class,
144
- 'v' => $harvestId,
145
- ),
146
- Springbot_Services::CATEGORY,
147
- 'default',
148
- $store->getStoreId()
149
- );
150
- Springbot_Boss::scheduleJob(
151
- 'work:report',
152
- array(
153
- 's' => $store->getStoreId(),
154
- 'c' => $class,
155
- 'v' => $harvestId,
156
- ),
157
- Springbot_Services::CATEGORY,
158
- 'default',
159
- $store->getStoreId()
160
- );
161
- }
162
- Springbot_Boss::scheduleJob(
163
- 'store:finalize',
164
- array('s' => $store->getStoreId()),
165
- Springbot_Services::CATEGORY,
166
- 'default',
167
- $store->getStoreId()
168
- );
169
-
170
- }
171
-
172
- private function _registerInstagramRewrites($store) {
173
- $existingRewrite = Mage::getModel('core/url_rewrite')->loadByIdPath("springbot/{$store->getStoreId()}");
174
- if ($existingRewrite->getUrlRewriteId() == null) {
175
- if ($springbotStoreId = $this->getHelper()->getSpringbotStoreId($store->getStoreId())) {
176
- try {
177
- $encodedStoreName = urlencode($store->getFrontendName());
178
- Mage::getModel('core/url_rewrite')
179
- ->setIsSystem(0)
180
- ->setStoreId($store->getStoreId())
181
- ->setOptions('RP')
182
- ->setIdPath('springbot/' . $store->getStoreId())
183
- ->setTargetPath("https://app.springbot.com/i/{$springbotStoreId}/{$encodedStoreName}")
184
- ->setRequestPath('i')
185
- ->save();
186
- }
187
- catch (Exception $e) {
188
- Springbot_Log::debug("Unable to create instagram URL rewrite for store id " . $store->getStoreId());
189
- }
190
- }
191
- }
192
- }
193
-
194
- /**
195
- * Harvests a class segment for a specific store. Possible flags are:
196
- *
197
- * -s store_id, required
198
- * -i _start_:_stop_ will limit the collection to be partitioned - both sides are optional
199
- * -v harvest_id
200
- *
201
- * This will forecast the collection to be harvested, and it will then be split up into
202
- * smaller chunks, each of which will be scheduled.
203
- *
204
- * @param string $key
205
- * @param int $storeId
206
- */
207
- protected function _harvest($key, $storeId)
208
- {
209
- $count = 0;
210
- $keyUpper = ucwords($key);
211
-
212
- Springbot_Log::harvest("Harvesting {$keyUpper}");
213
-
214
- $collection = $this->_getCollection($keyUpper, $storeId);
215
-
216
- $scheduler = Mage::getModel('combine/cron_queue_batch');
217
-
218
- foreach(Mage::helper('combine/harvest')->partitionCollection($collection) as $partition) {
219
- $count++;
220
- $scheduler->schedule(
221
- "harvest:{$key}",
222
- array(
223
- 's' => $storeId,
224
- 'i' => (string) $partition,
225
- 'c' => $key,
226
- 'v' => $this->getHarvestId(),
227
- ),
228
- Springbot_Services::PARTITION,
229
- 'partition', // Partition queue
230
- $storeId
231
- );
232
- //Mage::getModel('core/config')->saveConfig('springbot/config/harvest_cursor', $key . '|' . $partition->fromStart() . '|' . $storeId);
233
- }
234
- $scheduler->insert();
235
-
236
- Springbot_Log::harvest("{$count} partitions created for {$keyUpper}");
237
- }
238
-
239
- protected function _segmentHarvest($key, $storeId)
240
- {
241
- $keyUpper = ucwords($key);
242
- $collection = $this->_getCollection($keyUpper, $storeId);
243
-
244
- Springbot_Log::harvest("Segmenting {$keyUpper}");
245
- $scheduler = Mage::getModel('combine/cron_queue_batch');
246
-
247
- $this->_reportHarvestStartTime($this->getHarvestId(), $storeId, $key);
248
-
249
- $this->getHelper()->forecast($collection, $storeId, $keyUpper, $this->getHarvestId());
250
-
251
- $count = 0;
252
- foreach(Mage::helper('combine/harvest')->partitionCollection($collection, self::SEGMENT_SIZE) as $partition) {
253
- $count++;
254
- $scheduler->schedule(
255
- "cmd:harvest",
256
- array(
257
- 's' => $storeId,
258
- 'c' => $key,
259
- 'i' => (string) $partition,
260
- 'v' => $this->getHarvestId(),
261
- ),
262
- Springbot_Services::SEGMENT,
263
- 'default',
264
- $storeId
265
- );
266
- }
267
- $scheduler->insert();
268
- Springbot_Log::harvest("{$count} segments created for {$key}");
269
- }
270
-
271
- private function _reportHarvestStartTime($harvestId, $storeId, $type)
272
- {
273
- $cronCount = Mage::getModel('combine/cron_count');
274
-
275
- // Create the cron count row for the entity if it doesn't exist already.
276
- $cronCount->increaseCount($storeId, $harvestId, $type, 0);
277
-
278
- $started = $cronCount->getEntityStartTime($storeId, $harvestId, $type);
279
- $params = array(
280
- 'store_id' => $this->getHelper()->getSpringbotStoreId($storeId),
281
- 'type' => $type,
282
- 'started' => $started,
283
- );
284
- $api = Mage::getModel('combine/api');
285
- $payload = $api->wrap('harvest_segments', array($params));
286
- if (!is_null($harvestId)) {
287
- return $api->put("harvests/{$harvestId}", $payload);
288
- }
289
- }
290
-
291
- /**
292
- * @return Varien_Db_Collection_Abstract
293
- */
294
- protected function _getCollection($type, $storeId)
295
- {
296
- Springbot_Log::debug("Building collection $type for partition => {$this->getPartition()}");
297
- $harvestServiceClassName = 'Springbot_Services_Harvest_' . $type;
298
- $harvestServiceObject = new $harvestServiceClassName;
299
- return $harvestServiceObject->getCollection($storeId, $this->getPartition());
300
- }
301
-
302
-
303
- public function getPartition()
304
- {
305
- return new Springbot_Util_Partition($this->getStartId(), $this->getStopId());
306
- }
307
-
308
- public function getHarvestId()
309
- {
310
- return isset($this->_harvestId) ? $this->_harvestId : $this->_data['harvest_id'];
311
- }
312
-
313
- public function getHelper()
314
- {
315
- return Mage::helper('combine/harvest');
316
- }
317
-
318
- /**
319
- * When resuming a harvest, get all class types that have not been fully or partially harvested yet
320
- *
321
- * @param $lastClassCompleted
322
- * @return array
323
- */
324
- private function _getClassesSubset($lastClassCompleted) {
325
- $classesLeft = array();
326
- $foundLastClass = false;
327
- foreach (self::getClasses() as $class) {
328
- if ($foundLastClass) {
329
- $classesLeft[] = $class;
330
- }
331
- if ($class == $lastClassCompleted) {
332
- $foundLastClass = true;
333
- }
334
- }
335
- return $classesLeft;
336
- }
337
-
338
- private function _logStoreHeader(Mage_Core_Model_Store $store)
339
- {
340
- $helper = Mage::helper('combine/store')->setStore($store);
341
-
342
- Springbot_Log::printLine(true);
343
- Springbot_Log::harvest("Harvesting Store {$store->getUrl()} => {$store->getId()}/{$helper->getSpringbotStoreId()}", true);
344
- Springbot_Log::harvest("Harvest ID => {$this->_harvestId}\nGUID => {$helper->getGuid()}\nEmail => {$helper->getAccountEmail()}", true);
345
- Springbot_Log::printLine(true);
346
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
347
 
348
  }
1
  <?php
2
+
3
  class Springbot_Services_Cmd_Harvest extends Springbot_Services
4
  {
5
+ const SEGMENT_SIZE = 2000;
6
+
7
+ protected $_harvestId;
8
+
9
+ // Defines order which entities are harvested during a full harvest
10
+ protected static $_classes = array(
11
+ 'categories',
12
+ 'attributeSets',
13
+ 'customerAttributeSets',
14
+ 'products',
15
+ 'purchases',
16
+ 'customers',
17
+ 'guests',
18
+ 'subscribers',
19
+ 'coupons',
20
+ 'rules',
21
+ //'carts',
22
+ );
23
+
24
+
25
+ public static function getClasses()
26
+ {
27
+ // 1.3 does not have salesrule module
28
+ if (!mageFindClassFile('Mage_SalesRule_Model_Coupons')) {
29
+ self::$_classes = array_merge(array_diff(
30
+ self::$_classes, array('coupons', 'rules')
31
+ ));
32
+ }
33
+
34
+ if (Mage::getStoreConfig('springbot/advanced/send_inventory') == 1) {
35
+ self::$_classes[] = 'inventories';
36
+ }
37
+
38
+ return self::$_classes;
39
+ }
40
+
41
+
42
+ protected function _init()
43
+ {
44
+ $service = new Springbot_Services_Store_Register;
45
+
46
+ // Init all stores upfront
47
+ foreach ($this->getHelper()->getStoresToHarvest() as $store) {
48
+ $service->setStoreId($store->getStoreId())->run();
49
+ }
50
+
51
+ // Have to clear cache in parent thread after config set
52
+ Mage::getConfig()->cleanCache();
53
+ Springbot_Log::debug(Mage::getStoreConfig('springbot'));
54
+ }
55
+
56
+ public function run()
57
+ {
58
+ Springbot_Log::debug(__METHOD__);
59
+
60
+ if ($this->getIsResume()) {
61
+ $this->_resumeHarvest();
62
+ } else if ($this->hasClass() && $this->hasRange()) {
63
+ $this->_harvest($this->getClass(), $this->getStoreId());
64
+ } else if ($this->hasClass()) {
65
+ $this->_segmentHarvest($this->getClass(), $this->getStoreId());
66
+ } else {
67
+ $this->_fullHarvest();
68
+ }
69
+ }
70
+
71
+ protected function _fullHarvest()
72
+ {
73
+ if ($this->getHelper()->isHarvestRunning()) {
74
+ throw new Exception('Harvest is running already!');
75
+ }
76
+
77
+ $this->_init();
78
+
79
+ //Iterate all stores
80
+ foreach ($this->getHelper()->getStoresToHarvest() as $store) {
81
+ $this->_harvestId = Mage::helper('combine/harvest')->initRemoteHarvest($store->getStoreId());
82
+ $this->_harvestStore($store, self::getClasses(), $this->_harvestId);
83
+ }
84
+ }
85
+
86
+ protected function _resumeHarvest()
87
+ {
88
+ $harvestCursor = Mage::getStoreConfig('springbot/config/harvest_cursor');
89
+
90
+ if (!$harvestCursor) {
91
+ Springbot_Log::remote('Resume harvest command received, no valid harvest cursor found: Cursor value: ' . $harvestCursor);
92
+ } else {
93
+ list($lastClassCompleted, $partition, $storeId) = explode('|', $harvestCursor);
94
+ foreach ($this->getHelper()->getStoresToHarvest() as $store) {
95
+ $this->_harvestId = Mage::helper('combine/harvest')->initRemoteHarvest($store->getStoreId());
96
+ if ($store->getStoreId() == $storeId) {
97
+ // Only harvest classes for this store that have not been fully or partially harvested yet
98
+ $classesLeft = $this->_getClassesSubset($lastClassCompleted);
99
+ $this->_partialHarvestClass($store, $lastClassCompleted, $partition, $this->_harvestId);
100
+ $this->_harvestStore($store, $classesLeft, $this->_harvestId);
101
+ } else if ($store->getStoreId() > $storeId) {
102
+ // Harvest has not begun for this store so harvest all classes
103
+ $this->_harvestStore($store, self::getClasses(), $this->_harvestId);
104
+ }
105
+ }
106
+ }
107
+ }
108
+
109
+ protected function _partialHarvestClass(Mage_Core_Model_Store $store, $class, $partition, $harvestId)
110
+ {
111
+ Springbot_Log::debug("Partial harvest started {$store->getStoreId()} | $class | {$harvestId}");
112
+ Springbot_Boss::scheduleJob(
113
+ 'cmd:harvest',
114
+ array(
115
+ 's' => $store->getStoreId(),
116
+ 'c' => $class,
117
+ 'v' => $harvestId,
118
+ 'i' => $partition,
119
+ ),
120
+ Springbot_Services::CATEGORY,
121
+ 'default',
122
+ $store->getStoreId()
123
+ );
124
+ }
125
+
126
+ protected function _harvestStore(Mage_Core_Model_Store $store, array $classes, $harvestId)
127
+ {
128
+ $this->_logStoreHeader($store);
129
+
130
+ $forecastService = new Springbot_Services_Cmd_Forecast;
131
+ $forecastService->forecastStore($store->getStoreId(), $this->_harvestId);
132
+ $this->_registerInstagramRewrites($store);
133
+
134
+ foreach ($classes as $class) {
135
+ Springbot_Boss::scheduleJob(
136
+ 'cmd:harvest',
137
+ array(
138
+ 's' => $store->getStoreId(),
139
+ 'c' => $class,
140
+ 'v' => $harvestId,
141
+ ),
142
+ Springbot_Services::CATEGORY,
143
+ 'default',
144
+ $store->getStoreId()
145
+ );
146
+ Springbot_Boss::scheduleJob(
147
+ 'work:report',
148
+ array(
149
+ 's' => $store->getStoreId(),
150
+ 'c' => $class,
151
+ 'v' => $harvestId,
152
+ ),
153
+ Springbot_Services::CATEGORY,
154
+ 'default',
155
+ $store->getStoreId()
156
+ );
157
+ }
158
+ Springbot_Boss::scheduleJob(
159
+ 'store:finalize',
160
+ array('s' => $store->getStoreId()),
161
+ Springbot_Services::CATEGORY,
162
+ 'default',
163
+ $store->getStoreId()
164
+ );
165
+
166
+ }
167
+
168
+ /**
169
+ * True if the version of Magento currently being rune is Enterprise Edition
170
+ */
171
+ public function isMageEnterprise() {
172
+ return Mage::getConfig ()->getModuleConfig ( 'Enterprise_Enterprise' ) && Mage::getConfig ()->getModuleConfig ( 'Enterprise_AdminGws' ) && Mage::getConfig ()->getModuleConfig ( 'Enterprise_Checkout' ) && Mage::getConfig ()->getModuleConfig ( 'Enterprise_Customer' );
173
+ }
174
+
175
+ /**
176
+ * True if the version of Magento currently being rune is Enterprise Edition
177
+ */
178
+ public function isMageProfessional() {
179
+ return Mage::getConfig ()->getModuleConfig ( 'Enterprise_Enterprise' ) && !Mage::getConfig ()->getModuleConfig ( 'Enterprise_AdminGws' ) && !Mage::getConfig ()->getModuleConfig ( 'Enterprise_Checkout' ) && !Mage::getConfig ()->getModuleConfig ( 'Enterprise_Customer' );
180
+ }
181
+
182
+ /**
183
+ * True if the version of Magento currently being rune is Enterprise Edition
184
+ */
185
+ public function isMageCommunity() {
186
+ return !$this->isMageEnterprise() && !$this->isMageProfessional();
187
+ }
188
+
189
+ private function _registerInstagramRewrites($store)
190
+ {
191
+ // cache the store name to sanitize
192
+ $storeName = $store->getGroup()->getName();
193
+
194
+ // strip out the dot if it exists in store name
195
+ if (strpos($storeName, ".") !== false) {
196
+ $storeName = str_replace('.', '', $storeName);
197
+ }
198
+
199
+ // check if community edition
200
+ if ($this->isMageCommunity()) {
201
+ // check if rewrites already exist
202
+ $existingRewrite = Mage::getModel('core/url_rewrite')->loadByIdPath("springbot/{$store->getStoreId()}");
203
+
204
+ // if they don't...
205
+ if ($existingRewrite->getUrlRewriteId() == null) {
206
+ if ($springbotStoreId = $this->getHelper()->getSpringbotStoreId($store->getStoreId())) {
207
+ try {
208
+ $encodedStoreName = urlencode($storeName);
209
+ Mage::getModel('core/url_rewrite')
210
+ ->setIsSystem(0)
211
+ ->setStoreId($store->getStoreId())
212
+ ->setOptions('RP')
213
+ ->setIdPath('springbot/' . $store->getStoreId())
214
+ ->setTargetPath("https://app.springbot.com/i/{$springbotStoreId}/{$encodedStoreName}")
215
+ ->setRequestPath('i')
216
+ ->save();
217
+ } catch (Exception $e) {
218
+ Springbot_Log::debug("Unable to create instagram URL rewrite for store id " . $store->getStoreId());
219
+ }
220
+ }
221
+ }
222
+ }
223
+
224
+ // check if enterprise edition
225
+ if ($this->isMageEnterprise()) {
226
+ $existingRewrite = Mage::getModel('enterprise_urlrewrite/redirect')->getCollection()
227
+ ->addFieldToFilter('target_path', "https://app.springbot.com/i/{$springbotStoreId}/{$encodedStoreName}")
228
+ ->getFirstItem();
229
+ if (!$existingRewrite->getId()) {
230
+ if ($springbotStoreId = $this->getHelper()->getSpringbotStoreId($store->getStoreId())) {
231
+ try {
232
+ $encodedStoreName = urlencode($store->getGroup()->getName());
233
+
234
+ Mage::getModel('enterprise_urlrewrite/redirect')
235
+ ->setStoreId($store->getStoreId())
236
+ ->setOptions('RP')
237
+ ->setRequestPath('i')
238
+ ->setIdentifier('i')
239
+ ->setTargetPath("https://app.springbot.com/i/{$springbotStoreId}/{$encodedStoreName}")
240
+ ->save();
241
+ } catch (Exception $e) {
242
+ Springbot_Log::debug("Unable to create instagram URL rewrite for store id " . $store->getStoreId());
243
+ }
244
+ }
245
+ }
246
+ }
247
+ }
248
+
249
+ /**
250
+ * Harvests a class segment for a specific store. Possible flags are:
251
+ *
252
+ * -s store_id, required
253
+ * -i _start_:_stop_ will limit the collection to be partitioned - both sides are optional
254
+ * -v harvest_id
255
+ *
256
+ * This will forecast the collection to be harvested, and it will then be split up into
257
+ * smaller chunks, each of which will be scheduled.
258
+ *
259
+ * @param string $key
260
+ * @param int $storeId
261
+ */
262
+ protected function _harvest($key, $storeId)
263
+ {
264
+ $count = 0;
265
+ $keyUpper = ucwords($key);
266
+
267
+ Springbot_Log::harvest("Harvesting {$keyUpper}");
268
+
269
+ $collection = $this->_getCollection($keyUpper, $storeId);
270
+
271
+ $scheduler = Mage::getModel('combine/cron_queue_batch');
272
+
273
+ foreach (Mage::helper('combine/harvest')->partitionCollection($collection) as $partition) {
274
+ $count++;
275
+ $scheduler->schedule(
276
+ "harvest:{$key}",
277
+ array(
278
+ 's' => $storeId,
279
+ 'i' => (string)$partition,
280
+ 'c' => $key,
281
+ 'v' => $this->getHarvestId(),
282
+ ),
283
+ Springbot_Services::PARTITION,
284
+ 'partition', // Partition queue
285
+ $storeId
286
+ );
287
+ //Mage::getModel('core/config')->saveConfig('springbot/config/harvest_cursor', $key . '|' . $partition->fromStart() . '|' . $storeId);
288
+ }
289
+ $scheduler->insert();
290
+
291
+ Springbot_Log::harvest("{$count} partitions created for {$keyUpper}");
292
+ }
293
+
294
+ protected function _segmentHarvest($key, $storeId)
295
+ {
296
+ $keyUpper = ucwords($key);
297
+ $collection = $this->_getCollection($keyUpper, $storeId);
298
+
299
+ Springbot_Log::harvest("Segmenting {$keyUpper}");
300
+ $scheduler = Mage::getModel('combine/cron_queue_batch');
301
+
302
+ $this->_reportHarvestStartTime($this->getHarvestId(), $storeId, $key);
303
+
304
+ $this->getHelper()->forecast($collection, $storeId, $keyUpper, $this->getHarvestId());
305
+
306
+ $count = 0;
307
+ foreach (Mage::helper('combine/harvest')->partitionCollection($collection, self::SEGMENT_SIZE) as $partition) {
308
+ $count++;
309
+ $scheduler->schedule(
310
+ "cmd:harvest",
311
+ array(
312
+ 's' => $storeId,
313
+ 'c' => $key,
314
+ 'i' => (string)$partition,
315
+ 'v' => $this->getHarvestId(),
316
+ ),
317
+ Springbot_Services::SEGMENT,
318
+ 'default',
319
+ $storeId
320
+ );
321
+ }
322
+ $scheduler->insert();
323
+ Springbot_Log::harvest("{$count} segments created for {$key}");
324
+ }
325
+
326
+ private function _reportHarvestStartTime($harvestId, $storeId, $type)
327
+ {
328
+ $cronCount = Mage::getModel('combine/cron_count');
329
+
330
+ // Create the cron count row for the entity if it doesn't exist already.
331
+ $cronCount->increaseCount($storeId, $harvestId, $type, 0);
332
+
333
+ $started = $cronCount->getEntityStartTime($storeId, $harvestId, $type);
334
+ $params = array(
335
+ 'store_id' => $this->getHelper()->getSpringbotStoreId($storeId),
336
+ 'type' => $type,
337
+ 'started' => $started,
338
+ );
339
+ $api = Mage::getModel('combine/api');
340
+ $payload = $api->wrap('harvest_segments', array($params));
341
+ if (!is_null($harvestId)) {
342
+ return $api->put("harvests/{$harvestId}", $payload);
343
+ }
344
+ }
345
+
346
+ /**
347
+ * @return Varien_Db_Collection_Abstract
348
+ */
349
+ protected function _getCollection($type, $storeId)
350
+ {
351
+ Springbot_Log::debug("Building collection $type for partition => {$this->getPartition()}");
352
+ $harvestServiceClassName = 'Springbot_Services_Harvest_' . $type;
353
+ $harvestServiceObject = new $harvestServiceClassName;
354
+
355
+ return $harvestServiceObject->getCollection($storeId, $this->getPartition());
356
+ }
357
+
358
+
359
+ public function getPartition()
360
+ {
361
+ return new Springbot_Util_Partition($this->getStartId(), $this->getStopId());
362
+ }
363
+
364
+ public function getHarvestId()
365
+ {
366
+ return isset($this->_harvestId) ? $this->_harvestId : $this->_data['harvest_id'];
367
+ }
368
+
369
+ public function getHelper()
370
+ {
371
+ return Mage::helper('combine/harvest');
372
+ }
373
+
374
+ /**
375
+ * When resuming a harvest, get all class types that have not been fully or partially harvested yet
376
+ *
377
+ * @param $lastClassCompleted
378
+ *
379
+ * @return array
380
+ */
381
+ private function _getClassesSubset($lastClassCompleted)
382
+ {
383
+ $classesLeft = array();
384
+ $foundLastClass = false;
385
+ foreach (self::getClasses() as $class) {
386
+ if ($foundLastClass) {
387
+ $classesLeft[] = $class;
388
+ }
389
+ if ($class == $lastClassCompleted) {
390
+ $foundLastClass = true;
391
+ }
392
+ }
393
+
394
+ return $classesLeft;
395
+ }
396
+
397
+ private function _logStoreHeader(Mage_Core_Model_Store $store)
398
+ {
399
+ $helper = Mage::helper('combine/store')->setStore($store);
400
+
401
+ Springbot_Log::printLine(true);
402
+ Springbot_Log::harvest("Harvesting Store {$store->getUrl()} => {$store->getId()}/{$helper->getSpringbotStoreId()}", true);
403
+ Springbot_Log::harvest("Harvest ID => {$this->_harvestId}\nGUID => {$helper->getGuid()}\nEmail => {$helper->getAccountEmail()}", true);
404
+ Springbot_Log::printLine(true);
405
+ }
406
 
407
  }
app/code/community/Springbot/Services/Cmd/Update.php CHANGED
@@ -47,7 +47,7 @@ class Springbot_Services_Cmd_Update extends Springbot_Services
47
 
48
  Springbot_Log::info("Install was successful. Clearing cache.");
49
 
50
- Mage::app()->cleanCache();
51
  } catch (Exception $e) {
52
  Springbot_Log::error($e);
53
  }
47
 
48
  Springbot_Log::info("Install was successful. Clearing cache.");
49
 
50
+ Mage::getConfig()->cleanCache();
51
  } catch (Exception $e) {
52
  Springbot_Log::error($e);
53
  }
package.xml CHANGED
@@ -1,7 +1,7 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Springbot</name>
4
- <version>1.4.5.0</version>
5
  <stability>stable</stability>
6
  <license uri="http://opensource.org/licenses/OSL-3.0">Open Software License v3.0 (OSL-3.0)</license>
7
  <channel>community</channel>
@@ -47,11 +47,12 @@
47
  Proclivity to Buy Alerts example: Sally Avalon bought a house recently &#xD;
48
  &#xD;
49
  For support information, features and pricing and more details visit springbot.com </description>
50
- <notes>Added registration of Instagram redirects on harvest</notes>
 
51
  <authors><author><name>Springbot Integrations Team</name><user>Springbot</user><email>magento@springbot.com</email></author></authors>
52
- <date>2015-05-27</date>
53
- <time>07:03:18</time>
54
- <contents><target name="magecommunity"><dir name="Springbot"><dir name="Shadow"><dir name="Block"><dir name="Action"><file name="View.php" hash="f2fc0d66474305766335aa37a7bbcd72"/></dir><file name="Async.php" hash="0d203fe1a722f7045029613a0e97bfc2"/></dir><dir name="Controller"><file name="Action.php" hash="5dc41d4ddf12a468fb23fc757ef49a95"/></dir><dir name="Helper"><file name="Data.php" hash="82089d4cfecee69628ae9d627ad2de0c"/><file name="Prattler.php" hash="e2658c19a182bd5cc9948eccc024ad21"/></dir><dir name="Model"><dir name="Listeners"><file name="Observer.php" hash="e5b827a61c3b04fdb73e38a424d167eb"/></dir></dir><dir name="controllers"><file name="ActionController.php" hash="008ffa5ad753c092650b5686ea24fffe"/><file name="IndexController.php" hash="2a540da33a64c7307af981abca0d4558"/></dir><dir name="etc"><file name="config.xml" hash="b1717e37375197b449c0736adff99d87"/></dir></dir><dir name="Services"><dir name="Cmd"><file name="Forecast.php" hash="efaeb6ca5b2667b30929b223cddfb044"/><file name="Halt.php" hash="85c85ae257e9b86d0fb10fb46060fea3"/><file name="Harvest.php" hash="290fd2d9488bdcffb5abda5482695b47"/><file name="Healthcheck.php" hash="b1c26cd3e54c303c7c6d73e5accf2e18"/><file name="Update.php" hash="d8d1950c85930083009096a3849054a7"/></dir><dir name="Harvest"><file name="AttributeSets.php" hash="95610f6fd6323e0473589c01051781f2"/><file name="Carts.php" hash="ecaf8583962fc63e49cf069d73eb22bf"/><file name="Categories.php" hash="acfe9c8dc9a02992a058015e8aaf9311"/><file name="Coupons.php" hash="5190a1669b0b4ef10222843451e9dc36"/><file name="CustomerAttributeSets.php" hash="7c3a0bed9f841900f692f5a17e7c6e8f"/><file name="Customers.php" hash="3d57c8238976554081176e249f2e7f4b"/><file name="Guests.php" hash="e0f6d955ba9bc3f020cc95f3083913ad"/><file name="Inventories.php" hash="d5a78ead8d37188df6286d4697b25f76"/><file name="Products.php" hash="087d01eddc45b4a30c4aa7dba5cc5dce"/><file name="Purchases.php" hash="a3d76ae1a2ea514fcce5ca2607ddf5a4"/><file name="Rules.php" hash="355ecad7266987a391ceca9d2eb0244f"/><file name="Subscribers.php" hash="a8b0d7197580bd9f3de7b10f9c6dc7ca"/></dir><file name="Harvest.php" hash="af3b9604c7b9d7da76cffe846dc34d70"/><dir name="Log"><file name="Installer.php" hash="342706712eb2731ea27aeec993fd2d7f"/></dir><dir name="Post"><file name="Attribute.php" hash="e0a283984de84bc16d5f89a893a8dc83"/><file name="AttributeSet.php" hash="c8f66b5a189125a63e834196402b709a"/><file name="Cart.php" hash="26d33fb887417e46d3ba3e46badc04a3"/><file name="Category.php" hash="0645d5eb9bb790f25e29666bc3a703e0"/><file name="Coupon.php" hash="6b8b49327874ce431f6100b6917ba21f"/><file name="Customer.php" hash="d2f018919afdb7d49617e6b9ac7d2760"/><file name="Guest.php" hash="3b7ee9f0e274340713d8c4302d01b361"/><file name="Inventory.php" hash="a003e45720f7527d29a5678596e4e843"/><file name="Json.php" hash="86a5f26aa5367d8c4c66d278e4c02546"/><file name="Jsonstring.php" hash="9dfb5761d1a7835bf35040a073fa8fc4"/><file name="Product.php" hash="5ec9cbf29df156da09d17e1b6526f53d"/><file name="Purchase.php" hash="0b924c8e5d8f7018eb335ba9fb6d63dd"/><file name="Rule.php" hash="fa038fa414a176d960ed6470c7b7b4cd"/><file name="Subscriber.php" hash="88c5dbcaae805866595217eedbbf5f34"/></dir><file name="Post.php" hash="df9bf80bee670259f3a54e3308d0dbd3"/><file name="Registry.php" hash="d54afde887b72e79ae36ab11766ec5c9"/><dir name="Store"><file name="Finalize.php" hash="e840d2c2dbe813f259b92feba8173b52"/><file name="Register.php" hash="72ae8d75c11dc1c0635c799e284ecb2d"/></dir><dir name="Tasks"><file name="ClearCache.php" hash="17ee105f79d9a71c13ecdd6de2787cdc"/><file name="ClearJobs.php" hash="380740a54aa4d79a89d2c67f06724a31"/><file name="ClearStores.php" hash="33e216186c56bde7e558cd828e90dda0"/><file name="Debug.php" hash="41a522394c2b9375393d81bb3ab206cc"/><file name="DeleteJob.php" hash="be2a2be88290cc3e9bc54c59e22254b5"/><file name="DeliverEventLog.php" hash="18ffe64d10e90819b5e141fc471c0951"/><file name="Forecast.php" hash="caaf18be7fe387a4eba5a77eb0db2c12"/><file name="GetLog.php" hash="d850bba9f90b134f884d8d7a36730a26"/><file name="Harvest.php" hash="f71f97f078a081425c8848ba435d3b16"/><file name="HarvestInventory.php" hash="570d3aba5ac28b397d601d21f070415e"/><file name="Healthcheck.php" hash="63fdc080533ab8dff8d0949dd6ef4a3b"/><file name="Jobs.php" hash="9df9611445f9ab4a7a6d4b4e79f6b681"/><file name="KillHarvest.php" hash="a757f35956e4565b597522168109071c"/><file name="LaunchFullHarvest.php" hash="e5271dbfa422a90f4c4dda7362cb68f3"/><file name="LaunchPartialHarvest.php" hash="9c5aa7792fe9a3b98f9de9f4b59e3866"/><file name="PackageUpdate.php" hash="cb88473eea4e15760a4fa7c0aba83ddb"/><file name="PostItem.php" hash="54b4bac0b26b8b0e06df1d6da1ea7a91"/><file name="RegisterStores.php" hash="c054ef31b9c28efc5a18ee2ddf31c512"/><file name="ResetRetries.php" hash="bf00fe101b69a78955dc9a6d054e7ba7"/><file name="ResumeHarvest.php" hash="c9ba7b36e2b16dd1d1d947fc83a0ce5e"/><file name="Run.php" hash="c6892d3f812d5085b284d3501211bd5d"/><file name="SetVar.php" hash="93a0afb5e5c32536f430fc3b58b72995"/><file name="UnlockJobs.php" hash="9bf4b725445897ab2842bcb97e344e0c"/><file name="ViewConfig.php" hash="cc60cbc3d2212576301b13b0b286c618"/></dir><file name="Tasks.php" hash="173bdc5c586a0f5d41528cdbd2fff70b"/><dir name="Update"><file name="Abstract.php" hash="7b9a1d36b4486e250587820731b7fb7c"/><file name="Connect.php" hash="3e4366a42e563ec3406a0fcb9a5f77bf"/><file name="Downloader.php" hash="934ef5788acb45ce94e0a32c1d705df1"/><file name="Installer.php" hash="a09ec2e9f7bbf12c117c8950e46072b0"/><file name="Package.php" hash="60ec01b28a2ded244bf6d4a971918bd5"/></dir><dir name="Work"><file name="Cleanup.php" hash="100fef130220e91dc255b5e0f30c37f1"/><file name="Manager.php" hash="9dbdfb717865b7724f4ffd38b3ec866e"/><file name="Report.php" hash="8a3eec618fe3b04a3514dc302c4c5a0f"/><file name="Restart.php" hash="d55e811fbba86348890b4047fa5a579f"/><file name="Runner.php" hash="c0ced9ce83e5e51b4ba5f10bb46760af"/><file name="Stop.php" hash="db97407b43396f0adf44a2354a23a0a5"/></dir></dir><dir name="Util"><file name="Caller.php" hash="4fcc265eb1a58fed5c3b404ec864514b"/><file name="Categories.php" hash="1292843306c38d9593902616e04320a6"/><dir name="Log"><file name="Rollover.php" hash="6ad4bd93adb7e906c1de5a05a2871ea8"/></dir><file name="Logger.php" hash="59abca8cb07ef933ca8ef2ac824591b5"/><file name="Partition.php" hash="b9296b086003ba58ba12f8b8b0373c50"/></dir><file name="Services.php" hash="b9f0a869c089aa0ce4e111813827e0b0"/><dir name="Bmbleb"><dir name="Block"><dir name="Adminhtml"><file name="Auth.php" hash="7dc661bbe9ec85f700a22b319981114d"/><dir name="Bmbleb"><dir name="Login"><file name="Form.php" hash="0af1ff701cb657eea5ea8f874e3affc1"/></dir><file name="Login.php" hash="7232e8225f5b21de5675c0d84cb452bd"/></dir><file name="Connected.php" hash="833cef8e351f5efa7a4d104b1c51ca7f"/><file name="Help.php" hash="b280b3292ed778140b751b6426ef56fb"/><dir name="Index"><file name="Messages.php" hash="1e247e31194447de32e54f49dafc3ccc"/><file name="Terms.php" hash="739e5a9ebe204f1f9ac433557c994ae6"/></dir><file name="Index.php" hash="eb7bbef5fa26a53748596e145c3677c4"/><dir name="Jobs"><file name="Grid.php" hash="67255d982ac3d50b38d7a2a525c2b922"/><file name="Status.php" hash="f1b197bf6fdc392bed93ff0734a54ad6"/></dir><file name="Jobs.php" hash="84801c6008802496e168e763a7e6d71f"/><file name="Login.php" hash="2e4d8baead482d404ed40f7d5f3d902c"/><file name="Logout.php" hash="b75af51891b751b9d070e1e784dd6914"/><file name="Logs.php" hash="686e958b553c1e3fcf74841eab30fffb"/><file name="Notifications.php" hash="7d078ddf2a7cf1291f04912576560d3e"/><file name="Problems.php" hash="c2fd654e2c4c3a6dd9fbb083d0995e5e"/><file name="Status.php" hash="9b67a20f0ee00608029d24850cefda4d"/><file name="Tabs.php" hash="6f93d5c6bd5208a99637c06118c6c630"/></dir></dir><dir name="Helper"><file name="Account.php" hash="c41f40e6f58abd3b8486e0e92cc079d8"/><file name="Data.php" hash="dca14b137de1e2734a377ca645eeddbe"/><file name="PluginStatus.php" hash="bd8bbc0578826490d0dc1ff4c6354aa1"/></dir><dir name="Model"><file name="Bmbleb.php" hash="700d11c3006f2dcd2e80cd8bbbab15f9"/><file name="Status.php" hash="9409d26c7884be6b8075ba97dbf71f78"/><file name="Sync.php" hash="a800b6064a88f37957392cd967f2b3cb"/></dir><dir name="controllers"><dir name="Adminhtml"><file name="HelpController.php" hash="087e7868dafe9dd2df89a642d405424a"/><file name="IndexController.php" hash="61a95eed027fcb7a7179485288f1b05f"/><file name="JobsController.php" hash="4e912a8fafd2f58235cb2299a83a128b"/><file name="LogsController.php" hash="20a0ce2f584f08480399b7a5ecbd9207"/><file name="ProblemsController.php" hash="9753f4b2d3e7d4873e4bd92b5b2b6aaf"/><file name="SettingsController.php" hash="f75a7a8ef28a296cbd46b04ae9dd5539"/></dir><file name="HelpController.php" hash="2df4608a957f151bf1d01dbde2113680"/><file name="IndexController.php" hash="ea5fa5e2b305f46b222cb2fc2a44f6a5"/><file name="LoginController.php" hash="152dcd56ce27b58ea5e003fe34830767"/><file name="LogoutController.php" hash="140c9d32f5557aa1169fd1b85cd5cc9f"/></dir><dir name="etc"><file name="config.xml" hash="45f7218274a3eed0086761942a95f27b"/></dir></dir><file name="Boss.php" hash="056f9eff87e5f7e76eab289596309829"/><file name="Cli.php" hash="6aef5d4fd8fbda6351338ab313d930ce"/><file name="Log.php" hash="5ab61d7cf21805adb8f826f83b9bf7b1"/><dir name="Combine"><dir name="Helper"><file name="Attributes.php" hash="5fb06e7cc89bb710039a79fb16e2a998"/><file name="Cart.php" hash="07ce5f461ecded3b9b00ed5c30faa266"/><file name="Data.php" hash="bba3915380a71aaacacc306f10396ef1"/><file name="Harvest.php" hash="08fd1b330802731bf82358fd05789173"/><file name="Parser.php" hash="480f573160e775654555022a5fee1450"/><file name="Redirect.php" hash="085d1e1b428218f290c690f2cbe42d6d"/><file name="Store.php" hash="8db94d157d7e497e7612844da43a6c11"/><file name="Trackable.php" hash="a042cb0d176730ec87353b1c5c6d21f7"/></dir><dir name="Model"><file name="Action.php" hash="6375461263bdf7fe26e71235d2449c21"/><file name="Api.php" hash="978590ad36b4d6ad6b3a14742f8bb31c"/><dir name="Cron"><file name="Count.php" hash="57552740b6ffdd9a4e879191a51043b0"/><dir name="Manager"><file name="Status.php" hash="aeb4445bc2d4b1b7e0e19c09172f0483"/></dir><dir name="Queue"><dir name="Batch"><file name="Row.php" hash="25f4ed809a9190f5d41c6c210cd8a537"/></dir><file name="Batch.php" hash="fa905d2781aab5881e881e3b12d25e0c"/></dir><file name="Queue.php" hash="455babdbaa841a12b74a3485871e7eeb"/><file name="Worker.php" hash="8b5040f1c5c5b3221542e739dc951de7"/></dir><file name="Cron.php" hash="40f2bc9634610f4ed5464de48630ce16"/><dir name="File"><file name="Io.php" hash="6d1f79eaf45897bf0525b0f3f3ac69d2"/><file name="Path.php" hash="24900b670c07fcdc4e54bae585f20002"/></dir><dir name="Harvest"><file name="AttributeSets.php" hash="479dfb30912b74183b396fa4e62323b2"/><file name="Carts.php" hash="0b303b2b7d4458a9a0cbf0653b9d660f"/><file name="Categories.php" hash="fd5f13ad449a320616569f64c82327ff"/><file name="Coupons.php" hash="14112f9063bbf20cea7ff3649f238524"/><file name="CustomerAttributeSets.php" hash="044f426226165ee86b0f822c00ec7712"/><file name="Customers.php" hash="c7850418a39abf09c10fbfafcb96f8e1"/><file name="Guests.php" hash="3685b3220b724e518dc83daad015577f"/><file name="Inventories.php" hash="15dc9f8c38dd7ab626eb3154c6b1b0f2"/><file name="Products.php" hash="da471abcc04837391b5270464164aefd"/><file name="Purchases.php" hash="427d38d1f6579f63730aa6bdf6b7bba4"/><file name="Rules.php" hash="fd1789174225c4ed6ad1e1137fe2aee5"/><file name="Subscribers.php" hash="e499e299612a6e2ce07ee19228cf43c5"/></dir><file name="Harvest.php" hash="14f7ffc01ad04b2d78d313f55ab765c2"/><dir name="Mysql4"><dir name="Action"><file name="Collection.php" hash="830a7db2ea307d594fe945701654d883"/></dir><file name="Action.php" hash="5b18cc8842c83d981575b7b2de496f66"/><dir name="Cron"><file name="Count.php" hash="acbbb7ec28afbbe98101f5d114cb30b3"/><dir name="Queue"><file name="Collection.php" hash="b26806c9e7cefd052bb784f5a6ce814c"/></dir><file name="Queue.php" hash="4add10644bfc94b88ef5042b23c82ae7"/></dir><dir name="Redirect"><file name="Collection.php" hash="3bbe4f8729c603f8d8131154a0a117c1"/><dir name="Order"><file name="Collection.php" hash="88c0cfcce31b0eed8c035dee4e7e86df"/></dir><file name="Order.php" hash="852bea330edac3372ec5c168111301a8"/></dir><file name="Redirect.php" hash="842e4ba35c6b049c8eaa64704588ca76"/><file name="Setup.php" hash="3fdec335980846a4c3adbc6f4e3478eb"/><dir name="Trackable"><file name="Collection.php" hash="8799c5bf630d267b551cf9dba986cbb0"/></dir><file name="Trackable.php" hash="b38749697b641874b42dceae38ab4a30"/></dir><dir name="Parser"><file name="AttributeSet.php" hash="9ae4013d42da5de0e9c8492fb29cd8d6"/><file name="Category.php" hash="0c3c71ff784307b9120d7cf781005069"/><file name="Coupon.php" hash="a66b3d4c8397610863cd74e35cbd5b62"/><file name="Customer.php" hash="99233c3da1eb28f1ec15e20e837d764a"/><file name="CustomerAttributeSet.php" hash="1b51f9300a9ee102872ff9d7f9bbccbc"/><file name="Guest.php" hash="002c900d3722f761e3e3ac63be84014f"/><file name="Inventory.php" hash="6f9ea827ee304f72b13bce3d7316efbc"/><file name="Product.php" hash="7e0fa4a55ca45fc876e588442cce72eb"/><dir name="Purchase"><file name="Item.php" hash="ca7facc8c81504ea990fdb1feeba64dd"/></dir><file name="Purchase.php" hash="ec3929b9e1a0df0e5816c1558391dcdc"/><dir name="Quote"><file name="Item.php" hash="37cbc74a49a16e67e02f421978e1741f"/></dir><file name="Quote.php" hash="fa0e008c67f15d1a4c7866a407aaaeaf"/><file name="Rule.php" hash="0a0f70172aeff0e5157f2f1652c3ae09"/><file name="Subscriber.php" hash="57ab5db177d4a37f30865cb127912631"/></dir><file name="Parser.php" hash="2e10487d6e00e3d2c3ec075c68e25d52"/><dir name="Redirect"><file name="Order.php" hash="5ca85ca596ef6e45468c8a12cee72614"/></dir><file name="Redirect.php" hash="05dddaa1e9c17c4c79d70d63b56ed454"/><dir name="Resource"><file name="Abstract.php" hash="61dfb714347611c6cf934b1d2360bfe3"/><dir name="Action"><file name="Collection.php" hash="22e278b8cbc5d18d4faa48c4f224d145"/></dir><file name="Action.php" hash="83b00531db5ec3a51ea7c0fc65a1d083"/><dir name="Cron"><dir name="Count"><file name="Collection.php" hash="c5cb4ab406c1d008c1bc22bb95b3ba28"/></dir><file name="Count.php" hash="6a356b5d92b509945c4567f479b9bfdd"/><dir name="Queue"><file name="Collection.php" hash="e6655bdbc5920eeb9178adfcb905ac36"/></dir><file name="Queue.php" hash="f9eae90970e4d935b5e5335c8e57e71b"/></dir><file name="Debug.php" hash="976156dc1ff783a26174bdac79decde2"/><dir name="Redirect"><file name="Collection.php" hash="df6662f064b3170aab46d69d42c514a3"/><dir name="Order"><file name="Collection.php" hash="162359ed9499b6f976f5c341fd0585c3"/></dir><file name="Order.php" hash="7ea4477380a5215dc0efe561ede359d9"/></dir><file name="Redirect.php" hash="d239af442388bb9fa80db81a7fc43711"/><file name="Setup.php" hash="0405c44c124f19619ccc9f429d781d44"/><dir name="Trackable"><file name="Collection.php" hash="6f060c3537b49710302e38e881885a69"/></dir><file name="Trackable.php" hash="764b0d21c492dd69b9f85ae3c647666e"/></dir><dir name="System"><dir name="Config"><dir name="Source"><file name="Harvestertype.php" hash="4d9f7ffa7f49ecaa2e99df86f62e646c"/><file name="LogFormat.php" hash="828680dafe5a7042221900cb6d9dfa17"/><file name="LogLevel.php" hash="b86c793ca04205f045efd9ea42d02a10"/><file name="Stability.php" hash="830e5bc4e8ce9657221224dbaf99cee6"/><file name="UrlType.php" hash="28f9a5bc024afe5526685d429a751ad8"/></dir></dir></dir><file name="Trackable.php" hash="23eb5e95bde001dbd465a1bc96baa430"/></dir><dir name="etc"><file name="adminhtml.xml" hash="794fc8a1d67ac3e6b5d71c707a0c7cad"/><file name="config.xml" hash="565a16cd9352a1538073bb282f7de7fc"/><file name="system.xml" hash="48a3a0199a5328bc44950c5abcdc2de6"/></dir><dir name="sql"><dir name="combine_setup"><file name="mysql4-install-1.0.0.70.php" hash="425be4a54012cd64753ee1a216255d67"/><file name="mysql4-upgrade-1.0.0.70-1.0.0.84.php" hash="e51deaff9e65f43483ab00573605329d"/><file name="mysql4-upgrade-1.0.0.84-1.0.0.88.php" hash="89bd8a585c0d351aae6838ace48f608d"/><file name="mysql4-upgrade-1.0.0.88-1.2.0.0.php" hash="4779a5072d23ebdb27177de0dfd19f5d"/><file name="mysql4-upgrade-1.2.0.0-1.2.0.1.php" hash="01a7ef2466b9f676884db4d7a7c562a9"/><file name="mysql4-upgrade-1.2.0.1-1.2.1.0.php" hash="dbba441ac757db26289f21443a948f6b"/><file name="mysql4-upgrade-1.3.9.9-1.4.0.0.php" hash="5b5e0602bdcd48263bdf4e25b17d95b5"/></dir></dir></dir><dir name="BoneCollector"><dir name="Model"><file name="HarvestAbstract.php" hash="fecaefad7d4fc279e3a54b4c8cac54ae"/><dir name="HarvestAttribute"><file name="Observer.php" hash="26d016ab4fae05872aa46b6abdc3e562"/></dir><dir name="HarvestCart"><file name="Observer.php" hash="ae4c5e0cf7b764419ffb36710388ecfd"/></dir><dir name="HarvestCategory"><file name="Observer.php" hash="7ddb0b58b301863c1e46dd2db3628db8"/></dir><dir name="HarvestCustomer"><file name="Observer.php" hash="a20e21f1033dc35025ab9b402d6574bc"/></dir><dir name="HarvestInventoryItem"><file name="Observer.php" hash="b6005e059d893ccc4432ea5c22c55a8a"/></dir><dir name="HarvestProduct"><file name="Observer.php" hash="73eac87240083709cb5c746b81afe44f"/></dir><dir name="HarvestPurchase"><file name="Observer.php" hash="f253527e8f98c795a064c2636530ed15"/></dir><dir name="HarvestRule"><file name="Observer.php" hash="49f369f960101ec66458f8dbe7972e40"/></dir><dir name="HarvestSubscriber"><file name="Observer.php" hash="5b64106296e9d0045610c69ed0c9be4b"/></dir></dir><dir name="etc"><file name="config.xml" hash="b1a43d80a3326ef2c26f20660d7f0a3b"/></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Springbot.xml" hash="69a4e2c056502cd8539b4f66a2c8b1bc"/></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="bmbleb.xml" hash="aa390e236576f79375b407262961043e"/></dir><dir name="template"><dir name="bmbleb"><file name="auth.phtml" hash="bf509b53c49cd69ec3ea60e3effe69c3"/><file name="dashboard_loggedout.phtml" hash="19281143b19a544d4e3072dc754ada2d"/><dir name="help"><file name="index.phtml" hash="e9d3f11c623c735c3e699e406ff9e0e7"/></dir><dir name="index"><file name="messages.phtml" hash="fcbbb47d2cc30c493ed2316a8b888f5d"/><file name="terms.phtml" hash="dfff1182d2fe7d8eee69b9b302c4cbc7"/></dir><file name="index.phtml" hash="acbe2c052259293901fea4635b7a66bf"/><dir name="jobs"><file name="status.phtml" hash="77f0b0ae7c3c6c42031675cfc959e270"/></dir><file name="jobs.phtml" hash="961ac83f56bf8703dbc433894da4933e"/><file name="login.phtml" hash="0a1a20dfaffe8646bb56323ab811d46a"/><file name="logout.phtml" hash="09b92790c5e124a01086d6929ed7e8de"/><dir name="logs"><file name="index.phtml" hash="17e773a761a24e292b09fe7da1bd7662"/></dir><file name="notifications.phtml" hash="45f8767a090a4f7a7e177151bbc43f4f"/><dir name="problems"><file name="index.phtml" hash="2027d07eed8848a4ed8e801d67072796"/></dir><file name="status.phtml" hash="1acc630a6549b234bc1fa5923e04b8ce"/><file name="tabs.phtml" hash="778b686fb073a8aeb973db3bfb0302aa"/></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="shadow.xml" hash="3f29bebbcf7e42c57dcac9150c6b7d68"/></dir><dir name="template"><dir name="shadow"><file name="async.phtml" hash="af147801ed74d45bb0580b0bb69ce0fd"/><file name="conversion.phtml" hash="3d46a8930d9658a24a77ff34d52e40eb"/></dir></dir></dir></dir></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="bmbleb"><file name="bmbleb.css" hash="d929b5f42085c25b86101379f286f55f"/><dir name="images"><file name="arrows_up-down-large.png" hash="72c27995e1ab1d182891dad0a4d1dae2"/><file name="bmb-ctl.png" hash="de59a694a82b8699560df5146b2e315f"/><file name="check.png" hash="126f33ed483549e79a16186b7499c190"/><file name="grn-bg.png" hash="f681a524e2b4561dbe94152a2d24d60b"/><file name="h3-bg.png" hash="b93df0b0bdba8e8f6e0a07cc31fcc180"/><file name="icon-alert.png" hash="ac2e70efdcebc3813222d0d3ee62a6d9"/><file name="icon-bmbleb.png" hash="fb5574b5e63ee33b84eee26b3d8ef8e3"/><file name="icon-insights.png" hash="725fd29fe1b705e358c9080408693d3d"/><file name="icon-status.png" hash="bd13429f23166a6d431739010ea1b2cd"/><file name="left-ico1.png" hash="7d188f5e6021569750756f58067f0a3b"/><file name="left-ico2.png" hash="d2f6379a73290a8ffa4cb3e19a809d25"/><file name="left-ico3.png" hash="73bc75f7a746e54a75f14eda7a28a6b9"/><file name="left-ico4.png" hash="1da2c26187fed26b6c61599682b2dc4b"/><file name="left-ico5.png" hash="ada61cb32805f2cb8e8dace46361613e"/><file name="left-ico6.png" hash="1e62822267f72589ffa0771352a002da"/><file name="left-ico7.png" hash="16118412d581f0c83ce45c44f62f25a1"/><file name="left-ico8.png" hash="c7de2fe523c892b432b575648cc05631"/><file name="left-ico_demographics.png" hash="3fe23a2dea68f6c65114f248a8bdaa5e"/><file name="login-icn-b.png" hash="64e72070f595e215ece79736ac77ee2f"/><file name="login-icn.png" hash="6142cc2fc8ee2d1c40bf3c8f9ac1fa85"/><file name="logo.png" hash="8fb783f7d68fca3914123f56b8c066a4"/><file name="orng-bg.png" hash="074a6912ca2a139df537e3d15b6bc9b2"/><file name="plugin_dashboard_syncing.jpg" hash="8511648541f6f1b96ff1c53dda3a439b"/><file name="register.png" hash="f73fe51cf7df27ab11089385fa50714e"/><file name="registration-bg-25.png" hash="9d2cf77619cc8fce3ae4d44b0aae30c1"/><file name="registration-bg-50.png" hash="99942fdc8c3f88b0d4b09f87c9e39045"/><file name="registration-bg.png" hash="96365b39495e56ffe491dd9930fe221d"/><file name="spinner.gif" hash="add667817f25bce331a213ab3cc9621f"/><file name="springbot-ctl.png" hash="de59a694a82b8699560df5146b2e315f"/><file name="submit-btn-bg.png" hash="d98aa287b7b73dad9f780b22cb53fbdb"/><file name="sync_icon.png" hash="cb12f2e8943c8e324e3456375f953c86"/><file name="white-check.png" hash="126f33ed483549e79a16186b7499c190"/></dir></dir></dir></dir></dir></target><target name="mageweb"><dir name="shell"><file name="springbot.php" hash="80f11ae5dc3839faf9d99df8c5a071d1"/></dir></target></contents>
55
  <compatible/>
56
  <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
57
  </package>
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Springbot</name>
4
+ <version>1.4.6.0</version>
5
  <stability>stable</stability>
6
  <license uri="http://opensource.org/licenses/OSL-3.0">Open Software License v3.0 (OSL-3.0)</license>
7
  <channel>community</channel>
47
  Proclivity to Buy Alerts example: Sally Avalon bought a house recently &#xD;
48
  &#xD;
49
  For support information, features and pricing and more details visit springbot.com </description>
50
+ <notes>Fix for ACL issues after SUPEE-6285 patch&#xD;
51
+ Fix for creating enterprise URL rewrites</notes>
52
  <authors><author><name>Springbot Integrations Team</name><user>Springbot</user><email>magento@springbot.com</email></author></authors>
53
+ <date>2015-08-10</date>
54
+ <time>17:39:19</time>
55
+ <contents><target name="magecommunity"><dir name="Springbot"><dir name="Shadow"><dir name="Block"><dir name="Action"><file name="View.php" hash="f2fc0d66474305766335aa37a7bbcd72"/></dir><file name="Async.php" hash="0d203fe1a722f7045029613a0e97bfc2"/></dir><dir name="Controller"><file name="Action.php" hash="5dc41d4ddf12a468fb23fc757ef49a95"/></dir><dir name="Helper"><file name="Data.php" hash="82089d4cfecee69628ae9d627ad2de0c"/><file name="Prattler.php" hash="e2658c19a182bd5cc9948eccc024ad21"/></dir><dir name="Model"><dir name="Listeners"><file name="Observer.php" hash="e5b827a61c3b04fdb73e38a424d167eb"/></dir></dir><dir name="controllers"><file name="ActionController.php" hash="008ffa5ad753c092650b5686ea24fffe"/><file name="IndexController.php" hash="2a540da33a64c7307af981abca0d4558"/></dir><dir name="etc"><file name="config.xml" hash="b1717e37375197b449c0736adff99d87"/></dir></dir><dir name="Services"><dir name="Cmd"><file name="Forecast.php" hash="efaeb6ca5b2667b30929b223cddfb044"/><file name="Halt.php" hash="85c85ae257e9b86d0fb10fb46060fea3"/><file name="Harvest.php" hash="995dae50e1fd2411d3a1a0f86fb6f521"/><file name="Healthcheck.php" hash="b1c26cd3e54c303c7c6d73e5accf2e18"/><file name="Update.php" hash="08149ecedc0ac3f02e5ca86fa1eec6c9"/></dir><dir name="Harvest"><file name="AttributeSets.php" hash="95610f6fd6323e0473589c01051781f2"/><file name="Carts.php" hash="ecaf8583962fc63e49cf069d73eb22bf"/><file name="Categories.php" hash="acfe9c8dc9a02992a058015e8aaf9311"/><file name="Coupons.php" hash="5190a1669b0b4ef10222843451e9dc36"/><file name="CustomerAttributeSets.php" hash="7c3a0bed9f841900f692f5a17e7c6e8f"/><file name="Customers.php" hash="3d57c8238976554081176e249f2e7f4b"/><file name="Guests.php" hash="e0f6d955ba9bc3f020cc95f3083913ad"/><file name="Inventories.php" hash="d5a78ead8d37188df6286d4697b25f76"/><file name="Products.php" hash="087d01eddc45b4a30c4aa7dba5cc5dce"/><file name="Purchases.php" hash="a3d76ae1a2ea514fcce5ca2607ddf5a4"/><file name="Rules.php" hash="355ecad7266987a391ceca9d2eb0244f"/><file name="Subscribers.php" hash="a8b0d7197580bd9f3de7b10f9c6dc7ca"/></dir><file name="Harvest.php" hash="af3b9604c7b9d7da76cffe846dc34d70"/><dir name="Log"><file name="Installer.php" hash="342706712eb2731ea27aeec993fd2d7f"/></dir><dir name="Post"><file name="Attribute.php" hash="e0a283984de84bc16d5f89a893a8dc83"/><file name="AttributeSet.php" hash="c8f66b5a189125a63e834196402b709a"/><file name="Cart.php" hash="26d33fb887417e46d3ba3e46badc04a3"/><file name="Category.php" hash="0645d5eb9bb790f25e29666bc3a703e0"/><file name="Coupon.php" hash="6b8b49327874ce431f6100b6917ba21f"/><file name="Customer.php" hash="d2f018919afdb7d49617e6b9ac7d2760"/><file name="Guest.php" hash="3b7ee9f0e274340713d8c4302d01b361"/><file name="Inventory.php" hash="a003e45720f7527d29a5678596e4e843"/><file name="Json.php" hash="86a5f26aa5367d8c4c66d278e4c02546"/><file name="Jsonstring.php" hash="9dfb5761d1a7835bf35040a073fa8fc4"/><file name="Product.php" hash="5ec9cbf29df156da09d17e1b6526f53d"/><file name="Purchase.php" hash="0b924c8e5d8f7018eb335ba9fb6d63dd"/><file name="Rule.php" hash="fa038fa414a176d960ed6470c7b7b4cd"/><file name="Subscriber.php" hash="88c5dbcaae805866595217eedbbf5f34"/></dir><file name="Post.php" hash="df9bf80bee670259f3a54e3308d0dbd3"/><file name="Registry.php" hash="d54afde887b72e79ae36ab11766ec5c9"/><dir name="Store"><file name="Finalize.php" hash="e840d2c2dbe813f259b92feba8173b52"/><file name="Register.php" hash="72ae8d75c11dc1c0635c799e284ecb2d"/></dir><dir name="Tasks"><file name="ClearCache.php" hash="17ee105f79d9a71c13ecdd6de2787cdc"/><file name="ClearJobs.php" hash="380740a54aa4d79a89d2c67f06724a31"/><file name="ClearStores.php" hash="33e216186c56bde7e558cd828e90dda0"/><file name="Debug.php" hash="41a522394c2b9375393d81bb3ab206cc"/><file name="DeleteJob.php" hash="be2a2be88290cc3e9bc54c59e22254b5"/><file name="DeliverEventLog.php" hash="18ffe64d10e90819b5e141fc471c0951"/><file name="Forecast.php" hash="caaf18be7fe387a4eba5a77eb0db2c12"/><file name="GetLog.php" hash="d850bba9f90b134f884d8d7a36730a26"/><file name="Harvest.php" hash="f71f97f078a081425c8848ba435d3b16"/><file name="HarvestInventory.php" hash="570d3aba5ac28b397d601d21f070415e"/><file name="Healthcheck.php" hash="63fdc080533ab8dff8d0949dd6ef4a3b"/><file name="Jobs.php" hash="9df9611445f9ab4a7a6d4b4e79f6b681"/><file name="KillHarvest.php" hash="a757f35956e4565b597522168109071c"/><file name="LaunchFullHarvest.php" hash="e5271dbfa422a90f4c4dda7362cb68f3"/><file name="LaunchPartialHarvest.php" hash="9c5aa7792fe9a3b98f9de9f4b59e3866"/><file name="PackageUpdate.php" hash="cb88473eea4e15760a4fa7c0aba83ddb"/><file name="PostItem.php" hash="54b4bac0b26b8b0e06df1d6da1ea7a91"/><file name="RegisterStores.php" hash="c054ef31b9c28efc5a18ee2ddf31c512"/><file name="ResetRetries.php" hash="bf00fe101b69a78955dc9a6d054e7ba7"/><file name="ResumeHarvest.php" hash="c9ba7b36e2b16dd1d1d947fc83a0ce5e"/><file name="Run.php" hash="c6892d3f812d5085b284d3501211bd5d"/><file name="SetVar.php" hash="93a0afb5e5c32536f430fc3b58b72995"/><file name="UnlockJobs.php" hash="9bf4b725445897ab2842bcb97e344e0c"/><file name="ViewConfig.php" hash="cc60cbc3d2212576301b13b0b286c618"/></dir><file name="Tasks.php" hash="173bdc5c586a0f5d41528cdbd2fff70b"/><dir name="Update"><file name="Abstract.php" hash="7b9a1d36b4486e250587820731b7fb7c"/><file name="Connect.php" hash="3e4366a42e563ec3406a0fcb9a5f77bf"/><file name="Downloader.php" hash="934ef5788acb45ce94e0a32c1d705df1"/><file name="Installer.php" hash="a09ec2e9f7bbf12c117c8950e46072b0"/><file name="Package.php" hash="60ec01b28a2ded244bf6d4a971918bd5"/></dir><dir name="Work"><file name="Cleanup.php" hash="100fef130220e91dc255b5e0f30c37f1"/><file name="Manager.php" hash="9dbdfb717865b7724f4ffd38b3ec866e"/><file name="Report.php" hash="8a3eec618fe3b04a3514dc302c4c5a0f"/><file name="Restart.php" hash="d55e811fbba86348890b4047fa5a579f"/><file name="Runner.php" hash="c0ced9ce83e5e51b4ba5f10bb46760af"/><file name="Stop.php" hash="db97407b43396f0adf44a2354a23a0a5"/></dir></dir><dir name="Util"><file name="Caller.php" hash="4fcc265eb1a58fed5c3b404ec864514b"/><file name="Categories.php" hash="1292843306c38d9593902616e04320a6"/><dir name="Log"><file name="Rollover.php" hash="6ad4bd93adb7e906c1de5a05a2871ea8"/></dir><file name="Logger.php" hash="59abca8cb07ef933ca8ef2ac824591b5"/><file name="Partition.php" hash="b9296b086003ba58ba12f8b8b0373c50"/></dir><file name="Services.php" hash="b9f0a869c089aa0ce4e111813827e0b0"/><dir name="Bmbleb"><dir name="Block"><dir name="Adminhtml"><file name="Auth.php" hash="7dc661bbe9ec85f700a22b319981114d"/><dir name="Bmbleb"><dir name="Login"><file name="Form.php" hash="0af1ff701cb657eea5ea8f874e3affc1"/></dir><file name="Login.php" hash="7232e8225f5b21de5675c0d84cb452bd"/></dir><file name="Connected.php" hash="833cef8e351f5efa7a4d104b1c51ca7f"/><file name="Help.php" hash="b280b3292ed778140b751b6426ef56fb"/><dir name="Index"><file name="Messages.php" hash="1e247e31194447de32e54f49dafc3ccc"/><file name="Terms.php" hash="739e5a9ebe204f1f9ac433557c994ae6"/></dir><file name="Index.php" hash="eb7bbef5fa26a53748596e145c3677c4"/><dir name="Jobs"><file name="Grid.php" hash="67255d982ac3d50b38d7a2a525c2b922"/><file name="Status.php" hash="f1b197bf6fdc392bed93ff0734a54ad6"/></dir><file name="Jobs.php" hash="84801c6008802496e168e763a7e6d71f"/><file name="Login.php" hash="2e4d8baead482d404ed40f7d5f3d902c"/><file name="Logout.php" hash="b75af51891b751b9d070e1e784dd6914"/><file name="Logs.php" hash="686e958b553c1e3fcf74841eab30fffb"/><file name="Notifications.php" hash="7d078ddf2a7cf1291f04912576560d3e"/><file name="Problems.php" hash="c2fd654e2c4c3a6dd9fbb083d0995e5e"/><file name="Status.php" hash="9b67a20f0ee00608029d24850cefda4d"/><file name="Tabs.php" hash="6f93d5c6bd5208a99637c06118c6c630"/></dir></dir><dir name="Helper"><file name="Account.php" hash="c41f40e6f58abd3b8486e0e92cc079d8"/><file name="Data.php" hash="dca14b137de1e2734a377ca645eeddbe"/><file name="PluginStatus.php" hash="bd8bbc0578826490d0dc1ff4c6354aa1"/></dir><dir name="Model"><file name="Bmbleb.php" hash="700d11c3006f2dcd2e80cd8bbbab15f9"/><file name="Status.php" hash="9409d26c7884be6b8075ba97dbf71f78"/><file name="Sync.php" hash="a800b6064a88f37957392cd967f2b3cb"/></dir><dir name="controllers"><dir name="Adminhtml"><file name="HelpController.php" hash="8b5369181b1489de0801899e7c3df9f1"/><file name="IndexController.php" hash="bc58b45f8faffbf5c75cf0e8b49460a0"/><file name="JobsController.php" hash="7f06601c23a86a0341447a100f2400a4"/><file name="LogsController.php" hash="09f7b0137d216d72804ced6a5d223bf7"/><file name="ProblemsController.php" hash="a540fabc6bf7ede3a8dc9ce462d7e5a9"/><file name="SettingsController.php" hash="39f4514a95331b67451b92cefd54eca0"/></dir><file name="HelpController.php" hash="d8c4d6c7b34d60fd9dab36f0a8fef85e"/><file name="IndexController.php" hash="c33c80315ac3507e36a8a2a4c7b94543"/><file name="LoginController.php" hash="ee22b56eca474b18960d725e3106e92f"/><file name="LogoutController.php" hash="4c091d188f89d4e6aac28f7ac3d9ac3f"/></dir><dir name="etc"><file name="config.xml" hash="45f7218274a3eed0086761942a95f27b"/></dir></dir><file name="Boss.php" hash="056f9eff87e5f7e76eab289596309829"/><file name="Cli.php" hash="6aef5d4fd8fbda6351338ab313d930ce"/><file name="Log.php" hash="5ab61d7cf21805adb8f826f83b9bf7b1"/><dir name="Combine"><dir name="Helper"><file name="Attributes.php" hash="5fb06e7cc89bb710039a79fb16e2a998"/><file name="Cart.php" hash="07ce5f461ecded3b9b00ed5c30faa266"/><file name="Data.php" hash="bba3915380a71aaacacc306f10396ef1"/><file name="Harvest.php" hash="ca563e641e167cc6f813c66300984ec2"/><file name="Parser.php" hash="480f573160e775654555022a5fee1450"/><file name="Redirect.php" hash="085d1e1b428218f290c690f2cbe42d6d"/><file name="Store.php" hash="8db94d157d7e497e7612844da43a6c11"/><file name="Trackable.php" hash="a042cb0d176730ec87353b1c5c6d21f7"/></dir><dir name="Model"><file name="Action.php" hash="6375461263bdf7fe26e71235d2449c21"/><file name="Api.php" hash="978590ad36b4d6ad6b3a14742f8bb31c"/><dir name="Cron"><file name="Count.php" hash="57552740b6ffdd9a4e879191a51043b0"/><dir name="Manager"><file name="Status.php" hash="aeb4445bc2d4b1b7e0e19c09172f0483"/></dir><dir name="Queue"><dir name="Batch"><file name="Row.php" hash="25f4ed809a9190f5d41c6c210cd8a537"/></dir><file name="Batch.php" hash="fa905d2781aab5881e881e3b12d25e0c"/></dir><file name="Queue.php" hash="455babdbaa841a12b74a3485871e7eeb"/><file name="Worker.php" hash="8b5040f1c5c5b3221542e739dc951de7"/></dir><file name="Cron.php" hash="40f2bc9634610f4ed5464de48630ce16"/><dir name="File"><file name="Io.php" hash="6d1f79eaf45897bf0525b0f3f3ac69d2"/><file name="Path.php" hash="24900b670c07fcdc4e54bae585f20002"/></dir><dir name="Harvest"><file name="AttributeSets.php" hash="479dfb30912b74183b396fa4e62323b2"/><file name="Carts.php" hash="0b303b2b7d4458a9a0cbf0653b9d660f"/><file name="Categories.php" hash="fd5f13ad449a320616569f64c82327ff"/><file name="Coupons.php" hash="14112f9063bbf20cea7ff3649f238524"/><file name="CustomerAttributeSets.php" hash="044f426226165ee86b0f822c00ec7712"/><file name="Customers.php" hash="c7850418a39abf09c10fbfafcb96f8e1"/><file name="Guests.php" hash="3685b3220b724e518dc83daad015577f"/><file name="Inventories.php" hash="15dc9f8c38dd7ab626eb3154c6b1b0f2"/><file name="Products.php" hash="da471abcc04837391b5270464164aefd"/><file name="Purchases.php" hash="427d38d1f6579f63730aa6bdf6b7bba4"/><file name="Rules.php" hash="fd1789174225c4ed6ad1e1137fe2aee5"/><file name="Subscribers.php" hash="e499e299612a6e2ce07ee19228cf43c5"/></dir><file name="Harvest.php" hash="14f7ffc01ad04b2d78d313f55ab765c2"/><dir name="Mysql4"><dir name="Action"><file name="Collection.php" hash="830a7db2ea307d594fe945701654d883"/></dir><file name="Action.php" hash="5b18cc8842c83d981575b7b2de496f66"/><dir name="Cron"><file name="Count.php" hash="acbbb7ec28afbbe98101f5d114cb30b3"/><dir name="Queue"><file name="Collection.php" hash="b26806c9e7cefd052bb784f5a6ce814c"/></dir><file name="Queue.php" hash="4add10644bfc94b88ef5042b23c82ae7"/></dir><dir name="Redirect"><file name="Collection.php" hash="3bbe4f8729c603f8d8131154a0a117c1"/><dir name="Order"><file name="Collection.php" hash="88c0cfcce31b0eed8c035dee4e7e86df"/></dir><file name="Order.php" hash="852bea330edac3372ec5c168111301a8"/></dir><file name="Redirect.php" hash="842e4ba35c6b049c8eaa64704588ca76"/><file name="Setup.php" hash="3fdec335980846a4c3adbc6f4e3478eb"/><dir name="Trackable"><file name="Collection.php" hash="8799c5bf630d267b551cf9dba986cbb0"/></dir><file name="Trackable.php" hash="b38749697b641874b42dceae38ab4a30"/></dir><dir name="Parser"><file name="AttributeSet.php" hash="9ae4013d42da5de0e9c8492fb29cd8d6"/><file name="Category.php" hash="0c3c71ff784307b9120d7cf781005069"/><file name="Coupon.php" hash="a66b3d4c8397610863cd74e35cbd5b62"/><file name="Customer.php" hash="99233c3da1eb28f1ec15e20e837d764a"/><file name="CustomerAttributeSet.php" hash="1b51f9300a9ee102872ff9d7f9bbccbc"/><file name="Guest.php" hash="002c900d3722f761e3e3ac63be84014f"/><file name="Inventory.php" hash="6f9ea827ee304f72b13bce3d7316efbc"/><file name="Product.php" hash="7e0fa4a55ca45fc876e588442cce72eb"/><dir name="Purchase"><file name="Item.php" hash="ca7facc8c81504ea990fdb1feeba64dd"/></dir><file name="Purchase.php" hash="ec3929b9e1a0df0e5816c1558391dcdc"/><dir name="Quote"><file name="Item.php" hash="37cbc74a49a16e67e02f421978e1741f"/></dir><file name="Quote.php" hash="fa0e008c67f15d1a4c7866a407aaaeaf"/><file name="Rule.php" hash="0a0f70172aeff0e5157f2f1652c3ae09"/><file name="Subscriber.php" hash="57ab5db177d4a37f30865cb127912631"/></dir><file name="Parser.php" hash="2e10487d6e00e3d2c3ec075c68e25d52"/><dir name="Redirect"><file name="Order.php" hash="5ca85ca596ef6e45468c8a12cee72614"/></dir><file name="Redirect.php" hash="05dddaa1e9c17c4c79d70d63b56ed454"/><dir name="Resource"><file name="Abstract.php" hash="61dfb714347611c6cf934b1d2360bfe3"/><dir name="Action"><file name="Collection.php" hash="22e278b8cbc5d18d4faa48c4f224d145"/></dir><file name="Action.php" hash="83b00531db5ec3a51ea7c0fc65a1d083"/><dir name="Cron"><dir name="Count"><file name="Collection.php" hash="c5cb4ab406c1d008c1bc22bb95b3ba28"/></dir><file name="Count.php" hash="6a356b5d92b509945c4567f479b9bfdd"/><dir name="Queue"><file name="Collection.php" hash="e6655bdbc5920eeb9178adfcb905ac36"/></dir><file name="Queue.php" hash="f9eae90970e4d935b5e5335c8e57e71b"/></dir><file name="Debug.php" hash="976156dc1ff783a26174bdac79decde2"/><dir name="Redirect"><file name="Collection.php" hash="df6662f064b3170aab46d69d42c514a3"/><dir name="Order"><file name="Collection.php" hash="162359ed9499b6f976f5c341fd0585c3"/></dir><file name="Order.php" hash="7ea4477380a5215dc0efe561ede359d9"/></dir><file name="Redirect.php" hash="d239af442388bb9fa80db81a7fc43711"/><file name="Setup.php" hash="0405c44c124f19619ccc9f429d781d44"/><dir name="Trackable"><file name="Collection.php" hash="6f060c3537b49710302e38e881885a69"/></dir><file name="Trackable.php" hash="764b0d21c492dd69b9f85ae3c647666e"/></dir><dir name="System"><dir name="Config"><dir name="Source"><file name="Harvestertype.php" hash="2f8c8f285df356013c15c1441bb5de3e"/><file name="LogFormat.php" hash="828680dafe5a7042221900cb6d9dfa17"/><file name="LogLevel.php" hash="b86c793ca04205f045efd9ea42d02a10"/><file name="Stability.php" hash="830e5bc4e8ce9657221224dbaf99cee6"/><file name="UrlType.php" hash="28f9a5bc024afe5526685d429a751ad8"/></dir></dir></dir><file name="Trackable.php" hash="23eb5e95bde001dbd465a1bc96baa430"/></dir><dir name="etc"><file name="adminhtml.xml" hash="794fc8a1d67ac3e6b5d71c707a0c7cad"/><file name="config.xml" hash="a7c93d2f9e03fe5b5eb60eb7d0acd53e"/><file name="system.xml" hash="48a3a0199a5328bc44950c5abcdc2de6"/></dir><dir name="sql"><dir name="combine_setup"><file name="mysql4-install-1.0.0.70.php" hash="425be4a54012cd64753ee1a216255d67"/><file name="mysql4-upgrade-1.0.0.70-1.0.0.84.php" hash="e51deaff9e65f43483ab00573605329d"/><file name="mysql4-upgrade-1.0.0.84-1.0.0.88.php" hash="89bd8a585c0d351aae6838ace48f608d"/><file name="mysql4-upgrade-1.0.0.88-1.2.0.0.php" hash="4779a5072d23ebdb27177de0dfd19f5d"/><file name="mysql4-upgrade-1.2.0.0-1.2.0.1.php" hash="01a7ef2466b9f676884db4d7a7c562a9"/><file name="mysql4-upgrade-1.2.0.1-1.2.1.0.php" hash="dbba441ac757db26289f21443a948f6b"/><file name="mysql4-upgrade-1.3.9.9-1.4.0.0.php" hash="5b5e0602bdcd48263bdf4e25b17d95b5"/></dir></dir></dir><dir name="BoneCollector"><dir name="Model"><file name="HarvestAbstract.php" hash="fecaefad7d4fc279e3a54b4c8cac54ae"/><dir name="HarvestAttribute"><file name="Observer.php" hash="26d016ab4fae05872aa46b6abdc3e562"/></dir><dir name="HarvestCart"><file name="Observer.php" hash="ae4c5e0cf7b764419ffb36710388ecfd"/></dir><dir name="HarvestCategory"><file name="Observer.php" hash="7ddb0b58b301863c1e46dd2db3628db8"/></dir><dir name="HarvestCustomer"><file name="Observer.php" hash="a20e21f1033dc35025ab9b402d6574bc"/></dir><dir name="HarvestInventoryItem"><file name="Observer.php" hash="b6005e059d893ccc4432ea5c22c55a8a"/></dir><dir name="HarvestProduct"><file name="Observer.php" hash="73eac87240083709cb5c746b81afe44f"/></dir><dir name="HarvestPurchase"><file name="Observer.php" hash="f253527e8f98c795a064c2636530ed15"/></dir><dir name="HarvestRule"><file name="Observer.php" hash="49f369f960101ec66458f8dbe7972e40"/></dir><dir name="HarvestSubscriber"><file name="Observer.php" hash="5b64106296e9d0045610c69ed0c9be4b"/></dir></dir><dir name="etc"><file name="config.xml" hash="b1a43d80a3326ef2c26f20660d7f0a3b"/></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Springbot.xml" hash="69a4e2c056502cd8539b4f66a2c8b1bc"/></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="bmbleb.xml" hash="aa390e236576f79375b407262961043e"/></dir><dir name="template"><dir name="bmbleb"><file name="auth.phtml" hash="bf509b53c49cd69ec3ea60e3effe69c3"/><file name="dashboard_loggedout.phtml" hash="19281143b19a544d4e3072dc754ada2d"/><dir name="help"><file name="index.phtml" hash="e9d3f11c623c735c3e699e406ff9e0e7"/></dir><dir name="index"><file name="messages.phtml" hash="fcbbb47d2cc30c493ed2316a8b888f5d"/><file name="terms.phtml" hash="dfff1182d2fe7d8eee69b9b302c4cbc7"/></dir><file name="index.phtml" hash="acbe2c052259293901fea4635b7a66bf"/><dir name="jobs"><file name="status.phtml" hash="77f0b0ae7c3c6c42031675cfc959e270"/></dir><file name="jobs.phtml" hash="961ac83f56bf8703dbc433894da4933e"/><file name="login.phtml" hash="0a1a20dfaffe8646bb56323ab811d46a"/><file name="logout.phtml" hash="09b92790c5e124a01086d6929ed7e8de"/><dir name="logs"><file name="index.phtml" hash="17e773a761a24e292b09fe7da1bd7662"/></dir><file name="notifications.phtml" hash="45f8767a090a4f7a7e177151bbc43f4f"/><dir name="problems"><file name="index.phtml" hash="2027d07eed8848a4ed8e801d67072796"/></dir><file name="status.phtml" hash="1acc630a6549b234bc1fa5923e04b8ce"/><file name="tabs.phtml" hash="778b686fb073a8aeb973db3bfb0302aa"/></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="shadow.xml" hash="3f29bebbcf7e42c57dcac9150c6b7d68"/></dir><dir name="template"><dir name="shadow"><file name="async.phtml" hash="af147801ed74d45bb0580b0bb69ce0fd"/><file name="conversion.phtml" hash="3d46a8930d9658a24a77ff34d52e40eb"/></dir></dir></dir></dir></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="bmbleb"><file name="bmbleb.css" hash="d929b5f42085c25b86101379f286f55f"/><dir name="images"><file name="arrows_up-down-large.png" hash="72c27995e1ab1d182891dad0a4d1dae2"/><file name="bmb-ctl.png" hash="de59a694a82b8699560df5146b2e315f"/><file name="check.png" hash="126f33ed483549e79a16186b7499c190"/><file name="grn-bg.png" hash="f681a524e2b4561dbe94152a2d24d60b"/><file name="h3-bg.png" hash="b93df0b0bdba8e8f6e0a07cc31fcc180"/><file name="icon-alert.png" hash="ac2e70efdcebc3813222d0d3ee62a6d9"/><file name="icon-bmbleb.png" hash="fb5574b5e63ee33b84eee26b3d8ef8e3"/><file name="icon-insights.png" hash="725fd29fe1b705e358c9080408693d3d"/><file name="icon-status.png" hash="bd13429f23166a6d431739010ea1b2cd"/><file name="left-ico1.png" hash="7d188f5e6021569750756f58067f0a3b"/><file name="left-ico2.png" hash="d2f6379a73290a8ffa4cb3e19a809d25"/><file name="left-ico3.png" hash="73bc75f7a746e54a75f14eda7a28a6b9"/><file name="left-ico4.png" hash="1da2c26187fed26b6c61599682b2dc4b"/><file name="left-ico5.png" hash="ada61cb32805f2cb8e8dace46361613e"/><file name="left-ico6.png" hash="1e62822267f72589ffa0771352a002da"/><file name="left-ico7.png" hash="16118412d581f0c83ce45c44f62f25a1"/><file name="left-ico8.png" hash="c7de2fe523c892b432b575648cc05631"/><file name="left-ico_demographics.png" hash="3fe23a2dea68f6c65114f248a8bdaa5e"/><file name="login-icn-b.png" hash="64e72070f595e215ece79736ac77ee2f"/><file name="login-icn.png" hash="6142cc2fc8ee2d1c40bf3c8f9ac1fa85"/><file name="logo.png" hash="8fb783f7d68fca3914123f56b8c066a4"/><file name="orng-bg.png" hash="074a6912ca2a139df537e3d15b6bc9b2"/><file name="plugin_dashboard_syncing.jpg" hash="8511648541f6f1b96ff1c53dda3a439b"/><file name="register.png" hash="f73fe51cf7df27ab11089385fa50714e"/><file name="registration-bg-25.png" hash="9d2cf77619cc8fce3ae4d44b0aae30c1"/><file name="registration-bg-50.png" hash="99942fdc8c3f88b0d4b09f87c9e39045"/><file name="registration-bg.png" hash="96365b39495e56ffe491dd9930fe221d"/><file name="spinner.gif" hash="add667817f25bce331a213ab3cc9621f"/><file name="springbot-ctl.png" hash="de59a694a82b8699560df5146b2e315f"/><file name="submit-btn-bg.png" hash="d98aa287b7b73dad9f780b22cb53fbdb"/><file name="sync_icon.png" hash="cb12f2e8943c8e324e3456375f953c86"/><file name="white-check.png" hash="126f33ed483549e79a16186b7499c190"/></dir></dir></dir></dir></dir></target><target name="mageweb"><dir name="shell"><file name="springbot.php" hash="80f11ae5dc3839faf9d99df8c5a071d1"/></dir></target></contents>
56
  <compatible/>
57
  <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
58
  </package>