Iterable_Plugin - Version 1.4.5

Version Notes

Support more events.

Download this release

Release Info

Developer Ilya Brin
Extension Iterable_Plugin
Version 1.4.5
Comparing to
See all releases


Code changes from version 1.4.4 to 1.4.5

app/code/community/Iterable/TrackOrderPlaced/Helper/Data.php CHANGED
@@ -130,14 +130,15 @@ class Iterable_TrackOrderPlaced_Helper_Data extends Mage_Core_Helper_Abstract {
130
  }
131
  }
132
 
133
- public function updateUser($email, $dataFields=array()) {
134
  $endpoint = '/api/users/update';
135
  $params = array(
136
  'email' => $email
137
  );
138
  $this->setCurrentIp($dataFields);
139
  $params['dataFields'] = $dataFields;
140
- return $this->callIterableApi(Iterable_TrackOrderPlaced_Model_TrackingEventTypes::EVENT_TYPE_USER, $endpoint, $params);
 
141
  }
142
 
143
  public function subscribeEmailToList($email, $listId, $dataFields=array(), $resubscribe=False) {
@@ -236,4 +237,16 @@ class Iterable_TrackOrderPlaced_Helper_Data extends Mage_Core_Helper_Abstract {
236
  public function trackShipment($email, $shipment) {
237
  return $this->track(Iterable_TrackOrderPlaced_Model_TrackingEventTypes::EVENT_TYPE_SHIPMENT, $email, $shipment);
238
  }
 
 
 
 
 
 
 
 
 
 
 
 
239
  }
130
  }
131
  }
132
 
133
+ public function updateUser($email, $dataFields=array(), $eventNameHint=null) {
134
  $endpoint = '/api/users/update';
135
  $params = array(
136
  'email' => $email
137
  );
138
  $this->setCurrentIp($dataFields);
139
  $params['dataFields'] = $dataFields;
140
+ $eventName = isset($eventNameHint) ? $eventNameHint : Iterable_TrackOrderPlaced_Model_TrackingEventTypes::EVENT_TYPE_USER;
141
+ return $this->callIterableApi($eventName, $endpoint, $params);
142
  }
143
 
144
  public function subscribeEmailToList($email, $listId, $dataFields=array(), $resubscribe=False) {
237
  public function trackShipment($email, $shipment) {
238
  return $this->track(Iterable_TrackOrderPlaced_Model_TrackingEventTypes::EVENT_TYPE_SHIPMENT, $email, $shipment);
239
  }
240
+
241
+ public function trackReview($email, $review)
242
+ {
243
+ return $this->track(Iterable_TrackOrderPlaced_Model_TrackingEventTypes::EVENT_TYPE_REVIEW, $email, $review);
244
+ }
245
+
246
+ public function trackWishlist($email, $wishlist)
247
+ {
248
+ return $this->updateUser($email, array(
249
+ 'wishlist' => $wishlist
250
+ ), Iterable_TrackOrderPlaced_Model_TrackingEventTypes::EVENT_TYPE_WISHLIST_ADD_PRODUCT);
251
+ }
252
  }
app/code/community/Iterable/TrackOrderPlaced/Model/Observer.php CHANGED
@@ -80,6 +80,7 @@ class Iterable_TrackOrderPlaced_Model_Observer
80
  }
81
 
82
  $imageUrl = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA).'catalog/product/'.$product->getImage();
 
83
  $categoryNames = array();
84
  foreach ($this->getCategories($product) as $categoryBreadcrumbs) {
85
  $categoryNames[] = implode('/', $categoryBreadcrumbs);
@@ -91,6 +92,7 @@ class Iterable_TrackOrderPlaced_Model_Observer
91
  'categories' => $categoryNames,
92
  //'itemDescription' => $product->getDescription(), // maybe use short description instead?
93
  'imageUrl' => $imageUrl,
 
94
  'url' => $product->getProductUrl(),
95
  'quantity' => $quantity,
96
  'price' => $price == NULL ? 0.0: floatval($price) // TODO - make sure price isn't NULL
@@ -298,7 +300,9 @@ class Iterable_TrackOrderPlaced_Model_Observer
298
  'storeUrl' => Mage::app()->getStore(Mage::getDesign()->getStore())->getUrl(''), // from Mage_Core_Model_Email_Template_Filter->storeDirective
299
  'logoUrl' => $this->getLogoUrl($store),
300
  'logoAlt' => $this->getLogoAlt($store),
301
- 'payment' => $payment->getData()
 
 
302
  );
