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

275 lines
8.2 KiB
PHP

<?php
namespace CTXFeed\V5\Output;
use CTXFeed\V5\Common\Helper;
use CTXFeed\V5\Helper\CommonHelper;
use CTXFeed\V5\Helper\FeedHelper;
use CTXFeed\V5\Product\AttributeValueByType;
use CTXFeed\V5\Utility\Config;
use WC_Product;
/**
* Class AttributeMapping
*
* @package CTXFeed
* @subpackage CTXFeed\V5\Output
* @author Ohidul Islam <wahid0003@gmail.com>
* @link https://webappick.com
* @license https://opensource.org/licenses/gpl-license.php GNU Public License
* @category Output
*/
class AttributeMapping {
/**
* Get Attribute Mapping Value.
*
* @param $attribute
* @param $merchant_attribute
* @param WC_Product $product
* @param Config $config
*
* @return string
*/
public static function getMappingValue( $attribute, $merchant_attribute, $product, $config, $parent_product ) {
$attributes = get_option( $attribute );
$glue = ! empty( $attributes['glue'] ) ? $attributes['glue'] : ' ';
$output = '';
if ( isset( $attributes['mapping'] ) ) {
foreach ( $attributes['mapping'] as $map ) {
$get_attribute_value_by_type = new AttributeValueByType( $attribute, $product, $config, $merchant_attribute, $parent_product );
$get_value = $get_attribute_value_by_type->get_value( $map );
if ( ! empty( $get_value ) ) {
$output .= $glue . $get_value;
}
}
}
//trim extra glue
$output = trim( $output, $glue );
// remove extra whitespace
$output = preg_replace( '!\s\s+!', ' ', $output );
return apply_filters( 'woo_feed_filter_attribute_mapping', $output, $attribute, $product, $config );
}
/**
* Get Attribute Mapping.
*
* @param $attribute
*
* @return false|mixed|null
*/
public function getMapping( $attribute ) {
if ( strpos( $attribute, AttributeValueByType::PRODUCT_ATTRIBUTE_MAPPING_PREFIX ) === false ) {
$attribute = AttributeValueByType::PRODUCT_ATTRIBUTE_MAPPING_PREFIX . $attribute;
}
return get_option( $attribute );
}
public function getMappings() {
$mappings = CommonHelper::get_options( AttributeValueByType::PRODUCT_ATTRIBUTE_MAPPING_PREFIX );
$data = array();
if ( ! empty( $mappings ) ) {
foreach ( $mappings as $mapping ) {
$data[ $mapping->option_name ] = get_option( $mapping->option_name );
}
return $data;
}
return false;
}
/**
* Save Attribute mapping.
*
* @param array $mappingConfig
*
* @return bool
*/
public function saveMapping( $mappingConfig ) {
$data = array();
$data['name'] = '';
if ( isset( $mappingConfig['mapping_name'] ) ) {
$data['name'] = sanitize_text_field( $mappingConfig['mapping_name'] );
}
// Set Multiple Attributes or texts.
if ( isset( $mappingConfig['value'] ) ) {
foreach ( $mappingConfig['value'] as $item ) { // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
if ( ' ' === $item ) {
$data['mapping'][] = $item;
} elseif ( '' !== $item ) {
$data['mapping'][] = sanitize_text_field( $item );
}
}
$data['mapping'] = array_filter( $data['mapping'] );
}
// Set Glue.
if ( isset( $mappingConfig['mapping_glue'] ) ) {
$data['glue'] = $mappingConfig['mapping_glue'];
} else {
$data['glue'] = '';
}
// Set Option Name.
if ( isset( $mappingConfig['option_name'] ) &&
! empty( $mappingConfig['option_name'] ) &&
false !== strpos( $mappingConfig['option_name'], AttributeValueByType::PRODUCT_ATTRIBUTE_MAPPING_PREFIX ) // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
) {
$option = sanitize_text_field( $mappingConfig['option_name'] );
} else {
// generate unique one.
$option = CommonHelper::unique_option_name( $data['name'] );
}
$option = Helper::extract_option_name( $option, AttributeValueByType::PRODUCT_ATTRIBUTE_MAPPING_PREFIX );
$option = AttributeValueByType::PRODUCT_ATTRIBUTE_MAPPING_PREFIX . $option;
return update_option( $option, $data );
}
/**
* Save Attribute mapping.
*
* @param array $mappingConfig
*
* @return bool
*/
public function updateMapping( $mappingConfig ) {
$data = array();
$data['name'] = '';
if ( isset( $mappingConfig['mapping_name'] ) ) {
$data['name'] = sanitize_text_field( $mappingConfig['mapping_name'] );
}
// Set Multiple Attributes or texts.
if ( isset( $mappingConfig['value'] ) ) {
foreach ( $mappingConfig['value'] as $item ) { // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
if ( ' ' === $item ) {
$data['mapping'][] = $item;
} elseif ( '' !== $item ) {
$data['mapping'][] = sanitize_text_field( $item );
}
}
$data['mapping'] = array_filter( $data['mapping'] );
}
// Set Glue.
if ( isset( $mappingConfig['mapping_glue'] ) ) {
$data['glue'] = $mappingConfig['mapping_glue'];
} else {
$data['glue'] = '';
}
// Set Option Name.
if ( isset( $mappingConfig['option_name'] ) &&
! empty( $mappingConfig['option_name'] ) &&
false !== strpos( $mappingConfig['option_name'], AttributeValueByType::PRODUCT_ATTRIBUTE_MAPPING_PREFIX ) // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
) {
$option = sanitize_text_field( $mappingConfig['option_name'] );
} else {
// generate unique one.
$option = CommonHelper::unique_option_name( AttributeValueByType::PRODUCT_ATTRIBUTE_MAPPING_PREFIX . $data['name'] );
}
return update_option( $option, $data );
}
/**
* Delete Attribute Mapping.
*
* @param $attribute
*
* @return bool
*/
public function deleteMapping( $attribute ) {
if ( strpos( $attribute, AttributeValueByType::PRODUCT_ATTRIBUTE_MAPPING_PREFIX ) === false ) {
$attribute = AttributeValueByType::PRODUCT_ATTRIBUTE_MAPPING_PREFIX . $attribute;
}
return delete_option( $attribute );
}
/**
* Get a random product data for view attribute mapping data
*
* @param $attribute_mappings
*
* @return array
*/
public static function get_attributes_preview_data( $attribute_mappings ) {
$preview_data = [];
if ( count( $attribute_mappings ) ) {
$config = new Config([]);
foreach ($attribute_mappings as $attribute_mapping_key => $attribute_mapping) {
$saperator = $attribute_mapping['glue'] ? $attribute_mapping['glue'] . ' ' : ' ';
$preview_data[ $attribute_mapping_key ] = trim( 'No preview' . $saperator);
}
}
return $preview_data; // TODO [Attributes Mapping page Loading issue, in future needed to remove this code and fix the issue]
$products = wc_get_products( [
'limit' => 1,
'orderby' => 'rand',
] );
$product = $products[0];
$preview_data = [];
if ( count( $attribute_mappings ) ) {
$config = new Config( [] );
foreach ( $attribute_mappings as $attribute_mapping_key => $attribute_mapping ) {
$saperator = $attribute_mapping['glue'] ? $attribute_mapping['glue'] . ' ' : ' ';
if ( $attribute_mapping && isset( $attribute_mapping['mapping'] ) && count( $attribute_mapping['mapping'] ) ) {
$current_preview_data = '';
foreach ( $attribute_mapping['mapping'] as $attribute ) {
//dynamic attribute value
if ( strpos( $attribute, 'wf_dattribute_' ) !== false ) {
$dynamic_attribute = new DynamicAttributes();
$dynamic_attribute_value = $dynamic_attribute->getDynamicAttributeValue( $attribute, '', $product, $config );
$value = $dynamic_attribute_value ? $dynamic_attribute_value : 'No data';
$current_preview_data .= $value . $saperator;
continue;
}
if(!self::exclude_attributes_preview_data($attribute )) {
$attribute_value = new AttributeValueByType( $attribute, $product, $config );
$value = $attribute_value->get_value() ? $attribute_value->get_value() : 'No data';
$current_preview_data .= $value . $saperator;
}else{
$current_preview_data .= 'No data' . $saperator;
}
}
$preview_data[ $attribute_mapping_key ] = trim( $current_preview_data, $saperator );
}
}
}
return $preview_data;
}
/**
* Exclude preview data
*
* @param $attribute
*
* @return boolean
*/
public static function exclude_attributes_preview_data( $attribute ) {
$attribute_array = array( 'shipping', 'tax' );
return in_array( $attribute, $attribute_array );
}
}