Edit File by line
/home/zeestwma/richards.../wp-conte.../plugins/woocomme.../src/StoreApi
File: RoutesController.php
<?php
[0] Fix | Delete
declare( strict_types = 1 );
[1] Fix | Delete
[2] Fix | Delete
namespace Automattic\WooCommerce\StoreApi;
[3] Fix | Delete
[4] Fix | Delete
use Automattic\WooCommerce\StoreApi\Routes\V1\AbstractRoute;
[5] Fix | Delete
[6] Fix | Delete
/**
[7] Fix | Delete
* RoutesController class.
[8] Fix | Delete
*/
[9] Fix | Delete
class RoutesController {
[10] Fix | Delete
/**
[11] Fix | Delete
* Stores schema_controller.
[12] Fix | Delete
*
[13] Fix | Delete
* @var SchemaController
[14] Fix | Delete
*/
[15] Fix | Delete
protected $schema_controller;
[16] Fix | Delete
[17] Fix | Delete
/**
[18] Fix | Delete
* Stores routes.
[19] Fix | Delete
*
[20] Fix | Delete
* @var array
[21] Fix | Delete
*/
[22] Fix | Delete
protected $routes = [];
[23] Fix | Delete
[24] Fix | Delete
/**
[25] Fix | Delete
* Namespace for the API.
[26] Fix | Delete
*
[27] Fix | Delete
* @var string
[28] Fix | Delete
*/
[29] Fix | Delete
private static $api_namespace = 'wc/store';
[30] Fix | Delete
[31] Fix | Delete
/**
[32] Fix | Delete
* Constructor.
[33] Fix | Delete
*
[34] Fix | Delete
* @param SchemaController $schema_controller Schema controller class passed to each route.
[35] Fix | Delete
*/
[36] Fix | Delete
public function __construct( SchemaController $schema_controller ) {
[37] Fix | Delete
$this->schema_controller = $schema_controller;
[38] Fix | Delete
$this->routes = [
[39] Fix | Delete
'v1' => [
[40] Fix | Delete
Routes\V1\Batch::IDENTIFIER => Routes\V1\Batch::class,
[41] Fix | Delete
Routes\V1\Cart::IDENTIFIER => Routes\V1\Cart::class,
[42] Fix | Delete
Routes\V1\CartAddItem::IDENTIFIER => Routes\V1\CartAddItem::class,
[43] Fix | Delete
Routes\V1\CartApplyCoupon::IDENTIFIER => Routes\V1\CartApplyCoupon::class,
[44] Fix | Delete
Routes\V1\CartCoupons::IDENTIFIER => Routes\V1\CartCoupons::class,
[45] Fix | Delete
Routes\V1\CartCouponsByCode::IDENTIFIER => Routes\V1\CartCouponsByCode::class,
[46] Fix | Delete
Routes\V1\CartExtensions::IDENTIFIER => Routes\V1\CartExtensions::class,
[47] Fix | Delete
Routes\V1\CartItems::IDENTIFIER => Routes\V1\CartItems::class,
[48] Fix | Delete
Routes\V1\CartItemsByKey::IDENTIFIER => Routes\V1\CartItemsByKey::class,
[49] Fix | Delete
Routes\V1\CartRemoveCoupon::IDENTIFIER => Routes\V1\CartRemoveCoupon::class,
[50] Fix | Delete
Routes\V1\CartRemoveItem::IDENTIFIER => Routes\V1\CartRemoveItem::class,
[51] Fix | Delete
Routes\V1\CartSelectShippingRate::IDENTIFIER => Routes\V1\CartSelectShippingRate::class,
[52] Fix | Delete
Routes\V1\CartUpdateItem::IDENTIFIER => Routes\V1\CartUpdateItem::class,
[53] Fix | Delete
Routes\V1\CartUpdateCustomer::IDENTIFIER => Routes\V1\CartUpdateCustomer::class,
[54] Fix | Delete
Routes\V1\Checkout::IDENTIFIER => Routes\V1\Checkout::class,
[55] Fix | Delete
Routes\V1\CheckoutOrder::IDENTIFIER => Routes\V1\CheckoutOrder::class,
[56] Fix | Delete
Routes\V1\Order::IDENTIFIER => Routes\V1\Order::class,
[57] Fix | Delete
Routes\V1\ProductAttributes::IDENTIFIER => Routes\V1\ProductAttributes::class,
[58] Fix | Delete
Routes\V1\ProductAttributesById::IDENTIFIER => Routes\V1\ProductAttributesById::class,
[59] Fix | Delete
Routes\V1\ProductAttributeTerms::IDENTIFIER => Routes\V1\ProductAttributeTerms::class,
[60] Fix | Delete
Routes\V1\ProductCategories::IDENTIFIER => Routes\V1\ProductCategories::class,
[61] Fix | Delete
Routes\V1\ProductCategoriesById::IDENTIFIER => Routes\V1\ProductCategoriesById::class,
[62] Fix | Delete
Routes\V1\ProductBrands::IDENTIFIER => Routes\V1\ProductBrands::class,
[63] Fix | Delete
Routes\V1\ProductBrandsById::IDENTIFIER => Routes\V1\ProductBrandsById::class,
[64] Fix | Delete
Routes\V1\ProductCollectionData::IDENTIFIER => Routes\V1\ProductCollectionData::class,
[65] Fix | Delete
Routes\V1\ProductReviews::IDENTIFIER => Routes\V1\ProductReviews::class,
[66] Fix | Delete
Routes\V1\ProductTags::IDENTIFIER => Routes\V1\ProductTags::class,
[67] Fix | Delete
Routes\V1\Products::IDENTIFIER => Routes\V1\Products::class,
[68] Fix | Delete
Routes\V1\ProductsById::IDENTIFIER => Routes\V1\ProductsById::class,
[69] Fix | Delete
Routes\V1\ProductsBySlug::IDENTIFIER => Routes\V1\ProductsBySlug::class,
[70] Fix | Delete
],
[71] Fix | Delete
'private' => [
[72] Fix | Delete
// This route should be moved outside of the Store API namespace.
[73] Fix | Delete
Routes\V1\Patterns::IDENTIFIER => Routes\V1\Patterns::class,
[74] Fix | Delete
],
[75] Fix | Delete
];
[76] Fix | Delete
}
[77] Fix | Delete
[78] Fix | Delete
/**
[79] Fix | Delete
* Register all Store API routes. This includes routes under specific version namespaces.
[80] Fix | Delete
*/
[81] Fix | Delete
public function register_all_routes() {
[82] Fix | Delete
$this->register_routes( 'v1', self::$api_namespace );
[83] Fix | Delete
$this->register_routes( 'v1', self::$api_namespace . '/v1' );
[84] Fix | Delete
$this->register_routes( 'private', 'wc/private' );
[85] Fix | Delete
}
[86] Fix | Delete
[87] Fix | Delete
/**
[88] Fix | Delete
* Get a route class instance.
[89] Fix | Delete
*
[90] Fix | Delete
* Each route class is instantized with the SchemaController instance, and its main Schema Type.
[91] Fix | Delete
*
[92] Fix | Delete
* @throws \Exception If the schema does not exist.
[93] Fix | Delete
* @param string $name Name of schema.
[94] Fix | Delete
* @param string $version API Version being requested.
[95] Fix | Delete
* @return AbstractRoute
[96] Fix | Delete
*/
[97] Fix | Delete
public function get( $name, $version = 'v1' ) {
[98] Fix | Delete
$route = $this->routes[ $version ][ $name ] ?? false;
[99] Fix | Delete
[100] Fix | Delete
if ( ! $route ) {
[101] Fix | Delete
throw new \Exception( "{$name} {$version} route does not exist" );
[102] Fix | Delete
}
[103] Fix | Delete
[104] Fix | Delete
return new $route(
[105] Fix | Delete
$this->schema_controller,
[106] Fix | Delete
$this->schema_controller->get( $route::SCHEMA_TYPE, $route::SCHEMA_VERSION )
[107] Fix | Delete
);
[108] Fix | Delete
}
[109] Fix | Delete
[110] Fix | Delete
/**
[111] Fix | Delete
* Get a route path without instantiating the corresponding RoutesController object.
[112] Fix | Delete
*
[113] Fix | Delete
* @throws \Exception If the schema does not exist.
[114] Fix | Delete
*
[115] Fix | Delete
* @param string $version API Version being requested.
[116] Fix | Delete
* @param string $controller Whether to return controller name. If false, returns empty array. Note:
[117] Fix | Delete
* When $controller param is true, the output should not be used directly in front-end code, to prevent class names from leaking. It's not a security issue necessarily, but it's not a good practice.
[118] Fix | Delete
* When $controller param is false, it currently returns and empty array. But it can be modified in future to return include more details about the route info that can be used in frontend.
[119] Fix | Delete
*
[120] Fix | Delete
* @return string[] List of route paths.
[121] Fix | Delete
*/
[122] Fix | Delete
public function get_all_routes( $version = 'v1', $controller = false ) {
[123] Fix | Delete
$routes = array();
[124] Fix | Delete
[125] Fix | Delete
foreach ( $this->routes[ $version ] as $key => $route_class ) {
[126] Fix | Delete
[127] Fix | Delete
if ( ! method_exists( $route_class, 'get_path_regex' ) ) {
[128] Fix | Delete
throw new \Exception( esc_html( "{$route_class} route does not have a get_path_regex method" ) );
[129] Fix | Delete
}
[130] Fix | Delete
[131] Fix | Delete
$route_path = '/' . trailingslashit( self::$api_namespace ) . $version . $route_class::get_path_regex();
[132] Fix | Delete
[133] Fix | Delete
$routes[ $route_path ] = $controller ? $route_class : array();
[134] Fix | Delete
}
[135] Fix | Delete
[136] Fix | Delete
return $routes;
[137] Fix | Delete
}
[138] Fix | Delete
[139] Fix | Delete
/**
[140] Fix | Delete
* Register defined list of routes with WordPress.
[141] Fix | Delete
*
[142] Fix | Delete
* @param string $version API Version being registered..
[143] Fix | Delete
* @param string $namespace Overrides the default route namespace.
[144] Fix | Delete
*/
[145] Fix | Delete
protected function register_routes( $version = 'v1', $namespace = 'wc/store/v1' ) {
[146] Fix | Delete
if ( ! isset( $this->routes[ $version ] ) ) {
[147] Fix | Delete
return;
[148] Fix | Delete
}
[149] Fix | Delete
$route_identifiers = array_keys( $this->routes[ $version ] );
[150] Fix | Delete
foreach ( $route_identifiers as $route ) {
[151] Fix | Delete
$route_instance = $this->get( $route, $version );
[152] Fix | Delete
$route_instance->set_namespace( $namespace );
[153] Fix | Delete
[154] Fix | Delete
register_rest_route(
[155] Fix | Delete
$route_instance->get_namespace(),
[156] Fix | Delete
$route_instance->get_path(),
[157] Fix | Delete
$route_instance->get_args()
[158] Fix | Delete
);
[159] Fix | Delete
}
[160] Fix | Delete
}
[161] Fix | Delete
}
[162] Fix | Delete
[163] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function