Initial commit: Open sourcing all of the Maple Open Technologies code.
This commit is contained in:
commit
755d54a99d
2010 changed files with 448675 additions and 0 deletions
|
|
@ -0,0 +1,252 @@
|
|||
<?php
|
||||
/**
|
||||
* The public-facing functionality of the plugin.
|
||||
*
|
||||
* @package MaplePress
|
||||
* @subpackage MaplePress/includes
|
||||
*/
|
||||
|
||||
class MaplePress_Public {
|
||||
|
||||
/**
|
||||
* The ID of this plugin.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private $plugin_name;
|
||||
|
||||
/**
|
||||
* The version of this plugin.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private $version;
|
||||
|
||||
/**
|
||||
* Initialize the class and set its properties.
|
||||
*
|
||||
* @param string $plugin_name The name of the plugin.
|
||||
* @param string $version The version of this plugin.
|
||||
*/
|
||||
public function __construct( $plugin_name, $version ) {
|
||||
$this->plugin_name = $plugin_name;
|
||||
$this->version = $version;
|
||||
}
|
||||
|
||||
/**
|
||||
* Register the stylesheets for the public-facing side of the site.
|
||||
*/
|
||||
public function enqueue_styles() {
|
||||
wp_enqueue_style(
|
||||
$this->plugin_name,
|
||||
MAPLEPRESS_PLUGIN_URL . 'assets/css/maplepress-public.css',
|
||||
array(),
|
||||
$this->version,
|
||||
'all'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Register the JavaScript for the public-facing side of the site.
|
||||
*/
|
||||
public function enqueue_scripts() {
|
||||
wp_enqueue_script(
|
||||
$this->plugin_name,
|
||||
MAPLEPRESS_PLUGIN_URL . 'assets/js/maplepress-public.js',
|
||||
array( 'jquery' ),
|
||||
$this->version,
|
||||
false
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Intercept WordPress search and use MaplePress search instead.
|
||||
*
|
||||
* @param WP_Query $query The WordPress query object.
|
||||
*/
|
||||
public function intercept_search( $query ) {
|
||||
// Debug logging - detect if this is from CLI test
|
||||
$is_cli_test = isset( $_SERVER['HTTP_X_MAPLEPRESS_TEST'] );
|
||||
|
||||
// Log every invocation when WP_DEBUG is on or when it's a CLI test
|
||||
if ( ( defined( 'WP_DEBUG' ) && WP_DEBUG ) || $is_cli_test ) {
|
||||
error_log( '=== MaplePress intercept_search called ===' );
|
||||
error_log( 'is_main_query: ' . ( $query->is_main_query() ? 'true' : 'false' ) );
|
||||
error_log( 'is_search: ' . ( $query->is_search() ? 'true' : 'false' ) );
|
||||
error_log( 's param: ' . var_export( $query->get( 's' ), true ) );
|
||||
error_log( 'CLI test header: ' . ( $is_cli_test ? 'true' : 'false' ) );
|
||||
}
|
||||
|
||||
// Only intercept main search queries
|
||||
// Check both is_search() and presence of 's' parameter to catch all search scenarios
|
||||
$is_search_query = $query->is_search() || ! empty( $query->get( 's' ) );
|
||||
|
||||
if ( ! $query->is_main_query() || ! $is_search_query ) {
|
||||
if ( ( defined( 'WP_DEBUG' ) && WP_DEBUG ) || $is_cli_test ) {
|
||||
error_log( 'MaplePress: Early return - not main query or not search' );
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// Check if MaplePress is enabled
|
||||
$options = get_option( 'maplepress_settings' );
|
||||
if ( empty( $options['enabled'] ) || empty( $options['api_url'] ) || empty( $options['api_key'] ) ) {
|
||||
// MaplePress not enabled or configured, use default WordPress search
|
||||
if ( ( defined( 'WP_DEBUG' ) && WP_DEBUG ) || $is_cli_test ) {
|
||||
error_log( 'MaplePress: Early return - not enabled or not configured' );
|
||||
error_log( 'enabled: ' . var_export( $options['enabled'] ?? null, true ) );
|
||||
error_log( 'api_url: ' . var_export( $options['api_url'] ?? null, true ) );
|
||||
error_log( 'api_key present: ' . ( ! empty( $options['api_key'] ) ? 'yes' : 'no' ) );
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// Check if connection is verified
|
||||
if ( empty( $options['is_verified'] ) ) {
|
||||
if ( ( defined( 'WP_DEBUG' ) && WP_DEBUG ) || $is_cli_test ) {
|
||||
error_log( 'MaplePress: Early return - connection not verified' );
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// Check if search is enabled for the current context
|
||||
// Speed test queries always proceed regardless of admin/frontend settings
|
||||
if ( ! $is_speed_test ) {
|
||||
$is_admin_area = is_admin();
|
||||
$frontend_search_enabled = isset( $options['enable_frontend_search'] ) ? $options['enable_frontend_search'] : true;
|
||||
$admin_search_enabled = isset( $options['enable_admin_search'] ) ? $options['enable_admin_search'] : false;
|
||||
|
||||
// Skip if admin search is not enabled and we're in admin
|
||||
if ( $is_admin_area && ! $admin_search_enabled ) {
|
||||
// In admin but admin search not enabled
|
||||
if ( ( defined( 'WP_DEBUG' ) && WP_DEBUG ) || $is_cli_test ) {
|
||||
error_log( 'MaplePress: Early return - admin search not enabled' );
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// Skip if frontend search is not enabled and we're on frontend
|
||||
if ( ! $is_admin_area && ! $frontend_search_enabled ) {
|
||||
// On frontend but frontend search not enabled
|
||||
if ( ( defined( 'WP_DEBUG' ) && WP_DEBUG ) || $is_cli_test ) {
|
||||
error_log( 'MaplePress: Early return - frontend search not enabled' );
|
||||
}
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
if ( ( defined( 'WP_DEBUG' ) && WP_DEBUG ) || $is_cli_test ) {
|
||||
error_log( 'MaplePress: Speed test query - bypassing admin/frontend check' );
|
||||
}
|
||||
}
|
||||
|
||||
// Get the search query
|
||||
// Try get_search_query() first, then fall back to direct query parameter
|
||||
$search_query = get_search_query();
|
||||
if ( empty( $search_query ) ) {
|
||||
$search_query = $query->get( 's' );
|
||||
}
|
||||
if ( empty( $search_query ) ) {
|
||||
if ( ( defined( 'WP_DEBUG' ) && WP_DEBUG ) || $is_cli_test ) {
|
||||
error_log( 'MaplePress: Early return - empty search query' );
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if ( ( defined( 'WP_DEBUG' ) && WP_DEBUG ) || $is_cli_test ) {
|
||||
error_log( 'MaplePress: Proceeding with search for: ' . $search_query );
|
||||
}
|
||||
|
||||
// Call MaplePress search API
|
||||
require_once MAPLEPRESS_PLUGIN_DIR . 'includes/class-maplepress-api-client.php';
|
||||
$api_client = new MaplePress_API_Client( $options['api_url'], $options['api_key'] );
|
||||
|
||||
$search_args = array(
|
||||
'limit' => (int) $query->get( 'posts_per_page', 10 ),
|
||||
'offset' => (int) ( ( $query->get( 'paged', 1 ) - 1 ) * $query->get( 'posts_per_page', 10 ) ),
|
||||
);
|
||||
|
||||
if ( ( defined( 'WP_DEBUG' ) && WP_DEBUG ) || $is_cli_test ) {
|
||||
error_log( 'MaplePress: Calling API with query: ' . $search_query );
|
||||
error_log( 'MaplePress: API URL: ' . $options['api_url'] );
|
||||
error_log( 'MaplePress: Search args: ' . json_encode( $search_args ) );
|
||||
}
|
||||
|
||||
$result = $api_client->search( $search_query, $search_args );
|
||||
|
||||
if ( is_wp_error( $result ) ) {
|
||||
// API error - fall back to default WordPress search
|
||||
// Log the error for debugging
|
||||
if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
|
||||
error_log( 'MaplePress search error: ' . $result->get_error_message() );
|
||||
}
|
||||
if ( $is_cli_test ) {
|
||||
error_log( 'MaplePress search error (CLI test): ' . $result->get_error_message() );
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if ( ( defined( 'WP_DEBUG' ) && WP_DEBUG ) || $is_cli_test ) {
|
||||
error_log( 'MaplePress: API call successful, results: ' . json_encode( $result ) );
|
||||
}
|
||||
|
||||
// Extract page IDs from MaplePress results
|
||||
$page_ids = array();
|
||||
if ( ! empty( $result['hits'] ) ) {
|
||||
foreach ( $result['hits'] as $result_item ) {
|
||||
// Meilisearch returns 'id' field, not 'page_id'
|
||||
if ( ! empty( $result_item['id'] ) ) {
|
||||
$page_ids[] = (int) $result_item['id'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// If no results, show empty results
|
||||
if ( empty( $page_ids ) ) {
|
||||
$query->set( 'post__in', array( 0 ) ); // Force no results
|
||||
} else {
|
||||
// Set query to only return posts matching MaplePress results in the correct order
|
||||
$query->set( 'post__in', $page_ids );
|
||||
$query->set( 'orderby', 'post__in' ); // Maintain MaplePress result order
|
||||
|
||||
// In admin context, respect the existing post_type filter (e.g., 'page' when in Pages list)
|
||||
// On frontend, allow any post type
|
||||
if ( ! is_admin() ) {
|
||||
$query->set( 'post_type', 'any' ); // Allow any post type on frontend
|
||||
}
|
||||
// Note: In admin, we preserve whatever post_type was already set by WordPress
|
||||
|
||||
$query->set( 'post_status', 'publish' );
|
||||
|
||||
// Disable the default search query
|
||||
$query->set( 's', '' );
|
||||
}
|
||||
|
||||
// Store the original search query for display
|
||||
$query->set( 'maplepress_search_query', $search_query );
|
||||
|
||||
// Store total results for pagination
|
||||
if ( ! empty( $result['total_hits'] ) ) {
|
||||
add_filter( 'found_posts', function( $found_posts, $query ) use ( $result ) {
|
||||
if ( $query->get( 'maplepress_search_query' ) ) {
|
||||
return (int) $result['total_hits'];
|
||||
}
|
||||
return $found_posts;
|
||||
}, 10, 2 );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Restore the search query for display purposes.
|
||||
*
|
||||
* @param string $search_query The search query.
|
||||
* @return string
|
||||
*/
|
||||
public function restore_search_query( $search_query ) {
|
||||
global $wp_query;
|
||||
$maplepress_query = $wp_query->get( 'maplepress_search_query' );
|
||||
if ( ! empty( $maplepress_query ) ) {
|
||||
return $maplepress_query;
|
||||
}
|
||||
return $search_query;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue