$disabled_rule ) {
if ( $disabled_rule['is_exclusive'] === $is_exclusive ) {
unset( $disabled_rules[ $index ] );
}
}
update_option( self::$disabled_rules_option_name, $disabled_rules );
}
}
include_once WC_ADP_PLUGIN_PATH . 'classes/admin/class-wdp-ajax.php';
add_action( 'wp_ajax_wdp_ajax', array( new WDP_Ajax(), 'ajax_requests' ) );
WDP_Loader::load_core();// init
$this->prepare_tabs();
add_action( 'add_meta_boxes', array( $this, 'add_meta_boxes' ), 30 );
include_once WC_ADP_PLUGIN_PATH . 'classes/admin/class-wdp-preview-order-applied-discount-rules.php';
add_action('woocommerce_admin_order_preview_end', array( $this, 'print_applied_discounts_order_preview' ));
add_filter('woocommerce_admin_order_preview_get_order_details', array( $this, 'add_applied_discounts_data' ), 10, 2);
//do once
if( !get_option( self::$activation_notice_option ) )
add_action('admin_notices', array( $this,'display_plugin_activated_message'));
add_action( 'admin_notices', array( $this, 'notify_rule_disabled' ), 10 );
}
public static function print_applied_discounts_order_preview(){
WDP_Preview_Order_Applied_Discount_Rules::render();
}
public static function add_applied_discounts_data($export_data, $order){
$export_data = WDP_Preview_Order_Applied_Discount_Rules::add_data($export_data, $order);
return $export_data;
}
public function display_plugin_activated_message() {
?>
on this page.', 'advanced-dynamic-pricing-for-woocommerce' ); ?>
get_current_tab();
$tabs = $this->get_tabs();
$handler = isset( $tabs[ $current_tab ] ) ? $tabs[ $current_tab ] : $tabs[ $this->get_default_tab() ];
$handler->action();
include WC_ADP_PLUGIN_PATH . 'views/menupage.php';
}
private function prepare_tabs() {
include_once WC_ADP_PLUGIN_PATH . 'classes/admin/tabs/class-wdp-abstract-page.php';
foreach ( glob( WC_ADP_PLUGIN_PATH . 'classes/admin/tabs/class-*.php' ) as $filename ) {
include_once $filename;
}
$tabs = array(
'common' => new WDP_Admin_Common_Page(),
'exclusive' => new WDP_Admin_Exclusive_Page(),
'statistics' => new WDP_Admin_Statistics_Page(),
'options' => new WDP_Admin_Options_Page(),
'tools' => new WDP_Admin_Tools_Page(),
'help' => new WDP_Admin_Help_Page(),
);
$tabs = apply_filters( 'wdp_admin_tabs', $tabs );
uasort( $tabs, function ( $tab1, $tab2 ) {
$priority1 = (int) isset( $tab1->priority ) ? $tab1->priority : 1000;
$priority2 = (int) isset( $tab2->priority ) ? $tab2->priority : 1000;
if ( $priority1 <= $priority2 ) {
return - 1;
} else {
return 1;
}
} );
$this->tabs = $tabs;
}
private function get_tabs() {
return $this->tabs;
}
private function get_current_tab() {
return isset( $_REQUEST['tab'] ) ? $_REQUEST['tab'] : $this->get_default_tab();
}
private function get_default_tab() {
return 'common';
}
public function enqueue_backend_assets() {
$tab = $this->get_current_tab();
// Enqueue script for handling the meta boxes
wp_enqueue_script( 'wdp_postbox', WC_ADP_PLUGIN_URL . '/assets/js/postbox.js', array( 'jquery', 'jquery-ui-sortable' ), WC_ADP_VERSION );
// jQuery UI Datepicker
wp_enqueue_script( 'jquery-ui-datepicker' );
// jQuery UI Datepicker styles
wp_enqueue_style( 'wdp_jquery-ui', WC_ADP_PLUGIN_URL . '/assets/jquery-ui/jquery-ui.min.css', array(), '1.11.4' );
// Enqueue Select2 related scripts and styles
wp_enqueue_script( 'select2', WC()->plugin_url() . '/assets/js/select2/select2.full.min.js', array( 'jquery' ), '4.0.3' );
wp_enqueue_style( 'select2', WC()->plugin_url() . '/assets/css/select2.css', array(), '4.0.3' );
if ( "options" !== $tab ) {
// Enqueue jquery mobile related scripts and styles (for flip switch)
wp_enqueue_script( 'jquery-mobile-scripts', WC_ADP_PLUGIN_URL . '/assets/jquery.mobile/jquery.mobile.custom.min.js', array( 'jquery' ) );
wp_enqueue_style( 'jquery-mobile-styles', WC_ADP_PLUGIN_URL . '/assets/jquery.mobile/jquery.mobile.custom.structure.min.css' );
wp_enqueue_style( 'jquery-mobile-theme-styles', WC_ADP_PLUGIN_URL . '/assets/jquery.mobile/jquery.mobile.custom.theme.css' );
// Backend scripts
wp_enqueue_script( 'wdp_settings-scripts', WC_ADP_PLUGIN_URL . '/assets/js/rules.js', array(
'jquery',
'jquery-ui-sortable',
'select2',
), WC_ADP_VERSION );
} else {
wp_enqueue_script( 'wdp_options-scripts', WC_ADP_PLUGIN_URL . '/assets/js/options.js', array( 'jquery'), WC_ADP_VERSION );
wp_enqueue_style( 'wdp_options-styles', WC_ADP_PLUGIN_URL . '/assets/css/options.css', array(), WC_ADP_VERSION );
}
// Backend styles
wp_enqueue_style( 'wdp_settings-styles', WC_ADP_PLUGIN_URL . '/assets/css/settings.css', array(), WC_ADP_VERSION );
// DateTime Picker
wp_enqueue_script('wdp_datetimepicker-scripts', WC_ADP_PLUGIN_URL . '/assets/datetimepicker/jquery.datetimepicker.full.min.js', array('jquery'));
wp_enqueue_style('wdp_datetimepicker-styles', WC_ADP_PLUGIN_URL . '/assets/datetimepicker/jquery.datetimepicker.min.css', array() );
if ( ! empty( $this->tabs[ $tab ] ) && method_exists( $this->tabs[ $tab ], 'get_tab_rules' ) ) {
$rules = $this->tabs[$tab]->get_tab_rules();
} else {
$rules = array();
}
$paged = $this->tabs[$tab]->get_pagenum();
$preloaded_lists = array(
'payment_methods' => WDP_Helpers::get_payment_methods(),
'shipping_methods' => WDP_Helpers::get_shipping_methods(),
'countries' => WDP_Helpers::get_countries(),
'states' => WDP_Helpers::get_states(),
'user_roles' => WDP_Helpers::get_user_roles(),
'user_capabilities' => WDP_Helpers::get_user_capabilities(),
'weekdays' => WDP_Helpers::get_weekdays(),
);
foreach ( $preloaded_lists as $list_key => &$list ) {
$list = apply_filters( 'wdp_preloaded_list_' . $list_key, $list );
}
$options = WDP_Helpers::get_settings();
$wdp_data = array(
'page' => $tab,
'rules' => $rules,
'titles' => $this->get_filter_titles( $this->get_ids_for_filter_titles( $rules ) ),
'labels' => array(
'select2_no_results' => __( 'no results', 'advanced-dynamic-pricing-for-woocommerce' ),
'confirm_remove_rule' => __( 'Remove rule?', 'advanced-dynamic-pricing-for-woocommerce' ),
'currency_symbol' => get_woocommerce_currency_symbol(),
'fixed_discount' => __( 'Fixed discount for item', 'advanced-dynamic-pricing-for-woocommerce' ),
'fixed_price' => __( 'Fixed price for item', 'advanced-dynamic-pricing-for-woocommerce' ),
'fixed_discount_for_set' => __( 'Fixed discount for set', 'advanced-dynamic-pricing-for-woocommerce' ),
'fixed_price_for_set' => __( 'Fixed price for set', 'advanced-dynamic-pricing-for-woocommerce' ),
),
'lists' => $preloaded_lists,
'selected_rule' => isset( $_GET['rule_id'] ) ? (int) $_GET['rule_id'] : - 1,
'bulk_rule' => WDP_Rule_Range_Adjustments_Qty_Based_Calculator::get_all_available_types(),
'options' => array(
'enable_product_exclude' => isset( $options['allow_to_exclude_products'] ) ? $options['allow_to_exclude_products'] : false,
'rules_per_page' => isset( $options['rules_per_page'] ) ? $options['rules_per_page'] : false,
),
'paged' => $paged,
);
wp_localize_script( 'wdp_settings-scripts', 'wdp_data', $wdp_data );
}
public function get_ids_for_filter_titles( $rules ){
// make array of filters splitted by type
$filters_by_type = array(
'products' => array(),
'giftable_products' => array(),
'product_tags' => array(),
'product_categories' => array(),
'product_category_slug' => array(),
'product_attributes' => array(),
'product_sku' => array(),
'product_custom_fields' => array(),
'users_list' => array(),
'coupons' => array(),
'subscriptions' => array(),
);
foreach ( array_keys( WDP_Helpers::get_custom_product_taxonomies() ) as $tax_name ) {
$filters_by_type[ $tax_name ] = array();
}
$filters_by_type = apply_filters('wdp_ids_for_filter_titles', $filters_by_type, $rules);
foreach ( $rules as $rule ) {
foreach ( $rule['filters'] as $filter ) {
if ( ! isset( $filter[ 'value' ] ) ) continue;
$type = $filter['type'];
$value = $filter['value'];
$filters_by_type[ $type ] = array_merge( $filters_by_type[ $type ], (array) $value );
if ( isset( $filter['product_exclude']['values'] ) ) {
foreach ( $filter['product_exclude']['values'] as $product_id ) {
$filters_by_type['products'][] = $product_id;
}
}
}
if (isset($rule['get_products']['value']) ) {
foreach ( $rule['get_products']['value'] as $filter ) {
if ( ! isset( $filter[ 'value' ] ) ) continue;
$type = $filter['type'];
$value = $filter['value'];
$filters_by_type[ $type ] = array_merge( $filters_by_type[ $type ], (array) $value );
}
}
if ( isset( $rule['bulk_adjustments']['selected_categories'] ) ) {
$filters_by_type['product_categories'] = array_merge( $filters_by_type['product_categories'], (array) $rule['bulk_adjustments']['selected_categories'] );
}
if ( isset( $rule['conditions'] ) ) {
foreach ($rule['conditions'] as $condition) {
if ( $condition['type'] === 'specific' && isset( $condition['options'][2] ) ) {
$value = $condition['options'][2];
$filters_by_type[ 'users_list' ] = array_merge( $filters_by_type[ 'users_list' ], (array) $value );
} elseif ( $condition['type'] === 'product_attributes' && isset( $condition['options'][2] ) ) {
$value = $condition['options'][2];
$filters_by_type[ 'product_attributes' ] = array_merge( $filters_by_type[ 'product_attributes' ], (array) $value );
} elseif ( $condition['type'] === 'product_custom_fields' && isset( $condition['options'][2] ) ) {
$value = $condition['options'][2];
$filters_by_type[ 'product_custom_fields' ] = array_merge( $filters_by_type[ 'product_custom_fields' ], (array) $value );
} elseif ( $condition['type'] === 'product_categories' && isset( $condition['options'][2] ) ) {
$value = $condition['options'][2];
$filters_by_type[ 'product_categories' ] = array_merge( $filters_by_type[ 'product_categories' ], (array) $value );
} elseif ( $condition['type'] === 'product_category_slug' && isset( $condition['options'][2] ) ) {
$value = $condition['options'][2];
$filters_by_type[ 'product_category_slug' ] = array_merge( $filters_by_type[ 'product_category_slug' ], (array) $value );
} elseif ( $condition['type'] === 'product_tags' && isset( $condition['options'][2] ) ) {
$value = $condition['options'][2];
$filters_by_type[ 'product_tags' ] = array_merge( $filters_by_type[ 'product_tags' ], (array) $value );
} elseif ( $condition['type'] === 'products' && isset( $condition['options'][2] ) ) {
$value = $condition['options'][2];
$filters_by_type[ 'products' ] = array_merge( $filters_by_type[ 'products' ], (array) $value );
} elseif ( $condition['type'] === 'cart_coupons' && isset( $condition['options'][1] ) ) {
$value = $condition['options'][1];
$filters_by_type[ 'coupons' ] = array_merge( $filters_by_type[ 'coupons' ], (array) $value );
} elseif ( $condition['type'] === 'subscriptions' && isset( $condition['options'][1] ) ) {
$value = $condition['options'][1];
$filters_by_type[ 'subscriptions' ] = array_merge( $filters_by_type[ 'subscriptions' ], (array) $value );
} elseif ( in_array( $condition['type'], array_keys( WDP_Helpers::get_custom_product_taxonomies() ) ) && isset( $condition['options'][2] ) ) {
$value = $condition['options'][2];
$filters_by_type[ $condition['type'] ] = array_merge( $filters_by_type[ $condition['type'] ], (array) $value );
}
}
}
}
return $filters_by_type;
}
/**
* Retrieve from get_ids_for_filter_titles function filters all products, tags, categories, attributes and return titles
*
* @param array $filters_by_type
*
* @return array
*/
private function get_filter_titles( $filters_by_type ) {
$result = array();
// type 'products'
$result['products'] = array();
foreach ( $filters_by_type['products'] as $id ) {
$result['products'][ $id ] = '#' . $id . ' ' . WDP_Helpers::get_product_title( $id );
}
// type 'giftable_products'
$result['giftable_products'] = array();
foreach ( $filters_by_type['giftable_products'] as $id ) {
$result['giftable_products'][ $id ] = '#' . $id . ' ' . WDP_Helpers::get_product_title( $id );
}
$result['product_sku'] = array();
foreach ( $filters_by_type['product_sku'] as $sku ) {
$result['product_sku'][ $sku ] = 'SKU: ' . $sku;
}
// type 'product_tags'
$result['product_tags'] = array();
foreach ( $filters_by_type['product_tags'] as $id ) {
$result['product_tags'][ $id ] = WDP_Helpers::get_tag_title( $id );
}
// type 'product_categories'
$result['product_categories'] = array();
foreach ( $filters_by_type['product_categories'] as $id ) {
$result['product_categories'][ $id ] = WDP_Helpers::get_category_title( $id );
}
// type 'product_category_slug'
$result['product_category_slug'] = array();
foreach ( $filters_by_type['product_category_slug'] as $slug ) {
$result['product_category_slug'][ $slug ] = __('Slug', 'advanced-dynamic-pricing-for-woocommerce' ) . ': ' . $slug;
}
// product_taxonomies
foreach ( WDP_Helpers::get_custom_product_taxonomies() as $tax ) {
$result[$tax->name] = array();
foreach ( $filters_by_type[$tax->name] as $id ) {
$result[$tax->name][ $id ] = WDP_Helpers::get_product_taxonomy_term_title( $id, $tax->name );
}
}
// type 'product_attributes'
$attributes = WDP_Helpers::get_product_attributes( array_unique( $filters_by_type['product_attributes'] ) );
$result['product_attributes'] = array();
foreach ( $attributes as $attribute ) {
$result['product_attributes'][ $attribute['id'] ] = $attribute['text'];
}
// type 'product_custom_fields'
$customfields = array_unique( $filters_by_type['product_custom_fields'] ); // use as is!
$result['product_custom_fields'] = array();
foreach ( $customfields as $customfield ) {
$result['product_custom_fields'][ $customfield ] = $customfield;
}
// type 'users_list'
$attributes = WDP_Helpers::get_users( $filters_by_type['users_list'] );
$result['users_list'] = array();
foreach ( $attributes as $attribute ) {
$result['users_list'][ $attribute['id'] ] = $attribute['text'];
}
// type 'cart_coupons'
$result['coupons'] = array();
foreach ( array_unique( $filters_by_type['coupons'] ) as $code ) {
$result['coupons'][ $code ] = $code;
}
// type 'subscriptions'
$result['subscriptions'] = array();
foreach ( $filters_by_type['subscriptions'] as $id ) {
$result['subscriptions'][ $id ] = '#' . $id . ' ' . WDP_Helpers::get_product_title( $id );
}
return apply_filters( 'wdp_filter_titles', $result );
}
public function script_loader_src( $src, $handle ) {
// don't load ANY select2.js / select2.min.js and OUTDATED select2.full.js
if ( ! preg_match( '/\/select2\.full\.js\?ver=[1-3]/', $src ) && ! preg_match( '/\/select2\.min\.js/', $src ) && ! preg_match( '/\/select2\.js/', $src ) ) {
return $src;
}
return "";
}
public function notify_rule_disabled() {
$disabled_rules = get_option( self::$disabled_rules_option_name, array() );
if ( $disabled_rules ) {
$disabled_count_common = 0;
$disabled_count_exclusive = 0;
foreach ( $disabled_rules as $rule ) {
$is_exclusive = $rule['is_exclusive'];
if ( $is_exclusive ) {
$disabled_count_exclusive ++;
} else {
$disabled_count_common ++;
}
}
$rule_edit_url = add_query_arg( array(
'page' => 'wdp_settings',
'from_notify' => '1'
), admin_url( 'admin.php' ) );
$common_edit_url = add_query_arg( 'tab', 'common', $rule_edit_url );
$exclusive_edit_url = add_query_arg( 'tab', 'exclusive', $rule_edit_url );
$format = "%s %s %s
";
if ( $disabled_count_common ) {
$notice_message = "";
$notice_message .= '';
if ( 1 === $disabled_count_common ) {
$notice_message .= sprintf( $format, "", __( "The common rule was turned off, it was running too slow.", 'advanced-dynamic-pricing-for-woocommerce' ), $common_edit_url, __( "Edit rule", 'advanced-dynamic-pricing-for-woocommerce' ) );
} else {
$notice_message .= sprintf( $format, $disabled_count_common, __( "common rules were turned off, it were running too slow.", 'advanced-dynamic-pricing-for-woocommerce' ), $common_edit_url, __( "Edit rule", 'advanced-dynamic-pricing-for-woocommerce' ) );
}
$notice_message .= '
';
echo $notice_message;
}
if ( $disabled_count_exclusive ) {
$notice_message = "";
$notice_message .= '';
if ( 1 === $disabled_count_exclusive ) {
$notice_message .= sprintf( $format, "", __( "The exclusive rule was turned off, it was running too slow.", 'advanced-dynamic-pricing-for-woocommerce' ), $exclusive_edit_url, __( "Edit rule", 'advanced-dynamic-pricing-for-woocommerce' ) );
} else {
$notice_message .= sprintf( $format, $disabled_count_exclusive, __( "exclusive rules were turned off, it were running too slow.", 'advanced-dynamic-pricing-for-woocommerce' ), $exclusive_edit_url, __( "Edit rule", 'advanced-dynamic-pricing-for-woocommerce' ) );
}
$notice_message .= '
';
echo $notice_message;
}
}
}
}