303
 
304
  ///////////////
@@ -338,6 +342,9 @@ class Iterable_TrackOrderPlaced_Model_Observer
338
  $email = $customer->getEmail();
339
 
340
  $dataFields = $customer->getData();
 
 
 
341
 
342
  // set shipping address
343
  $defaultShipping = $customer->getDefaultShippingAddress();
@@ -354,6 +361,13 @@ class Iterable_TrackOrderPlaced_Model_Observer
354
  }
355
  $helper = Mage::helper('trackorderplaced');
356
  $helper->updateUser($email, $dataFields);
 
 
 
 
 
 
 
357
  // if they're just creating their account, add them to a new users list
358
  if (!$customer->getOrigData()) {
359
  $listId = $helper->getAccountEmailListId();
@@ -435,14 +449,15 @@ class Iterable_TrackOrderPlaced_Model_Observer
435
  }
436
  $email = $subscriber->getSubscriberEmail();
437
  $dataFields = $subscriber->getData();
 
438
  switch ($subscriber->getStatus()) {
439
  case Mage_Newsletter_Model_Subscriber::STATUS_SUBSCRIBED:
440
  $helper->subscribeEmailToList($email, $listId, $dataFields, True);
441
- break;
442
  case Mage_Newsletter_Model_Subscriber::STATUS_UNSUBSCRIBED:
443
  $helper->unsubscribeEmailFromList($email, $listId);
444
  break;
445
- default:
446
  break;
447
  }
448
  }
@@ -484,4 +499,109 @@ class Iterable_TrackOrderPlaced_Model_Observer
484
  $helper = Mage::helper('trackorderplaced');
485
  $helper->trackShipment($email, $shipmentData);
486
  }
487
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
80
  }
81
 
82
  $imageUrl = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA).'catalog/product/'.$product->getImage();
83
+ $thumbnailUrl = Mage::getModel('catalog/product_media_config')->getMediaUrl($product->getThumbnail());
84
  $categoryNames = array();
85
  foreach ($this->getCategories($product) as $categoryBreadcrumbs) {
86
  $categoryNames[] = implode('/', $categoryBreadcrumbs);
92
  'categories' => $categoryNames,
93
  //'itemDescription' => $product->getDescription(), // maybe use short description instead?
94
  'imageUrl' => $imageUrl,
95
+ 'thumbnailUrl' => $thumbnailUrl,
96
  'url' => $product->getProductUrl(),
97
  'quantity' => $quantity,
98
  'price' => $price == NULL ? 0.0: floatval($price) // TODO - make sure price isn't NULL
300
  'storeUrl' => Mage::app()->getStore(Mage::getDesign()->getStore())->getUrl(''), // from Mage_Core_Model_Email_Template_Filter->storeDirective
301
  'logoUrl' => $this->getLogoUrl($store),
302
  'logoAlt' => $this->getLogoAlt($store),
303
+ 'payment' => $payment->getData(),
304
+ 'discountAmount' => $order->getDiscountAmount(),
305
+ 'discountDescription' => $order->getDiscountDescription()
306
  );
307
 
308
  ///////////////
342
  $email = $customer->getEmail();
343
 
344
  $dataFields = $customer->getData();
345
+ unset($dataFields["is_subscribed"]); // type changes between int (0 and 1) and boolean
346
+ $dataFields['firstName'] = $customer->getFirstname();
347
+ $dataFields['lastName'] = $customer->getLastname();
348
 
349
  // set shipping address
350
  $defaultShipping = $customer->getDefaultShippingAddress();
361
  }
362
  $helper = Mage::helper('trackorderplaced');
363
  $helper->updateUser($email, $dataFields);
