public static function process_submission() { require_once 'gump.class.php'; $gump = new GUMP(); $_POST = $gump->sanitize($_POST); global $a; $a = AC::load_current_activity(); if (isset($_POST['waitlist-submit'])) { AC::generate_waitlist_fields(); require_once 'wp-content/themes/vetri-master/lib/ReCaptcha/autoload.php'; $recaptcha = new \ReCaptcha\ReCaptcha('6LendQoTAAAAABQzKPl_3sLPQQkTKMW4DBnIP37R', new \ReCaptcha\RequestMethod\Curl()); $resp = $recaptcha->verify($_POST['g-recaptcha-response'], $_SERVER['REMOTE_ADDR']); if (!$resp->isSuccess()) { AC::$errors['recaptcha'] = 'Please verify using the ReCaptcha widget'; return false; } } else { if (AC::is_active_timer_expired()) { AC::$errors[] = 'Your timer has expired. Please start over.'; AC::reset_all(); return false; } AC::generate_fields(); $step = $_POST['step']; foreach ($_POST['form'] as $k => $v) { $_SESSION['edgimo-reservation-form']['step-' . $step][$k] = $v; } } if (isset($_POST['activity-center-back'])) { $_SESSION['edgimo-reservation-form']['current-step']--; if (AC::get_current_step() === 1) { AC::reset_timer(); } return true; } $validation = array(); $filter = array(); foreach ($_POST['form'] as $field_name => $field_value) { if (isset(AC::$fields[$field_name]['validate'])) { $validation[$field_name] = AC::$fields[$field_name]['validate']; } if (isset(AC::$fields[$field_name]['filter'])) { $filter[$field_name] = AC::$fields[$field_name]['filter']; } } $gump->validation_rules($validation); $gump->filter_rules($filter); $validated_data = $gump->run($_POST['form']); if (isset($step) && $step == 1 && !isset($validated_data['terms'])) { AC::$errors['terms'] = 'You must agree to the terms of registration in order to register for an event. If you have questions about the terms, please feel free to contact us at <a href="mailto:' . $a->service_email . '">' . $a->service_email . '</a>'; return false; } if ($validated_data === false) { $temp = $gump->get_readable_errors(); $i = 0; foreach ($gump->validate($_POST['form'], $validation) as $error) { AC::$errors[$error['field']] = $temp[$i]; $i++; } return false; } if (isset($_POST['waitlist-submit'])) { $new_waitlist = wp_insert_post(array('post_name' => $validated_data['name'], 'post_title' => $validated_data['name'], 'post_type' => 'waitlist', 'post_status' => 'publish')); $meta = array('_waitlist_activity' => $validated_data['activity_id'], '_waitlist_created' => time(), '_waitlist_name' => $validated_data['name'], '_waitlist_desired_seats' => $validated_data['desired_seats'], '_waitlist_phone' => $validated_data['phone_1'] . $validated_data['phone_2'] . $validated_data['phone_3'], '_waitlist_email' => $validated_data['email'], '_waitlist_code' => md5(time() . rand() . $validated_data['name']), '_waitlist_redeemed' => 'false'); foreach ($meta as $k => $v) { add_post_meta($new_waitlist, $k, $v, true); } require_once 'wp-content/themes/vetri-master/lib/phpmailer/PHPMailerAutoload.php'; AC::send_admin_waitlist_email($new_waitlist); AC::send_waitlist_confirmation_email($new_waitlist); $_SESSION['edgimo-reservation-form']['waitlist-success'] = $new_waitlist; wp_redirect(AC::get_redirect_url()); exit; } switch ($step) { case 1: //check to see if the capacity went down after submitting registrant count if ($a->seats_available < AC::load_saved_data('number_of_registrants') && !AC::current_user_has_pending_reservation() && !AC::valid_waitlist_code()) { AC::$errors['number_of_registrants'] = 'The number of registrants you selected is no longer available. Please select again.'; return false; } $_SESSION['edgimo-reservation-form']['current-step'] = 2; //in case user clicked back using browser and not button, pending data will still exist. delete it if (AC::current_user_has_pending_reservation()) { AC::reset_timer(); } //by now any old pending data should be gone //always initiate a new timer when step 1 is submitted AC::init_timer(); break; case 2: $_SESSION['edgimo-reservation-form']['current-step'] = 3; break; case 3: $values = AC::get_all_final_values(); $result = AC::process_transaction($values); if ($result['success']) { $new_reservation = wp_insert_post(array('post_name' => $values['registrant_1_last_name'] . ', ' . $values['registrant_1_first_name'], 'post_title' => $values['registrant_1_last_name'] . ', ' . $values['registrant_1_first_name'], 'post_type' => 'reservation', 'post_status' => 'publish')); isset($values['donation']) ? $values['donation'] = $values['donation'] : ($values['donation'] = 0); $meta = array('_reservation_activity' => $a->ID, '_reservation_created' => time(), '_reservation_total' => AC::get_total(), '_reservation_fee' => $a->fee * $values['number_of_registrants'], '_reservation_gratuity' => AC::calculate_gratuity(), '_reservation_tax' => AC::calculate_tax(), '_reservation_donation' => $values['donation'], '_reservation_registrant_count' => $values['number_of_registrants'], '_reservation_optin' => $values['optin'], '_reservation_billing_first_name' => $values['billing_first_name'], '_reservation_billing_last_name' => $values['billing_last_name'], '_reservation_billing_address' => $values['billing_address'], '_reservation_billing_phone' => $values['billing_phone'], '_reservation_billing_city' => $values['billing_city'], '_reservation_billing_state' => $values['billing_state'], '_reservation_billing_zip' => $values['billing_zip'], '_reservation_transaction_id' => $result['RefNum'], '_reservation_auth_code' => $result['AuthCode'], '_reservation_card_type' => AC::card_type($values['cc_number']), '_reservation_last4' => $result['Last4']); $registrants = array(); $addons = array(); for ($i = 1; $i <= $values['number_of_registrants']; $i++) { $registrants[] = array('first_name' => $values['registrant_' . $i . '_first_name'], 'last_name' => $values['registrant_' . $i . '_last_name'], 'email' => $values['registrant_' . $i . '_email']); } $addon_fees = 0; foreach (AC::get_addons_in_cart() as $tax_status_group) { foreach ($tax_status_group as $addon) { $addons[] = array('title' => $a->addon_group[$addon['index']]['title'], 'cost' => $a->addon_group[$addon['index']]['cost'], 'quantity' => $addon['quantity']); $addon_fees += $addon['total']; } } $meta['_reservation_addon_fees'] = $addon_fees; if (!empty($addons)) { $meta['_reservation_addon_group'] = $addons; } $meta['_reservation_registrant_group'] = $registrants; foreach ($meta as $k => $v) { add_post_meta($new_reservation, $k, $v, true); } //if this was a waitlist code reservation, flag the waitlist as redeemed and set the meta if (AC::valid_waitlist_code()) { $w = AC::get_waitlist_from_code($_GET['v']); update_post_meta($w->ID, '_waitlist_redeemed', 'yes'); update_post_meta($w->ID, '_waitlist_reservation', $new_reservation); } if ($values['optin'] === 'yes') { $values['reservation_id'] = $new_reservation; //AC::add_to_mailchimp($values); } require_once 'wp-content/themes/vetri-master/lib/phpmailer/PHPMailerAutoload.php'; AC::send_confirmation_email($new_reservation); AC::send_admin_reservation_email($new_reservation); AC::reset_all(); $_SESSION['edgimo-reservation-form']['success'] = $new_reservation; wp_redirect(AC::get_redirect_url()); exit; } else { AC::$transaction_error = $result['message']; } break; } }