2026-03-26 12:07:55 +00:00

162 lines
3.8 KiB
PHP

<?php
/**
* Simply Schedule Appointments Appointment Meta Model.
*
* @since 3.3.0
* @package Simply_Schedule_Appointments
*/
/**
* Simply Schedule Appointments Appointment Meta Model.
*
* @since 3.3.0
*/
class SSA_Appointment_Meta_Model extends SSA_Db_Model {
protected $slug = 'appointment_meta';
protected $version = '1.0.0';
/**
* Parent plugin class.
*
* @since 0.0.2
*
* @var Simply_Schedule_Appointments
*/
protected $plugin = null;
public function get_pluralized_slug() {
return 'appointment_meta';
}
/**
* Constructor.
*
* @since 0.0.2
*
* @param Simply_Schedule_Appointments $plugin Main plugin object.
*/
public function __construct( $plugin ) {
// $this->version = $this->version.'.'.time(); // dev mode
parent::__construct( $plugin );
$this->hooks();
}
/**
* Initiate our hooks.
*
* @since 0.0.2
*/
public function hooks() {
}
public function rest_api_init() {
// No API Endpoints for this model
// All manipulations should be done through an Appointment
// $this->register_routes();
}
public function belongs_to() {
return array(
// 'Author' => array(
// 'model' => 'WP_User_Model',
// 'foreign_key' => 'author_id',
// ),
'Appointment' => array(
'model' => $this->plugin->appointment_model,
'foreign_key' => 'appointment_id',
),
);
}
protected $schema = array(
'appointment_id' => array(
'field' => 'appointment_id',
'label' => 'Appointment Type ID',
'default_value' => 0,
'format' => '%d',
'mysql_type' => 'BIGINT',
'mysql_length' => 20,
'mysql_unsigned' => true,
'mysql_allow_null' => false,
'mysql_extra' => '',
'cache_key' => false,
),
'meta_key' => array(
'field' => 'meta_key',
'label' => 'Meta Key',
'default_value' => false,
'format' => '%s',
'mysql_type' => 'VARCHAR',
'mysql_length' => '120',
'mysql_unsigned' => false,
'mysql_allow_null' => false,
'mysql_extra' => '',
'cache_key' => false,
),
'meta_value' => array(
'field' => 'meta_value',
'label' => 'Meta Value',
'default_value' => false,
'format' => '%s',
'mysql_type' => 'TEXT',
'mysql_length' => false,
'mysql_unsigned' => false,
'mysql_allow_null' => false,
'mysql_extra' => '',
'cache_key' => false,
'encoder' => 'json_serialize',
),
);
public $indexes = array(
'appointment_id' => [ 'appointment_id' ],
'meta_key' => [ 'meta_key' ],
);
public function filter_where_conditions( $where, $args ) {
global $wpdb;
if ( ! empty( $args['appointment_id'] ) ) {
// Check if appointment_id is an array
if ( is_array( $args['appointment_id'] ) ) {
$ids = array_map('sanitize_text_field', $args['appointment_id']);
$ids = array_map('esc_sql', $ids);
$placeholders = implode(',', array_fill(0, count($ids), '%d'));
$where .= call_user_func_array(array($wpdb, 'prepare'), array_merge(array(" AND appointment_id IN ($placeholders)"), $ids));
} else {
$where .= $wpdb->prepare( ' AND appointment_id=%d', sanitize_text_field( $args['appointment_id'] ) );
}
}
if ( ! empty( $args['meta_key'] ) ) {
$where .= $wpdb->prepare( ' AND meta_key=%s', sanitize_text_field( $args['meta_key'] ) );
}
if ( ! empty( $args['meta_value'] ) ) {
$where .= $wpdb->prepare( ' AND meta_value=%s', sanitize_text_field( $args['meta_value'] ) );
}
return $where;
}
public function create_item_permissions_check( $request ) {
return $this->nonce_permissions_check( $request );
}
/**
* Check if a given request has access to update a specific item
*
* @param WP_REST_Request $request Full data about the request.
* @return WP_Error|bool
*/
public function update_item_permissions_check( $request ) {
if ( true === $this->get_item_permissions_check( $request ) ) {
return true;
}
return false;
}
}