364
+
365
+ // new accounts fire two saves. updating the user profile a 2nd time should be fine, but don't subscribe them to new accounts twice
366
+ if (Mage::registry('iterable_customer_save_after_observer_executed'.$email)) {
367
+ return;
368
+ }
369
+ Mage::register('iterable_customer_save_after_observer_executed'.$email, true);
370
+
371
  // if they're just creating their account, add them to a new users list
372
  if (!$customer->getOrigData()) {
373
  $listId = $helper->getAccountEmailListId();
449
  }
450
  $email = $subscriber->getSubscriberEmail();
451
  $dataFields = $subscriber->getData();
452
+ unset($dataFields["is_subscribed"]); // type changes between int (0 and 1) and boolean
453
  switch ($subscriber->getStatus()) {
454
  case Mage_Newsletter_Model_Subscriber::STATUS_SUBSCRIBED:
455
  $helper->subscribeEmailToList($email, $listId, $dataFields, True);
456
+ break;
457
  case Mage_Newsletter_Model_Subscriber::STATUS_UNSUBSCRIBED:
458
  $helper->unsubscribeEmailFromList($email, $listId);
459
  break;
460
+ default:
461
  break;
462
  }
463
  }
499
  $helper = Mage::helper('trackorderplaced');
500
  $helper->trackShipment($email, $shipmentData);
501
  }
502
+
503
+ public function reviewSaveAfter($observer)
504
+ {
505
+ if (!Mage::helper('customer')->isLoggedIn()) {
506
+ return;
507
+ }
508
+ $customer = Mage::getSingleton('customer/session')->getCustomer();
509
+
510
+ $review = $observer->getObject();
511
+
512
+ $helper = Mage::helper('trackorderplaced');
513
+ $helper->trackReview($customer->getEmail(), $review->getData());
514
+ }
515
+
516
+ public function wishlistAddProduct($observer)
517
+ {
518
+ $wishlist = $observer->getWishlist();
519
+ $itemCollection = $wishlist->getItemCollection();
520
+ $itemCollection->setOrder('added_at','desc');
521
+
522
+ $items = array();
523
+ foreach ($itemCollection->getData() as $item) {
524
+ $product = Mage::getModel('catalog/product')->load($item['product_id']);
525
+ $item['product'] = $this->toIterableItem($product);
526
+ $items[] = $item;
527
+ }
528
+
529
+ $customer = Mage::getSingleton('customer/session')->getCustomer();
530
+
531
+ $helper = Mage::helper('trackorderplaced');
532
+ $helper->trackWishlist($customer->getEmail(), $items);
533
+ }
534
+
535
+ public function productView($observer)
536
+ {
537
+ $iterableLastViewedItems = "iterableLastViewedItems";
538
+
539
+ // make sure they're actually viewing a product
540
+ $action = $observer->getAction();
541
+ if (!$action) {
542
+ return;
543
+ }
544
+
545
+ $request = $action->getRequest();
546
+ if (!$request) {
547
+ return;
548
+ }
549
+
550
+ if (!in_array($action->getFullActionName(), array('catalog_product_view'))) {
551
+ return;
552
+ }
553
+
554
+ $product = Mage::registry('current_product');
555
+ if (!$product) {
556
+ return;
557
+ }
558
+
559
+ // get the product they're viewing
560
+ $item = $this->toIterableItem($product);
561
+ $date = Mage::getModel('core/date');
562
+ $gmtDate = $date->gmtDate('Y-m-d H:i:s');
563
+ $item['createdAt'] = $gmtDate;
564
+
565
+ // get saved history
566
+ $cookie = Mage::getModel('core/cookie');
567
+ $items = $cookie->get($iterableLastViewedItems);
568
+ if ($items) {
569
+ $items = json_decode($items, true);
570
+ } else {
571
+ $items = array();
572
+ }
573
+
574
+ array_unshift($items, $item); // prepend the item just viewed
575
+
576
+ $items = array_slice($items, 0, 5); // make sure at most 5 items - they're big and there's a cookie size limit
577
+
578
+ $epochSeconds = $date->gmtTimestamp();
579
+ $epochSecondsDayAgo = $epochSeconds - (60 * 60 * 24);
580
+ foreach ($items as $index => $item) {
581
+ $createdAt = $item['createdAt'];
582
+ $createdAtTimestamp = strtotime($createdAt);
583
+ if ($createdAtTimestamp < $epochSecondsDayAgo) {
584
+ unset($items[$index]);
585
+ }
586
+ }
587
+
588
+ $cookie->set(
589
+ $iterableLastViewedItems,
590
+ json_encode($items),
591
+ 3600 * 24, // period
592
+ "/", // path
593
+ null, // domain
594
+ null, // secure
595
+ true); // httponly
596
+
597
+ if (!Mage::helper('customer')->isLoggedIn()) {
598
+ return;
599
+ }
600
+ $customer = Mage::getSingleton('customer/session')->getCustomer();
601
+ $helper = Mage::helper('trackorderplaced');
602
+ $helper->updateUser($customer->getEmail(), array(
603
+ 'lastViewedItems' => $items
604
+ ));
605
+ }
606
+
607
+ }
app/code/community/Iterable/TrackOrderPlaced/Model/TrackingEventTypes.php CHANGED
@@ -10,6 +10,8 @@ class Iterable_TrackOrderPlaced_Model_TrackingEventTypes
10
  const EVENT_TYPE_NEWSLETTER_UNSUBSCRIBE = 'newsletterUnsubscribe';
