<?php
// phpcs:ignoreFile
/**
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved
*
* This source code is licensed under the license found in the
* LICENSE file in the root directory of this source tree.
*
* @package FacebookCommerce
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
if ( ! class_exists( 'WC_Facebook_WPML_Injector' ) ) :
class FB_WPML_Language_Status {
const VISIBLE = 1;
const HIDDEN = 2;
const NOT_SYNCED = 0;
}
class WC_Facebook_WPML_Injector {
public static $settings = null;
public static $default_lang = null;
const OPTION = 'fb_wmpl_language_visibility';
/**
* Constructor for WC_Facebook_WPML_Injector class.
*/
public function __construct() {
self::$settings = get_option( self::OPTION );
self::$default_lang = apply_filters( 'wpml_default_language', null );
if ( is_admin() ) {
add_action( 'icl_menu_footer', array( $this, 'wpml_support' ) );
add_action( 'icl_ajx_custom_call', array( $this, 'wpml_ajax_support' ), 10, 2 );
}
}
public static function should_hide( $wp_id ) {
$product_lang = apply_filters( 'wpml_post_language_details', null, $wp_id );
$settings = self::$settings;
if ( $product_lang && isset( $product_lang['language_code'] ) ) {
$product_lang = $product_lang['language_code'];
}
// Option doesn't exist : Backwards Compatibility
if ( ! $settings ) {
return ( $product_lang && self::$default_lang !== $product_lang );
}
// Hide products from non-active languages.
if ( ! isset( $settings[ $product_lang ] ) ) {
return true;
}
return $settings[ $product_lang ] !== FB_WPML_Language_Status::VISIBLE;
}
public function wpml_ajax_support( $call, $REQUEST ) {
global $sitepress;
if ( isset( $REQUEST['icl_ajx_action'] ) ) {
$call = $REQUEST['icl_ajx_action'];
}
if ( $call === 'icl_fb_woo' ) {
$active_languages = array_keys( $sitepress->get_active_languages() );
$settings = array();
foreach ( $active_languages as $lang ) {
$settings[ $lang ] = $REQUEST[ $lang ] === 'on' ?
FB_WPML_Language_Status::VISIBLE : FB_WPML_Language_Status::HIDDEN;
}
update_option( 'fb_wmpl_language_visibility', $settings, false );
self::$settings = $settings;
}
}
/**
* Prints the content for Facebook Visibility section.
*
* The section is shown at the bottom of the WPML > Languages settings page.
*/
public function wpml_support() {
/** @var object $sitepress */
global $sitepress;
// there is no nonce to check here and the value of $_GET['page] is being compared against a known and safe string
// phpcs:ignore WordPress.Security.NonceVerification.Recommended
if ( isset( $_GET['page'] ) && false !== strpos( esc_url_raw( wp_unslash( $_GET['page'] ) ), 'languages.php' ) ) {
/** @var array $active_languages */
$active_languages = $sitepress->get_active_languages();
$settings = get_option( self::OPTION );
// Default setting is only show default lang.
if ( ! $settings ) {
$settings = array_fill_keys(
array_keys( $active_languages ),
FB_WPML_Language_Status::HIDDEN
);
if ( self::$default_lang ) {
$settings[ self::$default_lang ] = FB_WPML_Language_Status::VISIBLE;
}
}
?>
<div id="lang-sec-fb" class="wpml-section wpml-section-languages">
<div class="wpml-section-header">
<h3><?php esc_html_e( 'Facebook Visibility', 'facebook-for-woocommerce' ); ?></h3>
</div>
<div class="wpml-section-content">
<?php esc_html_e( 'WooCommerce Products with languages that are selected here will be visible to customers who see your Facebook Shop.', 'facebook-for-woocommerce' ); ?>
<div class="wpml-section-content-inner">
<form id="icl_fb_woo" name="icl_fb_woo" action="">
<?php foreach ( $settings as $language => $set ) : ?>
<p>
<label>
<input type="checkbox" id="icl_fb_woo_chk" name="<?php echo esc_attr( $language ); ?>" <?php checked( $set, FB_WPML_Language_Status::VISIBLE ); ?>>
<?php echo isset( $active_languages[ $language ]['native_name'] ) ? esc_html( $active_languages[ $language ]['native_name'] ) : esc_html( $language ); ?>
</label>
</p>
<?php endforeach; ?>
<?php // TODO: restore success message removed in e7f290f when FBE 2.0 changes are available {WV 2020-04-27} ?>
<p class="icl_ajx_response_fb" id="icl_ajx_response_fb" hidden="true"><?php esc_html_e( "Saved. An automated sync from Facebook will run every hour to update the catalog with any changes you've made.", 'facebook-for-woocommerce' ); ?></p>
<p class="buttons-wrap">
<input
class="button button-primary"
name="save"
value="<?php esc_attr_e( 'Save', 'sitepress' ); ?>"
type="submit"
/>
</p>
</form>
<script type="text/javascript">
addLoadEvent( function() {
jQuery( '#icl_fb_woo' ).submit( iclSaveForm );
jQuery( '#icl_fb_woo' ).submit( function() {
jQuery( '#icl_ajx_response_fb' ).show();
} );
} );
</script>
</div>
</div>
</div>
<?php
}
}
}
endif;