Files
medicalalert-web-reloaded/wp/wp-content/plugins/woocommerce-smart-coupons/includes/class-wc-sc-act-deact.php
2024-06-17 16:29:48 -04:00

274 lines
10 KiB
PHP

<?php
/**
* Smart Coupons Initialize
*
* @author StoreApps
* @since 3.3.0
* @version 1.4.0
* @package WooCommerce Smart Coupons
*/
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
if ( ! class_exists( 'WC_SC_Act_Deact' ) ) {
/**
* Class for handling actions to be performed during initialization
*/
class WC_SC_Act_Deact {
/**
* Database changes required for Smart Coupons
*
* Add option 'smart_coupon_email_subject' if not exists
* Enable 'Auto Generation' for Store Credit (discount_type: 'smart_coupon') not having any customer_email
* Disable 'apply_before_tax' for all Store Credit (discount_type: 'smart_coupon')
*/
public static function smart_coupon_activate() {
set_transient( '_smart_coupons_process_activation', 1, 30 );
if ( ! is_network_admin() && ! isset( $_GET['activate-multi'] ) ) { // phpcs:ignore
set_transient( '_smart_coupons_activation_redirect', 1, 30 );
}
}
/**
* Process activation
*/
public static function process_activation() {
global $wpdb, $blog_id, $woocommerce_smart_coupon;
$is_migrate_site_options = get_site_option( 'wc_sc_migrate_site_options', 'yes' );
if ( 'yes' === $is_migrate_site_options ) {
// phpcs:disable
$default_options = array(
'all_tasks_count_woo_sc', // => '',.
'bulk_coupon_action_woo_sc', // => '',.
'current_time_woo_sc', // => '',.
'remaining_tasks_count_woo_sc', // => '',.
'smart_coupons_combine_emails', // => 'no',.
'smart_coupons_is_send_email', // => 'yes',.
'start_time_woo_sc', // => '',.
'wc_sc_auto_apply_coupon_ids', // => maybe_serialize( array() ),.
'wc_sc_is_show_terms_notice', // => 'yes',.
'wc_sc_terms_page_id', // => '',.
'woocommerce_wc_sc_combined_email_coupon_settings', // => maybe_serialize( array() ),.
'woocommerce_wc_sc_email_coupon_settings', // => maybe_serialize( array() ),.
'woo_sc_action_data', // => '',.
'woo_sc_generate_coupon_posted_data', // => '',.
);
// phpcs:enable
$existing_options = array();
foreach ( $default_options as $option_name ) {
$site_option = get_site_option( $option_name );
if ( ! empty( $site_option ) ) {
$existing_options[ $option_name ] = $site_option;
}
}
}
if ( is_multisite() ) {
$blog_ids = $wpdb->get_col( "SELECT blog_id FROM {$wpdb->blogs}", 0 ); // WPCS: cache ok, db call ok.
} else {
$blog_ids = array( $blog_id );
}
if ( ! get_option( 'smart_coupon_email_subject' ) ) {
add_option( 'smart_coupon_email_subject' );
}
if ( ! is_object( $woocommerce_smart_coupon ) || ! is_a( $woocommerce_smart_coupon, 'WC_Smart_Coupons' ) || ! is_callable( array( $woocommerce_smart_coupon, 'update_post_meta' ) ) ) {
if ( ! class_exists( 'WC_Smart_Coupons' ) ) {
if ( file_exists( WP_PLUGIN_DIR . '/woocommerce-smart-coupons/includes/class-wc-smart-coupons.php' ) ) {
include_once WP_PLUGIN_DIR . '/woocommerce-smart-coupons/includes/class-wc-smart-coupons.php';
}
if ( class_exists( 'WC_Smart_Coupons' ) && is_callable( array( 'WC_Smart_Coupons', 'get_instance' ) ) ) {
$woocommerce_smart_coupon = WC_Smart_Coupons::get_instance();
}
}
}
if ( is_multisite() ) {
require_once ABSPATH . WPINC . '/ms-blogs.php';
}
foreach ( $blog_ids as $blogid ) {
if ( ( file_exists( WP_PLUGIN_DIR . '/woocommerce/woocommerce.php' ) ) && ( is_plugin_active( 'woocommerce/woocommerce.php' ) ) ) {
if ( is_multisite() ) {
switch_to_blog( $blogid );
}
$results = $wpdb->get_col(
$wpdb->prepare(
"SELECT postmeta.post_id FROM {$wpdb->prefix}postmeta as postmeta WHERE postmeta.meta_key = %s AND postmeta.meta_value = %s AND postmeta.post_id IN
(SELECT p.post_id FROM {$wpdb->prefix}postmeta AS p WHERE p.meta_key = %s AND p.meta_value = %s) ",
'discount_type',
'smart_coupon',
'customer_email',
'a:0:{}'
)
); // WPCS: cache ok, db call ok.
foreach ( $results as $result ) {
if ( is_object( $woocommerce_smart_coupon ) && is_callable( array( $woocommerce_smart_coupon, 'update_post_meta' ) ) ) {
$woocommerce_smart_coupon->update_post_meta( $result, 'auto_generate_coupon', 'yes' );
} else {
update_post_meta( $result, 'auto_generate_coupon', 'yes' );
}
}
// To disable apply_before_tax option for Gift Certificates / Store Credit.
$tax_post_ids = $wpdb->get_col( $wpdb->prepare( "SELECT post_id FROM {$wpdb->prefix}postmeta WHERE meta_key = %s AND meta_value = %s", 'discount_type', 'smart_coupon' ) ); // WPCS: cache ok, db call ok.
foreach ( $tax_post_ids as $tax_post_id ) {
if ( is_object( $woocommerce_smart_coupon ) && is_callable( array( $woocommerce_smart_coupon, 'update_post_meta' ) ) ) {
$woocommerce_smart_coupon->update_post_meta( $tax_post_id, 'apply_before_tax', 'no' );
} else {
update_post_meta( $tax_post_id, 'apply_before_tax', 'no' );
}
}
if ( 'yes' === $is_migrate_site_options ) {
$results = $wpdb->get_results( // phpcs:ignore
$wpdb->prepare(
"SELECT option_id,
option_name,
option_value
FROM {$wpdb->prefix}options
WHERE option_name IN (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)",
'smart_coupons_is_send_email',
'smart_coupons_combine_emails',
'woocommerce_wc_sc_combined_email_coupon_settings',
'woocommerce_wc_sc_email_coupon_settings',
'wc_sc_is_show_terms_notice',
'wc_sc_terms_page_id',
'woo_sc_generate_coupon_posted_data',
'start_time_woo_sc',
'current_time_woo_sc',
'all_tasks_count_woo_sc',
'remaining_tasks_count_woo_sc',
'bulk_coupon_action_woo_sc',
'woo_sc_action_data',
'wc_sc_auto_apply_coupon_ids'
),
ARRAY_A
);
if ( ! empty( $results ) ) {
foreach ( $results as $result ) {
$option_value = ( ! empty( $existing_options[ $result['option_name'] ] ) ) ? $existing_options[ $result['option_name'] ] : '';
if ( ! empty( $option_value ) ) {
if ( is_array( $option_value ) ) {
$option_value = maybe_serialize( $option_value );
}
$wpdb->query( // phpcs:ignore
$wpdb->prepare(
"INSERT INTO {$wpdb->prefix}options (option_id, option_name, option_value, autoload)
VALUES (%d,%s,%s,%s)
ON DUPLICATE KEY UPDATE option_value = %s",
$result['option_id'],
$result['option_name'],
$option_value,
'no',
$option_value
)
);
}
}
}
}
if ( is_multisite() ) {
restore_current_blog(); // phpcs:ignore
}
}
}
if ( 'yes' === $is_migrate_site_options ) {
update_site_option( 'wc_sc_migrate_site_options', 'no' );
}
$woocommerce_smart_coupon->maybe_sync_orders_prior_to_800();
}
/**
* Database changes required for Smart Coupons
*
* Delete option 'sc_display_global_coupons' if exists
*/
public static function smart_coupon_deactivate() {
global $woocommerce_smart_coupon;
if ( get_option( 'sc_display_global_coupons' ) !== false ) {
delete_option( 'sc_display_global_coupons' );
}
if ( false === ( get_option( 'sc_flushed_rules' ) ) || 'found' === ( get_option( 'sc_flushed_rules' ) ) ) {
delete_option( 'sc_flushed_rules' );
}
self::clear_cache();
if ( ! is_object( $woocommerce_smart_coupon ) || ! is_a( $woocommerce_smart_coupon, 'WC_Smart_Coupons' ) || ! is_callable( array( $woocommerce_smart_coupon, 'update_post_meta' ) ) ) {
if ( ! class_exists( 'WC_Smart_Coupons' ) ) {
if ( file_exists( WP_PLUGIN_DIR . '/woocommerce-smart-coupons/includes/class-wc-smart-coupons.php' ) ) {
include_once WP_PLUGIN_DIR . '/woocommerce-smart-coupons/includes/class-wc-smart-coupons.php';
}
if ( class_exists( 'WC_Smart_Coupons' ) && is_callable( array( 'WC_Smart_Coupons', 'get_instance' ) ) ) {
$woocommerce_smart_coupon = WC_Smart_Coupons::get_instance();
}
}
}
$woocommerce_smart_coupon->record_latest_800_order();
}
/**
* Clear cache
*
* @return string $message
*/
public static function clear_cache() {
$all_cache_key = get_option( 'wc_sc_all_cache_key' );
if ( ! empty( $all_cache_key ) ) {
$cleared_cache = array();
foreach ( $all_cache_key as $key ) {
$is_cleared = wp_cache_delete( $key );
if ( true === $is_cleared ) {
$cleared_cache[] = $key;
}
}
// phpcs:disable
// if ( count( $all_cache_key ) === count( $cleared_cache ) ) {
// update_option( 'wc_sc_all_cache_key', array(), 'no' );
// /* translators: Number of all cache key */
// $message = sprintf( __( 'Successfully cleared %d cache!', 'woocommerce-smart-coupons' ), count( $all_cache_key ) );
// } else {
// $remaining = array_diff( $all_cache_key, $cleared_cache );
// update_option( 'wc_sc_all_cache_key', $remaining, 'no' );
// /* translators: 1. Number of cache not deleted 2. Number of all cache key */
// $message = sprintf( __( 'Failed! Could not clear %1$d out of %2$d cache', 'woocommerce-smart-coupons' ), count( $remaining ), count( $all_cache_key ) );
// }
// phpcs:enable
// There's no method in WordPress to detect if the cache is added successfully.
// Therefore it's not possible to know whether it is deleted or not.
// Hence returning a success message always.
// Enable above block of code when we can detect saving & deleting of cache.
}
return __( 'Successfully cleared WooCommerce Smart Coupons cache!', 'woocommerce-smart-coupons' );
}
}
}