11
  const EVENT_TYPE_TRIGGER_EMAIL = 'triggerEmail';
12
  const EVENT_TYPE_SHIPMENT = 'shipment';
 
 
13
 
14
  /** @const */
15
  private static $eventTypes = array(
@@ -19,7 +21,9 @@ class Iterable_TrackOrderPlaced_Model_TrackingEventTypes
19
  self::EVENT_TYPE_NEWSLETTER_SUBSCRIBE => 'Newsletter Subscribe',
20
  self::EVENT_TYPE_NEWSLETTER_UNSUBSCRIBE => 'Newsletter Unsubscribe',
21
  self::EVENT_TYPE_TRIGGER_EMAIL => 'Trigger Email',
22
- self::EVENT_TYPE_SHIPMENT => 'Shipment'
 
 
23
  );
24
 
25
  public function toOptionArray()
10
  const EVENT_TYPE_NEWSLETTER_UNSUBSCRIBE = 'newsletterUnsubscribe';
11
  const EVENT_TYPE_TRIGGER_EMAIL = 'triggerEmail';
12
  const EVENT_TYPE_SHIPMENT = 'shipment';
13
+ const EVENT_TYPE_REVIEW = 'review';
14
+ const EVENT_TYPE_WISHLIST_ADD_PRODUCT = 'wishlistAddProduct';
15
 
16
  /** @const */
17
  private static $eventTypes = array(
21
  self::EVENT_TYPE_NEWSLETTER_SUBSCRIBE => 'Newsletter Subscribe',
22
  self::EVENT_TYPE_NEWSLETTER_UNSUBSCRIBE => 'Newsletter Unsubscribe',
23
  self::EVENT_TYPE_TRIGGER_EMAIL => 'Trigger Email',
24
+ self::EVENT_TYPE_SHIPMENT => 'Shipment',
25
+ self::EVENT_TYPE_REVIEW => 'Reviews',
26
+ self::EVENT_TYPE_WISHLIST_ADD_PRODUCT => 'Added to Wishlist'
27
  );
28
 
29
  public function toOptionArray()
app/code/community/Iterable/TrackOrderPlaced/etc/config.xml CHANGED
@@ -176,6 +176,33 @@
176
  </iterable_trackshipmentsaved>
177
  </observers>
178
  </sales_order_shipment_save_after>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
179
  </events>
180
  </global>
181
 
@@ -187,7 +214,7 @@
187
  </api_options>
188
  <advanced_options>
189
  <tracking_options>
190
- <enabled_events>order,user,cartUpdated,newsletterSubscribe,newsletterUnsubscribe,triggerEmail,shipment</enabled_events>
191
  </tracking_options>
192
  </advanced_options>
193
  </default>
176
  </iterable_trackshipmentsaved>
177
  </observers>
178
  </sales_order_shipment_save_after>
