initial commit
This commit is contained in:
@ -0,0 +1,141 @@
|
||||
<?php
|
||||
/**
|
||||
* REST API Taxes controller
|
||||
*
|
||||
* Handles requests to the /taxes endpoint.
|
||||
*
|
||||
* @package WooCommerce\RestApi
|
||||
* @since 2.6.0
|
||||
*/
|
||||
|
||||
defined( 'ABSPATH' ) || exit;
|
||||
|
||||
/**
|
||||
* REST API Taxes controller class.
|
||||
*
|
||||
* @package WooCommerce\RestApi
|
||||
* @extends WC_REST_Taxes_V2_Controller
|
||||
*/
|
||||
class WC_REST_Taxes_Controller extends WC_REST_Taxes_V2_Controller {
|
||||
|
||||
/**
|
||||
* Endpoint namespace.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $namespace = 'wc/v3';
|
||||
|
||||
/**
|
||||
* Add tax rate locales to the response array.
|
||||
*
|
||||
* @param array $data Response data.
|
||||
* @param stdClass $tax Tax object.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected function add_tax_rate_locales( $data, $tax ) {
|
||||
global $wpdb;
|
||||
|
||||
$data = parent::add_tax_rate_locales( $data, $tax );
|
||||
$data['postcodes'] = array();
|
||||
$data['cities'] = array();
|
||||
|
||||
// Get locales from a tax rate.
|
||||
$locales = $wpdb->get_results(
|
||||
$wpdb->prepare(
|
||||
"
|
||||
SELECT location_code, location_type
|
||||
FROM {$wpdb->prefix}woocommerce_tax_rate_locations
|
||||
WHERE tax_rate_id = %d
|
||||
",
|
||||
$tax->tax_rate_id
|
||||
)
|
||||
);
|
||||
|
||||
if ( ! is_wp_error( $tax ) && ! is_null( $tax ) ) {
|
||||
foreach ( $locales as $locale ) {
|
||||
if ( 'postcode' === $locale->location_type ) {
|
||||
$data['postcodes'][] = $locale->location_code;
|
||||
} elseif ( 'city' === $locale->location_type ) {
|
||||
$data['cities'][] = $locale->location_code;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the taxes schema, conforming to JSON Schema.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function get_item_schema() {
|
||||
$schema = parent::get_item_schema();
|
||||
|
||||
$schema['properties']['postcodes'] = array(
|
||||
'description' => __( 'List of postcodes / ZIPs. Introduced in WooCommerce 5.3.', 'woocommerce' ),
|
||||
'type' => 'array',
|
||||
'items' => array(
|
||||
'type' => 'string',
|
||||
),
|
||||
'context' => array( 'view', 'edit' ),
|
||||
);
|
||||
|
||||
$schema['properties']['cities'] = array(
|
||||
'description' => __( 'List of city names. Introduced in WooCommerce 5.3.', 'woocommerce' ),
|
||||
'type' => 'array',
|
||||
'items' => array(
|
||||
'type' => 'string',
|
||||
),
|
||||
'context' => array( 'view', 'edit' ),
|
||||
);
|
||||
|
||||
$schema['properties']['postcode']['description'] =
|
||||
__( "Postcode/ZIP, it doesn't support multiple values. Deprecated as of WooCommerce 5.3, 'postcodes' should be used instead.", 'woocommerce' );
|
||||
|
||||
$schema['properties']['city']['description'] =
|
||||
__( "City name, it doesn't support multiple values. Deprecated as of WooCommerce 5.3, 'cities' should be used instead.", 'woocommerce' );
|
||||
|
||||
return $schema;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a single tax.
|
||||
*
|
||||
* @param WP_REST_Request $request Full details about the request.
|
||||
* @return WP_Error|WP_REST_Response The response, or an error.
|
||||
*/
|
||||
public function create_item( $request ) {
|
||||
$this->adjust_cities_and_postcodes( $request );
|
||||
|
||||
return parent::create_item( $request );
|
||||
}
|
||||
|
||||
/**
|
||||
* Update a single tax.
|
||||
*
|
||||
* @param WP_REST_Request $request Full details about the request.
|
||||
* @return WP_Error|WP_REST_Response The response, or an error.
|
||||
*/
|
||||
public function update_item( $request ) {
|
||||
$this->adjust_cities_and_postcodes( $request );
|
||||
|
||||
return parent::update_item( $request );
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert array "cities" and "postcodes" parameters
|
||||
* into semicolon-separated strings "city" and "postcode".
|
||||
*
|
||||
* @param WP_REST_Request $request The request to adjust.
|
||||
*/
|
||||
private function adjust_cities_and_postcodes( &$request ) {
|
||||
if ( isset( $request['cities'] ) ) {
|
||||
$request['city'] = join( ';', $request['cities'] );
|
||||
}
|
||||
if ( isset( $request['postcodes'] ) ) {
|
||||
$request['postcode'] = join( ';', $request['postcodes'] );
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user