Version Description
- 2022-09-13 =
- Add - Show warning when creating product set with excluded categories.
- Fix - Messenger settings are no longer overridden after business config refresh.
- Fix - PHP notice thrown by get_page_id() in facebook-for-woocommerce/includes/API/FBE/Installation/Read/Response.php.
- Fix - When disabling Enable Messenger on the Messenger setting page, the setting does not persist after selecting Save Changes.
Download this release
Release Info
Developer | automattic |
Plugin | Facebook for WooCommerce |
Version | 2.6.23 |
Comparing to | |
See all releases |
Code changes from version 2.6.22 to 2.6.23
- assets/build/admin/product-sets-admin.asset.php +1 -1
- assets/build/admin/product-sets-admin.js +1 -1
- assets/js/admin/product-sets-admin.js +38 -0
- changelog.txt +43 -37
- facebook-for-woocommerce.php +2 -2
- i18n/languages/facebook-for-woocommerce.pot +64 -64
- includes/API/FBE/Installation/Read/Response.php +4 -3
- includes/Admin.php +10 -0
- includes/Admin/Settings_Screens/Messenger.php +19 -75
- includes/Handlers/Connection.php +0 -18
- readme.txt +45 -39
- vendor/autoload.php +1 -1
- vendor/composer/InstalledVersions.php +7 -7
- vendor/composer/autoload_real.php +4 -4
- vendor/composer/autoload_static.php +4 -4
- vendor/composer/installed.php +10 -10
assets/build/admin/product-sets-admin.asset.php
CHANGED
@@ -1 +1 @@
|
|
1 |
-
<?php return array('dependencies' => array('wp-polyfill'), 'version' => '
|
1 |
+
<?php return array('dependencies' => array('wp-polyfill'), 'version' => '646cbd7ed7e31a6978b8ef073dc8196f');
|
assets/build/admin/product-sets-admin.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
!function(e){var t={};function
|
1 |
+
!function(e){var t={};function o(r){if(t[r])return t[r].exports;var n=t[r]={i:r,l:!1,exports:{}};return e[r].call(n.exports,n,n.exports,o),n.l=!0,n.exports}o.m=e,o.c=t,o.d=function(e,t,r){o.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},o.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.t=function(e,t){if(1&t&&(e=o(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(o.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)o.d(r,n,function(t){return e[t]}.bind(null,n));return r},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="",o(o.s=9)}({9:function(e,t){jQuery(document).ready((function(e){jQuery(".select2.wc-facebook").length&&(jQuery(".select2.wc-facebook").select2().addClass("visible").attr("disabled",!1),jQuery(".select2.updating-message").addClass("hidden"),jQuery(document).ajaxSuccess((function(e,t,o){var r=new URLSearchParams(o.data);r.has("action")&&"add-tag"===r.get("action")&&r.has("taxonomy")&&"fb_product_set"===r.get("taxonomy")&&jQuery(".select2.wc-facebook").select2().val(null).trigger("change")}))),e('form[id="addtag"] input[name="submit"]').on("click",(function(t){var o=e("#_wc_facebook_product_cats").val(),r=[];window.facebook_for_woocommerce_product_sets&&window.facebook_for_woocommerce_product_sets.excluded_category_ids&&(r=window.facebook_for_woocommerce_product_sets.excluded_category_ids),o.length>0&&r.length>0&&function(e,t){for(var o=0,r=0;r<t.length;r++)t.includes(t[r])&&o++;return o>0}(0,r)&&alert(facebook_for_woocommerce_product_sets.excluded_category_warning_message)}))}))}});
|
assets/js/admin/product-sets-admin.js
CHANGED
@@ -27,4 +27,42 @@ jQuery( document ).ready( function( $ ) {
|
|
27 |
|
28 |
}
|
29 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
30 |
} );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
27 |
|
28 |
}
|
29 |
|
30 |
+
let $submitButton = $( 'form[id="addtag"] input[name="submit"]' );
|
31 |
+
|
32 |
+
$submitButton.on( 'click', function( e ) {
|
33 |
+
|
34 |
+
let $selectedCategories = $('#_wc_facebook_product_cats').val();
|
35 |
+
let excludedCategoryIDs = [];
|
36 |
+
|
37 |
+
if ( window.facebook_for_woocommerce_product_sets && window.facebook_for_woocommerce_product_sets.excluded_category_ids ) {
|
38 |
+
excludedCategoryIDs = window.facebook_for_woocommerce_product_sets.excluded_category_ids;
|
39 |
+
}
|
40 |
+
|
41 |
+
if ( $selectedCategories.length > 0 && excludedCategoryIDs.length > 0 ) {
|
42 |
+
if ( hasExcludedCategories( $selectedCategories, excludedCategoryIDs ) ) {
|
43 |
+
alert( facebook_for_woocommerce_product_sets.excluded_category_warning_message );
|
44 |
+
}
|
45 |
+
}
|
46 |
+
|
47 |
+
});
|
48 |
+
|
49 |
} );
|
50 |
+
|
51 |
+
/**
|
52 |
+
* Checks if selected categories contains any excluded categories.
|
53 |
+
*
|
54 |
+
* @param selectedCategories Array of submitted category ids
|
55 |
+
* @param excludedCategoryIDs Array category ids excluded from sync.
|
56 |
+
* @returns {boolean}
|
57 |
+
*/
|
58 |
+
function hasExcludedCategories( selectedCategories, excludedCategoryIDs ) {
|
59 |
+
|
60 |
+
let counter = 0;
|
61 |
+
|
62 |
+
for ( let i = 0; i < excludedCategoryIDs.length; i++ ) {
|
63 |
+
if ( excludedCategoryIDs.includes( excludedCategoryIDs[i] ) ) counter++;
|
64 |
+
}
|
65 |
+
|
66 |
+
return counter > 0;
|
67 |
+
|
68 |
+
}
|
changelog.txt
CHANGED
@@ -1,43 +1,49 @@
|
|
1 |
*** Facebook for WooCommerce Changelog ***
|
2 |
|
3 |
-
= 2.6.
|
4 |
-
*
|
5 |
-
* Fix -
|
6 |
-
* Fix -
|
7 |
-
*
|
8 |
-
* Update - Facebook Business Extension flow from COMMERCE_OFFSITE to DEFAULT.
|
9 |
|
10 |
-
= 2.6.
|
11 |
-
*
|
12 |
-
* Fix -
|
13 |
-
*
|
14 |
-
* Tweak -
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
*
|
19 |
-
|
20 |
-
|
21 |
-
*
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
*
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
*
|
34 |
-
*
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
*
|
39 |
-
|
40 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
41 |
* Fix - Do not set `sale_price` when the product is not on sale.
|
42 |
* Fix - FB Pixel is missing some ajax Add to cart events.
|
43 |
* Fix - Feed visibility field value for hidden items.
|
1 |
*** Facebook for WooCommerce Changelog ***
|
2 |
|
3 |
+
= 2.6.23 - 2022-09-13 =
|
4 |
+
* Add - Show warning when creating product set with excluded categories.
|
5 |
+
* Fix - Messenger settings are no longer overridden after business config refresh.
|
6 |
+
* Fix - PHP notice thrown by get_page_id() in facebook-for-woocommerce/includes/API/FBE/Installation/Read/Response.php.
|
7 |
+
* Fix - When disabling Enable Messenger on the Messenger setting page, the setting does not persist after selecting Save Changes.
|
|
|
8 |
|
9 |
+
= 2.6.22 - 2022-09-06 =
|
10 |
+
* Fix - Adding an excluded category doesn't remove that category synced products.
|
11 |
+
* Fix - Ensure content_name and content_ids addToCart pixel event properties are correct for variable products when redirect to cart is enabled in WooCommerce.
|
12 |
+
* Fix - Remove out-of-stock products on Facebook when the "Hide out of stock items from the catalog" option in WooCommerce is checked.
|
13 |
+
* Tweak - WC 6.9 compatibility.
|
14 |
+
* Update - Facebook Business Extension flow from COMMERCE_OFFSITE to DEFAULT.
|
15 |
+
|
16 |
+
= 2.6.21 - 2022-08-16 =
|
17 |
+
* Dev - Add branch-labels GH workflow.
|
18 |
+
* Fix - `Undefined array key "HTTP_REFERER"` not longer happens when `new Event` is triggered from an AJAX call that doesn't include a referrer (likely due to browser configuration).
|
19 |
+
* Tweak - WC 6.8 compatibility.
|
20 |
+
* Tweak - WP 6.0 compatibility.
|
21 |
+
|
22 |
+
2022-08-09 - version 2.6.20
|
23 |
+
* Fix - Ensure product is deleted from FB when moved to trash.
|
24 |
+
* Fix - Price not updating when the sale price is removed.
|
25 |
+
|
26 |
+
= 2.6.19 - 2022-07-27 =
|
27 |
+
* Add - `wc_facebook_string_apply_shortcodes` filter to check whether to apply shortcodes on a string before syncing.
|
28 |
+
* Tweak - Use the Heartbeat system to refresh the local business configuration data with the latest from Facebook.
|
29 |
+
* Tweak - WC 6.8 compatibility.
|
30 |
+
|
31 |
+
2022-07-19 - version 2.6.18
|
32 |
+
* Fix - Misaligned help icons on Product Categories > Google Product Categories form.
|
33 |
+
* Fix - Syncing WC custom placeholder to Facebook shop.
|
34 |
+
* Fix - is_search() causing fatal error when custom queries are used.
|
35 |
+
|
36 |
+
= 2.6.17 - 2022-07-06 =
|
37 |
+
* Fix - Add allow-plugins directive and adjust phpcs GitHub workflow.
|
38 |
+
* Fix - Scheduled product not synced when status becomes "publish".
|
39 |
+
* Tweak - WooCommerce 6.7 compatibility.
|
40 |
+
* Update - Facebook Marketing API from v12.0 to v13.0.
|
41 |
+
|
42 |
+
= 2.6.16 - 2022-06-07 =
|
43 |
+
* Fix - Updating reference from old master branch.
|
44 |
+
* Tweak - WC 6.6 compatibility.
|
45 |
+
|
46 |
+
2022-06-01 - version 2.6.15
|
47 |
* Fix - Do not set `sale_price` when the product is not on sale.
|
48 |
* Fix - FB Pixel is missing some ajax Add to cart events.
|
49 |
* Fix - Feed visibility field value for hidden items.
|
facebook-for-woocommerce.php
CHANGED
@@ -11,7 +11,7 @@
|
|
11 |
* Description: Grow your business on Facebook! Use this official plugin to help sell more of your products using Facebook. After completing the setup, you'll be ready to create ads that promote your products and you can also create a shop section on your Page where customers can browse your products on Facebook.
|
12 |
* Author: Facebook
|
13 |
* Author URI: https://www.facebook.com/
|
14 |
-
* Version: 2.6.
|
15 |
* Text Domain: facebook-for-woocommerce
|
16 |
* Tested up to: 6.0
|
17 |
* WC requires at least: 3.5.0
|
@@ -33,7 +33,7 @@ class WC_Facebook_Loader {
|
|
33 |
/**
|
34 |
* @var string the plugin version. This must be in the main plugin file to be automatically bumped by Woorelease.
|
35 |
*/
|
36 |
-
const PLUGIN_VERSION = '2.6.
|
37 |
|
38 |
// Minimum PHP version required by this plugin.
|
39 |
const MINIMUM_PHP_VERSION = '7.0.0';
|
11 |
* Description: Grow your business on Facebook! Use this official plugin to help sell more of your products using Facebook. After completing the setup, you'll be ready to create ads that promote your products and you can also create a shop section on your Page where customers can browse your products on Facebook.
|
12 |
* Author: Facebook
|
13 |
* Author URI: https://www.facebook.com/
|
14 |
+
* Version: 2.6.23
|
15 |
* Text Domain: facebook-for-woocommerce
|
16 |
* Tested up to: 6.0
|
17 |
* WC requires at least: 3.5.0
|
33 |
/**
|
34 |
* @var string the plugin version. This must be in the main plugin file to be automatically bumped by Woorelease.
|
35 |
*/
|
36 |
+
const PLUGIN_VERSION = '2.6.23'; // WRCS: DEFINED_VERSION.
|
37 |
|
38 |
// Minimum PHP version required by this plugin.
|
39 |
const MINIMUM_PHP_VERSION = '7.0.0';
|
i18n/languages/facebook-for-woocommerce.pot
CHANGED
@@ -2,10 +2,10 @@
|
|
2 |
# This file is distributed under the same license as the Facebook for WooCommerce package.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
-
"Project-Id-Version: Facebook for WooCommerce 2.6.
|
6 |
"Report-Msgid-Bugs-To: "
|
7 |
"https://woocommerce.com/my-account/marketplace-ticket-form/\n"
|
8 |
-
"POT-Creation-Date: 2022-09-
|
9 |
"MIME-Version: 1.0\n"
|
10 |
"Content-Type: text/plain; charset=utf-8\n"
|
11 |
"Content-Transfer-Encoding: 8bit\n"
|
@@ -226,7 +226,7 @@ msgstr ""
|
|
226 |
|
227 |
#: includes/AJAX.php:348 includes/AJAX.php:416 includes/AJAX.php:482
|
228 |
#: includes/Admin/Product_Categories.php:119
|
229 |
-
#: includes/Admin/Settings_Screens/Product_Sync.php:158 includes/Admin.php:
|
230 |
msgid "Cancel"
|
231 |
msgstr ""
|
232 |
|
@@ -392,9 +392,9 @@ msgid "Connection"
|
|
392 |
msgstr ""
|
393 |
|
394 |
#: includes/Admin/Settings.php:128
|
395 |
-
#: includes/Admin/Settings_Screens/Messenger.php:
|
396 |
-
#: includes/Admin/Settings_Screens/Messenger.php:
|
397 |
-
#: includes/Admin/Settings_Screens/Messenger.php:
|
398 |
msgid "Messenger"
|
399 |
msgstr ""
|
400 |
|
@@ -540,40 +540,33 @@ msgid ""
|
|
540 |
"with feed generation. This is an experimental feature in testing phase."
|
541 |
msgstr ""
|
542 |
|
543 |
-
#: includes/Admin/Settings_Screens/Messenger.php:
|
544 |
#. translators: Placeholders: %1$s - <a> tag, %2$s - </a> tag
|
545 |
msgid "%1$sClick here%2$s to manage your Messenger greeting and colors."
|
546 |
msgstr ""
|
547 |
|
548 |
-
#: includes/Admin/Settings_Screens/Messenger.php:
|
549 |
msgid "Enable Messenger"
|
550 |
msgstr ""
|
551 |
|
552 |
-
#: includes/Admin/Settings_Screens/Messenger.php:
|
553 |
msgid "Enable and customize Facebook Messenger on your store"
|
554 |
msgstr ""
|
555 |
|
556 |
-
#: includes/Admin/Settings_Screens/Messenger.php:
|
557 |
msgid "Language"
|
558 |
msgstr ""
|
559 |
|
560 |
-
#: includes/Admin/Settings_Screens/Messenger.php:
|
561 |
msgid "Greeting & Colors"
|
562 |
msgstr ""
|
563 |
|
564 |
-
#: includes/Admin/Settings_Screens/Messenger.php:
|
565 |
#. translators: Placeholders: %1$s - <a> tag, %2$s - </a> tag
|
566 |
msgid "Please %1$sconnect to Facebook%2$s to enable and manage Facebook Messenger."
|
567 |
msgstr ""
|
568 |
|
569 |
-
#: includes/Admin/Settings_Screens/Messenger.php:
|
570 |
-
#. translators: Placeholders: %1$s - <a> tag, %2$s - </a> tag
|
571 |
-
msgid ""
|
572 |
-
"There was an error communicating with the Facebook Business Extension. "
|
573 |
-
"%1$sClick here%2$s to manage your Messenger settings."
|
574 |
-
msgstr ""
|
575 |
-
|
576 |
-
#: includes/Admin/Settings_Screens/Messenger.php:318
|
577 |
msgid "Please try again."
|
578 |
msgstr ""
|
579 |
|
@@ -692,41 +685,48 @@ msgstr ""
|
|
692 |
msgid "The name is how it appears on Facebook Catalog."
|
693 |
msgstr ""
|
694 |
|
695 |
-
#: includes/Admin.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
696 |
msgid ""
|
697 |
"Please enter a Google product category and at least one sub-category to "
|
698 |
"sell this product on Instagram."
|
699 |
msgstr ""
|
700 |
|
701 |
-
#: includes/Admin.php:
|
702 |
msgid "Search main categories..."
|
703 |
msgstr ""
|
704 |
|
705 |
-
#: includes/Admin.php:
|
706 |
msgid "Choose a main category"
|
707 |
msgstr ""
|
708 |
|
709 |
-
#: includes/Admin.php:
|
710 |
msgid "Choose a category"
|
711 |
msgstr ""
|
712 |
|
713 |
-
#: includes/Admin.php:
|
714 |
msgid ""
|
715 |
"To sell this product on Instagram, please ensure it meets the following "
|
716 |
"requirements:"
|
717 |
msgstr ""
|
718 |
|
719 |
-
#: includes/Admin.php:
|
720 |
msgid "Has a price defined"
|
721 |
msgstr ""
|
722 |
|
723 |
-
#: includes/Admin.php:
|
724 |
#. translators: Placeholders: %1$s - <strong> opening HTML tag, %2$s -
|
725 |
#. </strong> closing HTML tag
|
726 |
msgid "Has %1$sManage Stock%2$s enabled on the %1$sInventory%2$s tab"
|
727 |
msgstr ""
|
728 |
|
729 |
-
#: includes/Admin.php:
|
730 |
#. translators: Placeholders: %1$s - <strong> opening HTML tag, %2$s -
|
731 |
#. </strong> closing HTML tag
|
732 |
msgid ""
|
@@ -734,11 +734,11 @@ msgid ""
|
|
734 |
"and hide\""
|
735 |
msgstr ""
|
736 |
|
737 |
-
#: includes/Admin.php:
|
738 |
msgid "Close"
|
739 |
msgstr ""
|
740 |
|
741 |
-
#: includes/Admin.php:
|
742 |
#. translators: Placeholders: %1$s - opening <a> link tag, %2$s - closing </a>
|
743 |
#. link tag
|
744 |
msgid ""
|
@@ -747,44 +747,44 @@ msgid ""
|
|
747 |
"the Facebook catalog as well?"
|
748 |
msgstr ""
|
749 |
|
750 |
-
#: includes/Admin.php:
|
751 |
msgid "Remove from sync only"
|
752 |
msgstr ""
|
753 |
|
754 |
-
#: includes/Admin.php:
|
755 |
msgid "Remove from sync and delete"
|
756 |
msgstr ""
|
757 |
|
758 |
-
#: includes/Admin.php:
|
759 |
msgid "Facebook sync"
|
760 |
msgstr ""
|
761 |
|
762 |
-
#: includes/Admin.php:
|
763 |
msgid "Sync and show"
|
764 |
msgstr ""
|
765 |
|
766 |
-
#: includes/Admin.php:
|
767 |
msgid "Sync and hide"
|
768 |
msgstr ""
|
769 |
|
770 |
-
#: includes/Admin.php:
|
771 |
-
#: includes/Admin.php:
|
772 |
msgid "Do not sync"
|
773 |
msgstr ""
|
774 |
|
775 |
-
#: includes/Admin.php:
|
776 |
msgid "Filter by Facebook sync setting"
|
777 |
msgstr ""
|
778 |
|
779 |
-
#: includes/Admin.php:
|
780 |
msgid "Include in Facebook sync"
|
781 |
msgstr ""
|
782 |
|
783 |
-
#: includes/Admin.php:
|
784 |
msgid "Exclude from Facebook sync"
|
785 |
msgstr ""
|
786 |
|
787 |
-
#: includes/Admin.php:
|
788 |
#. translators: Placeholders: %1$s - <strong> tag, %2$s - </strong> tag, %3$s -
|
789 |
#. <a> tag, %4$s - <a> tag
|
790 |
msgid ""
|
@@ -798,11 +798,11 @@ msgid_plural ""
|
|
798 |
msgstr[0] ""
|
799 |
msgstr[1] ""
|
800 |
|
801 |
-
#: includes/Admin.php:
|
802 |
msgid "Don't show this notice again"
|
803 |
msgstr ""
|
804 |
|
805 |
-
#: includes/Admin.php:
|
806 |
#. translators: Placeholders: %1$s - number of affected products, %2$s opening
|
807 |
#. HTML <a> tag, %3$s - closing HTML </a> tag, %4$s - opening HTML <a> tag,
|
808 |
#. %5$s - closing HTML </a> tag
|
@@ -819,7 +819,7 @@ msgid_plural ""
|
|
819 |
msgstr[0] ""
|
820 |
msgstr[1] ""
|
821 |
|
822 |
-
#: includes/Admin.php:
|
823 |
#. translators: Placeholders: %1$s - opening HTML <strong> tag, %2$s - closing
|
824 |
#. HTML </strong> tag, %3$s - opening HTML <a> tag, %4$s - closing HTML </a>
|
825 |
#. tag
|
@@ -829,69 +829,69 @@ msgid ""
|
|
829 |
"your Facebook catalog. You may still advertise Virtual products on Facebook."
|
830 |
msgstr ""
|
831 |
|
832 |
-
#: includes/Admin.php:
|
833 |
msgid "Sync and show in catalog"
|
834 |
msgstr ""
|
835 |
|
836 |
-
#: includes/Admin.php:
|
837 |
msgid "Sync and hide in catalog"
|
838 |
msgstr ""
|
839 |
|
840 |
-
#: includes/Admin.php:
|
841 |
msgid "Facebook Description"
|
842 |
msgstr ""
|
843 |
|
844 |
-
#: includes/Admin.php:
|
845 |
msgid ""
|
846 |
"Custom (plain-text only) description for product on Facebook. If blank, "
|
847 |
"product description will be used. If product description is blank, "
|
848 |
"shortname will be used."
|
849 |
msgstr ""
|
850 |
|
851 |
-
#: includes/Admin.php:
|
852 |
msgid "Facebook Product Image"
|
853 |
msgstr ""
|
854 |
|
855 |
-
#: includes/Admin.php:
|
856 |
msgid ""
|
857 |
"Choose the product image that should be synced to the Facebook catalog for "
|
858 |
"this product. If using a custom image, please enter an absolute URL (e.g. "
|
859 |
"https://domain.com/image.jpg)."
|
860 |
msgstr ""
|
861 |
|
862 |
-
#: includes/Admin.php:
|
863 |
msgid "Use WooCommerce image"
|
864 |
msgstr ""
|
865 |
|
866 |
-
#: includes/Admin.php:
|
867 |
msgid "Use custom image"
|
868 |
msgstr ""
|
869 |
|
870 |
-
#: includes/Admin.php:
|
871 |
msgid "Custom Image URL"
|
872 |
msgstr ""
|
873 |
|
874 |
-
#: includes/Admin.php:
|
875 |
#. translators: Placeholders %1$s - WC currency symbol
|
876 |
msgid "Facebook Price (%1$s)"
|
877 |
msgstr ""
|
878 |
|
879 |
-
#: includes/Admin.php:
|
880 |
msgid ""
|
881 |
"Custom price for product on Facebook. Please enter in monetary decimal (.) "
|
882 |
"format without thousand separators and currency symbols. If blank, product "
|
883 |
"price will be used."
|
884 |
msgstr ""
|
885 |
|
886 |
-
#: includes/Admin.php:
|
887 |
msgid "Use variation image"
|
888 |
msgstr ""
|
889 |
|
890 |
-
#: includes/Admin.php:
|
891 |
msgid "Use parent image"
|
892 |
msgstr ""
|
893 |
|
894 |
-
#: includes/Admin.php:
|
895 |
msgid "Close modal panel"
|
896 |
msgstr ""
|
897 |
|
@@ -976,29 +976,29 @@ msgstr ""
|
|
976 |
msgid "Other"
|
977 |
msgstr ""
|
978 |
|
979 |
-
#: includes/Handlers/Connection.php:
|
980 |
msgid "Connection successful!"
|
981 |
msgstr ""
|
982 |
|
983 |
-
#: includes/Handlers/Connection.php:
|
984 |
msgid "You do not have permission to uninstall Facebook Business Extension."
|
985 |
msgstr ""
|
986 |
|
987 |
-
#: includes/Handlers/Connection.php:
|
988 |
msgid "Disconnection successful."
|
989 |
msgstr ""
|
990 |
|
991 |
-
#: includes/Handlers/Connection.php:
|
992 |
#. translators: Placeholders: %s - API error message
|
993 |
msgid "Could not retrieve page access data. %s"
|
994 |
msgstr ""
|
995 |
|
996 |
-
#: includes/Handlers/Connection.php:
|
997 |
#. translators: Placeholders: %s - Facebook page ID
|
998 |
msgid "Page %s not authorized."
|
999 |
msgstr ""
|
1000 |
|
1001 |
-
#: includes/Handlers/Connection.php:
|
1002 |
msgid "You do not have permission to finish App Store login."
|
1003 |
msgstr ""
|
1004 |
|
2 |
# This file is distributed under the same license as the Facebook for WooCommerce package.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
+
"Project-Id-Version: Facebook for WooCommerce 2.6.23\n"
|
6 |
"Report-Msgid-Bugs-To: "
|
7 |
"https://woocommerce.com/my-account/marketplace-ticket-form/\n"
|
8 |
+
"POT-Creation-Date: 2022-09-13 19:45:12+00:00\n"
|
9 |
"MIME-Version: 1.0\n"
|
10 |
"Content-Type: text/plain; charset=utf-8\n"
|
11 |
"Content-Transfer-Encoding: 8bit\n"
|
226 |
|
227 |
#: includes/AJAX.php:348 includes/AJAX.php:416 includes/AJAX.php:482
|
228 |
#: includes/Admin/Product_Categories.php:119
|
229 |
+
#: includes/Admin/Settings_Screens/Product_Sync.php:158 includes/Admin.php:421
|
230 |
msgid "Cancel"
|
231 |
msgstr ""
|
232 |
|
392 |
msgstr ""
|
393 |
|
394 |
#: includes/Admin/Settings.php:128
|
395 |
+
#: includes/Admin/Settings_Screens/Messenger.php:37
|
396 |
+
#: includes/Admin/Settings_Screens/Messenger.php:38
|
397 |
+
#: includes/Admin/Settings_Screens/Messenger.php:140
|
398 |
msgid "Messenger"
|
399 |
msgstr ""
|
400 |
|
540 |
"with feed generation. This is an experimental feature in testing phase."
|
541 |
msgstr ""
|
542 |
|
543 |
+
#: includes/Admin/Settings_Screens/Messenger.php:114
|
544 |
#. translators: Placeholders: %1$s - <a> tag, %2$s - </a> tag
|
545 |
msgid "%1$sClick here%2$s to manage your Messenger greeting and colors."
|
546 |
msgstr ""
|
547 |
|
548 |
+
#: includes/Admin/Settings_Screens/Messenger.php:146
|
549 |
msgid "Enable Messenger"
|
550 |
msgstr ""
|
551 |
|
552 |
+
#: includes/Admin/Settings_Screens/Messenger.php:148
|
553 |
msgid "Enable and customize Facebook Messenger on your store"
|
554 |
msgstr ""
|
555 |
|
556 |
+
#: includes/Admin/Settings_Screens/Messenger.php:158
|
557 |
msgid "Language"
|
558 |
msgstr ""
|
559 |
|
560 |
+
#: includes/Admin/Settings_Screens/Messenger.php:163
|
561 |
msgid "Greeting & Colors"
|
562 |
msgstr ""
|
563 |
|
564 |
+
#: includes/Admin/Settings_Screens/Messenger.php:185
|
565 |
#. translators: Placeholders: %1$s - <a> tag, %2$s - </a> tag
|
566 |
msgid "Please %1$sconnect to Facebook%2$s to enable and manage Facebook Messenger."
|
567 |
msgstr ""
|
568 |
|
569 |
+
#: includes/Admin/Settings_Screens/Messenger.php:262
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
570 |
msgid "Please try again."
|
571 |
msgstr ""
|
572 |
|
685 |
msgid "The name is how it appears on Facebook Catalog."
|
686 |
msgstr ""
|
687 |
|
688 |
+
#: includes/Admin.php:183
|
689 |
+
msgid ""
|
690 |
+
"You have selected one or more categories currently excluded from the "
|
691 |
+
"Facebook sync. Products belonging to the excluded categories will not be "
|
692 |
+
"added to your FB product set."
|
693 |
+
msgstr ""
|
694 |
+
|
695 |
+
#: includes/Admin.php:224
|
696 |
msgid ""
|
697 |
"Please enter a Google product category and at least one sub-category to "
|
698 |
"sell this product on Instagram."
|
699 |
msgstr ""
|
700 |
|
701 |
+
#: includes/Admin.php:250
|
702 |
msgid "Search main categories..."
|
703 |
msgstr ""
|
704 |
|
705 |
+
#: includes/Admin.php:251
|
706 |
msgid "Choose a main category"
|
707 |
msgstr ""
|
708 |
|
709 |
+
#: includes/Admin.php:252
|
710 |
msgid "Choose a category"
|
711 |
msgstr ""
|
712 |
|
713 |
+
#: includes/Admin.php:309
|
714 |
msgid ""
|
715 |
"To sell this product on Instagram, please ensure it meets the following "
|
716 |
"requirements:"
|
717 |
msgstr ""
|
718 |
|
719 |
+
#: includes/Admin.php:312
|
720 |
msgid "Has a price defined"
|
721 |
msgstr ""
|
722 |
|
723 |
+
#: includes/Admin.php:318
|
724 |
#. translators: Placeholders: %1$s - <strong> opening HTML tag, %2$s -
|
725 |
#. </strong> closing HTML tag
|
726 |
msgid "Has %1$sManage Stock%2$s enabled on the %1$sInventory%2$s tab"
|
727 |
msgstr ""
|
728 |
|
729 |
+
#: includes/Admin.php:330
|
730 |
#. translators: Placeholders: %1$s - <strong> opening HTML tag, %2$s -
|
731 |
#. </strong> closing HTML tag
|
732 |
msgid ""
|
734 |
"and hide\""
|
735 |
msgstr ""
|
736 |
|
737 |
+
#: includes/Admin.php:359
|
738 |
msgid "Close"
|
739 |
msgstr ""
|
740 |
|
741 |
+
#: includes/Admin.php:384
|
742 |
#. translators: Placeholders: %1$s - opening <a> link tag, %2$s - closing </a>
|
743 |
#. link tag
|
744 |
msgid ""
|
747 |
"the Facebook catalog as well?"
|
748 |
msgstr ""
|
749 |
|
750 |
+
#: includes/Admin.php:413
|
751 |
msgid "Remove from sync only"
|
752 |
msgstr ""
|
753 |
|
754 |
+
#: includes/Admin.php:417
|
755 |
msgid "Remove from sync and delete"
|
756 |
msgstr ""
|
757 |
|
758 |
+
#: includes/Admin.php:453 includes/Admin.php:1296 includes/Admin.php:1438
|
759 |
msgid "Facebook sync"
|
760 |
msgstr ""
|
761 |
|
762 |
+
#: includes/Admin.php:480 includes/Admin.php:511
|
763 |
msgid "Sync and show"
|
764 |
msgstr ""
|
765 |
|
766 |
+
#: includes/Admin.php:482 includes/Admin.php:512
|
767 |
msgid "Sync and hide"
|
768 |
msgstr ""
|
769 |
|
770 |
+
#: includes/Admin.php:486 includes/Admin.php:513 includes/Admin.php:1300
|
771 |
+
#: includes/Admin.php:1442
|
772 |
msgid "Do not sync"
|
773 |
msgstr ""
|
774 |
|
775 |
+
#: includes/Admin.php:510
|
776 |
msgid "Filter by Facebook sync setting"
|
777 |
msgstr ""
|
778 |
|
779 |
+
#: includes/Admin.php:923
|
780 |
msgid "Include in Facebook sync"
|
781 |
msgstr ""
|
782 |
|
783 |
+
#: includes/Admin.php:924
|
784 |
msgid "Exclude from Facebook sync"
|
785 |
msgstr ""
|
786 |
|
787 |
+
#: includes/Admin.php:1117
|
788 |
#. translators: Placeholders: %1$s - <strong> tag, %2$s - </strong> tag, %3$s -
|
789 |
#. <a> tag, %4$s - <a> tag
|
790 |
msgid ""
|
798 |
msgstr[0] ""
|
799 |
msgstr[1] ""
|
800 |
|
801 |
+
#: includes/Admin.php:1124
|
802 |
msgid "Don't show this notice again"
|
803 |
msgstr ""
|
804 |
|
805 |
+
#: includes/Admin.php:1158
|
806 |
#. translators: Placeholders: %1$s - number of affected products, %2$s opening
|
807 |
#. HTML <a> tag, %3$s - closing HTML </a> tag, %4$s - opening HTML <a> tag,
|
808 |
#. %5$s - closing HTML </a> tag
|
819 |
msgstr[0] ""
|
820 |
msgstr[1] ""
|
821 |
|
822 |
+
#: includes/Admin.php:1224
|
823 |
#. translators: Placeholders: %1$s - opening HTML <strong> tag, %2$s - closing
|
824 |
#. HTML </strong> tag, %3$s - opening HTML <a> tag, %4$s - closing HTML </a>
|
825 |
#. tag
|
829 |
"your Facebook catalog. You may still advertise Virtual products on Facebook."
|
830 |
msgstr ""
|
831 |
|
832 |
+
#: includes/Admin.php:1298 includes/Admin.php:1440
|
833 |
msgid "Sync and show in catalog"
|
834 |
msgstr ""
|
835 |
|
836 |
+
#: includes/Admin.php:1299 includes/Admin.php:1441
|
837 |
msgid "Sync and hide in catalog"
|
838 |
msgstr ""
|
839 |
|
840 |
+
#: includes/Admin.php:1309 includes/Admin.php:1454
|
841 |
msgid "Facebook Description"
|
842 |
msgstr ""
|
843 |
|
844 |
+
#: includes/Admin.php:1311 includes/Admin.php:1456
|
845 |
msgid ""
|
846 |
"Custom (plain-text only) description for product on Facebook. If blank, "
|
847 |
"product description will be used. If product description is blank, "
|
848 |
"shortname will be used."
|
849 |
msgstr ""
|
850 |
|
851 |
+
#: includes/Admin.php:1322 includes/Admin.php:1469
|
852 |
msgid "Facebook Product Image"
|
853 |
msgstr ""
|
854 |
|
855 |
+
#: includes/Admin.php:1324 includes/Admin.php:1471
|
856 |
msgid ""
|
857 |
"Choose the product image that should be synced to the Facebook catalog for "
|
858 |
"this product. If using a custom image, please enter an absolute URL (e.g. "
|
859 |
"https://domain.com/image.jpg)."
|
860 |
msgstr ""
|
861 |
|
862 |
+
#: includes/Admin.php:1326
|
863 |
msgid "Use WooCommerce image"
|
864 |
msgstr ""
|
865 |
|
866 |
+
#: includes/Admin.php:1327 includes/Admin.php:1475
|
867 |
msgid "Use custom image"
|
868 |
msgstr ""
|
869 |
|
870 |
+
#: includes/Admin.php:1338 includes/Admin.php:1487
|
871 |
msgid "Custom Image URL"
|
872 |
msgstr ""
|
873 |
|
874 |
+
#: includes/Admin.php:1349 includes/Admin.php:1500
|
875 |
#. translators: Placeholders %1$s - WC currency symbol
|
876 |
msgid "Facebook Price (%1$s)"
|
877 |
msgstr ""
|
878 |
|
879 |
+
#: includes/Admin.php:1353 includes/Admin.php:1504
|
880 |
msgid ""
|
881 |
"Custom price for product on Facebook. Please enter in monetary decimal (.) "
|
882 |
"format without thousand separators and currency symbols. If blank, product "
|
883 |
"price will be used."
|
884 |
msgstr ""
|
885 |
|
886 |
+
#: includes/Admin.php:1473
|
887 |
msgid "Use variation image"
|
888 |
msgstr ""
|
889 |
|
890 |
+
#: includes/Admin.php:1474
|
891 |
msgid "Use parent image"
|
892 |
msgstr ""
|
893 |
|
894 |
+
#: includes/Admin.php:1628
|
895 |
msgid "Close modal panel"
|
896 |
msgstr ""
|
897 |
|
976 |
msgid "Other"
|
977 |
msgstr ""
|
978 |
|
979 |
+
#: includes/Handlers/Connection.php:298
|
980 |
msgid "Connection successful!"
|
981 |
msgstr ""
|
982 |
|
983 |
+
#: includes/Handlers/Connection.php:352
|
984 |
msgid "You do not have permission to uninstall Facebook Business Extension."
|
985 |
msgstr ""
|
986 |
|
987 |
+
#: includes/Handlers/Connection.php:362
|
988 |
msgid "Disconnection successful."
|
989 |
msgstr ""
|
990 |
|
991 |
+
#: includes/Handlers/Connection.php:428
|
992 |
#. translators: Placeholders: %s - API error message
|
993 |
msgid "Could not retrieve page access data. %s"
|
994 |
msgstr ""
|
995 |
|
996 |
+
#: includes/Handlers/Connection.php:442
|
997 |
#. translators: Placeholders: %s - Facebook page ID
|
998 |
msgid "Page %s not authorized."
|
999 |
msgstr ""
|
1000 |
|
1001 |
+
#: includes/Handlers/Connection.php:1415
|
1002 |
msgid "You do not have permission to finish App Store login."
|
1003 |
msgstr ""
|
1004 |
|
includes/API/FBE/Installation/Read/Response.php
CHANGED
@@ -84,12 +84,13 @@ class Response extends API\Response {
|
|
84 |
*/
|
85 |
public function get_page_id() {
|
86 |
|
87 |
-
$pages = $this->get_data()->pages
|
|
|
|
|
88 |
|
89 |
-
return
|
90 |
}
|
91 |
|
92 |
-
|
93 |
/**
|
94 |
* Gets Instagram Business ID.
|
95 |
*
|
84 |
*/
|
85 |
public function get_page_id() {
|
86 |
|
87 |
+
if ( empty( $pages = $this->get_data()->pages ) ) {
|
88 |
+
return '';
|
89 |
+
}
|
90 |
|
91 |
+
return is_array( $pages ) ? current( $pages ) : $pages;
|
92 |
}
|
93 |
|
|
|
94 |
/**
|
95 |
* Gets Instagram Business ID.
|
96 |
*
|
includes/Admin.php
CHANGED
@@ -173,6 +173,16 @@ class Admin {
|
|
173 |
\WC_Facebookcommerce::PLUGIN_VERSION,
|
174 |
true
|
175 |
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
176 |
}
|
177 |
|
178 |
if ( 'product' === $current_screen->id || 'edit-product' === $current_screen->id ) {
|
173 |
\WC_Facebookcommerce::PLUGIN_VERSION,
|
174 |
true
|
175 |
);
|
176 |
+
|
177 |
+
wp_localize_script(
|
178 |
+
'facebook-for-woocommerce-product-sets',
|
179 |
+
'facebook_for_woocommerce_product_sets',
|
180 |
+
array(
|
181 |
+
|
182 |
+
'excluded_category_ids' => facebook_for_woocommerce()->get_integration()->get_excluded_product_category_ids(),
|
183 |
+
'excluded_category_warning_message' => __( 'You have selected one or more categories currently excluded from the Facebook sync. Products belonging to the excluded categories will not be added to your FB product set.', 'facebook-for-woocommerce' ),
|
184 |
+
)
|
185 |
+
);
|
186 |
}
|
187 |
|
188 |
if ( 'product' === $current_screen->id || 'edit-product' === $current_screen->id ) {
|
includes/Admin/Settings_Screens/Messenger.php
CHANGED
@@ -28,10 +28,6 @@ class Messenger extends Admin\Abstract_Settings_Screen {
|
|
28 |
const ID = 'messenger';
|
29 |
|
30 |
|
31 |
-
/** @var null|Configuration\Messenger */
|
32 |
-
private $remote_configuration;
|
33 |
-
|
34 |
-
|
35 |
/**
|
36 |
* Connection constructor.
|
37 |
*/
|
@@ -72,11 +68,7 @@ class Messenger extends Admin\Abstract_Settings_Screen {
|
|
72 |
*/
|
73 |
public function render_locale_field( $field ) {
|
74 |
|
75 |
-
|
76 |
-
return;
|
77 |
-
}
|
78 |
-
|
79 |
-
$configured_locale = $this->remote_configuration->get_default_locale();
|
80 |
$supported_locales = Locale::get_supported_locales();
|
81 |
|
82 |
if ( ! empty( $supported_locales[ $configured_locale ] ) ) {
|
@@ -140,7 +132,7 @@ class Messenger extends Admin\Abstract_Settings_Screen {
|
|
140 |
*/
|
141 |
public function get_settings() {
|
142 |
|
143 |
-
$is_enabled =
|
144 |
|
145 |
$settings = array(
|
146 |
|
@@ -155,12 +147,12 @@ class Messenger extends Admin\Abstract_Settings_Screen {
|
|
155 |
'type' => 'checkbox',
|
156 |
'desc' => __( 'Enable and customize Facebook Messenger on your store', 'facebook-for-woocommerce' ),
|
157 |
'default' => 'no',
|
158 |
-
'value' => $is_enabled
|
159 |
),
|
160 |
);
|
161 |
|
162 |
// only add the static configuration display if messenger is enabled
|
163 |
-
if ( $is_enabled ) {
|
164 |
|
165 |
$settings[] = array(
|
166 |
'title' => __( 'Language', 'facebook-for-woocommerce' ),
|
@@ -196,68 +188,6 @@ class Messenger extends Admin\Abstract_Settings_Screen {
|
|
196 |
);
|
197 |
}
|
198 |
|
199 |
-
|
200 |
-
/**
|
201 |
-
* Renders the settings page.
|
202 |
-
*
|
203 |
-
* This is overridden to pull the latest FBE configuration so the settings can be populated correctly.
|
204 |
-
*
|
205 |
-
* @since 2.0.0
|
206 |
-
*/
|
207 |
-
public function render() {
|
208 |
-
|
209 |
-
// if not connected, don't try and retrieve any settings and just fall back to standard display
|
210 |
-
if ( ! facebook_for_woocommerce()->get_connection_handler()->is_connected() ) {
|
211 |
-
parent::render();
|
212 |
-
return;
|
213 |
-
}
|
214 |
-
|
215 |
-
$plugin = facebook_for_woocommerce();
|
216 |
-
|
217 |
-
try {
|
218 |
-
|
219 |
-
$response = $plugin->get_api()->get_business_configuration( $plugin->get_connection_handler()->get_external_business_id() );
|
220 |
-
|
221 |
-
$configuration = $response->get_messenger_configuration();
|
222 |
-
|
223 |
-
if ( ! $configuration ) {
|
224 |
-
throw new Framework\SV_WC_API_Exception( 'Could not retrieve latest messenger configuration' );
|
225 |
-
}
|
226 |
-
|
227 |
-
update_option( \WC_Facebookcommerce_Integration::SETTING_ENABLE_MESSENGER, wc_bool_to_string( $configuration->is_enabled() ) );
|
228 |
-
|
229 |
-
if ( $default_locale = $configuration->get_default_locale() ) {
|
230 |
-
update_option( \WC_Facebookcommerce_Integration::SETTING_MESSENGER_LOCALE, $default_locale );
|
231 |
-
}
|
232 |
-
|
233 |
-
// set the remote configuration so other methods can use its values
|
234 |
-
$this->remote_configuration = $configuration;
|
235 |
-
|
236 |
-
parent::render();
|
237 |
-
|
238 |
-
} catch ( Framework\SV_WC_API_Exception $exception ) {
|
239 |
-
|
240 |
-
?>
|
241 |
-
<div class="notice notice-error">
|
242 |
-
<p>
|
243 |
-
<?php
|
244 |
-
printf(
|
245 |
-
/* translators: Placeholders: %1$s - <a> tag, %2$s - </a> tag */
|
246 |
-
esc_html__( 'There was an error communicating with the Facebook Business Extension. %1$sClick here%2$s to manage your Messenger settings.', 'facebook-for-woocommerce' ),
|
247 |
-
'<a href="' . esc_url( $plugin->get_connection_handler()->get_manage_url() ) . '" target="_blank">',
|
248 |
-
'</a>'
|
249 |
-
);
|
250 |
-
?>
|
251 |
-
</p>
|
252 |
-
</div>
|
253 |
-
<?php
|
254 |
-
|
255 |
-
// always log this error, regardless of debug setting
|
256 |
-
$plugin->log( 'Could not display messenger settings. ' . $exception->getMessage() );
|
257 |
-
}
|
258 |
-
}
|
259 |
-
|
260 |
-
|
261 |
/**
|
262 |
* Saves the settings.
|
263 |
*
|
@@ -302,9 +232,23 @@ class Messenger extends Admin\Abstract_Settings_Screen {
|
|
302 |
$configuration->set_enabled( $setting_enabled );
|
303 |
$configuration->add_domain( home_url( '/' ) );
|
304 |
|
305 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
306 |
|
307 |
delete_transient( 'wc_facebook_business_configuration_refresh' );
|
|
|
308 |
}
|
309 |
|
310 |
// save any real settings
|
28 |
const ID = 'messenger';
|
29 |
|
30 |
|
|
|
|
|
|
|
|
|
31 |
/**
|
32 |
* Connection constructor.
|
33 |
*/
|
68 |
*/
|
69 |
public function render_locale_field( $field ) {
|
70 |
|
71 |
+
$configured_locale = get_option( \WC_Facebookcommerce_Integration::SETTING_MESSENGER_LOCALE, '' );;
|
|
|
|
|
|
|
|
|
72 |
$supported_locales = Locale::get_supported_locales();
|
73 |
|
74 |
if ( ! empty( $supported_locales[ $configured_locale ] ) ) {
|
132 |
*/
|
133 |
public function get_settings() {
|
134 |
|
135 |
+
$is_enabled = get_option( \WC_Facebookcommerce_Integration::SETTING_ENABLE_MESSENGER, 'no' );
|
136 |
|
137 |
$settings = array(
|
138 |
|
147 |
'type' => 'checkbox',
|
148 |
'desc' => __( 'Enable and customize Facebook Messenger on your store', 'facebook-for-woocommerce' ),
|
149 |
'default' => 'no',
|
150 |
+
'value' => $is_enabled,
|
151 |
),
|
152 |
);
|
153 |
|
154 |
// only add the static configuration display if messenger is enabled
|
155 |
+
if ( 'yes' === $is_enabled ) {
|
156 |
|
157 |
$settings[] = array(
|
158 |
'title' => __( 'Language', 'facebook-for-woocommerce' ),
|
188 |
);
|
189 |
}
|
190 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
191 |
/**
|
192 |
* Saves the settings.
|
193 |
*
|
232 |
$configuration->set_enabled( $setting_enabled );
|
233 |
$configuration->add_domain( home_url( '/' ) );
|
234 |
|
235 |
+
try {
|
236 |
+
$plugin->get_api()->update_messenger_configuration( $external_business_id, $configuration );
|
237 |
+
|
238 |
+
update_option( \WC_Facebookcommerce_Integration::SETTING_ENABLE_MESSENGER, wc_bool_to_string( $configuration->is_enabled() ) );
|
239 |
+
|
240 |
+
if ( $default_locale = $configuration->get_default_locale() ) {
|
241 |
+
update_option( \WC_Facebookcommerce_Integration::SETTING_MESSENGER_LOCALE, $default_locale );
|
242 |
+
}
|
243 |
+
} catch ( Framework\SV_WC_API_Exception $exception ) {
|
244 |
+
|
245 |
+
// always log this error, regardless of debug setting
|
246 |
+
$plugin->log( 'Could not display messenger settings. ' . $exception->getMessage() );
|
247 |
+
|
248 |
+
}
|
249 |
|
250 |
delete_transient( 'wc_facebook_business_configuration_refresh' );
|
251 |
+
|
252 |
}
|
253 |
|
254 |
// save any real settings
|
includes/Handlers/Connection.php
CHANGED
@@ -148,24 +148,6 @@ class Connection {
|
|
148 |
$response->is_ig_cta_enabled()
|
149 |
);
|
150 |
|
151 |
-
// update the messenger settings
|
152 |
-
if ( $messenger_configuration = $response->get_messenger_configuration() ) {
|
153 |
-
|
154 |
-
// store the local "enabled" setting
|
155 |
-
update_option( \WC_Facebookcommerce_Integration::SETTING_ENABLE_MESSENGER, wc_bool_to_string( $messenger_configuration->is_enabled() ) );
|
156 |
-
|
157 |
-
if ( $default_locale = $messenger_configuration->get_default_locale() ) {
|
158 |
-
update_option( \WC_Facebookcommerce_Integration::SETTING_MESSENGER_LOCALE, sanitize_text_field( $default_locale ) );
|
159 |
-
}
|
160 |
-
|
161 |
-
// if the site's domain is somehow missing from the allowed domains, re-add it
|
162 |
-
if ( $messenger_configuration->is_enabled() && ! in_array( home_url( '/' ), $messenger_configuration->get_domains(), true ) ) {
|
163 |
-
|
164 |
-
$messenger_configuration->add_domain( home_url( '/' ) );
|
165 |
-
|
166 |
-
$this->get_plugin()->get_api()->update_messenger_configuration( $this->get_external_business_id(), $messenger_configuration );
|
167 |
-
}
|
168 |
-
}
|
169 |
} catch ( SV_WC_API_Exception $exception ) {
|
170 |
|
171 |
$this->get_plugin()->log( 'Could not refresh business configuration. ' . $exception->getMessage() );
|
148 |
$response->is_ig_cta_enabled()
|
149 |
);
|
150 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
151 |
} catch ( SV_WC_API_Exception $exception ) {
|
152 |
|
153 |
$this->get_plugin()->log( 'Could not refresh business configuration. ' . $exception->getMessage() );
|
readme.txt
CHANGED
@@ -2,8 +2,8 @@
|
|
2 |
Contributors: facebook, automattic, woothemes
|
3 |
Tags: facebook, shop, catalog, advertise, pixel, product
|
4 |
Requires at least: 4.4
|
5 |
-
Tested up to: 6.0
|
6 |
-
Stable tag: 2.6.
|
7 |
Requires PHP: 5.6 or greater
|
8 |
MySQL: 5.6 or greater
|
9 |
License: GPLv2 or later
|
@@ -39,44 +39,50 @@ When opening a bug on GitHub, please give us as many details as possible.
|
|
39 |
|
40 |
== Changelog ==
|
41 |
|
42 |
-
= 2.6.
|
43 |
-
*
|
44 |
-
* Fix -
|
45 |
-
* Fix -
|
46 |
-
*
|
47 |
-
* Update - Facebook Business Extension flow from COMMERCE_OFFSITE to DEFAULT.
|
48 |
|
49 |
-
= 2.6.
|
50 |
-
*
|
51 |
-
* Fix -
|
52 |
-
*
|
53 |
-
* Tweak -
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
*
|
58 |
-
|
59 |
-
|
60 |
-
*
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
*
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
*
|
73 |
-
*
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
*
|
78 |
-
|
79 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
80 |
* Fix - Do not set `sale_price` when the product is not on sale.
|
81 |
* Fix - FB Pixel is missing some ajax Add to cart events.
|
82 |
* Fix - Feed visibility field value for hidden items.
|
2 |
Contributors: facebook, automattic, woothemes
|
3 |
Tags: facebook, shop, catalog, advertise, pixel, product
|
4 |
Requires at least: 4.4
|
5 |
+
Tested up to: 6.0
|
6 |
+
Stable tag: 2.6.23
|
7 |
Requires PHP: 5.6 or greater
|
8 |
MySQL: 5.6 or greater
|
9 |
License: GPLv2 or later
|
39 |
|
40 |
== Changelog ==
|
41 |
|
42 |
+
= 2.6.23 - 2022-09-13 =
|
43 |
+
* Add - Show warning when creating product set with excluded categories.
|
44 |
+
* Fix - Messenger settings are no longer overridden after business config refresh.
|
45 |
+
* Fix - PHP notice thrown by get_page_id() in facebook-for-woocommerce/includes/API/FBE/Installation/Read/Response.php.
|
46 |
+
* Fix - When disabling Enable Messenger on the Messenger setting page, the setting does not persist after selecting Save Changes.
|
|
|
47 |
|
48 |
+
= 2.6.22 - 2022-09-06 =
|
49 |
+
* Fix - Adding an excluded category doesn't remove that category synced products.
|
50 |
+
* Fix - Ensure content_name and content_ids addToCart pixel event properties are correct for variable products when redirect to cart is enabled in WooCommerce.
|
51 |
+
* Fix - Remove out-of-stock products on Facebook when the "Hide out of stock items from the catalog" option in WooCommerce is checked.
|
52 |
+
* Tweak - WC 6.9 compatibility.
|
53 |
+
* Update - Facebook Business Extension flow from COMMERCE_OFFSITE to DEFAULT.
|
54 |
+
|
55 |
+
= 2.6.21 - 2022-08-16 =
|
56 |
+
* Dev - Add branch-labels GH workflow.
|
57 |
+
* Fix - `Undefined array key "HTTP_REFERER"` not longer happens when `new Event` is triggered from an AJAX call that doesn't include a referrer (likely due to browser configuration).
|
58 |
+
* Tweak - WC 6.8 compatibility.
|
59 |
+
* Tweak - WP 6.0 compatibility.
|
60 |
+
|
61 |
+
= 2.6.20 - 2022-08-09 =
|
62 |
+
* Fix - Ensure product is deleted from FB when moved to trash.
|
63 |
+
* Fix - Price not updating when the sale price is removed.
|
64 |
+
|
65 |
+
= 2.6.19 - 2022-07-27 =
|
66 |
+
* Add - `wc_facebook_string_apply_shortcodes` filter to check whether to apply shortcodes on a string before syncing.
|
67 |
+
* Tweak - Use the Heartbeat system to refresh the local business configuration data with the latest from Facebook.
|
68 |
+
* Tweak - WC 6.8 compatibility.
|
69 |
+
|
70 |
+
= 2.6.18 - 2022-07-19 =
|
71 |
+
* Fix - Misaligned help icons on Product Categories > Google Product Categories form.
|
72 |
+
* Fix - Syncing WC custom placeholder to Facebook shop.
|
73 |
+
* Fix - is_search() causing fatal error when custom queries are used.
|
74 |
+
|
75 |
+
= 2.6.17 - 2022-07-06 =
|
76 |
+
* Fix - Add allow-plugins directive and adjust phpcs GitHub workflow.
|
77 |
+
* Fix - Scheduled product not synced when status becomes "publish".
|
78 |
+
* Tweak - WooCommerce 6.7 compatibility.
|
79 |
+
* Update - Facebook Marketing API from v12.0 to v13.0.
|
80 |
+
|
81 |
+
= 2.6.16 - 2022-06-07 =
|
82 |
+
* Fix - Updating reference from old master branch.
|
83 |
+
* Tweak - WC 6.6 compatibility.
|
84 |
+
|
85 |
+
= 2.6.15 - 2022-06-01 =
|
86 |
* Fix - Do not set `sale_price` when the product is not on sale.
|
87 |
* Fix - FB Pixel is missing some ajax Add to cart events.
|
88 |
* Fix - Feed visibility field value for hidden items.
|
vendor/autoload.php
CHANGED
@@ -9,4 +9,4 @@ if (PHP_VERSION_ID < 50600) {
|
|
9 |
|
10 |
require_once __DIR__ . '/composer/autoload_real.php';
|
11 |
|
12 |
-
return
|
9 |
|
10 |
require_once __DIR__ . '/composer/autoload_real.php';
|
11 |
|
12 |
+
return ComposerAutoloaderInit3b7fe4ae71dbfe51c3123dd8619deb69::getLoader();
|
vendor/composer/InstalledVersions.php
CHANGED
@@ -28,7 +28,7 @@ class InstalledVersions
|
|
28 |
{
|
29 |
/**
|
30 |
* @var mixed[]|null
|
31 |
-
* @psalm-var array{root: array{name: string,
|
32 |
*/
|
33 |
private static $installed;
|
34 |
|
@@ -39,7 +39,7 @@ class InstalledVersions
|
|
39 |
|
40 |
/**
|
41 |
* @var array[]
|
42 |
-
* @psalm-var array<string, array{root: array{name: string,
|
43 |
*/
|
44 |
private static $installedByVendor = array();
|
45 |
|
@@ -243,7 +243,7 @@ class InstalledVersions
|
|
243 |
|
244 |
/**
|
245 |
* @return array
|
246 |
-
* @psalm-return array{name: string,
|
247 |
*/
|
248 |
public static function getRootPackage()
|
249 |
{
|
@@ -257,7 +257,7 @@ class InstalledVersions
|
|
257 |
*
|
258 |
* @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
|
259 |
* @return array[]
|
260 |
-
* @psalm-return array{root: array{name: string,
|
261 |
*/
|
262 |
public static function getRawData()
|
263 |
{
|
@@ -280,7 +280,7 @@ class InstalledVersions
|
|
280 |
* Returns the raw data of all installed.php which are currently loaded for custom implementations
|
281 |
*
|
282 |
* @return array[]
|
283 |
-
* @psalm-return list<array{root: array{name: string,
|
284 |
*/
|
285 |
public static function getAllRawData()
|
286 |
{
|
@@ -303,7 +303,7 @@ class InstalledVersions
|
|
303 |
* @param array[] $data A vendor/composer/installed.php data set
|
304 |
* @return void
|
305 |
*
|
306 |
-
* @psalm-param array{root: array{name: string,
|
307 |
*/
|
308 |
public static function reload($data)
|
309 |
{
|
@@ -313,7 +313,7 @@ class InstalledVersions
|
|
313 |
|
314 |
/**
|
315 |
* @return array[]
|
316 |
-
* @psalm-return list<array{root: array{name: string,
|
317 |
*/
|
318 |
private static function getInstalled()
|
319 |
{
|
28 |
{
|
29 |
/**
|
30 |
* @var mixed[]|null
|
31 |
+
* @psalm-var array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}|array{}|null
|
32 |
*/
|
33 |
private static $installed;
|
34 |
|
39 |
|
40 |
/**
|
41 |
* @var array[]
|
42 |
+
* @psalm-var array<string, array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
|
43 |
*/
|
44 |
private static $installedByVendor = array();
|
45 |
|
243 |
|
244 |
/**
|
245 |
* @return array
|
246 |
+
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}
|
247 |
*/
|
248 |
public static function getRootPackage()
|
249 |
{
|
257 |
*
|
258 |
* @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
|
259 |
* @return array[]
|
260 |
+
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}
|
261 |
*/
|
262 |
public static function getRawData()
|
263 |
{
|
280 |
* Returns the raw data of all installed.php which are currently loaded for custom implementations
|
281 |
*
|
282 |
* @return array[]
|
283 |
+
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
|
284 |
*/
|
285 |
public static function getAllRawData()
|
286 |
{
|
303 |
* @param array[] $data A vendor/composer/installed.php data set
|
304 |
* @return void
|
305 |
*
|
306 |
+
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} $data
|
307 |
*/
|
308 |
public static function reload($data)
|
309 |
{
|
313 |
|
314 |
/**
|
315 |
* @return array[]
|
316 |
+
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
|
317 |
*/
|
318 |
private static function getInstalled()
|
319 |
{
|
vendor/composer/autoload_real.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
|
3 |
// autoload_real.php @generated by Composer
|
4 |
|
5 |
-
class
|
6 |
{
|
7 |
private static $loader;
|
8 |
|
@@ -24,12 +24,12 @@ class ComposerAutoloaderInitbb699a0c32a522adc2681dad8ff45e89
|
|
24 |
|
25 |
require __DIR__ . '/platform_check.php';
|
26 |
|
27 |
-
spl_autoload_register(array('
|
28 |
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
|
29 |
-
spl_autoload_unregister(array('
|
30 |
|
31 |
require __DIR__ . '/autoload_static.php';
|
32 |
-
call_user_func(\Composer\Autoload\
|
33 |
|
34 |
$loader->register(true);
|
35 |
|
2 |
|
3 |
// autoload_real.php @generated by Composer
|
4 |
|
5 |
+
class ComposerAutoloaderInit3b7fe4ae71dbfe51c3123dd8619deb69
|
6 |
{
|
7 |
private static $loader;
|
8 |
|
24 |
|
25 |
require __DIR__ . '/platform_check.php';
|
26 |
|
27 |
+
spl_autoload_register(array('ComposerAutoloaderInit3b7fe4ae71dbfe51c3123dd8619deb69', 'loadClassLoader'), true, true);
|
28 |
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
|
29 |
+
spl_autoload_unregister(array('ComposerAutoloaderInit3b7fe4ae71dbfe51c3123dd8619deb69', 'loadClassLoader'));
|
30 |
|
31 |
require __DIR__ . '/autoload_static.php';
|
32 |
+
call_user_func(\Composer\Autoload\ComposerStaticInit3b7fe4ae71dbfe51c3123dd8619deb69::getInitializer($loader));
|
33 |
|
34 |
$loader->register(true);
|
35 |
|
vendor/composer/autoload_static.php
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
|
5 |
namespace Composer\Autoload;
|
6 |
|
7 |
-
class
|
8 |
{
|
9 |
public static $prefixLengthsPsr4 = array (
|
10 |
'S' =>
|
@@ -43,9 +43,9 @@ class ComposerStaticInitbb699a0c32a522adc2681dad8ff45e89
|
|
43 |
public static function getInitializer(ClassLoader $loader)
|
44 |
{
|
45 |
return \Closure::bind(function () use ($loader) {
|
46 |
-
$loader->prefixLengthsPsr4 =
|
47 |
-
$loader->prefixDirsPsr4 =
|
48 |
-
$loader->classMap =
|
49 |
|
50 |
}, null, ClassLoader::class);
|
51 |
}
|
4 |
|
5 |
namespace Composer\Autoload;
|
6 |
|
7 |
+
class ComposerStaticInit3b7fe4ae71dbfe51c3123dd8619deb69
|
8 |
{
|
9 |
public static $prefixLengthsPsr4 = array (
|
10 |
'S' =>
|
43 |
public static function getInitializer(ClassLoader $loader)
|
44 |
{
|
45 |
return \Closure::bind(function () use ($loader) {
|
46 |
+
$loader->prefixLengthsPsr4 = ComposerStaticInit3b7fe4ae71dbfe51c3123dd8619deb69::$prefixLengthsPsr4;
|
47 |
+
$loader->prefixDirsPsr4 = ComposerStaticInit3b7fe4ae71dbfe51c3123dd8619deb69::$prefixDirsPsr4;
|
48 |
+
$loader->classMap = ComposerStaticInit3b7fe4ae71dbfe51c3123dd8619deb69::$classMap;
|
49 |
|
50 |
}, null, ClassLoader::class);
|
51 |
}
|
vendor/composer/installed.php
CHANGED
@@ -1,31 +1,31 @@
|
|
1 |
<?php return array(
|
2 |
'root' => array(
|
3 |
-
'
|
4 |
-
'
|
5 |
-
'version' => 'dev-release/2.6.22',
|
6 |
-
'reference' => '9ae1b2600fc65390b7a298df2ad1b195bfa9dd4e',
|
7 |
'type' => 'wordpress-plugin',
|
8 |
'install_path' => __DIR__ . '/../../',
|
9 |
'aliases' => array(),
|
|
|
|
|
10 |
'dev' => false,
|
11 |
),
|
12 |
'versions' => array(
|
13 |
'composer/installers' => array(
|
14 |
'pretty_version' => 'v1.12.0',
|
15 |
'version' => '1.12.0.0',
|
16 |
-
'reference' => 'd20a64ed3c94748397ff5973488761b22f6d3f19',
|
17 |
'type' => 'composer-plugin',
|
18 |
'install_path' => __DIR__ . '/./installers',
|
19 |
'aliases' => array(),
|
|
|
20 |
'dev_requirement' => false,
|
21 |
),
|
22 |
'facebookincubator/facebook-for-woocommerce' => array(
|
23 |
-
'pretty_version' => 'dev-release/2.6.
|
24 |
-
'version' => 'dev-release/2.6.
|
25 |
-
'reference' => '9ae1b2600fc65390b7a298df2ad1b195bfa9dd4e',
|
26 |
'type' => 'wordpress-plugin',
|
27 |
'install_path' => __DIR__ . '/../../',
|
28 |
'aliases' => array(),
|
|
|
29 |
'dev_requirement' => false,
|
30 |
),
|
31 |
'roundcube/plugin-installer' => array(
|
@@ -43,19 +43,19 @@
|
|
43 |
'skyverge/wc-plugin-framework' => array(
|
44 |
'pretty_version' => '5.10.0',
|
45 |
'version' => '5.10.0.0',
|
46 |
-
'reference' => 'e230d7c40286854e49c0cafeec3398cbf2427a64',
|
47 |
'type' => 'library',
|
48 |
'install_path' => __DIR__ . '/../skyverge/wc-plugin-framework',
|
49 |
'aliases' => array(),
|
|
|
50 |
'dev_requirement' => false,
|
51 |
),
|
52 |
'woocommerce/action-scheduler-job-framework' => array(
|
53 |
'pretty_version' => '2.0.0',
|
54 |
'version' => '2.0.0.0',
|
55 |
-
'reference' => 'b0b21b9cc87e476ba7f8817050b39274ea7d6732',
|
56 |
'type' => 'library',
|
57 |
'install_path' => __DIR__ . '/../woocommerce/action-scheduler-job-framework',
|
58 |
'aliases' => array(),
|
|
|
59 |
'dev_requirement' => false,
|
60 |
),
|
61 |
),
|
1 |
<?php return array(
|
2 |
'root' => array(
|
3 |
+
'pretty_version' => 'dev-release/2.6.23',
|
4 |
+
'version' => 'dev-release/2.6.23',
|
|
|
|
|
5 |
'type' => 'wordpress-plugin',
|
6 |
'install_path' => __DIR__ . '/../../',
|
7 |
'aliases' => array(),
|
8 |
+
'reference' => '2777386e9cae9f39dd385db8f311d95c99e225a6',
|
9 |
+
'name' => 'facebookincubator/facebook-for-woocommerce',
|
10 |
'dev' => false,
|
11 |
),
|
12 |
'versions' => array(
|
13 |
'composer/installers' => array(
|
14 |
'pretty_version' => 'v1.12.0',
|
15 |
'version' => '1.12.0.0',
|
|
|
16 |
'type' => 'composer-plugin',
|
17 |
'install_path' => __DIR__ . '/./installers',
|
18 |
'aliases' => array(),
|
19 |
+
'reference' => 'd20a64ed3c94748397ff5973488761b22f6d3f19',
|
20 |
'dev_requirement' => false,
|
21 |
),
|
22 |
'facebookincubator/facebook-for-woocommerce' => array(
|
23 |
+
'pretty_version' => 'dev-release/2.6.23',
|
24 |
+
'version' => 'dev-release/2.6.23',
|
|
|
25 |
'type' => 'wordpress-plugin',
|
26 |
'install_path' => __DIR__ . '/../../',
|
27 |
'aliases' => array(),
|
28 |
+
'reference' => '2777386e9cae9f39dd385db8f311d95c99e225a6',
|
29 |
'dev_requirement' => false,
|
30 |
),
|
31 |
'roundcube/plugin-installer' => array(
|
43 |
'skyverge/wc-plugin-framework' => array(
|
44 |
'pretty_version' => '5.10.0',
|
45 |
'version' => '5.10.0.0',
|
|
|
46 |
'type' => 'library',
|
47 |
'install_path' => __DIR__ . '/../skyverge/wc-plugin-framework',
|
48 |
'aliases' => array(),
|
49 |
+
'reference' => 'e230d7c40286854e49c0cafeec3398cbf2427a64',
|
50 |
'dev_requirement' => false,
|
51 |
),
|
52 |
'woocommerce/action-scheduler-job-framework' => array(
|
53 |
'pretty_version' => '2.0.0',
|
54 |
'version' => '2.0.0.0',
|
|
|
55 |
'type' => 'library',
|
56 |
'install_path' => __DIR__ . '/../woocommerce/action-scheduler-job-framework',
|
57 |
'aliases' => array(),
|
58 |
+
'reference' => 'b0b21b9cc87e476ba7f8817050b39274ea7d6732',
|
59 |
'dev_requirement' => false,
|
60 |
),
|
61 |
),
|