179 lines
5.4 KiB
PHP
179 lines
5.4 KiB
PHP
<?php
|
|
/**
|
|
* Installer
|
|
*
|
|
* @package WooFeed
|
|
* @version 1.0.0
|
|
* @since WooFeed 3.2.1
|
|
* @copyright 2019 WebAppick
|
|
* @author KD <mhaudul.hk@gmail.com>
|
|
*/
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
die(); // Silence...
|
|
}
|
|
class Woo_Feed_installer {
|
|
|
|
public static function init() {
|
|
add_action( 'init', array( __CLASS__, 'check_version' ), 5 );
|
|
add_filter( 'cron_schedules', array( __CLASS__, 'cron_schedules' ) ); // phpcs:ignore
|
|
}
|
|
|
|
/**
|
|
* Check WooCommerce version and run the updater is required.
|
|
*
|
|
* This check is done on all requests and runs if the versions do not match.
|
|
*/
|
|
public static function check_version() {
|
|
if ( ! defined( 'IFRAME_REQUEST' ) && version_compare( get_option( 'woo_feed_free_version' ), WOO_FEED_FREE_VERSION, '<' ) ) {
|
|
if ( ! defined( 'WOO_FEED_UPDATING' ) ) {
|
|
define( 'WOO_FEED_UPDATING', TRUE );
|
|
}
|
|
self::install();
|
|
do_action( 'woo_feed_plugin_updated' );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Add more cron schedules.
|
|
*
|
|
* @param array $schedules List of WP scheduled cron jobs.
|
|
*
|
|
* @return array
|
|
*/
|
|
public static function cron_schedules( $schedules ) {
|
|
$interval = get_option( 'wf_schedule' );
|
|
$schedules['woo_feed_corn'] = array(
|
|
'display' => esc_html__( 'Woo Feed Update Interval', 'woo-feed' ),
|
|
'interval' => $interval,
|
|
);
|
|
return $schedules;
|
|
}
|
|
|
|
/**
|
|
* Install WooFeed.
|
|
*/
|
|
public static function install() {
|
|
if ( ! is_blog_installed() ) {
|
|
return;
|
|
}
|
|
|
|
// Bail if unsupported php version
|
|
if ( ! wooFeed_is_supported_php() ) {
|
|
/* translators: 1: minimum required php version, 2: server php version */
|
|
echo '<div class="notice error"><p>' . sprintf( __( 'The Minimum PHP Version Requirement for <b>CTX Feed</b> is %1$s. You are Running PHP %2$s', 'woo-feed' ), WOO_FEED_MIN_PHP_VERSION, phpversion() ) . '</p></div>'; // phpcs:ignore
|
|
die();
|
|
}
|
|
|
|
// Check if we are not already running this routine.
|
|
if ( 'yes' === get_transient( 'woo_feed_installing' ) ) {
|
|
return;
|
|
}
|
|
|
|
if ( ! defined( 'WOO_FEED_INSTALLING' ) ) {
|
|
define( 'WOO_FEED_INSTALLING', true );
|
|
}
|
|
|
|
// If we made it till here nothing is running yet, lets set the transient now.
|
|
set_transient( 'woo_feed_installing', 'yes', 10 * MINUTE_IN_SECONDS );
|
|
|
|
self::pro_version_warning();
|
|
self::migrate_db();
|
|
self::create_cron_jobs();
|
|
self::create_files();
|
|
self::update_woo_feed_version();
|
|
|
|
// installation finished.
|
|
delete_transient( 'woo_feed_installing' );
|
|
}
|
|
|
|
private static function pro_version_warning() {
|
|
// Deactivate Free version if pro already available.
|
|
if ( woo_feed_is_plugin_active( "webappick-product-feed-for-woocommerce-pro/webappick-product-feed-for-woocommerce-pro.php" ) ) {
|
|
echo '<div class="notice error"><p>'. __( 'Please deactivate the <b>CTX Feed Pro</b> version to activate free version again.', 'woo-feed' ) .'</p></div>'; // phpcs:ignore
|
|
die();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* DB Updates
|
|
*/
|
|
private static function migrate_db() {
|
|
if ( ! defined( 'WOO_FEED_UPDATING' ) ) {
|
|
return;
|
|
}
|
|
// settings api update.
|
|
if ( version_compare( '3.3.10', WOO_FEED_FREE_VERSION, '<' ) ) {
|
|
$keys = [ 'per_batch', 'product_query_type', 'enable_error_debugging', 'woo_feed_cache_ttl' ];
|
|
$data = [];
|
|
foreach ( $keys as $key ) {
|
|
$data[ $key ] = get_option( 'woo_feed_' . $key );
|
|
delete_option( 'woo_feed_' . $key );
|
|
}
|
|
woo_feed_save_options( $data );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Create cron jobs (clear them first).
|
|
*/
|
|
private static function create_cron_jobs() {
|
|
// Schedule Update Interval
|
|
if ( ! get_option( 'wf_schedule', false ) ) {
|
|
update_option( 'wf_schedule', HOUR_IN_SECONDS, false );
|
|
}
|
|
// clear previous scheduled cron jobs
|
|
wp_clear_scheduled_hook( 'woo_feed_corn' );
|
|
wp_clear_scheduled_hook( 'woo_feed_cleanup_logs' );
|
|
wp_clear_scheduled_hook( 'woo_feed_update' );
|
|
// Schedule Cron jobs
|
|
//wp_schedule_event( time(), 'woo_feed_corn', 'woo_feed_update' );
|
|
wp_schedule_event( time() + ( 3 * HOUR_IN_SECONDS ), 'daily', 'woo_feed_cleanup_logs' );
|
|
}
|
|
|
|
/**
|
|
* Create files/directories.
|
|
*/
|
|
private static function create_files() {
|
|
// Bypass if filesystem is read-only and/or non-standard upload system is used.
|
|
if ( apply_filters( 'woo_feed_install_skip_create_files', false ) ) {
|
|
return;
|
|
}
|
|
// Install files and folders for uploading files and prevent hotlinking.
|
|
$files = array(
|
|
array(
|
|
'base' => WOO_FEED_LOG_DIR,
|
|
'file' => '.htaccess',
|
|
'content' => 'deny from all',
|
|
),
|
|
array(
|
|
'base' => WOO_FEED_LOG_DIR,
|
|
'file' => 'index.html',
|
|
'content' => '',
|
|
),
|
|
);
|
|
|
|
foreach ( $files as $file ) {
|
|
if ( wp_mkdir_p( $file['base'] ) && ! file_exists( trailingslashit( $file['base'] ) . $file['file'] ) ) {
|
|
$file_handle = fopen( trailingslashit( $file['base'] ) . $file['file'], 'w' ); // phpcs:ignore
|
|
if ( false !== $file_handle ) {
|
|
fwrite( $file_handle, $file['content'] ); // phpcs:ignore
|
|
fclose( $file_handle ); // phpcs:ignore
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Update WC version to current.
|
|
*/
|
|
private static function update_woo_feed_version() {
|
|
delete_option( 'woo_feed_free_version' );
|
|
delete_option( 'woo_feed_version' ); // old option.
|
|
update_option( 'woo_feed_free_version', WOO_FEED_FREE_VERSION, false );
|
|
if ( ! defined( 'WOO_FEED_UPDATING' ) ) {
|
|
update_option( 'woo-feed-free-activation-time', get_option( 'woo-feed-activation-time', time() ), false ); // check for old version time.
|
|
}
|
|
}
|
|
}
|
|
Woo_Feed_installer::init();
|
|
// End of file class-woo-feed-installer.php
|