File "class-wc-rest-connect-packages-controller.php"
Full Path: /home/vantageo/public_html/cache/cache/cache/cache/.wp-cli/wp-content/plugins/woocommerce-services/classes/class-wc-rest-connect-packages-controller.php
File size: 6.06 KB
MIME-type: text/x-php
Charset: utf-8
<?php
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
if ( class_exists( 'WC_REST_Connect_Packages_Controller' ) ) {
return;
}
class WC_REST_Connect_Packages_Controller extends WC_REST_Connect_Base_Controller {
protected $rest_base = 'connect/packages';
/**
* @var WC_Connect_Package_Settings
*/
protected $package_settings;
public function __construct( WC_Connect_API_Client $api_client, WC_Connect_Service_Settings_Store $settings_store, WC_Connect_Logger $logger, WC_Connect_Service_Schemas_Store $service_schemas_store ) {
parent::__construct( $api_client, $settings_store, $logger );
$this->package_settings = new WC_Connect_Package_Settings(
$settings_store,
$service_schemas_store
);
}
public function get() {
return new WP_REST_Response(
array_merge(
array( 'success' => true ),
$this->package_settings->get()
),
200
);
}
/**
* Update the existing custom and predefined packages.
*
* @param WP_REST_Request $request The request body contains the custom/predefined packages to replace.
* @return WP_REST_Response
*/
public function put( $request ) {
$packages = $request->get_json_params();
$this->settings_store->update_packages( $packages['custom'] );
$this->settings_store->update_predefined_packages( $packages['predefined'] );
return new WP_REST_Response( array( 'success' => true ), 200 );
}
/**
* Create custom and/or predefined packages.
*
* @param WP_REST_Request $request The request body contains the custom/predefined packages to create.
* @return WP_Error|WP_REST_Response
*/
public function post( $request ) {
$packages = $request->get_json_params();
$custom_packages = isset( $packages['custom'] ) ? $packages['custom'] : array();
$predefined_packages = isset( $packages['predefined'] ) ? $packages['predefined'] : array();
// Handle new custom packages. The custom packages are structured as an array of packages as dictionaries.
if ( ! empty( $custom_packages ) ) {
// Validate that the new custom packages have unique names.
$map_package_name = function( $package ) {
return $package['name'];
};
$custom_package_names = array_map( $map_package_name, $custom_packages );
$unique_custom_package_names = array_unique( $custom_package_names );
if ( count( $unique_custom_package_names ) < count( $custom_package_names ) ) {
$duplicate_package_names = array_diff_assoc( $custom_package_names, $unique_custom_package_names );
$error = array(
'code' => 'duplicate_custom_package_names',
'message' => __( 'The new custom package names are not unique.' ),
'data' => array( 'package_names' => array_values( $duplicate_package_names ) ),
);
return new WP_REST_Response( $error, 400 );
}
// Validate that the new custom packages do not have the same names as existing custom packages.
$existing_custom_packages = $this->settings_store->get_packages();
$existing_custom_package_names = array_map( $map_package_name, $existing_custom_packages );
$duplicate_package_names = array_intersect( $existing_custom_package_names, $custom_package_names );
if ( ! empty( $duplicate_package_names ) ) {
$error = array(
'code' => 'duplicate_custom_package_names_of_existing_packages',
'message' => __( 'At least one of the new custom packages has the same name as existing packages.' ),
'data' => array( 'package_names' => array_values( $duplicate_package_names ) ),
);
return new WP_REST_Response( $error, 400 );
}
// If no duplicate custom packages, create the given packages.
$this->settings_store->create_packages( $custom_packages );
}
// Handle new predefined packages. The predefined packages are structured as a dictionary from carrier name to
// an array of package names.
if ( ! empty( $predefined_packages ) ) {
$duplicate_package_names_by_carrier = array();
// Validate that the new predefined packages have unique names for each carrier.
foreach ( $predefined_packages as $carrier => $package_names ) {
$unique_package_names = array_unique( $package_names );
if ( count( $unique_package_names ) < count( $package_names ) ) {
$duplicate_package_names = array_diff_assoc( $package_names, $unique_package_names );
$duplicate_package_names_by_carrier[ $carrier ] = array_values( $duplicate_package_names );
}
}
if ( ! empty( $duplicate_package_names_by_carrier ) ) {
$error = array(
'code' => 'duplicate_predefined_package_names',
'message' => __( 'The new predefined package names are not unique.' ),
'data' => array( 'package_names_by_carrier' => $duplicate_package_names_by_carrier ),
);
return new WP_REST_Response( $error, 400 );
}
// Validate that the new predefined packages for each carrier do not have the same names as existing predefined packages.
$existing_predefined_packages = $this->settings_store->get_predefined_packages();
if ( ! empty( $existing_predefined_packages ) ) {
foreach ( $existing_predefined_packages as $carrier => $existing_package_names ) {
$new_package_names = isset( $predefined_packages[ $carrier ] ) ? $predefined_packages[ $carrier ] : array();
$duplicate_package_names = array_intersect( $existing_package_names, $new_package_names );
if ( ! empty( $duplicate_package_names ) ) {
$duplicate_package_names_by_carrier[ $carrier ] = array_values( $duplicate_package_names );
}
}
}
if ( ! empty( $duplicate_package_names_by_carrier ) ) {
$error = array(
'code' => 'duplicate_predefined_package_names_of_existing_packages',
'message' => __( 'At least one of the new predefined packages has the same name as existing packages.' ),
'data' => array( 'package_names_by_carrier' => $duplicate_package_names_by_carrier ),
);
return new WP_REST_Response( $error, 400 );
}
// If no duplicate predefined packages, create the given packages.
$this->settings_store->create_predefined_packages( $predefined_packages );
}
return new WP_REST_Response( array( 'success' => true ), 200 );
}
}