Exception
2 weeks ago
AbstractImporter.php
2 weeks ago
CSV.php
2 weeks ago
Importer.php
2 weeks ago
ImporterFactory.php
2 weeks ago
JSON.php
2 weeks ago
JSON.php
138 lines
| 1 | <?php |
| 2 | /** |
| 3 | * JSON Importer |
| 4 | * |
| 5 | * @package WPDesk\FS\TableRate\Importer |
| 6 | */ |
| 7 | |
| 8 | namespace WPDesk\FS\TableRate\ImporterExporter\Importer; |
| 9 | |
| 10 | use WC_Admin_Settings; |
| 11 | use WPDesk\FS\TableRate\ImporterExporter\Importer\Exception\FileNotExists; |
| 12 | use WPDesk\FS\TableRate\ImporterExporter\Importer\Exception\InvalidFile; |
| 13 | use WPDesk\FS\TableRate\ShippingMethod\CommonMethodSettings; |
| 14 | |
| 15 | /** |
| 16 | * Class JSON |
| 17 | * |
| 18 | * @package WPDesk\FS\TableRate\Importer |
| 19 | */ |
| 20 | class JSON extends AbstractImporter { |
| 21 | /** |
| 22 | * @return array|void |
| 23 | * @throws FileNotExists . |
| 24 | * @throws InvalidFile . |
| 25 | */ |
| 26 | public function import() { |
| 27 | if ( ! file_exists( $this->file['tmp_name'] ) ) { |
| 28 | throw new FileNotExists( 'Uploaded file not exist.' ); |
| 29 | } |
| 30 | |
| 31 | $imported_data = file_get_contents( $this->file['tmp_name'] ); |
| 32 | |
| 33 | if ( ! $imported_data ) { |
| 34 | throw new FileNotExists( __( 'Uploaded file not exist.', 'flexible-shipping' ) ); |
| 35 | } |
| 36 | |
| 37 | $imported_shipping_methods = json_decode( $imported_data, true ); |
| 38 | |
| 39 | if ( empty( $imported_shipping_methods ) ) { |
| 40 | throw new InvalidFile( __( 'Sorry, there has been an error. The JSON file is invalid or incorrect file type.', 'flexible-shipping' ) ); |
| 41 | } |
| 42 | |
| 43 | foreach ( $imported_shipping_methods as $data ) { |
| 44 | if ( ! is_array( $data ) || ! isset( $data['id'] ) ) { |
| 45 | throw new InvalidFile( __( 'Sorry, there has been an error. The JSON file is invalid or incorrect file type.', 'flexible-shipping' ) ); |
| 46 | } |
| 47 | |
| 48 | $imported_shipping_method = $this->get_new_shipping_method_params( $data ); |
| 49 | |
| 50 | $this->shipping_methods[ $imported_shipping_method['id'] ] = map_deep( $imported_shipping_method, 'sanitize_text_field' ); |
| 51 | |
| 52 | WC_Admin_Settings::add_message( |
| 53 | sprintf( |
| 54 | // Translators: imported method title and method title. |
| 55 | __( 'Shipping method %1$s imported as %2$s.', 'flexible-shipping' ), |
| 56 | esc_html( $data['method_title'] ), |
| 57 | esc_html( $imported_shipping_method['method_title'] ) |
| 58 | ) |
| 59 | ); |
| 60 | } |
| 61 | |
| 62 | return $this->shipping_methods; |
| 63 | } |
| 64 | |
| 65 | /** |
| 66 | * Create new shipping method. |
| 67 | * |
| 68 | * @param array $shipping_method CSV row. |
| 69 | * |
| 70 | * @return array |
| 71 | */ |
| 72 | private function get_new_shipping_method_params( array $shipping_method ) { |
| 73 | $new_shipping_method = array(); |
| 74 | |
| 75 | $new_shipping_method['method_enabled'] = 'no'; |
| 76 | |
| 77 | $method_title = $this->get_field_value( $shipping_method, 'method_title', __( '(no title)', 'flexible-shipping' ) ); |
| 78 | $new_shipping_method['method_title'] = $this->get_new_method_title( $method_title ); |
| 79 | |
| 80 | $new_shipping_method['id'] = $this->flexible_shipping_method->shipping_method_next_id( $this->shipping_methods ); |
| 81 | $new_shipping_method['id_for_shipping'] = $this->flexible_shipping_method->id . '_' . $this->flexible_shipping_method->instance_id . '_' . $new_shipping_method['id']; |
| 82 | $new_shipping_method['instance_id'] = $this->flexible_shipping_method->instance_id; |
| 83 | $new_shipping_method['woocommerce_method_instance_id'] = $this->flexible_shipping_method->instance_id; |
| 84 | $new_shipping_method['method_description'] = $this->get_field_value( $shipping_method, 'method_description' ); |
| 85 | $new_shipping_method[ CommonMethodSettings::METHOD_LOGO_ID ] = absint( $this->get_field_value( $shipping_method, CommonMethodSettings::METHOD_LOGO_ID, 0 ) ); |
| 86 | $new_shipping_method['method_free_shipping_requires'] = $this->get_field_value( $shipping_method, 'method_free_shipping_requires' ); |
| 87 | $new_shipping_method['method_free_shipping'] = $this->get_field_price( $shipping_method, 'method_free_shipping' ); |
| 88 | $new_shipping_method['method_free_shipping_ignore_discounts'] = $this->get_field_value( $shipping_method, 'method_free_shipping_ignore_discounts' ); |
| 89 | $new_shipping_method['method_free_shipping_cart_notice'] = $this->get_field_value( $shipping_method, 'method_free_shipping_cart_notice' ); |
| 90 | $new_shipping_method['method_max_cost'] = $this->get_field_price( $shipping_method, 'method_max_cost' ); |
| 91 | $new_shipping_method['method_calculation_method'] = $this->get_field_value( $shipping_method, 'method_calculation_method' ); |
| 92 | $new_shipping_method['cart_calculation'] = $this->get_field_value( $shipping_method, 'cart_calculation' ); |
| 93 | $new_shipping_method['method_visibility'] = $this->get_field_value( $shipping_method, 'method_visibility', 'no' ); |
| 94 | $new_shipping_method['method_default'] = $this->get_field_value( $shipping_method, 'method_default', 'no' ); |
| 95 | $new_shipping_method['method_debug_mode'] = $this->get_field_value( $shipping_method, 'method_debug_mode', 'no' ); |
| 96 | $new_shipping_method['method_integration'] = $this->get_field_value( $shipping_method, 'method_integration', 'no' ); |
| 97 | $new_shipping_method['method_rules'] = $this->get_field_value( $shipping_method, 'method_rules', array() ); |
| 98 | |
| 99 | $method_free_shipping_label = $this->get_field_value( $shipping_method, 'method_free_shipping_label', null ); |
| 100 | |
| 101 | if ( null !== $method_free_shipping_label ) { |
| 102 | $new_shipping_method['method_free_shipping_label'] = $method_free_shipping_label; |
| 103 | } |
| 104 | |
| 105 | /** |
| 106 | * Filters whether shipping rates for export. |
| 107 | * |
| 108 | * @param array $new_shipping_method . |
| 109 | * @param string $shipping_method . |
| 110 | * @param JSON $this . |
| 111 | * |
| 112 | * @since 3.17.0 |
| 113 | */ |
| 114 | return apply_filters( 'flexible-shipping/importer/json/data', $new_shipping_method, $shipping_method, $this ); |
| 115 | } |
| 116 | |
| 117 | /** |
| 118 | * @param array $data . |
| 119 | * @param string $key . |
| 120 | * @param mixed $default . |
| 121 | * |
| 122 | * @return mixed |
| 123 | */ |
| 124 | private function get_field_value( $data, $key, $default = '' ) { |
| 125 | return isset( $data[ $key ] ) ? $data[ $key ] : $default; |
| 126 | } |
| 127 | |
| 128 | /** |
| 129 | * @param array $data . |
| 130 | * @param string $key . |
| 131 | * |
| 132 | * @return string |
| 133 | */ |
| 134 | private function get_field_price( $data, $key ) { |
| 135 | return str_replace( ',', '.', $this->get_field_value( $data, $key, '' ) ); |
| 136 | } |
| 137 | } |
| 138 |