function event_espresso_add_attendees_to_db($event_id = NULL, $session_vars = NULL) { global $wpdb, $org_options, $espresso_premium; //print_r($session_vars); $count = $wpdb->get_col($wpdb->prepare("SELECT id FROM " . EVENTS_ATTENDEE_TABLE . " WHERE attendee_session=%s", $_SESSION['espresso_session']['id'])); if (!empty($count) && empty($_REQUEST['confirm_registration']) && is_null($session_vars)) { $_SESSION['espresso_session']['id'] = array(); ee_init_session(); } $data_source = $_POST; $att_data_source = $_POST; $multi_reg = false; static $attendee_number = 1; //using this var to keep track of the first attendee static $loop_number = 1; if (!is_null($event_id) && !is_null($session_vars)) { $data_source = $session_vars['data']; //event details, ie qty, price, start.. $att_data_source = $session_vars['event_attendees']; //event attendee info ie name, questions.... $multi_reg = true; } else { $event_id = $data_source['event_id']; } //echo '<p>$att_data_source = ';print_r( $att_data_source); echo '</p>'; static $temp_event_id = ''; // Will be used for multi events to // keep track of evant id change in the loop, // for recording event total cost for each group if ($temp_event_id == '' || $temp_event_id != $event_id) { $temp_event_id = $event_id; $event_change = 1; $total_cost = isset($data_source['cost']) ? $data_source['cost'] : 0; } else { $event_change = 0; $total_cost = 0; } // echo "<pre>", print_r($data_source), "</pre>"; //echo "<pre>", print_r($att_data_source), "</pre>"; // exit; $Organization = $org_options['organization']; $Organization_street1 = $org_options['organization_street1']; $Organization_street2 = $org_options['organization_street2']; $Organization_city = $org_options['organization_city']; $Organization_state = $org_options['organization_state']; $Organization_zip = $org_options['organization_zip']; $contact = $org_options['contact_email']; $contact_email = $org_options['contact_email']; $paypal_id = $org_options['paypal_id']; $paypal_cur = isset($org_options['currency_format']) ? $org_options['currency_format'] : ''; $return_url = $org_options['return_url']; $cancel_return = $org_options['cancel_return']; $notify_url = $org_options['notify_url']; $default_mail = $org_options['default_mail']; $conf_message = $org_options['message']; $email_before_payment = $org_options['email_before_payment']; $fname = isset($att_data_source['fname']) ? $att_data_source['fname'] : ''; $lname = isset($att_data_source['lname']) ? $att_data_source['lname'] : ''; $address = isset($att_data_source['address']) ? $att_data_source['address'] : ''; $address2 = isset($att_data_source['address2']) ? $att_data_source['address2'] : ''; $city = isset($att_data_source['city']) ? $att_data_source['city'] : ''; $state = isset($att_data_source['state']) ? $att_data_source['state'] : ''; $zip = isset($att_data_source['zip']) ? $att_data_source['zip'] : ''; $phone = isset($att_data_source['phone']) ? $att_data_source['phone'] : ''; $email = isset($att_data_source['email']) ? $att_data_source['email'] : ''; //$num_people = $data_source ['num_people']; $amount_pd = isset($data_source["event_cost"]) && $data_source["event_cost"] != '' ? $data_source["event_cost"] : 0.0; //echo $amount_pd; //return; //echo '<p>$amount_pd = '.$amount_pd.'</p>'; $questions = $wpdb->get_row("SELECT question_groups, event_meta FROM " . EVENTS_DETAIL_TABLE . " WHERE id = '" . $event_id . "'"); $event_meta = unserialize($questions->event_meta); $questions = unserialize($questions->question_groups); //echo '<p>$data_source[price_select] = '.$data_source['price_select'].'</p>'; //$payment = $data_source['payment']; //Figure out if the person has registered using a price selection if ($multi_reg) { $event_cost = $_SESSION['espresso_session']['grand_total']; $amount_pd = $attendee_number == 1 ? $event_cost : 0.0; $coupon_code = $attendee_number == 1 ? $_SESSION['espresso_session']['coupon_code'] : ''; $price_type = isset($data_source['price_type']) ? $data_source['price_type'] : espresso_ticket_information(array('type' => 'ticket', 'price_option' => $data_source['price_id'])); $attendee_number++; } elseif (isset($data_source['price_select']) && $data_source['price_select'] == true) { $price_options = explode('|', $data_source['price_option'], 2); $price_id = $price_options[0]; $price_type = $price_options[1]; $event_cost = event_espresso_get_final_price($price_id, $event_id); /* echo '$event_id = '.$event_id.'<br />'; echo '$price_id = '.$price_id.'<br />'; echo '$event_cost = '.$event_cost; return; */ } else { $event_cost = isset($data_source['price_id']) ? event_espresso_get_final_price($data_source['price_id'], $event_id) : 0.0; $coupon_code = ''; $price_type = isset($data_source['price_id']) ? espresso_ticket_information(array('type' => 'ticket', 'price_option' => $data_source['price_id'])) : ''; } //Display the confirmation page if (!empty($data_source['confirm_registration'])) { $registration_id = $data_source['registration_id']; echo espresso_confirm_registration($registration_id); return; } //Check to see if the registration id already exists $incomplete_filter = !$multi_reg ? " AND payment_status ='Incomplete'" : ''; $check_sql = $wpdb->get_results("SELECT attendee_session, id, registration_id FROM " . EVENTS_ATTENDEE_TABLE . " WHERE attendee_session ='" . $_SESSION['espresso_session']['id'] . "' AND event_id ='" . $event_id . "' {$incomplete_filter}"); $num_rows = $wpdb->num_rows; $registration_id = empty($wpdb->last_result[0]->registration_id) ? $registration_id = uniqid('', true) : $wpdb->last_result[0]->registration_id; $txn_type = ""; if (isset($data_source['admin'])) { $payment_status = "Completed"; $payment = "Admin"; $txn_type = __('Added by Admin', 'event_espresso'); $payment_date = date("m-d-Y"); $amount_pd = $data_source["event_cost"] == '' ? 0.0 : $data_source["event_cost"]; $registration_id = uniqid('', true); $_SESSION['espresso_session']['id'] = uniqid('', true); } else { if ($org_options['use_captcha'] == 'Y' && !$multi_reg && !is_user_logged_in()) { //Recaptcha portion //require_once('includes/recaptchalib.php'); if (!function_exists('recaptcha_check_answer')) { require_once EVENT_ESPRESSO_PLUGINFULLPATH . 'includes/recaptchalib.php'; } $resp = recaptcha_check_answer($org_options['recaptcha_privatekey'], $_SERVER["REMOTE_ADDR"], $data_source["recaptcha_challenge_field"], $data_source["recaptcha_response_field"]); if (!$resp->is_valid) { echo '<div class="attention-icon"><p class="event_espresso_attention"><strong>' . __('Sorry, you did not enter the correct anti-spam phrase. Please click your browser\'s back button and try again.', 'event_espresso') . '</strong></p></div>'; return; } } //print_r( $event_meta); $default_payment_status = $event_meta['default_payment_status'] != '' && $org_options['default_payment_status'] != $event_meta['default_payment_status'] ? $event_meta['default_payment_status'] : $org_options['default_payment_status']; $payment_status = $multi_reg && $data_source['cost'] == 0 ? "Completed" : $default_payment_status; $payment = ''; } $times_sql = "SELECT ese.start_time, ese.end_time, e.start_date, e.end_date "; $times_sql .= "FROM " . EVENTS_START_END_TABLE . " ese "; $times_sql .= "LEFT JOIN " . EVENTS_DETAIL_TABLE . " e ON ese.event_id = e.id WHERE "; if (!empty($data_source['start_time_id'])) { $times_sql .= "ese.id='" . $data_source['start_time_id'] . "' AND "; } $times_sql .= "e.id='" . $event_id . "' "; $times = $wpdb->get_results($times_sql); foreach ($times as $time) { $start_time = $time->start_time; $end_time = $time->end_time; $start_date = $time->start_date; $end_date = $time->end_date; } //If we are using the number of attendees dropdown, add that number to the DB //echo $data_source['espresso_addtl_limit_dd']; if (isset($data_source['espresso_addtl_limit_dd'])) { $num_people = $data_source['num_people']; } if (isset($event_meta['additional_attendee_reg_info']) && $event_meta['additional_attendee_reg_info'] == 1) { $num_people = $data_source['num_people']; } else { $num_people = 1; } $start_time = empty($start_time) ? '' : $start_time; $end_time = empty($end_time) ? '' : $end_time; $start_date = empty($start_date) ? '' : $start_date; $end_date = empty($end_date) ? '' : $end_date; $organization_name = empty($organization_name) ? '' : $organization_name; $country_id = empty($country_id) ? '' : $country_id; $payment_date = empty($payment_date) ? '' : $payment_date; $coupon_code = empty($coupon_code) ? '' : $coupon_code; $sql = array('registration_id' => $registration_id, 'attendee_session' => $_SESSION['espresso_session']['id'], 'lname' => $lname, 'fname' => $fname, 'address' => $address, 'address2' => $address2, 'city' => $city, 'state' => $state, 'zip' => $zip, 'email' => $email, 'phone' => $phone, 'payment' => $payment, 'amount_pd' => $amount_pd, 'txn_type' => $txn_type, 'coupon_code' => $coupon_code, 'event_time' => $start_time, 'end_time' => $end_time, 'start_date' => $start_date, 'end_date' => $end_date, 'price_option' => $price_type, 'organization_name' => $organization_name, 'country_id' => $country_id, 'payment_status' => $payment_status, 'payment_date' => $payment_date, 'event_id' => $event_id, 'quantity' => $num_people); $sql_data = array('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%d', '%d'); //Debugging output /* echo 'Debug: <br />'; print_r($sql); echo '<br />'; print 'Number of vars: ' . count ($sql); echo '<br />'; print 'Number of cols: ' . count($sql_data); */ if ($num_rows > 0 && $loop_number == 1) { if (!isset($data_source['admin'])) { /* * Added for seating chart addon */ $tmp_session = $_SESSION['espresso_session']['id']; $rem_attendee_ids = $wpdb->get_results(" select t1.id, t1.registration_id FROM " . EVENTS_ATTENDEE_TABLE . " t1 WHERE t1.attendee_session ='" . $_SESSION['espresso_session']['id'] . "' {$incomplete_filter} "); foreach ($rem_attendee_ids as $v) { if (defined('ESPRESSO_SEATING_CHART')) { $wpdb->query("delete from " . EVENTS_SEATING_CHART_EVENT_SEAT_TABLE . " where attendee_id = " . $v->id); } } /* * End */ $wpdb->query(" DELETE t1, t2 FROM " . EVENTS_ATTENDEE_TABLE . " t1 JOIN " . EVENTS_ANSWER_TABLE . " t2 on t1.id = t2.attendee_id WHERE t1.attendee_session ='" . $_SESSION['espresso_session']['id'] . "' {$incomplete_filter} "); } //Added by Imon // First delete attempt might fail if there is no data in answer table. So, second attempt without joining answer table is taken bellow - $wpdb->query(" DELETE t1 FROM " . EVENTS_ATTENDEE_TABLE . " t1 WHERE t1.attendee_session ='" . $_SESSION['espresso_session']['id'] . "' {$incomplete_filter} "); // Clean up any attendee information from attendee_cost table where attendee is not available in attendee table event_espresso_cleanup_multi_event_registration_id_group_data(); event_espresso_cleanup_attendee_cost_data(); } $loop_number++; //Add new or updated data if (!$wpdb->insert(EVENTS_ATTENDEE_TABLE, $sql, $sql_data)) { $error = true; } $attendee_id = $wpdb->insert_id; /* * Added for seating chart addon */ $booking_id = 0; if (defined('ESPRESSO_SEATING_CHART')) { if (seating_chart::check_event_has_seating_chart($event_id) !== false) { if (isset($_POST['seat_id'])) { $booking_id = seating_chart::parse_booking_info($_POST['seat_id']); if ($booking_id > 0) { seating_chart::confirm_a_seat($booking_id, $attendee_id); } } } } //Add a record for the primary attendee $sql = array('attendee_id' => $attendee_id, 'meta_key' => 'primary_attendee', 'meta_value' => 1); $sql_data = array('%s', '%s', '%s'); //Debugging output /* echo 'Debug: <br />'; print_r($sql); echo '<br />'; print 'Number of vars: ' . count ($sql); echo '<br />'; print 'Number of cols: ' . count($sql_data); */ if (!$wpdb->insert(EVENTS_ATTENDEE_META_TABLE, $sql, $sql_data)) { $error = true; } /** * Adding attenddee specific cost to events_attendee_cost table */ if (!isset($data_source['admin'])) { if (isset($att_data_source['price_id'])) { $attendee_price_id = $att_data_source['price_id']; $events_prices = $wpdb->get_row("select * from " . EVENTS_PRICES_TABLE . " where id = {$attendee_price_id} "); } elseif (isset($data_source['price_select']) && $data_source['price_select'] == true) { $price_options = explode('|', $data_source['price_option'], 2); $attendee_price_id = $price_options[0]; $events_prices = $wpdb->get_row("select * from " . EVENTS_PRICES_TABLE . " where id = {$attendee_price_id} "); } else { $events_prices = $wpdb->get_row("select * from " . EVENTS_PRICES_TABLE . " where event_id = {$event_id}"); $attendee_price_id = $events_prices->id; } /* * Added for seating chart add-on * If a seat was selected then price of that seating will be used instead of event price */ $attendee_quantity = 1; if (isset($data_source['seat_id'])) { $attendee_cost = seating_chart::get_purchase_price($booking_id); } else { $attendee_cost = event_espresso_get_final_price($attendee_price_id, $event_id); if (isset($data_source['num_people'])) { $attendee_quantity = $data_source['num_people']; } } } else { /* echo '$data_source[\'event_cost\'] = '.$data_source['event_cost']; return; */ $attendee_quantity = 1; $attendee_cost = $data_source['event_cost']; } $attendee_cost_data = array("attendee_id" => $attendee_id, "quantity" => $attendee_quantity, "cost" => $attendee_cost); /* echo '$attendee_cost_data = '; print_r($attendee_cost_data); return; */ $wpdb->insert(EVENTS_ATTENDEE_COST_TABLE, $attendee_cost_data); /** * End */ if (get_option('event_mailchimp_active') == 'true' && $espresso_premium == true) { MailChimpController::list_subscribe($event_id, $attendee_id, $fname, $lname, $email); } //Since main attendee and additional attendees may have different questions, //$attendee_number check for 2 because is it statically set at 1 first and is incremented for the primary attendee above, hence 2 $questions = $attendee_number > 2 && isset($event_meta['add_attendee_question_groups']) ? $event_meta['add_attendee_question_groups'] : $questions; add_attendee_questions($questions, $registration_id, $attendee_id, array('session_vars' => $att_data_source)); //Add additional attendees to the database if ($event_meta['additional_attendee_reg_info'] == 1) { if (!empty($_REQUEST['num_people']) && $_REQUEST['num_people'] > 1) { } } else { $questions = $event_meta['add_attendee_question_groups']; //Debug //echo "<pre>".print_r($questions,true)."</pre>"; if (isset($att_data_source['x_attendee_fname'])) { $amount_pd = 0.0; //additional attendee can't hold this info foreach ($att_data_source['x_attendee_fname'] as $k => $v) { if (trim($v) != '' && trim($att_data_source['x_attendee_lname'][$k]) != '') { /* * Added for seating chart addon */ $seat_check = true; $x_booking_id = 0; if (defined('ESPRESSO_SEATING_CHART')) { if (seating_chart::check_event_has_seating_chart($event_id) !== false) { if (!isset($att_data_source['x_seat_id'][$k]) || trim($att_data_source['x_seat_id'][$k]) == '') { $seat_check = false; } else { $x_booking_id = seating_chart::parse_booking_info($att_data_source['x_seat_id'][$k]); if ($x_booking_id > 0) { $seat_check = true; } else { $seat_check = false; //Keeps the system from adding an additional attndee if no seat is selected } } } } if ($seat_check) { /* * End */ $sql_a = array('registration_id' => $registration_id, 'attendee_session' => $_SESSION['espresso_session']['id'], 'lname' => $att_data_source['x_attendee_lname'][$k], 'fname' => $v, 'email' => $att_data_source['x_attendee_email'][$k], 'address' => empty($att_data_source['x_attendee_address'][$k]) ? '' : $att_data_source['x_attendee_address'][$k], 'address2' => empty($att_data_source['x_attendee_address2'][$k]) ? '' : $att_data_source['x_attendee_address2'][$k], 'city' => empty($att_data_source['x_attendee_city'][$k]) ? '' : $att_data_source['x_attendee_city'][$k], 'state' => empty($att_data_source['x_attendee_state'][$k]) ? '' : $att_data_source['x_attendee_state'][$k], 'zip' => empty($att_data_source['x_attendee_zip'][$k]) ? '' : $att_data_source['x_attendee_zip'][$k], 'phone' => empty($att_data_source['x_attendee_phone'][$k]) ? '' : $att_data_source['x_attendee_phone'][$k], 'payment' => $payment, 'amount_pd' => $amount_pd, 'event_time' => $start_time, 'end_time' => $end_time, 'start_date' => $start_date, 'end_date' => $end_date, 'price_option' => $price_type, 'organization_name' => $organization_name, 'country_id' => $country_id, 'payment_status' => $payment_status, 'payment_date' => $payment_date, 'event_id' => $event_id, 'quantity' => $num_people); $sql_data_a = array('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%d', '%d'); $wpdb->insert(EVENTS_ATTENDEE_TABLE, $sql_a, $sql_data_a); //Added by Imon $ext_attendee_id = $wpdb->insert_id; $mailchimp_attendee_id = $ext_attendee_id; /** * Adding attenddee specific cost to events_attendee cost table */ $attendee_cost_data = array("attendee_id" => $ext_attendee_id, "quantity" => $attendee_quantity, "cost" => $attendee_cost); $wpdb->insert(EVENTS_ATTENDEE_COST_TABLE, $attendee_cost_data); /** * End */ if (get_option('event_mailchimp_active') == 'true' && $espresso_premium == true) { MailChimpController::list_subscribe($event_id, $mailchimp_attendee_id, $v, $att_data_source['x_attendee_lname'][$k], $att_data_source['x_attendee_email'][$k]); } //Added by Imon $ext_att_data_source = array('registration_id' => $registration_id, 'attendee_session' => $_SESSION['espresso_session']['id'], 'lname' => $att_data_source['x_attendee_lname'][$k], 'fname' => $v, 'email' => $att_data_source['x_attendee_email'][$k], 'address' => empty($att_data_source['x_attendee_address'][$k]) ? '' : $att_data_source['x_attendee_address'][$k], 'address2' => empty($att_data_source['x_attendee_address2'][$k]) ? '' : $att_data_source['x_attendee_address2'][$k], 'city' => empty($att_data_source['x_attendee_city'][$k]) ? '' : $att_data_source['x_attendee_city'][$k], 'state' => empty($att_data_source['x_attendee_state'][$k]) ? '' : $att_data_source['x_attendee_state'][$k], 'zip' => empty($att_data_source['x_attendee_zip'][$k]) ? '' : $att_data_source['x_attendee_zip'][$k], 'phone' => empty($att_data_source['x_attendee_phone'][$k]) ? '' : $att_data_source['x_attendee_phone'][$k], 'payment' => $payment, 'amount_pd' => $amount_pd, 'event_time' => $start_time, 'end_time' => $end_time, 'start_date' => $start_date, 'end_date' => $end_date, 'price_option' => $price_type, 'organization_name' => $organization_name, 'country_id' => $country_id, 'payment_status' => $payment_status, 'payment_date' => $payment_date, 'event_id' => $event_id, 'quantity' => $num_people); $questions_in = ''; //Debug //echo "<pre questions - >".print_r($questions,true)."</pre>"; if (!is_array($questions) && !empty($questions)) { $questions = unserialize($questions); } foreach ($questions as $g_id) { $questions_in .= $g_id . ','; } $questions_in = substr($questions_in, 0, -1); $questions_list = $wpdb->get_results("SELECT q.*, qg.group_name\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tFROM " . EVENTS_QUESTION_TABLE . " q\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tJOIN " . EVENTS_QST_GROUP_REL_TABLE . " qgr\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ton q.id = qgr.question_id\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tJOIN " . EVENTS_QST_GROUP_TABLE . " qg\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ton qg.id = qgr.group_id\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tWHERE qgr.group_id in (" . $questions_in . ") ORDER BY q.id ASC"); foreach ($questions_list as $question_list) { if ($question_list->system_name != '') { $ext_att_data_source[$question_list->system_name] = $att_data_source['x_attendee_' . $question_list->system_name][$k]; } else { $ext_att_data_source[$question_list->question_type . '_' . $question_list->id] = $att_data_source['x_attendee_' . $question_list->question_type . '_' . $question_list->id][$k]; } } echo add_attendee_questions($questions, $registration_id, $ext_attendee_id, array('session_vars' => $ext_att_data_source)); /* * Added for seating chart addon */ } if (defined('ESPRESSO_SEATING_CHART')) { if (seating_chart::check_event_has_seating_chart($event_id) !== false && $x_booking_id > 0) { seating_chart::confirm_a_seat($x_booking_id, $ext_attendee_id); } } /* * End */ } } } } //Add member data if needed if (get_option('events_members_active') == 'true') { require_once EVENT_ESPRESSO_MEMBERS_DIR . "member_functions.php"; //Load Members functions require EVENT_ESPRESSO_MEMBERS_DIR . "user_vars.php"; //Load Members functions if ($userid != 0) { event_espresso_add_user_to_event($event_id, $userid, $attendee_id); } } //This shows the payment page if (isset($data_source['admin'])) { return $attendee_id; } if (!$multi_reg) { return events_payment_page($attendee_id); } return $registration_id; }
function events_payment_page($attendee_id, $price_id = 0, $coupon_code = '', $groupon_code = '') { global $wpdb, $org_options, $simpleMath; $today = date("m-d-Y"); $num_people = 0; $Organization = $org_options['organization']; $Organization_street1 = $org_options['organization_street1']; $Organization_street2 = $org_options['organization_street2']; $Organization_city = $org_options['organization_city']; $Organization_state = $org_options['organization_state']; $Organization_zip = $org_options['organization_zip']; $contact = $org_options['contact_email']; $registrar = $org_options['contact_email']; $currency_format = getCountryFullData($org_options['organization_country']); $message = $org_options['message']; $return_url = $org_options['return_url']; $cancel_return = $org_options['cancel_return']; $notify_url = $org_options['notify_url']; $event_page_id = $org_options['event_page_id']; $attendees = $wpdb->get_results("SELECT * FROM " . EVENTS_ATTENDEE_TABLE . " WHERE id ='" . $attendee_id . "'"); foreach ($attendees as $attendee) { //$attendee_id = $attendee->id; $attendee_last = $attendee->lname; $attendee_first = $attendee->fname; $attendee_address = $attendee->address; $attendee_address2 = $attendee->address2; $attendee_city = $attendee->city; $attendee_state = $attendee->state; $attendee_zip = $attendee->zip; $attendee_email = $attendee->email; //$attendee_organization_name = $attendee->organization_name; //$attendee_country = $attendee->country_id; $phone = $attendee->phone; $attendee_phone = $attendee->phone; $date = $attendee->date; $quantity = $attendee->quantity; $payment_status = $attendee->payment_status; $txn_type = $attendee->txn_type; //$event_cost = $attendee->amount_pd; $payment_date = $attendee->payment_date; $event_id = $attendee->event_id; $registration_id = $attendee->registration_id; } //$event_meta = event_espresso_get_event_meta($event_id); //Get the questions for the attendee $questions = $wpdb->get_results("SELECT ea.answer, eq.question\n\t\t\t\t\t\tFROM " . EVENTS_ANSWER_TABLE . " ea\n\t\t\t\t\t\tLEFT JOIN " . EVENTS_QUESTION_TABLE . " eq ON eq.id = ea.question_id\n\t\t\t\t\t\tWHERE ea.attendee_id = '" . $attendee_id . "' and eq.admin_only = 'N' ORDER BY eq.sequence asc "); //echo $wpdb->last_query; $display_questions = ''; foreach ($questions as $question) { $display_questions .= '<p>' . $question->question . ':<br /> ' . str_replace(',', '<br />', $question->answer) . '</p>'; } $num_peoplea = $wpdb->get_results("SELECT COUNT(registration_id) FROM " . EVENTS_ATTENDEE_TABLE . " WHERE registration_id ='" . $registration_id . "'", ARRAY_N); $num_people = $num_peoplea[0][0]; //If we are using the number of attendees dropdown, and if ($quantity > 1) { $num_people = $quantity; } $events = $wpdb->get_results("SELECT * FROM " . EVENTS_DETAIL_TABLE . " WHERE id ='" . $event_id . "'"); foreach ($events as $event) { //$event_id = $event->id; $event_name = stripslashes_deep($event->event_name); $event_desc = stripslashes_deep($event->event_desc); $event_description = stripslashes_deep($event->event_desc); $event_identifier = $event->event_identifier; $send_mail = $event->send_mail; $active = $event->is_active; $conf_mail = $event->conf_mail; //$alt_email = $event->alt_email; //This is used to get the alternate email address that a payment can be made to using PayPal if (function_exists('event_espresso_coupon_payment_page')) { $use_coupon_code = $event->use_coupon_code; } if (function_exists('event_espresso_groupon_payment_page')) { $use_groupon_code = $event->use_groupon_code; } } $attendee_name = stripslashes_deep($attendee_first . ' ' . $attendee_last); //Figure out if the person has registered using a price selection if (!empty($_REQUEST['price_select']) && $_REQUEST['price_select'] == true) { $price_options = explode('|', $_REQUEST['price_option'], 2); $price_id = $price_options[0]; $price_type = $price_options[1]; $p_id = $price_id; $event_cost = event_espresso_get_final_price($price_id, $event_id); } elseif ($price_id > 0) { $event_cost = event_espresso_get_final_price($price_id, $event_id); $p_id = $price_id; } else { //$event_cost = $_POST['event_cost']; $event_cost = event_espresso_get_final_price($_POST['price_id'], $event_id); $p_id = $_POST['price_id']; } //Test the early discount amount to make sure we are getting the right amount //print_r(early_discount_amount($event_id, $event_cost)); $event_price = number_format($event_cost, 2, '.', ''); $event_price_x_attendees = number_format($event_cost * $num_people, 2, '.', ''); $event_original_cost = number_format($simpleMath->multiply($event_cost, $num_people), 2, '.', ''); /* * Added for seating chart addon */ /* * This code block overrides the cost using seating chart add-on price */ if (defined('ESPRESSO_SEATING_CHART')) { if (seating_chart::check_event_has_seating_chart($event_id) !== false) { $sc_cost_row = $wpdb->get_row("select sum(sces.purchase_price) as purchase_price from " . EVENTS_SEATING_CHART_EVENT_SEAT_TABLE . " sces inner join " . EVENTS_ATTENDEE_TABLE . " ea on sces.attendee_id = ea.id where ea.registration_id = '{$registration_id}'"); if ($sc_cost_row !== NULL) { $event_cost = number_format($sc_cost_row->purchase_price, 2, '.', ''); $event_original_cost = $event_cost; $event_price_x_attendees = $event_cost; } } } /* * End seating chart addon */ if (function_exists('event_espresso_coupon_payment_page') && (!empty($_REQUEST['coupon_code']) || !empty($coupon_code))) { $event_cost = event_espresso_coupon_payment_page($use_coupon_code, $event_id, $event_original_cost, $attendee_id, $num_people); /* * at this point , the $event_cost is correct * The next line divided by the number of people and reassigned it to the same $even_cost var, making the event cost less * I renamed it to another variable */ $event_price_x_attendees = number_format($event_cost, 2, '.', ''); $coupon_code = $_REQUEST['coupon_code']; } else { if (function_exists('event_espresso_groupon_payment_page') && ($_REQUEST['groupon_code'] != '' || $coupon_code != '')) { $event_cost = event_espresso_groupon_payment_page($use_groupon_code, $event_id, $event_original_cost, $attendee_id); $groupon_code = $_REQUEST['groupon_code']; } else { $event_cost = $event_original_cost; } } if ($num_people != 0) { $event_individual_cost = number_format($event_cost / $num_people, 2, '.', ''); } $event_discount_label = $event_original_cost > $event_cost ? ' (' . __('Discount of ', 'event_espresso') . $org_options['currency_symbol'] . number_format($event_original_cost - $event_cost, 2, ".", ",") . __(' applied', 'event_espresso') . ')' : ''; if ($event_cost == '0.00') { $event_cost = '0.00'; $payment_status = 'Completed'; $sql = array('amount_pd' => $event_cost, 'payment_status' => $payment_status, 'payment_date' => $today); $sql_data = array('%s', '%s', '%s'); } else { $sql = array('amount_pd' => $event_cost, 'payment_status' => $payment_status); $sql_data = array('%s', '%s'); } //Add the cost and payment status to the attendee $update_id = array('id' => $attendee_id); $wpdb->update(EVENTS_ATTENDEE_TABLE, $sql, $update_id, $sql_data, array('%d')); //If this is a group registration, we need to make sure all attendees have the same payment status if (espresso_count_attendees_for_registration($attendee_id) > 1) { $wpdb->query("UPDATE " . EVENTS_ATTENDEE_TABLE . " SET payment_status = '{$payment_status}' WHERE registration_id ='" . $registration_id . "'"); } $display_cost = $event_cost != "0.00" ? $org_options['currency_symbol'] . $event_individual_cost : __('Free', 'event_espresso'); //Pull in the template if (file_exists(EVENT_ESPRESSO_TEMPLATE_DIR . "confirmation_display.php")) { require_once EVENT_ESPRESSO_TEMPLATE_DIR . "confirmation_display.php"; //This is the path to the template file if available } else { require_once EVENT_ESPRESSO_PLUGINFULLPATH . "templates/confirmation_display.php"; } }
function event_espresso_calculate_total($update_section = FALSE, $mer = TRUE) { do_action('action_hook_espresso_log', __FILE__, __FUNCTION__, ''); //print_r($_POST); $events_in_session = isset($_SESSION['espresso_session']['events_in_session']) ? $_SESSION['espresso_session']['events_in_session'] : event_espresso_clear_session(TRUE); $grand_total = 0.0; $coupon_events = array(); $coupon_notifications = ''; $coupon_errors = ''; $groupon_events = array(); $groupon_notifications = ''; $groupon_errors = ''; $notifications = ''; if (is_array($events_in_session)) { $event_total_cost = 0; foreach ($events_in_session as $event_id => $event) { $event_id = absint($event_id); if ($event_id) { $event_cost = 0; $event_individual_cost[$event_id] = 0; $attendee_quantity = 0; $coupon_results = array('event_cost' => 0, 'valid' => FALSE, 'error' => '', 'msg' => ''); $groupon_results = array('event_cost' => 0, 'valid' => FALSE, 'error' => '', 'msg' => ''); $use_coupon_code = isset($_POST['use_coupon'][$event_id]) ? $_POST['use_coupon'][$event_id] : 'N'; //only bother processing coupon codes if G (only globals), Y (gloabl and specific ones), or A (absolutely all) if ($use_coupon_code != 'N') { add_filter('filter_hook_espresso_coupon_results', 'espresso_filter_coupon_results', 10, 3); } $use_groupon_code = isset($_POST['use_groupon'][$event_id]) ? $_POST['use_groupon'][$event_id] : 'N'; if ($use_groupon_code == 'Y') { add_filter('filter_hook_espresso_groupon_results', 'espresso_filter_groupon_results', 10, 3); } $start_time_id = ''; if (array_key_exists('start_time_id', $_POST) && array_key_exists($event_id, $_POST['start_time_id'])) { $start_time_id = $_POST['start_time_id'][$event_id]; } /* * two ways the price id comes this way * - from a dropdown >> price_id[event_id][price_id] * - from a radio >> price_id[event_id] with a value of price_id */ if (isset($_POST['price_id'][$event_id])) { $event_price = $_POST['price_id'][$event_id]; } else { $event_price = FALSE; $notifications = __('An error occured, a valid price is required.', 'event_espresso'); } //echo '<h4>event_cost : ' . $event_individual_cost[$event_id] . ' <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4>'; if (is_array($event_price)) { foreach ($event_price as $_price_id => $qty) { $attendee_quantity = absint($qty); if ($attendee_quantity > 0) { // Process coupons $coupon_results['event_cost'] = event_espresso_get_final_price($_price_id, $event_id); $coupon_results = apply_filters('filter_hook_espresso_coupon_results', $coupon_results, $event_id, $mer); $coupon_notifications = apply_filters('filter_hook_espresso_cart_modifier_strings', $coupon_notifications, $coupon_results['msg']); $coupon_errors = apply_filters('filter_hook_espresso_cart_modifier_strings', $coupon_errors, $coupon_results['error']); if ($coupon_results['valid']) { $coupon_events = apply_filters('filter_hook_espresso_cart_coupon_events_array', $coupon_events, $event['event_name']); } $event_cost = $coupon_results['event_cost']; if (function_exists('event_espresso_groupon_payment_page') && isset($_POST['event_espresso_groupon_code'])) { // Process Groupons $groupon_results['event_cost'] = $event_cost; $groupon_results = apply_filters('filter_hook_espresso_groupon_results', $groupon_results, $event_id, $mer); $groupon_notifications = apply_filters('filter_hook_espresso_cart_modifier_strings', $groupon_notifications, $groupon_results['msg']); $groupon_errors = apply_filters('filter_hook_espresso_cart_modifier_strings', $groupon_errors, $groupon_results['error']); if ($groupon_results['valid']) { $groupon_events = apply_filters('filter_hook_espresso_cart_groupon_events_array', $groupon_events, $event['event_name']); } //printr( $groupon_results, '$groupon_results <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' ); $event_cost = $groupon_results['event_cost']; } // now sum up costs so far $event_individual_cost[$event_id] += number_format($event_cost * $attendee_quantity, 2, '.', ''); do_action('action_hook_espresso_log', __FILE__, __FUNCTION__, 'line ' . __LINE__ . ': event_cost=' . $event_cost); } } } else { if ($event_price !== FALSE) { // Process coupons $coupon_results['event_cost'] = event_espresso_get_final_price($event_price, $event_id); $coupon_results = apply_filters('filter_hook_espresso_coupon_results', $coupon_results, $event_id, $mer); $coupon_notifications = apply_filters('filter_hook_espresso_cart_modifier_strings', $coupon_notifications, $coupon_results['msg']); $coupon_errors = apply_filters('filter_hook_espresso_cart_modifier_strings', $coupon_errors, $coupon_results['error']); if ($coupon_results['valid']) { $coupon_events = apply_filters('filter_hook_espresso_cart_coupon_events_array', $coupon_events, $event['event_name']); } $event_cost = $coupon_results['event_cost']; if (function_exists('event_espresso_groupon_payment_page') && isset($_POST['event_espresso_groupon_code'])) { // Process groupons $groupon_results['event_cost'] = $event_cost; $groupon_results = apply_filters('filter_hook_espresso_groupon_results', $groupon_results, $event_id, $mer); $groupon_notifications = apply_filters('filter_hook_espresso_cart_modifier_strings', $groupon_notifications, $groupon_results['msg']); $groupon_errors = apply_filters('filter_hook_espresso_cart_modifier_strings', $groupon_errors, $groupon_results['error']); if ($groupon_results['valid']) { $groupon_events = apply_filters('filter_hook_espresso_cart_groupon_events_array', $groupon_events, $event['event_name']); } //printr( $groupon_results, '$groupon_results <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' ); $event_cost = $groupon_results['event_cost']; } // now sum up costs so far $event_individual_cost[$event_id] += number_format($event_cost, 2, '.', ''); //echo '<h4>event_cost : ' . $event_individual_cost[$event_id] . ' <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4>'; do_action('action_hook_espresso_log', __FILE__, __FUNCTION__, 'line ' . __LINE__ . ': event_cost=' . $event_cost); } } $_SESSION['espresso_session']['events_in_session'][$event_id]['cost'] = $event_individual_cost[$event_id]; //echo '<h4>event_cost : ' . $event_individual_cost[$event_id] . ' <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4>'; $event_total_cost += $event_individual_cost[$event_id]; } } $grand_total = number_format($event_total_cost, 2, '.', ''); //echo '<h4>$grand_total : ' . $grand_total . ' <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4>'; $_SESSION['espresso_session']['pre_discount_total'] = $grand_total; $_SESSION['espresso_session']['grand_total'] = $grand_total; event_espresso_update_item_in_session('details'); } // echo '$coupon_notifications = ' . $coupon_notifications . '<br/>'; // echo '$coupon_errors = ' . $coupon_errors . '<br/>'; // echo '$groupon_notifications = ' . $groupon_notifications . '<br/>'; // echo '$groupon_errors = ' . $groupon_errors . '<br/>'; $coupon_events = array_unique($coupon_events); $coupon_count = count($coupon_events); if (!strpos($coupon_notifications, 'event_espresso_invalid_coupon') && $coupon_count > 0) { $events = implode($coupon_events, '<br/> - '); $coupon_notifications .= ' - ' . $events . '</p>'; $coupon_errors = FALSE; } $groupon_events = array_unique($groupon_events); $groupon_count = count($groupon_events); if (!strpos($groupon_notifications, 'event_espresso_invalid_groupon') && $groupon_count > 0) { $events = implode($groupon_events, '<br/> - '); $groupon_notifications .= ' - ' . $events . '</p>'; $groupon_errors = FALSE; } // echo '$coupon_notifications = ' . $coupon_notifications . '<br/>'; // echo '$coupon_errors = ' . $coupon_errors . '<br/>'; // echo '$groupon_notifications = ' . $groupon_notifications . '<br/>'; // echo '$groupon_errors = ' . $groupon_errors . '<br/>'; // add space between $coupon_notifications and $coupon_errors ( if any $coupon_errors exist ) $coupon_notifications = $coupon_count && $coupon_errors ? $coupon_notifications . '<br/>' : $coupon_notifications; // combine $coupon_notifications & $coupon_errors $coupon_notifications .= $coupon_errors; // add space between $coupon_notifications and $groupon_notifications ( if any $groupon_notifications exist ) $coupon_notifications = ($coupon_count || $coupon_errors) && ($groupon_count || $groupon_errors) ? $coupon_notifications . '<br/>' : $coupon_notifications; // add space between $groupon_notifications and $groupon_errors ( if any $groupon_errors exist ) $groupon_notifications = $groupon_count && $groupon_errors ? $groupon_notifications . '<br/>' : $groupon_notifications; // ALL together now!!! $notifications .= $coupon_notifications . $groupon_notifications . $groupon_errors; if (!$update_section) { echo event_espresso_json_response(array('grand_total' => number_format($grand_total, 2, '.', ''), 'msg' => $notifications)); die; } }
function event_espresso_add_attendees_to_db($event_id = NULL, $session_vars = NULL, $skip_check = FALSE) { //echo '<h3>'. __CLASS__ . '->' . __FUNCTION__ . ' <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h3>'; do_action('action_hook_espresso_log', __FILE__, __FUNCTION__, ''); global $wpdb, $org_options, $espresso_premium; // check if user has already hit this page before ( ie: going back n forth thru reg process ) if (is_null($session_vars)) { $SQL = "SELECT id FROM " . EVENTS_ATTENDEE_TABLE . " WHERE attendee_session=%s"; $prev_sessions = $wpdb->get_col($wpdb->prepare($SQL, $_SESSION['espresso_session']['id'])); if (!empty($prev_sessions)) { $_SESSION['espresso_session']['id'] = array(); ee_init_session(); } } $data_source = $_POST; $att_data_source = $_POST; $multi_reg = FALSE; $notifications = array('coupons' => '', 'groupons' => ''); if (!is_null($event_id) && !is_null($session_vars)) { //event details, ie qty, price, start.. $data_source = $session_vars['data']; //event attendee info ie name, questions.... $att_data_source = $session_vars['event_attendees']; $multi_reg = TRUE; } else { $event_id = absint($data_source['event_id']); } $data_source['reg_form_nonce'] = isset($_POST['reg_form_nonce']) && !empty($_POST['reg_form_nonce']) ? $_POST['reg_form_nonce'] : NULL; wp_verify_nonce($data_source['reg_form_nonce']); $skip_check = $skip_check || isset($data_source['admin']) ? TRUE : FALSE; if (espresso_verify_recaptcha($skip_check)) { array_walk_recursive($data_source, 'wp_strip_all_tags'); array_walk_recursive($att_data_source, 'wp_strip_all_tags'); array_walk_recursive($data_source, 'espresso_apply_htmlentities'); array_walk_recursive($att_data_source, 'espresso_apply_htmlentities'); // Will be used for multi events to keep track of evant id change in the loop, for recording event total cost for each group static $temp_event_id = ''; //using this var to keep track of the first attendee static $attendee_number = 1; static $loop_number = 1; static $total_cost = 0; static $primary_att_id = NULL; // echo '<h1>$attendee_number : ' . $attendee_number . ' <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h1>'; // printr( $data_source, '$data_source <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' ); // printr( $att_data_source, '$att_data_source <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' ); if ($temp_event_id == '' || $temp_event_id != $event_id) { $temp_event_id = $event_id; $event_change = 1; } else { $event_change = 0; } $event_cost = isset($data_source['cost']) && $data_source['cost'] != '' ? $data_source['cost'] : 0.0; $final_price = $event_cost; $fname = isset($att_data_source['fname']) ? html_entity_decode(trim($att_data_source['fname']), ENT_QUOTES, 'UTF-8') : ''; $lname = isset($att_data_source['lname']) ? html_entity_decode(trim($att_data_source['lname']), ENT_QUOTES, 'UTF-8') : ''; $address = isset($att_data_source['address']) ? html_entity_decode(trim($att_data_source['address']), ENT_QUOTES, 'UTF-8') : ''; $address2 = isset($att_data_source['address2']) ? html_entity_decode(trim($att_data_source['address2']), ENT_QUOTES, 'UTF-8') : ''; $city = isset($att_data_source['city']) ? html_entity_decode(trim($att_data_source['city']), ENT_QUOTES, 'UTF-8') : ''; $state = isset($att_data_source['state']) ? html_entity_decode(trim($att_data_source['state']), ENT_QUOTES, 'UTF-8') : ''; $zip = isset($att_data_source['zip']) ? html_entity_decode(trim($att_data_source['zip']), ENT_QUOTES, 'UTF-8') : ''; $phone = isset($att_data_source['phone']) ? html_entity_decode(trim($att_data_source['phone']), ENT_QUOTES, 'UTF-8') : ''; $email = isset($att_data_source['email']) ? html_entity_decode(trim($att_data_source['email']), ENT_QUOTES, 'UTF-8') : ''; $SQL = "SELECT question_groups, event_meta FROM " . EVENTS_DETAIL_TABLE . " WHERE id = %d"; $questions = $wpdb->get_row($wpdb->prepare($SQL, $event_id)); $event_meta = maybe_unserialize($questions->event_meta); $questions = maybe_unserialize($questions->question_groups); // Adding attenddee specific cost to events_attendee table if (isset($data_source['admin'])) { $attendee_quantity = 1; $final_price = $data_source['event_cost']; $orig_price = $data_source['event_cost']; $price_type = __('Admin', 'event_espresso'); //echo '<h4>$orig_price : ' . $orig_price . ' <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4>'; //echo '<h4>$final_price : ' . $final_price . ' <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4>'; } elseif (isset($data_source['seat_id'])) { // Added for seating chart add-on // If a seat was selected then price of that seating will be used instead of event price $final_price = seating_chart::get_purchase_price($data_source['seat_id']); $orig_price = $data_source['cost']; //echo '<h4>$orig_price : ' . $orig_price . ' <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4>'; //echo '<h4>$final_price : ' . $final_price . ' <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4>'; } elseif (isset($att_data_source['price_id']) && !empty($att_data_source['price_id'])) { if ($att_data_source['price_id'] == 'free') { $orig_price = 0.0; $final_price = 0.0; $price_type = __('Free Event', 'event_espresso'); } else { $orig_price = event_espresso_get_orig_price_and_surcharge($att_data_source['price_id']); $final_price = isset($att_data_source['price_id']) ? event_espresso_get_final_price($att_data_source['price_id'], $event_id, $orig_price) : 0.0; $price_type = isset($att_data_source['price_id']) ? espresso_ticket_information(array('type' => 'ticket', 'price_option' => $att_data_source['price_id'])) : ''; $surcharge = event_espresso_calculate_surcharge($orig_price->event_cost, $orig_price->surcharge, $orig_price->surcharge_type); $orig_price = (double) number_format($orig_price->event_cost + $surcharge, 2, '.', ''); // echo '<h4>$orig_price : ' . $orig_price . ' <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4>'; // echo '<h4>$final_price : ' . $final_price . ' <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4>'; } } elseif (isset($data_source['price_select']) && $data_source['price_select'] == TRUE) { //Figure out if the person has registered using a price selection $price_options = explode('|', $data_source['price_option'], 2); $price_id = $price_options[0]; $price_type = $price_options[1]; $orig_price = event_espresso_get_orig_price_and_surcharge($price_id); $final_price = event_espresso_get_final_price($price_id, $event_id, $orig_price); $surcharge = event_espresso_calculate_surcharge($orig_price->event_cost, $orig_price->surcharge, $orig_price->surcharge_type); $orig_price = (double) number_format($orig_price->event_cost + $surcharge, 2, '.', ''); //echo '<h4>$orig_price : ' . $orig_price . ' <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4>'; //echo '<h4>$final_price : ' . $final_price . ' <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4>'; } else { if ($data_source['price_id'] == 'free') { $orig_price = 0.0; $final_price = 0.0; $price_type = __('Free Event', 'event_espresso'); } else { $orig_price = event_espresso_get_orig_price_and_surcharge($data_source['price_id']); $final_price = isset($data_source['price_id']) ? event_espresso_get_final_price($data_source['price_id'], $event_id, $orig_price) : 0.0; $price_type = isset($data_source['price_id']) ? espresso_ticket_information(array('type' => 'ticket', 'price_option' => $data_source['price_id'])) : ''; $surcharge = event_espresso_calculate_surcharge($orig_price->event_cost, $orig_price->surcharge, $orig_price->surcharge_type); $orig_price = (double) number_format($orig_price->event_cost + $surcharge, 2, '.', ''); //echo '<h4>$orig_price : ' . $orig_price . ' <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4>'; //echo '<h4>$final_price : ' . $final_price . ' <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4>'; } } $final_price = apply_filters('filter_hook_espresso_attendee_cost', $final_price); $attendee_quantity = isset($data_source['num_people']) ? $data_source['num_people'] : 1; $coupon_code = ''; //echo '<h4>$orig_price : ' . $orig_price . ' <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4>'; //echo '<h4>$final_price : ' . $final_price . ' <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4>'; if ($multi_reg) { $event_cost = $_SESSION['espresso_session']['grand_total']; //$coupon_code = $attendee_number == 1 ? $_SESSION['espresso_session']['event_espresso_coupon_code'] : ''; } do_action('action_hook_espresso_log', __FILE__, __FUNCTION__, 'line ' . __LINE__ . ' : attendee_cost=' . $final_price); $event_cost = apply_filters('filter_hook_espresso_cart_grand_total', $event_cost); // $amount_pd = $attendee_number == 1 ? $event_cost : 0.00; $amount_pd = 0.0; //Check to see if the registration id already exists $incomplete_filter = !$multi_reg ? " AND payment_status ='Incomplete'" : ''; $SQL = "SELECT attendee_session, id, registration_id FROM " . EVENTS_ATTENDEE_TABLE . " WHERE attendee_session =%s AND event_id = %d"; $SQL .= $incomplete_filter; $check_sql = $wpdb->get_results($wpdb->prepare($SQL, $_SESSION['espresso_session']['id'], $event_id)); $nmbr_of_regs = $wpdb->num_rows; //Check if the registration id has been created previously. $registration_id = empty($wpdb->last_result[0]->registration_id) ? apply_filters('filter_hook_espresso_registration_id', $event_id) : $wpdb->last_result[0]->registration_id; $txn_type = ""; if (isset($data_source['admin'])) { $payment_status = "Completed"; $payment = "Admin"; $txn_type = __('Added by Admin', 'event_espresso'); //$payment_date = date("m-d-Y"); $payment_date = date(get_option('date_format')); $amount_pd = $data_source['event_cost'] != '' ? $data_source['event_cost'] : 0.0; $registration_id = uniqid('', true); $_SESSION['espresso_session']['id'] = uniqid('', true); } else { //print_r( $event_meta); $default_payment_status = $event_meta['default_payment_status'] != '' ? $event_meta['default_payment_status'] : $org_options['default_payment_status']; $payment_status = $multi_reg && $data_source['cost'] == 0.0 ? "Completed" : $default_payment_status; $payment = ''; } $times_sql = "SELECT ese.start_time, ese.end_time, e.start_date, e.end_date "; $times_sql .= "FROM " . EVENTS_START_END_TABLE . " ese "; $times_sql .= "LEFT JOIN " . EVENTS_DETAIL_TABLE . " e ON ese.event_id = e.id WHERE "; $times_sql .= "e.id=%d"; if (!empty($data_source['start_time_id'])) { $times_sql .= " AND ese.id=" . $data_source['start_time_id']; } $times = $wpdb->get_results($wpdb->prepare($times_sql, $event_id)); foreach ($times as $time) { $start_time = $time->start_time; $end_time = $time->end_time; $start_date = $time->start_date; $end_date = $time->end_date; } //If we are using the number of attendees dropdown, add that number to the DB //echo $data_source['espresso_addtl_limit_dd']; if (isset($data_source['espresso_addtl_limit_dd'])) { $num_people = $data_source['num_people']; } elseif (isset($event_meta['additional_attendee_reg_info']) && $event_meta['additional_attendee_reg_info'] == 1) { $num_people = $data_source['num_people']; } else { $num_people = 1; } // check for coupon if (function_exists('event_espresso_process_coupon')) { if ($coupon_results = event_espresso_process_coupon($event_id, $final_price, $multi_reg)) { //printr( $coupon_results, '$coupon_results <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' ); if ($coupon_results['valid']) { $final_price = number_format($coupon_results['event_cost'], 2, '.', ''); $coupon_code = $coupon_results['code']; } if (!$multi_reg && !empty($coupon_results['msg'])) { $notifications['coupons'] = $coupon_results['msg']; } } } // check for groupon if (function_exists('event_espresso_process_groupon')) { if ($groupon_results = event_espresso_process_groupon($event_id, $final_price, $multi_reg)) { //printr( $groupon_results, '$groupon_results <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' ); if ($groupon_results['valid']) { $final_price = number_format($groupon_results['event_cost'], 2, '.', ''); $coupon_code = $groupon_results['code']; } if (!$multi_reg && !empty($groupon_results['msg'])) { $notifications['groupons'] = $groupon_results['msg']; } } } // check for groupon // $use_groupon = isset( $data_source['use_groupon'][ $event_id ] ) && function_exists( 'espresso_apply_goupon_to_attendee' ) ? $data_source['use_groupon'][ $event_id ] == 'Y' : 'N'; // if ( $use_groupon && isset( $data_source['groupon'] )) { // if ( $new_att_price_data = espresso_apply_goupon_to_attendee( $event_id, $final_price, $data_source['groupon'] )) { // extract( $new_att_price_data ); // $data_source['groupon'] = $groupon; // } // } $start_time = empty($start_time) ? '' : $start_time; $end_time = empty($end_time) ? '' : $end_time; $start_date = empty($start_date) ? '' : $start_date; $end_date = empty($end_date) ? '' : $end_date; $organization_name = empty($organization_name) ? '' : $organization_name; $country_id = empty($country_id) ? '' : $country_id; $payment_date = empty($payment_date) ? '' : $payment_date; $coupon_code = empty($coupon_code) ? '' : $coupon_code; $amount_pd = number_format((double) $amount_pd, 2, '.', ''); $orig_price = number_format((double) $orig_price, 2, '.', ''); $final_price = number_format((double) $final_price, 2, '.', ''); $total_cost = $total_cost + $final_price; //echo '<h4>$amount_pd : ' . $amount_pd . ' <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4>'; //echo '<h4>$orig_price : ' . $orig_price . ' <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4>'; //echo '<h4>$final_price : ' . $final_price . ' <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4>'; //echo '<h4>$total_cost : ' . $total_cost . ' <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4><br /><br /><br />'; //echo '<h4>$payment_status : ' . $payment_status . ' <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4><br /><br /><br />'; $columns_and_values = array('registration_id' => $registration_id, 'is_primary' => $attendee_number == 1 ? TRUE : FALSE, 'attendee_session' => $_SESSION['espresso_session']['id'], 'lname' => $lname, 'fname' => $fname, 'address' => $address, 'address2' => $address2, 'city' => $city, 'state' => $state, 'zip' => $zip, 'email' => $email, 'phone' => $phone, 'payment' => $payment, 'txn_type' => $txn_type, 'coupon_code' => $coupon_code, 'event_time' => $start_time, 'end_time' => $end_time, 'start_date' => $start_date, 'end_date' => $end_date, 'price_option' => $price_type, 'organization_name' => $organization_name, 'country_id' => $country_id, 'payment_status' => $payment_status, 'payment_date' => $payment_date, 'event_id' => $event_id, 'quantity' => (int) $num_people, 'amount_pd' => $amount_pd, 'orig_price' => $orig_price, 'final_price' => $final_price); // printr( $columns_and_values, '$columns_and_values <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' ); $data_formats = array('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%d', '%d', '%f', '%f', '%f'); // delete previous entries from this session in case user is jumping back n forth between pages during the reg process if ($nmbr_of_regs > 0 && $loop_number == 1) { if (!isset($data_source['admin'])) { //Added for seating chart addon $tmp_session = wp_strip_all_tags($_SESSION['espresso_session']['id']); $SQL = "SELECT id, registration_id FROM " . EVENTS_ATTENDEE_TABLE . ' '; $SQL .= "WHERE attendee_session = %s "; $SQL .= $incomplete_filter; if ($rem_attendee_ids = $wpdb->get_results($wpdb->prepare($SQL, $tmp_session))) { foreach ($rem_attendee_ids as $v) { if (defined('ESPRESSO_SEATING_CHART')) { $SQL = "DELETE FROM " . EVENTS_SEATING_CHART_EVENT_SEAT_TABLE . ' '; $SQL .= "WHERE attendee_id = %d"; $wpdb->query($wpdb->prepare($SQL, $v->id)); } } } $SQL = "DELETE t1, t2 FROM " . EVENTS_ATTENDEE_TABLE . " t1 "; $SQL .= "JOIN " . EVENTS_ANSWER_TABLE . " t2 on t1.id = t2.attendee_id "; $SQL .= "WHERE t1.attendee_session = %s "; $SQL .= $incomplete_filter; $wpdb->query($wpdb->prepare($SQL, $tmp_session)); } //Added by Imon // First delete attempt might fail if there is no data in answer table. So, second attempt without joining answer table is taken bellow - $SQL = " DELETE FROM " . EVENTS_ATTENDEE_TABLE . ' '; $SQL .= "WHERE attendee_session = %s "; $SQL .= $incomplete_filter; $wpdb->query($wpdb->prepare($SQL, $tmp_session)); // Clean up any attendee information from attendee_cost table where attendee is not available in attendee table event_espresso_cleanup_multi_event_registration_id_group_data(); } $loop_number++; // save the attendee details - FINALLY !!! if (!$wpdb->insert(EVENTS_ATTENDEE_TABLE, $columns_and_values, $data_formats)) { $error = true; } $attendee_id = $wpdb->insert_id; // save attendee id for the primary attendee $primary_att_id = $attendee_number == 1 ? $attendee_id : FALSE; // Added for seating chart addon $booking_id = 0; if (defined('ESPRESSO_SEATING_CHART')) { if (seating_chart::check_event_has_seating_chart($event_id) !== false) { if (isset($_POST['seat_id'])) { $booking_id = seating_chart::parse_booking_info($_POST['seat_id']); if ($booking_id > 0) { seating_chart::confirm_a_seat($booking_id, $attendee_id); } } } } //Add a record for the primary attendee if ($attendee_number == 1) { $columns_and_values = array('attendee_id' => $primary_att_id, 'meta_key' => 'primary_attendee', 'meta_value' => 1); $data_formats = array('%s', '%s', '%s'); if (!$wpdb->insert(EVENTS_ATTENDEE_META_TABLE, $columns_and_values, $data_formats)) { $error = true; } } if (defined('EVENTS_MAILCHIMP_ATTENDEE_REL_TABLE') && $espresso_premium == true) { MailChimpController::list_subscribe($event_id, $attendee_id, $fname, $lname, $email); } //Defining the $base_questions variable in case there are no additional attendee questions $base_questions = $questions; //Since main attendee and additional attendees may have different questions, //$attendee_number check for 2 because is it statically set at 1 first and is incremented for the primary attendee above, hence 2 $questions = $attendee_number > 1 && isset($event_meta['add_attendee_question_groups']) ? $event_meta['add_attendee_question_groups'] : $questions; add_attendee_questions($questions, $registration_id, $attendee_id, array('session_vars' => $att_data_source)); //Add additional attendees to the database if ($event_meta['additional_attendee_reg_info'] > 1) { $questions = $event_meta['add_attendee_question_groups']; if (empty($questions)) { $questions = $base_questions; } if (isset($att_data_source['x_attendee_fname'])) { foreach ($att_data_source['x_attendee_fname'] as $k => $v) { if (trim($v) != '' && trim($att_data_source['x_attendee_lname'][$k]) != '') { // Added for seating chart addon $seat_check = true; $x_booking_id = 0; if (defined('ESPRESSO_SEATING_CHART')) { if (seating_chart::check_event_has_seating_chart($event_id) !== false) { if (!isset($att_data_source['x_seat_id'][$k]) || trim($att_data_source['x_seat_id'][$k]) == '') { $seat_check = false; } else { $x_booking_id = seating_chart::parse_booking_info($att_data_source['x_seat_id'][$k]); if ($x_booking_id > 0) { $seat_check = true; } else { $seat_check = false; //Keeps the system from adding an additional attndee if no seat is selected } } } } if ($seat_check) { $data = array('registration_id' => $registration_id, 'attendee_session' => $_SESSION['espresso_session']['id'], 'lname' => $att_data_source['x_attendee_lname'][$k], 'fname' => $v, 'email' => $att_data_source['x_attendee_email'][$k], 'address' => empty($att_data_source['x_attendee_address'][$k]) ? '' : $att_data_source['x_attendee_address'][$k], 'address2' => empty($att_data_source['x_attendee_address2'][$k]) ? '' : $att_data_source['x_attendee_address2'][$k], 'city' => empty($att_data_source['x_attendee_city'][$k]) ? '' : $att_data_source['x_attendee_city'][$k], 'state' => empty($att_data_source['x_attendee_state'][$k]) ? '' : $att_data_source['x_attendee_state'][$k], 'zip' => empty($att_data_source['x_attendee_zip'][$k]) ? '' : $att_data_source['x_attendee_zip'][$k], 'phone' => empty($att_data_source['x_attendee_phone'][$k]) ? '' : $att_data_source['x_attendee_phone'][$k], 'payment' => $payment, 'event_time' => $start_time, 'end_time' => $end_time, 'start_date' => $start_date, 'end_date' => $end_date, 'price_option' => $price_type, 'organization_name' => $organization_name, 'country_id' => $country_id, 'payment_status' => $payment_status, 'payment_date' => $payment_date, 'event_id' => $event_id, 'quantity' => (int) $num_people, 'amount_pd' => (double) 0.0, 'orig_price' => $orig_price, 'final_price' => $final_price); $format = array('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%d', '%d', '%f', '%f', '%f'); $wpdb->insert(EVENTS_ATTENDEE_TABLE, $data, $format); //Added by Imon $ext_attendee_id = $wpdb->insert_id; $mailchimp_attendee_id = $ext_attendee_id; if (defined('EVENTS_MAILCHIMP_ATTENDEE_REL_TABLE') && $espresso_premium == true) { MailChimpController::list_subscribe($event_id, $mailchimp_attendee_id, $v, $att_data_source['x_attendee_lname'][$k], $att_data_source['x_attendee_email'][$k]); } //Added by Imon $ext_att_data_source = array('registration_id' => $registration_id, 'attendee_session' => $_SESSION['espresso_session']['id'], 'lname' => $att_data_source['x_attendee_lname'][$k], 'fname' => $v, 'email' => $att_data_source['x_attendee_email'][$k], 'address' => empty($att_data_source['x_attendee_address'][$k]) ? '' : $att_data_source['x_attendee_address'][$k], 'address2' => empty($att_data_source['x_attendee_address2'][$k]) ? '' : $att_data_source['x_attendee_address2'][$k], 'city' => empty($att_data_source['x_attendee_city'][$k]) ? '' : $att_data_source['x_attendee_city'][$k], 'state' => empty($att_data_source['x_attendee_state'][$k]) ? '' : $att_data_source['x_attendee_state'][$k], 'zip' => empty($att_data_source['x_attendee_zip'][$k]) ? '' : $att_data_source['x_attendee_zip'][$k], 'phone' => empty($att_data_source['x_attendee_phone'][$k]) ? '' : $att_data_source['x_attendee_phone'][$k], 'payment' => $payment, 'amount_pd' => (double) 0.0, 'event_time' => $start_time, 'end_time' => $end_time, 'start_date' => $start_date, 'end_date' => $end_date, 'price_option' => $price_type, 'organization_name' => $organization_name, 'country_id' => $country_id, 'payment_status' => $payment_status, 'payment_date' => $payment_date, 'event_id' => $event_id, 'quantity' => (int) $num_people); if (!is_array($questions) && !empty($questions)) { $questions = unserialize($questions); } $questions_in = ''; foreach ($questions as $g_id) { $questions_in .= $g_id . ','; } $questions_in = substr($questions_in, 0, -1); $SQL = "SELECT q.*, qg.group_name FROM " . EVENTS_QUESTION_TABLE . " q "; $SQL .= "JOIN " . EVENTS_QST_GROUP_REL_TABLE . " qgr on q.id = qgr.question_id "; $SQL .= "JOIN " . EVENTS_QST_GROUP_TABLE . " qg on qg.id = qgr.group_id "; $SQL .= "WHERE qgr.group_id in ( {$questions_in} ) "; $SQL .= "ORDER BY q.id ASC"; $questions_list = $wpdb->get_results($wpdb->prepare($SQL, NULL)); foreach ($questions_list as $question_list) { if ($question_list->system_name != '') { $ext_att_data_source[$question_list->system_name] = $att_data_source['x_attendee_' . $question_list->system_name][$k]; } else { $ext_att_data_source[$question_list->question_type . '_' . $question_list->id] = $att_data_source['x_attendee_' . $question_list->question_type . '_' . $question_list->id][$k]; } } echo add_attendee_questions($questions, $registration_id, $ext_attendee_id, array('session_vars' => $ext_att_data_source)); } // Added for seating chart addon if (defined('ESPRESSO_SEATING_CHART')) { if (seating_chart::check_event_has_seating_chart($event_id) !== false && $x_booking_id > 0) { seating_chart::confirm_a_seat($x_booking_id, $ext_attendee_id); } } } } } } //Add member data if needed if (defined('EVENTS_MEMBER_REL_TABLE')) { require_once EVENT_ESPRESSO_MEMBERS_DIR . "member_functions.php"; //Load Members functions require EVENT_ESPRESSO_MEMBERS_DIR . "user_vars.php"; //Load Members functions if ($userid != 0) { event_espresso_add_user_to_event($event_id, $userid, $attendee_id); } } $attendee_number++; if (isset($data_source['admin'])) { return $attendee_id; } //This shows the payment page if (!$multi_reg) { return events_payment_page($attendee_id, $notifications); } return array('registration_id' => $registration_id, 'notifications' => $notifications); } }
function event_espresso_calculate_total($update_section = null) { //print_r($_POST); global $wpdb; $events_in_session = $_SESSION['espresso_session']['events_in_session']; if (is_array($events_in_session)) { $event_total_cost = 0; foreach ($events_in_session as $k => $v) { $event_cost = 0; $event_id = $k; $event_individual_cost[$event_id] = 0; $start_time_id = ''; if (array_key_exists('start_time_id', $_POST) && array_key_exists($event_id, $_POST['start_time_id'])) { $start_time_id = $_POST['start_time_id'][$event_id]; } /* * two ways the price id comes this way * - from a dropdown >> price_id[event_id][price_id] * - from a radio >> price_id[event_id] with a value of price_id */ $price_id = $_POST['price_id'][$event_id]; if (is_array($price_id)) { foreach ($price_id as $_price_id => $val) { $attendee_quantitiy = $wpdb->escape($val); if ($attendee_quantitiy > 0) { $event_cost = event_espresso_get_final_price($_price_id, $event_id); $event_individual_cost[$event_id] += number_format($event_cost * $attendee_quantitiy, 2, '.', ''); } } } else { $attendee_quantitiy = 1; $event_cost = event_espresso_get_final_price($price_id, $event_id); $event_individual_cost[$event_id] = number_format($event_cost * $attendee_quantitiy, 2, '.', ''); } $_SESSION['espresso_session']['events_in_session'][$event_id]['cost'] = $event_individual_cost[$event_id]; $event_total_cost += $event_individual_cost[$event_id]; } $_SESSION['espresso_session']['pre_discount_total'] = number_format($event_total_cost, 2, '.', ''); if (function_exists('event_espresso_coupon_payment_page') && isset($_POST['event_espresso_coupon_code'])) { if (isset($_POST['event_espresso_coupon_code'])) { $event_total_cost = event_espresso_coupon_payment_page('Y', NULL, $event_total_cost, NULL); } } $grand_total = number_format($event_total_cost, 2, '.', ''); $_SESSION['espresso_session']['grand_total'] = $grand_total; event_espresso_update_item_in_session($update_section); } //} if ($update_section == null) { echo event_espresso_json_response(array('grand_total' => $grand_total)); die; } }