<?php /** * Plugin Name: FiboSearch - AJAX Search for WooCommerce * Plugin URI: https://fibosearch.com?utm_source=wp-admin&utm_medium=referral&utm_campaign=author_uri&utm_gen=utmdc * Description: The most popular WooCommerce product search. Gives your users a well-designed advanced AJAX search bar with live search suggestions. * Version: 1.28.1 * Author: FiboSearch Team * Author URI: https://fibosearch.com?utm_source=wp-admin&utm_medium=referral&utm_campaign=author_uri&utm_gen=utmdc * Text Domain: ajax-search-for-woocommerce * Domain Path: /languages * WC requires at least: 5.5 * WC tested up to: 9.1 * */ // Exit if accessed directly if ( !defined( 'ABSPATH' ) ) { exit; } if ( !class_exists( 'DGWT_WC_Ajax_Search' ) && !function_exists( 'dgoraAsfwFs' ) ) { $fspath = dirname( __FILE__ ) . '/fs/config.php'; if ( file_exists( $fspath ) ) { require_once $fspath; } final class DGWT_WC_Ajax_Search { private static $instance; private $tnow; public $engine = 'native'; /** * @var \DgoraWcas\Settings */ public $settings; /** * @var \DgoraWcas\Setup */ public $setup; public $multilingual; /** * @var \DgoraWcas\Integrations\Themes\ThemesCompatibility */ public $themeCompatibility; /** * @var \DgoraWcas\Integrations\Brands */ public $brands; /** * @var \DgoraWcas\Integrations\Marketplace\Marketplace */ public $marketplace; /** * @var \DgoraWcas\Engines\WordPressNative\Search */ public $nativeSearch; /** * @var \DgoraWcas\Personalization */ public $personalization; /** * @var \DgoraWcas\Engines\TNTSearchMySQL\TNTSearch */ public $tntsearchMySql; /** * @var \DgoraWcas\Search */ protected $search; public $tntsearchMySqlValid = false; public $searchInstances = 0; public static function getInstance() { if ( !isset( self::$instance ) && !self::$instance instanceof DGWT_WC_Ajax_Search ) { self::$instance = new DGWT_WC_Ajax_Search(); self::$instance->constants(); self::$instance->loadTextdomain(); if ( !self::$instance->checkRequirements() ) { return; } self::$instance->systemHooks(); self::$instance->autoload(); self::$instance->setup = new \DgoraWcas\Setup(); self::$instance->setup->init(); self::$instance->settings = new \DgoraWcas\Settings(); self::$instance->hooks(); new \DgoraWcas\Integrations\Plugins\PluginsCompatibility(); self::$instance->multilingual = new \DgoraWcas\Multilingual(); self::$instance->nativeSearch = new \DgoraWcas\Engines\WordPressNative\Search(); // @TODO Temporary always use native WordPress DetailsBox engine. // Replace with details.php and shortinit in future releases new \DgoraWcas\Engines\WordPressNative\DetailsBox(); self::$instance->personalization = new \DgoraWcas\Personalization(); new \DgoraWcas\Scripts(); $embeddingViaMenu = new \DgoraWcas\EmbeddingViaMenu(); $embeddingViaMenu->init(); self::$instance->themeCompatibility = new \DgoraWcas\Integrations\Themes\ThemesCompatibility(); self::$instance->brands = new \DgoraWcas\Integrations\Brands(); self::$instance->brands->init(); \DgoraWcas\Shortcode::register(); if ( is_admin() ) { \DgoraWcas\Admin\Install::maybeInstall(); new \DgoraWcas\Admin\AdminMenu(); new \DgoraWcas\Admin\Promo\FeedbackNotice(); new \DgoraWcas\Admin\Promo\Upgrade(); new \DgoraWcas\Admin\Troubleshooting(); } if ( is_admin() || wp_doing_cron() ) { $analytics = new \DgoraWcas\Analytics\Analytics(); $analytics->init(); } new \DgoraWcas\Integrations\Solver(); global $wp_version; if ( version_compare( $wp_version, '5.9' ) >= 0 ) { $blocks = new \DgoraWcas\Blocks(); $blocks->init(); } } self::$instance->tnow = time(); return self::$instance; } /** * Constructor Function */ private function __construct() { self::$instance = $this; } /** * Uninstall, Activate, Deactivate hooks * * @return void */ private function systemHooks() { register_deactivation_hook( __FILE__, function () { } ); } /** * Check requirements * * @return bool */ private function checkRequirements() { if ( version_compare( PHP_VERSION, '7.0' ) < 0 ) { add_action( 'admin_notices', array($this, 'adminNoticeReqPhp70') ); return false; } if ( !class_exists( 'WooCommerce' ) || !class_exists( 'WC_AJAX' ) ) { add_action( 'admin_notices', array($this, 'adminNoticeNoWoocommerce') ); return false; } if ( !file_exists( DGWT_WCAS_DIR . 'vendor/autoload.php' ) ) { add_action( 'admin_notices', array($this, 'adminNoticeNoVendor') ); return false; } return true; } /** * Notice: Minimum required PHP version is 7.0 * * @return void */ public function adminNoticeReqPhp70() { if ( defined( 'DISABLE_NAG_NOTICES' ) && DISABLE_NAG_NOTICES ) { return; } ?> <div class="notice notice-error dgwt-wcas-notice"> <p> <?php printf( __( '%s: You need PHP version at least 7.0 to run this plugin. You are currently using PHP version %s.', 'ajax-search-for-woocommerce' ), '<b>' . DGWT_WCAS_NAME . '</b>', PHP_VERSION ); ?> </p> </div> <?php } /** * Notice: requires WooCommerce * * @return void */ public function adminNoticeNoWoocommerce() { ?> <div class="notice notice-error dgwt-wcas-notice"> <p> <?php printf( __( '%s is enabled but not effective. It requires %s in order to work.', 'ajax-search-for-woocommerce' ), '<b>' . DGWT_WCAS_FULL_NAME . '</b>', '<a href="https://wordpress.org/plugins/woocommerce/" target="_blank">WooCommerce</a>' ); ?> </p> </div> <?php } /** * Notice: requires /vendor * * @return void */ public function adminNoticeNoVendor() { ?> <div class="notice notice-error dgwt-wcas-notice"> <p> <?php printf( __( '%s is enabled but not effective. It is missing core files. Please reinstall the plugin.', 'ajax-search-for-woocommerce' ), '<b>' . DGWT_WCAS_FULL_NAME . '</b>' ); ?> </p> </div> <?php } /** * Setup plugin constants * * @return void */ private function constants() { $v = get_file_data( __FILE__, array( 'Version' => 'Version', ), 'plugin' ); $this->define( 'DGWT_WCAS_NAME', 'FiboSearch' ); $this->define( 'DGWT_WCAS_FULL_NAME', 'FiboSearch - AJAX Search for WooCommerce' ); $this->define( 'DGWT_WCAS_VERSION', $v['Version'] ); $this->define( 'DGWT_WCAS_FILE', __FILE__ ); $this->define( 'DGWT_WCAS_DIR', plugin_dir_path( __FILE__ ) ); $this->define( 'DGWT_WCAS_URL', plugin_dir_url( __FILE__ ) ); $this->define( 'DGWT_WCAS_SETTINGS_KEY', 'dgwt_wcas_settings' ); $this->define( 'DGWT_WCAS_SEARCH_ACTION', 'dgwt_wcas_ajax_search' ); $this->define( 'DGWT_WCAS_RESULT_DETAILS_ACTION', 'dgwt_wcas_result_details' ); $this->define( 'DGWT_WCAS_GET_PRICES_ACTION', 'dgwt_wcas_get_prices' ); $this->define( 'DGWT_WCAS_WC_AJAX_ENDPOINT', true ); } /** * Define constant if not already set * * @param string $name * @param string|bool $value * * @return void */ private function define( $name, $value ) { if ( !defined( $name ) ) { define( $name, $value ); } } /** * PSR-4 autoload * * @return void */ public function autoload() { require_once DGWT_WCAS_DIR . 'vendor/autoload.php'; require_once DGWT_WCAS_DIR . 'widget.php'; } /** * Actions and filters * * @return void */ private function hooks() { add_action( 'admin_init', array($this, 'adminScripts'), 8 ); } /** * Enqueue admin sripts * * @return void */ public function adminScripts() { $min = ( SCRIPT_DEBUG ? '' : '.min' ); // Register CSS wp_register_style( 'dgwt-wcas-admin-style', DGWT_WCAS_URL . 'assets/css/admin-style.css', array(), DGWT_WCAS_VERSION ); // Register front styles for block editor wp_register_style( 'dgwt-wcas-style', apply_filters( 'dgwt/wcas/scripts/css_style_url', DGWT_WCAS_URL . 'assets/css/style' . $min . '.css' ), array(), DGWT_WCAS_VERSION ); // Register JS wp_register_script( 'dgwt-wcas-admin-js', DGWT_WCAS_URL . 'assets/js/admin' . $min . '.js', array('jquery', 'wp-url'), DGWT_WCAS_VERSION ); if ( \DgoraWcas\Helpers::isSettingsPage() ) { $localize = array( 'adminurl' => admin_url( 'admin-ajax.php' ), 'labels' => \DgoraWcas\Helpers::getLabels(), 'adminLabels' => array( 'preview' => __( 'No interaction! This is only a preview.', 'ajax-search-for-woocommerce' ), ), 'nonces' => array( 'build_index' => wp_create_nonce( 'dgwt_wcas_build_index' ), 'stop_build_index' => wp_create_nonce( 'dgwt_wcas_stop_build_index' ), 'build_index_heartbeat' => wp_create_nonce( 'dgwt_wcas_build_index_heartbeat' ), 'advanced_options_switch' => wp_create_nonce( 'dgwt_wcas_advanced_options_switch' ), ), 'images' => array( 'admin_preloader_url' => DGWT_WCAS_URL . 'assets/img/preloader.gif', ), ); $localize = apply_filters( 'dgwt/wcas/scripts/admin/localize', $localize ); wp_localize_script( 'dgwt-wcas-admin-js', 'dgwt_wcas', $localize ); // Enqueue CSS wp_enqueue_style( 'dgwt-wcas-admin-style' ); if ( !dgoraAsfwFs()->is_activation_mode() ) { add_thickbox(); wp_enqueue_style( 'wp-color-picker' ); wp_enqueue_script( 'dgwt-wcas-admin-js' ); wp_enqueue_script( 'wp-color-picker' ); wp_enqueue_script( 'dgwt-wcas-admin-popper-js', DGWT_WCAS_URL . 'assets/js/popper.min.js', array('jquery'), DGWT_WCAS_VERSION ); wp_enqueue_script( 'dgwt-wcas-admin-tooltip-js', DGWT_WCAS_URL . 'assets/js/tooltip.min.js', array('jquery'), DGWT_WCAS_VERSION ); wp_enqueue_style( 'dgwt-wcas-style', apply_filters( 'dgwt/wcas/scripts/css_style_url', DGWT_WCAS_URL . 'assets/css/style' . $min . '.css' ), array(), DGWT_WCAS_VERSION ); } } if ( \DgoraWcas\Helpers::isCheckoutPage() ) { wp_enqueue_style( 'dgwt-wcas-admin-style' ); } if ( \DgoraWcas\Helpers::isDebugPage() ) { wp_enqueue_style( 'dgwt-wcas-admin-style' ); } } /** * Register text domain * * @return void */ private function loadTextdomain() { $lang_dir = dirname( plugin_basename( DGWT_WCAS_FILE ) ) . '/languages/'; load_plugin_textdomain( 'ajax-search-for-woocommerce', false, $lang_dir ); } /** * @see \DgoraWcas\Search */ public function searchPosts( $phrase, $args = array() ) { if ( is_null( $this->search ) ) { $this->search = new \DgoraWcas\Search(); } return $this->search->searchPosts( $phrase, $args ); } } // Init the plugin function DGWT_WCAS() { return DGWT_WC_Ajax_Search::getInstance(); } add_action( 'plugins_loaded', 'DGWT_WCAS', 15 ); }