File "Install.php"
Full Path: /home/vantageo/public_html/cache/cache/cache/.wp-cli/wp-content/plugins/ajax-search-for-woocommerce/includes/Admin/Install.php
File size: 8.25 KB
MIME-type: text/x-php
Charset: utf-8
<?php
namespace DgoraWcas\Admin;
use DgoraWcas\Engines\TNTSearchMySQL\Config;
use DgoraWcas\Engines\TNTSearchMySQL\Indexer\Builder;
use DgoraWcas\Helpers;
// Exit if accessed directly
if ( !defined( 'ABSPATH' ) ) {
exit;
}
class Install {
const SETTINGS_VERSION = 2;
/**
* Call installation callback
*
* @return void
*/
public static function maybeInstall() {
if ( !(defined( 'DOING_AJAX' ) && DOING_AJAX) ) {
add_action( 'admin_init', array(__CLASS__, 'checkVersion'), 5 );
}
}
/**
* Install process
*
* @return void
*/
public static function install() {
if ( !defined( 'DGWT_WCAS_INSTALLING' ) ) {
define( 'DGWT_WCAS_INSTALLING', true );
}
self::saveActivationDate();
self::createOptions();
self::maybeUpgradeOptions();
// Update plugin version
update_option( 'dgwt_wcas_version', DGWT_WCAS_VERSION );
}
/**
* Save default options
*
* @return void
*/
public static function createOptions() {
global $dgwtWcasSettings;
$sections = DGWT_WCAS()->settings->settingsFields();
$settings = array();
if ( is_array( $sections ) && !empty( $sections ) ) {
foreach ( $sections as $options ) {
if ( is_array( $options ) && !empty( $options ) ) {
foreach ( $options as $option ) {
if ( isset( $option['name'] ) && !isset( $dgwtWcasSettings[$option['name']] ) ) {
$settings[$option['name']] = ( isset( $option['default'] ) ? $option['default'] : '' );
}
}
}
}
}
$updateOptions = array_merge( $settings, $dgwtWcasSettings );
update_option( DGWT_WCAS_SETTINGS_KEY, $updateOptions );
}
/**
* Maybe update settings structure or values
*
* @param string $version free | pro
*/
private static function maybeUpgradeOptions( $version = 'free' ) {
$freeSettingsVersion = (int) get_option( 'dgwt_wcas_settings_version', 0 );
$proSettingsVersion = (int) get_option( 'dgwt_wcas_settings_version_pro', 0 );
$mainVersion = $freeSettingsVersion;
$mainKey = 'dgwt_wcas_settings_version';
$upgraded = false;
if ( $version === 'pro' ) {
$mainVersion = $proSettingsVersion;
$mainKey = 'dgwt_wcas_settings_version_pro';
}
if ( $freeSettingsVersion === 0 && $proSettingsVersion === 0 ) {
self::upgradeOptionsTo1();
self::upgradeOptionsTo2();
$upgraded = true;
}
if ( !$upgraded ) {
if ( $version === 'free' && $freeSettingsVersion < 2 && $proSettingsVersion !== 2 || $version === 'pro' && $proSettingsVersion < 2 && $freeSettingsVersion !== 2 ) {
self::upgradeOptionsTo2();
}
}
if ( $mainVersion < self::SETTINGS_VERSION ) {
update_option( $mainKey, self::SETTINGS_VERSION );
DGWT_WCAS()->settings->clearCache();
}
}
private static function upgradeOptionsTo1() {
$settings = get_option( DGWT_WCAS_SETTINGS_KEY );
if ( empty( $settings ) ) {
return;
}
// Product categories
if ( isset( $settings['show_matching_categories'] ) ) {
$settings['show_product_tax_product_cat'] = $settings['show_matching_categories'];
unset($settings['show_matching_categories']);
}
if ( isset( $settings['show_categories_images'] ) ) {
$settings['show_product_tax_product_cat_images'] = $settings['show_categories_images'];
unset($settings['show_categories_images']);
}
if ( isset( $settings['search_in_product_categories'] ) ) {
$settings['search_in_product_tax_product_cat'] = $settings['search_in_product_categories'];
unset($settings['search_in_product_categories']);
}
// Product tags
if ( isset( $settings['show_matching_tags'] ) ) {
$settings['show_product_tax_product_tag'] = $settings['show_matching_tags'];
unset($settings['show_matching_tags']);
}
if ( isset( $settings['search_in_product_tags'] ) ) {
$settings['search_in_product_tax_product_tag'] = $settings['search_in_product_tags'];
unset($settings['search_in_product_tags']);
}
// Product brands
if ( DGWT_WCAS()->brands->hasBrands() ) {
if ( isset( $settings['show_matching_brands'] ) ) {
$settings['show_product_tax_' . DGWT_WCAS()->brands->getBrandTaxonomy()] = $settings['show_matching_brands'];
unset($settings['show_matching_brands']);
}
if ( isset( $settings['search_in_brands'] ) ) {
$settings['search_in_product_tax_' . DGWT_WCAS()->brands->getBrandTaxonomy()] = $settings['search_in_brands'];
unset($settings['search_in_brands']);
}
if ( isset( $settings['show_brands_images'] ) ) {
$settings['show_product_tax_' . DGWT_WCAS()->brands->getBrandTaxonomy() . '_images'] = $settings['show_brands_images'];
unset($settings['show_brands_images']);
}
}
update_option( DGWT_WCAS_SETTINGS_KEY, $settings );
}
/**
* Since v1.19.0 we've started to use two separated breakpoints in the search bar layout settings:
*
* 1. "mobile_breakpoint" - set the breakpoint for switching between icon and search bar layout
*
* 2. "mobile_overlay_breakpoint" - new option added since v1.19.0.
* Set the breakpoint after which the mobile search overlay is activated
*
* Before v1.19.0 "mobile_breakpoint" was in charge of these two things.
* We don't know if users set "mobile_breakpoint" to handle overlay on mobile or icon/bar toggle.
* So we have to copy value of "mobile_breakpoint" to "mobile_overlay_breakpoint" to keep backwards compatibility
*/
private static function upgradeOptionsTo2() {
$settings = get_option( DGWT_WCAS_SETTINGS_KEY );
if ( empty( $settings ) ) {
return;
}
if ( isset( $settings['mobile_breakpoint'] ) && isset( $settings['mobile_overlay_breakpoint'] ) ) {
$settings['mobile_overlay_breakpoint'] = $settings['mobile_breakpoint'];
update_option( DGWT_WCAS_SETTINGS_KEY, $settings );
}
}
/**
* Save activation timestamp
* Used to display notice, asking for a feedback
*
* @return void
*/
private static function saveActivationDate() {
$date = get_option( 'dgwt_wcas_activation_date' );
if ( empty( $date ) ) {
update_option( 'dgwt_wcas_activation_date', time() );
}
}
/**
* Check if SQL server support JSON data type
*/
private static function checkIfDbSupportJson() {
global $wpdb;
$suppress_errors = $wpdb->suppress_errors;
$wpdb->suppress_errors();
$result = $wpdb->get_var( "SELECT JSON_CONTAINS('[1,2,3]', '2')" );
$wpdb->suppress_errors( $suppress_errors );
update_option( 'dgwt_wcas_db_json_support', ( $result === '1' && empty( $wpdb->last_error ) ? 'yes' : 'no' ) );
}
/**
* Check if SQL server support locking mechanism
*/
private static function checkIfDbSupportLocks() {
global $wpdb;
$lockName = 'fibosearch_lock_test';
$row = $wpdb->get_row( $wpdb->prepare( 'SELECT GET_LOCK(%s,%d) as set_lock', $lockName, 5 ) );
if ( intval( $row->set_lock ) === 1 ) {
$wpdb->get_row( $wpdb->prepare( 'SELECT RELEASE_LOCK(%s) as lock_released', $lockName ) );
update_option( 'dgwt_wcas_db_locking_support', 'yes' );
} else {
update_option( 'dgwt_wcas_db_locking_support', 'no' );
}
}
/**
* Compare plugin version and install if a new version is available
*
* @return void
*/
public static function checkVersion() {
if ( !defined( 'IFRAME_REQUEST' ) ) {
if ( !dgoraAsfwFs()->is_premium() && get_option( 'dgwt_wcas_version' ) != DGWT_WCAS_VERSION ) {
self::install();
}
}
}
}