WC_Webhook_Data_Store::search_webhooks( array $args )
Search webhooks.
Description Description
Parameters Parameters
- $args
-
(Required) Search arguments.
Return Return
(array|object)
Source Source
File: includes/data-stores/class-wc-webhook-data-store.php
public function search_webhooks( $args ) {
global $wpdb;
$args = wp_parse_args(
$args,
array(
'limit' => 10,
'offset' => 0,
'order' => 'DESC',
'orderby' => 'id',
'paginate' => false,
)
);
// Map post statuses.
$statuses = array(
'publish' => 'active',
'draft' => 'paused',
'pending' => 'disabled',
);
// Map orderby to support a few post keys.
$orderby_mapping = array(
'ID' => 'webhook_id',
'id' => 'webhook_id',
'name' => 'name',
'title' => 'name',
'post_title' => 'name',
'post_name' => 'name',
'date_created' => 'date_created_gmt',
'date' => 'date_created_gmt',
'post_date' => 'date_created_gmt',
'date_modified' => 'date_modified_gmt',
'modified' => 'date_modified_gmt',
'post_modified' => 'date_modified_gmt',
);
$orderby = isset( $orderby_mapping[ $args['orderby'] ] ) ? $orderby_mapping[ $args['orderby'] ] : 'webhook_id';
$order = "ORDER BY {$orderby} " . esc_sql( strtoupper( $args['order'] ) );
$limit = -1 < $args['limit'] ? $wpdb->prepare( 'LIMIT %d', $args['limit'] ) : '';
$offset = 0 < $args['offset'] ? $wpdb->prepare( 'OFFSET %d', $args['offset'] ) : '';
$status = ! empty( $args['status'] ) ? $wpdb->prepare( 'AND `status` = %s', isset( $statuses[ $args['status'] ] ) ? $statuses[ $args['status'] ] : $args['status'] ) : '';
$search = ! empty( $args['search'] ) ? "AND `name` LIKE '%" . $wpdb->esc_like( sanitize_text_field( $args['search'] ) ) . "%'" : '';
$include = '';
$exclude = '';
$date_created = '';
$date_modified = '';
if ( ! empty( $args['include'] ) ) {
$args['include'] = implode( ',', wp_parse_id_list( $args['include'] ) );
$include = 'AND webhook_id IN (' . $args['include'] . ')';
}
if ( ! empty( $args['exclude'] ) ) {
$args['exclude'] = implode( ',', wp_parse_id_list( $args['exclude'] ) );
$exclude = 'AND webhook_id NOT IN (' . $args['exclude'] . ')';
}
if ( ! empty( $args['after'] ) || ! empty( $args['before'] ) ) {
$args['after'] = empty( $args['after'] ) ? '0000-00-00' : $args['after'];
$args['before'] = empty( $args['before'] ) ? current_time( 'mysql', 1 ) : $args['before'];
$date_created = "AND `date_created_gmt` BETWEEN STR_TO_DATE('" . esc_sql( $args['after'] ) . "', '%Y-%m-%d %H:%i:%s') and STR_TO_DATE('" . esc_sql( $args['before'] ) . "', '%Y-%m-%d %H:%i:%s')";
}
if ( ! empty( $args['modified_after'] ) || ! empty( $args['modified_before'] ) ) {
$args['modified_after'] = empty( $args['modified_after'] ) ? '0000-00-00' : $args['modified_after'];
$args['modified_before'] = empty( $args['modified_before'] ) ? current_time( 'mysql', 1 ) : $args['modified_before'];
$date_modified = "AND `date_modified_gmt` BETWEEN STR_TO_DATE('" . esc_sql( $args['modified_after'] ) . "', '%Y-%m-%d %H:%i:%s') and STR_TO_DATE('" . esc_sql( $args['modified_before'] ) . "', '%Y-%m-%d %H:%i:%s')";
}
// Check for cache.
$cache_key = WC_Cache_Helper::get_cache_prefix( 'webhooks' ) . 'search_webhooks' . md5( implode( ',', $args ) );
$cache_value = wp_cache_get( $cache_key, 'webhook_search_results' );
if ( $cache_value ) {
return $cache_value;
}
if ( $args['paginate'] ) {
$query = trim(
"SELECT SQL_CALC_FOUND_ROWS webhook_id
FROM {$wpdb->prefix}wc_webhooks
WHERE 1=1
{$status}
{$search}
{$include}
{$exclude}
{$date_created}
{$date_modified}
{$order}
{$limit}
{$offset}"
);
$webhook_ids = wp_parse_id_list( $wpdb->get_col( $query ) ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
$total = (int) $wpdb->get_var( 'SELECT FOUND_ROWS();' );
$return_value = (object) array(
'webhooks' => $webhook_ids,
'total' => $total,
'max_num_pages' => $args['limit'] > 1 ? ceil( $total / $args['limit'] ) : 1,
);
} else {
$query = trim(
"SELECT webhook_id
FROM {$wpdb->prefix}wc_webhooks
WHERE 1=1
{$status}
{$search}
{$include}
{$exclude}
{$date_created}
{$date_modified}
{$order}
{$limit}
{$offset}"
);
$webhook_ids = wp_parse_id_list( $wpdb->get_col( $query ) ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
$return_value = $webhook_ids;
}
wp_cache_set( $cache_key, $return_value, 'webhook_search_results' );
return $return_value;
}