Facebook_Ads_Toolbox - Version 2.1.10

Version Notes

Product feed improvements:
- Fix gzip feed file not generating for some stores.
- Use base currency instead of default currency.
- Fix issues with capitalization for some stores.
- Don't include products that have no store page.
- Include Tax in the product price.

Download this release

Release Info

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


Code changes from version 2.1.9 to 2.1.10

app/code/community/Facebook/AdsToolbox/Model/FacebookProductFeed.php CHANGED
@@ -36,6 +36,12 @@ class FacebookProductFeed {
36
  Mage::log($info, Zend_Log::INFO, FacebookAdsToolbox::FEED_LOGFILE);
37
  }
38
 
 
 
 
 
 
 
39
  public static function getCurrentSetup() {
40
  return array(
41
  'format' => Mage::getStoreConfig(
@@ -114,8 +120,6 @@ class FacebookProductFeed {
114
  if (strlen($attr_value) > 5000) {
115
  $attr_value = substr($attr_value, 0, 5000);
116
  }
117
- // description can't be all uppercase
118
- $attr_value = $this->lowercaseIfAllCaps($attr_value);
119
  return $escapefn ? $this->$escapefn($attr_value) : $attr_value;
120
  }
121
  break;
@@ -190,7 +194,10 @@ class FacebookProductFeed {
190
  $product->getShortDescription()
191
  );
192
  }
 
193
  $items[self::ATTR_DESCRIPTION] = ($description) ? $description : $items[self::ATTR_TITLE];
 
 
194
 
195
  $items[self::ATTR_LINK] = $this->buildProductAttr(
196
  self::ATTR_LINK,
@@ -226,7 +233,7 @@ class FacebookProductFeed {
226
  $items[self::ATTR_PRICE] = $this->buildProductAttr('price',
227
  sprintf('%s %s',
228
  $this->stripCurrencySymbol($price),
229
- Mage::app()->getStore()->getDefaultCurrencyCode()));
230
 
231
  $items[self::ATTR_SHORT_DESCRIPTION] = $this->buildProductAttr(self::ATTR_SHORT_DESCRIPTION,
232
  $product->getShortDescription());
@@ -286,6 +293,8 @@ class FacebookProductFeed {
286
  $this->group_separator = $symbols['group'];
287
  $this->decimal_separator = $symbols['decimal'];
288
  $this->conversion_needed = $this->isCurrencyConversionNeeded();
 
 
289
 
290
  while ($count < $total_number_of_products) {
291
  if ($should_log) {
@@ -297,26 +306,44 @@ class FacebookProductFeed {
297
  $total_number_of_products :
298
  ($count + $batch_max)));
299
  }
 
300
  $products = Mage::getModel('catalog/product')->getCollection()
301
  ->addAttributeToSelect('*')
 
302
  ->setPageSize($batch_max)
303
  ->setCurPage($count / $batch_max + 1)
304
  ->addUrlRewrite();
305
 
306
- $store_id = FacebookAdsToolbox::getDefaultStoreId();
307
  foreach ($products as $product) {
308
  $product->setStoreId($store_id);
309
  if ($product->getVisibility() !=
310
  Mage_Catalog_Model_Product_Visibility::VISIBILITY_NOT_VISIBLE &&
311
  $product->getStatus() !=
312
  Mage_Catalog_Model_Product_Status::STATUS_DISABLED) {
313
- $e = $this->buildProductEntry($product);
314
- $io->streamWrite($e."\n");
 
 
 
 
 
 
 
 
 
 
 
 
 
315
  }
316
  }
317
  unset($products);
318
  $count += $batch_max;
319
  }
 
 
 
 
320
  }
321
 
322
  public function estimateGenerationTime() {
@@ -431,7 +458,7 @@ class FacebookProductFeed {
431
  $latin_string = preg_replace('/[^\\p{Latin}]/u', '', $string);
432
  if ($latin_string !== '' &&
433
  mb_strtoupper($latin_string, 'utf-8') === $latin_string) {
434
- return strtolower($string);
435
  }
436
  }
437
  return $string;
@@ -495,7 +522,7 @@ class FacebookProductFeed {
495
  case 'bundle':
496
  return $this->getBundleProductPrice($product);
497
  default:
498
- return $product->getFinalPrice();
499
  }
500
  }
501
 
@@ -507,11 +534,11 @@ class FacebookProductFeed {
507
  ->addAttributeToSelect('price')->addFilterByRequiredOptions();
508
  foreach ($simple_collection as $simple_product) {
509
  if ($simple_product->getPrice() > 0) {
510
- return $simple_product->getPrice();
511
  }
512
  }
513
  }
514
- return $product->getFinalPrice();
515
  }
516
 
517
  private function getBundleProductPrice($product) {
@@ -537,26 +564,39 @@ class FacebookProductFeed {
537
  foreach ($group as $item) {
538
  $item_price = $pm->getSelectionFinalTotalPrice($product, $item,
539
  $bundle_quantity, $selection_quantity);
 
540
  $min_price = min($min_price, $item_price);
541
  }
542
  $option_prices[] = $min_price;
543
  }
544
 
545
- return $product->getFinalPrice() + array_sum($option_prices);
546
  }
547
 
548
  private function getGroupedProductPrice($product) {
549
  $assoc_products = $product->getTypeInstance(true)
550
  ->getAssociatedProductCollection($product)
551
- ->addAttributeToSelect('price');
 
 
552
 
553
  $min_price = INF;
554
  foreach ($assoc_products as $assoc_product) {
555
- $min_price = min($min_price, $assoc_product->getPrice());
556
- }
557
  return $min_price;
558
  }
559
 
 
 
 
 
 
 
 
 
 
 
560
  private function stripCurrencySymbol($price) {
561
  if (!isset($this->currency_strip_needed)) {
562
  $this->currency_strip_needed = !preg_match('/^[0-9,.]*$/', $price);
36
  Mage::log($info, Zend_Log::INFO, FacebookAdsToolbox::FEED_LOGFILE);
37
  }
38
 
39
+ public static function logException($e) {
40
+ Mage::log($e->getMessage(), Zend_Log::DEBUG, FacebookAdsToolbox::FEED_EXCEPTION);
41
+ Mage::log($e->getTraceAsString(), Zend_Log::DEBUG, FacebookAdsToolbox::FEED_EXCEPTION);
42
+ Mage::log($e, Zend_Log::DEBUG, FacebookAdsToolbox::FEED_EXCEPTION);
43
+ }
44
+
45
  public static function getCurrentSetup() {
46
  return array(
47
  'format' => Mage::getStoreConfig(
120
  if (strlen($attr_value) > 5000) {
121
  $attr_value = substr($attr_value, 0, 5000);
122
  }
 
 
123
  return $escapefn ? $this->$escapefn($attr_value) : $attr_value;
124
  }
125
  break;
194
  $product->getShortDescription()
195
  );
196
  }
197
+
198
  $items[self::ATTR_DESCRIPTION] = ($description) ? $description : $items[self::ATTR_TITLE];
199
+ // description can't be all uppercase
200
+ $items[self::ATTR_DESCRIPTION] = $this->lowercaseIfAllCaps($items[self::ATTR_DESCRIPTION]);
201
 
202
  $items[self::ATTR_LINK] = $this->buildProductAttr(
203
  self::ATTR_LINK,
233
  $items[self::ATTR_PRICE] = $this->buildProductAttr('price',
234
  sprintf('%s %s',
235
  $this->stripCurrencySymbol($price),
236
+ Mage::app()->getStore()->getBaseCurrencyCode()));
237
 
238
  $items[self::ATTR_SHORT_DESCRIPTION] = $this->buildProductAttr(self::ATTR_SHORT_DESCRIPTION,
239
  $product->getShortDescription());
293
  $this->group_separator = $symbols['group'];
294
  $this->decimal_separator = $symbols['decimal'];
295
  $this->conversion_needed = $this->isCurrencyConversionNeeded();
296
+ $exception_count = 0;
297
+ $store_id = FacebookAdsToolbox::getDefaultStoreId();
298
 
299
  while ($count < $total_number_of_products) {
300
  if ($should_log) {
306
  $total_number_of_products :
307
  ($count + $batch_max)));
308
  }
309
+
310
  $products = Mage::getModel('catalog/product')->getCollection()
311
  ->addAttributeToSelect('*')
312
+ ->addStoreFilter($store_id)
313
  ->setPageSize($batch_max)
314
  ->setCurPage($count / $batch_max + 1)
315
  ->addUrlRewrite();
316
 
 
317
  foreach ($products as $product) {
318
  $product->setStoreId($store_id);
319
  if ($product->getVisibility() !=
320
  Mage_Catalog_Model_Product_Visibility::VISIBILITY_NOT_VISIBLE &&
321
  $product->getStatus() !=
322
  Mage_Catalog_Model_Product_Status::STATUS_DISABLED) {
323
+
324
+ try {
325
+ $e = $this->buildProductEntry($product);
326
+ $io->streamWrite($e."\n");
327
+ } catch (Exception $e) {
328
+ $exception_count++;
329
+ // Don't overload the logs, log the first 3 exceptions.
330
+ if ($exception_count <= 3) {
331
+ self::logException($e);
332
+ }
333
+ // If it looks like a systemic failure : stop feed generation.
334
+ if ($exception_count > 100) {
335
+ throw $e;
336
+ }
337
+ }
338
  }
339
  }
340
  unset($products);
341
  $count += $batch_max;
342
  }
343
+
344
+ if ($exception_count != 0) {
345
+ self::log("Exceptions in Feed Generation : ".$exception_count);
346
+ }
347
  }
348
 
349
  public function estimateGenerationTime() {
458
  $latin_string = preg_replace('/[^\\p{Latin}]/u', '', $string);
459
  if ($latin_string !== '' &&
460
  mb_strtoupper($latin_string, 'utf-8') === $latin_string) {
461
+ return mb_strtolower($string, 'utf-8');
462
  }
463
  }
464
  return $string;
522
  case 'bundle':
523
  return $this->getBundleProductPrice($product);
524
  default:
525
+ return $this->getFinalPrice($product);
526
  }
