function add_attendee_questions($questions, $registration_id, $attendee_id = 0, $extra = array())
{
    global $wpdb, $org_options;
    //$wpdb->show_errors();
    if (array_key_exists('session_vars', $extra)) {
        $response_source = $extra['session_vars'];
    } else {
        $response_source = $_POST;
    }
    array_walk_recursive($response_source, 'sanitize_text_field');
    $question_groups = maybe_unserialize($questions);
    //printr( $questions, '$question_groups  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' );
    if (count($question_groups) > 0) {
        $questions_in = '';
        foreach ($question_groups as $g_id) {
            $questions_in .= $g_id . ',';
        }
        $questions_in = substr($questions_in, 0, -1);
        $SQL = "SELECT q.*, q.id AS qstn_id, qg.id, qg.group_name ";
        $SQL .= "FROM " . EVENTS_QST_GROUP_TABLE . " qg ";
        $SQL .= "JOIN " . EVENTS_QST_GROUP_REL_TABLE . " qgr ON qg.id = qgr.group_id ";
        $SQL .= "\tJOIN " . EVENTS_QUESTION_TABLE . " q ON q.id = qgr.question_id ";
        $SQL .= 'WHERE qg.id IN (' . $questions_in . ') ORDER BY qg.id, q.id ASC';
        $questions = $wpdb->get_results($wpdb->prepare($SQL, NULL));
        //		echo '<h4>LQ : ' . $wpdb->last_query . '  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4>';
        //		printr( $questions, '$questions  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' );
        if ($questions !== FALSE) {
            // we'll store question IDs in here so we know which ones ahve already been displayed
            $question_displayed = array();
            //Make a global variable to hold the answers to the questions to be sent in the admin email.
            global $email_questions;
            $email_questions = '<p>' . __('Form Questions:', 'event_espresso') . '<br />';
            // cycle thru questions
            foreach ($questions as $question) {
                //printr( $question, '$question  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' );
                // depending on the quesion, it's POST key may be different
                $question_type = !empty($response_source[$question->question_type . '_' . $question->qstn_id]) ? $response_source[$question->question_type . '_' . $question->qstn_id] : '';
                //echo '<h4>$question_type : ' . $question_type . '  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4>';
                // so if we haven't already displayed this question
                if (!in_array($question->qstn_id, $question_displayed)) {
                    // store question ID
                    $question_displayed[] = $question->qstn_id;
                    // what kinda question ?
                    switch ($question->question_type) {
                        case "TEXT":
                        case "TEXTAREA":
                        case "DROPDOWN":
                        case "SINGLE":
                            if ($question->admin_only != 'Y') {
                                $post_val = $question->system_name != '' ? $response_source[$question->system_name] : $question_type;
                                $post_val = apply_filters('filter_hook_espresso_form_question_response', trim($post_val), $question, $attendee_id);
                            } else {
                                $post_val = '';
                            }
                            break;
                        case "MULTIPLE":
                            $post_val = '';
                            if (!empty($response_source[$question->question_type . '_' . $question->qstn_id]) && $question->admin_only != 'Y') {
                                for ($i = 0; $i < count($response_source[$question->question_type . '_' . $question->qstn_id]); $i++) {
                                    $val = trim($response_source[$question->question_type . '_' . $question->qstn_id][$i]);
                                    $val = apply_filters('filter_hook_espresso_form_question_response', $val, $question, $attendee_id);
                                    $post_val .= $val . ",";
                                }
                            }
                            break;
                    }
                    $columns_and_values = array('registration_id' => $registration_id, 'attendee_id' => $attendee_id, 'question_id' => $question->qstn_id, 'answer' => ee_sanitize_value($post_val));
                    $data_formats = array('%s', '%d', '%d', '%s');
                    $wpdb->insert(EVENTS_ANSWER_TABLE, $columns_and_values, $data_formats);
                    //echo '<h4>LQ : ' . $wpdb->last_query . '  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4>';
                    $email_questions .= $question->question . ': ' . $post_val . '<br />';
                }
            }
            $email_questions .= '</p>';
        }
    }
}
function attendee_edit_record()
{
    global $wpdb, $org_options;
    do_action('action_hook_espresso_log', __FILE__, __FUNCTION__, '');
    $id = isset($_REQUEST['id']) ? absint($_REQUEST['id']) : FALSE;
    $registration_id = isset($_REQUEST['registration_id']) ? wp_strip_all_tags($_REQUEST['registration_id']) : FALSE;
    $req_primary = isset($_REQUEST['primary']) ? wp_strip_all_tags(absint($_REQUEST['primary'])) : $id;
    $req_p_id = isset($_REQUEST['p_id']) ? wp_strip_all_tags(absint($_REQUEST['p_id'])) : FALSE;
    if (isset($_REQUEST['r_id']) && !empty($_REQUEST['r_id'])) {
        $registration_id = wp_strip_all_tags($_REQUEST['r_id']);
    }
    if ($id && $registration_id) {
        if (!empty($_REQUEST['delete_attendee']) && $_REQUEST['delete_attendee'] == 'true') {
            $SQL = " DELETE FROM " . EVENTS_ATTENDEE_TABLE . " WHERE id = %d";
            $wpdb->query($wpdb->prepare($SQL, $id));
            $SQL = "SELECT id from " . EVENTS_ATTENDEE_TABLE . " WHERE registration_id = %s";
            $wpdb->query($wpdb->prepare($SQL, $registration_id));
            if ($wpdb->num_rows == 0) {
                $SQL = " UPDATE " . EVENTS_ATTENDEE_TABLE . " ";
                $SQL .= "SET quantity = IF(quantity IS NULL ,NULL,IF(quantity > 0,IF(quantity-1>0,quantity-1,1),0)) ";
                $SQL .= "WHERE registration_id = %s";
                $wpdb->query($wpdb->prepare($SQL, $registration_id));
                event_espresso_cleanup_multi_event_registration_id_group_data();
            }
            if (isset($req_primary) && isset($req_p_id)) {
                return events_payment_page($req_primary);
            }
        }
        // end delete attendee
        $counter = 0;
        $additional_attendees = NULL;
        $SQL = "SELECT  att.*, evt.event_name, evt.question_groups, evt.event_meta ";
        $SQL .= "FROM " . EVENTS_ATTENDEE_TABLE . " att ";
        $SQL .= "JOIN " . EVENTS_DETAIL_TABLE . " evt ON att.event_id = evt.id ";
        $SQL .= "WHERE att.id = %d AND att.registration_id = %s ";
        $SQL .= "ORDER BY att.id";
        $attendee = $wpdb->get_row($wpdb->prepare($SQL, $id, $registration_id));
        if ($attendee != FALSE) {
            $display_attendee_form = TRUE;
            $id = $attendee->id;
            $registration_id = $attendee->registration_id;
            $lname = $attendee->lname;
            $fname = $attendee->fname;
            $address = $attendee->address;
            $city = $attendee->city;
            $state = $attendee->state;
            $zip = $attendee->zip;
            $email = $attendee->email;
            $payment = $attendee->payment;
            $phone = $attendee->phone;
            $date = $attendee->date;
            $payment_status = $attendee->payment_status;
            $txn_type = $attendee->txn_type;
            $txn_id = $attendee->txn_id;
            $amount_pd = $attendee->amount_pd;
            $quantity = $attendee->quantity;
            $payment_date = $attendee->payment_date;
            $event_id = $attendee->event_id;
            $event_name = stripslashes_deep($attendee->event_name);
            $question_groups = maybe_unserialize($attendee->question_groups);
            $event_meta = maybe_unserialize($attendee->event_meta);
            if (!$attendee->is_primary && isset($event_meta['add_attendee_question_groups']) && $event_meta['add_attendee_question_groups'] != NULL) {
                $question_groups = $event_meta['add_attendee_question_groups'];
            }
            //printr( $question_groups, '$question_groups  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' );
            $questions_in = '';
            foreach ($question_groups as $g_id) {
                $questions_in .= $g_id . ',';
            }
            $questions_in = substr($questions_in, 0, -1);
            //			echo '<h4>$questions_in : ' . $questions_in . '  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4>';
            $group_name = '';
            $counter = 0;
            //pull the list of questions that are relevant to this event
            $SQL = "SELECT q.*, q.id AS q_id, 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 .= "AND q.admin_only != 'Y' ";
            $SQL .= "ORDER BY qg.group_order, qg.id, q.sequence ASC";
            $questions = $wpdb->get_results($wpdb->prepare($SQL, NULL));
            //			echo '<h4>last_query : ' . $wpdb->last_query . '  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4>';
            //			printr( $questions, '$questions  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' );
            $SQL = "SELECT question_id, answer FROM " . EVENTS_ANSWER_TABLE . " ans WHERE ans.attendee_id = %d";
            $answers = $wpdb->get_results($wpdb->prepare($SQL, $id));
            $answer_a = array();
            foreach ($answers as $answer) {
                array_push($answer_a, $answer->question_id);
            }
            // Update the attendee information
            if (isset($_REQUEST['attendee_action']) && $_REQUEST['attendee_action'] == 'update_attendee') {
                $fname = !empty($_POST['fname']) ? ee_sanitize_value($_POST['fname']) : '';
                $lname = !empty($_POST['lname']) ? ee_sanitize_value($_POST['lname']) : '';
                $address = !empty($_POST['address']) ? ee_sanitize_value($_POST['address']) : '';
                $city = !empty($_POST['city']) ? ee_sanitize_value($_POST['city']) : '';
                $state = !empty($_POST['state']) ? ee_sanitize_value($_POST['state']) : '';
                $zip = !empty($_POST['zip']) ? ee_sanitize_value($_POST['zip']) : '';
                $phone = !empty($_POST['phone']) ? ee_sanitize_value($_POST['phone']) : '';
                $email = !empty($_POST['email']) ? ee_sanitize_value($_POST['email']) : '';
                $SQL = "UPDATE " . EVENTS_ATTENDEE_TABLE . " SET fname=%s, lname=%s, address=%s, city=%s, state=%s, zip=%s, phone=%s, email=%s WHERE id =%d";
                $wpdb->query($wpdb->prepare($SQL, $fname, $lname, $address, $city, $state, $zip, $phone, $email, $id));
                if ($questions) {
                    foreach ($questions as $question) {
                        switch ($question->question_type) {
                            case "TEXT":
                            case "TEXTAREA":
                            case "DROPDOWN":
                            case "SINGLE":
                                $post_val = $question->system_name != '' ? ee_sanitize_value($_POST[$question->system_name]) : ee_sanitize_value($_POST[$question->question_type . '_' . $question->q_id]);
                                break;
                            case "MULTIPLE":
                                $post_val = '';
                                if (!empty($_POST[$question->question_type . '_' . $question->id])) {
                                    for ($i = 0; $i < count($_POST[$question->question_type . '_' . $question->id]); $i++) {
                                        $post_val .= trim(ee_sanitize_value($_POST[$question->question_type . '_' . $question->id][$i])) . ',';
                                    }
                                }
                                $post_val = substr($post_val, 0, -1);
                                break;
                        }
                        $post_val = html_entity_decode($post_val, ENT_QUOTES, 'UTF-8');
                        if (in_array($question->q_id, $answer_a)) {
                            $SQL = "UPDATE " . EVENTS_ANSWER_TABLE . " SET answer = %s WHERE attendee_id = %d AND question_id =%d";
                            $wpdb->query($wpdb->prepare($SQL, $post_val, $id, $question->q_id));
                        } else {
                            $SQL = "INSERT INTO " . EVENTS_ANSWER_TABLE . " ( registration_id, answer, attendee_id, question_id ) VALUES ( %s, %s, %d, %d )";
                            $wpdb->query($wpdb->prepare($SQL, $registration_id, $post_val, $id, $question->q_id));
                        }
                        //echo '<h4>LQ : ' . $wpdb->last_query . '  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4>';
                    }
                }
                //If this is not an attendee returing to edit their details, then we need to return to the payment page
                if (!isset($_REQUEST['single'])) {
                    if (espresso_registration_id($req_primary) == $registration_id && espresso_registration_id($id) == $registration_id) {
                        return events_payment_page($req_primary);
                        exit;
                    } else {
                        _e('Sorry, it seems there was an error verifying the attendee id or primary attendee id record.', 'event_espresso');
                        return;
                    }
                }
            }
        } else {
            $display_attendee_form = FALSE;
        }
        ?>

	<div id="edit-attendee-record-dv" class="event-display-boxes ui-widget">
		<h3 class="event_title ui-widget-header ui-corner-top">
			<?php 
        _e('Edit Registration', 'event_espresso');
        ?>
		</h3>
		<div class="event_espresso_form_wrapper event-data-display ui-widget-content ui-corner-bottom">

<?php 
        if ($display_attendee_form) {
            ?>

			
			<p>
				<strong><?php 
            _e('Event:', 'event_espresso');
            ?>
</strong> <?php 
            echo $event_name;
            ?>
			</p>
			
			<form method="post" action="<?php 
            echo home_url();
            ?>
/?page_id=<?php 
            echo $org_options['event_page_id'];
            ?>
" class="espresso_form" id="registration_form">
<?php 
            if (count($question_groups) > 0) {
                $questions_in = '';
                foreach ($question_groups as $g_id) {
                    $questions_in .= $g_id . ',';
                }
                $questions_in = substr($questions_in, 0, -1);
                //					echo '<h4>$questions_in : ' . $questions_in . '  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4>';
                $FILTER = isset($event_meta['additional_attendee_reg_info']) && $event_meta['additional_attendee_reg_info'] == '2' && isset($_REQUEST['attendee_num']) && $_REQUEST['attendee_num'] > 1 ? ' AND qg.system_group = 1 ' : '';
                //pull the list of questions that are relevant to this event
                $SQL = "SELECT q.*, q.id AS q_id, at.*, qg.group_name, qg.show_group_description, qg.show_group_name ";
                $SQL .= "FROM " . EVENTS_QUESTION_TABLE . " q ";
                $SQL .= "LEFT JOIN " . EVENTS_ANSWER_TABLE . " at on q.id = at.question_id ";
                $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 qg.id in ( {$questions_in} ) ";
                $SQL .= "AND (  at.attendee_id IS NULL OR at.attendee_id = %d ) ";
                $SQL .= "AND q.admin_only != 'Y' ";
                $SQL .= $FILTER;
                $SQL .= "ORDER BY qg.group_order, qg.id, q.sequence ASC";
                if ($questions = $wpdb->get_results($wpdb->prepare($SQL, $id))) {
                    //						printr( $questions, '$questions  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' );
                    //						echo '<h4>last_query : ' . $wpdb->last_query . '  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4>';
                    //Output the questions
                    $question_displayed = array();
                    $group_name = '';
                    $counter = 0;
                    $total_questions = count($questions);
                    foreach ($questions as $question) {
                        if (!in_array($question->id, $question_displayed)) {
                            $question_displayed[] = $question->id;
                            // if question group has changed, close prev group tags
                            echo $group_name != '' && $group_name != $question->group_name ? '
					</fieldset>
				</div>' : '';
                            // new group ?
                            if ($group_name != $question->group_name) {
                                $question->group_identifier = !empty($question->group_identifier) ? ' id="' . $question->group_identifier . '"' : '';
                                $question->group_description = !empty($question->group_description) ? $question->group_description : '';
                                echo '
				<div class="event_questions"' . $question->group_identifier . '>
					<fieldset>';
                                echo $question->show_group_name != 0 ? '
						<h3 class="section-title">' . $question->group_name . '</h3>' : '';
                                echo $question->show_group_description != 0 && $question->group_description != '' ? '
						<p>
							' . $question->group_description . '
						</p>' : '';
                                $group_name = $question->group_name;
                            }
                            echo event_form_build_edit($question, $question->answer, $show_admin_only = FALSE);
                            $counter++;
                            echo $counter == $total_questions ? '
					</fieldset>
				</div>' : '';
                        }
                    }
                }
                //end questions display
            }
            //	registration_id=1-5072fa1b52696
            //	id=318
            //	regevent_action=register
            //	form_action=edit_attendee
            //	primary=318
            //	event_id=1
            //	coupon_code=
            //	groupon_code=
            //	attendee_num=1
            ?>

				<input type="hidden" name="id" value="<?php 
            echo $id;
            ?>
" />
				<input type="hidden" name="r_id" value="<?php 
            echo $registration_id;
            ?>
" />
				<input type="hidden" name="event_id" value="<?php 
            echo $event_id;
            ?>
" />
				<input type="hidden" name="attendee_action" value="update_attendee" />
				<input type="hidden" name="regevent_action" value="edit_attendee" />
				<input type="hidden" name="primary" value="<?php 
            echo $req_primary;
            ?>
" />
				
				<p class="event_form_submit">
					<input class="event-form-submit-btn" type="submit" name="submit" value="<?php 
            _e('Update Record', 'event_espresso');
            ?>
" />
				</p>
				
			</form>
			
<?php 
        } else {
            ?>
	
			<div class="event_espresso_error">
				<h3><?php 
            _e('An error occured.', 'event_espresso');
            ?>
</h3>
				<p>
					<?php 
            _e('The requested attendee data could not be found.<br/>Please refresh the page and try again or contact the site admin if problem\'s persist.', 'event_espresso');
            ?>
				</p>
			</div>
	
<?php 
        }
        ?>

		</div><!-- / .event-display-boxes -->
	</div><!-- / .event_espresso_form_wrapper .event-data-display -->

<?php 
    } else {
        _e('No attendee record was found.', 'event_espresso');
    }
}
 function event_espresso_add_attendees_to_db($event_id = NULL, $session_vars = NULL, $skip_check = FALSE)
 {
     do_action('action_hook_espresso_log', __FILE__, __FUNCTION__, '');
     //Security check using nonce
     if (empty($_POST['reg_form_nonce']) || !wp_verify_nonce($_POST['reg_form_nonce'], 'reg_nonce')) {
         print '<h3 class="error">' . __('Sorry, there was a security error and your registration was not saved.', 'event_espresso') . '</h3>';
         return;
     }
     global $wpdb, $org_options, $espresso_premium;
     //Defaults
     $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']);
     }
     //Check for existing registrations
     //check if user has already hit this page before ( ie: going back n forth thru reg process )
     $prev_session_id = isset($_SESSION['espresso_session']['id']) && !empty($_SESSION['espresso_session']['id']) ? $_SESSION['espresso_session']['id'] : '';
     if (is_null($session_vars)) {
         $SQL = "SELECT id FROM " . EVENTS_ATTENDEE_TABLE . " WHERE attendee_session=%s";
         $prev_session_attendee_id = $wpdb->get_col($wpdb->prepare($SQL, $_SESSION['espresso_session']['id']));
         if (!empty($prev_session_attendee_id)) {
             $_SESSION['espresso_session']['id'] = array();
             ee_init_session();
         }
     }
     //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, $prev_session_id, $event_id));
     $nmbr_of_regs = $wpdb->num_rows;
     static $loop_number = 1;
     // 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'])) {
             $SQL = "SELECT id, registration_id FROM " . EVENTS_ATTENDEE_TABLE . ' ';
             $SQL .= "WHERE attendee_session = %s ";
             $SQL .= $incomplete_filter;
             if ($mer_attendee_ids = $wpdb->get_results($wpdb->prepare($SQL, $prev_session_id))) {
                 foreach ($mer_attendee_ids as $v) {
                     //Added for seating chart addon
                     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));
                     }
                     //Delete the old attendee meta
                     do_action('action_hook_espresso_save_attendee_meta', $v->id, 'original_attendee_details', '', TRUE);
                 }
             }
             $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, $prev_session_id));
             //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, $prev_session_id));
             // 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++;
     //Check if added admin
     $skip_check = $skip_check || isset($data_source['admin']) ? TRUE : FALSE;
     //If added by admin, skip the recaptcha check
     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 event 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 $total_cost = 0;
         static $primary_att_id = NULL;
         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']) ? ee_sanitize_value($att_data_source['fname']) : '';
         $lname = isset($att_data_source['lname']) ? ee_sanitize_value($att_data_source['lname']) : '';
         $address = isset($att_data_source['address']) ? ee_sanitize_value($att_data_source['address']) : '';
         $address2 = isset($att_data_source['address2']) ? ee_sanitize_value($att_data_source['address2']) : '';
         $city = isset($att_data_source['city']) ? ee_sanitize_value($att_data_source['city']) : '';
         $state = isset($att_data_source['state']) ? ee_sanitize_value($att_data_source['state']) : '';
         $country_id = isset($att_data_source['country']) ? ee_sanitize_value($att_data_source['country']) : '';
         $zip = isset($att_data_source['zip']) ? ee_sanitize_value($att_data_source['zip']) : '';
         $phone = isset($att_data_source['phone']) ? ee_sanitize_value($att_data_source['phone']) : '';
         $email = isset($att_data_source['email']) ? ee_sanitize_value($att_data_source['email']) : '';
         $SQL = "SELECT question_groups, event_meta FROM " . EVENTS_DETAIL_TABLE . " WHERE id = %d";
         $questions = $wpdb->get_row($wpdb->prepare($SQL, $event_id));
         //echo '<h4>LQ : ' . $wpdb->last_query . '  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4>';
         $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 = (double) $data_source['event_cost'];
             $orig_price = (double) $data_source['event_cost'];
             $price_type = __('Admin', 'event_espresso');
         } 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 = (double) seating_chart::get_purchase_price($data_source['seat_id']);
             $orig_price = (double) $final_price;
             $price_type = $data_source['seat_id'];
         } elseif (isset($att_data_source['price_id']) && !empty($att_data_source['price_id'])) {
             $orig_price = event_espresso_get_orig_price_and_surcharge($att_data_source['price_id'], $event_id);
             $final_price = isset($att_data_source['price_id']) && !empty($data_source['price_id']) ? event_espresso_get_final_price(absint($att_data_source['price_id']), $event_id, $orig_price) : espresso_return_single_price($event_id);
             $price_type = isset($att_data_source['price_id']) && !empty($data_source['price_id']) ? espresso_ticket_information(array('type' => 'ticket', 'price_option' => absint($att_data_source['price_id']))) : '';
             $surcharge = event_espresso_calculate_surcharge((double) $orig_price->event_cost, (double) $orig_price->surcharge, $orig_price->surcharge_type);
             $orig_price = (double) number_format($orig_price->event_cost + $surcharge, 2, '.', '');
         } 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('|', ee_sanitize_value($data_source['price_option']), 2);
             $price_id = absint($price_options[0]);
             $price_type = $price_options[1];
             $orig_price = event_espresso_get_orig_price_and_surcharge($price_id, $event_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, '.', '');
         } else {
             $orig_price = isset($data_source['price_id']) && !empty($data_source['price_id']) ? event_espresso_get_orig_price_and_surcharge(absint($data_source['price_id']), $event_id) : espresso_return_single_price($event_id);
             $final_price = isset($data_source['price_id']) && !empty($data_source['price_id']) ? event_espresso_get_final_price(absint($data_source['price_id']), $event_id, $orig_price) : espresso_return_single_price($event_id);
             $price_type = isset($data_source['price_id']) && !empty($data_source['price_id']) ? espresso_ticket_information(array('type' => 'ticket', 'price_option' => absint($data_source['price_id']))) : '';
             $surcharge = isset($orig_price->surcharge) && isset($orig_price->event_cost) ? event_espresso_calculate_surcharge($orig_price->event_cost, $orig_price->surcharge, $orig_price->surcharge_type) : 0.0;
             $orig_price = isset($orig_price->event_cost) ? (double) number_format($orig_price->event_cost + $surcharge, 2, '.', '') : espresso_return_single_price($event_id);
         }
         $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 = '';
         if ($multi_reg) {
             $event_cost = $_SESSION['espresso_session']['grand_total'];
         }
         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 = 0.0;
         //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(get_option('date_format'));
             $amount_pd = !empty($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=" . absint($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 = absint($data_source['num_people']);
         } elseif (isset($event_meta['additional_attendee_reg_info']) && $event_meta['additional_attendee_reg_info'] == 1) {
             $num_people = absint($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'];
                 }
             }
         }
         $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;
         $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, 'country_id' => $country_id, '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, '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);
         $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');
         // save the attendee details - FINALLY !!!
         if (!$wpdb->insert(EVENTS_ATTENDEE_TABLE, $columns_and_values, $data_formats)) {
             $error = true;
         }
         //echo '<h4>LQ : ' . $wpdb->last_query . '  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4>';
         $attendee_id = $wpdb->insert_id;
         $attendee_data = $columns_and_values;
         $attendee_data['attendee_id'] = $attendee_id;
         $attendee_data['event_meta'] = $event_meta;
         //Save attendee hook
         do_action('action_hook_espresso_save_attendee_data', $attendee_data);
         //Save the attendee data as a meta value
         do_action('action_hook_espresso_save_attendee_meta', $attendee_id, 'original_attendee_details', serialize($attendee_data));
         // 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(ee_sanitize_value($_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;
                                         $price_type = $att_data_source['x_seat_id'][$k];
                                         $final_price = seating_chart::get_purchase_price($att_data_source['x_seat_id'][$k]);
                                         $orig_price = $final_price;
                                     } else {
                                         $seat_check = false;
                                         //Keeps the system from adding an additional attndee if no seat is selected
                                     }
                                 }
                             }
                         }
                         if ($seat_check) {
                             $ext_att_data_source = array('registration_id' => $registration_id, 'attendee_session' => $_SESSION['espresso_session']['id'], 'lname' => ee_sanitize_value($att_data_source['x_attendee_lname'][$k]), 'fname' => ee_sanitize_value($v), 'email' => ee_sanitize_value($att_data_source['x_attendee_email'][$k]), 'address' => empty($att_data_source['x_attendee_address'][$k]) ? '' : ee_sanitize_value($att_data_source['x_attendee_address'][$k]), 'address2' => empty($att_data_source['x_attendee_address2'][$k]) ? '' : ee_sanitize_value($att_data_source['x_attendee_address2'][$k]), 'city' => empty($att_data_source['x_attendee_city'][$k]) ? '' : ee_sanitize_value($att_data_source['x_attendee_city'][$k]), 'state' => empty($att_data_source['x_attendee_state'][$k]) ? '' : ee_sanitize_value($att_data_source['x_attendee_state'][$k]), 'zip' => empty($att_data_source['x_attendee_zip'][$k]) ? '' : ee_sanitize_value($att_data_source['x_attendee_zip'][$k]), 'phone' => empty($att_data_source['x_attendee_phone'][$k]) ? '' : ee_sanitize_value($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' => 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, $ext_att_data_source, $format);
                             //Added by Imon
                             $ext_attendee_id = $wpdb->insert_id;
                             $ext_att_data_source['attendee_id'] = $attendee_id;
                             $ext_att_data_source['event_meta'] = $event_meta;
                             //Save attendee hook
                             do_action('action_hook_espresso_save_attendee_data', $ext_att_data_source);
                             //Save the attendee data as a meta value
                             do_action('action_hook_espresso_save_attendee_meta', $ext_attendee_id, 'original_attendee_details', serialize($ext_att_data_source));
                             $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]);
                             }
                             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] = isset($att_data_source['x_attendee_' . $question_list->question_type . '_' . $question_list->id][$k]) && !empty($att_data_source['x_attendee_' . $question_list->question_type . '_' . $question_list->id][$k]) ? $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 espresso_export_ticket()
{
    do_action('action_hook_espresso_log', __FILE__, __FUNCTION__, '');
    //Version 2.0
    if (isset($_REQUEST['ticket_launch']) && $_REQUEST['ticket_launch'] == 'true') {
        echo espresso_ticket_launch(ee_sanitize_value(absint($_REQUEST['id'])), ee_sanitize_value($_REQUEST['r_id']));
    }
    //End Version 2.0
    //Deprecated version 1.0
    //Export PDF Ticket
    if (isset($_REQUEST['download_ticket']) && $_REQUEST['download_ticket'] == 'true') {
        if (file_exists(EVENT_ESPRESSO_UPLOAD_DIR . "/ticketing/template.php")) {
            require_once EVENT_ESPRESSO_UPLOAD_DIR . "/ticketing/template.php";
            //Old url string
            $r_id = espresso_return_reg_id();
            //Attendee id
            $a_id = isset($_REQUEST['id']) && !empty($_REQUEST['id']) ? $_REQUEST['id'] : false;
            if ($a_id != false && $r_id != false) {
                espresso_ticket($a_id, $r_id);
            }
        }
    }
    //End Deprecated version 1.0
}
function edit_attendee_record()
{
    do_action('action_hook_espresso_log', __FILE__, __FUNCTION__, '');
    global $wpdb, $org_options;
    $wpdb->show_errors();
    $notifications['success'] = array();
    $notifications['error'] = array();
    $failed_nonce_msg = '
<div id="message" class="error">
	<p>
		<strong>' . __('An Error Occurred. The request failed to pass a security check.', 'event_espresso') . '</strong><br/>
		<span style="font-size:.9em;">' . __('Please press the back button on your browser to return to the previous page.', 'event_espresso') . '</span>
	</p>
</div>';
    $attendee_num = 1;
    $is_additional_attendee = FALSE;
    // **************************************************************************
    // **************************** EDIT ATTENDEE  ****************************
    // **************************************************************************
    if ($_REQUEST['form_action'] == 'edit_attendee') {
        $id = isset($_REQUEST['id']) ? absint($_REQUEST['id']) : '';
        $registration_id = isset($_REQUEST['registration_id']) ? ee_sanitize_value($_REQUEST['registration_id']) : '';
        $multi_reg = FALSE;
        // check for multi reg, additional attendees, and verify reg id for primary attendee
        $SQL = "SELECT * FROM " . EVENTS_MULTI_EVENT_REGISTRATION_ID_GROUP_TABLE . " WHERE registration_id = %s";
        $check = $wpdb->get_row($wpdb->prepare($SQL, $registration_id));
        if ($check) {
            $registration_id = $check->primary_registration_id;
            $SQL = "SELECT distinct primary_registration_id, registration_id ";
            $SQL .= "FROM " . EVENTS_MULTI_EVENT_REGISTRATION_ID_GROUP_TABLE . " ";
            $SQL .= "WHERE primary_registration_id = %s";
            $registration_ids = $wpdb->get_results($wpdb->prepare($SQL, $registration_id), ARRAY_A);
            $multi_reg = TRUE;
        }
        // find the primary attendee id so we know which form to present since the additional attendees will have a different form
        $SQL = "SELECT id FROM " . EVENTS_ATTENDEE_TABLE . " WHERE registration_id =%s AND is_primary = 1 ";
        if ($r = $wpdb->get_row($wpdb->prepare($SQL, $registration_id))) {
            $primary_attendee = !empty($r->id) ? $r->id : $id;
            $is_additional_attendee = $primary_attendee != $id ? TRUE : FALSE;
        } else {
            $primary_attendee = FALSE;
        }
        // **************************************************************************
        // **************************  UPDATE PAYMENT  **************************
        // **************************************************************************
        if (!empty($_REQUEST['attendee_payment']) && $_REQUEST['attendee_payment'] == 'update_price') {
            if (!wp_verify_nonce($_REQUEST['_wpnonce'], 'edit_attendee_' . $registration_id . '_update_price_nonce')) {
                //wp_die( $failed_nonce_msg );
            }
            $upd_price = (double) number_format(abs(ee_sanitize_value($_REQUEST['final_price'])), 2, '.', '');
            $upd_qty = absint($_REQUEST['quantity']);
            $set_cols_and_values = array('final_price' => $upd_price, 'quantity' => $upd_qty);
            $set_format = array('%f', '%d');
            $where_cols_and_values = array('id' => $id);
            $where_format = array('%d');
            // run the update
            $upd_success = $wpdb->update(EVENTS_ATTENDEE_TABLE, $set_cols_and_values, $where_cols_and_values, $set_format, $where_format);
            // if there was an actual error
            if ($upd_success === FALSE) {
                $notifications['error'][] = __('An error occured. Attendee ticket price details could not be updated.', 'event_espresso');
            } else {
                // now we need to gather all the ticket prices for all attendees for the entire registraion and calculate a new total cost
                $upd_total = 0;
                $SQL = "SELECT payment_status, amount_pd, final_price, quantity, is_primary FROM " . EVENTS_ATTENDEE_TABLE . " WHERE registration_id = %s";
                if ($attendee_tickets = $wpdb->get_results($wpdb->prepare($SQL, $registration_id))) {
                    // loop thru tickets
                    foreach ($attendee_tickets as $attendee_ticket) {
                        // calculate total for each attendee and add to total cost
                        $upd_total += $attendee_ticket->final_price * $attendee_ticket->quantity;
                        // grab amount paid by primary attendee
                        if ($attendee_ticket->is_primary) {
                            $amount_pd = (double) $attendee_ticket->amount_pd;
                            $payment_status = $attendee_ticket->payment_status;
                        }
                    }
                }
                // format new total_cost
                $upd_total = (double) number_format($upd_total, 2, '.', '');
                // compare new total_cost with amount_pd
                if ($upd_total == $amount_pd) {
                    $upd_payment_status = 'Completed';
                    //DO NOT TRANSLATE
                } elseif ($upd_total > $amount_pd) {
                    $upd_payment_status = 'Pending';
                    //DO NOT TRANSLATE
                } elseif ($upd_total < $amount_pd) {
                    $upd_payment_status = 'Refund';
                    //DO NOT TRANSLATE
                }
                // compare old payment status with new payment status and update if things have changed
                if ($upd_payment_status != $payment_status) {
                    // update payment status for ALL attendees for the entire registration
                    $set_cols_and_values = array('payment_status' => $upd_payment_status);
                    $set_format = array('%s');
                    $where_cols_and_values = array('registration_id' => $registration_id);
                    $where_format = array('%s');
                    // run the update
                    $upd_success = $wpdb->update(EVENTS_ATTENDEE_TABLE, $set_cols_and_values, $where_cols_and_values, $set_format, $where_format);
                    // if there was an actual error
                    if ($upd_success === FALSE) {
                        $notifications['error'][] = __('An error occured while attempting to update the payment status for attendee from this registration.', 'event_espresso');
                    }
                }
                // now update the primary registrant's total cost field'
                $set_cols_and_values = array('total_cost' => $upd_total);
                $set_format = array('%f');
                $where_cols_and_values = array('id' => $id, 'is_primary' => TRUE);
                $where_format = array('%d', '%d');
                // run the update
                $upd_success = $wpdb->update(EVENTS_ATTENDEE_TABLE, $set_cols_and_values, $where_cols_and_values, $set_format, $where_format);
                // if there was an actual error
                if ($upd_success === FALSE) {
                    $notifications['error'][] = __('An error occured. The primary attendee ticket total could not be updated.', 'event_espresso');
                }
                // let's base our success on the lack of errors
                $notifications['success'][] = empty($notifications['error']) ? __('All attendee ticket price details have been successfully updated.', 'event_espresso') : __('Some attendee ticket price details were successfully updated, but the following error(s) may have prevented others from being updated:', 'event_espresso');
            }
        }
        // **************************************************************************
        // **************************  DELETE ATTENDEE  **************************
        // **************************************************************************
        if (!empty($_REQUEST['attendee_action']) && $_REQUEST['attendee_action'] == 'delete_attendee') {
            if (!wp_verify_nonce($_REQUEST['_wpnonce'], 'edit_attendee_' . $registration_id . '_delete_attendee_nonce')) {
                wp_die($failed_nonce_msg);
            }
            $SQL = "DELETE FROM " . EVENTS_ATTENDEE_TABLE . " WHERE id =%d";
            $del_results = $wpdb->query($wpdb->prepare($SQL, $id));
            if ($del_results === FALSE) {
                $notifications['error'][] = __('An error occured. The attendee could not be deleted.', 'event_espresso');
            } elseif ($del_results === 0) {
                $notifications['error'][] = __('The attendee record in the database could not be found and was therefore not deleted.', 'event_espresso');
            } else {
                if (defined('ESPRESSO_SEATING_CHART')) {
                    $SQL = "DELETE FROM " . EVENTS_SEATING_CHART_EVENT_SEAT_TABLE . " where attendee_id = %d";
                    if ($wpdb->query($wpdb->prepare($SQL, $id)) === FALSE) {
                        $notifications['error'][] = __('An error occured. The attendee seating chart data could not be deleted.', 'event_espresso');
                    }
                }
                // get id's for all attendees from this registration
                $SQL = "SELECT id from " . EVENTS_ATTENDEE_TABLE . " WHERE registration_id = %s";
                $attendees = $wpdb->query($wpdb->prepare($SQL, $registration_id));
                if ($attendees === FALSE) {
                    $notifications['error'][] = __('An error occured while attempting to retrieve additional attendee data from the database.', 'event_espresso');
                } else {
                    // update quantities for attendees
                    $SQL = " UPDATE " . EVENTS_ATTENDEE_TABLE . " SET quantity = IF(quantity IS NULL ,NULL,IF(quantity > 0,IF(quantity-1>0,quantity-1,1),0)) ";
                    $SQL .= "WHERE registration_id =%s";
                    if ($wpdb->query($wpdb->prepare($SQL, $registration_id)) === FALSE) {
                        $notifications['error'][] = __('An error occured while attempting to update additional attendee ticket quantities.', 'event_espresso');
                    }
                    event_espresso_cleanup_multi_event_registration_id_group_data();
                }
                // let's base our success on the lack of errors
                $notifications['success'][] = empty($notifications['error']) ? __('All attendee details have been successfully deleted.', 'event_espresso') : __('One or more errors may have prevented some attendee details from being successfully deleted.', 'event_espresso');
            }
            // **************************************************************************
            // **************************  UPDATE ATTENDEE  **************************
            // **************************************************************************
        } else {
            if (!empty($_REQUEST['attendee_action']) && $_REQUEST['attendee_action'] == 'update_attendee') {
                //printr( $_POST, '$_POST  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' );
                if (!wp_verify_nonce($_REQUEST['update_attendee_nonce'], 'edit_attendee_' . $registration_id . '_update_attendee_nonce')) {
                    wp_die($failed_nonce_msg);
                }
                //Update the price_option_type
                do_action('action_hook_espresso_save_attendee_meta', $id, 'price_option_type', isset($_POST['price_option_type']) && !empty($_POST['price_option_type']) ? ee_sanitize_value($_POST['price_option_type']) : 'DEFAULT');
                //Move attendee
                do_action('action_hook_espresso_attendee_mover_move');
                $event_id = isset($_POST['event_id']) ? $_POST['event_id'] : '';
                $txn_type = isset($_POST['txn_type']) ? $_POST['txn_type'] : '';
                $cols_and_values = array('fname' => isset($_POST['fname']) ? ee_sanitize_value($_POST['fname']) : '', 'lname' => isset($_POST['lname']) ? ee_sanitize_value($_POST['lname']) : '', 'address' => isset($_POST['address']) ? ee_sanitize_value($_POST['address']) : '', 'address2' => isset($_POST['address2']) ? ee_sanitize_value($_POST['address2']) : '', 'city' => isset($_POST['city']) ? ee_sanitize_value($_POST['city']) : '', 'state' => isset($_POST['state']) ? ee_sanitize_value($_POST['state']) : '', 'zip' => isset($_POST['zip']) ? ee_sanitize_value($_POST['zip']) : '', 'phone' => isset($_POST['phone']) ? ee_sanitize_value($_POST['phone']) : '', 'email' => isset($_POST['email']) ? sanitize_email($_POST['email']) : '');
                $cols_and_values_format = array('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s');
                // Update the time ?
                if (isset($_POST['start_time_id'])) {
                    $SQL = "SELECT ese.start_time, ese.end_time FROM " . EVENTS_START_END_TABLE . " ese WHERE ese.id=%d";
                    if ($times = $wpdb->get_results($wpdb->prepare($SQL, absint($_POST['start_time_id'])))) {
                        foreach ($times as $time) {
                            $start_time = $time->start_time;
                            $end_time = $time->end_time;
                        }
                        $cols_and_values['event_time'] = $start_time;
                        $cols_and_values['end_time'] = $end_time;
                        array_push($cols_and_values_format, '%s', '%s');
                    }
                }
                //Update price option
                if (isset($_POST['price_select']) && $_POST['price_select'] == TRUE) {
                    //Figure out if the person has registered using a price selection
                    $selected_price_option = isset($_POST['new_price_option']) && !empty($_POST['new_price_option']) ? $_POST['new_price_option'] : $_POST['price_option'];
                    $price_options = espresso_selected_price_option($selected_price_option);
                    $price_type = $price_options['price_type'];
                    $price_id = $price_options['price_id'];
                    $event_cost = number_format(event_espresso_get_orig_price($price_id), 2, '.', '');
                } else {
                    //If not using the price selection
                    $wpdb->get_results("SELECT price_type, event_cost FROM " . EVENTS_PRICES_TABLE . " WHERE id ='" . absint($_POST['price_id']) . "'");
                    $num_rows = $wpdb->num_rows;
                    if ($num_rows > 0) {
                        $event_cost = $wpdb->last_result[0]->event_cost;
                        $price_type = $wpdb->last_result[0]->price_type;
                    }
                }
                //Don't updat the price if the attendee is moved
                if (!isset($_POST['move_attendee'])) {
                    $cols_and_values['price_option'] = $price_type;
                    $cols_and_values['final_price'] = $event_cost;
                    $cols_and_values['orig_price'] = $event_cost;
                    array_push($cols_and_values_format, '%s', '%f', '%f');
                }
                //echo "<pre>".print_r($cols_and_values,true)."</pre>";
                //Run the update query
                $where_cols_and_values = array('id' => $id);
                $where_format = array('%d');
                $upd_success = $wpdb->update(EVENTS_ATTENDEE_TABLE, $cols_and_values, $where_cols_and_values, $cols_and_values_format, $where_format);
                // if there was an actual error
                if ($upd_success === FALSE) {
                    $notifications['error'][] = __('An error occured. Attendee details could not be updated.', 'event_espresso');
                }
                // 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, $id);
                            }
                        }
                    }
                }
                // Insert Additional Questions From Post Here
                $reg_id = $id;
                $SQL = "SELECT question_groups, event_meta FROM " . EVENTS_DETAIL_TABLE . " WHERE id = %d";
                $questions = $wpdb->get_row($wpdb->prepare($SQL, $event_id));
                $question_groups = unserialize($questions->question_groups);
                $event_meta = unserialize($questions->event_meta);
                if ($is_additional_attendee && isset($event_meta['add_attendee_question_groups']) && $event_meta['add_attendee_question_groups'] != NULL) {
                    $question_groups = $event_meta['add_attendee_question_groups'];
                }
                $questions_in = '';
                foreach ($question_groups as $g_id) {
                    $questions_in .= $g_id . ',';
                }
                $questions_in = substr($questions_in, 0, -1);
                $group_name = '';
                $counter = 0;
                //pull the list of questions that are relevant to this event
                $SQL = "SELECT q.*, q.id AS q_id, at.id AS a_id, at.*, qg.group_name, qg.show_group_description, qg.show_group_name ";
                $SQL .= "FROM " . EVENTS_QUESTION_TABLE . " q ";
                $SQL .= "LEFT JOIN " . EVENTS_ANSWER_TABLE . " at on q.id = at.question_id ";
                $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 .= "AND (at.attendee_id IS NULL OR at.attendee_id = '%d') ";
                $SQL .= "ORDER BY qg.id, q.id ASC";
                $questions = $wpdb->get_results($wpdb->prepare($SQL, $id));
                //			printr( $questions, '$questions  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' );
                $SQL = "SELECT id, question_id, answer FROM " . EVENTS_ANSWER_TABLE . " at WHERE at.attendee_id = %d";
                $answers = $wpdb->get_results($wpdb->prepare($SQL, $id), OBJECT_K);
                foreach ($answers as $answer) {
                    $answer_a[$answer->id] = $answer->question_id;
                }
                if ($questions) {
                    foreach ($questions as $question) {
                        //printr( $question, '$question  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' );
                        switch ($question->question_type) {
                            case "TEXT":
                            case "TEXTAREA":
                            case "SINGLE":
                            case "DROPDOWN":
                                if ($question->system_name != '') {
                                    $post_val = isset($_POST[$question->system_name]) ? $_POST[$question->system_name] : '';
                                } else {
                                    $post_val = isset($_POST[$question->question_type . '_' . $question->a_id]) ? $_POST[$question->question_type . '_' . $question->a_id] : '';
                                }
                                $post_val = apply_filters('filter_hook_espresso_admin_question_response', $post_val, $question);
                                $post_val = ee_sanitize_value(stripslashes($post_val));
                                break;
                            case "MULTIPLE":
                                $post_val = '';
                                for ($i = 0; $i < count($_POST[$question->question_type . '_' . $question->a_id]); $i++) {
                                    $pval = apply_filters('filter_hook_espresso_admin_question_response', trim($_POST[$question->question_type . '_' . $question->a_id][$i]), $question);
                                    $post_val .= $pval . ",";
                                }
                                $post_val = ee_sanitize_value(substr(stripslashes($post_val), 0, -1));
                                break;
                        }
                        //					echo '<h4>$post_val : ' . $post_val . '  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4>';
                        //					echo '<h4>$question->id : ' . $question->q_id . '  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4>';
                        //					printr( $answer_a, '$answer_a  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' );
                        if (in_array($question->q_id, $answer_a)) {
                            // existing answer
                            $set_cols_and_values = array('answer' => html_entity_decode(trim($post_val), ENT_QUOTES, 'UTF-8'));
                            //echo "<pre>".print_r($set_cols_and_values,true)."</pre>";
                            $set_format = array('%s');
                            $where_cols_and_values = array('attendee_id' => $id, 'question_id' => $question->q_id);
                            $where_format = array('%d', '%d');
                            // run the update
                            $upd_success = $wpdb->update(EVENTS_ANSWER_TABLE, $set_cols_and_values, $where_cols_and_values, $set_format, $where_format);
                            //echo '<h4>last_query : ' . $wpdb->last_query . '  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4>';
                        } else {
                            // new answer
                            $set_cols_and_values = array('registration_id' => $registration_id, 'attendee_id' => $id, 'question_id' => $question->q_id, 'answer' => html_entity_decode(trim($post_val), ENT_QUOTES, 'UTF-8'));
                            $set_format = array('%s', '%d', '%d', '%s');
                            // run the insert
                            $upd_success = $wpdb->insert(EVENTS_ANSWER_TABLE, $set_cols_and_values, $set_format);
                            //echo '<h4>last_query : ' . $wpdb->last_query . '  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4>';
                        }
                    }
                }
                // let's base our success on the lack of errors
                $notifications['success'][] = empty($notifications['error']) ? __('All attendee details have been successfully updated.', 'event_espresso') : __('One or more errors may have prevented some attendee details from being successfully updated.', 'event_espresso');
            }
        }
        // **************************************************************************
        // *************************  RETRIEVE ATTENDEE  *************************
        // **************************************************************************
        $counter = 0;
        $additional_attendees = NULL;
        $SQL = "SELECT att.*, evt.event_name, evt.question_groups, evt.event_meta, evt.additional_limit FROM " . EVENTS_ATTENDEE_TABLE . " att ";
        $SQL .= "JOIN " . EVENTS_DETAIL_TABLE . " evt ON att.event_id = evt.id ";
        // are we looking for an additional attendee ?
        if (isset($_REQUEST['attendee_num']) && $_REQUEST['attendee_num'] > 1 && isset($_REQUEST['id'])) {
            $SQL .= "WHERE  att.id = " . ee_sanitize_value($_REQUEST['id']);
        } else {
            // check for multi reg & additional attendees by first finding primary attendee
            $SQL2 = "SELECT primary_registration_id FROM " . EVENTS_MULTI_EVENT_REGISTRATION_ID_GROUP_TABLE . " WHERE registration_id = %s";
            if ($primary_registration_id = $wpdb->get_var($wpdb->prepare($SQL2, ee_sanitize_value($_REQUEST['registration_id'])))) {
                // now find all registrations
                $SQL3 = "SELECT registration_id FROM " . EVENTS_MULTI_EVENT_REGISTRATION_ID_GROUP_TABLE . " WHERE primary_registration_id = %s";
                $reg_ids = $wpdb->get_col($wpdb->prepare($SQL3, $primary_registration_id));
                $reg_ids = "'" . implode("','", $reg_ids) . "'";
            } else {
                $reg_ids = "'" . ee_sanitize_value($_REQUEST['registration_id']) . "'";
            }
            $SQL .= " WHERE registration_id IN ( {$reg_ids} ) ORDER BY att.id";
        }
        $attendees = $wpdb->get_results($wpdb->prepare($SQL, NULL));
        foreach ($attendees as $attendee) {
            if ($counter == 0) {
                $id = $attendee->id;
                $registration_id = $attendee->registration_id;
                $lname = $attendee->lname;
                $fname = $attendee->fname;
                $address = $attendee->address;
                $address2 = $attendee->address2;
                $city = $attendee->city;
                $state = $attendee->state;
                $zip = $attendee->zip;
                $email = $attendee->email;
                $payment = $attendee->payment;
                $phone = $attendee->phone;
                $date = $attendee->date;
                $payment_status = $attendee->payment_status;
                $txn_type = $attendee->txn_type;
                $txn_id = $attendee->txn_id;
                $quantity = $attendee->quantity;
                $payment_date = $attendee->payment_date;
                $event_id = $attendee->event_id;
                $event_name = $attendee->event_name;
                $question_groups = unserialize($attendee->question_groups);
                $event_meta = unserialize($attendee->event_meta);
                $coupon_code = $attendee->coupon_code;
                $is_additional_attendee = $primary_attendee != $id ? true : false;
                $attendee_limit = $attendee->additional_limit;
                $amount_pd = $attendee->amount_pd;
                $total_cost = $attendee->total_cost;
                $orig_price = $attendee->orig_price;
                $final_price = $attendee->final_price;
                $price_option = $attendee->price_option;
                $start_date = $attendee->start_date;
                $event_time = $attendee->event_time;
                //Create an array for the default/member price type
                $price_type_select = '';
                if (function_exists('espresso_members_version')) {
                    $p_values = array(array('id' => 'DEFAULT', 'text' => __('Default Pricing', 'event_espresso')), array('id' => 'MEMBER', 'text' => __('Member Pricing', 'event_espresso')));
                    $price_type_select = '<li>' . select_input('price_option_type', $p_values, apply_filters('action_hook_espresso_get_attendee_meta_value', $id, 'price_option_type'), 'id="price_option_type"') . '</li>';
                }
                // Added for seating chart addon
                $booking_info = "";
                if (defined('ESPRESSO_SEATING_CHART')) {
                    $seating_chart_id = seating_chart::check_event_has_seating_chart($event_id);
                    if ($seating_chart_id !== false) {
                        $seat = $wpdb->get_row("select scs.* , sces.id as booking_id from " . EVENTS_SEATING_CHART_SEAT_TABLE . " scs inner join " . EVENTS_SEATING_CHART_EVENT_SEAT_TABLE . " sces on scs.id = sces.seat_id where sces.attendee_id = '" . $id . "' ");
                        if ($seat !== NULL) {
                            $booking_info = $seat->custom_tag . " #booking id: " . $seat->booking_id;
                        }
                    }
                }
                $event_date = event_date_display($start_date . ' ' . $event_time, get_option('date_format') . ' g:i a');
                if ($is_additional_attendee && isset($event_meta['add_attendee_question_groups']) && $event_meta['add_attendee_question_groups'] != NULL) {
                    $question_groups = $event_meta['add_attendee_question_groups'];
                }
                $counter++;
            } else {
                $additional_attendees[$attendee->id] = array('full_name' => $attendee->fname . ' ' . $attendee->lname, 'email' => $attendee->email, 'phone' => $attendee->phone);
            }
        }
        // display success messages
        if (!empty($notifications['success'])) {
            $success_msg = implode($notifications['success'], '<br />');
            ?>
				
			<div id="message" class="updated fade">
				<p>
					<strong><?php 
            echo $success_msg;
            ?>
</strong>
				</p>
			</div>

		<?php 
        }
        // display error messages
        if (!empty($notifications['error'])) {
            $error_msg = implode($notifications['error'], '<br />');
            ?>
				
			<div id="message" class="error">
				<p>
					<strong><?php 
            echo $error_msg;
            ?>
</strong>
				</p>
			</div>

		<?php 
        }
        ?>
		
