Listrak_Remarketing - Version 1.1.4

Version Notes

Added support for Magento product reviews.

Download this release

Release Info

Developer Magento Core Team
Extension Listrak_Remarketing
Version 1.1.4
Comparing to
See all releases


Code changes from version 1.1.3 to 1.1.4

Files changed (24) hide show
  1. app/code/community/Listrak/Remarketing/Block/Ecjs.php +3 -0
  2. app/code/community/Listrak/Remarketing/Block/Modal.php +34 -31
  3. app/code/community/Listrak/Remarketing/Helper/Data.php +18 -0
  4. app/code/community/Listrak/Remarketing/Helper/Review/Update.php +40 -0
  5. app/code/community/Listrak/Remarketing/Model/Abandonedcart/Api.php +2 -1
  6. app/code/community/Listrak/Remarketing/Model/Apiextension/Api.php +222 -207
  7. app/code/community/Listrak/Remarketing/Model/Click.php +32 -32
  8. app/code/community/Listrak/Remarketing/Model/Click/Api.php +1 -0
  9. app/code/community/Listrak/Remarketing/Model/Log/Api.php +1 -2
  10. app/code/community/Listrak/Remarketing/Model/Mysql4/Abandonedcart.php +60 -60
  11. app/code/community/Listrak/Remarketing/Model/Mysql4/Review/Update.php +20 -0
  12. app/code/community/Listrak/Remarketing/Model/Mysql4/Review/Update/Collection.php +61 -0
  13. app/code/community/Listrak/Remarketing/Model/Observer.php +73 -31
  14. app/code/community/Listrak/Remarketing/Model/Review/Update.php +48 -0
  15. app/code/community/Listrak/Remarketing/Model/Review/Update/Api.php +242 -0
  16. app/code/community/Listrak/Remarketing/Model/Review/Update/Api/V2.php +9 -0
  17. app/code/community/Listrak/Remarketing/controllers/Adminhtml/AbandonedcartreportController.php +1 -1
  18. app/code/community/Listrak/Remarketing/controllers/Adminhtml/EmailcaptureController.php +1 -1
  19. app/code/community/Listrak/Remarketing/etc/api.xml +40 -0
  20. app/code/community/Listrak/Remarketing/etc/config.xml +44 -1
  21. app/code/community/Listrak/Remarketing/etc/system.xml +129 -101
  22. app/code/community/Listrak/Remarketing/etc/wsdl.xml +240 -0
  23. app/code/community/Listrak/Remarketing/sql/listrak_remarketing_setup/mysql4-upgrade-1.1.3-1.1.4.php +28 -0
  24. package.xml +16 -18