527
  }
528
 
534
  ->addAttributeToSelect('price')->addFilterByRequiredOptions();
535
  foreach ($simple_collection as $simple_product) {
536
  if ($simple_product->getPrice() > 0) {
537
+ return $this->getFinalPrice($simple_product);
538
  }
539
  }
540
  }
541
+ return $this->getFinalPrice($product);
542
  }
543
 
544
  private function getBundleProductPrice($product) {
564
  foreach ($group as $item) {
565
  $item_price = $pm->getSelectionFinalTotalPrice($product, $item,
566
  $bundle_quantity, $selection_quantity);
567
+ $item_price = $this->getFinalPrice($item, $item_price);
568
  $min_price = min($min_price, $item_price);
569
  }
570
  $option_prices[] = $min_price;
571
  }
572
 
573
+ return $this->getFinalPrice($product) + array_sum($option_prices);
574
  }
575
 
576
  private function getGroupedProductPrice($product) {
577
  $assoc_products = $product->getTypeInstance(true)
578
  ->getAssociatedProductCollection($product)
579
+ ->addAttributeToSelect('price')
580
+ ->addAttributeToSelect('tax_class_id')
581
+ ->addAttributeToSelect('tax_percent');
582
 
583
  $min_price = INF;
584
  foreach ($assoc_products as $assoc_product) {
585
+ $min_price = min($min_price, $this->getFinalPrice($assoc_product));
586
+ }
587
  return $min_price;
588
  }