<div>		
	<p>
		<a href="admin.php?page=events&event_id=<?php 
        echo $event_id;
        ?>
&event_admin_reports=list_attendee_payments">
			<strong>&laquo;&nbsp;<?php 
        _e('Back to Attendees List', 'event_espresso');
        ?>
</strong>
		</a>
	</p>
</div>

<div class="metabox-holder">
	<div class="postbox">
		<h3>
			<?php 
        _e('Registration Id <a href="admin.php?page=events&event_admin_reports=edit_attendee_record&event_id=' . $event_id . '&registration_id=' . $registration_id . '&form_action=edit_attendee">#' . $registration_id . '</a> | ID #' . $id . ' | Name: ' . $fname . ' ' . $lname . ' | Registered For:', 'event_espresso');
        ?>
			<a href="admin.php?page=events&event_admin_reports=list_attendee_payments&event_id=<?php 
        echo $event_id;
        ?>
"><?php 
        echo stripslashes_deep($event_name);
        ?>
</a> - <?php 
        echo $event_date;
        ?>
		</h3>
		<div class="inside">
			<table width="100%">
				<tr>
					<td width="50%" valign="top">
						<form method="post" action="<?php 
        echo $_SERVER['REQUEST_URI'];
        ?>
" class="espresso_form" id="attendee_details">
							<h4 class="qrtr-margin">
								<?php 
        _e('Registration Information', 'event_espresso');
        ?>
								<?php 
        echo $is_additional_attendee == false ? '[ <span class="green_text">' . __('Primary Attendee Record', 'event_espresso') . '</span> ]' : '[ <a href="admin.php?page=events&event_admin_reports=edit_attendee_record&event_id=' . $event_id . '&registration_id=' . $registration_id . '&form_action=edit_attendee">View/Edit Primary Attendee</a> ]';
        ?>
							</h4>
							<fieldset>
								<ul>
									
									<?php 
        echo $price_type_select;
        ?>
									
									<li id="standard_price_selection">
										<?php 
        do_action('action_hook_espresso_attendee_admin_price_dropdown', $event_id, array('show_label' => TRUE, 'label' => 'Price Option', 'current_value' => $price_option));
        ?>
 
									</li>
									<li id="members_price_selection">
										<?php 
        do_action('action_hook_espresso_attendee_admin_price_dropdown_member', $event_id, array('show_label' => TRUE, 'label' => 'Member Price Option', 'current_value' => $price_option));
        ?>
 
									</li>
									
									<li>
										<?php 
        $time_id = 0;
        $SQL = "SELECT id FROM " . EVENTS_START_END_TABLE . " WHERE event_id=%d AND start_time =%s";
        if ($event_time = $wpdb->get_row($wpdb->prepare($SQL, $event_id, $event_time))) {
            $time_id = $event_time->id;
        }
        echo event_espresso_time_dropdown($event_id, $label = 1, $multi_reg = 0, $time_id);
        ?>
									</li>
									<li>
										<?php 
        //Added for seating chart addon.  Creates a field to select a seat from a popup.
        do_action('ee_seating_chart_css');
        do_action('ee_seating_chart_js');
        do_action('ee_seating_chart_flush_expired_seats');
        do_action('espresso_seating_chart_select', $event_id, $booking_info);
        ?>
									</li>
									<li>
										<?php 
        if (count($question_groups) > 0) {
            $questions_in = '';
            foreach ($question_groups as $g_id) {
                $questions_in .= $g_id . ',';
            }
            $questions_in = substr($questions_in, 0, -1);
            $group_name = '';
            $counter = 0;
            $FILTER = '';
            if (isset($event_meta['additional_attendee_reg_info']) && $event_meta['additional_attendee_reg_info'] == '2' && isset($_REQUEST['attendee_num']) && $_REQUEST['attendee_num'] > 1) {
                $FILTER .= " AND qg.system_group = 1 ";
            }
            //pull the list of questions that are relevant to this event
            $SQL = "SELECT q.*, at.*, qg.group_name, qg.show_group_description, qg.show_group_name ";
            $SQL .= "FROM " . EVENTS_QUESTION_TABLE . " q ";
            $SQL .= "LEFT JOIN " . EVENTS_ANSWER_TABLE . " at on q.id = at.question_id ";
            $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 .= "AND ( at.attendee_id IS NULL OR at.attendee_id = %d ) ";
            $SQL .= $FILTER . " ";
            $SQL .= "ORDER BY qg.id, q.id ASC";
            $questions = $wpdb->get_results($wpdb->prepare($SQL, $id));
            $num_rows = $wpdb->num_rows;
            if ($num_rows > 0) {
                //Output the questions
                $question_displayed = array();
                foreach ($questions as $question) {
                    $counter++;
                    if (!in_array($question->id, $question_displayed)) {
                        $question_displayed[] = $question->id;
                        //echo '<p>';
                        echo event_form_build_edit($question, $question->answer, $show_admin_only = true);
                        //echo "</p>";
                        #echo $counter == $num_rows ? '</fieldset>' : '';
                    }
                }
            }
            //end questions display
        }
        ?>
									</li>
									
									<?php 
        do_action('action_hook_espresso_attendee_mover_events_list', $event_id);
        ?>
									<?php 
        echo espresso_hidden_price_id($event_id);
        ?>
									<input type="hidden" name="new_price_option" id="new_price_option-<?php 
        echo $event_id;
        ?>