179
+ <wishlist_add_product>
180
+ <observers>
181
+ <iterable_wishlistadd>
182
+ <type>singleton</type>
183
+ <class>iterable_trackorderplaced/observer</class>
184
+ <method>wishlistAddProduct</method>
185
+ </iterable_wishlistadd>
186
+ </observers>
187
+ </wishlist_add_product>
188
+ <review_save_after>
189
+ <observers>
190
+ <iterable_reviewsaveafter>
191
+ <type>singleton</type>
192
+ <class>iterable_trackorderplaced/observer</class>
193
+ <method>reviewSaveAfter</method>
194
+ </iterable_reviewsaveafter>
195
+ </observers>
196
+ </review_save_after>
197
+ <controller_action_layout_generate_blocks_after>
198
+ <observers>
199
+ <iterable_product_view>
200
+ <type>singleton</type>
201
+ <class>iterable_trackorderplaced/observer</class>
202
+ <method>productView</method>
203
+ </iterable_product_view>
204
+ </observers>
205
+ </controller_action_layout_generate_blocks_after>
206
  </events>
207
  </global>
208
 
214
  </api_options>
215
  <advanced_options>
216
  <tracking_options>
217
+ <enabled_events>order,user,cartUpdated,newsletterSubscribe,newsletterUnsubscribe,triggerEmail,shipment,review,wishlistAddProduct</enabled_events>
218
  </tracking_options>
219
  </advanced_options>
220
  </default>
package.xml CHANGED
@@ -1,7 +1,7 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Iterable_Plugin</name>
4
- <version>1.4.4</version>
5
  <stability>stable</stability>
6
  <license uri="http://opensource.org/licenses/OSL-3.0">Open Software License (OSL) </license>
7
  <channel>community</channel>
@@ -15,11 +15,11 @@ drip marketing campaigns.&#xD;
15
  To install, click the 'Install Now' button above and paste the link into your Magento Connect Manager. You will then see an Iterable section in your Magento Admin view. In the 'Advanced' section, select the events you would like to be sent to Iterable. Then, in the API section, enter your Magento API key from Iterable (located in the API Config section on the left side menu).&#xD;
16
  &#xD;
17
  Questions? Comments? Feel free to contact us at support@iterable.com. Also, for more info or a free demo, please visit us at Iterable.com.</description>
18
- <notes>Pass over a ton more data about the order.</notes>
19
  <authors><author><name>Ilya Brin</name><user>Iterable</user><email>ilya@iterable.com</email></author></authors>
20
- <date>2014-10-09</date>
21
- <time>01:10:23</time>
22
- <contents><target name="magecommunity"><dir name="Iterable"><dir name="TrackOrderPlaced"><dir name="Helper"><file name="Data.php" hash="ca07dd598f7a2b8b625ab89d9a52024b"/></dir><dir name="Model"><dir name="Email"><file name="Template.php" hash="225b9fb6b5eac3b506813bae86e1f005"/></dir><file name="Observer.php" hash="aa20d3df02207a027a389ad9380247fd"/><file name="TrackingEventTypes.php" hash="69088c4683284b176b9ec2978d7db472"/></dir><dir name="etc"><file name="config.xml" hash="8d56ea84ef08ec66ab1f451e923032dd"/><file name="system.xml" hash="32d1f49eb03cd585b7c33a894fe4de15"/></dir><dir name=".idea"><file name="TrackOrderPlaced.iml" hash="64a676a732fd4b7f408cdd46b49aaa24"/><file name="compiler.xml" hash="7e7efa3e3d6514a0ff290e4dfce3cbe9"/><dir name="copyright"><file name="profiles_settings.xml" hash="b1e0b181e080c28b1d116582290e6e97"/></dir><file name="encodings.xml" hash="f1c5edfa5b1a67aabcb9e41674afa252"/><file name="misc.xml" hash="a09f56c13a544171f953e7723e0d4439"/><file name="modules.xml" hash="c93cdff764916047e398fcf5b105a3ed"/><dir name="scopes"><file name="scope_settings.xml" hash="3d0b1957d39aa5636904788c54e654cf"/></dir><file name="vcs.xml" hash="1b4ab30910ae53c73594cd0e3db9840b"/><file name="workspace.xml" hash="6b623904b5b85b0966e42a14d9711d8d"/><file name=".name" hash="8b29e935aaea69d5d9c071be993c4610"/></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><dir name="iterable"><file name="common.xml" hash="d90fbb22fb34fa29deb6b0e131f9e767"/></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Iterable_TrackOrderPlaced.xml" hash="0d4506dadf95eecb54e215ed03b2c6a7"/></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="base"><dir name="default"><dir name="iterable"><dir name="images"><file name="section_logo.png" hash="fe5090ba955a890c1efe2c09cb260342"/></dir><file name="iterable.css" hash="4d928c5a4ed76d62e246a57ee868ec23"/></dir></dir></dir></dir></target></contents>
23
  <compatible/>