589
 
590
+ private function getFinalPrice($product, $price = null) {
591
+ if (!isset($this->taxHelper)) {
592
+ $this->taxHelper = Mage::helper('tax');
593
+ }
594
+ if ($price === null) {
595
+ $price = $product->getFinalPrice();
596
+ }
597
+ return $this->taxHelper->getPrice($product, $price);
598
+ }
599
+
600
  private function stripCurrencySymbol($price) {
601
  if (!isset($this->currency_strip_needed)) {
602
  $this->currency_strip_needed = !preg_match('/^[0-9,.]*$/', $price);
app/code/community/Facebook/AdsToolbox/controllers/DebugController.php CHANGED
@@ -22,7 +22,9 @@ class Facebook_AdsToolbox_DebugController
22
  if ($debug_key && $debug_key === FacebookAdsToolbox::getDebugKey()) {
23
  $this->getResponse()->setHeader('Content-type', 'text');
24
  $feed = $this->getRequest()->getParam('feed');
25
- if ($feed) {
 
 
26
  $this->getResponse()->setBody(FacebookAdsToolbox::getFeedLogs());
27
  } else {
28
  $this->getResponse()->setBody(FacebookAdsToolbox::getLogs());
22
  if ($debug_key && $debug_key === FacebookAdsToolbox::getDebugKey()) {
23
  $this->getResponse()->setHeader('Content-type', 'text');
24
  $feed = $this->getRequest()->getParam('feed');
25
+ if ($feed && $feed == 'exception') {
26
+ $this->getResponse()->setBody(FacebookAdsToolbox::getFeedException());
27
+ } else if ($feed) {
28
  $this->getResponse()->setBody(FacebookAdsToolbox::getFeedLogs());
29
  } else {
30
  $this->getResponse()->setBody(FacebookAdsToolbox::getLogs());
app/code/community/Facebook/AdsToolbox/controllers/ProductfeedController.php CHANGED
@@ -21,7 +21,7 @@ class Facebook_AdsToolbox_ProductfeedController
21
  $settings_id = Mage::getStoreConfig('facebook_ads_toolbox/dia/setting/id');
22
 
23
  list($format, $feed, $supportzip) =
24
- $obins->internalGenerateFacebookProductFeed(true);
25
  if ($supportzip) {
26
  $this->getResponse()->setHeader('Content-type', 'application/x-gzip');
27
  list($filename, $filesize, $filecontent) = $feed->readGZip();
21
  $settings_id = Mage::getStoreConfig('facebook_ads_toolbox/dia/setting/id');
22
 
23
  list($format, $feed, $supportzip) =
24
+ $obins->internalGenerateFacebookProductFeed();
25
  if ($supportzip) {
26
  $this->getResponse()->setHeader('Content-type', 'application/x-gzip');
27
  list($filename, $filesize, $filecontent) = $feed->readGZip();
app/code/community/Facebook/AdsToolbox/etc/config.xml CHANGED
@@ -2,7 +2,7 @@
2
  <config>
3
  <modules>
4
  <Facebook_AdsToolbox>
5
- <version>2.1.9</version>
6
  </Facebook_AdsToolbox>
7
  </modules>
8
  <global>
2
  <config>
3
  <modules>
4
  <Facebook_AdsToolbox>
5
+ <version>2.1.10</version>
6
  </Facebook_AdsToolbox>
7
  </modules>
8
  <global>
app/code/community/Facebook/AdsToolbox/lib/fb.php CHANGED
@@ -14,6 +14,7 @@ class FacebookAdsToolbox {
14
 
15
  const LOGFILE = 'facebook_ads_extension.log';
16
  const FEED_LOGFILE = 'facebook_adstoolbox_product_feed.log';
 
17
 
18
  public static function version() {
19
  return Mage::getConfig()->getModuleConfig("Facebook_AdsToolbox")->version;
@@ -61,6 +62,11 @@ class FacebookAdsToolbox {
61
  return file_get_contents($log_file_path);
62
  }
63
 
 
 
 
 
 
64
  public static function log($msg) {
65
  Mage::log($msg, Zend_Log::INFO, self::LOGFILE);
66
  }
14
 
15
  const LOGFILE = 'facebook_ads_extension.log';
16
  const FEED_LOGFILE = 'facebook_adstoolbox_product_feed.log';
17
+ const FEED_EXCEPTION = 'facebook_product_feed_exception.log';
18
 
19
  public static function version() {
20
  return Mage::getConfig()->getModuleConfig("Facebook_AdsToolbox")->version;
62
  return file_get_contents($log_file_path);
63
  }
64
 
65
+ public static function getFeedException() {
66
+ $log_file_path = Mage::getBaseDir('log').'/'.self::FEED_EXCEPTION;
67
+ return file_get_contents($log_file_path);
68
+ }
69
+
70
  public static function log($msg) {
71
  Mage::log($msg, Zend_Log::INFO, self::LOGFILE);
72
  }
package.xml CHANGED
@@ -1,7 +1,7 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Facebook_Ads_Toolbox</name>
4
- <version>2.1.9</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,12 +59,16 @@ _Installation Instructions_&#xD;
59
  &#xD;
60
  Additional FAQ&#xD;
61
  https://www.facebook.com/help/532749253576163</description>
62
- <notes>- Add product category into feed import.&#xD;
63
- - Add support for the "google product category" attribute.</notes>
 
 
 
 
64
  <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>
65
- <date>2016-10-21</date>
66
- <time>02:25:08</time>
67
- <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="f601096b3033fde99dbcfdc463572ec1"/><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="a06afb4375ff1f9fe6dcefa34d1d952d"/><file name="FacebookProductFeedSamples.php" hash="b79a1a2f4c857e2ed7b4971c3395406f"/><file name="FacebookProductFeedTSV.php" hash="74b0e3801fa807bfc48e8814c7c0d6c4"/><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="6b5f3d958cee4ac57f6ac4378dfc12fc"/></dir><dir name="lib"><file name="fb.php" hash="cf26fcc94496b05fbaed083154a42dbf"/></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="323e73e09b3636ed378463ca288ddca0"/><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>
68
  <compatible/>
69
  <dependencies><required><php><min>5.3.0</min><max>8.0.0</max></php></required></dependencies>
70
  </package>
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Facebook_Ads_Toolbox</name>
4
+ <version>2.1.10</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>Product feed improvements:&#xD;
63
+ - Fix gzip feed file not generating for some stores.&#xD;
64
+ - Use base currency instead of default currency.&#xD;
65
+ - Fix issues with capitalization for some stores.&#xD;
66
+ - Don't include products that have no store page.&#xD;
67
+ - Include Tax in the product price.</notes>
68
  <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>
69
+ <date>2016-10-27</date>
70
+ <time>02:06:31</time>
71
+ <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="f601096b3033fde99dbcfdc463572ec1"/><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="ef868ae27fb129ab4d00fc04bfc9c3dc"/><file name="FacebookProductFeedSamples.php" hash="b79a1a2f4c857e2ed7b4971c3395406f"/><file name="FacebookProductFeedTSV.php" hash="74b0e3801fa807bfc48e8814c7c0d6c4"/><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="b279f8b0a34590e11755079e0e6b34d0"/><file name="ProductfeedController.php" hash="283cf46abb9e688b80626e35e25e883e"/></dir><dir name="etc"><file name="adminhtml.xml" hash="be7e9a1dfc20ca73654c8e4ac557e4c9"/><file name="config.xml" hash="8536fdab5c2b216a3fccd135cec643c9"/></dir><dir name="lib"><file name="fb.php" hash="952d0a678eb38bec17a70fa772b79c28"/></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="323e73e09b3636ed378463ca288ddca0"/><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>
72
  <compatible/>
73
  <dependencies><required><php><min>5.3.0</min><max>8.0.0</max></php></required></dependencies>
74
  </package>