" value="<?php 
        echo $event_id . '|' . $price_option;
        ?>
" />
									<input type="hidden" name="id" value="<?php 
        echo $id;
        ?>
" />
									<input type="hidden" name="registration_id" value="<?php 
        echo $registration_id;
        ?>
" />
									<input type="hidden" name="event_id" value="<?php 
        echo $event_id;
        ?>
" />
									<input type="hidden" name="display_action" value="view_list" />
									<input type="hidden" name="form_action" value="edit_attendee" />
									<input type="hidden" name="attendee_action" value="update_attendee" />
									<?php 
        wp_nonce_field('edit_attendee_' . $registration_id . '_update_attendee_nonce', 'update_attendee_nonce');
        ?>
									<li>
										<input type="submit" name="Submit" class="button-primary action"  value="<?php 
        _e('Update Record', 'event_espresso');
        ?>
" />
									</li>
								</ul>
							</fieldset>
						</form></td>
					<td  width="50%" valign="top">
						<?php 
        if (count($additional_attendees) > 0) {
            ?>
 
						<h4>
							<?php 
            _e('Additional Attendees', 'event_espresso');
            ?>
						</h4>
						<ol>
							<?php 
            foreach ($additional_attendees as $att => $row) {
                $attendee_num++;
                ?>
							<li>
								<?php 
                // create edit link
                $edit_att_url_params = array('event_admin_reports' => 'edit_attendee_record', 'form_action' => 'edit_attendee', 'registration_id' => $registration_id, 'id' => $att, 'attendee_num' => $attendee_num, 'event_id' => $event_id);
                // add url params
                $edit_attendee_link = add_query_arg($edit_att_url_params, 'admin.php?page=events');
                ?>
								
								<a href="<?php 
                echo $edit_attendee_link;
                ?>
" title="<?php 
                _e('Edit Attendee', 'event_espresso');
                ?>
">
									<strong><?php 
                echo $row['full_name'];
                ?>
</strong> (<?php 
                echo $row['email'];
                ?>
)
								</a>
								&nbsp;&nbsp;|&nbsp;&nbsp;
								<?php 
                // create delete link
                $delete_att_url_params = array('event_admin_reports' => 'edit_attendee_record', 'form_action' => 'edit_attendee', 'attendee_action' => 'delete_attendee', 'registration_id' => $registration_id, 'id' => $att, 'event_id' => $event_id);
                // add url params
                $delete_attendee_link = add_query_arg($delete_att_url_params, 'admin.php?page=events');
                // add nonce
                $delete_attendee_link = wp_nonce_url($delete_attendee_link, 'edit_attendee_' . $registration_id . '_delete_attendee_nonce');
                ?>
								
								<a href="<?php 
                echo $delete_attendee_link;
                ?>
" title="<?php 
                _e('Delete Attendee', 'event_espresso');
                ?>
" onclick="return confirmDelete();">
									<?php 
                _e('Delete', 'event_espresso');
                ?>
								</a>
							</li>
							<?php 
            }
            ?>
						</ol>
						<?php 
        }
        ?>
						
						
						<br/>
						<h4 class="qrtr-margin"><?php 
        _e('Ticket Prices', 'event_espresso');
        ?>
