205 lines
6.5 KiB
PHP
205 lines
6.5 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Class FacebookStructure
|
|
*
|
|
* @package CTXFeed
|
|
* @subpackage CTXFeed\V5\Structure
|
|
*/
|
|
|
|
namespace CTXFeed\V5\Structure;
|
|
use CTXFeed\V5\Merchant\MerchantAttributeReplaceFactory;
|
|
|
|
/**
|
|
* Class representing the structure for Facebook.
|
|
* Implements the StructureInterface for Facebook-related operations.
|
|
*/
|
|
|
|
class FacebookStructure implements StructureInterface {
|
|
|
|
/**
|
|
* Configuration settings.
|
|
*
|
|
* @var \Config $config
|
|
*/
|
|
private $config;
|
|
|
|
/**
|
|
* Constructor for FacebookStructure.
|
|
*
|
|
* @param mixed $config Configuration settings.
|
|
*/
|
|
public function __construct( $config ) {
|
|
$this->config = $config;
|
|
$this->config->itemWrapper = 'item';
|
|
$this->config->itemsWrapper = 'items';
|
|
}
|
|
|
|
/**
|
|
* Retrieves grouped attributes for tax and shipping.
|
|
*
|
|
* @return array Array of grouped attributes categorized by type.
|
|
*/
|
|
public function get_grouped_attributes() {
|
|
$group['additional_variant'] = [
|
|
'additional_variant_label',
|
|
'additional_variant_value'
|
|
];
|
|
|
|
$group['tax'] = [
|
|
'tax_country',
|
|
'tax_region',
|
|
'tax_rate',
|
|
'tax_ship'
|
|
];
|
|
$group['shipping'] = [
|
|
'location_id',
|
|
'location_group_name',
|
|
'min_handling_time',
|
|
'max_handling_time',
|
|
'min_transit_time',
|
|
'max_transit_time'
|
|
];
|
|
|
|
return $group;
|
|
}
|
|
|
|
/**
|
|
* Retrieves the XML structure.
|
|
*
|
|
* @return array The constructed XML data structure.
|
|
*/
|
|
public function get_xml_structure() {
|
|
$additional_variant = [];
|
|
$group = $this->get_grouped_attributes();
|
|
$attributes = $this->config->attributes;
|
|
$mattributes = $this->config->mattributes;
|
|
$static = $this->config->default;
|
|
$type = $this->config->type;
|
|
$wrapper = $this->config->itemWrapper;
|
|
$data = [];
|
|
|
|
if ( !\in_array( "identifier_exists", $attributes ) ){
|
|
\array_push( $attributes,'identifier_exists' );
|
|
\array_push( $mattributes,'identifier_exists' );
|
|
\array_push( $type,'attribute' );
|
|
}
|
|
|
|
foreach ( $mattributes as $key => $attribute ) {
|
|
$attribute_value = ( $type[ $key ] === 'pattern' ) ? $static[ $key ] : $attributes[ $key ];
|
|
$additional_variant_sub = \str_replace( "additional_variant_", "", $attribute );
|
|
$replaced_attribute = MerchantAttributeReplaceFactory::replace_attribute( $attribute, $this->config );
|
|
// Installment Attribute
|
|
if ( \in_array( $attribute, $group['additional_variant'], true ) && \count( $additional_variant ) < 1 ) {
|
|
$additional_variant[ $additional_variant_sub ] = $attribute_value;
|
|
}elseif ( \in_array( $attribute, $group['additional_variant'], true ) ) {
|
|
$additional_variant[ $additional_variant_sub ] = $attribute_value;
|
|
$data[ $wrapper ][]['additional_variant_attribute'] = $additional_variant;
|
|
$additional_variant = [];
|
|
}elseif ( \strpos( $attribute, 'images_' ) !== false ) {
|
|
$data[ $wrapper ][][ $replaced_attribute ] = $attribute_value;
|
|
}else {
|
|
$data[ $wrapper ][ $replaced_attribute ] = $attribute_value;
|
|
}
|
|
}
|
|
|
|
return $data;
|
|
}
|
|
|
|
/**
|
|
* Constructs a CSV structure based on the configuration settings and grouped attributes.
|
|
*
|
|
* @return array The constructed CSV data structure.
|
|
*/
|
|
public function get_csv_structure() {
|
|
$group = $this->get_grouped_attributes();
|
|
$attributes = $this->config->attributes;
|
|
$mattributes = $this->config->mattributes;
|
|
$static = $this->config->default;
|
|
$type = $this->config->type;
|
|
$data = [];
|
|
|
|
if ( !\in_array( "identifier_exists", $attributes ) ){
|
|
\array_push( $attributes,'identifier_exists' );
|
|
\array_push( $mattributes,'identifier_exists' );
|
|
\array_push( $type,'attribute' );
|
|
}
|
|
|
|
foreach ( $mattributes as $key => $attribute ) {
|
|
$additional_variant_sub = \str_replace( "additional_variant_", "", $attribute );
|
|
$attribute_value = ( $type[ $key ] === 'pattern' ) ? $static[ $key ] : $attributes[ $key ];
|
|
|
|
if ( \in_array( $attribute, $group['additional_variant'], true ) && \count( $additional_variant ) < 1 ) {
|
|
$additional_variant[ $additional_variant_sub ] = $attribute_value;
|
|
}elseif ( \in_array( $attribute, $group['additional_variant'], true ) ) {
|
|
$additional_variant[ $additional_variant_sub ] = $attribute_value;
|
|
$data[ 'additional_variant_attribute' ][] = $additional_variant;
|
|
$additional_variant = [];
|
|
} elseif ( \strpos( $attribute, 'images_' ) !== false ) {
|
|
$replaced_attribute = MerchantAttributeReplaceFactory::replace_attribute( 'additional_image_link', $this->config );
|
|
$data[][$replaced_attribute] = $attribute_value;
|
|
} else {
|
|
$replaced_attribute = MerchantAttributeReplaceFactory::replace_attribute( $attribute, $this->config );
|
|
$data[][ $replaced_attribute ] = $attribute_value;
|
|
}
|
|
}
|
|
|
|
if ( \array_key_exists( 'shipping', $data ) && ! empty( $data['shipping'] ) ) {
|
|
$attr = 'shipping(' . \implode( ':', \array_keys( $data['shipping'] ) ) . ')';
|
|
$data[][ $attr ] = \implode( ':', \array_values( $data['shipping'] ) );
|
|
unset( $data['shipping'] );
|
|
}
|
|
|
|
if ( \array_key_exists( 'additional_variant_attribute', $data ) && ! empty( $data['additional_variant_attribute'] ) ) {
|
|
foreach ( $data['additional_variant_attribute'] as $detail ) {
|
|
$additional_variant[] = \implode( ':', \array_values( $detail ) );
|
|
}
|
|
$data[]['additional_variant_attribute'] = \implode( ',', \array_values( $additional_variant ) );
|
|
unset( $data['additional_variant_attribute'] );
|
|
}
|
|
|
|
|
|
return $data;
|
|
}
|
|
|
|
/**
|
|
* Retrieves the TSV structure.
|
|
* Currently, this method serves as a wrapper for the get_csv_structure method.
|
|
*
|
|
* @return mixed The CSV structure converted to TSV format.
|
|
*/
|
|
public function get_tsv_structure() {
|
|
return $this->get_csv_structure();
|
|
}
|
|
|
|
/**
|
|
* Retrieves the TXT structure.
|
|
* Currently, this method serves as a wrapper for the get_csv_structure method.
|
|
*
|
|
* @return mixed The CSV structure converted to TXT format.
|
|
*/
|
|
public function get_txt_structure() {
|
|
return $this->get_csv_structure();
|
|
}
|
|
|
|
/**
|
|
* Retrieves the XLS structure.
|
|
* Currently, this method serves as a wrapper for the get_csv_structure method.
|
|
*
|
|
* @return mixed The CSV structure converted to XLS format.
|
|
*/
|
|
public function get_xls_structure() {
|
|
return $this->get_csv_structure();
|
|
}
|
|
|
|
/**
|
|
* Retrieves the JSON structure.
|
|
* Currently, this method serves as a wrapper for the get_csv_structure method.
|
|
*
|
|
* @return mixed The CSV structure converted to JSON format.
|
|
*/
|
|
public function get_json_structure() {
|
|
return $this->get_csv_structure();
|
|
}
|
|
}
|
|
|