oont-contents/plugins/webappick-product-feed-for-woocommerce/V5/Override/CommonOverride.php
2025-03-31 21:42:48 +02:00

154 lines
4.4 KiB
PHP

<?php
/**
* Initiate Common Override for all merchants.
*
* CTX Feed old version compatibility. Previous version of CTX Feed use to save feed config in different way.
* Previous version of CTX Feed use to save feed config without mandatory fields. Like : post_status, product_ids etc.
*
* This override will help to generate feed for old version of CTX Feed.
*
* Also, we can use this override to add any common filter for all merchants.
*
* @since 7.3..0
*
*/
namespace CTXFeed\V5\Override;
use CTXFeed\V5\Helper\FeedHelper;
/**
* Class CommonOverride
*
* @package CTXFeed
* @subpackage CTXFeed\V5\Override
*/
class CommonOverride {
/**
* The single instance of the class
*
* @var CommonOverride
*
*/
protected static $_instance = null;
/**
* Main CommonOverride Instance.
*
* Ensures only one instance of CommonOverride is loaded or can be loaded.
*
* @return CommonOverride Main instance
*/
public function __construct() {
add_filter( 'woo_feed_prepare_item_for_response', array(
$this,
'woo_feed_prepare_item_for_response_callback'
), 10, 2 );
// add_filter( 'woo_feed_insert_feed_data', array(
// $this,
// 'woo_feed_insert_feed_data_callback'
// ), 10, 3 );
add_filter( 'woo_feed_filter_product_description',
array( $this, 'remove_enclosure_from_description' ),
10, 4 );
add_filter( 'woo_feed_filter_product_short_description',
array( $this, 'remove_enclosure_from_description' ),
10, 4 );
add_filter( 'woo_feed_filter_product_title',
array( $this, 'remove_enclosure_from_title' ),
10, 3 );
add_filter( 'woo_feed_filter_product_parent_title',
array( $this, 'remove_enclosure_from_title' ),
10, 3 );
}
/**
* Main RestController Instance.
*
* Ensures only one instance of RestController is loaded or can be loaded.
*
* @return CommonOverride Main instance
*/
public static function instance() {
if ( is_null( self::$_instance ) ) {
self::$_instance = new self();
}
return self::$_instance;
}
/**
* Prepare feed item for response.
*
* @param $item array of feed item.
* @param $actual_value_from_db array of feed item.
*
* @return mixed
*/
public function woo_feed_prepare_item_for_response_callback( $item, $actual_value_from_db ) {
$parsed_rules = [];
if(isset($item['option_value'], $item['option_value']['feedrules'])) {
$parsed_rules = FeedHelper::parse_feed_rules( $item['option_value']['feedrules'] );
}else{
$parsed_rules = FeedHelper::parse_feed_rules( [] );
$item['option_value'] = [ 'feedrules' => []];
}
$item['option_value']['feedrules'] = $parsed_rules;
return $item;
}
public function woo_feed_insert_feed_data_callback( $feed_rules, $old_feed, $feed_option_name ) {
$parsed_rules = FeedHelper::parse_feed_rules( $feed_rules );
return $parsed_rules;
}
/**
* Function to remove single and double quotes from product description if the feed type is CSV.
*
* @param string $description The original product description.
* @param object $product The product object (not used in the function).
* @param object $config The configuration object containing feed information.
* @param object $parent_product The parent product object (not used in the function).
* @return string The sanitized product description without single and double quotes.
*/
function remove_enclosure_from_description( $description, $product, $config, $parent_product ){
if( $config->feed_info['option_value']['feedrules']['feedType'] === 'csv' ){
if( $config->feed_info['option_value']['feedrules']['enclosure'] === 'single' ){
$description = str_replace(["'"], '"', $description);
}elseif ( $config->feed_info['option_value']['feedrules']['enclosure'] === 'double' ){
$description = str_replace(['"'], "'", $description);
}
}
return $description;
}
/**
* Function to remove single and double quotes from product title if the feed type is CSV.
*
* @param string $title The original product title.
* @param object $product The product object (not used in the function).
* @param object $config The configuration object containing feed information.
* @return string The sanitized product title without single and double quotes.
*/
function remove_enclosure_from_title( $title, $product, $config ){
if( $config->feed_info['option_value']['feedrules']['feedType'] === 'csv' ){
$title = str_replace(["'", '"'], '', $title);
}
return $title;
}
}