</h4>
						
						<form method="POST" action="<?php 
        echo $_SERVER['REQUEST_URI'];
        ?>
&status=saved" class="espresso_form">
							<fieldset>
								<ul>
									<li>
											<strong class="att-tckt-prc-lbl"><?php 
        _e('Payment Status:', 'event_espresso');
        ?>
</strong> 
											<?php 
        echo $payment_status;
        ?>
 <?php 
        echo event_espresso_paid_status_icon($payment_status);
        ?>
&nbsp;&nbsp;[&nbsp;<a href="admin.php?page=events&amp;attendee_pay=paynow&amp;form_action=payment&amp;registration_id=<?php 
        echo $registration_id;
        ?>
&amp;event_admin_reports=enter_attendee_payments&amp;event_id=<?php 
        echo $event_id;
        ?>
" title="<?php 
        _e('Edit Payment', 'event_espresso');
        ?>
">
											<?php 
        _e('View/Edit Payment', 'event_espresso');
        ?>
											</a>&nbsp;]
									</li>
									<li>
											<strong class="att-tckt-prc-lbl"><?php 
        _e('Transaction ID:', 'event_espresso');
        ?>
</strong> 
											<?php 
        echo !empty($txn_id) ? $txn_id : 'N/A';
        ?>
									</li>
									<li>
											<strong class="att-tckt-prc-lbl"><?php 
        _e('Date Paid:', 'event_espresso');
        ?>
