template_base = dirname( WC_SC_PLUGIN_FILE ) . '/templates/'; // Email template location. $print_style = get_option( 'wc_sc_coupon_print_style', 'default' ); $this->template_html = 'print-coupons-' . $print_style . '.php'; add_action( 'init', array( $this, 'may_be_save_terms_page' ) ); add_action( 'admin_notices', array( $this, 'may_be_show_terms_notice' ) ); add_action( 'wp_ajax_wc_sc_terms_notice_action', array( $this, 'terms_notice_action' ) ); add_action( 'wp_loaded', array( $this, 'print_coupon_from_url' ), 20 ); add_filter( 'display_post_states', array( $this, 'display_post_states' ), 10, 2 ); add_filter( 'pre_delete_post', array( $this, 'prevent_deletion_of_terms_page' ), 10, 3 ); add_filter( 'pre_trash_post', array( $this, 'prevent_deletion_of_terms_page' ), 10, 2 ); add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts_and_styles' ), 99 ); } /** * Get single instance of WC_SC_Print_Coupon * * @return WC_SC_Print_Coupon Singleton object of WC_SC_Print_Coupon */ public static function get_instance() { // Check if instance is already exists. if ( is_null( self::$instance ) ) { self::$instance = new self(); } return self::$instance; } /** * Handle call to functions which is not available in this class * * @param string $function_name The function name. * @param array $arguments Array of arguments passed while calling $function_name. * @return result of function call */ public function __call( $function_name, $arguments = array() ) { global $woocommerce_smart_coupon; if ( ! is_callable( array( $woocommerce_smart_coupon, $function_name ) ) ) { return; } if ( ! empty( $arguments ) ) { return call_user_func_array( array( $woocommerce_smart_coupon, $function_name ), $arguments ); } else { return call_user_func( array( $woocommerce_smart_coupon, $function_name ) ); } } /** * Function to create and save terms page if already not created */ public function may_be_save_terms_page() { $terms_page_option = $this->get_terms_page_option(); $terms_page_id = get_option( $terms_page_option, false ); // If terms page option is not created yet or may be deleted. if ( empty( $terms_page_id ) ) { $terms_page_id = $this->add_terms_page(); $this->update_terms_page_option( $terms_page_id ); } } /** * Function to add create terms page */ public function add_terms_page() { $name = _x( 'wc-sc-coupons-terms', 'Page slug', 'woocommerce-smart-coupons' ); $title = _x( 'Smart Coupons Terms', 'Page title', 'woocommerce-smart-coupons' ); $terms_page_id = $this->create_page( $name, $title, '', 'private' ); return $terms_page_id; } /** * Utility function for creating Smart Coupons' pages * * @param string $slug Page slug. * @param string $page_title Page title. * @param string $page_content Page content. * @param string $post_status Page status. * @param int $post_parent Page parent. * @return int $page_id Create page id */ public function create_page( $slug = '', $page_title = '', $page_content = '', $post_status = 'publish', $post_parent = 0 ) { $page_id = 0; if ( empty( $slug ) ) { return $page_id; } $args = array( 'role' => 'administrator', 'orderby' => 'ID', 'order' => 'ASC', 'fields' => 'ID', ); $admin_user_ids = get_users( $args ); $page_data = array( 'post_author' => current( $admin_user_ids ), 'post_status' => $post_status, 'post_type' => 'page', 'post_name' => $slug, 'post_title' => $page_title, 'post_content' => $page_content, 'post_parent' => $post_parent, 'comment_status' => 'closed', ); $page_id = wp_insert_post( $page_data ); return $page_id; } /** * Function to get terms page id */ public function get_terms_page_id() { $terms_page_option = $this->get_terms_page_option(); $terms_page_id = get_option( $terms_page_option, false ); return $terms_page_id; } /** * Function to get the option key name for terms page */ public function get_terms_page_option() { // Option key name for Smart Coupons' term page id. $terms_page_option = 'wc_sc_terms_page_id'; return $terms_page_option; } /** * Function to update terms' page id in the options table * * @param int $terms_page_id Page parent. */ public function update_terms_page_option( $terms_page_id = 0 ) { if ( ! empty( $terms_page_id ) && is_numeric( $terms_page_id ) ) { $terms_page_option = $this->get_terms_page_option(); update_option( $terms_page_option, $terms_page_id, 'no' ); } } /** * Function to show notice for entering terms' page content */ public function may_be_show_terms_notice() { global $pagenow, $post; $is_coupon_enabled = wc_coupons_enabled(); // Don't show message if coupons are not enabled. if ( false === $is_coupon_enabled ) { return; } $terms_page_id = $this->get_terms_page_id(); // Return if terms page hasn't been set. if ( empty( $terms_page_id ) ) { return; } $valid_post_types = array( 'shop_coupon', 'shop_order', 'product' ); $valid_pagenow = array( 'edit.php', 'post.php', 'plugins.php' ); $is_show_terms_notice = get_option( 'wc_sc_is_show_terms_notice', false ); $get_post_type = ( ! empty( $post->ID ) ) ? $this->get_post_type( $post->ID ) : ''; $get_page = ( ! empty( $_GET['page'] ) ) ? wc_clean( wp_unslash( $_GET['page'] ) ) : ''; // phpcs:ignore $get_tab = ( ! empty( $_GET['tab'] ) ) ? wc_clean( wp_unslash( $_GET['tab'] ) ) : ''; // phpcs:ignore $is_page = ( in_array( $pagenow, $valid_pagenow, true ) || in_array( $get_post_type, $valid_post_types, true ) || ( 'admin.php' === $pagenow && ( 'wc-smart-coupons' === $get_page || 'wc-smart-coupons' === $get_tab ) ) ); // Terms page notice. if ( $is_page && 'no' !== $is_show_terms_notice ) { if ( ! wp_script_is( 'jquery' ) ) { wp_enqueue_script( 'jquery' ); } ?>
'no', ); $option_updated = update_option( 'wc_sc_is_show_terms_notice', 'no', 'no' ); if ( true === $option_updated ) { $response['success'] = 'yes'; if ( 'redirect' === $post_do ) { $terms_page_id = $this->get_terms_page_id(); $terms_edit_url = get_edit_post_link( $terms_page_id, 'edit' ); if ( ! empty( $terms_edit_url ) ) { $response['redirect_url'] = $terms_edit_url; } } } wp_send_json( $response ); } /** * Print coupon codes along with terms' page content */ public function print_coupon_from_url() { global $woocommerce_smart_coupon; if ( empty( $_SERVER['QUERY_STRING'] ) ) { return; } parse_str( wp_unslash( $_SERVER['QUERY_STRING'] ), $coupon_args ); // phpcs:ignore $coupon_args = wc_clean( $coupon_args ); if ( ! empty( $coupon_args['print-coupons'] ) && 'yes' === $coupon_args['print-coupons'] && ! empty( $coupon_args['source'] ) && 'wc-smart-coupons' === $coupon_args['source'] && ! empty( $coupon_args['coupon-codes'] ) ) { $coupon_args['coupon-codes'] = urldecode( $coupon_args['coupon-codes'] ); $coupon_codes = explode( ',', $coupon_args['coupon-codes'] ); $coupon_codes = array_filter( $coupon_codes ); // Remove empty coupon codes if any. $coupons_data = array(); foreach ( $coupon_codes as $coupon_code ) { if ( empty( $coupon_code ) ) { continue; } $coupons_data[] = array( 'code' => $coupon_code, ); } if ( ! empty( $coupons_data ) ) { $terms_page_id = $this->get_terms_page_id(); $terms_page_title = ''; $terms_page_content = ''; if ( ! empty( $terms_page_id ) ) { $terms_page = get_post( $terms_page_id ); if ( is_a( $terms_page, 'WP_Post' ) ) { $terms_page_title = ( ! empty( $terms_page->post_title ) ) ? $terms_page->post_title : ''; $terms_page_content = ( ! empty( $terms_page->post_content ) ) ? $terms_page->post_content : ''; if ( ! empty( $terms_page_content ) ) { $terms_page_content = apply_filters( 'the_content', $terms_page_content ); } } } $design = get_option( 'wc_sc_setting_coupon_design', 'basic' ); $background_color = get_option( 'wc_sc_setting_coupon_background_color', '#39cccc' ); $foreground_color = get_option( 'wc_sc_setting_coupon_foreground_color', '#30050b' ); $third_color = get_option( 'wc_sc_setting_coupon_third_color', '#39cccc' ); $show_coupon_description = get_option( 'smart_coupons_show_coupon_description', 'no' ); $valid_designs = $this->get_valid_coupon_designs(); if ( ! in_array( $design, $valid_designs, true ) ) { $design = 'basic'; } $coupon_styles = $woocommerce_smart_coupon->get_coupon_styles( $design ); $default_path = $this->template_base; $template_path = $woocommerce_smart_coupon->get_template_base_dir( $this->template_html ); wc_get_template( $this->template_html, array( 'coupon_codes' => $coupons_data, 'terms_page_title' => $terms_page_title, 'terms_page_content' => $terms_page_content, 'background_color' => $background_color, 'foreground_color' => $foreground_color, 'third_color' => $third_color, 'coupon_styles' => $coupon_styles, 'design' => $design, 'show_coupon_description' => $show_coupon_description, ), $template_path, $default_path ); } exit; } } /** * Add display state for printable coupon's terms page * * @param array $post_states An array of post display states. * @param WP_Post $post The current post object. */ public function display_post_states( $post_states, $post ) { $terms_page_id = $this->get_terms_page_id(); if ( ! empty( $post->ID ) && ! empty( $terms_page_id ) && absint( $terms_page_id ) === absint( $post->ID ) ) { if ( isset( $post_states['private'] ) ) { unset( $post_states['private'] ); } $post_states['wc_sc_coupons_terms'] = __( 'Used during coupon printing', 'woocommerce-smart-coupons' ); } return $post_states; } /** * Prevent Deletion Of Terms Page * * @param mixed $is_delete Whether to allow deletion or not. * @param WP_Post $post The post to delete. * @param boolean $force_delete Whether to permanently delete or not. * @return mixed */ public function prevent_deletion_of_terms_page( $is_delete = null, $post = null, $force_delete = false ) { $terms_page_id = $this->get_terms_page_id(); if ( ! empty( $post->ID ) && ! empty( $terms_page_id ) && absint( $terms_page_id ) === absint( $post->ID ) ) { return false; } return $is_delete; } /** * Scripts & styles */ public function enqueue_scripts_and_styles() { global $woocommerce_smart_coupon; if ( empty( $_SERVER['QUERY_STRING'] ) ) { return; } parse_str( wp_unslash( $_SERVER['QUERY_STRING'] ), $coupon_args ); // phpcs:ignore $coupon_args = wc_clean( $coupon_args ); $design = get_option( 'wc_sc_setting_coupon_design', 'basic' ); if ( ! empty( $coupon_args['print-coupons'] ) && 'yes' === $coupon_args['print-coupons'] && ! empty( $coupon_args['source'] ) && 'wc-smart-coupons' === $coupon_args['source'] && ! empty( $coupon_args['coupon-codes'] ) ) { if ( 'custom-design' !== $design ) { if ( ! wp_style_is( 'smart-coupon-designs' ) ) { wp_enqueue_style( 'smart-coupon-designs' ); } } } } } } WC_SC_Print_Coupon::get_instance();