/**
  * Process the donation with PayPal.
  *   
  * @param   int $donation_id
  * @param   Charitable_Donation_Processor $processor
  * @return  void
  * @access  public
  * @static
  * @since   1.0.0
  */
 public static function process_donation($donation_id, $processor)
 {
     $gateway = new Charitable_Gateway_Paypal();
     $user_data = $processor->get_donation_data_value('user');
     $donation = new Charitable_Donation($donation_id);
     $transaction_mode = $gateway->get_value('transaction_mode');
     $paypal_args = apply_filters('charitable_paypal_redirect_args', array('business' => $gateway->get_value('paypal_email'), 'email' => $user_data['email'], 'first_name' => $user_data['first_name'], 'last_name' => $user_data['last_name'], 'address1' => $user_data['address'], 'address2' => $user_data['address_2'], 'city' => $user_data['city'], 'country' => $user_data['country'], 'zip' => $user_data['postcode'], 'invoice' => $processor->get_donation_data_value('donation_key'), 'amount' => $donation->get_total_donation_amount(), 'item_name' => html_entity_decode($donation->get_campaigns_donated_to(), ENT_COMPAT, 'UTF-8'), 'no_shipping' => '1', 'shipping' => '0', 'no_note' => '1', 'currency_code' => charitable_get_currency(), 'charset' => get_bloginfo('charset'), 'custom' => $donation_id, 'rm' => '2', 'return' => charitable_get_permalink('donation_receipt_page', array('donation_id' => $donation_id)), 'cancel_return' => home_url(), 'notify_url' => $processor->get_ipn_url(self::ID), 'cbt' => get_bloginfo('name'), 'bn' => 'Charitable_SP', 'cmd' => $transaction_mode == 'donations' ? '_donations' : '_xclick'), $donation_id, $processor);
     /**
      * Set up the PayPal redirect URL
      */
     $paypal_redirect = trailingslashit($gateway->get_redirect_url()) . '?';
     $paypal_redirect .= http_build_query($paypal_args);
     $paypal_redirect = str_replace('&', '&', $paypal_redirect);
     /**
      * Redirect to PayPal
      */
     wp_redirect($paypal_redirect);
     exit;
 }
/**
 * Add donation_receipt_optout to the list of meta fields to be saved. 
 *
 * @param   mixed[] $meta
 * @param   int $donation_id
 * @param   Charitable_Donation_Processor $processor
 * @return  mixed[]
 */
function ed_save_donation_receipt_opt_out_meta_field($meta, $donation_id, Charitable_Donation_Processor $processor)
{
    $meta['donation_receipt_optout'] = $processor->get_donation_data_value('donation_receipt_optout');
    return $meta;
}