</strong> 
											<?php 
        echo !empty($payment_date) ? event_date_display($payment_date) : 'N/A';
        ?>
									</li>
									<li>
											<strong class="att-tckt-prc-lbl">
											<?php 
        _e('Total Amount Owing:', 'event_espresso');
        ?>
											</strong>
											<?php 
        echo $org_options['currency_symbol'];
        echo $total_cost;
        ?>
									</li>
									<li>
											<strong class="att-tckt-prc-lbl"><?php 
        _e('Total Amount Paid to Date:', 'event_espresso');
        ?>
</strong> 
											<?php 
        echo $org_options['currency_symbol'] . $amount_pd;
        //echo espresso_attendee_price(array('attendee_id' => $id, 'reg_total' => true));
        ?>
									</li>
									<li>
										<h6 class="qrtr-margin"><strong><?php 
        _e('Attendee Ticket Fees:', 'event_espresso');
        ?>
</strong></h6>
										<div  <?php 
        if (isset($_REQUEST['show_payment']) && $_REQUEST['show_payment'] == 'true') {
            echo ' class="yellow_inform"';
        }
        ?>
>
											<table  border="0">
												<tr>
													<td  align="left" valign="top">
														<label><?php 
        _e('Amount:', 'event_espresso');
        ?>
 ( <?php 
        echo $org_options['currency_symbol'];
        ?>
 )</label>
													</td>
													<td  align="center" valign="top">
														<label><?php 
        _e('# Tickets:', 'event_espresso');
        ?>
