256 lines
8.6 KiB
PHP
256 lines
8.6 KiB
PHP
<?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();
|
|
}
|
|
}
|
|
}
|
|
|
|
} |