File "class-wc-connect-service-schemas-validator.php"
Full Path: /home/vantageo/public_html/cache/cache/cache/cache/.wp-cli/wp-content/plugins/woocommerce-services/classes/class-wc-connect-service-schemas-validator.php
File size: 5.66 KB
MIME-type: text/x-php
Charset: utf-8
<?php
if ( ! class_exists( 'WC_Connect_Service_Schemas_Validator' ) ) {
class WC_Connect_Service_Schemas_Validator {
/**
* Validates the overall passed services object (all service types and all services therein)
*
* @param object $services
*
* @return WP_Error|true
*/
public function validate_service_schemas( $service_schemas ) {
if ( ! is_object( $service_schemas ) ) {
return new WP_Error(
'outermost_container_not_object',
'Malformed service schemas. Outermost container is not an object.'
);
}
if ( ! isset( $service_schemas->shipping ) || ! is_array( $service_schemas->shipping ) ) {
return new WP_Error(
'service_type_not_ref_array',
'Malformed service schemas. \'shipping\' does not reference an array.'
);
}
$service_counter = 0;
foreach ( $service_schemas->shipping as $service_schema ) {
if ( ! is_object( $service_schema ) ) {
return new WP_Error(
'service_not_ref_object',
sprintf(
'Malformed service schema. Service type \'shipping\' [%d] does not reference an object.',
$service_counter
)
);
}
$result = $this->validate_service_schema( 'shipping', $service_counter, $service_schema );
if ( is_wp_error( $result ) ) {
return $result;
}
$service_counter ++;
}
if ( ! isset( $service_schemas->boxes ) || ! is_object( $service_schemas->boxes ) ) {
return new WP_Error(
'boxes_not_object',
'Malformed service schemas. \'boxes\' is not an object.'
);
}
return true;
}
/**
* Validates a particular service schema, especially the parts of the service that WC relies
* on like id, method_title, method_description, etc
*
* @param string $service_type
* @param integer $service_counter
* @param object $service
*
* @return WP_Error|true
*/
protected function validate_service_schema( $service_type, $service_counter, $service_schema ) {
$required_properties = array(
'id' => 'string',
'method_description' => 'string',
'method_title' => 'string',
'service_settings' => 'object',
'form_layout' => 'array',
);
foreach ( $required_properties as $required_property => $required_property_type ) {
if ( ! property_exists( $service_schema, $required_property ) ) {
return new WP_Error(
'required_service_property_missing',
sprintf(
'Malformed service schema. Service type \'%s\' [%d] does not include a required \'%s\' property.',
$service_type,
$service_counter,
$required_property
)
);
}
$property_type = gettype( $service_schema->$required_property );
if ( $required_property_type !== $property_type ) {
return new WP_Error(
'required_service_property_wrong_type',
sprintf(
'Malformed service schema. Service type \'%s\' [%d] property \'%s\' is a %s. Was expecting a %s.',
$service_type,
$service_counter,
$service_schema->$required_property,
$property_type,
$required_property_type
)
);
}
}
return $this->validate_service_schema_settings( $service_schema->id, $service_schema->service_settings );
}
/**
* Validates a particular service's service settings schema, especially the parts of the
* service settings that WC relies on like type, required and properties
*
* @param string $service_id
* @param object $service_settings
*
* @return WP_Error|true
*/
protected function validate_service_schema_settings( $service_id, $service_settings ) {
$required_properties = array(
'type' => 'string',
'required' => 'array',
'properties' => 'object',
);
foreach ( $required_properties as $required_property => $required_property_type ) {
if ( ! property_exists( $service_settings, $required_property ) ) {
return new WP_Error(
'service_settings_missing_required_property',
sprintf(
'The settings part of a service schema is malformed. Service \'%s\' service_settings do not include a required \'%s\' property.',
$service_id,
$required_property
)
);
}
$property_type = gettype( $service_settings->$required_property );
if ( $required_property_type !== $property_type ) {
return new WP_Error(
'service_settings_property_wrong_type',
sprintf(
"The settings part of a service schema is malformed. Service '%s' service_setting property '%s' is a %s. Was expecting a %s.",
$service_id,
$required_property,
$property_type,
$required_property_type
)
);
}
}
$result = $this->validate_service_settings_required_properties( $service_id, $service_settings->properties );
if ( is_wp_error( $result ) ) {
return $result;
}
return true;
}
/**
* Validates a particular service's schema's required properties, especially the parts of the
* properties that WC relies on and title
*
* @param string $service_id
* @param object $service_settings_properties
*
* @return WP_Error|true
*/
protected function validate_service_settings_required_properties( $service_id, $service_settings_properties ) {
$required_properties = array(
'title',
);
foreach ( $required_properties as $required_property ) {
if ( ! property_exists( $service_settings_properties, $required_property ) ) {
return new WP_Error(
'service_properties_missing_required_property',
sprintf(
"The properties part of a service schema is malformed. Service '%s' service_settings properties do not include a required '%s' property.",
$service_id,
$required_property
)
);
}
}
return true;
}
}
}