</label>
													</td>
													<td  align="right" valign="top">
														<label class="algn-rght"><?php 
        _e('Total:', 'event_espresso');
        ?>
</label>
													</td>
												</tr>
												<tr>
													<td align="left" valign="top">
														<input name="final_price" class="small-text algn-rght" type="text" value ="<?php 
        echo $final_price;
        ?>
" />
													</td>
													<td align="center" valign="top">
														<?php 
        // number of tickets currently purchased
        $quantity = !empty($quantity) ? $quantity : 1;
        // availalbe spaces left for event
        $available_spaces = get_number_of_attendees_reg_limit($event_id, 'number_available_spaces');
        if ($available_spaces != 'Unlimited') {
            // first add our purchased tickets ($quantity) back into available spaces
            // ( becuase a sold out show incluldes these tickets here, so admin should be allowed to play with these numbers - think about it )
            $available_spaces += $quantity;
            $attendee_limit = $attendee_limit <= $available_spaces ? $attendee_limit : $available_spaces;
        }
        // final check to make sure that attendee limit has to at LEAST be the number of tickets this attendee has already purchased
        // otherwise the ticket quantity selector may display less than what this attendee has already purchased
        $attendee_limit = $attendee_limit < $quantity ? $quantity : $attendee_limit;
        ?>
														<select name="quantity" class="price_id">
														<?php 
        for ($i = 0; $i <= $attendee_limit; $i++) {
            $selected = $i == $quantity ? ' selected="selected" ' : '';
            ?>
															<option <?php 
            echo $selected;
            ?>
 value="<?php 
            echo $i;
            ?>
"><?php 
            echo $i;
            ?>
</option>
														<?php 
        }
        ?>
														</select>
														<!--<input name="quantity" type="text" value ="<?php 
        echo !empty($quantity) ? $quantity : 1;
        ?>
