Skip to content

Instantly share code, notes, and snippets.

@wpmudev-sls
Created October 16, 2018 07:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wpmudev-sls/9dc604491d777c24a286c5e51183fcf1 to your computer and use it in GitHub Desktop.
Save wpmudev-sls/9dc604491d777c24a286c5e51183fcf1 to your computer and use it in GitHub Desktop.
<?php
add_action( 'ms_invoice_paid', function( $invoice, $subscription ){
$set_up_bonus = 30;
global $affiliate; // Used for communication with Affiliates plugin.
global $blog_id, $site_id; // Used for logging.
// Don't pay a commission if the membership is not active.
if ( $subscription->status != $subscription::STATUS_ACTIVE ) {
return;
}
$user_id = $invoice->user_id;
$membership = $subscription->get_membership();
$pay_once = defined( 'AFFILIATE_PAYONCE' ) && 'yes' == AFFILIATE_PAYONCE;
$user_id_referrer = get_user_meta( $user_id, 'affiliate_referred_by', true );
if ( empty( $user_id_referrer ) ) {
// We do not know who referred the user, don't pay a commission.
return;
}
// If affiliate is aleady paid it's not the first payment. So we don't need to charge the set up.
// We'll let the default action take over
$affiliate_paid = get_user_meta( $user_id, 'affiliate_paid', true );
if ( $affiliate_paid ) {
return;
}
$complete_records = $affiliate->get_complete_records(
$user_id_referrer,
date( 'Ym' ),
array( Affiliate_Membership2_Integration::AREA_KEY ),
$user_id
);
if ( $pay_once && is_array( $complete_records ) ) {
// Make sure that this subscription was not commissioned before.
foreach ( $complete_records as $record ) {
$meta = maybe_unserialize( $record->meta );
if ( $meta['subscription_id'] == $subscription->id ) {
// It seems this subscription was already commissioned.
return;
}
}
}
$reward = $membership->get_custom_data( 'aff_reward_value' );
$reward = max( 0, intval( $reward ) );
$reward = (float) $reward / 100;
$available_types = array( 'inv', 'mem', 'abs' );
$type = $membership->get_custom_data( 'aff_reward_type' );
if ( ! in_array( $type, $available_types ) ) {
$type = 'abs';
}
switch ( $type ) {
case 'inv':
$base = $invoice->subtotal; // Invoice amount without taxes.
$reward = $base * $reward / 100;
break;
case 'mem':
$base = $membership->price; // Membership price setting.
$reward = $base * $reward / 100;
break;
case 'abs':
default:
// Reward already has correct value.
break;
}
$reward = round( ( $reward + $set_up_bonus ), 2, PHP_ROUND_HALF_DOWN );
// Note: lib2() used here is provided by the Membership2 plugin.
$meta = array(
'subscription_id' => $subscription->id,
'invoice_id' => $invoice->id,
'gateway_id' => $invoice->gateway_id,
'transaction_id' => $invoice->external_id,
'blog_id' => $blog_id,
'site_id' => $site_id,
'current_user_id' => get_current_user_id(),
'REMOTE_URL' => $_SERVER['HTTP_REFERER'],
'LOCAL_URL' => mslib3()->net->current_url(),
'IP' => mslib3()->net->current_ip()->ip,
);
$affiliate_process_payment = apply_filters( 'affiliate_process_payment', true, $user_id_referrer, $reward, $user_id, $meta );
if ( ! $affiliate_process_payment ) return;
do_action(
'affiliate_purchase',
$user_id_referrer,
$reward,
Affiliate_Membership2_Integration::AREA_KEY,
$user_id,
__( 'Membership2', 'affiliate' ),
$meta
);
update_user_meta( $user_id, 'affiliate_paid', 'yes' );
}, 8, 2 );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment