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 +15 -2
- app/code/community/Iterable/TrackOrderPlaced/Model/Observer.php +124 -4
- app/code/community/Iterable/TrackOrderPlaced/Model/TrackingEventTypes.php +5 -1
- app/code/community/Iterable/TrackOrderPlaced/etc/config.xml +28 -1
- package.xml +5 -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 |
-
|
|
|
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.
|
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.
|
|
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).
|
16 |

|
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>
|
19 |
<authors><author><name>Ilya Brin</name><user>Iterable</user><email>ilya@iterable.com</email></author></authors>
|
20 |
-
<date>2014-10-
|
21 |
-
<time>
|
22 |
-
<contents><target name="magecommunity"><dir name="Iterable"><dir name="TrackOrderPlaced"><dir name="Helper"><file name="Data.php" hash="
|
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).
|
16 |

|
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>
|