"  />-->
													</td>
													<td  align="right" valign="top">
														<?php 
        $ticket_total = (double) ($final_price * $quantity) > 0 ? number_format($final_price * $quantity, 2, '.', '') : 0.0;
        ?>
														<input class="small-text algn-rght" type="text" name="total_owing" disabled="true" value ="<?php 
        echo $ticket_total;
        ?>
" />
													</td>
												</tr>
											</table>
										</div>
									</li>
									<li>
											<strong class="att-tckt-prc-lbl"><?php 
        _e('Original Ticket Price:', 'event_espresso');
        ?>
</strong> 
											<?php 
        echo $org_options['currency_symbol'] . '&nbsp;' . $orig_price;
        ?>
&nbsp;&nbsp;/&nbsp;&nbsp;<?php 
        _e('ticket', 'event_espresso');
        ?>
								
									</li>
									<li>
										<br/>
										<input type="submit" name="submit_ticket_prices" class="button-primary action"  value="Update Price" />
									</li>
								</ul>
							</fieldset>
							<input type="hidden" name="id" value="<?php 
        echo $id;
        ?>
" />
							<input type="hidden" name="registration_id" value="<?php 
        echo $registration_id;
        ?>
" />
							<input type="hidden" name="form_action" value="edit_attendee" />
							<input type="hidden" name="event_id" value="<?php 
        echo $event_id;
        ?>
