'',. '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' ); } } }