function my_give_google_analytics_event($payment, $give_receipt_args) { if ($give_receipt_args['payment_id']) { // Use a meta value so we only send the beacon once. if (get_post_meta($payment->ID, 'give_ga_beacon_sent', true)) { return; } $total = give_get_payment_amount($payment->ID); ?> <script type="text/javascript"> ga('require', 'ecommerce', 'ecommerce.js'); ga('ecommerce:addTransaction', { 'id': '<?php echo esc_js(give_get_payment_number($payment->ID)); ?> ', // Transaction ID. Required. 'affiliation': '<?php echo esc_js(get_bloginfo('name')); ?> ', // Affiliation or store name. 'revenue': '<?php echo esc_js($total); ?> ' // donation amount. }); ga('ecommerce:send'); </script> <?php update_post_meta($payment->ID, 'give_ga_beacon_sent', true); } }
/** * Get the Export Data. * * @access public * @since 1.5 * @global object $wpdb Used to query the database using the WordPress database API. * @return array $data The data for the CSV file. */ public function get_data() { global $wpdb; $data = array(); $args = array('number' => 30, 'page' => $this->step, 'status' => $this->status); if (!empty($this->start) || !empty($this->end)) { $args['date_query'] = array(array('after' => date('Y-n-d 00:00:00', strtotime($this->start)), 'before' => date('Y-n-d 23:59:59', strtotime($this->end)), 'inclusive' => true)); } //echo json_encode($args ); exit; $payments = give_get_payments($args); if ($payments) { foreach ($payments as $payment) { $payment_meta = give_get_payment_meta($payment->ID); $user_info = give_get_payment_meta_user_info($payment->ID); $total = give_get_payment_amount($payment->ID); $user_id = isset($user_info['id']) && $user_info['id'] != -1 ? $user_info['id'] : $user_info['email']; $products = ''; $skus = ''; if (is_numeric($user_id)) { $user = get_userdata($user_id); } else { $user = false; } $data[] = array('id' => $payment->ID, 'seq_id' => give_get_payment_number($payment->ID), 'email' => $payment_meta['email'], 'first' => $user_info['first_name'], 'last' => $user_info['last_name'], 'address1' => isset($user_info['address']['line1']) ? $user_info['address']['line1'] : '', 'address2' => isset($user_info['address']['line2']) ? $user_info['address']['line2'] : '', 'city' => isset($user_info['address']['city']) ? $user_info['address']['city'] : '', 'state' => isset($user_info['address']['state']) ? $user_info['address']['state'] : '', 'country' => isset($user_info['address']['country']) ? $user_info['address']['country'] : '', 'zip' => isset($user_info['address']['zip']) ? $user_info['address']['zip'] : '', 'form_id' => isset($payment_meta['form_id']) ? $payment_meta['form_id'] : '', 'form_name' => isset($payment_meta['form_title']) ? $payment_meta['form_title'] : '', 'skus' => $skus, 'amount' => html_entity_decode(give_format_amount($total)), 'gateway' => give_get_gateway_admin_label(get_post_meta($payment->ID, '_give_payment_gateway', true)), 'trans_id' => give_get_payment_transaction_id($payment->ID), 'key' => $payment_meta['key'], 'date' => $payment->post_date, 'user' => $user ? $user->display_name : __('guest', 'give'), 'status' => give_get_payment_status($payment, true)); } $data = apply_filters('give_export_get_data', $data); $data = apply_filters('give_export_get_data_' . $this->export_type, $data); return $data; } return false; }
/** * This function renders most of the columns in the list table. * * @access public * @since 1.0 * * @param array $item Contains all the data of the discount code * @param string $column_name The name of the column * * @return string Column Name */ public function column_default($item, $column_name) { switch ($column_name) { case 'form': return '<a href="' . esc_url(add_query_arg('form', $item[$column_name])) . '" >' . get_the_title($item[$column_name]) . '</a>'; case 'user_id': return '<a href="' . admin_url('edit.php?post_type=give_forms&page=give-payment-history&user='******'user_id']) ? urlencode($item['user_id']) : give_get_payment_user_email($item['payment_id']))) . '">' . $item['user_name'] . '</a>'; case 'amount': return give_currency_filter(give_format_amount($item['amount'])); case 'payment_id': return '<a href="' . admin_url('edit.php?post_type=give_forms&page=give-payment-history&view=view-order-details&id=' . $item['payment_id']) . '">' . give_get_payment_number($item['payment_id']) . '</a>'; default: return $item[$column_name]; } }
/** * This function renders most of the columns in the list table. * * @access public * @since 1.0 * * @param array $item Contains all the data of the discount code * @param string $column_name The name of the column * * @return string Column Name */ public function column_default($item, $column_name) { $payment = give_get_payment_by('id', $item['payment_id']); switch ($column_name) { case 'form': return '<a href="' . esc_url(add_query_arg('form', $item[$column_name])) . '" >' . get_the_title($item[$column_name]) . '</a>'; case 'user_id': return '<a href="' . admin_url('edit.php?post_type=give_forms&page=give-payment-history&user='******'user_id']) ? urlencode($item['user_id']) : give_get_payment_user_email($item['payment_id']))) . '">' . $item['user_name'] . '</a>'; case 'amount': return give_currency_filter(give_format_amount($item['amount'])); case 'status': $value = '<div class="give-donation-status status-' . sanitize_title(give_get_payment_status($payment, true)) . '"><span class="give-donation-status-icon"></span> ' . give_get_payment_status($payment, true) . '</div>'; if ($payment->mode == 'test') { $value .= ' <span class="give-item-label give-item-label-orange give-test-mode-transactions-label" data-tooltip="' . esc_attr__('This payment was made in test mode', 'give') . '">' . esc_html__('Test', 'give') . '</span>'; } return $value; case 'payment_id': return '<a href="' . admin_url('edit.php?post_type=give_forms&page=give-payment-history&view=view-order-details&id=' . $item['payment_id']) . '">' . give_get_payment_number($item['payment_id']) . '</a>'; default: return $item[$column_name]; } }
/** * Retrieves Recent Sales * * @access public * @since 1.1 * @return array */ public function get_recent_donations() { global $wp_query; $sales = array(); if (!user_can($this->user_id, 'view_give_reports') && !$this->override) { return $sales; } if (isset($wp_query->query_vars['id'])) { $query = array(); $query[] = give_get_payment_by('id', $wp_query->query_vars['id']); } elseif (isset($wp_query->query_vars['purchasekey'])) { $query = array(); $query[] = give_get_payment_by('key', $wp_query->query_vars['purchasekey']); } elseif (isset($wp_query->query_vars['email'])) { $query = give_get_payments(array('meta_key' => '_give_payment_user_email', 'meta_value' => $wp_query->query_vars['email'], 'number' => $this->per_page(), 'page' => $this->get_paged(), 'status' => 'publish')); } else { $query = give_get_payments(array('number' => $this->per_page(), 'page' => $this->get_paged(), 'status' => 'publish')); } if ($query) { $i = 0; foreach ($query as $payment) { $payment_meta = give_get_payment_meta($payment->ID); $user_info = give_get_payment_meta_user_info($payment->ID); $first_name = isset($user_info['first_name']) ? $user_info['first_name'] : ''; $last_name = isset($user_info['last_name']) ? $user_info['last_name'] : ''; $sales['donations'][$i]['ID'] = give_get_payment_number($payment->ID); $sales['donations'][$i]['transaction_id'] = give_get_payment_transaction_id($payment->ID); $sales['donations'][$i]['key'] = give_get_payment_key($payment->ID); $sales['donations'][$i]['total'] = give_get_payment_amount($payment->ID); $sales['donations'][$i]['gateway'] = give_get_payment_gateway($payment->ID); $sales['donations'][$i]['name'] = $first_name . ' ' . $last_name; $sales['donations'][$i]['fname'] = $first_name; $sales['donations'][$i]['lname'] = $last_name; $sales['donations'][$i]['email'] = give_get_payment_user_email($payment->ID); $sales['donations'][$i]['date'] = $payment->post_date; $form_id = isset($payment_meta['form_id']) ? $payment_meta['form_id'] : $payment_meta; $price = isset($payment_meta['form_id']) ? give_get_form_price($payment_meta['form_id']) : false; $price_id = isset($payment_meta['price_id']) ? $payment_meta['price_id'] : null; $sales['donations'][$i]['form']['id'] = $form_id; $sales['donations'][$i]['form']['name'] = get_the_title($payment_meta['form_id']); $sales['donations'][$i]['form']['price'] = $price; if (give_has_variable_prices($form_id)) { if (isset($payment_meta['price_id'])) { $price_name = give_get_price_option_name($form_id, $payment_meta['price_id'], $payment->ID); $sales['donations'][$i]['form']['price_name'] = $price_name; $sales['donations'][$i]['form']['price_id'] = $price_id; $sales['donations'][$i]['form']['price'] = give_get_price_option_amount($form_id, $price_id); } } //Add custom meta to API foreach ($payment_meta as $meta_key => $meta_value) { $exceptions = array('form_title', 'form_id', 'price_id', 'user_info', 'key', 'email', 'date'); //Don't clutter up results with dupes if (in_array($meta_key, $exceptions)) { continue; } $sales['donations'][$i]['payment_meta'][$meta_key] = $meta_value; } $i++; } } return apply_filters('give_api_donations_endpoint', $sales); }
// Exit if accessed directly if (!defined('ABSPATH')) { exit; } /** * View Order Details Page * * @since 1.0 * @return void */ if (!isset($_GET['id']) || !is_numeric($_GET['id'])) { wp_die(__('Donation ID not supplied. Please try again', 'give'), __('Error', 'give')); } // Setup the variables $payment_id = absint($_GET['id']); $number = give_get_payment_number($payment_id); $item = get_post($payment_id); // Sanity check... fail if purchase ID is invalid if (!is_object($item) || $item->post_type != 'give_payment') { wp_die(__('The specified ID does not belong to a payment. Please try again', 'give'), __('Error', 'give')); } $payment_meta = give_get_payment_meta($payment_id); $transaction_id = esc_attr(give_get_payment_transaction_id($payment_id)); $user_id = give_get_payment_user_id($payment_id); $donor_id = give_get_payment_customer_id($payment_id); $payment_date = strtotime($item->post_date); $user_info = give_get_payment_meta_user_info($payment_id); $address = !empty($user_info['address']) ? $user_info['address'] : array('line1' => '', 'line2' => '', 'city' => '', 'country' => '', 'state' => '', 'zip' => ''); $gateway = give_get_payment_gateway($payment_id); $currency_code = give_get_payment_currency_code($payment_id); ?>
/** * Get the Export Data * * @access public * @since 1.0 * @global object $wpdb Used to query the database using the WordPress * Database API * @return array $data The data for the CSV file */ public function get_data() { global $wpdb, $give_options; $data = array(); $payments = give_get_payments(array('offset' => 0, 'number' => -1, 'mode' => give_is_test_mode() ? 'test' : 'live', 'status' => isset($_POST['give_export_payment_status']) ? $_POST['give_export_payment_status'] : 'any', 'month' => isset($_POST['month']) ? absint($_POST['month']) : date('n'), 'year' => isset($_POST['year']) ? absint($_POST['year']) : date('Y'))); foreach ($payments as $payment) { $payment_meta = give_get_payment_meta($payment->ID); $user_info = give_get_payment_meta_user_info($payment->ID); $total = give_get_payment_amount($payment->ID); $user_id = isset($user_info['id']) && $user_info['id'] != -1 ? $user_info['id'] : $user_info['email']; $form_id = isset($payment_meta['form_id']) ? $payment_meta['form_id'] : ''; $form_title = isset($payment_meta['form_title']) ? $payment_meta['form_title'] : ''; if (is_numeric($user_id)) { $user = get_userdata($user_id); } else { $user = false; } $data[] = array('id' => $payment->ID, 'seq_id' => give_get_payment_number($payment->ID), 'email' => $payment_meta['email'], 'first' => $user_info['first_name'], 'last' => $user_info['last_name'], 'address1' => isset($user_info['address']['line1']) ? $user_info['address']['line1'] : '', 'address2' => isset($user_info['address']['line2']) ? $user_info['address']['line2'] : '', 'city' => isset($user_info['address']['city']) ? $user_info['address']['city'] : '', 'state' => isset($user_info['address']['state']) ? $user_info['address']['state'] : '', 'country' => isset($user_info['address']['country']) ? $user_info['address']['country'] : '', 'zip' => isset($user_info['address']['zip']) ? $user_info['address']['zip'] : '', 'amount' => html_entity_decode(give_format_amount($total)), 'form_id' => $form_id, 'form' => $form_title, 'gateway' => give_get_gateway_admin_label(get_post_meta($payment->ID, '_give_payment_gateway', true)), 'trans_id' => give_get_payment_transaction_id($payment->ID), 'key' => $payment_meta['key'], 'date' => $payment->post_date, 'user' => $user ? $user->display_name : __('guest', 'give'), 'status' => give_get_payment_status($payment, true)); } $data = apply_filters('give_export_get_data', $data); $data = apply_filters('give_export_get_data_' . $this->export_type, $data); return $data; }
/** * Email template tag: payment_id * The unique ID number for this donation * * @param int $payment_id * * @return int payment_id */ function give_email_tag_payment_id($payment_id) { return give_get_payment_number($payment_id); }
/** * Render the ID column * * @access public * @since 1.0 * * @param array $payment Contains all the data for the checkbox column * * @return string Displays a checkbox */ public function column_ID($payment) { return '<span class="give-payment-id">' . give_get_payment_number($payment->ID) . '</span>'; }
<table id="give_donation_receipt" class="give-table"> <thead> <?php do_action('give_payment_receipt_before', $payment, $give_receipt_args); ?> <?php if (filter_var($give_receipt_args['payment_id'], FILTER_VALIDATE_BOOLEAN)) { ?> <tr> <th><strong><?php _e('Payment', 'give'); ?> :</strong></th> <th><?php echo give_get_payment_number($payment->ID); ?> </th> </tr> <?php } else { ?> <tr> <th><strong><?php _e('Payment', 'give'); ?> :</strong></th> <th><?php _e('Details', 'give'); ?> :</th>
/** * Retrieve payments. * * The query can be modified in two ways; either the action before the * query is run, or the filter on the arguments (existing mainly for backwards * compatibility). * * @access public * @since 1.0 * @return object */ public function get_payments() { do_action('give_pre_get_payments', $this); $query = new WP_Query($this->args); if ('payments' != $this->args['output']) { return $query->posts; } if ($query->have_posts()) { while ($query->have_posts()) { $query->the_post(); $details = new stdClass(); $payment_id = get_post()->ID; $details->ID = $payment_id; $details->date = get_post()->post_date; $details->post_status = get_post()->post_status; $details->total = give_get_payment_amount($payment_id); $details->fees = give_get_payment_fees($payment_id); $details->key = give_get_payment_key($payment_id); $details->gateway = give_get_payment_gateway($payment_id); $details->user_info = give_get_payment_meta_user_info($payment_id); if (give_get_option('enable_sequential')) { $details->payment_number = give_get_payment_number($payment_id); } $this->payments[] = apply_filters('give_payment', $details, $payment_id, $this); } wp_reset_postdata(); } do_action('give_post_get_payments', $this); return $this->payments; }
/** * Gets the next available order number * * This is used when inserting a new payment * * @since 1.0 * @return string $number The next available payment number */ function give_get_next_payment_number() { if (!give_get_option('enable_sequential')) { return false; } $number = get_option('give_last_payment_number'); $start = give_get_option('sequential_start', 1); $increment_number = true; if (false !== $number) { if (empty($number)) { $number = $start; $increment_number = false; } } else { // This case handles the first addition of the new option, as well as if it get's deleted for any reason $payments = new Give_Payments_Query(array('number' => 1, 'order' => 'DESC', 'orderby' => 'ID', 'output' => 'posts', 'fields' => 'ids')); $last_payment = $payments->get_payments(); if (!empty($last_payment)) { $number = give_get_payment_number($last_payment[0]); } if (!empty($number) && $number !== (int) $last_payment[0]) { $number = give_remove_payment_prefix_postfix($number); } else { $number = $start; $increment_number = false; } } $increment_number = apply_filters('give_increment_payment_number', $increment_number, $number); if ($increment_number) { $number++; } return apply_filters('give_get_next_payment_number', $number); }
/** * Retrieves Recent Sales * * @access public * @since 1.1 * @return array */ public function get_recent_donations() { global $wp_query; $sales = array(); if (!user_can($this->user_id, 'view_give_reports') && !$this->override) { return $sales; } if (isset($wp_query->query_vars['id'])) { $query = array(); $query[] = give_get_payment_by('id', $wp_query->query_vars['id']); } elseif (isset($wp_query->query_vars['purchasekey'])) { $query = array(); $query[] = give_get_payment_by('key', $wp_query->query_vars['purchasekey']); } elseif (isset($wp_query->query_vars['email'])) { $query = give_get_payments(array('meta_key' => '_give_payment_user_email', 'meta_value' => $wp_query->query_vars['email'], 'number' => $this->per_page(), 'page' => $this->get_paged(), 'status' => 'publish')); } else { $query = give_get_payments(array('number' => $this->per_page(), 'page' => $this->get_paged(), 'status' => 'publish')); } if ($query) { $i = 0; foreach ($query as $payment) { $payment_meta = give_get_payment_meta($payment->ID); $user_info = give_get_payment_meta_user_info($payment->ID); $sales['donations'][$i]['ID'] = give_get_payment_number($payment->ID); $sales['donations'][$i]['transaction_id'] = give_get_payment_transaction_id($payment->ID); $sales['donations'][$i]['key'] = give_get_payment_key($payment->ID); $sales['donations'][$i]['total'] = give_get_payment_amount($payment->ID); $sales['donations'][$i]['gateway'] = give_get_payment_gateway($payment->ID); $sales['donations'][$i]['email'] = give_get_payment_user_email($payment->ID); $sales['donations'][$i]['date'] = $payment->post_date; $form_id = isset($payment_meta['form_id']) ? $payment_meta['form_id'] : $payment_meta; $price = isset($payment_meta['form_id']) ? give_get_form_price($payment_meta['form_id']) : false; $price_id = isset($payment_meta['price_id']) ? $payment_meta['price_id'] : null; $sales['donations'][$i]['form']['id'] = $form_id; $sales['donations'][$i]['form']['name'] = get_the_title($payment_meta['form_id']); $sales['donations'][$i]['form']['price'] = $price; if (give_has_variable_prices($form_id)) { if (isset($payment_meta['price_id'])) { $price_name = give_get_price_option_name($form_id, $payment_meta['price_id'], $payment->ID); $sales['donations'][$i]['form']['price_name'] = $price_name; $sales['donations'][$i]['form']['price'] = give_get_price_option_amount($form_id, $price_id); } } $i++; } } return $sales; }
/** * Gets the next available order number * * This is used when inserting a new payment * * @since 1.0 * @return string $number The next available payment number */ function give_get_next_payment_number() { if (!give_get_option('enable_sequential')) { return false; } $prefix = give_get_option('sequential_prefix'); $postfix = give_get_option('sequential_postfix'); $start = give_get_option('sequential_start', 1); $payments = new Give_Payments_Query(array('number' => 1, 'order' => 'DESC', 'orderby' => 'ID', 'output' => 'posts', 'fields' => 'ids')); $last_payment = $payments->get_payments(); if ($last_payment) { $number = give_get_payment_number($last_payment[0]); if (empty($number)) { $number = $prefix . $start . $postfix; } else { // Remove prefix and postfix $number = str_replace($prefix, '', $number); $number = str_replace($postfix, '', $number); // Ensure it's a whole number $number = intval($number); // Increment the payment number $number++; // Re-add the prefix and postfix $number = $prefix . $number . $postfix; } } else { $number = $prefix . $start . $postfix; } return apply_filters('give_get_next_payment_number', $number); }