Merged in feature/plugins-update (pull request #9)

wp plugin updates from pantheon

* wp plugin updates from pantheon
This commit is contained in:
Tony Volpe
2023-12-15 18:08:21 +00:00
parent 28c21bf9b1
commit 779393381f
577 changed files with 154305 additions and 0 deletions

View File

@@ -0,0 +1,180 @@
<?php
class FacetWP_API_Fetch
{
function __construct() {
add_action( 'rest_api_init', [ $this, 'register' ] );
}
// PHP < 5.3
function register() {
register_rest_route( 'facetwp/v1', '/fetch', [
'methods' => 'POST',
'callback' => [ $this, 'callback' ],
'permission_callback' => [ $this, 'permission_callback' ]
] );
}
// PHP < 5.3
function callback( $request ) {
$data = $request->get_param( 'data' );
if ( ! $request->is_json_content_type()) {
$data = empty( $data ) ? [] : json_decode( $data, true );
}
return $this->process_request( $data );
}
// PHP < 5.3
function permission_callback( $request ) {
return apply_filters( 'facetwp_api_can_access', false, $request );
}
function process_request( $params = [] ) {
global $wpdb;
$defaults = [
'facets' => [
// 'category' => [ 'acf' ]
],
'query_args' => [
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => 10,
'paged' => 1,
],
'settings' => [
'first_load' => true
]
];
$params = array_merge( $defaults, $params );
$facet_types = FWP()->helper->facet_types;
$valid_facets = [];
$facets = [];
// Validate input
$page = (int) ( $params['query_args']['paged'] ?? 1 );
$per_page = (int) ( $params['query_args']['posts_per_page'] ?? 10 );
$page = max( $page, 1 );
$per_page = ( 0 === $per_page ) ? 10 : $per_page;
$per_page = ( -1 > $per_page ) ? absint( $per_page ) : $per_page;
$params['query_args']['paged'] = $page;
$params['query_args']['posts_per_page'] = $per_page;
// Generate FWP()->facet->facets
// Required by FWP()->helper->facet_setting_exists()
foreach ( $params['facets'] as $facet_name => $facet_value ) {
$facet = FWP()->helper->get_facet_by_name( $facet_name );
if ( false !== $facet ) {
$facet['selected_values'] = (array) $facet_value;
$valid_facets[ $facet_name ] = $facet;
FWP()->facet->facets[ $facet_name ] = $facet;
}
}
// Get bucket of post IDs
$query_args = $params['query_args'];
FWP()->facet->query_args = $query_args;
$post_ids = FWP()->facet->get_filtered_post_ids( $query_args );
// SQL WHERE used by facets
$where_clause = ' AND post_id IN (' . implode( ',', $post_ids ) . ')';
// Check if empty
if ( 0 === $post_ids[0] && 1 === count( $post_ids ) ) {
$post_ids = [];
}
// get_where_clause() needs "found_posts" (keep this BELOW the empty check)
FWP()->facet->query = (object) [ 'found_posts' => count( $post_ids ) ];
// Get valid facets and their values
foreach ( $valid_facets as $facet_name => $facet ) {
$args = [
'facet' => $facet,
'where_clause' => $where_clause,
'selected_values' => $facet['selected_values'],
];
$facet_data = [
'name' => $facet['name'],
'label' => $facet['label'],
'type' => $facet['type'],
'selected' => $facet['selected_values'],
];
// Load facet choices if available
if ( method_exists( $facet_types[ $facet['type'] ], 'load_values' ) ) {
$choices = $facet_types[ $facet['type'] ]->load_values( $args );
foreach ( $choices as $key => $choice ) {
$row = [
'value' => $choice['facet_value'],
'label' => $choice['facet_display_value'],
'depth' => (int) $choice['depth'],
'count' => (int) $choice['counter'],
];
if ( isset( $choice['term_id'] ) ) {
$row['term_id'] = (int) $choice['term_id'];
}
if ( isset( $choice['parent_id'] ) ) {
$row['parent_id'] = (int) $choice['parent_id'];
}
$choices[ $key ] = $row;
}
$facet_data['choices'] = $choices;
}
// Load facet settings if available
if ( method_exists( $facet_types[ $facet['type'] ], 'settings_js' ) ) {
$facet_data['settings'] = $facet_types[ $facet['type'] ]->settings_js( $args );
}
$facets[ $facet_name ] = $facet_data;
}
$total_rows = count( $post_ids );
// Paginate?
if ( 0 < $per_page ) {
$total_pages = ceil( $total_rows / $per_page );
if ( $page > $total_pages ) {
$post_ids = [];
}
else {
$offset = ( $per_page * ( $page - 1 ) );
$post_ids = array_slice( $post_ids, $offset, $per_page );
}
}
else {
$total_pages = ( 0 < $total_rows ) ? 1 : 0;
}
// Generate the output
$output = [
'results' => $post_ids,
'facets' => $facets,
'pager' => [
'page' => $page,
'per_page' => $per_page,
'total_rows' => $total_rows,
'total_pages' => $total_pages,
]
];
return apply_filters( 'facetwp_api_output', $output );
}
}

View File

@@ -0,0 +1,27 @@
<?php
add_action( 'rest_api_init', function() {
register_rest_route( 'facetwp/v1', '/refresh', [
'methods' => 'POST',
'callback' => 'facetwp_api_refresh',
'permission_callback' => '__return_true'
] );
});
function facetwp_api_refresh( $request ) {
$params = $request->get_params();
$action = $params['action'] ?? '';
$valid_actions = [
'facetwp_refresh',
'facetwp_autocomplete_load'
];
$valid_actions = apply_filters( 'facetwp_api_valid_actions', $valid_actions );
if ( in_array( $action, $valid_actions ) ) {
do_action( $action );
}
return [];
}