ddwcaf_configuration = $ddwcaf_configuration;
$this->affiliate_helper = new DDWCAF_Affiliate_Helper( $ddwcaf_configuration );
}
/**
* Register settings function
*
* @return void
*/
public function ddwcaf_register_settings() {
// General configuration fields
register_setting( 'ddwcaf-general-configuration-fields', '_ddwcaf_enabled' );
register_setting( 'ddwcaf-general-configuration-fields', '_ddwcaf_user_roles' );
register_setting( 'ddwcaf-general-configuration-fields', '_ddwcaf_fields_enabled_on_woocommerce_registration' );
register_setting( 'ddwcaf-general-configuration-fields', '_ddwcaf_affiliate_dashboard_page_id' );
register_setting( 'ddwcaf-general-configuration-fields', '_ddwcaf_default_affiliate_dashboard_page' );
register_setting( 'ddwcaf-general-configuration-fields', '_ddwcaf_enable_widgets_affiliate_dashboard_page' );
register_setting( 'ddwcaf-general-configuration-fields', '_ddwcaf_my_account_enabled' );
register_setting( 'ddwcaf-general-configuration-fields', '_ddwcaf_enable_widgets_my_account_endpoint' );
// Referrals configuration fields
register_setting( 'ddwcaf-referrals-configuration-fields', '_ddwcaf_query_variable_name' );
register_setting( 'ddwcaf-referrals-configuration-fields', '_ddwcaf_referral_cookie_name' );
register_setting( 'ddwcaf-referrals-configuration-fields', '_ddwcaf_referral_cookie_expires' );
register_setting( 'ddwcaf-referrals-configuration-fields', '_ddwcaf_referral_cookie_change_allowed' );
register_setting( 'ddwcaf-referrals-configuration-fields', '_ddwcaf_register_visits_enabled' );
// Commissions configuration fields
register_setting( 'ddwcaf-commissions-configuration-fields', '_ddwcaf_default_commission_rate' );
register_setting( 'ddwcaf-commissions-configuration-fields', '_ddwcaf_exclude_taxes_enabled' );
register_setting( 'ddwcaf-commissions-configuration-fields', '_ddwcaf_exclude_discounts_enabled' );
register_setting( 'ddwcaf-payouts-configuration-fields', '_ddwcaf_withdrawal_methods' );
// Shortcode configuration fields
register_setting( 'ddwcaf-shortcodes-configuration-fields', '_ddwcaf_affiliate_registration_form_shortcode' );
register_setting( 'ddwcaf-shortcodes-configuration-fields', '_ddwcaf_affiliate_registration_form_shortcode_content' );
register_setting( 'ddwcaf-shortcodes-configuration-fields', '_ddwcaf_affiliate_dashboard_shortcode' );
// Layout configuration fields
register_setting( 'ddwcaf-layout-configuration-fields', '_ddwcaf_primary_color' );
register_setting( 'ddwcaf-layout-configuration-fields', '_ddwcaf_details_icons_enabled' );
register_setting( 'ddwcaf-layout-configuration-fields', '_ddwcaf_details_icons_wrapper_enabled' );
register_setting( 'ddwcaf-layout-configuration-fields', '_ddwcaf_details_icon_size' );
register_setting( 'ddwcaf-layout-configuration-fields', '_ddwcaf_details_icon_color' );
register_setting( 'ddwcaf-layout-configuration-fields', '_ddwcaf_details_icon_wrapper_background_color' );
register_setting( 'ddwcaf-layout-configuration-fields', '_ddwcaf_details_card_background_color' );
register_setting( 'ddwcaf-layout-configuration-fields', '_ddwcaf_details_card_border_color' );
register_setting( 'ddwcaf-layout-configuration-fields', '_ddwcaf_details_card_text_color' );
register_setting( 'ddwcaf-layout-configuration-fields', '_ddwcaf_details_card_value_color' );
register_setting( 'ddwcaf-layout-configuration-fields', '_ddwcaf_table_header_background_color' );
register_setting( 'ddwcaf-layout-configuration-fields', '_ddwcaf_table_header_text_color' );
}
/**
* Add user form fields function
*
* @return void
*/
public function ddwcaf_add_user_form_fields() {
?>
affiliate_helper->ddwcaf_update_affiliate_status( $user_id, $this->ddwcaf_configuration[ 'default_affiliate_status' ] );
if ( ! empty( $_POST[ 'ddwcaf_from_affiliates_page' ] ) ) {
wp_safe_redirect( admin_url( 'admin.php?page=ddwcaf-dashboard&menu=affiliates&status=saved' ) );
exit();
}
}
}
}
/**
* Handle order refund creation
*
* @param int $refund_id Refund id.
* @return void
*/
public function ddwcaf_handle_refund_created( $refund_id ) {
$refund = wc_get_order( $refund_id );
if ( ! $refund ) {
return;
}
$order = wc_get_order( $refund->get_parent_id() );
if ( ! $order ) {
return;
}
if ( $order->has_status( 'refunded' ) ) {
return;
}
if ( ! $order->get_meta( '_ddwcaf_referral_token' ) ) {
return;
}
$refund_partials = [];
$commission_helper = new DDWCAF_Commission_Helper( $this->ddwcaf_configuration );
foreach ( $refund->get_items() as $item_id => $item ) {
// retrieve amount refunded.
$refunded_item = $item->get_meta( '_refunded_item_id' );
// retrieve commission id for current item.
try {
$commission_id = wc_get_order_item_meta( $refunded_item, '_ddwcaf_commission_id' );
} catch ( Exception $e ) {
continue;
}
// if no commission id is found, continue.
if ( ! $commission_id ) {
continue;
}
// retrieve commission data for found commission id.
$commission = $commission_helper->ddwcaf_get_commission_by_id( $commission_id );
// if no commission is found, continue.
if ( ! $commission ) {
continue;
}
$product_id = $item->get_product_id();
$variation_id = $item->get_variation_id();
// retrieves current product id.
$product_id = $variation_id ? $variation_id : $product_id;
// choose method to retrieve item total.
$get_item_amount = ! empty( $this->ddwcaf_configuration[ 'exclude_discounts_enabled' ] ) ? 'get_line_total' : 'get_line_subtotal';
$item_amount = (float) $refund->$get_item_amount( $item, empty( $this->ddwcaf_configuration[ 'exclude_taxes_enabled' ] ), false );
$line_total = abs( $item_amount );
// calculate amount of the item's refund that affects current commission.
$refunded_amount = $commission_helper->ddwcaf_calculate_commission_amount( $line_total, $commission[ 'affiliate_id' ] );
// decrease commission amount and increase total refunds.
$commission[ 'commission' ] = floatval( $commission[ 'commission' ] ) - $refunded_amount;
$commission[ 'refund' ] = $refunded_amount;
$commission[ 'updated_at' ] = current_time( 'Y-m-d H:i:s' );
$commission_helper->ddwcaf_save_commission( $commission );
// save amount refunded.
$refund_partials[ $commission_id ] = -1 * $refunded_amount;
}
// save list of refunded commissions for this refund.
$refund->update_meta_data( '_ddwcaf_refunded_commissions', $refund_partials );
$refund->save();
}
/**
* Display Pro Upgrade Admin Notice
*
* @return void
*/
public function ddwcaf_show_pro_upgrade_notice() {
if ( ! current_user_can( 'manage_woocommerce' ) ) {
return;
}
$upgrade_url = 'https://devdiggers.com/product/woocommerce-affiliates/?utm_source=admin_notice&utm_medium=upgrade_button&utm_campaign=plugin_upgrade';
$message = sprintf(
/* translators: %1$s: opening strong tag, %2$s: closing strong tag, %3$s: opening anchor tag, %4$s: closing anchor tag */
esc_html__( 'Want to take your affiliate program to the next level? %1$sUpgrade to Affiliates for WooCommerce Pro%2$s now to unlock advanced features like Tier-Based Commission, Product-wise Commission, Advanced Reports, and more! %3$sGet Pro Version >%4$s', 'affiliates-for-woocommerce' ),
'',
'',
'',
''
);
ddfw_print_notification( $message, 'info', true );
}
}
}