" />
							<input type="hidden" name="attendee_payment" value="update_price" />
							<?php 
        wp_nonce_field('edit_attendee_' . $registration_id . '_update_price_nonce');
        ?>
						</form>
						
					</td>
				</tr>
			</table>
		</div>
	</div>
</div>
			<script type="text/javascript">
				jQuery(document).ready(function($) {
					// Remove li parent for input 'values' from page if 'text' box or 'textarea' are selected
					<?php 
        if (function_exists('espresso_members_version')) {
            ?>
						var selectValue = jQuery('select#price_option_type option:selected').val();
					<?php 
        } else {
            ?>
						var selectValue = 'DEFAULT';
					<?php 
        }
        ?>
					//alert(selectValue + ' - this is initial value');
					
					if(selectValue == 'DEFAULT'){
						jQuery('#members_price_selection').hide();
						jQuery('select#price_option-<?php 
        echo $event_id;
        ?>
').bind('change', function() {
							var new_standard_SelectValue = jQuery('select#price_option-<?php 
        echo $event_id;
        ?>
 option:selected').val();
							jQuery('#new_price_option-<?php 
        echo $event_id;
        ?>
').val(new_standard_SelectValue);
						});	
					}else{
						jQuery('#standard_price_selection').hide();
						jQuery('select#members_price_option-<?php 
        echo $event_id;
        ?>
').bind('change', function() {
						var new_member_SelectValue = jQuery('select#members_price_option-<?php 
        echo $event_id;
        ?>
 option:selected').val();
							jQuery('#new_price_option-<?php 
        echo $event_id;
        ?>
').val(new_member_SelectValue);
						});
					}
					
					jQuery('select#price_option_type').bind('change', function() {
						var selectValue = jQuery('select#price_option_type option:selected').val();
							  
						if (selectValue == 'MEMBER') {
							//alert(selectValue);
							jQuery('#members_price_selection').fadeIn('fast');
							jQuery('#standard_price_selection').fadeOut('fast');
							//move to hidden field
							var member_SelectValue = jQuery('select#members_price_option-<?php 
        echo $event_id;
        ?>
 option:selected').val();
							jQuery('#new_price_option-<?php 
        echo $event_id;
        ?>
').val(member_SelectValue);
							
							jQuery('select#members_price_option-<?php 
        echo $event_id;
        ?>
').bind('change', function() {
							var new_member_SelectValue = jQuery('select#members_price_option-<?php 
        echo $event_id;
        ?>
 option:selected').val();
								jQuery('#new_price_option-<?php 
        echo $event_id;
        ?>
').val(new_member_SelectValue);
							});
					
						} else {
							//alert(selectValue);
							jQuery('#standard_price_selection').fadeIn('fast');
							jQuery('#members_price_selection').fadeOut('fast');
							//move to hidden field
							var standard_SelectValue = jQuery('select#price_option-<?php 
        echo $event_id;
        ?>
 option:selected').val();
							jQuery('#new_price_option-<?php 
        echo $event_id;
        ?>
').val(standard_SelectValue);
							
							jQuery('select#price_option-<?php 
        echo $event_id;
        ?>
').bind('change', function() {
								var new_standard_SelectValue = jQuery('select#price_option-<?php 
        echo $event_id;
        ?>
 option:selected').val();
								jQuery('#new_price_option-<?php 
        echo $event_id;
        ?>
').val(new_standard_SelectValue);
							});	
						}
					});
					
				});
			</script>
<?php 
    }
}