function epl_excel_attendee_list()
 {
     $event_id = $_REQUEST['event_id'];
     $_totals = $this->get_event_regis_snapshot($_REQUEST['event_id']);
     //echo "<pre class='prettyprint'>" . print_r( $_totals, true ) . "</pre>";
     $this->set_event_regis_post_ids($_REQUEST['event_id']);
     global $event_details;
     //epl_log( "debug", "<pre>" . __LINE__ . '> ' . print_r($event_details, true ) . "</pre>" );
     $event_title = $event_details['post_title'];
     $filename = str_replace(" ", "-", $event_title) . "_" . date_i18n("m-d-Y");
     /* header( "Content-type: application/x-msdownload; charset=UTF-8", true, 200 );
        header( "Content-Disposition: attachment; filename={$filename}.csv" );
        header( "Pragma: no-cache" );
        header( "Expires: 0" ); */
     //$this->setup_event_details( $event_id );
     $this->get_values();
     //echo "<pre class='prettyprint'>" . print_r($event_details, true). "</pre>";
     $event_ticket_buyer_forms = array_flip((array) $event_details['_epl_primary_regis_forms']);
     $event_addit_forms = isset($event_details['_epl_addit_regis_forms']) && $event_details['_epl_addit_regis_forms'] != '' ? array_flip($event_details['_epl_addit_regis_forms']) : array();
     //find the list of all forms
     $available_forms = $this->get_list_of_available_forms();
     $available_fields = $this->get_list_of_available_fields();
     //isolate the forms that are selected inside the event
     $ticket_buyer_forms = array_intersect_key($available_forms, $event_ticket_buyer_forms);
     $addit_forms = array_intersect_key($available_forms, $event_addit_forms);
     //This will combine all the fields in all the forms so that we can construct a header row.
     $tickey_buyer_fields = array();
     foreach ($ticket_buyer_forms as $_form_id => $_form_info) {
         $tickey_buyer_fields += $_form_info['epl_form_fields'];
     }
     $event_addit_fields = array();
     foreach ($addit_forms as $_form_id => $_form_info) {
         $event_addit_fields += $_form_info['epl_form_fields'];
     }
     $epl_fields_inside_form = array_flip($tickey_buyer_fields);
     //get the field ids inside the form
     $epl_addit_fields_inside_form = array_flip($event_addit_fields);
     //get the field ids inside the form
     //when creating a form in form manager, the user may rearrange fields.  Find their desired order
     $epl_fields_to_display = $this->epl_util->sort_array_by_array($available_fields, $epl_fields_inside_form);
     $epl_addit_fields_to_display = $this->epl_util->sort_array_by_array($available_fields, $epl_addit_fields_inside_form);
     $epl_fields_to_display = $epl_fields_to_display + $epl_addit_fields_to_display;
     $csv_row = '';
     $header_row = array();
     $header_pulled = false;
     $row = array();
     $header_row[] = '';
     $header_row[] = epl__('Registration ID');
     //$header_row[] = epl__( 'Regis Date' );
     //$header_row[] = epl__( 'Event Date' );
     //$header_row[] = epl__( 'Time' );
     $header_row[] = epl__('Ticket');
     $header_row[] = epl__('Status');
     $header_row[] = epl__('Payment Method');
     $header_row[] = epl__('Total');
     $header_row[] = epl__('Amount Paid');
     $regis_ids = $this->get_event_regis_post_ids(false);
     //as of 1.1, the dates are stored as timestamps.
     //This will format the date for display based on the settings admin date format.
     foreach ($event_details['_epl_start_date'] as $k => &$v) {
         $v = epl_admin_date_display($v);
     }
     $_d = array();
     foreach ($regis_ids as $regis_id => $att_count) {
         //$regis_data = $this->get_post_meta_all( $regis_id );
         $regis_data = $this->setup_regis_details($regis_id);
         // epl_log( "debug", "<pre>" . __LINE__ . '> ' . print_r($regis_data, true ) . "</pre>" );
         //Sometime there may be incomplete db records.  These will cause issues below.
         //In those cases, skip and move to the next item
         if (!isset($regis_data['_epl_dates']['_epl_start_date'][$event_id])) {
             continue;
         }
         $event_times = $regis_data['_epl_dates']['_epl_start_time'][$event_id];
         $event_prices = $regis_data['_epl_dates']['_epl_start_time'][$event_id];
         $regis_date = implode(' & ', array_intersect_key($event_details['_epl_start_date'], array_flip((array) $regis_data['_epl_dates']['_epl_start_date'][$event_id])));
         $regis_time = implode(' & ', array_intersect_key($event_details['_epl_start_time'], array_flip((array) $regis_data['_epl_dates']['_epl_start_time'][$event_id])));
         $date_labels = array();
         $date_labels[0] = '';
         $time_labels = array();
         $time_labels[0] = '';
         $ticket_labels = array();
         $ticket_labels[0] = $att_count;
         $purchased_tickets = (array) $regis_data['_epl_dates']['_att_quantity'][$event_id];
         $start = 1;
         foreach ($purchased_tickets as $price_id => $qty) {
             $_qty = is_array($qty) ? array_sum($qty) : $qty;
             //current( $qty );
             if ($_qty > 0) {
                 $date_label[] = current((array) $regis_data['_epl_dates']['_epl_start_date'][$event_id]);
                 if (epl_get_element('_epl_pricing_type', $event_details) == 10) {
                     if (in_array($event_details['_epl_price_parent_time_id'][$price_id], (array) $regis_data['_epl_dates']['_epl_start_time'][$event_id])) {
                         $time_labels = array_pad($time_labels, $start + $_qty, epl_get_element($event_details['_epl_price_parent_time_id'][$price_id], $event_details['_epl_start_time']));
                     } else {
                         $time_labels = array_pad($time_labels, $start + $_qty, '');
                     }
                 }
                 $ticket_labels = array_pad($ticket_labels, $start + $_qty, $event_details['_epl_price_name'][$price_id]);
                 $start += $_qty;
             }
         }
         $_r = array();
         $regis_status = isset($regis_data['_epl_regis_status']) ? $this->ind_fields['_epl_regis_status']['options'][$regis_data['_epl_regis_status']] : '';
         $payment_method = isset($regis_data['_epl_payment_method']) && $regis_data['_epl_payment_method'] != '' ? $this->ind_fields['_epl_payment_method']['options'][$regis_data['_epl_payment_method']] : '';
         $grand_total = epl_get_formatted_curr(epl_nz($regis_data['_epl_grand_total'], 0.0));
         $amount_paid = epl_get_formatted_curr(epl_nz($regis_data['_epl_payment_amount'], 0.0));
         for ($i = 0; $i <= $att_count; $i++) {
             $registrant = false;
             $attendee_info = $regis_data['_epl_attendee_info'];
             if ($i == 0) {
                 $registrant = true;
                 $row[] = epl__('Registrant');
             } else {
                 $row[] = epl_get_element('_epl_addit_regis_form_counter_label', $event_details, epl__('Attendee'));
                 //$grand_total = '';
                 //$amount_paid = '';
                 //$regis_status = '';
                 //$payment_method = '';
             }
             $row[] = $regis_data['__epl']['_regis_id'];
             //$row[] = $regis_data['post_date'];
             //$row[] = epl_escape_csv_val( $regis_date );
             //$row[] = $regis_time; //(epl_is_date_level_time ( ))?$regis_time:$time_labels[$i]; //
             $row[] = htmlspecialchars_decode($ticket_labels[$i]);
             //$regis_price;
             $row[] = $regis_status;
             $row[] = $payment_method;
             $row[] = epl_get_currency_symbol($grand_total);
             $row[] = $amount_paid;
             foreach ($epl_fields_to_display as $field_id => $field_atts) {
                 if (!$header_pulled) {
                     $header_row[] = epl_escape_csv_val(html_entity_decode(htmlspecialchars_decode($field_atts['label']), ENT_QUOTES));
                 }
                 $value = '';
                 $value = isset($attendee_info[$field_id][$event_id][$i]) ? $attendee_info[$field_id][$event_id][$i] : '';
                 if ($field_atts['input_type'] == 'select' || $field_atts['input_type'] == 'radio') {
                     $value = isset($field_atts['epl_field_choice_text'][$value]) && $field_atts['epl_field_choice_text'][$value] != '' ? $field_atts['epl_field_choice_text'][$value] : $value;
                 } elseif ($field_atts['input_type'] == 'checkbox') {
                     $value = implode(',', array_intersect_key($field_atts['epl_field_choice_text'], array_flip((array) $value)));
                 } else {
                     $value = html_entity_decode(htmlspecialchars_decode(epl_get_element($i, $attendee_info[$field_id][$event_id])), ENT_QUOTES);
                 }
                 $row[] = htmlentity_decode($value, ENT_QUOTES);
                 //decode special chars (Swedish, Nordic)
                 //array_walk( $row, create_function( '&$item', '$item = utf8_decode($item);' ) );
             }
             $header_pulled = true;
             if (!$registrant) {
                 $_d[] = $row;
             }
             //$csv_row .= implode( ",", $row ) . "\r\n";
             $row = array();
         }
     }
     $filename = epl__('Attendee List') . ', ' . $event_title . ", " . date_i18n("F j, Y");
     $this->excel_file_generator($header_row, $_d, $filename);
     //echo implode( ",", $header_row ) . "\r\n";
     //echo $csv_row;
     exit;
 }
 /**
  * Creates fields for different areas of Events Planner
  *
  * @since 1.0.0
  * @param int $var
  * @return string
  */
 function render_fields($args)
 {
     global $fields, $event_details;
     extract($args);
     $defaults = array('_view' => 0, '_type' => 'ind', '_rows' => 1, '_content' => '');
     $meta = wp_parse_args($meta, $defaults);
     $_table = $section;
     //$fields[$section];
     if (empty($_table) || empty($fields_to_display)) {
         return null;
     }
     //make the values of the arrays into keys
     $fields_to_display = array_flip($fields_to_display);
     //return only the array keys that match our $fields_to_display array
     $fields_to_display = array_intersect_key((array) $_table, $fields_to_display);
     //if we want to see the form in a table row format
     if ($meta['_type'] == 'row') {
         //For fields that are added via a filter for the first time and there is data for an event, there will not be any
         //data for the new fields.  We grab the keys of the master field (usually the first one), so that we can assign
         //the keys to the new field.  Otherwise, if there are already rows of data, only one row will be returned
         $master_keys = '';
         $_master_key = '';
         $r = array();
         //The number of rows to display.  This is determined by how many rows of data there are
         for ($i = 0; $i < $meta['_rows']; $i++) {
             $_r = '';
             $_row_key = '';
             if ($meta['_view'] == 'raw') {
                 $_r = array();
             }
             $tmp_key = $this->make_unique_id(6);
             //cycle through the fields that need to be displayed (from the config array)
             foreach ($fields_to_display as $field_name => $field_attr) {
                 $field_attr['input_slug'] = $field_name;
                 //$field_attr['key'] = '';
                 //if there is a value associated, meaning it is being edited
                 if (isset($meta['value'])) {
                     //prepare the value to be passed to the next function
                     if (isset($field_attr['parent_keys'])) {
                         $master_keys = isset($meta['value'][$field_name]) ? $meta['value'][$field_name] : '';
                     }
                     $field_attr['value'] = isset($meta['value'][$field_name]) ? $meta['value'][$field_name] : '';
                     $k = '';
                     //if the value is an array (from dynamically created fields)
                     if (isset($meta['value'][$field_name]) && is_array($meta['value'][$field_name])) {
                         $k = array_keys($meta['value'][$field_name]);
                         //will be used for checking dinamically added row data
                         $field_attr['value'] = $meta['value'][$field_name];
                         //$field_attr['key'] = epl_get_element( $i, $k ); //the selected row, for select, radio, checkbox
                         $field_attr['key'] = $_row_key == '' ? epl_get_element($i, $k) : $_row_key;
                         //the selected row, for select, radio, checkbox
                     } elseif ($master_keys != '') {
                         //this will be used for newly added fields that will be stores as rows, like dates, times....
                         $k = array_keys((array) $master_keys);
                         $field_attr['value'] = $this->remove_array_vals($master_keys);
                         //$field_attr['key'] = $k[$i];
                         $field_attr['key'] = $_row_key == '' ? epl_get_element($i, $k) : $_row_key;
                     }
                     if ($_row_key == '') {
                         if (isset($k[$i])) {
                             $_row_key = $k[$i];
                         } elseif (isset($tmp_key)) {
                             $_row_key = $tmp_key;
                         }
                     }
                 }
                 if (isset($field_attr['parent_keys']) && isset($field_attr['key'])) {
                     $_master_key = $field_attr['key'];
                 }
                 $field_attr['tmp_key'] = $tmp_key;
                 /* ---------------------------------------
                  * SPECIAL CIRCUMSTANCE.
                  * @TODO - make a config
                  * ---------------------------------------- */
                 if ($field_name == '_epl_date_specific_time') {
                     if (isset($meta['value'][$field_name]) && !epl_is_empty_array($meta['value'][$field_name]) && !epl_is_empty_array(epl_get_element($_master_key, $meta['value'][$field_name]))) {
                         $cnt = count($meta['value'][$field_name][$_master_key]);
                         $_r[$field_name]['field'] = '';
                         foreach ($meta['value'][$field_name][$_master_key] as $__k => $__v) {
                             $epl_fields = array('input_type' => 'text', 'input_name' => "_epl_date_specific_time[{$_master_key}][{$__k}]", 'value' => epl_admin_date_display(epl_get_element($__k, $event_details['_epl_start_date'], $__v)));
                             $epl_fields = wp_parse_args($epl_fields, $field_attr);
                             unset($epl_fields['key']);
                             $__r = $this->create_element($epl_fields, $meta['_view']);
                             $_r[$field_name]['field'] .= $__r['field'];
                         }
                     }
                 } elseif ($field_name == '_epl_date_specific_price') {
                     if (isset($meta['value'][$field_name]) && !epl_is_empty_array($meta['value'][$field_name]) && !epl_is_empty_array(epl_get_element($_master_key, $meta['value'][$field_name]))) {
                         $cnt = count($meta['value'][$field_name][$_master_key]);
                         $_r[$field_name]['field'] = '';
                         foreach ($meta['value'][$field_name][$_master_key] as $__k => $__v) {
                             $epl_fields = array('input_type' => 'text', 'input_name' => "_epl_date_specific_price[{$_master_key}][{$__k}]", 'value' => epl_admin_date_display(epl_get_element($__k, $event_details['_epl_start_date'], $__v)));
                             $epl_fields = wp_parse_args($epl_fields, $field_attr);
                             unset($epl_fields['key']);
                             $__r = $this->create_element($epl_fields, $meta['_view']);
                             $_r[$field_name]['field'] .= $__r['field'];
                         }
                         //echo "<pre class='prettyprint'>" . __LINE__ . "> " . print_r($__r, true). "</pre>";
                     }
                 } elseif ($field_name == '_epl_time_specific_price') {
                     if (isset($meta['value'][$field_name]) && !epl_is_empty_array($meta['value'][$field_name]) && !epl_is_empty_array(epl_get_element($_master_key, $meta['value'][$field_name]))) {
                         $cnt = count($meta['value'][$field_name][$_master_key]);
                         $_r[$field_name]['field'] = '';
                         foreach ($meta['value'][$field_name][$_master_key] as $__k => $__v) {
                             $epl_fields = array('input_type' => 'text', 'input_name' => "_epl_time_specific_price[{$_master_key}][{$__k}]", 'value' => epl_get_element($__k, $event_details['_epl_start_time'], $__v));
                             $epl_fields = wp_parse_args($epl_fields, $field_attr);
                             unset($epl_fields['key']);
                             $__r = $this->create_element($epl_fields, $meta['_view']);
                             $_r[$field_name]['field'] .= $__r['field'];
                         }
                         //echo "<pre class='prettyprint'>" . __LINE__ . "> " . print_r($__r, true). "</pre>";
                     }
                 } else {
                     if ($meta['_view'] == 'raw') {
                         $_r[$field_name] = $this->create_element($field_attr, $meta['_view']);
                     } else {
                         $_r .= $this->create_element($field_attr, $meta['_view']);
                     }
                 }
             }
             if (isset($field_attr['key']) && $field_attr['key'] == '' && $_row_key == '') {
                 $_row_key = $field_attr['tmp_key'];
             }
             //else
             //  $_row_key = isset( $field_attr['key'] ) ? $field_attr['key'] : '';
             $r[$_row_key] = $_r;
             $_row_key = '';
         }
     } else {
         foreach ($fields_to_display as $key => $field) {
             $field['input_slug'] = $key;
             if (isset($meta['value'])) {
                 $field['value'] = isset($meta['value'][$key]) ? $meta['value'][$key] : '';
             }
             if (isset($meta['overview'])) {
                 $field['overview'] = $meta['overview'];
             }
             $field['content'] = epl_get_element('_content', $meta, epl_get_element('content', $field));
             $_r[$key] = $this->create_element($field, $meta['_view']);
         }
         $r = $_r;
     }
     return $r;
 }