2026-03-27 11:54:51 +00:00

113 lines
2.5 KiB
PHP

<?php
/**
* Simply Schedule Appointments Customers.
*
* @since 2.7.1
* @package Simply_Schedule_Appointments
*/
/**
* Simply Schedule Appointments Customers.
*
* @since 2.7.1
*/
class SSA_Customers {
/**
* Parent plugin class.
*
* @since 2.7.1
*
* @var Simply_Schedule_Appointments
*/
protected $plugin = null;
/**
* Constructor.
*
* @since 2.7.1
*
* @param Simply_Schedule_Appointments $plugin Main plugin object.
*/
public function __construct( $plugin ) {
$this->plugin = $plugin;
$this->hooks();
}
/**
* Initiate our hooks.
*
* @since 2.7.1
*/
public function hooks() {
add_action( 'rest_api_init', array( $this, 'register_customers_endpoint' ) );
}
public function register_customers_endpoint( $request ) {
$namespace = 'ssa/v1';
$base = 'customers';
register_rest_route( $namespace, '/' . $base . '/', array(
array(
'methods' => WP_REST_Server::READABLE,
'callback' => array( $this, 'get_items' ),
'permission_callback' => array( $this, 'get_items_permissions_check' ),
'args' => array(
'context' => array(
'default' => 'view',
),
),
),
array(
'methods' => WP_REST_Server::CREATABLE,
'callback' => array( $this, 'get_items' ),
'permission_callback' => array( $this, 'get_items_permissions_check' ),
'args' => array(),
),
) );
}
public function get_items_permissions_check( $request ) {
return current_user_can( 'ssa_manage_appointments' );
}
public function get_items( $request ) {
$params = $request->get_params();
// Support both GET (legacy) and POST (to avoid 414 errors with large ID lists)
if ( 'POST' === $request->get_method() ) {
$body = $request->get_json_params();
if ( ! empty( $body['ids'] ) ) {
$params['ids'] = $body['ids'];
}
}
$data = array();
if ( ! empty( $params['ids'] ) ) {
if ( ! is_array( $params['ids'] ) ) {
$params['ids'] = json_decode( $params['ids'], true );
}
foreach ($params['ids'] as $key => $id) {
$user = new WP_User( $id );
if ( empty( (array)$user->data ) ) {
continue;
}
$user_data = (array)$user->data;
$data[] = array(
'id' => $user_data['ID'],
'name' => $user_data['display_name'],
'gravatar_url' => get_avatar_url( $user_data['ID'] )
);
}
}
$response = array(
'response_code' => 200,
'error' => '',
'data' => $data,
);
return new WP_REST_Response( $response, 200 );
}
}