pixlee-for-magento - Version 2.0.0.3

Version Notes

First requires configuration in System > Configuration > Pixlee Account Configuration.

Download this release

Release Info

Developer Awad Sayeed
Extension pixlee-for-magento
Version 2.0.0.3
Comparing to
See all releases


Code changes from version 2.0.0.1 to 2.0.0.3

app/code/community/Pixlee/Base/Block/Gallery.php CHANGED
@@ -13,10 +13,6 @@ class Pixlee_Base_Block_Gallery extends Mage_Core_Block_Template {
13
  return parent::_prepareLayout();
14
  }
15
 
16
- public function getUserId() {
17
- return Mage::getStoreConfig('pixlee/pixlee/user_id', Mage::app()->getStore());
18
- }
19
-
20
  public function getAccountId() {
21
  return Mage::getStoreConfig('pixlee/pixlee/account_id', Mage::app()->getStore());
22
  }
@@ -36,7 +32,7 @@ class Pixlee_Base_Block_Gallery extends Mage_Core_Block_Template {
36
  }
37
 
38
  public function getApiKey() {
39
- $pixleeApiKey = Mage::getStoreConfig('pixlee/pixlee/api_key', Mage::app()->getStore());
40
  return ($pixleeApiKey) ? $pixleeApiKey : self::DEFAULT_DISPLAY_OPTIONS_ID;
41
  }
42
 
13
  return parent::_prepareLayout();
14
  }
15
 
 
 
 
 
16
  public function getAccountId() {
17
  return Mage::getStoreConfig('pixlee/pixlee/account_id', Mage::app()->getStore());
18
  }
32
  }
33
 
34
  public function getApiKey() {
35
+ $pixleeApiKey = Mage::getStoreConfig('pixlee/pixlee/account_api_key', Mage::app()->getStore());
36
  return ($pixleeApiKey) ? $pixleeApiKey : self::DEFAULT_DISPLAY_OPTIONS_ID;
37
  }
38
 
app/code/community/Pixlee/Base/Helper/Data.php CHANGED
@@ -66,9 +66,15 @@ class Pixlee_Base_Helper_Data extends Mage_Core_Helper_Abstract {
66
  }
67
 
68
  public function getUnexportedProducts($useCached = true) {
69
- // if($this->_unexportedProducts && $useCached) {
70
- // return $this->_unexportedProducts;
71
- // }
 
 
 
 
 
 
72
  $albumTable = Mage::getSingleton('core/resource')->getTableName('pixlee/product_album');
73
  $collection = Mage::getModel('catalog/product')->getCollection()
74
  ->addAttributeToFilter('visibility', array('neq' => 1)); // Only grab products that are visible in catalog and/or search
@@ -125,33 +131,92 @@ class Pixlee_Base_Helper_Data extends Mage_Core_Helper_Abstract {
125
  // has already been called
126
  public function getAggregateStock($actualProduct) {
127
  Mage::log("*** In getAggregateStock");
128
- $childProducts = Mage::getModel('catalog/product_type_configurable')->getUsedProducts(null,$actualProduct);
129
- $aggregateStock = 0;
130
- foreach ($childProducts as $child) {
131
- // Sometimes Magento gives a negative inventory quantity
132
- // I don't want that to affect the overall count
133
- // TODO: There is probably a good reason why it goes negative
134
- Mage::log("Child Name: {$child->getName()}");
135
- Mage::log("Child SKU: {$child->getSku()}");
136
- Mage::log("Child Stock: {$child->getStockItem()->getQty()}");
137
- $aggregateStock += max(0, $child->getStockItem()->getQty());
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
138
  }
139
  Mage::log("Returning aggregateStock: {$aggregateStock}");
140
  return $aggregateStock;
141
  }
142
 
143
- public function getVariantsDict($product) {
144
  $variantsDict = array();
145
- $childProducts = Mage::getModel('catalog/product_type_configurable')->getUsedProducts(null,$product);
146
- foreach ($childProducts as $child) {
147
- // Sometimes Magento gives a negative inventory quantity
148
- // I don't want that to affect the overall count
149
- // TODO: There is probably a good reason why it goes negative
150
- $variantId = $child->getId();
151
- $variantsDict[$variantId] = array(
152
- 'variant_stock' => max(0, $child->getStockItem()->getQty()),
153
- 'variant_sku' => $child->getSku(),
 
 
 
 
154
  );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
155
  }
156
  return $variantsDict;
157
  }
@@ -183,6 +248,9 @@ class Pixlee_Base_Helper_Data extends Mage_Core_Helper_Abstract {
183
  $albumId = $response->data->album->id;
184
  } else if(isset($response->data->product->album_id)) {
185
  $albumId = $response->data->product->album_id;
 
 
 
186
  }
187
 
188
  if($albumId) {
66
  }
67
 
68
  public function getUnexportedProducts($useCached = true) {
69
+ // NEVERMIND I'm dumb
70
+ // Tee Ming was totally justified in doing what he did. I should never have doubted Tee Ming.
71
+ // My problem is not that I need getUnexportedProducts to return a cached result, but that
72
+ // having converted to distillery, I wasn't correctly parsing out the created album ID
73
+ /*
74
+ if($this->_unexportedProducts && $useCached) {
75
+ return $this->_unexportedProducts;
76
+ }
77
+ */
78
  $albumTable = Mage::getSingleton('core/resource')->getTableName('pixlee/product_album');
79
  $collection = Mage::getModel('catalog/product')->getCollection()
80
  ->addAttributeToFilter('visibility', array('neq' => 1)); // Only grab products that are visible in catalog and/or search
131
  // has already been called
132
  public function getAggregateStock($actualProduct) {
133
  Mage::log("*** In getAggregateStock");
134
+ $aggregateStock = NULL;
135
+ // If after calling _extractActualProduct, there is no 'configurable' product, and only
136
+ // a 'simple' product, we won't get anything back from
137
+ // getModel('catalog/product_type_configurable')
138
+ if ($actualProduct->getTypeId() == "simple") {
139
+ // If the product's not keeping track of inventory, we'll error out when we try
140
+ // to call the getQty() function on the output of getStockItem()
141
+ if (is_null($actualProduct->getStockItem())) {
142
+ $aggregateStock = NULL;
143
+ } else {
144
+ $aggregateStock = max(0, $actualProduct->getStockItem()->getQty());
145
+ }
146
+ } else {
147
+ // 'grouped' type products have 'associated products,' which presumably
148
+ // point to simple products
149
+ if ($actualProduct->getTypeId() == "grouped") {
150
+ $childProducts = $actualProduct->getTypeInstance(true)->getAssociatedProducts($actualProduct);
151
+ // And finally, my original assumption that all 'simple' products are
152
+ // under the umbrella of some 'configurable' product
153
+ } else if ($actualProduct->getTypeId() == "configurable") {
154
+ $childProducts = Mage::getModel('catalog/product_type_configurable')->getUsedProducts(null,$actualProduct);
155
+ }
156
+ foreach ($childProducts as $child) {
157
+ // Sometimes Magento gives a negative inventory quantity
158
+ // I don't want that to affect the overall count
159
+ // TODO: There is probably a good reason why it goes negative
160
+ Mage::log("Child Name: {$child->getName()}");
161
+ Mage::log("Child SKU: {$child->getSku()}");
162
+ if (is_null($child->getStockItem())) {
163
+ Mage::log("Child product not tracking stock, setting to NULL");
164
+ } else {
165
+ Mage::log("Child Stock: {$child->getStockItem()->getQty()}");
166
+ if (is_null($aggregateStock)) {
167
+ $aggregateStock = 0;
168
+ }
169
+ $aggregateStock += max(0, $child->getStockItem()->getQty());
170
+ }
171
+ }
172
  }
173
  Mage::log("Returning aggregateStock: {$aggregateStock}");
174
  return $aggregateStock;
175
  }
176
 
177
+ public function getVariantsDict($actualProduct) {
178
  $variantsDict = array();
179
+
180
+ // If after calling _extractActualProduct, there is no 'configurable' product, and only
181
+ // a 'simple' product, we won't get anything back from
182
+ // getModel('catalog/product_type_configurable')
183
+ if ($actualProduct->getTypeId() == "simple") {
184
+ if (is_null($actualProduct->getStockItem())) {
185
+ $variantStock = NULL;
186
+ } else {
187
+ $variantStock = max(0, $actualProduct->getStockItem()->getQty());
188
+ }
189
+ $variantsDict[$actualProduct->getId()] = array(
190
+ 'variant_stock' => $variantStock,
191
+ 'variant_sku' => $actualProduct->getSku(),
192
  );
193
+ } else {
194
+ // 'grouped' type products have 'associated products,' which presumably
195
+ // point to simple products
196
+ if ($actualProduct->getTypeId() == "grouped") {
197
+ $childProducts = $actualProduct->getTypeInstance(true)->getAssociatedProducts($actualProduct);
198
+ // And finally, my original assumption that all 'simple' products are
199
+ // under the umbrella of some 'configurable' product
200
+ } else if ($actualProduct->getTypeId() == "configurable") {
201
+ $childProducts = Mage::getModel('catalog/product_type_configurable')->getUsedProducts(null,$actualProduct);
202
+ }
203
+ foreach ($childProducts as $child) {
204
+ // Sometimes Magento gives a negative inventory quantity
205
+ // I don't want that to affect the overall count
206
+ // TODO: There is probably a good reason why it goes negative
207
+ $variantId = $child->getId();
208
+
209
+ if (is_null($child->getStockItem())) {
210
+ $variantStock = NULL;
211
+ } else {
212
+ $variantStock = max(0, $child->getStockItem()->getQty());
213
+ }
214
+
215
+ $variantsDict[$variantId] = array(
216
+ 'variant_stock' => $variantStock,
217
+ 'variant_sku' => $child->getSku(),
218
+ );
219
+ }
220
  }
221
  return $variantsDict;
222
  }
248
  $albumId = $response->data->album->id;
249
  } else if(isset($response->data->product->album_id)) {
250
  $albumId = $response->data->product->album_id;
251
+ // Distillery returns the product album on the 'create' verb
252
+ } else if(isset($response->id)) {
253
+ $albumId = $response->id;
254
  }
255
 
256
  if($albumId) {
app/code/community/Pixlee/Base/Model/Observer.php CHANGED
@@ -53,9 +53,6 @@ class Pixlee_Base_Model_Observer {
53
  // ADD PRODUCT TO CART
54
  public function addToCart(Varien_Event_Observer $observer) {
55
  $product = $observer->getEvent()->getProduct();
56
- Mage::log("BEGINNING OF PRODUCT JSON");
57
- Mage::log($product->getJson());
58
- Mage::log("END OF THE PRODUCT LOG");
59
  $productData = $this->_extractProduct($product);
60
  $payload = $this->_preparePayload($productData);
61
  $this->_sendPayload('addToCart', $payload);
@@ -80,8 +77,6 @@ class Pixlee_Base_Model_Observer {
80
 
81
  // CHECKOUT SUCCESS
82
  public function checkoutSuccess(Varien_Event_Observer $observer) {
83
- // $quote = $observer->getEvent()->getQuote();
84
-
85
  $quote = new Mage_Sales_Model_Order();
86
  $incrementId = Mage::getSingleton('checkout/session')->getLastRealOrderId();
87
  $quote->loadByIncrementId($incrementId);
@@ -91,13 +86,26 @@ class Pixlee_Base_Model_Observer {
91
  $payload = array_merge(array('cart' => $cartData), $customerData);
92
  $payload = $this->_preparePayload($payload);
93
  $this->_sendPayload('checkoutSuccess', $payload);
 
 
 
 
 
 
 
 
94
  }
95
 
96
- public function checkAnalyticsCookie(Varien_Event_Observer $observer) {
97
- if ($this->_getPixleeCookie() == false) {
98
- echo "<script src='https://assets.pixlee.com/magento/getAnalyticsCookie.js'></script>";
 
 
 
 
 
 
99
  }
100
- }
101
 
102
  // VALIDATE CREDENTIALS
103
  public function validateCredentials(Varien_Event_Observer $observer){
@@ -143,13 +151,12 @@ public function checkAnalyticsCookie(Varien_Event_Observer $observer) {
143
  }
144
  Mage::log("** Before building payload");
145
  // Required key/value pairs not in the payload by default.
146
- $payload['API_KEY']= Mage::getStoreConfig('pixlee/pixlee/api_key', Mage::app()->getStore());
147
  $payload['uid'] = $payload['CURRENT_PIXLEE_USER_ID'];
148
  $payload['pixlee_album_photos_timestamps'] = $payload['CURRENT_PIXLEE_ALBUM_PHOTOS_TIMESTAMP'];
149
  $payload['pixlee_album_photos'] = $payload['CURRENT_PIXLEE_ALBUM_PHOTOS'];
150
  $payload['horizontal_page'] = $payload['HORIZONTAL_PAGE'];
151
  Mage::log("** After building payload");
152
- Mage::log("** Payload: $payload");
153
  $payload['ecommerce_platform'] = 'magento_1';
154
  $payload['ecommerce_platform_version'] = '2.0.0';
155
  $payload['version_hash'] = $this->_getVersionHash();
@@ -200,7 +207,9 @@ public function checkAnalyticsCookie(Varien_Event_Observer $observer) {
200
  $productData['quantity'] = (int) $product->getQty();
201
  $product = $product->getProduct();
202
  } else if(is_a($product, 'Mage_Sales_Model_Order_Item')) {
203
- $productData['quantity'] = (int) $product->getQtyToInvoice();
 
 
204
  $product = $product->getProduct();
205
  } else {
206
  $productData['quantity'] = (int) $product->getQty();
53
  // ADD PRODUCT TO CART
54
  public function addToCart(Varien_Event_Observer $observer) {
55
  $product = $observer->getEvent()->getProduct();
 
 
 
56
  $productData = $this->_extractProduct($product);
57
  $payload = $this->_preparePayload($productData);
58
  $this->_sendPayload('addToCart', $payload);
77
 
78
  // CHECKOUT SUCCESS
79
  public function checkoutSuccess(Varien_Event_Observer $observer) {
 
 
80
  $quote = new Mage_Sales_Model_Order();
81
  $incrementId = Mage::getSingleton('checkout/session')->getLastRealOrderId();
82
  $quote->loadByIncrementId($incrementId);
86
  $payload = array_merge(array('cart' => $cartData), $customerData);
87
  $payload = $this->_preparePayload($payload);
88
  $this->_sendPayload('checkoutSuccess', $payload);
89
+
90
+ // Magento ticks down the stock inventory as soon as an order is created,
91
+ // so in addition to sending an analytics event, update the product in distillery
92
+ $helper = Mage::helper('pixlee');
93
+ foreach ($quote->getAllVisibleItems() as $item) {
94
+ $product = $helper->_extractActualProduct($item);
95
+ $helper->exportProductToPixlee($product);
96
+ }
97
  }
98
 
99
+ // CANCEL ORDER
100
+ public function cancelOrder(Varien_Event_Observer $observer) {
101
+ // When an order is cancelled, Magento ticks the stock inventory back up
102
+ $helper = Mage::helper('pixlee');
103
+ $order = $observer->getEvent()->getOrder();
104
+ foreach ($order->getAllVisibleItems() as $item) {
105
+ $product = $helper->_extractActualProduct($item);
106
+ $helper->exportProductToPixlee($product);
107
+ }
108
  }
 
109
 
110
  // VALIDATE CREDENTIALS
111
  public function validateCredentials(Varien_Event_Observer $observer){
151
  }
152
  Mage::log("** Before building payload");
153
  // Required key/value pairs not in the payload by default.
154
+ $payload['API_KEY']= Mage::getStoreConfig('pixlee/pixlee/account_api_key', Mage::app()->getStore());
155
  $payload['uid'] = $payload['CURRENT_PIXLEE_USER_ID'];
156
  $payload['pixlee_album_photos_timestamps'] = $payload['CURRENT_PIXLEE_ALBUM_PHOTOS_TIMESTAMP'];
157
  $payload['pixlee_album_photos'] = $payload['CURRENT_PIXLEE_ALBUM_PHOTOS'];
158
  $payload['horizontal_page'] = $payload['HORIZONTAL_PAGE'];
159
  Mage::log("** After building payload");
 
160
  $payload['ecommerce_platform'] = 'magento_1';
161
  $payload['ecommerce_platform_version'] = '2.0.0';
162
  $payload['version_hash'] = $this->_getVersionHash();
207
  $productData['quantity'] = (int) $product->getQty();
208
  $product = $product->getProduct();
209
  } else if(is_a($product, 'Mage_Sales_Model_Order_Item')) {
210
+ // BUGZ-1081: We used to have getQtyToInvoice() here, but it seems Goorin
211
+ // has maybe...and auto-invoice extension maybe?
212
+ $productData['quantity'] = (int) $product->getQtyOrdered();
213
  $product = $product->getProduct();
214
  } else {
215
  $productData['quantity'] = (int) $product->getQty();
app/code/community/Pixlee/Base/Test/Helper/fixtures/testIsActive.yaml CHANGED
@@ -1,4 +1,2 @@
1
  config:
2
- stores/admin/pixlee/pixlee/api_key: 'api_key_exists'
3
- stores/admin/pixlee/pixlee/secret_key: 'secret_key_exists'
4
- stores/admin/pixlee/pixlee/user_id: 'user_id'
1
  config:
2
+ stores/admin/pixlee/pixlee/account_api_key: 'api_key_exists'
 
 
app/code/community/Pixlee/Base/Test/Helper/fixtures/testIsInactive.yaml CHANGED
@@ -1,4 +1,2 @@
1
  config:
2
- stores/admin/pixlee/pixlee/api_key: ''
3
- stores/admin/pixlee/pixlee/secret_key: ''
4
- stores/admin/pixlee/pixlee/user_id: ''
1
  config:
2
+ stores/admin/pixlee/pixlee/account_api_key: ''
 
 
app/code/community/Pixlee/Base/etc/config.xml CHANGED
@@ -2,7 +2,7 @@
2
  <config>
3
  <modules>
4
  <Pixlee_Base>
5
- <version>2.0.0</version>
6
  </Pixlee_Base>
7
  </modules>
8
  <global>
@@ -86,16 +86,16 @@
86
  </observers>
87
  </sales_quote_remove_item>
88
 
89
- <!-- GET A DUH AND CREATE THE ANALYTICS COOKIE -->
90
- <controller_front_init_before>
91
  <observers>
92
- <recreate_analytics_cookie>
93
  <type>singleton</type>
94
  <class>pixlee/observer</class>
95
- <method>checkAnalyticsCookie</method>
96
- </recreate_analytics_cookie>
97
  </observers>
98
- </controller_front_init_before>
99
 
100
  <!-- ADMIN: CHECK IF NEW PRODUCT OR UPDATING -->
101
  <catalog_product_save_before>
2
  <config>
3
  <modules>
4
  <Pixlee_Base>
5
+ <version>2.0.0.3</version>
6
  </Pixlee_Base>
7
  </modules>
8
  <global>
86
  </observers>
87
  </sales_quote_remove_item>
88
 
89
+ <!-- CANCEL ORDER -->
90
+ <order_cancel_after>
91
  <observers>
92
+ <pixlee_cancel_order_analytics>
93
  <type>singleton</type>
94
  <class>pixlee/observer</class>
95
+ <method>cancelOrder</method>
96
+ </pixlee_cancel_order_analytics>
97
  </observers>
98
+ </order_cancel_after>
99
 
100
  <!-- ADMIN: CHECK IF NEW PRODUCT OR UPDATING -->
101
  <catalog_product_save_before>
app/code/community/Pixlee/Base/version.txt CHANGED
@@ -1 +1 @@
1
- 1bc50a751cdecac57f3518ce52356e3b9c531010
1
+ a9fca855e13805275e8131bc2f3778a8c7a9e734
app/design/frontend/base/default/layout/pixlee/gallery.xml CHANGED
@@ -1,6 +1,6 @@
1
  <?xml version="1.0"?>
2
  <layout version="0.1.0">
3
- <!--
4
  To implement the Pixlee gallery, insert the "pixlee_gallery_tag"
5
  update handle in the layout XML for your page. Example:
6
 
@@ -39,4 +39,10 @@
39
  <update handle="pixlee_gallery_tag" />
40
  </default>
41
 
 
 
 
 
 
 
42
  </layout>
1
  <?xml version="1.0"?>
2
  <layout version="0.1.0">
3
+ <!--
4
  To implement the Pixlee gallery, insert the "pixlee_gallery_tag"
5
  update handle in the layout XML for your page. Example:
6
 
39
  <update handle="pixlee_gallery_tag" />
40
  </default>
41
 
42
+ <catalog_product_view>
43
+ <reference name="head">
44
+ <action method="addJs"><script>pixlee/getAnalyticsCookie.js</script></action>
45
+ </reference>
46
+ </catalog_product_view>
47
+
48
  </layout>
js/pixlee/getAnalyticsCookie.js ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ var createPixleeAnalyticsCookie = function() {
2
+ var iframe = document.createElement('iframe');
3
+ iframe.style.display = "none";
4
+ iframe.src = 'https://photos.pixlee.com/getDUH';
5
+ document.body.appendChild(iframe);
6
+
7
+ window.addEventListener("message", function receiveMessage(event) {
8
+ try {
9
+ var eventData = JSON.parse(event.data);
10
+ if (eventData.function == "pixlee_distinct_user_hash") {
11
+ if (eventData.data) {
12
+ var distinct_user_hash_linker = eventData.value;
13
+ setCookie('pixlee_analytics_cookie', encodeURIComponent(JSON.stringify({
14
+ CURRENT_PIXLEE_USER_ID: distinct_user_hash_linker,
15
+ CURRENT_PIXLEE_ALBUM_PHOTOS: [],
16
+ HORIZONTAL_PAGE: [],
17
+ CURRENT_PIXLEE_ALBUM_PHOTOS_TIMESTAMP: []
18
+ })), 30);
19
+ }
20
+ }
21
+ } catch(e) {
22
+ console.log("Exception " + e);
23
+ };
24
+ }, false);
25
+ }
26
+
27
+ var setCookie = function(name, value, days) {
28
+ if (days) {
29
+ var date = new Date();
30
+ date.setTime(date.getTime()+(days*24*60*60*1000));
31
+ var expires = "; expires="+date.toGMTString();
32
+ }
33
+ else var expires = "";
34
+ document.cookie = name+"="+value+expires+"; path=/; domain=" + window.location.host.replace('www', '');
35
+ };
36
+
37
+ window.addEventListener('load', createPixleeAnalyticsCookie);
lib/Pixlee/.Pixlee.php.swp ADDED
Binary file
lib/Pixlee/Pixlee.php CHANGED
@@ -71,6 +71,13 @@ class Pixlee_Pixlee {
71
  }
72
  }
73
  */
 
 
 
 
 
 
 
74
  $product = array('name' => $product_name, 'sku' => $sku, 'buy_now_link_url' => $product_url,
75
  'product_photo' => $product_image, 'stock' => $aggregateStock,
76
  'native_product_id' => $product_id, 'variants_json' => $variantsDict);
71
  }
72
  }
73
  */
74
+
75
+ // I feel like this is the result of a long chain of engineers being uncertain, that
76
+ // a product's ID, which is inaccesible to the user, and almost certainly a number,
77
+ // comes back as a string from $product->getId(). I'm just going to decide to break the cycle.
78
+ // Let's hope I'm right.
79
+ $product_id = (int) $product_id;
80
+
81
  $product = array('name' => $product_name, 'sku' => $sku, 'buy_now_link_url' => $product_url,
82
  'product_photo' => $product_image, 'stock' => $aggregateStock,
83
  'native_product_id' => $product_id, 'variants_json' => $variantsDict);
package.xml CHANGED
@@ -1,58 +1,2 @@
1
  <?xml version="1.0"?>
2
- <package>
3
- <name>Pixlee_Base</name>
4
- <version>2.0.0</version>
5
- <stability>stable</stability>
6
- <license>MIT</license>
7
- <channel>community</channel>
8
- <extends/>
9
- <summary>Social commerce platform to collect, curate, and display user-generated content to enhance your Magento store</summary>
10
- <description>Pixlee&#x2019;s pre-built integration allows brands to easily deploy real customer photos and videos across online storefronts to create a more social ecommerce experience and to drive higher sales. &lt;br /&gt;&lt;br /&gt;&#xD;
11
- &#xD;
12
- Magento customers use Pixlee to increase conversion, average order value, and engagement with: &lt;br /&gt;&lt;br /&gt;&#xD;
13
- &#xD;
14
- &lt;strong&gt;Visual Reviews on Product and Category Pages: &lt;/strong&gt;Publish product specific galleries on product and category pages to give shoppers an authentic view of how real customers enjoy the product they are shopping. (See Screenshot example) &lt;br /&gt;&lt;br /&gt;&#xD;
15
- &#xD;
16
- &lt;strong&gt;Shoppable Galleries &amp;amp; Look Books:&lt;/strong&gt; Create authentic ways for shoppers to browse real customers visual endorsement of your brand, get inspiration to purchase, and discover new products. (See Screenshot example) &lt;br /&gt;&lt;br /&gt;&#xD;
17
- &#xD;
18
- &lt;strong&gt;Campaigns &amp;amp; Contests: &lt;/strong&gt;Create, manage, and promote new and existing marketing campaigns &amp;amp; contests to bridge the gap between social engagement and new sales. (See Screenshot example)&lt;br /&gt;&lt;br /&gt;&#xD;
19
- &#xD;
20
- &lt;strong&gt;Track Performance &amp;amp; Discover Customer Insights: &lt;/strong&gt; Use full social and content analytics dashboard to track conversion, engagement, and social performance of your brand and discover key insights about customers. &lt;br /&gt;&lt;br /&gt;&#xD;
21
- &#xD;
22
- Learn more about the Pixlee platform at &lt;a href="http://www.pixlee.com/"&gt;www.pixleeteam.com &lt;/a&gt;.</description>
23
- <notes>This plugin is an upgrade to the Pixlee Magento plugin 1.0.0. It includes the following improvements -&#xD;
24
- &#xD;
25
- 1. Product exports updated to use Pixlee V2 API&#xD;
26
- - Product exports now send inventory (stock) information&#xD;
27
- - Product exports on "configurable" and "grouped" products now also send a JSON of IDs/SKUs of associated products&#xD;
28
- &#xD;
29
- 2. Standardized Analytics &#xD;
30
- Add to Cart and Remove From Cart analytics will now include the following fields&#xD;
31
- - product_id&#xD;
32
- - product_sku&#xD;
33
- - variant_id&#xD;
34
- - variant_sku&#xD;
35
- - quantity&#xD;
36
- - price&#xD;
37
- &#xD;
38
- Checkout Start and Conversion will now include the following fields&#xD;
39
- - cart_contents (Summary of all the products in the cart)&#xD;
40
- - cart_total (net price)&#xD;
41
- - cart_total_quantity&#xD;
42
- - currency&#xD;
43
- - order_id&#xD;
44
- &#xD;
45
- In addition to those fields, all of the events will include the following fields&#xD;
46
- - ecommerce_platform (magento_1)&#xD;
47
- - ecommerce_version (version of the plugin)&#xD;
48
- - version_hash - refers to the latest git commit hash in the master branch&#xD;
49
- &#xD;
50
- 3. Recognizing unique users&#xD;
51
- All of the users are now tracked using a 'distinct_user_hash' which is issued by Segment. To keep the 'distinct_user_hash' consistent throughout the period of time when the user is on the website - we use segment to only issue a distinct_user_hash relative to photos.pixlee.com. This helps us to recognize all users even if they we re-directed to a different domain.</notes>
52
- <authors><author><name>Awad Sayeed</name><user>awadsayeed</user><email>awad@pixleeteam.com</email></author><author><name>Yunfan Luo</name><user>GANDAMU</user><email>yunfan@pixleeteam.com</email></author><author><name>Satnam Dhanoa</name><user>Satnam14</user><email>satnam@pixleeteam.com</email></author></authors>
53
- <date>2016-03-14</date>
54
- <time>22:24:25</time>
55
- <contents><target name="mageetc"><dir name="modules"><file name="Pixlee_Base.xml" hash="d61d4914e77a6f00ecad4d1c08a69c01"/></dir></target><target name="magecommunity"><dir name="Pixlee"><dir name="Base"><dir name="Block"><dir name="Adminhtml"><dir name="System"><dir name="Config"><dir name="Form"><file name="Export.php" hash="a86d00b5a2e312a5bfdd856fd9ede257"/></dir></dir></dir></dir><file name="Gallery.php" hash="422d945772d1a38acf8ebc4f898971d0"/></dir><dir name="Helper"><file name="Data.php" hash="4f818cc47718aee113fa3c91d6fe5162"/></dir><dir name="Model"><file name="Observer.php" hash="a77b97332798cb88744b25ff30b7cda5"/><dir name="Product"><file name="Album.php" hash="1b415ff13e6fc9403e1149b327f9acb9"/></dir><dir name="Resource"><dir name="Product"><file name="Album.php" hash="a7f1e58ac017f183a2d1620d35645342"/></dir><file name="Setup.php" hash="a4f0721d4b19d19290e4999ef7ad327f"/></dir></dir><dir name="Test"><dir name="Helper"><file name="Data.php" hash="97b4546146d750033aed7c6855ea6327"/><dir name="fixtures"><file name="testGetUnexportedProducts.yaml" hash="9575424d3b1061d07181a8e9b2aaa6f4"/><file name="testIsActive.yaml" hash="53462b2a4bf02c846ae699633b24570c"/><file name="testIsInactive.yaml" hash="46909f781f699e14b389eed83b728433"/></dir></dir><file name="autoload.php" hash="05ed6c18a3ee3f523c242312de048eef"/></dir><dir name="controllers"><dir name="Pixlee"><file name="ExportController.php" hash="48eb932a2089646258d6b5ad6f744a5b"/></dir></dir><dir name="etc"><file name="config.xml" hash="45c1f57cae7589c9b9cf178a8316a15e"/><file name="system.xml" hash="07b4c9d8fb738e7a954d9c6e3ea15129"/></dir><dir name="sql"><dir name="pixlee_base_setup"><file name="mysql4-install-1.0.0.php" hash="219da3718bcbf86509c6be9609dd3ebb"/></dir></dir><file name="version.txt" hash="d925555f64cc9ab9d72f8702547e468d"/></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><dir name="pixlee"><file name="base.xml" hash="e0fb83dce0f81138137a5d320de1dd96"/></dir></dir><dir name="template"><dir name="pixlee"><dir name="system"><dir name="config"><file name="export_button.phtml" hash="cbd180213a7c271bbf7b99ce8278764d"/></dir></dir></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><dir name="pixlee"><file name="gallery.xml" hash="4b8d94d02025fb4ecf5f32d554e5492f"/></dir></dir><dir name="template"><dir name="pixlee"><file name="gallery.phtml" hash="5c3bfd7f33ed99585d7bb7500aab05d3"/></dir></dir></dir></dir></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="pixlee"><file name="base.css" hash="22234fd8f1606d2d8a440d9a037c7fe4"/><file name="pixlee_logo_133x24.png" hash="af22b06f1fbffc0cf9e640926e59b736"/></dir></dir></dir></dir></target><target name="magelib"><dir name="Pixlee"><file name="Pixlee.php" hash="de26fabb97c19ce7aa79ac429fcf1506"/></dir></target></contents>
56
- <compatible/>
57
- <dependencies><required><php><min>5.2.0</min><max>5.6.10</max></php></required></dependencies>
58
- </package>
1
  <?xml version="1.0"?>
2
+ <package><name>Pixlee_Base</name><version>2.0.0.3</version><stability>stable</stability><license>MITL</license><channel>community</channel><extends></extends><summary>Pixlee extension to export products and capture cart events.</summary><description>This extension updates Pixlee's albums and products automatically with products created within Magento. Also, after setup, allows tracking of cart analytics.</description><notes>First requires configuration in System &gt; Configuration &gt; Pixlee Account Configuration.</notes><authors><author><name>Awad Sayeed</name><user>Pixlee</user><email>awad@pixleeteam.com</email></author></authors><date>2016-03-24</date><time>14:30:05</time><compatible></compatible><dependencies><required><php><min>5.2.0</min><max>5.6.10</max></php></required></dependencies><contents><target name="mage"><dir name="skin"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="pixlee"><file name="base.css" hash="22234fd8f1606d2d8a440d9a037c7fe4"/><file name="pixlee_logo_133x24.png" hash="af22b06f1fbffc0cf9e640926e59b736"/></dir></dir></dir></dir></dir><dir name="lib"><dir name="Pixlee"><file name="Pixlee.php" hash="cc25da72b40fca1df3e905e7cce626f4"/></dir></dir><dir name="app"><dir name="etc"><dir name="modules"><file name="Pixlee_Base.xml" hash="d61d4914e77a6f00ecad4d1c08a69c01"/></dir></dir><dir name="design"><dir name="frontend"><dir name="base"><dir name="default"><dir name="template"><dir name="pixlee"><file name="gallery.phtml" hash="5c3bfd7f33ed99585d7bb7500aab05d3"/></dir></dir><dir name="layout"><dir name="pixlee"><file name="gallery.xml" hash="6e7d730b61aada25d5d07c015dd2b7cc"/></dir></dir></dir></dir></dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="template"><dir name="pixlee"><dir name="system"><dir name="config"><file name="export_button.phtml" hash="cbd180213a7c271bbf7b99ce8278764d"/></dir></dir></dir></dir><dir name="layout"><dir name="pixlee"><file name="base.xml" hash="e0fb83dce0f81138137a5d320de1dd96"/></dir></dir></dir></dir></dir></dir><dir name="code"><dir name="community"><dir name="Pixlee"><dir name="Base"><file name="version.txt" hash="07c616195cb098893f6566357e031a15"/><dir name="etc"><file name="config.xml" hash="b777d966e0210846f8cbff579d884e69"/><file name="system.xml" hash="07b4c9d8fb738e7a954d9c6e3ea15129"/></dir><dir name="sql"><dir name="pixlee_base_setup"><file name="mysql4-install-1.0.0.php" hash="219da3718bcbf86509c6be9609dd3ebb"/></dir></dir><dir name="Helper"><file name="Data.php" hash="f09499f47501983b16b2b9125f11fd05"/></dir><dir name="controllers"><dir name="Pixlee"><file name="ExportController.php" hash="48eb932a2089646258d6b5ad6f744a5b"/></dir></dir><dir name="Block"><file name="Gallery.php" hash="aa893b2190f3fd683432dc4d16e3870f"/><dir name="Adminhtml"><dir name="System"><dir name="Config"><dir name="Form"><file name="Export.php" hash="a86d00b5a2e312a5bfdd856fd9ede257"/></dir></dir></dir></dir></dir><dir name="Model"><file name="Observer.php" hash="78b723dcf1a8719d8e08bb0e73ee6b4c"/><dir name="Resource"><file name="Setup.php" hash="a4f0721d4b19d19290e4999ef7ad327f"/><dir name="Product"><file name="Album.php" hash="a7f1e58ac017f183a2d1620d35645342"/></dir></dir><dir name="Product"><file name="Album.php" hash="1b415ff13e6fc9403e1149b327f9acb9"/></dir></dir><dir name="Test"><file name="autoload.php" hash="05ed6c18a3ee3f523c242312de048eef"/><dir name="Helper"><file name="Data.php" hash="97b4546146d750033aed7c6855ea6327"/><dir name="fixtures"><file name="testGetUnexportedProducts.yaml" hash="9575424d3b1061d07181a8e9b2aaa6f4"/><file name="testIsActive.yaml" hash="9d0b9138d8b919f203b9534585ea83ec"/><file name="testIsInactive.yaml" hash="630d629b1482583c5e250f6eed8769af"/></dir></dir></dir></dir></dir></dir></dir></dir><dir name="js"><dir name="pixlee"><file name="getAnalyticsCookie.js" hash="665ec62a65d6a0762f676de8909685d5"/></dir></dir></target></contents></package>