Facebook_Ads_Toolbox - Version 2.1.6

Version Notes

- Fix currency format issue.
- Fix products in all caps not importing.
- Enforce UTF-8 in product feed.
- Fix product images not appearing for some stores.
- Fix product prices importing as 0 for some stores.

Download this release

Release Info

Developer Jordan Rogers-Smith
Extension Facebook_Ads_Toolbox
Version 2.1.6
Comparing to
See all releases


Code changes from version 2.1.5 to 2.1.6

app/code/community/Facebook/AdsToolbox/Block/Adminhtml/Diaindex.php CHANGED
@@ -42,7 +42,7 @@ class Facebook_AdsToolbox_Block_Adminhtml_Diaindex
42
  }
43
 
44
  public function fetchStoreName() {
45
- return $this->getPixelindex()->fetchStoreName();
46
  }
47
 
48
  public function fetchStoreTimezone() {
@@ -122,4 +122,16 @@ class Facebook_AdsToolbox_Block_Adminhtml_Diaindex
122
  }
123
  return false;
124
  }
 
 
 
 
 
 
 
 
 
 
 
 
125
  }
42
  }
43
 
44
  public function fetchStoreName() {
45
+ return FacebookAdsToolbox::getStoreName();
46
  }
47
 
48
  public function fetchStoreTimezone() {
122
  }
123
  return false;
124
  }
125
+
126
+ public function getModuleList() {
127
+ $modules = Mage::getConfig()->getNode('modules')->children();
128
+ $simple_module_list = array();
129
+ foreach ($modules as $moduleName => $moduleSettings) {
130
+ $active = $moduleSettings->is('active') ? "active" : "disabled";
131
+ $version_key = 'version';
132
+ $module = $moduleName . ", " . $active . ", " . $moduleSettings->$version_key;
133
+ array_push($simple_module_list, $module);
134
+ }
135
+ return implode('; ', $simple_module_list);
136
+ }
137
  }
app/code/community/Facebook/AdsToolbox/Block/Adminhtml/Pixelindex.php CHANGED
@@ -23,17 +23,9 @@ class Facebook_AdsToolbox_Block_Adminhtml_Pixelindex
23
  }
24
 
25
  public function fetchStoreName() {
26
- // In order to fetch the actual website store name not the default 'Admin'
27
- // store, we have to do this. -StackOverflow
28
- $frontendName = Mage::app()->getStore()->getFrontendName();
29
- $homePageTitle = Mage::getModel('cms/page')->load('home','identifier')->getTitle();
30
- $defaultStoreId = Mage::app()->getWebsite(true)->getDefaultGroup()->getDefaultStoreId();
31
- $defaultStoreName = Mage::getModel('core/store')->load($defaultStoreId)->getGroup()->getName();
32
- return $frontendName . ' ; ' . $homePageTitle . ' ; ' . $defaultStoreName;
33
  }
34
 
