OrderNoteSchema.php
<?php
/**
* OrderNoteSchema class.
*
* @package WooCommerce\RestApi
*/
declare( strict_types=1 );
namespace Automattic\WooCommerce\RestApi\Routes\V4\OrderNotes\Schema;
defined( 'ABSPATH' ) || exit;
use Automattic\WooCommerce\RestApi\Routes\V4\AbstractSchema;
use WP_REST_Request;
/**
* OrderNoteSchema class.
*/
class OrderNoteSchema extends AbstractSchema {
/**
* The schema item identifier.
*
* @var string
*/
const IDENTIFIER = 'order_note';
/**
* Return all properties for the item schema.
*
* Note that context determines under which context data should be visible. For example, edit would be the context
* used when getting records with the intent of editing them. embed context allows the data to be visible when the
* item is being embedded in another response.
*
* @return array
*/
public function get_item_schema_properties(): array {
$schema = array(
'id' => array(
'description' => __( 'Unique identifier for the resource.', 'woocommerce' ),
'type' => 'integer',
'context' => self::VIEW_EDIT_EMBED_CONTEXT,
'readonly' => true,
),
'order_id' => array(
'description' => __( 'Order ID the note belongs to.', 'woocommerce' ),
'type' => 'integer',
'context' => self::VIEW_EDIT_CONTEXT,
'readonly' => true,
),
'author' => array(
'description' => __( 'Order note author.', 'woocommerce' ),
'type' => 'string',
'context' => self::VIEW_EDIT_EMBED_CONTEXT,
'readonly' => true,
),
'date_created' => array(
'description' => __( "The date the order note was created, in the site's timezone.", 'woocommerce' ),
'type' => 'string',
'format' => 'date-time',
'context' => self::VIEW_EDIT_EMBED_CONTEXT,
'readonly' => true,
),
'date_created_gmt' => array(
'description' => __( 'The date the order note was created, as GMT.', 'woocommerce' ),
'type' => 'string',
'format' => 'date-time',
'context' => self::VIEW_EDIT_EMBED_CONTEXT,
'readonly' => true,
),
'note' => array(
'description' => __( 'Order note content.', 'woocommerce' ),
'type' => 'string',
'context' => self::VIEW_EDIT_EMBED_CONTEXT,
'required' => true,
),
'is_customer_note' => array(
'description' => __( 'If true, the note will be shown to customers. If false, the note will be for admin reference only.', 'woocommerce' ),
'type' => 'boolean',
'default' => false,
'context' => self::VIEW_EDIT_EMBED_CONTEXT,
),
);
return $schema;
}
/**
* Get the item response.
*
* @param WP_Comment $note Order note object.
* @param WP_REST_Request $request Request object.
* @param array $include_fields Fields to include in the response.
* @return array The item response.
*/
public function get_item_response( $note, WP_REST_Request $request, array $include_fields = array() ): array {
return array(
'id' => (int) $note->comment_ID,
'order_id' => (int) $note->comment_post_ID,
'author' => $note->comment_author,
'date_created' => wc_rest_prepare_date_response( $note->comment_date ),
'date_created_gmt' => wc_rest_prepare_date_response( $note->comment_date_gmt ),
'note' => $note->comment_content,
'is_customer_note' => (bool) get_comment_meta( $note->comment_ID, 'is_customer_note', true ),
);
}
}