get_row($sql, ARRAY_A);
$payment_data = array_merge($payment_data, $temp_data);
$payment_data['contact'] = $org_options['contact_email'];
return $payment_data;
}
add_filter('filter_hook_espresso_prepare_payment_data_for_gateways', 'espresso_prepare_payment_data_for_gateways');
/**
* function espresso_get_total_cost
* @global type $wpdb
* @param array $payment_data
* attendee_session
* @return array $payment_data
* total_cost
* quantity
*/
function espresso_get_total_cost($payment_data) {
global $wpdb;
$sql = "SELECT ac.cost, ac.quantity, dc.coupon_code_price, dc.use_percentage FROM " . EVENTS_ATTENDEE_TABLE . " a ";
$sql .= " JOIN " . EVENTS_ATTENDEE_COST_TABLE . " ac ON a.id=ac.attendee_id ";
$sql .= " LEFT JOIN " . EVENTS_DISCOUNT_CODES_TABLE . " dc ON a.coupon_code=dc.coupon_code ";
$sql .= " WHERE a.attendee_session='" . $payment_data['attendee_session'] . "'";
$tickets = $wpdb->get_results($sql, ARRAY_A);
$total_cost = 0;
$total_quantity = 0;
foreach ($tickets as $ticket) {
$total_cost += $ticket['quantity'] * $ticket['cost'];
$total_quantity += $ticket['quantity'];
}
if (!empty($tickets[0]['coupon_code_price'])) {
if ($tickets[0]['use_percentage'] == 'Y') {
$payment_data['total_cost'] = $total_cost * (1 - ($tickets[0]['coupon_code_price'] / 100));
} else {
$payment_data['total_cost'] = $total_cost - $tickets[0]['coupon_code_price'];
}
} else {
$payment_data['total_cost'] = $total_cost;
}
$payment_data['total_cost'] = number_format($payment_data['total_cost'], 2, '.', '');
$payment_data['quantity'] = $total_quantity;
return $payment_data;
}
add_filter('filter_hook_espresso_get_total_cost', 'espresso_get_total_cost');
/**
* function espresso_update_attendee_payment_status_in_db
* @global type $wpdb
* @param array $payment_data
* attendee_id set by function in individual gateway
* attendee_session set by filter_hook_espresso_prepare_payment_data_for_gateways
* total_cost set by filter_hook_espresso_get_total_cost
* the rest are set by gateway
* payment_status
* txn_type
* txn_id
* txn_details
*
* @return array $payment_data
* payment_date
*/
function espresso_update_attendee_payment_status_in_db($payment_data) {
global $wpdb;
$payment_data['payment_date'] = date(get_option('date_format'));
$sql = "UPDATE " . EVENTS_ATTENDEE_TABLE . " SET amount_pd = '" . $payment_data['total_cost'] . "' WHERE id ='" . $payment_data['attendee_id'] . "' ";
$wpdb->query($sql);
$sql = "UPDATE " . EVENTS_ATTENDEE_TABLE . " SET payment_status = '" . $payment_data['payment_status'] . "', txn_type = '" . $payment_data['txn_type'] . "', txn_id = '" . $payment_data['txn_id'] . "', payment_date ='" . $payment_data['payment_date'] . "', transaction_details = '" . $payment_data['txn_details'] . "' WHERE attendee_session ='" . $payment_data['attendee_session'] . "' ";
$wpdb->query($sql);
return $payment_data;
}
add_filter('filter_hook_espresso_update_attendee_payment_data_in_db', 'espresso_update_attendee_payment_status_in_db');
/**
* function espresso_prepare_event_link
* @param array $payment_data
* attendee_session
* @return array $payment_data
* event_link
*/
function espresso_prepare_event_link($payment_data) {
global $wpdb;
$sql = "SELECT ea.event_id, ed.event_name FROM " . EVENTS_ATTENDEE_TABLE . " ea";
$sql .= " JOIN " . EVENTS_DETAIL_TABLE . " ed ON ed.id=ea.event_id";
$sql .= " WHERE ea.attendee_session='" . $payment_data['attendee_session'] . "'";
$events = $wpdb->get_results($sql, OBJECT_K);
$payment_data['event_link'] = '';
foreach ($events as $event) {
$event_url = espresso_reg_url($event->event_id);
$payment_data['event_link'] .= '' . $event->event_name . '
';
}
return $payment_data;
}
add_filter('filter_hook_espresso_prepare_event_link', 'espresso_prepare_event_link');
function event_espresso_txn() {
global $wpdb, $org_options;
do_action('action_hook_espresso_log', __FILE__, __FUNCTION__, '');
$active_gateways = get_option('event_espresso_active_gateways', array());
if (empty($active_gateways)) {
$subject = __('Website Payment IPN Not Setup', 'event_espresso');
$body = sprintf(__('The IPN for %s at %s has not been properly setup and is not working. Date/time %s', 'event_espresso'), $org_options['organization'], home_url(), date('g:i A'));
wp_mail($org_options['contact_email'], $subject, $body);
return;
}
foreach ($active_gateways as $gateway => $path) {
event_espresso_require_gateway($gateway . "/init.php");
}
$payment_data['attendee_id'] = apply_filters('filter_hook_espresso_transactions_get_attendee_id', '');
if ($payment_data['attendee_id'] == "") {
echo "ID not supplied.";
} else {
$payment_data = apply_filters('filter_hook_espresso_prepare_payment_data_for_gateways', $payment_data);
$payment_data = apply_filters('filter_hook_espresso_get_total_cost', $payment_data);
$payment_data = apply_filters('filter_hook_espresso_prepare_event_link', $payment_data);
if(espresso_return_reg_id() == false || $payment_data['registration_id'] != espresso_return_reg_id()) die(__('There was a problem finding your Registration ID', 'event_espresso'));
$payment_data = apply_filters('filter_hook_espresso_transactions_get_payment_data', $payment_data);
espresso_log::singleton()->log(array('file' => __FILE__, 'function' => __FUNCTION__, 'status' => 'Payment for: '. $payment_data['lname'] . ', ' . $payment_data['fname'] . '|| registration id: ' . $payment_data['registration_id'] . '|| transaction details: ' . $payment_data['txn_details']));
$payment_data = apply_filters('filter_hook_espresso_update_attendee_payment_data_in_db', $payment_data);
do_action('action_hook_espresso_email_after_payment', $payment_data);
extract($payment_data);
if (file_exists(EVENT_ESPRESSO_TEMPLATE_DIR . "payment_overview.php")) {
require_once(EVENT_ESPRESSO_TEMPLATE_DIR . "payment_overview.php"); //This is the path to the template file if available
} else {
require_once(EVENT_ESPRESSO_PLUGINFULLPATH . "templates/payment_overview.php");
}
}
$_REQUEST['page_id'] = $org_options['return_url'];
ee_init_session();
}
function deal_with_ideal() {
if (!empty($_POST['bank_id'])) {
$active_gateways = get_option('event_espresso_active_gateways', array());
if (!empty($active_gateways['ideal'])) {
foreach ($active_gateways as $gateway => $path) {
event_espresso_require_gateway($gateway . "/init.php");
}
$payment_data['attendee_id'] = apply_filters('filter_hook_espresso_transactions_get_attendee_id', '');
espresso_process_ideal($payment_data);
}
}
}
add_action('wp_loaded', 'deal_with_ideal');
function espresso_email_after_payment($payment_data) {
global $org_options;
if ($payment_data['payment_status'] == 'Completed') {
event_espresso_send_payment_notification(array('attendee_id' => $payment_data['attendee_id'], 'registration_id' => $payment_data['registration_id']));
if ($org_options['email_before_payment'] == 'N') {
event_espresso_email_confirmations(array('session_id' => $payment_data['attendee_session'], 'send_admin_email' => 'true', 'send_attendee_email' => 'true'));
}
}
}
// Needed for WorldPay processing
if ( isset( $_POST[ 'name' ] ) && isset( $_POST[ 'MC_type'] ) && 'worldpay' == $_POST[ 'MC_type' ] ) {
$_POST['_name'] = $_POST['name'];
$_REQUEST['_name'] = $_POST['name'];
unset($_POST['name']);
unset($_REQUEST['name']);
}