/** * Initialization routine. Sets version, directory, url, adds WordPress hooks, includes includes, triggers index * * @uses get_post_types to determine which post types are in use * @since 1.0 */ function init() { $this->version = SEARCHWP_VERSION; $this->dir = dirname(__FILE__); $this->url = plugin_dir_url(__FILE__); $this->pid = str_replace('.', '', uniqid('swppid', true)); // includes include_once dirname(__FILE__) . '/includes/class.debug.php'; include_once dirname(__FILE__) . '/includes/class.stemmer.php'; include_once dirname(__FILE__) . '/includes/class.indexer.php'; include_once dirname(__FILE__) . '/templates/tmpl.engine.config.php'; include_once dirname(__FILE__) . '/templates/tmpl.supplemental.config.php'; include_once dirname(__FILE__) . '/includes/class.search.php'; include_once dirname(__FILE__) . '/includes/class.upgrade.php'; include_once dirname(__FILE__) . '/admin/class.admin-settings.php'; include_once dirname(__FILE__) . '/admin/class.extensions.php'; include_once dirname(__FILE__) . '/admin/class.nags.php'; if (is_admin()) { include_once dirname(__FILE__) . '/admin/class.conflicts.php'; include_once dirname(__FILE__) . '/admin/class.notices.php'; include_once dirname(__FILE__) . '/admin/class.dashboard.php'; include_once dirname(__FILE__) . '/admin/class.systeminfo.php'; } include_once dirname(__FILE__) . '/includes/class.swp-query.php'; // instantiate nags $this->nags_utils = new SearchWP_Nags(); $this->nags_utils->init(); // grab our settings $this->settings = get_option(SEARCHWP_PREFIX . 'settings'); $this->license = searchwp_get_license_key(); $this->status = get_option(SEARCHWP_PREFIX . 'license_status'); // append our indexer-specific settings since they're stored separately if ($indexer_settings = get_option(SEARCHWP_PREFIX . 'indexer')) { $this->settings = array_merge($this->settings, $indexer_settings); } // instantiate settings UI $this->settings_utils = new SearchWP_Admin_Settings(); $this->settings_utils->init(); // implement Advanced settings and License management include_once dirname(__FILE__) . '/admin/settings-impl-advanced.php'; include_once dirname(__FILE__) . '/admin/settings-impl-license.php'; // introduced in version 2.5.7 as per WordPress 4.2 $this->settings['utf8mb4'] = get_option(SEARCHWP_PREFIX . 'utf8mb4'); // hooks add_filter('block_local_requests', '__return_false'); add_action('admin_menu', array($this, 'admin_menu')); add_action('admin_init', array($this, 'init_settings')); add_action('init', array($this, 'textdomain')); add_action('admin_notices', array($this, 'activation')); add_filter('cron_schedules', array($this, 'add_custom_cron_interval')); add_action('admin_init', array($this, 'schedule_maintenance')); add_action('swp_indexer', array($this, 'do_cron')); add_action('admin_enqueue_scripts', array($this, 'assets')); add_filter('heartbeat_received', array($this, 'heartbeat_received'), 10, 2); add_action('pre_get_posts', array($this, 'check_for_main_query'), 0); add_filter('the_posts', array($this, 'wp_search'), 0, 2); add_filter('posts_request', array($this, 'maybe_cancel_wp_query')); add_action('add_meta_boxes', array($this, 'document_content_meta_box')); add_action('edit_attachment', array($this, 'document_content_save')); add_action('wp_before_admin_bar_render', array($this, 'admin_bar_menu')); add_action('shutdown', array($this, 'shutdown'), 9999); add_action('wp_footer', array($this, 'maybe_output_debug')); add_action('wp_footer', array($this, 'admin_bar_entry_for_search')); add_action('wp_loaded', array($this, 'load')); add_action('init', array($this, 'prepare_endpoint')); add_filter('plugin_action_links_searchwp/searchwp.php', array($this, 'plugin_update_link')); // license maintenance (triggered by cron job) $license_utils = new SearchWP_Settings_Implementation_License(); add_action('swp_maintenance', array($license_utils, 'do_maintenance')); // support WordPress Importer by auto-pausing during imports add_action('import_start', array($this, 'indexer_pause')); add_action('import_end', array($this, 'indexer_unpause')); add_action('wp_ajax_searchwp_alternate_indexer_trigger', array($this, 'handle_alternate_indexer_request')); // internal hooks add_filter('searchwp_results', array($this, 'maybe_append_weight_to_result_title'), 10, 2); }
/** * Perform periodic maintenance * * @return bool * @since 1.0 */ function do_maintenance() { do_action('searchwp_log', 'do_maintenance()'); $license = searchwp_get_license_key(); $license = sanitize_text_field($license); $api_params = array('edd_action' => 'check_license', 'license' => $license, 'item_name' => urlencode(SEARCHWP_EDD_ITEM_NAME)); $api_args = array('timeout' => 30, 'sslverify' => false, 'body' => $api_params); $response = wp_remote_post(SEARCHWP_EDD_STORE_URL, $api_args); if (is_wp_error($response)) { return false; } $license_data = json_decode(wp_remote_retrieve_body($response)); if ('valid' != $license_data->license) { do_action('searchwp_log', 'License not valid'); delete_option(SEARCHWP_PREFIX . 'license_status'); delete_option(SEARCHWP_PREFIX . 'license_expiration'); } return true; }