<?php
declare( strict_types = 1);
namespace Automattic\WooCommerce\Admin\Features\Blueprint\Steps;
use Automattic\WooCommerce\Blueprint\Steps\Step;
/**
* Class SetWCShipping
*
* This class sets WooCommerce shipping settings and extends the Step class.
*
* @package Automattic\WooCommerce\Admin\Features\Blueprint\Steps
*/
class SetWCShipping extends Step {
/**
* Shipping methods.
*
* @var array $methods Shipping methods.
*/
private array $methods;
/**
* Shipping locations.
*
* @var array $locations Shipping locations.
*/
private array $locations;
/**
* Shipping zones.
*
* @var array $zones Shipping zones.
*/
private array $zones;
/**
* Shipping terms.
*
* @var array $terms Shipping terms.
*/
private array $terms;
/**
* Shipping classes.
*
* @var array $classes Shipping classes.
*/
private array $classes;
/**
* Local pickup settings.
*
* @var array $local_pickup Local pickup settings.
*/
private array $local_pickup;
/**
* Constructor.
*
* @param array $methods Shipping methods.
* @param array $locations Shipping locations.
* @param array $zones Shipping zones.
* @param array $terms Shipping terms.
* @param array $classes Shipping classes.
* @param array $local_pickup Local pickup settings.
*/
public function __construct( array $methods, array $locations, array $zones, array $terms, array $classes, array $local_pickup ) {
$this->methods = $methods;
$this->locations = $locations;
$this->zones = $zones;
$this->terms = $terms;
$this->classes = $classes;
$this->local_pickup = $local_pickup;
}
/**
* Prepare the JSON array for the step.
*
* @return array The JSON array.
*/
public function prepare_json_array(): array {
return array(
'step' => static::get_step_name(),
'values' => array(
'shipping_methods' => $this->methods,
'shipping_locations' => $this->locations,
'shipping_zones' => $this->zones,
'terms' => $this->terms,
'classes' => $this->classes,
'local_pickup' => $this->local_pickup,
),
);
}
/**
* Get the name of the step.
*
* @return string
*/
public static function get_step_name(): string {
return 'setWCShipping';
}
/**
* Get the schema for the step.
*
* @param int $version Optional version number of the schema.
* @return array The schema array.
*/
public static function get_schema( $version = 1 ): array {
return array(
'type' => 'object',
'properties' => array(
'step' => array(
'type' => 'string',
'enum' => array( static::get_step_name() ),
),
'values' => array(
'type' => 'object',
'properties' => array(
'classes' => array(
'type' => 'array',
'items' => array(
'type' => 'object',
'properties' => array(
'term_taxonomy_id' => array( 'type' => 'string' ),
'term_id' => array( 'type' => 'string' ),
'taxonomy' => array( 'type' => 'string' ),
'description' => array( 'type' => 'string' ),
'parent' => array( 'type' => 'string' ),
'count' => array( 'type' => 'string' ),
),
'required' => array( 'term_taxonomy_id', 'term_id', 'taxonomy', 'description', 'parent', 'count' ),
),
),
'terms' => array(
'type' => 'array',
'items' => array(
'type' => 'object',
'properties' => array(
'term_id' => array( 'type' => 'string' ),
'name' => array( 'type' => 'string' ),
'slug' => array( 'type' => 'string' ),
'term_group' => array( 'type' => 'string' ),
),
'required' => array( 'term_id', 'name', 'slug', 'term_group' ),
),
),
'local_pickup' => array(
'type' => 'object',
'properties' => array(
'general' => array(
'type' => 'object',
'properties' => array(
'enabled' => array( 'type' => 'string' ),
'title' => array( 'type' => 'string' ),
'tax_status' => array( 'type' => 'string' ),
'cost' => array( 'type' => 'string' ),
),
),
'locations' => array(
'type' => 'array',
'items' => array(
'type' => 'object',
'properties' => array(
'name' => array( 'type' => 'string' ),
'address' => array(
'type' => 'object',
'properties' => array(
'address_1' => array( 'type' => 'string' ),
'city' => array( 'type' => 'string' ),
'state' => array( 'type' => 'string' ),
'postcode' => array( 'type' => 'string' ),
'country' => array( 'type' => 'string' ),
),
),
'details' => array( 'type' => 'string' ),
'enabled' => array( 'type' => 'boolean' ),
),
),
),
),
),
'shipping_methods' => array(
'type' => 'array',
'items' => array(
'type' => 'object',
'properties' => array(
'zone_id' => array( 'type' => 'string' ),
'instance_id' => array( 'type' => 'string' ),
'method_id' => array( 'type' => 'string' ),
'method_order' => array( 'type' => 'string' ),
'is_enabled' => array( 'type' => 'string' ),
),
'required' => array( 'zone_id', 'instance_id', 'method_id', 'method_order', 'is_enabled' ),
),
),
'shipping_locations' => array(
'type' => 'array',
'items' => array(
'type' => 'object',
'properties' => array(
'location_id' => array( 'type' => 'string' ),
'zone_id' => array( 'type' => 'string' ),
'location_code' => array( 'type' => 'string' ),
'location_type' => array( 'type' => 'string' ),
),
'required' => array( 'location_id', 'zone_id', 'location_code', 'location_type' ),
),
),
'shipping_zones' => array(
'type' => 'array',
'items' => array(
'type' => 'object',
'properties' => array(
'zone_id' => array( 'type' => 'string' ),
'zone_name' => array( 'type' => 'string' ),
'zone_order' => array( 'type' => 'string' ),
),
'required' => array( 'zone_id', 'zone_name', 'zone_order' ),
),
),
),
),
),
'required' => array( 'step', 'values' ),
);
}
}