Initial Commit
This commit is contained in:
133
inc/functions/rest.php
Normal file
133
inc/functions/rest.php
Normal file
@ -0,0 +1,133 @@
|
||||
<?php
|
||||
/**
|
||||
* REST API Functions
|
||||
*
|
||||
* @package WP_Ultimo\Functions
|
||||
* @since 2.0.11
|
||||
*/
|
||||
|
||||
// Exit if accessed directly
|
||||
defined('ABSPATH') || exit;
|
||||
|
||||
/**
|
||||
* Get a endpoint nice-name from a class name.
|
||||
*
|
||||
* Example: '\WP_Ultimo\Models\Product' will return 'product'.
|
||||
*
|
||||
* @since 2.0.11
|
||||
*
|
||||
* @param string $class_name The class name. The class needs to exist.
|
||||
* @return string
|
||||
*/
|
||||
function wu_rest_get_endpoint_from_class_name($class_name) {
|
||||
|
||||
$endpoint = $class_name;
|
||||
|
||||
if (class_exists($class_name)) {
|
||||
|
||||
$last_segment = explode('\\', $class_name);
|
||||
|
||||
$endpoint = strtolower(end($last_segment));
|
||||
|
||||
} // end if;
|
||||
|
||||
return $endpoint;
|
||||
|
||||
} // end wu_rest_get_endpoint_from_class_name;
|
||||
|
||||
/**
|
||||
* Searches the hard-coded schemas for a arguments list.
|
||||
*
|
||||
* @since 2.0.11
|
||||
*
|
||||
* @param string $class_name The class name. The class needs to exist.
|
||||
* @param string $context The context. One of two values - create or update.
|
||||
* @param boolean $force_generate If we should try to generate the args when nothing is found.
|
||||
* @return array
|
||||
*/
|
||||
function wu_rest_get_endpoint_schema($class_name, $context = 'create', $force_generate = false) {
|
||||
|
||||
$from_cache = false;
|
||||
|
||||
$schema = array();
|
||||
|
||||
$endpoint = wu_rest_get_endpoint_from_class_name($class_name);
|
||||
|
||||
$schema_file = wu_path("inc/api/schemas/$endpoint-$context.php");
|
||||
|
||||
if (file_exists($schema_file) && apply_filters('wu_rest_get_endpoint_schema_use_cache', true)) {
|
||||
|
||||
$schema = include $schema_file;
|
||||
|
||||
$from_cache = true;
|
||||
|
||||
} // end if;
|
||||
|
||||
if (empty($schema) && $from_cache === false && $force_generate) {
|
||||
|
||||
$schema = wu_rest_generate_schema($class_name, $context);
|
||||
|
||||
} // end if;
|
||||
|
||||
return $schema;
|
||||
|
||||
} // end wu_rest_get_endpoint_schema;
|
||||
|
||||
/**
|
||||
* Generates the rest schema for a class name.
|
||||
*
|
||||
* @since 2.0.11
|
||||
*
|
||||
* @param string $class_name The class name of the model.
|
||||
* @param string $context The context. Can be create or update.
|
||||
* @return array
|
||||
*/
|
||||
function wu_rest_generate_schema($class_name, $context = 'create') {
|
||||
|
||||
$required_fields = wu_model_get_required_fields($class_name);
|
||||
|
||||
$schema = wu_reflection_parse_object_arguments($class_name);
|
||||
|
||||
foreach ($schema as $argument_name => &$argument) {
|
||||
|
||||
$argument['type'] = wu_rest_treat_argument_type($argument['type']);
|
||||
|
||||
$argument['required'] = $context === 'create' ? in_array($argument_name, $required_fields, true) : false;
|
||||
|
||||
$schema[$argument_name] = $argument;
|
||||
|
||||
} // end foreach;
|
||||
|
||||
return $schema;
|
||||
|
||||
} // end wu_rest_generate_schema;
|
||||
|
||||
/**
|
||||
* Treat argument types to perform additional validations.
|
||||
*
|
||||
* @since 2.0.11
|
||||
*
|
||||
* @param string $type The type detected.
|
||||
* @return string
|
||||
*/
|
||||
function wu_rest_treat_argument_type($type) {
|
||||
|
||||
$type = (string) $type;
|
||||
|
||||
if ($type === 'bool') {
|
||||
|
||||
$type = 'boolean';
|
||||
|
||||
} elseif ($type === 'int') {
|
||||
|
||||
$type = 'integer';
|
||||
|
||||
} elseif ($type === 'float') {
|
||||
|
||||
$type = 'number';
|
||||
|
||||
} // end if;
|
||||
|
||||
return $type;
|
||||
|
||||
} // end wu_rest_treat_argument_type;
|
Reference in New Issue
Block a user