function affwp_set_referral_status($referral, $new_status = '') { if (is_object($referral) && isset($referral->referral_id)) { $referral_id = $referral->referral_id; } elseif (is_numeric($referral)) { $referral_id = absint($referral); $referral = affwp_get_referral($referral_id); } else { return false; } $old_status = $referral->status; if ($old_status == $new_status) { return false; } if (affiliate_wp()->referrals->update($referral_id, array('status' => $new_status), '', 'referral')) { if ('paid' == $new_status) { affwp_increase_affiliate_earnings($referral->affiliate_id, $referral->amount); affwp_increase_affiliate_referral_count($referral->affiliate_id); } elseif ('unpaid' == $new_status && ('pending' == $old_status || 'rejected' == $old_status)) { // Update the visit ID that spawned this referral affiliate_wp()->visits->update($referral->visit_id, array('referral_id' => $referral->referral_id), '', 'visit'); do_action('affwp_referral_accepted', $referral->affiliate_id, $referral); } elseif ('paid' != $new_status && 'paid' == $old_status) { affwp_decrease_affiliate_earnings($referral->affiliate_id, $referral->amount); affwp_decrease_affiliate_referral_count($referral->affiliate_id); } do_action('affwp_set_referral_status', $referral_id, $new_status, $old_status); return true; } return false; }
public function do_referrals($step = 1) { global $wpdb; $offset = ($step - 1) * 100; $referrals = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}aff_referrals ORDER BY referral_id LIMIT {$offset}, 100;"); if ($referrals) { foreach ($referrals as $referral) { if (in_array($referral->affiliate_id, $this->direct_affiliates)) { continue; // Skip referrals for Direct } switch ($referral->status) { case 'accepted': $status = 'unpaid'; break; case 'closed': $status = 'paid'; break; case 'rejected': $status = 'rejected'; break; case 'pending': default: $status = 'pending'; break; } $context = ''; $data = maybe_unserialize($referral->data); if (!empty($data)) { if (!empty($data['order_id'])) { if (!empty($data['order_id']['domain'])) { $context = $data['order_id']['domain']; } } } $args = array('status' => $status, 'affiliate_id' => $referral->affiliate_id, 'date' => $referral->datetime, 'description' => $referral->description, 'amount' => $referral->amount, 'currency' => strtoupper($referral->currency_id), 'reference' => $referral->reference, 'context' => $context, 'visit_id' => 0, 'custom' => ''); $id = affiliate_wp()->referrals->add($args); if ('paid' == $status) { affwp_increase_affiliate_earnings($referral->affiliate_id, $referral->amount); affwp_increase_affiliate_referral_count($referral->affiliate_id); } } return true; } else { // No referrals found, so all done return false; } }
/** * Update a referral * * @access public * @since 1.5 */ public function update_referral($referral_id = 0, $data = array()) { if (empty($referral_id)) { return false; } $referral = $this->get($referral_id); if (!$referral) { return false; } if (isset($data['amount'])) { $data['amount'] = affwp_sanitize_amount($data['amount']); } if (!empty($data['products'])) { $data['products'] = maybe_serialize($data['products']); } $update = $this->update($referral_id, $data, '', 'referral'); if ($update) { if (!empty($data['status']) && $referral->status !== $data['status']) { affwp_set_referral_status($referral, $data['status']); } elseif ('paid' === $referral->status) { if ($referral->amount > $data['amount']) { $change = $referral->amount - $data['amount']; affwp_decrease_affiliate_earnings($referral->affiliate_id, $change); } elseif ($referral->amount < $data['amount']) { $change = $data['amount'] - $referral->amount; affwp_increase_affiliate_earnings($referral->affiliate_id, $change); } } return $update; } return false; }
function test_adjust_affiliate_earnings() { $this->assertEquals(10, affwp_increase_affiliate_earnings($this->_affiliate_id, '10')); $this->assertFalse(affwp_increase_affiliate_earnings(0, '10')); $this->assertEquals(8, affwp_decrease_affiliate_earnings($this->_affiliate_id, 2)); $this->assertFalse(affwp_decrease_affiliate_earnings(0, '10')); $this->assertEquals('12.2', affwp_increase_affiliate_earnings($this->_affiliate_id, '4.2')); }