35
-
36
-
37
  public function fetchTimezone() {
38
  return $this->determineFbTimeZone(
39
  Mage::getStoreConfig('general/locale/timezone')
23
  }
24
 
25
  public function fetchStoreName() {
26
+ FacebookAdsToolbox::getStoreName();
 
 
 
 
 
 
27
  }
28
 
 
 
29
  public function fetchTimezone() {
30
  return $this->determineFbTimeZone(
31
  Mage::getStoreConfig('general/locale/timezone')
app/code/community/Facebook/AdsToolbox/Model/FacebookProductFeed.php CHANGED
@@ -53,7 +53,11 @@ class FacebookProductFeed {
53
  }
54
 
55
  protected function defaultBrand() {
56
- return $this->buildProductAttr(self::ATTR_BRAND, 'original');
 
 
 
 
57
  }
58
 
59
  protected function defaultCondition() {
@@ -110,7 +114,7 @@ class FacebookProductFeed {
110
  $attr_value = substr($attr_value, 0, 5000);
111
  }
112
  // description can't be all uppercase
113
- //$attr_value = $this->uppercaseFirstOnlyIfAllCaps($attr_value);
114
  return $escapefn ? $this->$escapefn($attr_value) : $attr_value;
115
  }
116
  break;
@@ -180,16 +184,15 @@ class FacebookProductFeed {
180
  $items[self::ATTR_LINK] = $this->buildProductAttr(self::ATTR_LINK,
181
  FacebookAdsToolbox::getBaseUrl().
182
  $product->getUrlPath());
183
- $items[self::ATTR_IMAGE_LINK] = $this->buildProductAttr(self::ATTR_IMAGE_LINK,
184
- FacebookAdsToolbox::getBaseUrlMedia().
185
- 'catalog/product'.$product->getImage());
 
186
 
187
  $brand = null;
188
- if ($product->getData('brand')) {
189
- $brand = $this->buildProductAttr(self::ATTR_BRAND, $product->getAttributeText('brand'));
190
- }
191
- if (!$brand && $product->getData('manufacturer')) {
192
- $brand = $this->buildProductAttr(self::ATTR_BRAND, $product->getAttributeText('manufacturer'));
193
  }
194
  $items[self::ATTR_BRAND] = ($brand) ? $brand : $this->defaultBrand();
195
 
@@ -200,13 +203,18 @@ class FacebookProductFeed {
200
  $items[self::ATTR_CONDITION] = ($this->isValidCondition($condition)) ? $condition : $this->defaultCondition();
201
 
202
  $items[self::ATTR_AVAILABILITY] = $this->buildProductAttr(self::ATTR_AVAILABILITY,
203
- $stock->getData('is_in_stock') ? 'in stock' : 'out of stock');
 
 
 
 
 
 
 
 
204
  $items[self::ATTR_PRICE] = $this->buildProductAttr('price',
205
  sprintf('%s %s',
206
- Mage::getModel('directory/currency')->format(
207
- $product->getFinalPrice(),
208
- array('display'=>Zend_Currency::NO_SYMBOL),
209
- false),
210
  Mage::app()->getStore()->getDefaultCurrencyCode()));
211
 
212
  $items[self::ATTR_SHORT_DESCRIPTION] = $this->buildProductAttr(self::ATTR_SHORT_DESCRIPTION,
@@ -252,6 +260,13 @@ class FacebookProductFeed {
252
  private function writeProducts($io, $total_number_of_products, $should_log) {
253
  $count = 0;
254
  $batch_max = 100;
 
 
 
 
 
 
 
255
  while ($count < $total_number_of_products) {
256
  if ($should_log) {
257
  self::log(
@@ -388,8 +403,8 @@ class FacebookProductFeed {
388
  }
389
 
390
  private function uppercaseFirstOnlyIfAllCaps($string) {
391
- // if contains non-western characters, it can't be all uppercase
392
- if (!preg_match('/[^\\p{Common}\\p{Latin}]/u', $string)) {
393
  $latin_string = preg_replace('/[^\\p{Latin}]/u', '', $string);
394
  if ($latin_string !== '' &&
395
  mb_strtoupper($latin_string, 'utf-8') === $latin_string) {
@@ -398,4 +413,70 @@ class FacebookProductFeed {
398
  }
399
  return $string;
400
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
401
  }
53
  }
54
 
55
  protected function defaultBrand() {
56
+ if (!isset($this->defaultBrand)) {
57
+ $this->defaultBrand =
58
+ $this->buildProductAttr(self::ATTR_BRAND, FacebookAdsToolbox::getStoreName());
59
+ }
60
+ return $this->defaultBrand;
61
  }
62
 
63
  protected function defaultCondition() {
114
  $attr_value = substr($attr_value, 0, 5000);
115
  }
116
  // description can't be all uppercase
117
+ $attr_value = $this->uppercaseFirstOnlyIfAllCaps($attr_value);
118
  return $escapefn ? $this->$escapefn($attr_value) : $attr_value;
119
  }
120
  break;
184
  $items[self::ATTR_LINK] = $this->buildProductAttr(self::ATTR_LINK,
185
  FacebookAdsToolbox::getBaseUrl().
186
  $product->getUrlPath());
187
+
188
+ $items[self::ATTR_IMAGE_LINK] = $this->buildProductAttr(
189
+ self::ATTR_IMAGE_LINK,
190
+ $this->getImageURL($product));
191
 
192
  $brand = null;
193
+ $brand = $this->getCorrectText($product, self::ATTR_BRAND, 'brand');
194
+ if (!$brand) {
195
+ $brand = $this->getCorrectText($product, self::ATTR_BRAND, 'manufacturer');
 
 
196
  }
197
  $items[self::ATTR_BRAND] = ($brand) ? $brand : $this->defaultBrand();
198
 
203
  $items[self::ATTR_CONDITION] = ($this->isValidCondition($condition)) ? $condition : $this->defaultCondition();
204
 
205
  $items[self::ATTR_AVAILABILITY] = $this->buildProductAttr(self::ATTR_AVAILABILITY,
206
+ $stock->getIsInStock() ? 'in stock' : 'out of stock');
207
+
208
+ $price = Mage::getModel('directory/currency')->format(
209
+ $this->getUpdatedPriceForConfigurableProduct($product),
210
+ array('display'=>Zend_Currency::NO_SYMBOL),
211
+ false);
212
+ if ($this->conversion_needed) {
213
+ $price = $this->convertCurrency($price);
214
+ }
215
  $items[self::ATTR_PRICE] = $this->buildProductAttr('price',
216
  sprintf('%s %s',
217
+ $price,
 
 
 
218
  Mage::app()->getStore()->getDefaultCurrencyCode()));
219
 
220
  $items[self::ATTR_SHORT_DESCRIPTION] = $this->buildProductAttr(self::ATTR_SHORT_DESCRIPTION,
260
  private function writeProducts($io, $total_number_of_products, $should_log) {
261
  $count = 0;
262
  $batch_max = 100;
263
+
264
+ $locale_code = Mage::app()->getLocale()->getLocaleCode();
265
+ $symbols = Zend_Locale_Data::getList($locale_code, 'symbols');
266
+ $this->group_separator = $symbols['group'];
267
+ $this->decimal_separator = $symbols['decimal'];
268
+ $this->conversion_needed = $this->isCurrencyConversionNeeded();
269
+
270
  while ($count < $total_number_of_products) {
271
  if ($should_log) {
272
  self::log(
403
  }
404
 
405
  private function uppercaseFirstOnlyIfAllCaps($string) {
406
+ // if contains lowercase or non-western characters, don't update string
407
+ if (!preg_match('/[a-z]/', $string) && !preg_match('/[^\\p{Common}\\p{Latin}]/u', $string)) {
408
  $latin_string = preg_replace('/[^\\p{Latin}]/u', '', $string);
409
  if ($latin_string !== '' &&
410
  mb_strtoupper($latin_string, 'utf-8') === $latin_string) {
413
  }
414
  return $string;
415
  }
416
+
417
+ private function getCorrectText($product, $column, $attribute) {
418
+ if ($product->getData($attribute)) {
419
+ $text = $this->buildProductAttr($column, $product->getAttributeText($attribute));
420
+ if (!$text) {
421
+ $text = $this->buildProductAttr($column, $product->getData($attribute));
422
+ }
423
+ return $text;
424
+ }
425
+ return null;
426
+ }
427
+
428
+ private function isCurrencyConversionNeeded() {
429
+ if ($this->group_separator !== ',' && $this->group_separator !== '.') {
430
+ return true;
431
+ } else if ($this->decimal_separator !== ',' &&
432
+ $this->decimal_separator !== '.') {
433
+ return true;
434
+ } else {
435
+ return false;
436
+ }
437
+ }
438
+
439
+ private function convertCurrency($price) {
440
+ $price = str_replace($this->group_separator, '', $price);
441
+ $price = str_replace($this->decimal_separator, '.', $price);
442
+ return $price;
443
+ }
444
+
445
+ private function getImageURL($product) {
446
+ $image_url = null;
447
+ $image = $product->getImage();
448
+ if (!$image || $image === '' || $image === 'no_selection') {
449
+ $product->load('media_gallery');
450
+ $gal = $product->getMediaGalleryImages();
451
+ if ($gal) {
452
+ foreach ($gal as $gal_image) {
453
+ if ($gal_image['url'] && $gal_image['url'] !== '') {
454
+ $image_url = $gal_image['url'];
455
+ break;
456
+ }
457
+ }
458
+ }
459
+ }
460
+ if (!$image_url) {
461
+ $image_url = FacebookAdsToolbox::getBaseUrlMedia().'catalog/product'.$image;
462
+ }
463
+ return $image_url;
464
+ }
465
+
466
+ private function getUpdatedPriceForConfigurableProduct($product) {
467
+ if ($product->getTypeId() === 'configurable') {
468
+ if ($product->getFinalPrice() === 0) {
469
+ $configurable = Mage::getModel('catalog/product_type_configurable')
470
+ ->setProduct($product);
471
+ $simpleCollection = $configurable->getUsedProductCollection()
472
+ ->addAttributeToSelect('price')->addFilterByRequiredOptions();
473
+ foreach ($simpleCollection as $simpleProduct) {
474
+ if ($simpleProduct->getPrice() > 0) {
475
+ return $simpleProduct->getPrice();
476
+ }
477
+ }
478
+ }
479
+ }
480
+ return $product->getFinalPrice();
481
+ }
482
  }
app/code/community/Facebook/AdsToolbox/Model/FacebookProductFeedSamples.php CHANGED
@@ -16,6 +16,7 @@ class FacebookProductFeedSamples extends FacebookProductFeed {
16
 
17
  public function generate() {
18
  $MAX = 12;
 
19
 
20
  $results = array();
21
 
16
 
17
  public function generate() {
18
  $MAX = 12;
19
+ $this->conversion_needed = false;
20
 
21
  $results = array();
22
 
app/code/community/Facebook/AdsToolbox/Model/FacebookProductFeedTSV.php CHANGED
@@ -30,10 +30,6 @@ class FacebookProductFeedTSV extends FacebookProductFeed {
30
  return $this->buildProductAttrText($attr_name, $attr_value, 'tsvescape');
31
  }
32
 
33
- protected function defaultBrand() {
34
- return 'original';
35
- }
36
-
37
  protected function defaultCondition() {
38
  return 'new';
39
  }
30
  return $this->buildProductAttrText($attr_name, $attr_value, 'tsvescape');
31
  }
32
 
 
 
 
 
33
  protected function defaultCondition() {
34
  return 'new';
35
  }
app/code/community/Facebook/AdsToolbox/etc/config.xml CHANGED
@@ -2,7 +2,7 @@
2
  <config>
3
  <modules>
4
  <Facebook_AdsToolbox>
5
- <version>2.1.5</version>
6
  </Facebook_AdsToolbox>
7
  </modules>
8
  <global>
2
  <config>
3
  <modules>
4
  <Facebook_AdsToolbox>
5
+ <version>2.1.6</version>
6
  </Facebook_AdsToolbox>
7
  </modules>
8
  <global>
app/code/community/Facebook/AdsToolbox/lib/fb.php CHANGED
@@ -77,6 +77,19 @@ class FacebookAdsToolbox {
77
  return $debug_key;
78
  }
79
 
 
 
 
 
 
 
 
 
 
 
 
 
 
80
  public static $fbTimezones = array(
81
  "africa_accra" => 59,
82
  "africa_cairo" => 53,
77
  return $debug_key;
78
  }
79
 
80
+ public static function getStoreName() {
81
+ $frontendName = Mage::app()->getStore()->getFrontendName();
82
+ if ($frontendName !== 'Default') {
83
+ return $frontendName;
84
+ }
85
+ $defaultStoreId = Mage::app()->getWebsite(true)->getDefaultGroup()->getDefaultStoreId();
86
+ $defaultStoreName = Mage::getModel('core/store')->load($defaultStoreId)->getGroup()->getName();
87
+ if ($defaultStoreName !== 'Main Website Store' && $defaultStoreName !== 'Main Store') {
88
+ return $defaultStoreName;
89
+ }
90
+ return 'Original';
91
+ }
92
+
93
  public static $fbTimezones = array(
94
  "africa_accra" => 59,
95
  "africa_cairo" => 53,
app/design/adminhtml/default/default/template/facebookadstoolbox/dia_index.phtml CHANGED
@@ -15,12 +15,13 @@ window.facebookAdsToolboxConfig = {
15
  ,version: '<?php echo FacebookAdsToolbox::getMagentoVersion() ?>'
16
  ,plugin_version: '<?php echo FacebookAdsToolbox::version() ?>'
17
  ,debug_key: '<?php echo FacebookAdsToolbox::getDebugKey() ?>'
 
18
  }
19
  ,feed: {
20
  enabled: <?php echo $this->fetchFeedSetupEnabled() === 1 ? 'true' : 'false' ?>
21
  ,format: '<?php echo $this->fetchFeedSetupFormat() ?>'
22
  ,totalVisibleProducts: <?php echo $this->getTotalVisibleProducts() ?>
23
- }
24
  <?php if ($this->getDiaSettingId() != null) { ?>
25
  ,diaSettingId: <?php echo $this->getDiaSettingId() ?>
26
  <?php } else { ?>
15
  ,version: '<?php echo FacebookAdsToolbox::getMagentoVersion() ?>'
16
  ,plugin_version: '<?php echo FacebookAdsToolbox::version() ?>'
17
  ,debug_key: '<?php echo FacebookAdsToolbox::getDebugKey() ?>'
18
+ ,modules: '<?php echo $this->getModuleList() ?>'
19
  }
20
  ,feed: {
21
  enabled: <?php echo $this->fetchFeedSetupEnabled() === 1 ? 'true' : 'false' ?>
22
  ,format: '<?php echo $this->fetchFeedSetupFormat() ?>'
23
  ,totalVisibleProducts: <?php echo $this->getTotalVisibleProducts() ?>
24
+ }
25
  <?php if ($this->getDiaSettingId() != null) { ?>
26
  ,diaSettingId: <?php echo $this->getDiaSettingId() ?>
27
  <?php } else { ?>
package.xml CHANGED
@@ -1,7 +1,7 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Facebook_Ads_Toolbox</name>
4
- <version>2.1.5</version>
5
  <stability>stable</stability>
6
  <license uri="https://raw.githubusercontent.com/fbsamples/audience-network-support/master/LICENSE">Facebook License</license>
7
  <channel>community</channel>
@@ -59,13 +59,15 @@ _Installation Instructions_&#xD;
59
  &#xD;
60
  Additional FAQ&#xD;
61
  https://www.facebook.com/help/532749253576163</description>
62
- <notes>- Fix 'Connection Failed' issues for some stores.&#xD;
63
- - Fix 'Mage registry key already exists' issues.&#xD;
64
- - Fix caching issues preventing feed generation for some stores.</notes>
 
 
65
  <authors><author><name>Jordan Rogers-Smith</name><user>jordanrs</user><email>jordanrs@fb.com</email></author><author><name>Yu Li</name><user>liyuhk</user><email>liyuhk@fb.com</email></author><author><name>Dmitri Dranishnikov</name><user>dmitrid</user><email>dmitrid@fb.com</email></author></authors>
66
- <date>2016-10-04</date>
67
- <time>01:57:16</time>
68
- <contents><target name="magecommunity"><dir name="Facebook"><dir name="AdsToolbox"><dir><dir name="Block"><file name="AddToCart.php" hash="0bb7985b9079b8e70585aea350dc1524"/><dir name="Adminhtml"><file name="Diaindex.php" hash="fcb051385a285bb7268935d0b4d4aa49"/><file name="Feedindex.php" hash="f08548f1c321e70fb4bebdf5fa6acc37"/><file name="Pixelindex.php" hash="2dfa0149be7b17c9e24704747ee6af47"/></dir><file name="Head.php" hash="eb5ee970cfb6873b9def860232089460"/><file name="InitiateCheckout.php" hash="c47ed5209bed0ae4dbad120be1ba13b3"/><file name="Purchase.php" hash="0c65646369b87e6c818da4f3fdc0e155"/><file name="Search.php" hash="d8acaa72da8ca3df2146949276a3714d"/><file name="ViewCategory.php" hash="36e19e8ff10acbc862420ac8dc39fd05"/><file name="ViewContent.php" hash="38ced65dd84888045e3ef9f189124d0a"/><file name="common.php" hash="ed0e2a1dc8c84138dc6c728b2d428054"/></dir><dir name="Helper"><file name="Data.php" hash="09da04dbb30d6de8b7a873f0447456ba"/></dir><dir name="Model"><file name="FacebookProductFeed.php" hash="e21a88d6d32515533f562527299d534f"/><file name="FacebookProductFeedSamples.php" hash="dd521346db85be6268605dce574d70c1"/><file name="FacebookProductFeedTSV.php" hash="574e25925a8ffd023b575c239d552a3b"/><file name="FacebookProductFeedXML.php" hash="f62f7630ffd1f34b5a062855da62865f"/><file name="Observer.php" hash="6ba9ee34820ad5b86480fba72a540310"/></dir><dir name="controllers"><dir name="Adminhtml"><file name="FbfeedController.php" hash="a55045c8ad914584490d36f1410b0051"/><file name="FbfeedlogController.php" hash="34938878c691842a71f4f788c0b5cfee"/><file name="FbmainController.php" hash="b952bf87ca7b49a2b1fb256025e39331"/><file name="FbpixelController.php" hash="f00c250878671e6e4957239ddd952476"/><file name="FbregenController.php" hash="1837e42c7e6d4d9c77bb386732d08e28"/></dir><file name="DebugController.php" hash="cf3aa8f25e7c4301de9f5f908fca40e5"/><file name="ProductfeedController.php" hash="c9aedcb0b2d7d3ee66272fea143e8fd2"/></dir><dir name="etc"><file name="adminhtml.xml" hash="be7e9a1dfc20ca73654c8e4ac557e4c9"/><file name="config.xml" hash="3c4fa1d70b66335fca301ffd12e88917"/></dir><dir name="lib"><file name="fb.php" hash="00034f813eb9c1679232ec5e0e7b9d22"/></dir></dir><file name="LICENSE" hash="4e3837b373e2371aeb3317bc8d245ad6"/><file name="PATENTS" hash="7eb20d51ce76c08c2e6c939674e75c93"/></dir></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="facebookadstoolbox.xml" hash="cd8d60f293f5d1b5925efe01c7e48af7"/></dir><dir name="template"><dir name="facebookadstoolbox"><file name="addtocart.phtml" hash="cffaf57c6b633e1c5641783f08769726"/><file name="head.phtml" hash="217c676e9f1893f17073904a62796016"/><file name="initiate_checkout.phtml" hash="0f57840eef0477538b211d63d6c6d3b5"/><file name="purchase.phtml" hash="278c3819865a6a8ef3c03cb1189e4a4c"/><file name="search.phtml" hash="a67005ea51ae63b225cb598cf9152014"/><file name="viewcategory.phtml" hash="c56f37ab17654b53ace6180903900cf3"/><file name="viewcontent.phtml" hash="ebf7844a601511d85135cfaf623a9bc1"/></dir></dir></dir></dir></dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="facebookadstoolbox.xml" hash="5974bb612e16c7b7eff07ef06eddebda"/></dir><dir name="template"><dir name="facebookadstoolbox"><file name="dia_index.phtml" hash="a76da427d9f704ae7af6924633e3b2e4"/><file name="feed_index.phtml" hash="157e56ef40e56378bcd07284162fb439"/><file name="pixel_index.phtml" hash="0b8e1171703bfb27ce5c768c6e79dc81"/></dir></dir></dir></dir></dir></target><target name="mageweb"><dir name="js"><dir name="Facebook"><dir name="AdsToolbox"><dir><dir name="Adminhtml"><file name="dia.js" hash="eee4506b93da5703034f2b9f405d82b3"/><file name="feed.js" hash="134fbbb334e0d2422b77435dc105ebf5"/><dir name="lib"><file name="react-dom.min.js" hash="80dd76fff4872e658666dec43913360c"/><file name="react.min.js" hash="c3207f7bf39699d4279ba404ea55f163"/></dir><file name="pixel.js" hash="916afd85272d48e3b34c8f2a9f4db38a"/></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Facebook_AdsToolbox.xml" hash="164bc795b6911c5b0a6ca357a56f38cc"/></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="base"><dir name="default"><dir name="Facebook"><dir name="AdsToolbox"><dir><dir name="css"><dir name="Adminhtml"><file name="dia.css" hash="201b2a78305d44d6eeebbf67231e7767"/><file name="feed.css" hash="2763caa9c8f3b9b21f85a59915d39157"/><file name="pixel.css" hash="8b143487fcc4a902c0e44de8e2af6eef"/></dir></dir><dir name="images"><dir name="Adminhtml"><file name="buttonbg.png" hash="09adbacda0d592a215277230c48df285"/><file name="fbicons.png" hash="8f1b559a279a3785f1b2492a79f518d8"/></dir></dir></dir></dir></dir></dir></dir></dir></target></contents>
69
  <compatible/>
70
  <dependencies><required><php><min>5.3.0</min><max>8.0.0</max></php></required></dependencies>
71
  </package>
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Facebook_Ads_Toolbox</name>
4
+ <version>2.1.6</version>
5
  <stability>stable</stability>
6
  <license uri="https://raw.githubusercontent.com/fbsamples/audience-network-support/master/LICENSE">Facebook License</license>
7
  <channel>community</channel>
59
  &#xD;
60
  Additional FAQ&#xD;
61
  https://www.facebook.com/help/532749253576163</description>
62
+ <notes>- Fix currency format issue.&#xD;
63
+ - Fix products in all caps not importing.&#xD;
64
+ - Enforce UTF-8 in product feed.&#xD;
65
+ - Fix product images not appearing for some stores.&#xD;
66
+ - Fix product prices importing as 0 for some stores.</notes>
67
  <authors><author><name>Jordan Rogers-Smith</name><user>jordanrs</user><email>jordanrs@fb.com</email></author><author><name>Yu Li</name><user>liyuhk</user><email>liyuhk@fb.com</email></author><author><name>Dmitri Dranishnikov</name><user>dmitrid</user><email>dmitrid@fb.com</email></author></authors>
68
+ <date>2016-10-07</date>
69
+ <time>01:09:44</time>
70
+ <contents><target name="magecommunity"><dir name="Facebook"><dir name="AdsToolbox"><dir><dir name="Block"><file name="AddToCart.php" hash="0bb7985b9079b8e70585aea350dc1524"/><dir name="Adminhtml"><file name="Diaindex.php" hash="2a2cb521b88a48213938aee0d49d96ab"/><file name="Feedindex.php" hash="f08548f1c321e70fb4bebdf5fa6acc37"/><file name="Pixelindex.php" hash="ed25472f13e9dd8ec7e8c7f3378a198b"/></dir><file name="Head.php" hash="eb5ee970cfb6873b9def860232089460"/><file name="InitiateCheckout.php" hash="c47ed5209bed0ae4dbad120be1ba13b3"/><file name="Purchase.php" hash="0c65646369b87e6c818da4f3fdc0e155"/><file name="Search.php" hash="d8acaa72da8ca3df2146949276a3714d"/><file name="ViewCategory.php" hash="36e19e8ff10acbc862420ac8dc39fd05"/><file name="ViewContent.php" hash="38ced65dd84888045e3ef9f189124d0a"/><file name="common.php" hash="ed0e2a1dc8c84138dc6c728b2d428054"/></dir><dir name="Helper"><file name="Data.php" hash="09da04dbb30d6de8b7a873f0447456ba"/></dir><dir name="Model"><file name="FacebookProductFeed.php" hash="79602c9afe63954226d83317f166d2cc"/><file name="FacebookProductFeedSamples.php" hash="b79a1a2f4c857e2ed7b4971c3395406f"/><file name="FacebookProductFeedTSV.php" hash="acc22ecb0ba66117337a7250e1b2a940"/><file name="FacebookProductFeedXML.php" hash="f62f7630ffd1f34b5a062855da62865f"/><file name="Observer.php" hash="6ba9ee34820ad5b86480fba72a540310"/></dir><dir name="controllers"><dir name="Adminhtml"><file name="FbfeedController.php" hash="a55045c8ad914584490d36f1410b0051"/><file name="FbfeedlogController.php" hash="34938878c691842a71f4f788c0b5cfee"/><file name="FbmainController.php" hash="b952bf87ca7b49a2b1fb256025e39331"/><file name="FbpixelController.php" hash="f00c250878671e6e4957239ddd952476"/><file name="FbregenController.php" hash="1837e42c7e6d4d9c77bb386732d08e28"/></dir><file name="DebugController.php" hash="cf3aa8f25e7c4301de9f5f908fca40e5"/><file name="ProductfeedController.php" hash="c9aedcb0b2d7d3ee66272fea143e8fd2"/></dir><dir name="etc"><file name="adminhtml.xml" hash="be7e9a1dfc20ca73654c8e4ac557e4c9"/><file name="config.xml" hash="de549b31c7e00bbb57ab6488919ca9c6"/></dir><dir name="lib"><file name="fb.php" hash="6ad2bc6155b4539c9e917a70fb009950"/></dir></dir><file name="LICENSE" hash="4e3837b373e2371aeb3317bc8d245ad6"/><file name="PATENTS" hash="7eb20d51ce76c08c2e6c939674e75c93"/></dir></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="facebookadstoolbox.xml" hash="cd8d60f293f5d1b5925efe01c7e48af7"/></dir><dir name="template"><dir name="facebookadstoolbox"><file name="addtocart.phtml" hash="cffaf57c6b633e1c5641783f08769726"/><file name="head.phtml" hash="217c676e9f1893f17073904a62796016"/><file name="initiate_checkout.phtml" hash="0f57840eef0477538b211d63d6c6d3b5"/><file name="purchase.phtml" hash="278c3819865a6a8ef3c03cb1189e4a4c"/><file name="search.phtml" hash="a67005ea51ae63b225cb598cf9152014"/><file name="viewcategory.phtml" hash="c56f37ab17654b53ace6180903900cf3"/><file name="viewcontent.phtml" hash="ebf7844a601511d85135cfaf623a9bc1"/></dir></dir></dir></dir></dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="facebookadstoolbox.xml" hash="5974bb612e16c7b7eff07ef06eddebda"/></dir><dir name="template"><dir name="facebookadstoolbox"><file name="dia_index.phtml" hash="839af71b1454571a41243e24cecc84ec"/><file name="feed_index.phtml" hash="157e56ef40e56378bcd07284162fb439"/><file name="pixel_index.phtml" hash="0b8e1171703bfb27ce5c768c6e79dc81"/></dir></dir></dir></dir></dir></target><target name="mageweb"><dir name="js"><dir name="Facebook"><dir name="AdsToolbox"><dir><dir name="Adminhtml"><file name="dia.js" hash="eee4506b93da5703034f2b9f405d82b3"/><file name="feed.js" hash="134fbbb334e0d2422b77435dc105ebf5"/><dir name="lib"><file name="react-dom.min.js" hash="80dd76fff4872e658666dec43913360c"/><file name="react.min.js" hash="c3207f7bf39699d4279ba404ea55f163"/></dir><file name="pixel.js" hash="916afd85272d48e3b34c8f2a9f4db38a"/></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Facebook_AdsToolbox.xml" hash="164bc795b6911c5b0a6ca357a56f38cc"/></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="base"><dir name="default"><dir name="Facebook"><dir name="AdsToolbox"><dir><dir name="css"><dir name="Adminhtml"><file name="dia.css" hash="201b2a78305d44d6eeebbf67231e7767"/><file name="feed.css" hash="2763caa9c8f3b9b21f85a59915d39157"/><file name="pixel.css" hash="8b143487fcc4a902c0e44de8e2af6eef"/></dir></dir><dir name="images"><dir name="Adminhtml"><file name="buttonbg.png" hash="09adbacda0d592a215277230c48df285"/><file name="fbicons.png" hash="8f1b559a279a3785f1b2492a79f518d8"/></dir></dir></dir></dir></dir></dir></dir></dir></target></contents>
71
  <compatible/>
72
  <dependencies><required><php><min>5.3.0</min><max>8.0.0</max></php></required></dependencies>
73
  </package>