File "JSON-20250124234152.php"
Full Path: /home/siazco/grocery.siazco.se/wp-content/plugins/flexible-shipping/src/WPDesk/FS/TableRate/ImporterExporter/Exporter/JSON-20250124234152.php
File size: 4.9 KB
MIME-type: text/x-php
Charset: utf-8
<?php
/**
* JSON Exporter.
*
* @package WPDesk\FS\TableRate\Exporter
*/
namespace WPDesk\FS\TableRate\ImporterExporter\Exporter;
use WPDesk\FS\TableRate\ImporterExporter\ShippingClassTrait;
use WPDesk_Flexible_Shipping;
/**
* Class JSON
*/
class JSON {
use ShippingClassTrait;
/**
* @var string
*/
private $instance_id;
/**
* @var int[]
*/
private $methods;
/**
* JSON constructor.
*
* @param string $instance_id Instance ID.
* @param int[] $methods Method IDs.
*/
public function __construct( $instance_id, $methods ) {
$this->instance_id = $instance_id;
$this->methods = $methods;
$this->init_shipping_class();
}
/**
* @return array
*/
public function get_exported_data() {
$all_shipping_methods = flexible_shipping_get_all_shipping_methods();
/** @var WPDesk_Flexible_Shipping $flexible_shipping */
$flexible_shipping = $all_shipping_methods['flexible_shipping'];
$flexible_shipping_rates = $flexible_shipping->get_all_rates();
$this->filter_by_instance_id( $flexible_shipping_rates, $this->instance_id );
$this->filter_by_methods( $flexible_shipping_rates, $this->methods );
$flexible_shipping_rates = $this->get_prepared_shipping_rates( $flexible_shipping_rates );
/**
* Filters whether shipping rates for export.
*
* @param array $flexible_shipping_rates .
* @param string $instance_id .
* @param array $methods .
* @param JSON $exporter .
*
* @since 3.17.0
*/
$flexible_shipping_rates = apply_filters( 'flexible-shipping/exporter/data', $flexible_shipping_rates, $this->instance_id, $this->methods, $this );
return array_values( $flexible_shipping_rates );
}
/**
* Preparing fields to export.
*
* @param array $flexible_shipping_rates .
*
* @return array
*/
private function get_prepared_shipping_rates( $flexible_shipping_rates ) {
$allowed_fields = array(
'id',
'method_title',
'method_description',
'method_free_shipping_requires',
'method_free_shipping',
'method_free_shipping_ignore_discounts',
'method_free_shipping_cart_notice',
'method_max_cost',
'method_calculation_method',
'cart_calculation',
'method_visibility',
'method_default',
'method_debug_mode',
'method_integration',
'method_rules',
);
/**
* Filters whether allowed fields for export.
*
* @param array $allowed_fields .
*
* @since 3.17.0
*/
$allowed_fields = apply_filters( 'flexible-shipping/exporter/allowed_fields', $allowed_fields );
foreach ( $flexible_shipping_rates as $id => $flexible_shipping_rate ) {
$row = array();
foreach ( $allowed_fields as $field ) {
$row[ $field ] = isset( $flexible_shipping_rate[ $field ] ) ? $flexible_shipping_rate[ $field ] : '';
}
if ( isset( $flexible_shipping_rate['method_free_shipping_label'] ) ) {
$row['method_free_shipping_label'] = $flexible_shipping_rate['method_free_shipping_label'];
}
/**
* Filters whether fields for export.
*
* @param array $row .
* @param array $flexible_shipping_rate .
* @param string $id .
*
* @since 3.17.0
*/
$row = apply_filters( 'flexible-shipping/exporter/rate/data', $row, $flexible_shipping_rate, $id );
$flexible_shipping_rates[ $id ] = $row;
}
return $flexible_shipping_rates;
}
/**
* @param array $flexible_shipping_rates Shipping Rates.
* @param string $instance_id Instance ID.
*/
private function filter_by_instance_id( &$flexible_shipping_rates, $instance_id ) {
$flexible_shipping_rates = array_filter(
$flexible_shipping_rates,
function ( $shipping_rate ) use ( $instance_id ) {
return isset( $shipping_rate['instance_id'] ) && (int) $shipping_rate['instance_id'] === (int) $instance_id;
}
);
}
/**
* @param array $flexible_shipping_rates Shipping Rates.
* @param int[] $methods Method IDs.
*/
private function filter_by_methods( &$flexible_shipping_rates, $methods ) {
$flexible_shipping_rates = array_filter(
$flexible_shipping_rates,
function ( $shipping_rate ) use ( $methods ) {
return in_array( (int) $shipping_rate['id'], wp_parse_id_list( $methods ), true );
}
);
}
/**
* @param string $filename Name of exported file.
* @param array $data Data to export.
*/
public function download_file( $filename, $data ) {
header( 'Content-Type: application/json; charset=utf-8' );
header( 'Content-Disposition: attachment; filename=' . sanitize_file_name( $filename ) );
echo wp_json_encode( $data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE );
die();
}
/**
* @param array $data .
*
* @return string
*/
public function get_filename( $data ) {
$host = wp_parse_url( site_url(), PHP_URL_HOST );
$filename = 'fs_' . $host . '_fs-' . $this->instance_id . '-' . join( '_', wp_list_pluck( $data, 'id' ) );
return sanitize_file_name( $filename . '.json' );
}
}