app/code/community/Listrak/Remarketing/Block/Ecjs.php CHANGED
@@ -54,6 +54,9 @@ class Listrak_Remarketing_Block_Ecjs extends Mage_Core_Block_Text
54
55
protected function _toHtml()
56
{
57
$collections = Mage::getModel('listrak/emailcapture')->getCollection()->addFieldToFilter('page', $this->getMatchingPages());
58
59
if($collections && $collections->count()) {
54
55
protected function _toHtml()
56
{
57
+ if (!Mage::helper('remarketing')->coreEnabled())
58
+ return "";
59
+
60
$collections = Mage::getModel('listrak/emailcapture')->getCollection()->addFieldToFilter('page', $this->getMatchingPages());
61
62
if($collections && $collections->count()) {
app/code/community/Listrak/Remarketing/Block/Modal.php CHANGED
@@ -1,31 +1,34 @@
1
- <?php
2
- // Listrak Remarketing Magento Extension Ver. 1.0.0
3
- // © 2011 Listrak, Inc.
4
-
5
- class Listrak_Remarketing_Block_Modal extends Mage_Core_Block_Text
6
- {
7
-
8
- public function getPageName()
9
- {
10
- return $this->_getData('page_name');
11
- }
12
-
13
- protected function _toHtml()
14
- {
15
- $merchantID = Mage::getStoreConfig('remarketing/modal/listrakMerchantID');
16
- if(!Mage::getStoreConfig('remarketing/modal/enabled') || strlen(Mage::getStoreConfig('remarketing/modal/scriptLocation')) < 1 || strlen(trim($merchantID)) < 12) {
17
- return "";
18
- }
19
-
20
- return '<script type="text/javascript">' .
21
- 'var biJsHost = (("https:" == document.location.protocol) ? "https://" : "http://");' .
22
- 'document.write(unescape("%3Cscript src=\'" + biJsHost + "'. Mage::getStoreConfig('remarketing/modal/scriptLocation') .'?m='. $merchantID .'&v=1\' type=\'text/javascript\'%3E%3C/script%3E"));' .
23
- '</script>'.
24
- '<script type="text/javascript">'.
25
- 'var _mlm = setInterval(function() { '.
26
- 'if(!window.jQuery) { return; }'.
27
- 'clearInterval(_mlm);'.
28
- 'jQuery(document).bind("ltkmodal.show", function() { if(typeof ecjsInit === "function") { ecjsInit(); } }); }, 100);'.
29
- '</script>';
30
- }
31
- }
1
+ <?php
2
+ // Listrak Remarketing Magento Extension Ver. 1.0.0
3
+ // © 2011 Listrak, Inc.
4
+
5
+ class Listrak_Remarketing_Block_Modal extends Mage_Core_Block_Text
6
+ {
7
+
8
+ public function getPageName()
9
+ {
10
+ return $this->_getData('page_name');
11
+ }
12
+
13
+ protected function _toHtml()
14
+ {
15
+ if (!Mage::helper("remarketing")->coreEnabled())
16
+ return "";
17
+
18
+ $merchantID = Mage::getStoreConfig('remarketing/modal/listrakMerchantID');
19
+ if(!Mage::getStoreConfig('remarketing/modal/enabled') || strlen(Mage::getStoreConfig('remarketing/modal/scriptLocation')) < 1 || strlen(trim($merchantID)) < 12) {
20
+ return "";
21
+ }
22
+
23
+ return '<script type="text/javascript">' .
24
+ 'var biJsHost = (("https:" == document.location.protocol) ? "https://" : "http://");' .
25
+ 'document.write(unescape("%3Cscript src=\'" + biJsHost + "'. Mage::getStoreConfig('remarketing/modal/scriptLocation') .'?m='. $merchantID .'&v=1\' type=\'text/javascript\'%3E%3C/script%3E"));' .
26
+ '</script>'.
27
+ '<script type="text/javascript">'.
28
+ 'var _mlm = setInterval(function() { '.
29
+ 'if(!window.jQuery) { return; }'.
30
+ 'clearInterval(_mlm);'.
31
+ 'jQuery(document).bind("ltkmodal.show", function() { if(typeof ecjsInit === "function") { ecjsInit(); } }); }, 100);'.
32
+ '</script>';
33
+ }
34
+ }
app/code/community/Listrak/Remarketing/Helper/Data.php CHANGED
@@ -29,5 +29,23 @@ class Listrak_Remarketing_Helper_Data extends Mage_Core_Helper_Abstract
29
public function checkSetupStatus() {
30
return Mage::getStoreConfig('remarketing/config/account_created');
31
}
32
}
33
29
public function checkSetupStatus() {
30
return Mage::getStoreConfig('remarketing/config/account_created');
31
}
32
+
33
+ public function coreEnabled() {
34
+ return Mage::getStoreConfig('remarketing/modules/core');
35
+ }
36
+
37
+ public function reviewsEnabled() {
38
+ return Mage::getStoreConfig('remarketing/modules/reviews');
39
+ }
40
+
41
+ public function requireCoreEnabled() {
42
+ if (!$this->coreEnabled())
43
+ throw new Exception('Listrak core functionality has been turned off in the System Configuration.');
44
+ }
45
+
46
+ public function requireReviewsEnabled() {
47
+ if (!$this->reviewsEnabled())
48
+ throw new Exception('Listrak reviews API has been turned off in the System Configuration.');
49
+ }
50
}
51
app/code/community/Listrak/Remarketing/Helper/Review/Update.php ADDED
@@ -0,0 +1,40 @@
1
+ <?php
2
+ // Listrak Remarketing Magento Extension Ver. 1.0.0
3
+ // � 2011 Listrak, Inc.
4
+
5
+ class Listrak_Remarketing_Helper_Review_Update extends Mage_Core_Helper_Abstract
6
+ {
7
+ public function getReviewListCollection($storeId) {
8
+ $collection = Mage::getModel('review/review')
9
+ ->getCollection()
10
+ ->addStoreFilter($storeId);
11
+
12
+ $collection
13
+ ->getSelect()
14
+ ->joinLeft(
15
+ array('updatetime' => Mage::getModel('listrak/review_update')->getReviewUpdateCollection()->getSelect()),
16
+ "main_table.review_id = updatetime.review_id",
17
+ array("updatetime.update_id", "updatetime.updated_at")
18
+ )
19
+ ->joinLeft(array('employee' => Mage::getSingleton('core/resource')->getTableName('customer/entity')), 'detail.customer_id = employee.entity_id', array('employee.email'));
20
+
21
+ return $collection;
22
+ }
23
+
24
+ public function getRatingSummaryListCollection($storeId) {
25
+ $collection = Mage::getModel('review/review_summary')
26
+ ->getCollection();
27
+
28
+ $collection->getSelect()
29
+ ->joinLeft(
30
+ array('updatetime' => Mage::getModel('listrak/review_update')->getRatingSummaryUpdateCollection()->getSelect()),
31
+ "review_entity_summary.primary_id = updatetime.rating_summary_id AND review_entity_summary.store_id = updatetime.store_id",
32
+ array("updatetime.update_id", "updatetime.updated_at")
33
+ )
34
+ ->where('review_entity_summary.store_id = ?', $storeId);
35
+
36
+ return $collection;
37
+ }
38
+ }
39
+
40
+ ?>
app/code/community/Listrak/Remarketing/Model/Abandonedcart/Api.php CHANGED
@@ -5,7 +5,8 @@
5
class Listrak_Remarketing_Model_Abandonedcart_Api extends Mage_Api_Model_Resource_Abstract {
6
7
public function items($storeId = 1, $startDate = NULL, $endDate = NULL, $perPage, $page) {
8
-
9
if ($startDate === NULL || !strtotime($startDate)) {
10
$this->_fault('incorrect_date');
11
}
5
class Listrak_Remarketing_Model_Abandonedcart_Api extends Mage_Api_Model_Resource_Abstract {
6
7
public function items($storeId = 1, $startDate = NULL, $endDate = NULL, $perPage, $page) {
8
+ Mage::helper('remarketing')->requireCoreEnabled();
9
+
10
if ($startDate === NULL || !strtotime($startDate)) {
11
$this->_fault('incorrect_date');
12
}
app/code/community/Listrak/Remarketing/Model/Apiextension/Api.php CHANGED
@@ -1,208 +1,223 @@
1
- <?php
2
- // Listrak Remarketing Magento Extension Ver. 1.0.0
3
- // © 2011 Listrak, Inc.
4
-
5
- class Listrak_Remarketing_Model_Apiextension_Api extends Mage_Api_Model_Resource_Abstract {
6
-
7
- public function products($storeId = 1, $perPage = 50, $page = 1) {
8
- $collection = Mage::getModel('catalog/product')->getCollection()
9
- ->addStoreFilter($storeId)
10
- ->addAttributeToSelect('*')
11
- ->addFieldToFilter('type_id', array('neq'=>'configurable'))
12
- ->setPageSize($perPage)
13
- ->setCurPage($page);
14
-
15
- $subquery = Mage::getSingleton('core/resource')
16
- ->getConnection('core_read')
17
- ->select()
18
- ->from($collection->getTable('catalog/product_super_link'), array('product_id', 'parent_id'))
19
- ->group('product_id')
20
- ->having('COUNT(*) = 1');
21
-
22
- $collection->getSelect()
23
- ->joinLeft( array('psl'=>$subquery), 'e.entity_id = psl.product_id', array())
24
- ->joinLeft( array('pp'=>$collection->getTable('catalog/product')), 'psl.parent_id = pp.entity_id', array('parent_id' => 'pp.entity_id', 'parent_sku' => 'pp.sku'));
25
-
26
- $result = array();
27
- $productInfo = array('entity_id' => '', 'sku' => '', 'name' => '', 'price' => '',
28
- 'special_price' => '', 'special_from_date' => '', 'special_to_date' => '',
29
- 'cost' => '', 'description' => '', 'short_description' => '', 'weight' => '',
30
- 'url_key' => '', 'url_path' => '', 'image' => '', 'small_image' => '', 'thumbnail' => '',
31
- 'parent_id' => '', 'parent_sku' => '');
32
-
33
- foreach ($collection as $product) {
34
- $item = array_intersect_key($product->toArray(), $productInfo);
35
- $result[] = $item;
36
- }
37
-
38
- return $result;
39
- }
40
-
41
- public function subscribers($storeId = 1, $startDate = NULL, $perPage = 50, $page = 1) {
42
- if ($startDate === NULL || !strtotime($startDate)) {
43
- $this->_fault('incorrect_date');
44
- }
45
-
46
- $result = array();
47
-
48
- $collection = Mage::getModel("listrak/apiextension")->getResource()->subscribers($storeId, $startDate, $perPage, $page);
49
-
50
- foreach($collection as $item) {
51
- $result[] = $item;
52
- }
53
-
54
- return $result;
55
- }
56
-
57
- public function subscribersPurge($endDate = NULL) {
58
- if ($endDate === NULL || !strtotime($endDate)) {
59
- $this->_fault('incorrect_date');
60
- }
61
-
62
- $collection = Mage::getModel("listrak/subscriberupdate")->getCollection()
63
- ->addFieldToFilter('updated_at', array('lt' => $endDate));
64
-
65
- $count = $collection->count();
66
-
67
- foreach($collection as $c) {
68
- $c->delete();
69
- }
70
-
71
- return $count;
72
- }
73
-
74
- public function customers($storeId = 1, $websiteId = 1, $perPage = 50, $page = 1) {
75
- $collection = Mage::getModel('customer/customer')->getCollection()
76
- ->addFieldToFilter('store_id',$storeId)
77
- ->addAttributeToSelect('*')
78
- ->setPageSize($perPage)
79
- ->setCurPage($page);
80
-
81
- $results = array();
82
- $fields = array('entity_id' => '', 'firstname' => '', 'lastname' => '', 'email' => '', 'website_id' => '', 'store_id' => '');
83
-
84
- foreach($collection as $customer) {
85
- $item = $customer->toArray();
86
- $results[] = array_intersect_key($item, $fields);
87
- }
88
-
89
- return $results;
90
- }
91
-
92
- public function orderStatus($storeId = 1, $startDate = NULL, $endDate = NULL, $perPage = 50, $page = 1, $filters = NULL) {
93
- $collection = Mage::getModel("sales/order")->getCollection()
94
- ->addFieldToFilter('store_id', $storeId)
95
- ->addAttributeToSelect('increment_id')
96
- ->addAttributeToSelect('updated_at')
97
- ->addAttributeToSelect('status')
98
- ->addFieldToFilter('updated_at',array('from'=>$startDate, 'to'=>$endDate))
99
- ->addFieldToFilter('status', array('neq'=>'pending'))
100
- ->setPageSize($perPage)->setCurPage($page)
101
- ->setOrder('updated_at', 'ASC');
102
-
103
- if (is_array($filters)) {
104
- try {
105
- foreach ($filters as $field => $value) {
106
- if (isset($this->_attributesMap['order'][$field])) {
107
- $field = $this->_attributesMap['order'][$field];
108
- }
109
-
110
- $collection->addFieldToFilter($field, $value);
111
- }
112
- } catch (Mage_Core_Exception $e) {
113
- $this->_fault('filters_invalid', $e->getMessage());
114
- }
115
- }
116
-
117
- $results = array();
118
-
119
- foreach($collection as $collectionItem) {
120
- $results[] = $collectionItem;
121
- }
122
-
123
- return $results;
124
- }
125
-
126
- public function orders($storeId = 1, $startDate = NULL, $endDate = NULL, $perPage = 50, $page = 1) {
127
- if ($startDate === NULL || !strtotime($startDate)) {
128
- $this->_fault('incorrect_date');
129
- }
130
-
131
- if ($endDate === NULL || !strtotime($endDate)) {
132
- $this->_fault('incorrect_date');
133
- }
134
-
135
- $collection = Mage::getModel("sales/order")->getCollection()
136
- ->addAttributeToSelect('increment_id')
137
- ->addFieldToFilter('created_at',array('from'=>$startDate, 'to'=>$endDate))
138
- ->setPageSize($perPage)->setCurPage($page)
139
- ->addFieldToFilter('store_id', $storeId)
140
- ->setOrder('created_at', 'ASC');
141
-
142
-
143
- $apiModel = Mage::getModel("sales/order_api");
144
-
145
- $results = array();
146
-
147
- $info_fields = array('created_at'=>'', 'status'=>'', 'customer_firstname'=>'', 'customer_lastname'=>'',
148
- 'customer_email'=>'', 'order_id'=>'', 'subtotal'=>'', 'tax_amount'=>'', 'grand_total'=>'',
149
- 'shipping_amount'=>'', 'billing_firstname'=>'');
150
-
151
- $address_fields = array('firstname' => '', 'lastname' => '', 'company' => '', 'address1' => '',
152
- 'address2' => '', 'city' => '', 'region' => '', 'postcode' => '', 'country' => '');
153
-
154
- foreach($collection as $collectionItem) {
155
- $res = array();
156
- $item = $apiModel->info($collectionItem->getIncrementId());
157
- $res["info"] = array_intersect_key($item, $info_fields);
158
- $res["info"]["order_id"] = $collectionItem->getIncrementId();
159
- $res["shipping_address"] = array_intersect_key($item["shipping_address"], $address_fields);
160
- $res["billing_address"] = array_intersect_key($item["billing_address"], $address_fields);
161
- $res["product"] = array();
162
- foreach($item["items"] as $orderItem) {
163
- if($orderItem["product_type"] != "configurable")
164
- $res["product"][] = $orderItem;
165
- }
166
- $res["session"] = Mage::getModel("listrak/session")->load($item["quote_id"], 'quote_id');
167
- $results[] = $res;
168
- }
169
-
170
- return $results;
171
- }
172
-
173
- public function info() {
174
- $result = array();
175
- $result["ini"] = array();
176
-
177
- $subModel = Mage::getModel("newsletter/subscriber");
178
- $orderModel = Mage::getModel("sales/order");
179
- $productModel = Mage::getModel('catalog/product');
180
-
181
- $result["classes"] = get_class($subModel) .','. get_class($orderModel) .','. get_class($orderModel->getCollection()) .','.
182
- get_class($productModel) .','. get_class($productModel->getCollection());
183
-
184
- $ra = Mage::getSingleton('core/resource')->getConnection('core_read');
185
- $numSessions = $ra->fetchRow("select count(*) as c from " . Mage::getModel("listrak/session")->getResource()->getTable("listrak/session"));
186
- $numSubUpdates = $ra->fetchRow("select count(*) as c from " . Mage::getModel("listrak/subscriberupdate")->getResource()->getTable("listrak/subscriber_update"));
187
- $numClicks = $ra->fetchRow("select count(*) as c from " . Mage::getModel("listrak/click")->getResource()->getTable("listrak/click"));
188
-
189
- $result["counts"] = $numSessions['c'] .','. $numSubUpdates['c'] .','. $numClicks['c'];
190
-
191
- $result["modules"] = array();
192
- $modules = (array)Mage::getConfig()->getNode('modules')->children();
193
-
194
- foreach($modules as $key => $value) {
195
- $valueArray = $value->asCanonicalArray();
196
- $result["modules"][] = "name=$key, version=" . $valueArray["version"] .", isActive=" . $valueArray["active"];
197
- }
198
-
199
- $ini = array("session.gc_maxlifetime", "session.cookie_lifetime", "session.gc_divisor", "session.gc_probability");
200
-
201
- foreach($ini as $iniParam) {
202
- $result["ini"][] = "$iniParam=" . ini_get($iniParam);
203
- }
204
-
205
- return $result;
206
- }
207
- }
208
1
+ <?php
2
+ // Listrak Remarketing Magento Extension Ver. 1.0.0
3
+ // © 2011 Listrak, Inc.
4
+
5
+ class Listrak_Remarketing_Model_Apiextension_Api extends Mage_Api_Model_Resource_Abstract {
6
+
7
+ public function products($storeId = 1, $perPage = 50, $page = 1) {
8
+ Mage::helper('remarketing')->requireCoreEnabled();
9
+
10
+ $collection = Mage::getModel('catalog/product')->getCollection()
11
+ ->addStoreFilter($storeId)
12
+ ->addAttributeToSelect('*')
13
+ ->addFieldToFilter('type_id', array('neq'=>'configurable'))
14
+ ->setPageSize($perPage)
15
+ ->setCurPage($page);
16
+
17
+ $subquery = Mage::getSingleton('core/resource')
18
+ ->getConnection('core_read')
19
+ ->select()
20
+ ->from($collection->getTable('catalog/product_super_link'), array('product_id', 'parent_id'))
21
+ ->group('product_id')
22
+ ->having('COUNT(*) = 1');
23
+
24
+ $collection->getSelect()
25
+ ->joinLeft( array('psl'=>$subquery), 'e.entity_id = psl.product_id', array())
26
+ ->joinLeft( array('pp'=>$collection->getTable('catalog/product')), 'psl.parent_id = pp.entity_id', array('parent_id' => 'pp.entity_id', 'parent_sku' => 'pp.sku'));
27
+
28
+ $result = array();
29
+ $productInfo = array('entity_id' => '', 'sku' => '', 'name' => '', 'price' => '',
30
+ 'special_price' => '', 'special_from_date' => '', 'special_to_date' => '',
31
+ 'cost' => '', 'description' => '', 'short_description' => '', 'weight' => '',
32
+ 'url_key' => '', 'url_path' => '', 'image' => '', 'small_image' => '', 'thumbnail' => '',
33
+ 'parent_id' => '', 'parent_sku' => '');
34
+
35
+ foreach ($collection as $product) {
36
+ $item = array_intersect_key($product->toArray(), $productInfo);
37
+ $result[] = $item;
38
+ }
39
+
40
+ return $result;
41
+ }
42
+
43
+ public function subscribers($storeId = 1, $startDate = NULL, $perPage = 50, $page = 1) {
44
+ Mage::helper('remarketing')->requireCoreEnabled();
45
+
46
+ if ($startDate === NULL || !strtotime($startDate)) {
47
+ $this->_fault('incorrect_date');
48
+ }
49
+
50
+ $result = array();
51
+
52
+ $collection = Mage::getModel("listrak/apiextension")->getResource()->subscribers($storeId, $startDate, $perPage, $page);
53
+
54
+ foreach($collection as $item) {
55
+ $result[] = $item;
56
+ }
57
+
58
+ return $result;
59
+ }
60
+
61
+ public function subscribersPurge($endDate = NULL) {
62
+ if ($endDate === NULL || !strtotime($endDate)) {
63
+ $this->_fault('incorrect_date');
64
+ }
65
+
66
+ $collection = Mage::getModel("listrak/subscriberupdate")->getCollection()
67
+ ->addFieldToFilter('updated_at', array('lt' => $endDate));
68
+
69
+ $count = $collection->count();
70
+
71
+ foreach($collection as $c) {
72
+ $c->delete();
73
+ }
74
+
75
+ return $count;
76
+ }
77
+
78
+ public function customers($storeId = 1, $websiteId = 1, $perPage = 50, $page = 1) {
79
+ Mage::helper('remarketing')->requireCoreEnabled();
80
+
81
+ $collection = Mage::getModel('customer/customer')->getCollection()
82
+ ->addFieldToFilter('store_id',$storeId)
83
+ ->addAttributeToSelect('*')
84
+ ->setPageSize($perPage)
85
+ ->setCurPage($page);
86
+
87
+ $results = array();
88
+ $fields = array('entity_id' => '', 'firstname' => '', 'lastname' => '', 'email' => '', 'website_id' => '', 'store_id' => '');
89
+
90
+ foreach($collection as $customer) {
91
+ $item = $customer->toArray();
92
+ $results[] = array_intersect_key($item, $fields);
93
+ }
94
+
95
+ return $results;
96
+ }
97
+
98
+ public function orderStatus($storeId = 1, $startDate = NULL, $endDate = NULL, $perPage = 50, $page = 1, $filters = NULL) {
99
+ Mage::helper('remarketing')->requireCoreEnabled();
100
+
101
+ $collection = Mage::getModel("sales/order")->getCollection()
102
+ ->addFieldToFilter('store_id', $storeId)
103
+ ->addAttributeToSelect('increment_id')
104
+ ->addAttributeToSelect('updated_at')
105
+ ->addAttributeToSelect('status')
106
+ ->addFieldToFilter('updated_at',array('from'=>$startDate, 'to'=>$endDate))
107
+ ->addFieldToFilter('status', array('neq'=>'pending'))
108
+ ->setPageSize($perPage)->setCurPage($page)
109
+ ->setOrder('updated_at', 'ASC');
110
+
111
+ if (is_array($filters)) {
112
+ try {
113
+ foreach ($filters as $field => $value) {
114
+ if (isset($this->_attributesMap['order'][$field])) {
115
+ $field = $this->_attributesMap['order'][$field];
116
+ }
117
+
118
+ $collection->addFieldToFilter($field, $value);
119
+ }
120
+ } catch (Mage_Core_Exception $e) {
121
+ $this->_fault('filters_invalid', $e->getMessage());
122
+ }
123
+ }
124
+
125
+ $results = array();
126
+
127
+ foreach($collection as $collectionItem) {
128
+ $results[] = $collectionItem;
129
+ }
130
+
131
+ return $results;
132
+ }
133
+
134
+ public function orders($storeId = 1, $startDate = NULL, $endDate = NULL, $perPage = 50, $page = 1) {
135
+ Mage::helper('remarketing')->requireCoreEnabled();
136
+
137
+ if ($startDate === NULL || !strtotime($startDate)) {
138
+ $this->_fault('incorrect_date');
139
+ }
140
+
141
+ if ($endDate === NULL || !strtotime($endDate)) {
142
+ $this->_fault('incorrect_date');
143
+ }
144
+
145
+ $collection = Mage::getModel("sales/order")->getCollection()
146
+ ->addAttributeToSelect('increment_id')
147
+ ->addFieldToFilter('created_at',array('from'=>$startDate, 'to'=>$endDate))
148
+ ->setPageSize($perPage)->setCurPage($page)
149
+ ->addFieldToFilter('store_id', $storeId)
150
+ ->setOrder('created_at', 'ASC');
151
+
152
+
153
+ $apiModel = Mage::getModel("sales/order_api");
154
+
155
+ $results = array();
156
+
157
+ $info_fields = array('created_at'=>'', 'status'=>'', 'customer_firstname'=>'', 'customer_lastname'=>'',
158
+ 'customer_email'=>'', 'order_id'=>'', 'subtotal'=>'', 'tax_amount'=>'', 'grand_total'=>'',
159
+ 'shipping_amount'=>'', 'billing_firstname'=>'');
160
+
161
+ $address_fields = array('firstname' => '', 'lastname' => '', 'company' => '', 'address1' => '',
162
+ 'address2' => '', 'city' => '', 'region' => '', 'postcode' => '', 'country' => '');
163
+
164
+ foreach($collection as $collectionItem) {
165
+ $res = array();
166
+ $item = $apiModel->info($collectionItem->getIncrementId());
167
+ $res["info"] = array_intersect_key($item, $info_fields);
168
+ $res["info"]["order_id"] = $collectionItem->getIncrementId();
169
+ $res["shipping_address"] = array_intersect_key($item["shipping_address"], $address_fields);
170
+ $res["billing_address"] = array_intersect_key($item["billing_address"], $address_fields);
171
+ $res["product"] = array();
172
+ foreach($item["items"] as $orderItem) {
173
+ if($orderItem["product_type"] != "configurable")
174
+ $res["product"][] = $orderItem;
175
+ }
176
+ $res["session"] = Mage::getModel("listrak/session")->load($item["quote_id"], 'quote_id');
177
+ $results[] = $res;
178
+ }
179
+
180
+ return $results;
181
+ }
182
+
183
+ public function info() {
184
+ $result = array();
185
+ $result["magentoVersion"] = Mage::getVersion();
186
+ $result["listrakSettings"] = array(
187
+ "coreEnabled" => Mage::helper('remarketing')->coreEnabled() ? "true" : "false",
188
+ "reviewsApiEnabled" => Mage::helper('remarketing')->reviewsEnabled() ? "true" : "false"
189
+ );
190
+ $result["ini"] = array();
191
+
192
+ $subModel = Mage::getModel("newsletter/subscriber");
193
+ $orderModel = Mage::getModel("sales/order");
194
+ $productModel = Mage::getModel('catalog/product');
195
+
196
+ $result["classes"] = get_class($subModel) .','. get_class($orderModel) .','. get_class($orderModel->getCollection()) .','.
197
+ get_class($productModel) .','. get_class($productModel->getCollection());
198
+
199
+ $ra = Mage::getSingleton('core/resource')->getConnection('core_read');
200
+ $numSessions = $ra->fetchRow("select count(*) as c from " . Mage::getModel("listrak/session")->getResource()->getTable("listrak/session"));
201
+ $numSubUpdates = $ra->fetchRow("select count(*) as c from " . Mage::getModel("listrak/subscriberupdate")->getResource()->getTable("listrak/subscriber_update"));
202
+ $numClicks = $ra->fetchRow("select count(*) as c from " . Mage::getModel("listrak/click")->getResource()->getTable("listrak/click"));
203
+
204
+ $result["counts"] = $numSessions['c'] .','. $numSubUpdates['c'] .','. $numClicks['c'];
205
+
206
+ $result["modules"] = array();
207
+ $modules = (array)Mage::getConfig()->getNode('modules')->children();
208
+
209
+ foreach($modules as $key => $value) {
210
+ $valueArray = $value->asCanonicalArray();
211
+ $result["modules"][] = "name=$key, version=" . $valueArray["version"] .", isActive=" . $valueArray["active"];
212
+ }
213
+
214
+ $ini = array("session.gc_maxlifetime", "session.cookie_lifetime", "session.gc_divisor", "session.gc_probability");
215
+
216
+ foreach($ini as $iniParam) {
217
+ $result["ini"][] = "$iniParam=" . ini_get($iniParam);
218
+ }
219
+
220
+ return $result;
221
+ }
222
+ }
223
app/code/community/Listrak/Remarketing/Model/Click.php CHANGED
@@ -1,33 +1,33 @@
1
- <?php
2
- // Listrak Remarketing Magento Extension Ver. 1.0.0
3
- // © 2011 Listrak, Inc.
4
-
5
- class Listrak_Remarketing_Model_Click extends Mage_Core_Model_Abstract
6
- {
7
- public function _construct()
8
- {
9
- parent::_construct();
10
- $this->_init('listrak/click');
11
- }
12
-
13
- public function checkForClick() {
14
- foreach(Mage::app()->getRequest()->getParams() as $key => $value) {
15
- if(stripos($key, 'trk_') !== false) {
16
- $this->recordClick();
17
- break;
18
- }
19
- }
20
- }
21
-
22
- private function recordClick() {
23
- $this->setTokenUid(Mage::helper('remarketing')->gen_uuid());
24
- $this->setClickDate(gmdate('Y-m-d H:i:s'));
25
- $session = Mage::getSingleton('listrak/session');
26
- $session->init();
27
- $this->setSessionId($session->getId());
28
- $this->setQuerystring(http_build_query(Mage::app()->getRequest()->getParams()));
29
- $this->save();
30
-
31
- Mage::getModel('core/cookie')->set('ltktrk', $this->getTokenUid(), TRUE, NULL, NULL, NULL, TRUE);
32
- }
33
}
1
+ <?php
2
+ // Listrak Remarketing Magento Extension Ver. 1.0.0
3
+ // © 2011 Listrak, Inc.
4
+
5
+ class Listrak_Remarketing_Model_Click extends Mage_Core_Model_Abstract
6
+ {
7
+ public function _construct()
8
+ {
9
+ parent::_construct();
10
+ $this->_init('listrak/click');
11
+ }
12
+
13
+ public function checkForClick() {
14
+ foreach(Mage::app()->getRequest()->getParams() as $key => $value) {
15
+ if(stripos($key, 'trk_') !== false) {
16
+ $this->recordClick();
17
+ break;
18
+ }
19
+ }
20
+ }
21
+
22
+ private function recordClick() {
23
+ $this->setTokenUid(Mage::helper('remarketing')->gen_uuid());
24
+ $this->setClickDate(gmdate('Y-m-d H:i:s'));
25
+ $session = Mage::getSingleton('listrak/session');
26
+ $session->init();
27
+ $this->setSessionId($session->getId());
28
+ $this->setQuerystring(http_build_query(Mage::app()->getRequest()->getParams()));
29
+ $this->save();
30
+
31
+ Mage::getModel('core/cookie')->set('ltktrk', $this->getTokenUid(), TRUE, NULL, NULL, NULL, TRUE);
32
+ }
33
}
app/code/community/Listrak/Remarketing/Model/Click/Api.php CHANGED
@@ -5,6 +5,7 @@
5
class Listrak_Remarketing_Model_Click_Api extends Mage_Api_Model_Resource_Abstract {
6
7
public function items($storeId = 1, $startDate = NULL, $endDate = NULL, $perPage = 50, $page = 1) {
8
9
if ($startDate === NULL || !strtotime($startDate)) {
10
$this->_fault('incorrect_date');
5
class Listrak_Remarketing_Model_Click_Api extends Mage_Api_Model_Resource_Abstract {
6
7
public function items($storeId = 1, $startDate = NULL, $endDate = NULL, $perPage = 50, $page = 1) {
8
+ Mage::helper('remarketing')->requireCoreEnabled();
9
10
if ($startDate === NULL || !strtotime($startDate)) {
11
$this->_fault('incorrect_date');
app/code/community/Listrak/Remarketing/Model/Log/Api.php CHANGED
@@ -5,8 +5,7 @@
5
class Listrak_Remarketing_Model_Log_Api extends Mage_Api_Model_Resource_Abstract {
6
7
public function items($storeId = 1, $startDate = NULL, $endDate = NULL, $perPage = 50, $page = 1, $logTypeId = 0) {
8
-
9
- if ($startDate === NULL || !strtotime($startDate)) {
10
$this->_fault('incorrect_date');
11
}
12
5
class Listrak_Remarketing_Model_Log_Api extends Mage_Api_Model_Resource_Abstract {
6
7
public function items($storeId = 1, $startDate = NULL, $endDate = NULL, $perPage = 50, $page = 1, $logTypeId = 0) {
8
+ if ($startDate === NULL || !strtotime($startDate)) {
9
$this->_fault('incorrect_date');
10
}
11
app/code/community/Listrak/Remarketing/Model/Mysql4/Abandonedcart.php CHANGED
@@ -1,60 +1,60 @@
1
- <?php
2
- // Listrak Remarketing Magento Extension Ver. 1.0.0
3
- // © 2011 Listrak, Inc.
4
-
5
- class Listrak_Remarketing_Model_Mysql4_Abandonedcart extends Mage_Core_Model_Mysql4_Abstract
6
- {
7
- protected $_read;
8
-
9
- protected $_write;
10
-
11
- public function _construct()
12
- {
13
- $this->_init('listrak/session','id');
14
- $this->_read = $this->_getReadAdapter();
15
- $this->_write = $this->_getWriteAdapter();
16
- }
17
-
18
- protected function _afterLoad(Mage_Core_Model_Abstract $object) {
19
- $object->setSession(Mage::getModel("listrak/session")->load($object->getId()));
20
-
21
- $this->loadCart($object);
22
-
23
- return parent::_afterLoad($object);
24
- }
25
-
26
- protected function loadCart(Mage_Core_Model_Abstract $object) {
27
- $product_fields = array(
28
- 'entity_id'=>'', 'sku'=>'', 'name'=>'',
29
- 'special_price' => '', 'special_from_date' => '', 'special_to_date' => '',
30
- 'cost'=>'', 'description'=>'',
31
- 'short_description'=>'', 'weight'=>'', 'url_key'=>'', 'url_path'=>'',
32
- 'image'=>'', 'small_image'=>'', 'thumbnail'=>'', 'qty'=>'');
33
-
34
- $fields = array(
35
- 'item_id' => 'q.item_id',
36
- 'quote_id' => 'q.quote_id',
37
- 'product_id' => 'q.product_id',
38
- 'qty' => 'q.qty',
39
- 'price' => 'q.price');
40
-
41
- $products = array();
42
-
43
- $qiSelect = $this->_read->select()
44
- ->from(array('q' => $this->getTable('sales/quote_item')), $fields)
45
- ->where('q.quote_id = ?', $object->getQuoteId())
46
- ->where('q.product_type <> "configurable"');
47
-
48
- $qiResult = $this->_read->fetchAll($qiSelect);
49
-
50
- foreach($qiResult as $qi) {
51
- $product = Mage::getModel('catalog/product')->load($qi['product_id']);
52
- $qitem = array_intersect_key($product->toArray(),$product_fields);
53
- $qitem["qty"] = $qi["qty"];
54
- $qitem["price"] = $qi["price"];
55
- $products[] = $qitem;
56
- }
57
-
58
- $object->setProducts($products);
59
- }
60
- }
1
+ <?php
2
+ // Listrak Remarketing Magento Extension Ver. 1.0.0
3
+ // © 2011 Listrak, Inc.
4
+
5
+ class Listrak_Remarketing_Model_Mysql4_Abandonedcart extends Mage_Core_Model_Mysql4_Abstract
6
+ {
7
+ protected $_read;
8
+
9
+ protected $_write;
10
+
11
+ public function _construct()
12
+ {
13
+ $this->_init('listrak/session','id');
14
+ $this->_read = $this->_getReadAdapter();
15
+ $this->_write = $this->_getWriteAdapter();
16
+ }
17
+
18
+ protected function _afterLoad(Mage_Core_Model_Abstract $object) {
19
+ $object->setSession(Mage::getModel("listrak/session")->load($object->getId()));
20
+
21
+ $this->loadCart($object);
22
+
23
+ return parent::_afterLoad($object);
24
+ }
25
+
26
+ protected function loadCart(Mage_Core_Model_Abstract $object) {
27
+ $product_fields = array(
28
+ 'entity_id'=>'', 'sku'=>'', 'name'=>'',
29
+ 'special_price' => '', 'special_from_date' => '', 'special_to_date' => '',
30
+ 'cost'=>'', 'description'=>'',
31
+ 'short_description'=>'', 'weight'=>'', 'url_key'=>'', 'url_path'=>'',
32
+ 'image'=>'', 'small_image'=>'', 'thumbnail'=>'', 'qty'=>'');
33
+
34
+ $fields = array(
35
+ 'item_id' => 'q.item_id',
36
+ 'quote_id' => 'q.quote_id',
37
+ 'product_id' => 'q.product_id',
38
+ 'qty' => 'q.qty',
39
+ 'price' => 'q.price');
40
+
41
+ $products = array();
42
+
43
+ $qiSelect = $this->_read->select()
44
+ ->from(array('q' => $this->getTable('sales/quote_item')), $fields)
45
+ ->where('q.quote_id = ?', $object->getQuoteId())
46
+ ->where('q.product_type <> "configurable"');
47
+
48
+ $qiResult = $this->_read->fetchAll($qiSelect);
49
+
50
+ foreach($qiResult as $qi) {
51
+ $product = Mage::getModel('catalog/product')->load($qi['product_id']);
52
+ $qitem = array_intersect_key($product->toArray(),$product_fields);
53
+ $qitem["qty"] = $qi["qty"];
54
+ $qitem["price"] = $qi["price"];
55
+ $products[] = $qitem;
56
+ }
57
+
58
+ $object->setProducts($products);
59
+ }
60
+ }
app/code/community/Listrak/Remarketing/Model/Mysql4/Review/Update.php ADDED
@@ -0,0 +1,20 @@
1
+ <?php
2
+ // Listrak Remarketing Magento Extension Ver. 1.0.0
3
+ // � 2011 Listrak, Inc.
4
+
5
+ class Listrak_Remarketing_Model_Mysql4_Review_Update extends Mage_Core_Model_Mysql4_Abstract {
6
+
7
+ protected $_read;
8
+
9
+ protected $_write;
10
+
11
+ protected function _construct()
12
+ {
13
+ $this->_init('listrak/review_update', 'update_id');
14
+ $this->_read = $this->_getReadAdapter();
15
+ $this->_write = $this->_getWriteAdapter();
16
+ }
17
+
18
+ }
19
+
20
+ ?>
app/code/community/Listrak/Remarketing/Model/Mysql4/Review/Update/Collection.php ADDED
@@ -0,0 +1,61 @@
1
+ <?php
2
+ // Listrak Remarketing Magento Extension Ver. 1.0.0
3
+ // � 2011 Listrak, Inc.
4
+
5
+ class Listrak_Remarketing_Model_Mysql4_Review_Update_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
6
+ {
7
+ protected function _construct() {
8
+ $this->_init('listrak/review_update');
9
+ }
10
+
11
+ public function productReviewsOnly() {
12
+ $this->getSelect()
13
+ ->where('entity_id = 1');
14
+
15
+ return $this;
16
+ }
17
+
18
+ public function updatedRowsOnly() {
19
+ $this->getSelect()
20
+ ->where('activity = 1');
21
+
22
+ return $this;
23
+ }
24
+
25
+ public function deletedRowsOnly() {
26
+ $this->getSelect()
27
+ ->where('activity = 2');
28
+
29
+ return $this;
30
+ }
31
+
32
+ public function getReviewUpdateTime() {
33
+ $this->productReviewsOnly()
34
+ ->getSelect()
35
+ ->reset(Zend_Db_Select::COLUMNS)
36
+ ->columns("review_id")
37
+ ->columns(array("update_id" => "MAX(update_id)"))
38
+ ->columns(array("updated_at" => "MAX(activity_time)"))
39
+ ->group("main_table.review_id");
40
+
41
+ return $this;
42
+ }
43
+
44
+ public function getRatingSummaryUpdateTime() {
45
+ $this->productReviewsOnly()
46
+ ->getSelect()
47
+ ->reset(Zend_Db_Select::COLUMNS)
48
+ ->columns(array("update_id" => "MAX(update_id)"))
49
+ ->columns(array("updated_at" => "MAX(activity_time)"))
50
+ ->join(
51
+ array("agg" => Mage::getSingleton('core/resource')->getTableName('review/review_aggregate')),
52
+ "main_table.entity_pk_value = agg.entity_pk_value AND main_table.entity_id = agg.entity_type",
53
+ array("rating_summary_id" => "primary_id", "store_id" => "store_id")
54
+ )
55
+ ->group(array("agg.primary_id", "agg.store_id"));
56
+
57
+ return $this;
58
+ }
59
+ }
60
+
61
+ ?>
app/code/community/Listrak/Remarketing/Model/Observer.php CHANGED
@@ -5,49 +5,55 @@
5
class Listrak_Remarketing_Model_Observer {
6
7
public function sessionInit($observer) {
8
- try {
9
- $session = Mage::getSingleton('listrak/session');
10
- $session->init(true);
11
12
- $click = Mage::getModel('listrak/click');
13
- $click->checkForClick();
14
- }
15
- catch(Exception $ex) {
16
- Mage::getModel("listrak/log")->addException($ex);
17
- }
18
19
return $this;
20
}
21
22
public function orderPlaced($observer) {
23
- try {
24
- $cs = Mage::getSingleton('core/session');
25
- $cs->setIsListrakOrderMade(true);
26
- $session = Mage::getSingleton('listrak/session');
27
- $session->init();
28
- }
29
- catch(Exception $ex) {
30
- Mage::getModel("listrak/log")->addException($ex);
31
- }
32
33
return $this;
34
}
35
36
public function subscriberSaved($observer) {
37
- try {
38
- $s = $observer->getSubscriber();
39
- $su = Mage::getModel("listrak/subscriberupdate")->load($s->getSubscriberId(), 'subscriber_id');
40
41
- if(!$su->getData()) {
42
- $su->setSubscriberId($s->getSubscriberId());
43
- }
44
45
- $su->setUpdatedAt(gmdate('Y-m-d H:i:s'));
46
- $su->save();
47
- }
48
- catch(Exception $ex) {
49
- Mage::getModel("listrak/log")->addException($ex);
50
- }
51
52
return $this;
53
}
@@ -67,7 +73,11 @@ class Listrak_Remarketing_Model_Observer {
67
68
$msg .= "Purged " . $ab->purge($storeId, gmdate("Y-m-d H:i:s", time() - 604800)) . " abandoned carts/sessions\n";
69
$msg .= "Purged " . $cl->purge($storeId, gmdate("Y-m-d H:i:s", time() - 604800)) . " clicks\n";
70
- $msg .= "Purged " . $l->purge($storeId, gmdate("Y-m-d H:i:s", time() - 604800)) . " log entries";
71
Mage::getModel("listrak/log")->addMessage($msg, $storeId);
72
}
73
}
@@ -78,4 +88,36 @@ class Listrak_Remarketing_Model_Observer {
78
79
return $this;
80
}
81
}
5
class Listrak_Remarketing_Model_Observer {
6
7
public function sessionInit($observer) {
8
+ if (Mage::helper('remarketing')->coreEnabled()) {
9
+ try {
10
+ $session = Mage::getSingleton('listrak/session');
11
+ $session->init(true);
12
13
+ $click = Mage::getModel('listrak/click');
14
+ $click->checkForClick();
15
+ }
16
+ catch(Exception $ex) {
17
+ Mage::getModel("listrak/log")->addException($ex);
18
+ }
19
+ }
20
21
return $this;
22
}
23
24
public function orderPlaced($observer) {
25
+ if (Mage::helper('remarketing')->coreEnabled()) {
26
+ try {
27
+ $cs = Mage::getSingleton('core/session');
28
+ $cs->setIsListrakOrderMade(true);
29
+ $session = Mage::getSingleton('listrak/session');
30
+ $session->init();
31
+ }
32
+ catch(Exception $ex) {
33
+ Mage::getModel("listrak/log")->addException($ex);
34
+ }
35
+ }
36
37
return $this;
38
}
39
40
public function subscriberSaved($observer) {
41
+ if (Mage::helper('remarketing')->coreEnabled()) {
42
+ try {
43
+ $s = $observer->getSubscriber();
44
+ $su = Mage::getModel("listrak/subscriberupdate")->load($s->getSubscriberId(), 'subscriber_id');
45
46
+ if(!$su->getData()) {
47
+ $su->setSubscriberId($s->getSubscriberId());
48
+ }
49
50
+ $su->setUpdatedAt(gmdate('Y-m-d H:i:s'));
51
+ $su->save();
52
+ }
53
+ catch(Exception $ex) {
54
+ Mage::getModel("listrak/log")->addException($ex);
55
+ }
56
+ }
57
58
return $this;
59
}
73
74
$msg .= "Purged " . $ab->purge($storeId, gmdate("Y-m-d H:i:s", time() - 604800)) . " abandoned carts/sessions\n";
75
$msg .= "Purged " . $cl->purge($storeId, gmdate("Y-m-d H:i:s", time() - 604800)) . " clicks\n";
76
+ $msg .= "Purged " . $l->purge($storeId, gmdate("Y-m-d H:i:s", time() - 604800)) . " log entries\n";
77
+
78
+ $revPurged = Mage::getModel("listrak/review_update_api")->reviewUpdatePurge(30);
79
+ $msg .= "Purged " . $revPurged['count'] . " review update entries";
80
+
81
Mage::getModel("listrak/log")->addMessage($msg, $storeId);
82
}
83
}
88
89
return $this;
90
}
91
+
92
+ public function reviewUpdated($observer) {
93
+ if (Mage::helper('remarketing')->reviewsEnabled()) {
94
+ try {
95
+ $review = $observer->getObject();
96
+
97
+ Mage::getModel('listrak/review_update')
98
+ ->markUpdated($review->getReviewId(), $review->getEntityId(), $review->getEntityPkValue());
99
+ }
100
+ catch(Exception $ex) {
101
+ Mage::getModel("listrak/log")->addException($ex);
102
+ }
103
+ }
104
+
105
+ return $this;
106
+ }
107
+
108
+ public function reviewDeleted($observer) {
109
+ if (Mage::helper('remarketing')->reviewsEnabled()) {
110
+ try {
111
+ $review = $observer->getObject();
112
+
113
+ Mage::getModel('listrak/review_update')
114
+ ->markDeleted($review->getReviewId(), $review->getEntityId(), $review->getEntityPkValue());
115
+ }
116
+ catch(Exception $ex) {
117
+ Mage::getModel('listrak/log')->addException($ex);
118
+ }
119
+ }
120
+
121
+ return $this;
122
+ }
123
}
app/code/community/Listrak/Remarketing/Model/Review/Update.php ADDED
@@ -0,0 +1,48 @@
1
+ <?php
2
+ // Listrak Remarketing Magento Extension Ver. 1.0.0
3
+ // � 2011 Listrak, Inc.
4
+
5
+ class Listrak_Remarketing_Model_Review_Update extends Mage_Core_Model_Abstract
6
+ {
7
+ const ACTIVITYTYPE_UPDATE = 1;
8
+ const ACTIVITYTYPE_DELETE = 2;
9
+
10
+ public function _construct()
11
+ {
12
+ parent::_construct();
13
+ $this->_init('listrak/review_update');
14
+ }
15
+
16
+ public function loadByReviewId($reviewId) {
17
+ return $this->getCollection()
18
+ ->addFilter('review_id', $reviewId)
19
+ ->getFirstItem();
20
+ }
21
+
22
+ public function getReviewUpdateCollection() {
23
+ return $this->getCollection()->getReviewUpdateTime();
24
+ }
25
+
26
+ public function getRatingSummaryUpdateCollection() {
27
+ return $this->getCollection()->getRatingSummaryUpdateTime();
28
+ }
29
+
30
+ public function markUpdated($reviewId, $entityId, $entityPkValue) {
31
+ $this->mark($reviewId, $entityId, $entityPkValue, self::ACTIVITYTYPE_UPDATE);
32
+ }
33
+
34
+ public function markDeleted($reviewId, $entityId, $entityPkValue) {
35
+ $this->mark($reviewId, $entityId, $entityPkValue, self::ACTIVITYTYPE_DELETE);
36
+ }
37
+
38
+ protected function mark($reviewId, $entityId, $entityPkValue, $activityType) {
39
+ $this->setReviewId($reviewId);
40
+ $this->setEntityId($entityId);
41
+ $this->setEntityPkValue($entityPkValue);
42
+ $this->setActivityTime(gmdate('Y-m-d H:i:s'));
43
+ $this->setActivity($activityType);
44
+ $this->save();
45
+ }
46
+ }
47
+
48
+ ?>
app/code/community/Listrak/Remarketing/Model/Review/Update/Api.php ADDED
@@ -0,0 +1,242 @@
1
+ <?php
2
+ // Listrak Remarketing Magento Extension Ver. 1.0.0
3
+ // � 2011 Listrak, Inc.
4
+
5
+ class Listrak_Remarketing_Model_Review_Update_Api extends Mage_Api_Model_Resource_Abstract {
6
+
7
+ protected $_statuses = array();
8
+
9
+ protected $_ratings = array();
10
+
11
+ protected function getStatuses() {
12
+ if (sizeof($_statuses) == 0) {
13
+ foreach(Mage::getModel('review/review')->getStatusCollection()->getItems() as $status)
14
+ $_statuses[$status->getStatusId()] = $status->getStatusCode();
15
+ }
16
+
17
+ return $_statuses;
18
+ }
19
+
20
+ protected function getRatings() {
21
+ if (sizeof($_ratings) == 0) {
22
+ foreach(Mage::getModel('rating/rating')->getResourceCollection()->getItems() as $rating)
23
+ $_ratings[$rating->getRatingId()] = $rating->getRatingCode();
24
+ }
25
+
26
+ return $_ratings;
27
+ }
28
+
29
+ public function reviewList($storeId, $chunkSize, $startReviewId) {
30
+ Mage::helper('remarketing')->requireReviewsEnabled();
31
+
32
+ $getStoreId = is_numeric($storeId) ? $storeId : 1;
33
+ $getChunkSize = is_numeric($chunkSize) ? $chunkSize : 50;
34
+ $fromReviewId = $startReviewId + 1;
35
+
36
+ $collection = Mage::helper('remarketing/review_update')->getReviewListCollection($getStoreId);
37
+ $collection
38
+ ->getSelect()
39
+ ->where("main_table.review_id >= ?", $fromReviewId)
40
+ ->reset(Zend_Db_Select::ORDER)
41
+ ->order('main_table.review_id ASC')
42
+ ->limit($getChunkSize);
43
+
44
+ return $this->reviewsFromCollection($getStoreId, $collection);
45
+ }
46
+
47
+ public function reviewUpdateList($storeId, $chunkSize, $startUpdateId) {
48
+ Mage::helper('remarketing')->requireReviewsEnabled();
49
+
50
+ $getStoreId = is_numeric($storeId) ? $storeId : 1;
51
+ $getChunkSize = is_numeric($chunkSize) ? $chunkSize : 50;
52
+ $fromUpdateId = $startUpdateId + 1;
53
+
54
+ $collection = Mage::helper('remarketing/review_update')->getReviewListCollection($getStoreId);
55
+ $collection
56
+ ->getSelect()
57
+ ->where("updatetime.update_id >= ?", $fromUpdateId)
58
+ ->reset(Zend_Db_Select::ORDER)
59
+ ->order("updatetime.update_id ASC")
60
+ ->limit($getChunkSize);
61
+
62
+ return $this->reviewsFromCollection($getStoreId, $collection);
63
+ }
64
+
65
+ private function reviewsFromCollection($storeId, $reviewCollection) {
66
+ $statuses = $this->getStatuses();
67
+ $ratings = $this->getRatings();
68
+
69
+ $reviews = array();
70
+
71
+ foreach($reviewCollection as $review) {
72
+ $reviewId = $review->getReviewId();
73
+
74
+ $reviewRatings = array();
75
+ $votesCollection = Mage::getModel('rating/rating_option_vote')
76
+ ->getResourceCollection()
77
+ ->setReviewFilter($reviewId);
78
+
79
+ foreach($votesCollection as $vote) {
80
+ $ratingId = $vote->getRatingId();
81
+
82
+ array_push($reviewRatings, array(
83
+ "rating_id" => $ratingId,
84
+ "rating_code" => $ratings[$ratingId],
85
+ "rating" => round($vote->getPercent() / 20, 4)
86
+ ));
87
+ }
88
+
89
+ $overallRatingObj = Mage::getModel('rating/rating')
90
+ ->getReviewSummary($reviewId, false);
91
+
92
+ $overallRating = 0;
93
+ foreach($overallRatingObj as $ratingObj) {
94
+ if ($ratingObj->getStoreId() == $storeId) {
95
+ if ($ratingObj->getCount())
96
+ $overallRating = $ratingObj->getSum() / $ratingObj->getCount();
97
+
98
+ break;
99
+ }
100
+ }
101
+
102
+ array_push($reviews, array (
103
+ "update_id" => $review->getUpdateId(),
104
+ "review_id" => $reviewId,
105
+ "product_id" => $review->getEntityPkValue(),
106
+ "title" => $review->getTitle(),
107
+ "text" => $review->getDetail(),
108
+ "overall_rating" => round($overallRating / 20, 4),
109
+ "created_at" => $review->getCreatedAt(),
110
+ "updated_at" => $review->getUpdatedAt(),
111
+ "reviewer_name" => $review->getNickname(),
112
+ "email" => $review->getEmail(),
113
+ "status_id" => $review->getStatusId(),
114
+ "status_code" => $statuses[$review->getStatusId()],
115
+ "ratings" => $reviewRatings
116
+ ));
117
+ }
118
+
119
+ return $reviews;
120
+ }
121
+
122
+ public function ratingSummaryList($storeId, $chunkSize, $startRatingSummaryId) {
123
+ Mage::helper('remarketing')->requireReviewsEnabled();
124
+
125
+ $getStoreId = is_numeric($storeId) ? $storeId : 1;
126
+ $getChunkSize = is_numeric($chunkSize) ? $chunkSize : 50;
127
+ $fromRatingSummaryId = $startRatingSummaryId + 1;
128
+
129
+ $collection = Mage::helper('remarketing/review_update')->getRatingSummaryListCollection($getStoreId);
130
+ $collection->getSelect()
131
+ ->where('review_entity_summary.entity_type = ?', 1)
132
+ ->where("review_entity_summary.primary_id >= ?", $fromRatingSummaryId)
133
+ ->order('review_entity_summary.primary_id ASC')
134
+ ->limit($getChunkSize);
135
+
136
+ return $this->ratingSummariesFromCollection($getStoreId, $collection);
137
+ }
138
+
139
+ public function ratingSummaryUpdateList($storeId, $chunkSize, $startUpdateId) {
140
+ Mage::helper('remarketing')->requireReviewsEnabled();
141
+
142
+ $getStoreId = is_numeric($storeId) ? $storeId : 1;
143
+ $getChunkSize = is_numeric($chunkSize) ? $chunkSize : 50;
144
+ $fromUpdateId = $startUpdateId + 1;
145
+
146
+ $collection = Mage::helper('remarketing/review_update')->getRatingSummaryListCollection($getStoreId);
147
+ $collection->getSelect()
148
+ ->where('review_entity_summary.entity_type = ?', 1)
149
+ ->where("updatetime.update_id >= ?", $fromUpdateId)
150
+ ->order('updatetime.update_id ASC')
151
+ ->limit($getChunkSize);
152
+
153
+ return $this->ratingSummariesFromCollection($getStoreId, $collection);
154
+ }
155
+
156
+ private function ratingSummariesFromCollection($storeId, $collection) {
157
+ $ratingSummaries = array();
158
+
159
+ foreach($collection as $ratingSummary) {
160
+ $productId = $ratingSummary->getEntityPkValue();
161
+
162
+ $ratingCollection = Mage::getModel('rating/rating')
163
+ ->getResourceCollection()
164
+ ->setStoreFilter($storeId)
165
+ ->load()
166
+ ->addEntitySummaryToItem($productId, $storeId);
167
+
168
+ $ratings = array();
169
+ foreach($ratingCollection as $rating) {
170
+ array_push($ratings, array(
171
+ "rating_id" => $rating->getRatingId(),
172
+ "rating_code" => $rating->getRatingCode(),
173
+ "rating" => round($rating->getSummary() / 20, 4)
174
+ ));
175
+ }
176
+
177
+ array_push($ratingSummaries, array(
178
+ "update_id" => $ratingSummary->getUpdateId(),
179
+ "rating_summary_id" => $ratingSummary->getPrimaryId(),
180
+ "product_id" => $productId,
181
+ "updated_at" => $ratingSummary->getUpdatedAt(),
182
+ "total_reviews" => $ratingSummary->getReviewsCount(),
183
+ "rating" => round($ratingSummary->getRatingSummary() / 20, 4),
184
+ "ratings" => $ratings
185
+ ));
186
+ }
187
+
188
+ return $ratingSummaries;
189
+
190
+ }
191
+
192
+ public function reviewDeleteList($chunkSize, $startDeleteId) {
193
+ Mage::helper('remarketing')->requireReviewsEnabled();
194
+
195
+ $mageResource = Mage::getSingleton('core/resource');
196
+ $dbRead = $mageResource->getConnection('core_read');
197
+
198
+ $getChunkSize = is_numeric($chunkSize) ? $chunkSize : 50;
199
+ $fromDeleteId = $startDeleteId + 1;
200
+
201
+ $collection = Mage::getModel('listrak/review_update')
202
+ ->getCollection()
203
+ ->productReviewsOnly()
204
+ ->deletedRowsOnly();
205
+
206
+ $allReviewIDs = $dbRead
207
+ ->select()
208
+ ->from(array('review' => Mage::getSingleton('core/resource')->getTableName('review/review')), 'review.review_id');
209
+
210
+ $collection->getSelect()
211
+ ->where('NOT EXISTS (' . $allReviewIDs->where('main_table.review_id = review.review_id') . ')')
212
+ ->where("update_id >= ?", $fromDeleteId)
213
+ ->limit($getChunkSize);
214
+
215
+ $deletedReviews = array();
216
+ foreach($collection as $deletedReview) {
217
+ array_push($deletedReviews, array(
218
+ "delete_id" => $deletedReview->getUpdateId(),
219
+ "review_id" => $deletedReview->getReviewId()
220
+ ));
221
+ }
222
+
223
+ return $deletedReviews;
224
+ }
225
+
226
+ public function reviewUpdatePurge($purgeBeforeDays) {
227
+ $mageResource = Mage::getSingleton('core/resource');
228
+ $dbRead = $mageResource->getConnection('core_read');
229
+ $dbWrite = $mageResource->getConnection('core_write');
230
+
231
+ $doPurgeBeforeDays = is_numeric($purgeBeforeDays) ? $purgeBeforeDays : 30;
232
+ $purgeBefore = ($doPurgeBeforeDays > 0 ? gmdate('Y-m-d H:i:s', strtotime("-{$doPurgeBeforeDays} days")) : gmdate('Y-m-d H:i:s'));
233
+
234
+ $rowsDeleted = $dbWrite->delete($mageResource->getTableName('listrak/review_update'), array('activity_time < ?' => $purgeBefore));
235
+
236
+ return array(
237
+ "count" => $rowsDeleted,
238
+ "before" => $purgeBefore
239
+ );
240
+ }
241
+ }
242
+ ?>
app/code/community/Listrak/Remarketing/Model/Review/Update/Api/V2.php ADDED
@@ -0,0 +1,9 @@
1
+ <?php
2
+ // Listrak Remarketing Magento Extension Ver. 1.0.0
3
+ // � 2011 Listrak, Inc.
4
+
5
+ class Listrak_Remarketing_Model_Review_Update_Api_V2 extends Listrak_Remarketing_Model_Review_Update_Api {
6
+
7
+ }
8
+
9
+ ?>
app/code/community/Listrak/Remarketing/controllers/Adminhtml/AbandonedcartreportController.php CHANGED
@@ -7,7 +7,7 @@ class Listrak_Remarketing_Adminhtml_AbandonedcartreportController extends Mage_A
7
protected function _initAction()
8
{
9
$this->loadLayout()
10
- ->_setActiveMenu('listrak_menu');
11
return $this;
12
}
13
7
protected function _initAction()
8
{
9
$this->loadLayout()
10
+ ->_setActiveMenu('remarketing');
11
return $this;
12
}
13
app/code/community/Listrak/Remarketing/controllers/Adminhtml/EmailcaptureController.php CHANGED
@@ -8,7 +8,7 @@ class Listrak_Remarketing_Adminhtml_EmailCaptureController extends Mage_Adminhtm
8
protected function _initAction()
9
{
10
$this->loadLayout()
11
- ->_setActiveMenu('emailcapture')
12
->_addBreadcrumb(Mage::helper('adminhtml')->__('Fields Manager'), Mage::helper('adminhtml')->__('Field Manager'));
13
return $this;
14
}
8
protected function _initAction()
9
{
10
$this->loadLayout()
11
+ ->_setActiveMenu('remarketing')
12
->_addBreadcrumb(Mage::helper('adminhtml')->__('Fields Manager'), Mage::helper('adminhtml')->__('Field Manager'));
13
return $this;
14
}
app/code/community/Listrak/Remarketing/etc/api.xml CHANGED
@@ -117,6 +117,42 @@
117
</list>
118
</methods>
119
</listrak_remarketing_info>
120
</resources>
121
<resources_alias>
122
<abandonedcart>listrak_remarketing_abandonedcart</abandonedcart>
@@ -128,6 +164,8 @@
128
<listraksubscriber>listrak_remarketing_subscriber</listraksubscriber>
129
<listrakcustomer>listrak_remarketing_customer</listrakcustomer>
130
<listrakinfo>listrak_remarketing_info</listrakinfo>
131
</resources_alias>
132
<v2>
133
<resources_function_prefix>
@@ -140,6 +178,8 @@
140
<listraksubscriber>listrakRemarketingSubscriber</listraksubscriber>
141
<listrakcustomer>listrakRemarketingCustomer</listrakcustomer>
142
<listrakinfo>listrakRemarketingInfo</listrakinfo>
143
</resources_function_prefix>
144
</v2>
145
<faults>
117
</list>
118
</methods>
119
</listrak_remarketing_info>
120
+ <listrak_remarketing_review translate="title" module="listrak_remarketing">
121
+ <title>Listrak Remarketing API</title>
122
+ <model>listrak/review_update_api</model>
123
+ <methods>
124
+ <list translate="title" module="listrak_remarketing">
125
+ <title>Get Review List</title>
126
+ <method>reviewList</method>
127
+ </list>
128
+ <updateList>
129
+ <title>Get Incremental Update</title>
130
+ <method>reviewUpdateList</method>
131
+ </updateList>
132
+ <deleteList>
133
+ <title>Get Deleted Reviews</title>
134
+ <method>reviewDeleteList</method>
135
+ </deleteList>
136
+ <updatePurge>
137
+ <title>Purge Review Update Table</title>
138
+ <method>reviewUpdatePurge</method>
139
+ </updatePurge>
140
+ </methods>
141
+ </listrak_remarketing_review>
142
+ <listrak_remarketing_rating_summary translate="title" module="listrak_remarketing">
143
+ <title>Listrak Remarketing API</title>
144
+ <model>listrak/review_update_api</model>
145
+ <methods>
146
+ <list translate="title" module="listrak_remarketing">
147
+ <title>Get Rating Summary List</title>
148
+ <method>ratingSummaryList</method>
149
+ </list>
150
+ <updateList>
151
+ <title>Get Incremental Update</title>
152
+ <method>ratingSummaryUpdateList</method>
153
+ </updateList>
154
+ </methods>
155
+ </listrak_remarketing_rating_summary>
156
</resources>
157
<resources_alias>
158
<abandonedcart>listrak_remarketing_abandonedcart</abandonedcart>
164
<listraksubscriber>listrak_remarketing_subscriber</listraksubscriber>
165
<listrakcustomer>listrak_remarketing_customer</listrakcustomer>
166
<listrakinfo>listrak_remarketing_info</listrakinfo>
167
+ <listrakreview>listrak_remarketing_review</listrakreview>
168
+ <listrakratingsummary>listrak_remarketing_rating_summary</listrakratingsummary>
169
</resources_alias>
170
<v2>
171
<resources_function_prefix>
178
<listraksubscriber>listrakRemarketingSubscriber</listraksubscriber>
179
<listrakcustomer>listrakRemarketingCustomer</listrakcustomer>
180
<listrakinfo>listrakRemarketingInfo</listrakinfo>
181
+ <listrakreview>listrakRemarketingReview</listrakreview>
182
+ <listrakratingsummary>listrakRemarketingRatingSummary</listrakratingsummary>
183
</resources_function_prefix>
184
</v2>
185
<faults>
app/code/community/Listrak/Remarketing/etc/config.xml CHANGED
@@ -7,7 +7,7 @@
7
<config>
8
<modules>
9
<Listrak_Remarketing>
10
- <version>1.1.3</version>
11
</Listrak_Remarketing>
12
</modules>
13
<frontend>
@@ -55,6 +55,24 @@
55
</listrak_remarketing_observer>
56
</observers>
57
</newsletter_subscriber_save_after>
58
</events>
59
</frontend>
60
<global>
@@ -84,6 +102,9 @@
84
<subscriber_update>
85
<table>listrak_remarketing_subscriber_update</table>
86
</subscriber_update>
87
</entities>
88
</listrak_mysql4>
89
<newsletter>
@@ -152,10 +173,32 @@
152
</listrak_remarketing_observer>
153
</observers>
154
</admin_user_load_before>
155
</events>
156
</adminhtml>
157
<default>
158
<remarketing>
159
<subscription>
160
<signup_success_email>0</signup_success_email>
161
<unsubscribe_email>0</unsubscribe_email>
7
<config>
8
<modules>
9
<Listrak_Remarketing>
10
+ <version>1.1.4</version>
11
</Listrak_Remarketing>
12
</modules>
13
<frontend>
55
</listrak_remarketing_observer>
56
</observers>
57
</newsletter_subscriber_save_after>
58
+ <review_save_commit_after>
59
+ <observers>
60
+ <listrak_remarketing_observer>
61
+ <type>singleton</type>
62
+ <class>Listrak_Remarketing_Model_Observer</class>
63
+ <method>reviewUpdated</method>
64
+ </listrak_remarketing_observer>
65
+ </observers>
66
+ </review_save_commit_after>
67
+ <review_delete_commit_after>
68
+ <observers>
69
+ <listrak_remarketing_observer>
70
+ <type>singleton</type>
71
+ <class>Listrak_Remarketing_Model_Observer</class>
72
+ <method>reviewDeleted</method>
73
+ </listrak_remarketing_observer>
74
+ </observers>
75
+ </review_delete_commit_after>
76
</events>
77
</frontend>
78
<global>
102
<subscriber_update>
103
<table>listrak_remarketing_subscriber_update</table>
104
</subscriber_update>
105
+ <review_update>
106
+ <table>listrak_remarketing_review_update</table>
107
+ </review_update>
108
</entities>
109
</listrak_mysql4>
110
<newsletter>
173
</listrak_remarketing_observer>
174
</observers>
175
</admin_user_load_before>
176
+ <review_save_commit_after>
177
+ <observers>
178
+ <listrak_remarketing_observer>
179
+ <type>singleton</type>
180
+ <class>Listrak_Remarketing_Model_Observer</class>
181
+ <method>reviewUpdated</method>
182
+ </listrak_remarketing_observer>
183
+ </observers>
184
+ </review_save_commit_after>
185
+ <review_delete_commit_after>
186
+ <observers>
187
+ <listrak_remarketing_observer>
188
+ <type>singleton</type>
189
+ <class>Listrak_Remarketing_Model_Observer</class>
190
+ <method>reviewDeleted</method>
191
+ </listrak_remarketing_observer>
192
+ </observers>
193
+ </review_delete_commit_after>
194
</events>
195
</adminhtml>
196
<default>
197
<remarketing>
198
+ <modules>
199
+ <core>1</core>
200
+ <reviews>0</reviews>
201
+ </modules>
202
<subscription>
203
<signup_success_email>0</signup_success_email>
204
<unsubscribe_email>0</unsubscribe_email>
app/code/community/Listrak/Remarketing/etc/system.xml CHANGED
@@ -1,102 +1,130 @@
1
- <?xml version="1.0"?>
2
- <!--
3
- /**
4
- * Listrak Remarketing Magento Extension Ver. 1.0.0 - © 2011 Listrak, Inc.
5
- */
6
- -->
7
- <config>
8
- <sections>
9
- <remarketing translate="label" module="remarketing">
10
- <label>Listrak</label>
11
- <tab>customer</tab>
12
- <frontend_type>text</frontend_type>
13
- <sort_order>100</sort_order>
14
- <show_in_default>1</show_in_default>
15
- <show_in_website>1</show_in_website>
16
- <show_in_store>1</show_in_store>
17
- <groups>
18
- <subscription translate="label">
19
- <label>Newsletter Options</label>
20
- <frontend_type>text</frontend_type>
21
- <sort_order>1</sort_order>
22
- <show_in_default>1</show_in_default>
23
- <show_in_website>1</show_in_website>
24
- <show_in_store>1</show_in_store>
25
- <fields>
26
- <signup_success_email translate="label">
27
- <label>Signup Success Email</label>
28
- <frontend_type>select</frontend_type>
29
- <source_model>adminhtml/system_config_source_enabledisable</source_model>
30
- <sort_order>2</sort_order>
31
- <show_in_default>1</show_in_default>
32
- <show_in_website>1</show_in_website>
33
- <show_in_store>1</show_in_store>
34
- </signup_success_email>
35
- <unsubscribe_email translate="label">
36
- <label>Unsubscribe Email</label>
37
- <frontend_type>select</frontend_type>
38
- <source_model>adminhtml/system_config_source_enabledisable</source_model>
39
- <sort_order>3</sort_order>
40
- <show_in_default>1</show_in_default>
41
- <show_in_website>1</show_in_website>
42
- <show_in_store>1</show_in_store>
43
- </unsubscribe_email>
44
- </fields>
45
- </subscription>
46
- <abandonedcarts translate="label">
47
- <label>Abandoned Carts</label>
48
- <frontend_type>text</frontend_type>
49
- <sort_order>2</sort_order>
50
- <show_in_default>1</show_in_default>
51
- <show_in_website>1</show_in_website>
52
- <show_in_store>1</show_in_store>
53
- <fields>
54
- <abandoned_cart_report_timeout translate="label">
55
- <label>Abandoned Cart Report Timeout</label>
56
- <frontend_type>text</frontend_type>
57
- <sort_order>2</sort_order>
58
- <show_in_default>1</show_in_default>
59
- <show_in_website>1</show_in_website>
60
- <show_in_store>1</show_in_store>
61
- </abandoned_cart_report_timeout>
62
- </fields>
63
- </abandonedcarts>
64
- <modal translate="label">
65
- <label>Email Signup Popup</label>
66
- <frontend_type>text</frontend_type>
67
- <sort_order>2</sort_order>
68
- <show_in_default>1</show_in_default>
69
- <show_in_website>1</show_in_website>
70
- <show_in_store>1</show_in_store>
71
- <fields>
72
- <enabled translate="label">
73
- <label>Enabled</label>
74
- <frontend_type>select</frontend_type>
75
- <source_model>adminhtml/system_config_source_enabledisable</source_model>
76
- <sort_order>1</sort_order>
77
- <show_in_default>1</show_in_default>
78
- <show_in_website>1</show_in_website>
79
- <show_in_store>1</show_in_store>
80
- </enabled>
81
- <listrakMerchantID translate="label">
82
- <label>Merchant ID</label>
83
- <frontend_type>text</frontend_type>
84
- <sort_order>2</sort_order>
85
- <show_in_default>1</show_in_default>
86
- <show_in_website>1</show_in_website>
87
- <show_in_store>1</show_in_store>
88
- </listrakMerchantID>
89
- <scriptLocation translate="label">
90
- <label>Script Location</label>
91
- <frontend_type>text</frontend_type>
92
- <sort_order>3</sort_order>
93
- <show_in_default>1</show_in_default>
94
- <show_in_website>1</show_in_website>
95
- <show_in_store>1</show_in_store>
96
- </scriptLocation>
97
- </fields>
98
- </modal>
99
- </groups>
100
- </remarketing>
101
- </sections>
102
</config>
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ * Listrak Remarketing Magento Extension Ver. 1.0.0 - © 2011 Listrak, Inc.
5
+ */
6
+ -->
7
+ <config>
8
+ <sections>
9
+ <remarketing translate="label" module="remarketing">
10
+ <label>Listrak</label>
11
+ <tab>customer</tab>
12
+ <frontend_type>text</frontend_type>
13
+ <sort_order>100</sort_order>
14
+ <show_in_default>1</show_in_default>
15
+ <show_in_website>1</show_in_website>
16
+ <show_in_store>1</show_in_store>
17
+ <groups>
18
+ <modules translate="label">
19
+ <label>Component Options</label>
20
+ <frontend_type>text</frontend_type>
21
+ <sort_order>1</sort_order>
22
+ <show_in_default>1</show_in_default>
23
+ <show_in_website>1</show_in_website>
24
+ <show_in_store>1</show_in_store>
25
+ <fields>
26
+ <core translate="label">
27
+ <label>Core Functionality</label>
28
+ <frontend_type>select</frontend_type>
29
+ <source_model>adminhtml/system_config_source_enabledisable</source_model>
30
+ <sort_order>2</sort_order>
31
+ <show_in_default>1</show_in_default>
32
+ <show_in_website>1</show_in_website>
33
+ <show_in_store>1</show_in_store>
34
+ </core>
35
+ <reviews translate="label">
36
+ <label>Review API</label>
37
+ <frontend_type>select</frontend_type>
38
+ <source_model>adminhtml/system_config_source_enabledisable</source_model>
39
+ <sort_order>3</sort_order>
40
+ <show_in_default>1</show_in_default>
41
+ <show_in_website>1</show_in_website>
42
+ <show_in_store>1</show_in_store>
43
+ </reviews>
44
+ </fields>
45
+ </modules>
46
+ <subscription translate="label">
47
+ <label>Newsletter Options</label>
48
+ <frontend_type>text</frontend_type>
49
+ <sort_order>2</sort_order>
50
+ <show_in_default>1</show_in_default>
51
+ <show_in_website>1</show_in_website>
52
+ <show_in_store>1</show_in_store>
53
+ <fields>
54
+ <signup_success_email translate="label">
55
+ <label>Signup Success Email</label>
56
+ <frontend_type>select</frontend_type>
57
+ <source_model>adminhtml/system_config_source_enabledisable</source_model>
58
+ <sort_order>2</sort_order>
59
+ <show_in_default>1</show_in_default>
60
+ <show_in_website>1</show_in_website>
61
+ <show_in_store>1</show_in_store>
62
+ </signup_success_email>
63
+ <unsubscribe_email translate="label">
64
+ <label>Unsubscribe Email</label>
65
+ <frontend_type>select</frontend_type>
66
+ <source_model>adminhtml/system_config_source_enabledisable</source_model>
67
+ <sort_order>3</sort_order>
68
+ <show_in_default>1</show_in_default>
69
+ <show_in_website>1</show_in_website>
70
+ <show_in_store>1</show_in_store>
71
+ </unsubscribe_email>
72
+ </fields>
73
+ </subscription>
74
+ <modal translate="label">
75
+ <label>Email Signup Popup</label>
76
+ <frontend_type>text</frontend_type>
77
+ <sort_order>3</sort_order>
78
+ <show_in_default>1</show_in_default>
79
+ <show_in_website>1</show_in_website>
80
+ <show_in_store>1</show_in_store>
81
+ <fields>
82
+ <enabled translate="label">
83
+ <label>Enabled</label>
84
+ <frontend_type>select</frontend_type>
85
+ <source_model>adminhtml/system_config_source_enabledisable</source_model>
86
+ <sort_order>1</sort_order>
87
+ <show_in_default>1</show_in_default>
88
+ <show_in_website>1</show_in_website>
89
+ <show_in_store>1</show_in_store>
90
+ </enabled>
91
+ <listrakMerchantID translate="label">
92
+ <label>Merchant ID</label>
93
+ <frontend_type>text</frontend_type>
94
+ <sort_order>2</sort_order>
95
+ <show_in_default>1</show_in_default>
96
+ <show_in_website>1</show_in_website>
97
+ <show_in_store>1</show_in_store>
98
+ </listrakMerchantID>
99
+ <scriptLocation translate="label">
100
+ <label>Script Location</label>
101
+ <frontend_type>text</frontend_type>
102
+ <sort_order>3</sort_order>
103
+ <show_in_default>1</show_in_default>
104
+ <show_in_website>1</show_in_website>
105
+ <show_in_store>1</show_in_store>
106
+ </scriptLocation>
107
+ </fields>
108
+ </modal>
109
+ <abandonedcarts translate="label">
110
+ <label>Abandoned Carts</label>
111
+ <frontend_type>text</frontend_type>
112
+ <sort_order>4</sort_order>
113
+ <show_in_default>1</show_in_default>
114
+ <show_in_website>1</show_in_website>
115
+ <show_in_store>1</show_in_store>
116
+ <fields>
117
+ <abandoned_cart_report_timeout translate="label">
118
+ <label>Abandoned Cart Report Timeout</label>
119
+ <frontend_type>text</frontend_type>
120
+ <sort_order>2</sort_order>
121
+ <show_in_default>1</show_in_default>
122
+ <show_in_website>1</show_in_website>
123
+ <show_in_store>1</show_in_store>
124
+ </abandoned_cart_report_timeout>
125
+ </fields>
126
+ </abandonedcarts>
127
+ </groups>
128
+ </remarketing>
129
+ </sections>
130
</config>
app/code/community/Listrak/Remarketing/etc/wsdl.xml CHANGED
@@ -281,12 +281,117 @@
281
282
<complexType name="ListrakRemarketingInfoEntity">
283
<all>
284
<element name="modules" type="typens:ArrayOfString" minOccurs="0"/>
285
<element name="ini" type="typens:ArrayOfString" minOccurs="0"/>
286
<element name="classes" type="xsd:string" minOccurs="0"/>
287
<element name="counts" type="xsd:string" minOccurs="0"/>
288
</all>
289
</complexType>
290
</schema>
291
</types>
292
<message name="listrakRemarketingAbandonedCartListRequest">
@@ -421,6 +526,57 @@
421
<message name="listrakRemarketingInfoListResponse">
422
<part name="result" type="typens:ListrakRemarketingInfoEntity" />
423
</message>
424
<portType name="{{var wsdl.handler}}PortType">
425
<operation name="listrakRemarketingAbandonedCartList">
426
<documentation>Get stores abandoned carts</documentation>
@@ -492,6 +648,36 @@
492
<input message="typens:listrakRemarketingInfoListRequest" />
493
<output message="typens:listrakRemarketingInfoListResponse" />
494
</operation>
495
</portType>
496
<binding name="{{var wsdl.handler}}Binding" type="typens:{{var wsdl.handler}}PortType">
497
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" />
@@ -621,6 +807,60 @@
621
<soap:body namespace="urn:{{var wsdl.name}}" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
622
</output>
623
</operation>
624
</binding>
625
<service name="{{var wsdl.name}}Service">
626
<port name="{{var wsdl.handler}}Port" binding="typens:{{var wsdl.handler}}Binding">
281
282
<complexType name="ListrakRemarketingInfoEntity">
283
<all>
284
+ <element name="magentoVersion" type="xsd:string" minOccurs="0"/>
285
+ <element name="listrakSettings" type="typens:ListrakRemarketingSettingEntity" minOccurs="0"/>
286
<element name="modules" type="typens:ArrayOfString" minOccurs="0"/>
287
<element name="ini" type="typens:ArrayOfString" minOccurs="0"/>
288
<element name="classes" type="xsd:string" minOccurs="0"/>
289
<element name="counts" type="xsd:string" minOccurs="0"/>
290
</all>
291
</complexType>
292
+ <complexType name="ListrakRemarketingSettingEntity">
293
+ <all>
294
+ <element name="coreEnabled" type="xsd:string" minOccurs="0"/>
295
+ <element name="reviewsApiEnabled" type="xsd:string" minOccurs="0"/>
296
+ </all>
297
+ </complexType>
298
+
299
+ <!-- review list / review update list -->
300
+ <complexType name="ListrakRemarketingReviewListResult">
301
+ <complexContent>
302
+ <restriction base="soapenc:Array">
303
+ <attribute ref="soapenc:arrayType" wsdl:arrayType="typens:ListrakRemarketingReviewListItem[]" />
304
+ </restriction>
305
+ </complexContent>
306
+ </complexType>
307
+ <complexType name="ListrakRemarketingReviewListItem">
308
+ <all>
309
+ <element name="update_id" type="xsd:string" minOccurs="0"/>
310
+ <element name="review_id" type="xsd:string" minOccurs="0"/>
311
+ <element name="product_id" type="xsd:string" minOccurs="0"/>
312
+ <element name="title" type="xsd:string" minOccurs="0"/>
313
+ <element name="text" type="xsd:string" minOccurs="0"/>
314
+ <element name="overall_rating" type="xsd:string" minOccurs="0"/>
315
+ <element name="created_at" type="xsd:string" minOccurs="0"/>
316
+ <element name="updated_at" type="xsd:string" minOccurs="0"/>
317
+ <element name="reviewer_name" type="xsd:string" minOccurs="0"/>
318
+ <element name="email" type="xsd:string" minOccurs="0"/>
319
+ <element name="status_id" type="xsd:string" minOccurs="0"/>
320
+ <element name="status_code" type="xsd:string" minOccurs="0"/>
321
+ <element name="ratings" type="typens:ArrayOfListrakRemarketingReviewRating" minOccurs="0"/>
322
+ </all>
323
+ </complexType>
324
+ <complexType name="ArrayOfListrakRemarketingReviewRating">
325
+ <complexContent>
326
+ <restriction base="soapenc:Array">
327
+ <attribute ref="soapenc:arrayType" wsdl:arrayType="typens:ListrakRemarketingReviewRatingItem[]" />
328
+ </restriction>
329
+ </complexContent>
330
+ </complexType>
331
+ <complexType name="ListrakRemarketingReviewRatingItem">
332
+ <all>
333
+ <element name="rating_id" type="xsd:string" minOccurs="0"/>
334
+ <element name="rating_code" type="xsd:string" minOccurs="0"/>
335
+ <element name="rating" type="xsd:string" minOccurs="0"/>
336
+ </all>
337
+ </complexType>
338
+
339
+ <!-- rating summary list / rating summary update list -->
340
+ <complexType name="ListrakRemarketingRatingSummaryListResult">
341
+ <complexContent>
342
+ <restriction base="soapenc:Array">
343
+ <attribute ref="soapenc:arrayType" wsdl:arrayType="typens:ListrakRemarketingRatingSummaryItem[]" />
344
+ </restriction>
345
+ </complexContent>
346
+ </complexType>
347
+ <complexType name="ListrakRemarketingRatingSummaryItem">
348
+ <all>
349
+ <element name="update_id" type="xsd:string" minOccurs="0"/>
350
+ <element name="rating_summary_id" type="xsd:string" minOccurs="0"/>
351
+ <element name="product_id" type="xsd:string" minOccurs="0"/>
352
+ <element name="updated_at" type="xsd:string" minOccurs="0"/>
353
+ <element name="total_reviews" type="xsd:string" minOccurs="0"/>
354
+ <element name="rating" type="xsd:string" minOccurs="0"/>
355
+ <element name="ratings" type="typens:ArrayOfListrakRemarketingRatingSummaryAttribute" minOccurs="0"/>
356
+ </all>
357
+ </complexType>
358
+ <complexType name="ArrayOfListrakRemarketingRatingSummaryAttribute">
359
+ <complexContent>
360
+ <restriction base="soapenc:Array">
361
+ <attribute ref="soapenc:arrayType" wsdl:arrayType="typens:ListrakRemarketingRatingSummaryAttributeItem[]" />
362
+ </restriction>
363
+ </complexContent>
364
+ </complexType>
365
+ <complexType name="ListrakRemarketingRatingSummaryAttributeItem">
366
+ <all>
367
+ <element name="rating_id" type="xsd:string" minOccurs="0"/>
368
+ <element name="rating_code" type="xsd:string" minOccurs="0"/>
369
+ <element name="rating" type="xsd:string" minOccurs="0"/>
370
+ </all>
371
+ </complexType>
372
+
373
+ <!-- review delete list -->
374
+ <complexType name="ListrakRemarketingReviewDeleteListResult">
375
+ <complexContent>
376
+ <restriction base="soapenc:Array">
377
+ <attribute ref="soapenc:arrayType" wsdl:arrayType="typens:ListrakRemarketingDeletedReview[]" />
378
+ </restriction>
379
+ </complexContent>
380
+ </complexType>
381
+ <complexType name="ListrakRemarketingDeletedReview">
382
+ <all>
383
+ <element name="delete_id" type="xsd:string" minOccurs="0"/>
384
+ <element name="review_id" type="xsd:string" minOccurs="0"/>
385
+ </all>
386
+ </complexType>
387
+
388
+ <!-- review update purge -->
389
+ <complexType name="ListrakRemarketingReviewUpdatePurgeResult">
390
+ <all>
391
+ <element name="count" type="xsd:string" minOccurs="0"/>
392
+ <element name="before" type="xsd:string" minOccurs="0"/>
393
+ </all>
394
+ </complexType>
395
</schema>
396
</types>
397
<message name="listrakRemarketingAbandonedCartListRequest">
526
<message name="listrakRemarketingInfoListResponse">
527
<part name="result" type="typens:ListrakRemarketingInfoEntity" />
528
</message>
529
+ <message name="listrakRemarketingReviewListRequest">
530
+ <part name="sessionId" type="xsd:string" />
531
+ <part name="storeId" type="xsd:string" />
532
+ <part name="chunkSize" type="xsd:string" />
533
+ <part name="startReviewId" type="xsd:string" />
534
+ </message>
535
+ <message name="listrakRemarketingReviewListResponse">
536
+ <part name="result" type="typens:ListrakRemarketingReviewListResult" />
537
+ </message>
538
+ <message name="listrakRemarketingRatingSummaryListRequest">
539
+ <part name="sessionId" type="xsd:string" />
540
+ <part name="storeId" type="xsd:string" />
541
+ <part name="chunkSize" type="xsd:string" />
542
+ <part name="startRatingSummaryId" type="xsd:string" />
543
+ </message>
544
+ <message name="listrakRemarketingRatingSummaryListResponse">
545
+ <part name="result" type="typens:ListrakRemarketingRatingSummaryListResult" />
546
+ </message>
547
+ <message name="listrakRemarketingReviewUpdateListRequest">
548
+ <part name="sessionId" type="xsd:string" />
549
+ <part name="storeId" type="xsd:string" />
550
+ <part name="chunkSize" type="xsd:string" />
551
+ <part name="startUpdateId" type="xsd:string" />
552
+ </message>
553
+ <message name="listrakRemarketingReviewUpdateListResponse">
554
+ <part name="result" type="typens:ListrakRemarketingReviewListResult" />
555
+ </message>
556
+ <message name="listrakRemarketingRatingSummaryUpdateListRequest">
557
+ <part name="sessionId" type="xsd:string" />
558
+ <part name="storeId" type="xsd:string" />
559
+ <part name="chunkSize" type="xsd:string" />
560
+ <part name="startUpdateId" type="xsd:string" />
561
+ </message>
562
+ <message name="listrakRemarketingRatingSummaryUpdateListResponse">
563
+ <part name="result" type="typens:ListrakRemarketingRatingSummaryListResult" />
564
+ </message>
565
+ <message name="listrakRemarketingReviewDeleteListRequest">
566
+ <part name="sessionId" type="xsd:string" />
567
+ <part name="chunkSize" type="xsd:string" />
568
+ <part name="startDeleteId" type="xsd:string" />
569
+ </message>
570
+ <message name="listrakRemarketingReviewDeleteListResponse">
571
+ <part name="result" type="typens:ListrakRemarketingReviewDeleteListResult" />
572
+ </message>
573
+ <message name="listrakRemarketingReviewUpdatePurgeRequest">
574
+ <part name="sessionId" type="xsd:string" />
575
+ <part name="purgeBeforeDays" type="xsd:string" />
576
+ </message>
577
+ <message name="listrakRemarketingReviewUpdatePurgeResponse">
578
+ <part name="result" type="typens:ListrakRemarketingReviewUpdatePurgeResult" />
579
+ </message>
580
<portType name="{{var wsdl.handler}}PortType">
581
<operation name="listrakRemarketingAbandonedCartList">
582
<documentation>Get stores abandoned carts</documentation>
648
<input message="typens:listrakRemarketingInfoListRequest" />
649
<output message="typens:listrakRemarketingInfoListResponse" />
650
</operation>
651
+ <operation name="listrakRemarketingReviewList">
652
+ <documentation>Get review list</documentation>
653
+ <input message="typens:listrakRemarketingReviewListRequest" />
654
+ <output message="typens:listrakRemarketingReviewListResponse" />
655
+ </operation>
656
+ <operation name="listrakRemarketingRatingSummaryList">
657
+ <documentation>Get rating summary list</documentation>
658
+ <input message="typens:listrakRemarketingRatingSummaryListRequest" />
659
+ <output message="typens:listrakRemarketingRatingSummaryListResponse" />
660
+ </operation>
661
+ <operation name="listrakRemarketingReviewUpdateList">
662
+ <documentation>Get review list</documentation>
663
+ <input message="typens:listrakRemarketingReviewUpdateListRequest" />
664
+ <output message="typens:listrakRemarketingReviewUpdateListResponse" />
665
+ </operation>
666
+ <operation name="listrakRemarketingRatingSummaryUpdateList">
667
+ <documentation>Get rating summary list</documentation>
668
+ <input message="typens:listrakRemarketingRatingSummaryUpdateListRequest" />
669
+ <output message="typens:listrakRemarketingRatingSummaryUpdateListResponse" />
670
+ </operation>
671
+ <operation name="listrakRemarketingReviewDeleteList">
672
+ <documentation>Get deleted reviews list</documentation>
673
+ <input message="typens:listrakRemarketingReviewDeleteListRequest" />
674
+ <output message="typens:listrakRemarketingReviewDeleteListResponse" />
675
+ </operation>
676
+ <operation name="listrakRemarketingReviewUpdatePurge">
677
+ <documentation>Get deleted reviews list</documentation>
678
+ <input message="typens:listrakRemarketingReviewUpdatePurgeRequest" />
679
+ <output message="typens:listrakRemarketingReviewUpdatePurgeResponse" />
680
+ </operation>
681
</portType>
682
<binding name="{{var wsdl.handler}}Binding" type="typens:{{var wsdl.handler}}PortType">
683
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" />
807
<soap:body namespace="urn:{{var wsdl.name}}" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
808
</output>
809
</operation>
810
+ <operation name="listrakRemarketingReviewList">
811
+ <soap:operation soapAction="urn:{{var wsdl.handler}}Action" />
812
+ <input>
813
+ <soap:body namespace="urn:{{var wsdl.name}}" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
814
+ </input>
815
+ <output>
816
+ <soap:body namespace="urn:{{var wsdl.name}}" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
817
+ </output>
818
+ </operation>
819
+ <operation name="listrakRemarketingRatingSummaryList">
820
+ <soap:operation soapAction="urn:{{var wsdl.handler}}Action" />
821
+ <input>
822
+ <soap:body namespace="urn:{{var wsdl.name}}" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
823
+ </input>
824
+ <output>
825
+ <soap:body namespace="urn:{{var wsdl.name}}" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
826
+ </output>
827
+ </operation>
828
+ <operation name="listrakRemarketingReviewUpdateList">
829
+ <soap:operation soapAction="urn:{{var wsdl.handler}}Action" />
830
+ <input>
831
+ <soap:body namespace="urn:{{var wsdl.name}}" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
832
+ </input>
833
+ <output>
834
+ <soap:body namespace="urn:{{var wsdl.name}}" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
835
+ </output>
836
+ </operation>
837
+ <operation name="listrakRemarketingRatingSummaryUpdateList">
838
+ <soap:operation soapAction="urn:{{var wsdl.handler}}Action" />
839
+ <input>
840
+ <soap:body namespace="urn:{{var wsdl.name}}" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
841
+ </input>
842
+ <output>
843
+ <soap:body namespace="urn:{{var wsdl.name}}" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
844
+ </output>
845
+ </operation>
846
+ <operation name="listrakRemarketingReviewDeleteList">
847
+ <soap:operation soapAction="urn:{{var wsdl.handler}}Action" />
848
+ <input>
849
+ <soap:body namespace="urn:{{var wsdl.name}}" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
850
+ </input>
851
+ <output>
852
+ <soap:body namespace="urn:{{var wsdl.name}}" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
853
+ </output>
854
+ </operation>
855
+ <operation name="listrakRemarketingReviewUpdatePurge">
856
+ <soap:operation soapAction="urn:{{var wsdl.handler}}Action" />
857
+ <input>
858
+ <soap:body namespace="urn:{{var wsdl.name}}" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
859
+ </input>
860
+ <output>
861
+ <soap:body namespace="urn:{{var wsdl.name}}" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
862
+ </output>
863
+ </operation>
864
</binding>
865
<service name="{{var wsdl.name}}Service">
866
<port name="{{var wsdl.handler}}Port" binding="typens:{{var wsdl.handler}}Binding">
app/code/community/Listrak/Remarketing/sql/listrak_remarketing_setup/mysql4-upgrade-1.1.3-1.1.4.php ADDED
@@ -0,0 +1,28 @@
1
+ <?php
2
+ // Listrak Remarketing Magento Extension Ver. 1.0.0
3
+ // � 2011 Listrak, Inc.
4
+
5
+ $installer = $this;
6
+ $installer->startSetup();
7
+
8
+ $installer->run("
9
+ DROP TABLE IF EXISTS {$this->getTable('listrak/review_update')};
10
+ CREATE TABLE {$this->getTable('listrak/review_update')} (
11
+ `update_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
12
+ `review_id` bigint(20) NOT NULL,
13
+ `entity_id` tinyint(4) NOT NULL,
14
+ `entity_pk_value` bigint(20) NOT NULL,
15
+ `activity_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
16
+ `activity` tinyint(4) NOT NULL,
17
+ PRIMARY KEY (`update_id`)
18
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
19
+ ");
20
+
21
+ try {
22
+ Mage::getModel("listrak/log")->addMessage("1.1.3-1.1.4 upgrade");
23
+ }
24
+ catch(Exception $e) { }
25
+
26
+ $installer->endSetup();
27
+
28
+ ?>
package.xml CHANGED
@@ -1,7 +1,7 @@
1
<?xml version="1.0"?>
2
<package>
3
<name>Listrak_Remarketing</name>
4
- <version>1.1.3</version>
5
<stability>stable</stability>
6
<license uri="http://s1.listrakbi.com/licenses/magento.txt">Listrak EULA</license>
7
<channel>community</channel>
@@ -12,11 +12,11 @@
12
&lt;p&gt;The Listrak extension for Magento enables online merchants to expand their email marketing campaigns beyond typical "batch and blast" into targeted campaigns aimed at specific scenarios and buyer events. The extension covers:&lt;/p&gt;&#xD;
13
&#xD;
14
&lt;p&gt;&#xD;
15
- - Shopping Cart Abandonment&lt;br /&gt;&#xD;
16
- - Buyertrak - refillable/replenishable order reminders&lt;br /&gt;&#xD;
17
- - Customer purchase metrics&lt;br /&gt;&#xD;
18
- - Post purchase follow-up campaigns&lt;br /&gt;&#xD;
19
- - Newsletter subscriber synchronization&lt;br /&gt;&#xD;
20
&lt;/p&gt;&#xD;
21
&#xD;
22
&lt;p&gt;&lt;b&gt;Shopping Cart Abandonment&lt;/b&gt;&lt;br /&gt;&#xD;
@@ -36,23 +36,21 @@ To make sure your marketing list is always current, all newsletter subscribers a
36
&#xD;
37
&lt;p&gt;Additional Listrak features include:&lt;/p&gt;&#xD;
38
&lt;ol&gt;&#xD;
39
- - Advanced segmentation&lt;br /&gt;&#xD;
40
- - Dynamic merchandising&lt;br /&gt;&#xD;
41
- - Message series or single message&lt;br /&gt;&#xD;
42
- - Dynamic content&lt;br /&gt;&#xD;
43
- - Multi-path offer testing&lt;br /&gt;&#xD;
44
- - Offer suppression and randomization&lt;br /&gt;&#xD;
45
&lt;/ol&gt;&#xD;
46
&#xD;
47
&lt;p&gt;&lt;b&gt;About Listrak&lt;/b&gt;&lt;br /&gt;&#xD;
48
Listrak works with online retailers to maximize marketing ROI by helping them reach optimal engagement with their customers. Our focus is on prompting dialog and interaction through email and mobile marketing to increase customer lifetime value.&lt;/p&gt;</description>
49
- <notes>Added support for cart recreation. &#xD;
50
- Added parent product id and sku to product list API method.&#xD;
51
- Fixed duplicate record issue in subscriber list API method.</notes>
52
<authors><author><name>Listrak</name><user>auto-converted</user><email>magento@listrak.com</email></author></authors>
53
- <date>2012-11-14</date>
54
- <time>16:08:40</time>
55
- <contents><target name="magecommunity"><dir name="Listrak"><dir name="Remarketing"><dir name="Block"><dir name="Adminhtml"><dir name="Abandonedcartreport"><file name="Grid.php" hash="6c9975250ee0d3318fe1a996e19b554f"/></dir><dir name="Emailcapture"><dir name="Edit"><dir name="Tab"><file name="Form.php" hash="d1b495e77fd135af95457ee7c3f1f21c"/></dir><file name="Form.php" hash="dae25c78913b35bb3ad64da797cd82b4"/><file name="Tabs.php" hash="b7c89cd1e1fae23ed52079c6d63ef4ee"/></dir><file name="Edit.php" hash="6a06c2b0dfb5a0414a642bc0cd3b5461"/><file name="Grid.php" hash="9eca43e603861ce2f24ec21a4d3a5064"/></dir><file name="Abandonedcartreport.php" hash="5c348aeec1c636b39ac037b5abc1875a"/><file name="Emailcapture.php" hash="accf0689467c5446e7605cad41e427b0"/><file name="Notifications.php" hash="dec4ef3882d5d11d738576787d05ec61"/></dir><file name="Ecjs.php" hash="1435cf65a3c33850e630364baa87a96e"/><file name="Modal.php" hash="579ffec41876558845b0dae7fce696a5"/></dir><dir name="Helper"><file name="Data.php" hash="bd33bd2e7c3b6cf34cc28499a1f2eb7f"/></dir><dir name="Model"><dir name="Abandonedcart"><dir name="Api"><file name="V2.php" hash="c7b46e1feab677e41f4f9a3914e415fb"/></dir><file name="Api.php" hash="1c0dd08efa63480eb08ff1bc5c1e2765"/></dir><dir name="Apiextension"><dir name="Api"><file name="V2.php" hash="ff5a5f68d92c8a790bb00282c30c1378"/></dir><file name="Api.php" hash="f5cc99451f0bb2fefb97e2b8e4d2aa1d"/></dir><dir name="Click"><dir name="Api"><file name="V2.php" hash="510ae6b8032ff54b5f43d94f447f35e2"/></dir><file name="Api.php" hash="b22605c25dd1336188a62fbbecc177bf"/></dir><dir name="Log"><dir name="Api"><file name="V2.php" hash="ace9ca737ebefd47205886fdef504a05"/></dir><file name="Api.php" hash="2a2a52b419cb90c0648209964b961287"/></dir><dir name="Mysql4"><dir name="Abandonedcart"><file name="Collection.php" hash="fed7e7d3b7dc74b42f21c9599f06b872"/></dir><dir name="Click"><file name="Collection.php" hash="dac93dbb083339bb047d296868cdb597"/></dir><dir name="Emailcapture"><file name="Collection.php" hash="4dbc86c599e6a390e1f8bde7752f09c2"/></dir><dir name="Log"><file name="Collection.php" hash="1765ae33eb74e9593d8266702cfe4160"/></dir><dir name="Session"><file name="Collection.php" hash="c095fdf0c54184df63ff6dd8636d779e"/></dir><dir name="Subscriberupdate"><file name="Collection.php" hash="1fd68314a80e93f416815273f29bf9f5"/></dir><file name="Abandonedcart.php" hash="1b09f8922a31433dfc83bfbeb93fbe88"/><file name="Apiextension.php" hash="b243c6feafd1b2401541f96112b9f522"/><file name="Click.php" hash="baabaf95e4d4f7f3fb1a2ac1c1965984"/><file name="Emailcapture.php" hash="b68ee210c3bcec8f2fccef7979b022b7"/><file name="Log.php" hash="e244d19b857ee9d03a7955a30d3f6cf3"/><file name="Session.php" hash="454a2c56529a0db4db3a5b8473952f78"/><file name="Subscriberupdate.php" hash="4957865b4aa8bbdda3a50484d7e49880"/></dir><file name="Abandonedcart.php" hash="2bd672054843917133e3ac7d941be42c"/><file name="Apiextension.php" hash="1a5964f749523d74c648d6609673fb08"/><file name="Click.php" hash="e4b390e9a6a45dcbc6191bcf0f4f0729"/><file name="Emailcapture.php" hash="4987ceda6dda7ca134736895e3cfed74"/><file name="Log.php" hash="577b2308bdbc531c867c67277d513371"/><file name="Observer.php" hash="61d199280da5c4748efba7ae67a01d3f"/><file name="Session.php" hash="2653ba8c029180fc455a4551fede9515"/><file name="Subscriber.php" hash="7addcff01d1c12e88baad9064a362f2c"/><file name="Subscriberupdate.php" hash="77df791c2d17772345f518ce3b4dab90"/></dir><dir name="controllers"><dir name="Adminhtml"><file name="AbandonedcartreportController.php" hash="e1a2c2db0c6cc8cc30f9fdf26636c1a0"/><file name="EmailcaptureController.php" hash="ad7c87ca689bc30eb135fc5d25ae21a2"/></dir><file name="CartController.php" hash="bab8c133100ae8bcd4ccdeb43329370a"/><file name="ConfigController.php" hash="7250d699110107b35fa004833dc3595e"/><file name="EmailController.php" hash="d1706df1448e6bd85826357efd9a22d4"/><file name="TroubleshootingController.php" hash="8e9355a2c91ee3508620fc893aabe050"/></dir><dir name="etc"><file name="adminhtml.xml" hash="0e01a6415641c271f4eb3067419c7f0a"/><file name="api.xml" hash="9e261fb5bfd7fc24870a8f8af5c9b226"/><file name="config.xml" hash="f0f66d8ff1d30cd775978b9de554afe2"/><file name="system.xml" hash="2f5ac2e3256dac4fe5bde34275b4f5b7"/><file name="wsdl.xml" hash="df295ec2ebec26c9c2d6afa0c77256c5"/><file name="wsi.xml" hash="e6fc96537d37c0c688454442d05c637d"/></dir><dir name="sql"><dir name="listrak_remarketing_setup"><file name="mysql4-install-1.0.0.php" hash="9969325db69a8582cd2807343dc1c5bc"/><file name="mysql4-upgrade-1.0.0-1.0.1.php" hash="51d6494a61a2e32907cdc8eaf078274c"/><file name="mysql4-upgrade-1.0.8-1.0.9.php" hash="8c935ec4a7ff8816c1ab1df644c1edf3"/><file name="mysql4-upgrade-1.1.0-1.1.1.php" hash="df4e8464d389d3f0155755c362b5a7ac"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="remarketing.xml" hash="3f8da579155772292019871e92d3642a"/></dir></dir></dir></dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="remarketing.xml" hash="44d7027ba447c4aaf0841d32d185ffde"/></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Listrak_Remarketing.xml" hash="1fc68edb656e220874e64cffaf7f2dbd"/></dir></target></contents>
56
<compatible/>
57
<dependencies/>
58
</package>
1
<?xml version="1.0"?>
2
<package>
3
<name>Listrak_Remarketing</name>
4
+ <version>1.1.4</version>
5
<stability>stable</stability>
6
<license uri="http://s1.listrakbi.com/licenses/magento.txt">Listrak EULA</license>
7
<channel>community</channel>
12
&lt;p&gt;The Listrak extension for Magento enables online merchants to expand their email marketing campaigns beyond typical "batch and blast" into targeted campaigns aimed at specific scenarios and buyer events. The extension covers:&lt;/p&gt;&#xD;
13
&#xD;
14
&lt;p&gt;&#xD;
15
+ - Shopping Cart Abandonment&lt;br /&gt;&#xD;
16
+ - Buyertrak - refillable/replenishable order reminders&lt;br /&gt;&#xD;
17
+ - Customer purchase metrics&lt;br /&gt;&#xD;
18
+ - Post purchase follow-up campaigns&lt;br /&gt;&#xD;
19
+ - Newsletter subscriber synchronization&lt;br /&gt;&#xD;
20
&lt;/p&gt;&#xD;
21
&#xD;
22
&lt;p&gt;&lt;b&gt;Shopping Cart Abandonment&lt;/b&gt;&lt;br /&gt;&#xD;
36
&#xD;
37
&lt;p&gt;Additional Listrak features include:&lt;/p&gt;&#xD;
38
&lt;ol&gt;&#xD;
39
+ - Advanced segmentation&lt;br /&gt;&#xD;
40
+ - Dynamic merchandising&lt;br /&gt;&#xD;
41
+ - Message series or single message&lt;br /&gt;&#xD;
42
+ - Dynamic content&lt;br /&gt;&#xD;
43
+ - Multi-path offer testing&lt;br /&gt;&#xD;
44
+ - Offer suppression and randomization&lt;br /&gt;&#xD;
45
&lt;/ol&gt;&#xD;
46
&#xD;
47
&lt;p&gt;&lt;b&gt;About Listrak&lt;/b&gt;&lt;br /&gt;&#xD;
48
Listrak works with online retailers to maximize marketing ROI by helping them reach optimal engagement with their customers. Our focus is on prompting dialog and interaction through email and mobile marketing to increase customer lifetime value.&lt;/p&gt;</description>
49
+ <notes>Added support for Magento product reviews.</notes>
50
<authors><author><name>Listrak</name><user>auto-converted</user><email>magento@listrak.com</email></author></authors>
51
+ <date>2012-12-17</date>
52
+ <time>15:47:20</time>
53
+ <contents><target name="magecommunity"><dir name="Listrak"><dir name="Remarketing"><dir name="Block"><dir name="Adminhtml"><dir name="Abandonedcartreport"><file name="Grid.php" hash="6c9975250ee0d3318fe1a996e19b554f"/></dir><dir name="Emailcapture"><dir name="Edit"><dir name="Tab"><file name="Form.php" hash="d1b495e77fd135af95457ee7c3f1f21c"/></dir><file name="Form.php" hash="dae25c78913b35bb3ad64da797cd82b4"/><file name="Tabs.php" hash="b7c89cd1e1fae23ed52079c6d63ef4ee"/></dir><file name="Edit.php" hash="6a06c2b0dfb5a0414a642bc0cd3b5461"/><file name="Grid.php" hash="9eca43e603861ce2f24ec21a4d3a5064"/></dir><file name="Abandonedcartreport.php" hash="5c348aeec1c636b39ac037b5abc1875a"/><file name="Emailcapture.php" hash="accf0689467c5446e7605cad41e427b0"/><file name="Notifications.php" hash="dec4ef3882d5d11d738576787d05ec61"/></dir><file name="Ecjs.php" hash="f03a34349994a31feb3ae5f2edcdb6bb"/><file name="Modal.php" hash="d66d74cc8695efd8ef8dc4c15433170e"/></dir><dir name="Helper"><dir name="Review"><file name="Update.php" hash="4418214678ef257817c07d71c7b74eef"/></dir><file name="Data.php" hash="26a1f5a63694ac715727531fe4b1bb30"/></dir><dir name="Model"><dir name="Abandonedcart"><dir name="Api"><file name="V2.php" hash="c7b46e1feab677e41f4f9a3914e415fb"/></dir><file name="Api.php" hash="5bdfa82e2bed90e602c010fa59ccd525"/></dir><dir name="Apiextension"><dir name="Api"><file name="V2.php" hash="ff5a5f68d92c8a790bb00282c30c1378"/></dir><file name="Api.php" hash="55f02bd4afb07a6b13d419647fd333e9"/></dir><dir name="Click"><dir name="Api"><file name="V2.php" hash="510ae6b8032ff54b5f43d94f447f35e2"/></dir><file name="Api.php" hash="cafb4a68915c115cd648512a196cb342"/></dir><dir name="Log"><dir name="Api"><file name="V2.php" hash="ace9ca737ebefd47205886fdef504a05"/></dir><file name="Api.php" hash="62c02694e7bec2a0975572078e81de19"/></dir><dir name="Mysql4"><dir name="Abandonedcart"><file name="Collection.php" hash="fed7e7d3b7dc74b42f21c9599f06b872"/></dir><dir name="Click"><file name="Collection.php" hash="dac93dbb083339bb047d296868cdb597"/></dir><dir name="Emailcapture"><file name="Collection.php" hash="4dbc86c599e6a390e1f8bde7752f09c2"/></dir><dir name="Log"><file name="Collection.php" hash="1765ae33eb74e9593d8266702cfe4160"/></dir><dir name="Review"><dir name="Update"><file name="Collection.php" hash="d9feaf6ff25b1b3612bf03dd57ee8d6c"/></dir><file name="Update.php" hash="ce81fcbaaf52850189feb56ef1247380"/></dir><dir name="Session"><file name="Collection.php" hash="c095fdf0c54184df63ff6dd8636d779e"/></dir><dir name="Subscriberupdate"><file name="Collection.php" hash="1fd68314a80e93f416815273f29bf9f5"/></dir><file name="Abandonedcart.php" hash="627320d084a92ffa9b5c1f3e45687eda"/><file name="Apiextension.php" hash="b243c6feafd1b2401541f96112b9f522"/><file name="Click.php" hash="baabaf95e4d4f7f3fb1a2ac1c1965984"/><file name="Emailcapture.php" hash="b68ee210c3bcec8f2fccef7979b022b7"/><file name="Log.php" hash="e244d19b857ee9d03a7955a30d3f6cf3"/><file name="Session.php" hash="454a2c56529a0db4db3a5b8473952f78"/><file name="Subscriberupdate.php" hash="4957865b4aa8bbdda3a50484d7e49880"/></dir><dir name="Review"><dir name="Update"><dir name="Api"><file name="V2.php" hash="51e0152349088b445e6e6e0ab11315a6"/></dir><file name="Api.php" hash="42a23cfa9ce897ffd40d9d2df9360916"/></dir><file name="Update.php" hash="2ff5b032f20a77ecfb828a29368aecc0"/></dir><file name="Abandonedcart.php" hash="2bd672054843917133e3ac7d941be42c"/><file name="Apiextension.php" hash="1a5964f749523d74c648d6609673fb08"/><file name="Click.php" hash="f5275919f3b677a196cca0b47572edb1"/><file name="Emailcapture.php" hash="4987ceda6dda7ca134736895e3cfed74"/><file name="Log.php" hash="577b2308bdbc531c867c67277d513371"/><file name="Observer.php" hash="92208fb7a6eeab880f4f7281764048eb"/><file name="Session.php" hash="2653ba8c029180fc455a4551fede9515"/><file name="Subscriber.php" hash="7addcff01d1c12e88baad9064a362f2c"/><file name="Subscriberupdate.php" hash="77df791c2d17772345f518ce3b4dab90"/></dir><dir name="controllers"><dir name="Adminhtml"><file name="AbandonedcartreportController.php" hash="36cef4591dfd2edee90447649cb767df"/><file name="EmailcaptureController.php" hash="48001875974ad6d83a1e1b5238443859"/></dir><file name="CartController.php" hash="bab8c133100ae8bcd4ccdeb43329370a"/><file name="ConfigController.php" hash="7250d699110107b35fa004833dc3595e"/><file name="EmailController.php" hash="d1706df1448e6bd85826357efd9a22d4"/><file name="TroubleshootingController.php" hash="8e9355a2c91ee3508620fc893aabe050"/></dir><dir name="etc"><file name="adminhtml.xml" hash="0e01a6415641c271f4eb3067419c7f0a"/><file name="api.xml" hash="37986e45324636237565bab6aff95bd6"/><file name="config.xml" hash="d830db358a45a1dd34f0dd226343c97f"/><file name="system.xml" hash="97a11d49780c4362f66b79a1672acc2b"/><file name="wsdl.xml" hash="d6352b50ab97e560b5a46342fe8d68ff"/><file name="wsi.xml" hash="e6fc96537d37c0c688454442d05c637d"/></dir><dir name="sql"><dir name="listrak_remarketing_setup"><file name="mysql4-install-1.0.0.php" hash="9969325db69a8582cd2807343dc1c5bc"/><file name="mysql4-upgrade-1.0.0-1.0.1.php" hash="51d6494a61a2e32907cdc8eaf078274c"/><file name="mysql4-upgrade-1.0.8-1.0.9.php" hash="8c935ec4a7ff8816c1ab1df644c1edf3"/><file name="mysql4-upgrade-1.1.0-1.1.1.php" hash="df4e8464d389d3f0155755c362b5a7ac"/><file name="mysql4-upgrade-1.1.3-1.1.4.php" hash="44de533b51944af71bf2e66f3a1e134c"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="remarketing.xml" hash="3f8da579155772292019871e92d3642a"/></dir></dir></dir></dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="remarketing.xml" hash="44d7027ba447c4aaf0841d32d185ffde"/></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Listrak_Remarketing.xml" hash="1fc68edb656e220874e64cffaf7f2dbd"/></dir></target></contents>
54
<compatible/>
55
<dependencies/>
56
</package>