public function remove_payment($payment_id = 0, $update_stats = true)
{
if (empty($payment_id)) {
return false;
}
$payment = new Give_Payment($payment_id);
if ('publish' !== $payment->status && 'revoked' !== $payment->status) {
$update_stats = false;
}
$new_payment_ids = '';
if (!empty($this->payment_ids)) {
$payment_ids = array_map('absint', explode(',', $this->payment_ids));
$pos = array_search($payment_id, $payment_ids);
if (false === $pos) {
return false;
}
unset($payment_ids[$pos]);
$payment_ids = array_filter($payment_ids);
$new_payment_ids = implode(',', array_unique(array_values($payment_ids)));
}
do_action('give_customer_pre_remove_payment', $payment_id, $this->id);
$payment_removed = $this->update(array('payment_ids' => $new_payment_ids));
if ($payment_removed) {
$this->payment_ids = $new_payment_ids;
if ($update_stats) {
// We removed this payment successfully, decrement the stats
$payment_amount = give_get_payment_amount($payment_id);
if (!empty($payment_amount)) {
$this->decrease_value($payment_amount);
}
$this->decrease_purchase_count();
}
}
do_action('give_customer_post_remove_payment', $payment_removed, $payment_id, $this->id);
return $payment_removed;
}