oont-contents/plugins/webappick-product-feed-for-woocommerce/includes/class-woo-feed-installer.php
2025-03-31 21:42:48 +02:00

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