24
  <dependencies><required><php><min>5.3.1</min><max>6.0.0</max></php></required></dependencies>
25
  </package>
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Iterable_Plugin</name>
4
+ <version>1.4.5</version>
5
  <stability>stable</stability>
6
  <license uri="http://opensource.org/licenses/OSL-3.0">Open Software License (OSL) </license>
7
  <channel>community</channel>
15
  To install, click the 'Install Now' button above and paste the link into your Magento Connect Manager. You will then see an Iterable section in your Magento Admin view. In the 'Advanced' section, select the events you would like to be sent to Iterable. Then, in the API section, enter your Magento API key from Iterable (located in the API Config section on the left side menu).&#xD;
16
  &#xD;
17
  Questions? Comments? Feel free to contact us at support@iterable.com. Also, for more info or a free demo, please visit us at Iterable.com.</description>
18
+ <notes>Support more events.</notes>
19
  <authors><author><name>Ilya Brin</name><user>Iterable</user><email>ilya@iterable.com</email></author></authors>
20
+ <date>2014-10-17</date>
21
+ <time>23:55:14</time>
22
+ <contents><target name="magecommunity"><dir name="Iterable"><dir name="TrackOrderPlaced"><dir name="Helper"><file name="Data.php" hash="9ce6682115181036d2e00ca36e2845c7"/></dir><dir name="Model"><dir name="Email"><file name="Template.php" hash="225b9fb6b5eac3b506813bae86e1f005"/></dir><file name="Observer.php" hash="965051384155f2c05f394b50554b0442"/><file name="TrackingEventTypes.php" hash="da9b860e6e9e6c7bd29a65067b816b20"/></dir><dir name="etc"><file name="config.xml" hash="4c74dd108c3908f77fdb04bd59260691"/><file name="system.xml" hash="32d1f49eb03cd585b7c33a894fe4de15"/></dir><dir name=".idea"><file name="TrackOrderPlaced.iml" hash="64a676a732fd4b7f408cdd46b49aaa24"/><file name="compiler.xml" hash="7e7efa3e3d6514a0ff290e4dfce3cbe9"/><dir name="copyright"><file name="profiles_settings.xml" hash="b1e0b181e080c28b1d116582290e6e97"/></dir><file name="encodings.xml" hash="f1c5edfa5b1a67aabcb9e41674afa252"/><file name="misc.xml" hash="a09f56c13a544171f953e7723e0d4439"/><file name="modules.xml" hash="c93cdff764916047e398fcf5b105a3ed"/><dir name="scopes"><file name="scope_settings.xml" hash="3d0b1957d39aa5636904788c54e654cf"/></dir><file name="vcs.xml" hash="1b4ab30910ae53c73594cd0e3db9840b"/><file name="workspace.xml" hash="6b623904b5b85b0966e42a14d9711d8d"/><file name=".name" hash="8b29e935aaea69d5d9c071be993c4610"/></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><dir name="iterable"><file name="common.xml" hash="d90fbb22fb34fa29deb6b0e131f9e767"/></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Iterable_TrackOrderPlaced.xml" hash="0d4506dadf95eecb54e215ed03b2c6a7"/></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="base"><dir name="default"><dir name="iterable"><dir name="images"><file name="section_logo.png" hash="fe5090ba955a890c1efe2c09cb260342"/></dir><file name="iterable.css" hash="4d928c5a4ed76d62e246a57ee868ec23"/></dir></dir></dir></dir></target></contents>
23
  <compatible/>
24
  <dependencies><required><php><min>5.3.1</min><max>6.0.0</max></php></required></dependencies>
25
  </package>