PluginProbe ʕ •ᴥ•ʔ
Weight Based Shipping Table Rate for WooCommerce – Flexible Shipping / 6.11.0
Weight Based Shipping Table Rate for WooCommerce – Flexible Shipping v6.11.0
6.12.1 6.12.0 6.11.0 6.10.0 6.9.1 6.9.0 6.8.1 6.8.0 6.7.4 6.7.3 6.7.2 6.7.0 4.21.7 4.22.0 4.22.1 4.23.0 4.23.1 4.23.2 4.23.3 4.24.0 4.24.1 4.24.10 4.24.11 4.24.12 4.24.13 4.24.14 4.24.15 4.24.16 4.24.17 4.24.18 4.24.19 4.24.2 4.24.4 4.24.6 4.24.7 4.24.8 4.24.9 4.25.0 4.25.1 4.25.2 4.25.4 4.25.5 4.25.6 4.25.7 4.25.8 4.3.0 4.3.1 4.4.0 4.4.1 4.5.0 4.5.1 4.6.0 4.6.1 4.7.0 4.7.1 4.7.2 4.8.0 4.8.1 4.8.3 4.8.4 4.8.5 4.9.0 5.0.0 5.0.1 5.0.2 5.0.3 5.0.4 5.0.5 5.0.6 5.0.7 5.0.8 5.0.9 5.1.0 5.1.1 5.1.2 5.1.3 5.2.0 5.3.0 5.3.1 5.3.3 5.3.4 5.3.5 6.0.0 6.1.0 6.1.1 6.1.2 6.2.0 6.2.1 6.2.2 6.2.3 6.2.4 6.3.0 trunk 6.4.0 1.4 6.4.1 1.4.1 6.4.2 1.5 6.4.3 1.6 6.4.5 1.6.1 6.5.0 1.6.2 6.5.1 1.7 6.5.2 1.8 6.5.3 1.9 6.5.4 1.9.1 6.5.5 1.9.10 6.5.6 1.9.11 6.5.7 1.9.12 6.5.8 1.9.2 6.6.0 1.9.3 6.6.1 1.9.4 6.6.2 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0 2.0.1 2.1 2.1.1 2.1.10 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 3.0.6 3.0.7 3.1 3.1.1 3.1.10 3.1.11 3.1.12 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.1.7 3.1.8 3.1.9 3.10.0 3.11.0 3.11.1 3.11.2 3.11.3 3.11.4 3.12.0 3.13.0 3.14.0 3.14.1 3.14.2 3.14.3 3.14.4 3.15.0 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.2.0 3.3.1 3.3.10 3.3.11 3.3.12 3.3.13 3.3.14 3.3.2 3.3.3 3.3.4 3.3.5 3.3.6 3.3.7 3.3.8 3.3.9 3.4.0 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.7.0 3.8.0 3.9.0 3.9.1 3.9.10 3.9.11 3.9.12 3.9.13 3.9.15 3.9.16 3.9.17 3.9.18 3.9.19 3.9.2 3.9.20 3.9.21 3.9.3 3.9.4 3.9.5 3.9.6 3.9.7 3.9.9 4.0.0 4.0.1 4.0.10 4.0.2 4.0.3 4.0.4 4.0.5 4.0.6 4.0.7 4.0.8 4.0.9 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4 4.10.0 4.10.1 4.11.0 4.11.1 4.11.2 4.11.3 4.11.4 4.11.5 4.11.6 4.11.7 4.11.8 4.11.9 4.12.0 4.13.0 4.13.1 4.13.2 4.13.3 4.14.0 4.14.1 4.14.2 4.15.0 4.16.0 4.16.1 4.16.2 4.17.0 4.18.0 4.18.1 4.18.2 4.18.3 4.18.4 4.18.5 4.18.6 4.19.0 4.19.1 4.2.0 4.20.0 4.20.1 4.20.2 4.20.3 4.21.0 4.21.1 4.21.2 4.21.3 4.21.4 4.21.5
flexible-shipping / src / WPDesk / FS / TableRate / ImporterExporter / Exporter / JSON.php
flexible-shipping / src / WPDesk / FS / TableRate / ImporterExporter / Exporter Last commit date
JSON.php 2 weeks ago
JSON.php
188 lines
1 <?php
2 /**
3 * JSON Exporter.
4 *
5 * @package WPDesk\FS\TableRate\Exporter
6 */
7
8 namespace WPDesk\FS\TableRate\ImporterExporter\Exporter;
9
10 use WPDesk\FS\TableRate\ImporterExporter\ShippingClassTrait;
11 use WPDesk\FS\TableRate\ShippingMethod\CommonMethodSettings;
12 use WPDesk_Flexible_Shipping;
13
14 /**
15 * Class JSON
16 */
17 class JSON {
18 use ShippingClassTrait;
19
20 /**
21 * @var string
22 */
23 private $instance_id;
24
25 /**
26 * @var int[]
27 */
28 private $methods;
29
30 /**
31 * JSON constructor.
32 *
33 * @param string $instance_id Instance ID.
34 * @param int[] $methods Method IDs.
35 */
36 public function __construct( $instance_id, $methods ) {
37 $this->instance_id = $instance_id;
38 $this->methods = $methods;
39
40 $this->init_shipping_class();
41 }
42
43 /**
44 * @return array
45 */
46 public function get_exported_data() {
47 $all_shipping_methods = flexible_shipping_get_all_shipping_methods();
48
49 /** @var WPDesk_Flexible_Shipping $flexible_shipping */
50 $flexible_shipping = $all_shipping_methods['flexible_shipping'];
51 $flexible_shipping_rates = $flexible_shipping->get_all_rates();
52
53 $this->filter_by_instance_id( $flexible_shipping_rates, $this->instance_id );
54 $this->filter_by_methods( $flexible_shipping_rates, $this->methods );
55
56 $flexible_shipping_rates = $this->get_prepared_shipping_rates( $flexible_shipping_rates );
57
58 /**
59 * Filters whether shipping rates for export.
60 *
61 * @param array $flexible_shipping_rates .
62 * @param string $instance_id .
63 * @param array $methods .
64 * @param JSON $exporter .
65 *
66 * @since 3.17.0
67 */
68 $flexible_shipping_rates = apply_filters( 'flexible-shipping/exporter/data', $flexible_shipping_rates, $this->instance_id, $this->methods, $this );
69
70 return array_values( $flexible_shipping_rates );
71 }
72
73 /**
74 * Preparing fields to export.
75 *
76 * @param array $flexible_shipping_rates .
77 *
78 * @return array
79 */
80 private function get_prepared_shipping_rates( $flexible_shipping_rates ) {
81 $allowed_fields = array(
82 'id',
83 'method_title',
84 'method_description',
85 CommonMethodSettings::METHOD_LOGO_ID,
86 'method_free_shipping_requires',
87 'method_free_shipping',
88 'method_free_shipping_ignore_discounts',
89 'method_free_shipping_cart_notice',
90 'method_max_cost',
91 'method_calculation_method',
92 'cart_calculation',
93 'method_visibility',
94 'method_default',
95 'method_debug_mode',
96 'method_integration',
97 'method_rules',
98 );
99
100 /**
101 * Filters whether allowed fields for export.
102 *
103 * @param array $allowed_fields .
104 *
105 * @since 3.17.0
106 */
107 $allowed_fields = apply_filters( 'flexible-shipping/exporter/allowed_fields', $allowed_fields );
108
109 foreach ( $flexible_shipping_rates as $id => $flexible_shipping_rate ) {
110 $row = array();
111
112 foreach ( $allowed_fields as $field ) {
113 $row[ $field ] = isset( $flexible_shipping_rate[ $field ] ) ? $flexible_shipping_rate[ $field ] : '';
114 }
115
116 if ( isset( $flexible_shipping_rate['method_free_shipping_label'] ) ) {
117 $row['method_free_shipping_label'] = $flexible_shipping_rate['method_free_shipping_label'];
118 }
119
120 /**
121 * Filters whether fields for export.
122 *
123 * @param array $row .
124 * @param array $flexible_shipping_rate .
125 * @param string $id .
126 *
127 * @since 3.17.0
128 */
129 $row = apply_filters( 'flexible-shipping/exporter/rate/data', $row, $flexible_shipping_rate, $id );
130
131 $flexible_shipping_rates[ $id ] = $row;
132 }
133
134 return $flexible_shipping_rates;
135 }
136
137 /**
138 * @param array $flexible_shipping_rates Shipping Rates.
139 * @param string $instance_id Instance ID.
140 */
141 private function filter_by_instance_id( &$flexible_shipping_rates, $instance_id ) {
142 $flexible_shipping_rates = array_filter(
143 $flexible_shipping_rates,
144 function ( $shipping_rate ) use ( $instance_id ) {
145 return isset( $shipping_rate['instance_id'] ) && (int) $shipping_rate['instance_id'] === (int) $instance_id;
146 }
147 );
148 }
149
150 /**
151 * @param array $flexible_shipping_rates Shipping Rates.
152 * @param int[] $methods Method IDs.
153 */
154 private function filter_by_methods( &$flexible_shipping_rates, $methods ) {
155 $flexible_shipping_rates = array_filter(
156 $flexible_shipping_rates,
157 function ( $shipping_rate ) use ( $methods ) {
158 return in_array( (int) $shipping_rate['id'], wp_parse_id_list( $methods ), true );
159 }
160 );
161 }
162
163 /**
164 * @param string $filename Name of exported file.
165 * @param array $data Data to export.
166 */
167 public function download_file( $filename, $data ) {
168 header( 'Content-Type: application/json; charset=utf-8' );
169 header( 'Content-Disposition: attachment; filename=' . sanitize_file_name( $filename ) );
170
171 echo wp_json_encode( $data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE );
172 die();
173 }
174
175 /**
176 * @param array $data .
177 *
178 * @return string
179 */
180 public function get_filename( $data ) {
181 $host = wp_parse_url( site_url(), PHP_URL_HOST );
182
183 $filename = 'fs_' . $host . '_fs-' . $this->instance_id . '-' . join( '_', wp_list_pluck( $data, 'id' ) );
184
185 return sanitize_file_name( $filename . '.json' );
186 }
187 }
188