function epl_mailchimp_subscribe()
{
    if (!epl_is_addon_active('ASDFAWEEFADSF')) {
        return;
    }
    global $event_details, $customer_email, $customer_name;
    $default_action = epl_get_setting('epl_api_option_fields', 'epl_mc_action');
    $sign_up = epl_get_element('_epl_offer_notification_sign_up', $event_details, '');
    if ($sign_up == '') {
        $sign_up = $default_action == 1 ? epl_get_setting('epl_api_option_fields', '_epl_mc_offer_notification_sign_up') : 0;
    }
    if ($sign_up == 0 || $default_action == 0) {
        return;
    }
    $who_to_sign_up = epl_get_setting('epl_registration_options', 'epl_send_customer_confirm_message_to', 1);
    if ($who_to_sign_up == 2 || !epl_has_primary_forms()) {
        $who_to_sign_up = 2;
    }
    $erm = EPL_registration_model::get_instance();
    $list_id = epl_get_element('_epl_notification_list', $event_details, false);
    if (!$list_id && $default_action == 1) {
        $list_id = epl_get_setting('epl_api_option_fields', '_epl_mc_default_list');
    }
    $double_optin = (bool) epl_get_setting('epl_api_option_fields', 'epl_mc_double_opt_in');
    $send_welcome = (bool) epl_get_setting('epl_api_option_fields', 'epl_mc_send_welcome_email');
    $key = trim(epl_get_setting('epl_api_option_fields', 'epl_mc_key'));
    $api = EPL_base::get_instance()->load_library('mailchimpSF_MCAPI', true, $key);
    $go = false;
    $newsletter_signup = epl_get_element_m('newsletter_signup', $erm->regis_id, $erm->current_data, array());
    if ($sign_up == 1 && array_sum($newsletter_signup) > 0) {
        $go = true;
    } elseif ($sign_up == 3) {
        $go = true;
    }
    if ($list_id && $go && count($customer_email) > 0) {
        $customer_email = array_unique($customer_email);
        foreach ($customer_email as $n => $email) {
            if ($sign_up < 3 && $newsletter_signup[$n] == 0) {
                continue;
            }
            $email = $email;
            $merge_vars = array('FNAME' => epl_get_element_m('first_name', $n, $customer_name), 'LNAME' => epl_get_element_m('last_name', $n, $customer_name));
            $r = $api->listSubscribe($list_id, $email, $merge_vars, $email_type = 'html', $double_optin, false, true, $send_welcome);
        }
    }
}
 function get_the_email_addresses($filter = null, $regis_id = null)
 {
     global $wpdb, $event_details;
     $this->WHERE = ' AND r.status between 2 and 5 ';
     $arr = array('regis_id' => !is_null($regis_id) ? $regis_id : epl_get_element('post_ID', $_REQUEST, false), 'event_id' => $_REQUEST['event_id'], 'date_id' => epl_get_element('date_id', $_REQUEST, null), 'time_id' => epl_get_element('time_id', $_REQUEST, null), 'names_only' => epl_get_element('names_only', $_REQUEST, 0));
     setup_event_details($arr['event_id']);
     $data['pack_regis'] = epl_get_element('_epl_pack_regis', $event_details, 0) == 10;
     $_filter = array();
     if ($data['pack_regis']) {
         //find all the registrations for this event
         //for each one, find out if package
         //for each one that is pack, find the pack * X days
         //contstruct array
         $event_date_keys = array_keys($event_details['_epl_start_date']);
         $pack_counts = epl_get_element('_epl_price_pack_size', $event_details, array());
         $registrations = $wpdb->get_results("SELECT * FROM {$wpdb->epl_regis_data} WHERE event_id = " . intval($event_details['ID']));
         if ($registrations) {
             foreach ($registrations as $regis) {
                 $regis_weekday = date('N', $event_details['_epl_start_date'][$regis->date_id]);
                 if (isset($pack_counts[$regis->price_id])) {
                     $pack_counter = epl_get_element($regis->price_id, $pack_counts, 1);
                     $start = false;
                     foreach ($event_details['_epl_start_date'] as $date_id => $date) {
                         if (!$start && $date_id != $regis->date_id) {
                             continue;
                         }
                         $start = true;
                         $_weekday = date('N', $date);
                         if ($regis_weekday != $_weekday || $pack_counter == 0) {
                             continue;
                         }
                         $pack_counter--;
                         $attendance_dates[$regis->id][$date_id] = $date;
                         $_filter[$regis->id] = $regis->id;
                     }
                     if ($arr['date_id'] && !isset($attendance_dates[$regis->id][$arr['date_id']]) || $arr['time_id'] && $arr['time_id'] != $regis->time_id) {
                         unset($_filter[$regis->id]);
                         unset($attendance_dates[$regis->id]);
                     }
                     //$offset = array_search( $regis->date_id, $event_date_keys );
                     //$attendance_dates[$regis->id] = array_slice( $event_details['_epl_start_date'], $offset, $pack_counts[$regis->price_id] );
                 }
             }
         }
     }
     $_filter = implode(',', $_filter);
     if ($_filter != '') {
         $_filter = " AND rd.id IN ({$_filter})";
     }
     if (($regis_id = epl_get_element('post_ID', $_REQUEST, $arr['regis_id'])) !== false) {
         $this->WHERE = ' AND r.status between 1 and 5 ';
         $this->WHERE .= ' AND r.regis_id =' . $wpdb->escape($regis_id);
     }
     if (($_event_id = epl_get_element('event_id', $_REQUEST, false)) !== false) {
         $this->WHERE .= ' AND rd.event_id =' . $wpdb->escape($_event_id);
     }
     if (!$_filter && ($_date_id = epl_get_element('date_id', $_REQUEST, false)) !== false) {
         $this->WHERE .= ' AND rd.date_id ="' . $wpdb->escape($_date_id) . '"';
     }
     if (!$_filter && ($_time_id = epl_get_element('time_id', $_REQUEST, false)) !== false) {
         $this->WHERE .= ' AND rd.time_id ="' . $wpdb->escape($_time_id) . '"';
     }
     $form_to_look_at = 'AND rf.form_no = 0';
     $who_to_email = epl_get_setting('epl_registration_options', 'epl_send_customer_confirm_message_to', 1);
     if ($who_to_email == 2 || !epl_has_primary_forms()) {
         $form_to_look_at = '';
     }
     $q = $wpdb->get_results("SELECT\r\n          r.regis_id, r.status, r.regis_key, rd.event_id, rf.field_id, rf.form_no, rf.input_slug, rf.value\r\n         \r\n          FROM {$wpdb->epl_regis_data} rd\r\n          INNER JOIN {$wpdb->epl_registration} r\r\n          ON r.regis_id = rd.regis_id\r\n          INNER JOIN {$wpdb->epl_regis_form_data} rf\r\n          ON (rd.regis_id = rf.regis_id AND rd.event_id = rf.event_id)\r\n          WHERE 1=1 \r\n          {$this->WHERE} {$form_to_look_at} {$_filter}\r\n          GROUP BY rf.value\r\n          ORDER BY  r.regis_date, rd.id\r\n          ");
     $email_list = array('raw_list' => array(), 'display_list' => '');
     $num_emails = 0;
     if ($q) {
         foreach ($q as $row) {
             setup_event_details($row->event_id);
             //Redundant.  But on line 280, from the registration list individual email, event id is not available.
             if ($who_to_email == 1 && (epl_has_primary_forms() && $row->form_no > 0)) {
                 continue;
             }
             $d = $this->get_form_data_array($row->input_slug, $row->value);
             if ($d['email'] == '') {
                 continue;
             }
             //if ( !is_array( $email_list['display_list'][$row->regis_id] ) )
             //  $email_list['display_list'][$row->regis_id] = array();
             $this->epl_table->add_row('<input type="checkbox" id="" name="to_emails[' . $row->regis_id . '][]" class="regis_status_' . $row->status . '" style="" value="' . $d['email'] . '" checked="checked">', $d['email'], $d['first_name'] . ' ' . $d['last_name'], epl_anchor(admin_url('post.php?post=' . $row->regis_id . '&action=edit'), $row->regis_key), get_the_regis_status($row->status));
             $num_emails++;
             //$email_list['display_list'][$row->regis_id] = $d['email'] . epl_prefix( ', ', $d['first_name'] . ' ' . $d['last_name'] ) . ', ' . epl_anchor( admin_url( 'post.php?post=' . $row->regis_id . '&action=edit' ), $row->regis_key ) . ', ' . get_the_regis_status( $row->status );
             $email_list['raw_list'][] = $d['email'];
         }
     }
     $tmpl = array('table_open' => '<table cellpadding="0" cellspacing="0" class="epl_email_to_list" style="">');
     $this->epl_table->set_template($tmpl);
     $email_list['display_list'] = $this->epl_table->generate();
     $email_list['display_list'] = $this->epl->load_view('admin/registration/regis-email-form-regis-list', $email_list, true);
     $email_list['num_emails'] = $num_emails;
     // echo "<pre class='prettyprint'>" . __LINE__ . "> " . basename(__FILE__) . " > " . print_r($email_list['display_list'], true) . "</pre>";
     return $email_list;
 }
 function construct_form($scope, $event_id, $forms, $attendee_number, $price_name = '', $price_id = null, $date_display = null)
 {
     static $ticket_number = 0;
     //keeps track of the attendee count for dispalay
     static $primary_counter = 1;
     //keeps track of the attendee count for dispalay
     static $primary_forms = array();
     global $event_details, $customer_email, $customer_name, $regis_details;
     global $email_regis_form;
     //TODO temp solution
     $has_email_field = false;
     if (!is_array($customer_email)) {
         $customer_email = array();
         $customer_name = array();
     }
     if ($email_regis_form == '') {
         $ticket_number = 0;
     }
     if ($scope != 'waitlist' && ($this->pulling_forms == 'pri' && $this->num_events_in_cart > 1 && $primary_counter < $this->num_events_in_cart)) {
         $ticket_number = 0;
         $primary_forms += $forms;
         $primary_counter++;
         return '';
     }
     $ur_specific = '';
     if ($scope == 'ticket_buyer' && !is_user_logged_in() && epl_um_is_enabled() && $this->add_new_user_enable() != 0 && $this->add_new_user_method() == 1) {
         $ur_specific = epl__("This email will be used to grant you membership access to our website.");
         if (!$this->add_new_user_show_pass_fields()) {
             $ur_specific .= '<br />' . epl__("  You will receive an email with your password after completing this registration.");
         }
         if ($this->mode != 'overview') {
             $ur_specific .= '<br />' . sprintf(epl__("If you are already a member of the website, please %s"), "<a href=" . wp_login_url(epl_get_url()) . " class='' title='Login'>" . epl__('Login Here') . "</a>");
         }
     }
     if ($ticket_number == 0 && !empty($primary_forms)) {
         $forms += $primary_forms;
     }
     $vals = $this->get_relevant_regis_values();
     //if data has already been entered into the session, get that data
     //$ticket_number = $attendee_number;
     $data['mode'] = $this->mode;
     //to compensate for pre 1.2.9 data
     if (!is_null($price_id) && version_compare(epl_regis_plugin_version(), '1.2.9', '<')) {
         if ($temp_price_id != $price_id) {
             $temp_price_id = $price_id;
             $ticket_number = 1;
         }
     }
     $data['ticket_number'] = $ticket_number;
     //counter
     $ticket_number = $attendee_number;
     //counter
     $data['ticket_counter_label'] = epl_get_element('_epl_addit_regis_form_counter_label', $event_details, epl__('Attendee'));
     //counter
     $data['price_name'] = $date_display != '' ? $date_display . ' - ' . $price_name : $price_name;
     //ticket name
     //if it is the ticket buyer form (the main required form)
     if ($scope == 'ticket_buyer') {
         unset($data['ticket_number']);
         unset($data['price_name']);
     }
     $data['copy_link'] = false;
     if ($scope == 'regis_forms') {
         $data['copy_link'] = epl_get_element('_epl_enable_form_to_form_copy', $event_details, 0) == 10 || epl_get_setting('epl_sc_options', 'epl_sc_form_to_form_copy', 0) == 10;
     }
     $data['fields'] = '';
     $data['forms'] = '';
     $data['form'] = '';
     $data['email_fields'] = '';
     $data['email_body_form'] = '';
     $available_fields = (array) $this->ecm->get_list_of_available_fields();
     //get the list of all available fields made with form manager
     $who_to_email = epl_get_setting('epl_registration_options', 'epl_send_customer_confirm_message_to', 1);
     if ($who_to_email == 2 || !epl_has_primary_forms()) {
         $who_to_email = 2;
     }
     foreach ($forms as $form_id => $form_atts) {
         $r = '';
         $data['fields'] = '';
         $data['email_fields'] = '';
         $epl_fields_inside_form = array_flip($form_atts['epl_form_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);
         //for each field, there are attributes, like name, label, ....
         foreach ($epl_fields_to_display as $field_id => $field_atts) {
             if ($field_atts['input_type'] == 'hidden' && !EPL_IS_ADMIN) {
                 continue;
             }
             if (epl_get_element('admin_only', $field_atts, 0) == 10 && !epl_user_is_admin() && !EPL_IS_ADMIN) {
                 continue;
             }
             //if the field choices values are not given for select, radio, or checkbox
             //we will use field labels as values
             if (!array_filter((array) $field_atts['epl_field_choice_value'], 'trim')) {
                 $options = $field_atts['epl_field_choice_text'];
             } else {
                 $options = array_combine($field_atts['epl_field_choice_value'], $field_atts['epl_field_choice_text']);
             }
             //this will give the ability to select more than one option, for checkboxes and later, selects
             $adjuster = $field_atts['input_type'] == 'checkbox' ? '[]' : '';
             $_price_id_adjuster = !is_null($price_id) ? "[{$price_id}]" : null;
             $event_id_adjuster = "[{$event_id}]";
             /* $_val = ($vals != ''
                && epl_get_element( $field_atts['input_name'], $vals ) && epl_get_element( $event_id, $vals[$field_atts['input_name']] ) )
                ? epl_get_element( $ticket_number, (is_null( $_price_id_adjuster )? $vals[$field_atts['input_name']][$event_id]
                : epl_get_element( $price_id, $vals[$field_atts['input_name']][$event_id] ) ) )
                : null; */
             //echo "<pre class='prettyprint'>" . __LINE__ . "> $price_id " . print_r( $_price_id_adjuster, true ) . "</pre>";
             $_val = null;
             if ($vals != '') {
                 if (epl_get_element($field_atts['input_name'], $vals)) {
                     //not sure why I had || in here
                     if (isset($vals[$field_atts['input_name']][$ticket_number])) {
                         $_val = epl_get_element($ticket_number, $vals[$field_atts['input_name']]);
                         /* if ( !is_null( $price_id ) ){
                            $_val = epl_get_element_m($ticket_number, $price_id, $_val );
                            echo "<pre class='prettyprint'>" . __LINE__ . ">$ticket_number " . print_r($_val, true). "</pre>";
                            } */
                     } elseif (!empty($_POST['deleted_event'])) {
                         //if this element is posted, that means an event was removed from the cart.
                         //it will contain the event id, price id and the quantities.
                         $vals = $this->get_old_regis_values();
                         //get the values that were save in the db previously
                         foreach ($_POST['deleted_event'] as $deleted_event_id => $deleted_data) {
                             foreach ($deleted_data as $deleted_price_id => $quantities) {
                                 if ($quantities == 0) {
                                     continue;
                                 }
                                 if (is_null($_price_id_adjuster)) {
                                     $_val = epl_get_element($ticket_number, $vals[$field_atts['input_name']][$deleted_event_id]);
                                 } else {
                                     $_val = epl_get_element($ticket_number, epl_get_element($deleted_price_id, $vals[$field_atts['input_name']][$deleted_event_id]));
                                 }
                                 if ($_val != '') {
                                     break 2;
                                 }
                             }
                         }
                     } elseif (epl_get_element($event_id, $vals[$field_atts['input_name']])) {
                         if (is_null($_price_id_adjuster)) {
                             $_val = epl_get_element($ticket_number, $vals[$field_atts['input_name']][$event_id]);
                         } else {
                             $_val = epl_get_element($ticket_number, epl_get_element($price_id, $vals[$field_atts['input_name']][$event_id]));
                         }
                     }
                 }
             }
             if ($scope == 'ticket_buyer' || $scope == 'waitlist') {
                 $event_id_adjuster = '';
             }
             $args = array('input_type' => $field_atts['input_type'], 'input_name' => $field_atts['input_name'] . $event_id_adjuster . $_price_id_adjuster . "[{$ticket_number}]" . $adjuster, 'label' => $field_atts['label'], 'description' => $field_atts['description'] . ($field_atts['input_name'] == '4e794a6eeeb9a' ? $ur_specific : ''), 'required' => $field_atts['required'], 'validation' => epl_get_element('validation', $field_atts, ''), 'options' => $options, 'value' => $_val, 'class' => 'epl_field epl_field-' . $field_atts['input_type'], 'data_attr' => array('ticket_no' => $ticket_number));
             if (empty($_val)) {
                 $last_regis_data = $this->epl_get_last_regis_form_data_values($ticket_number);
                 if (!epl_is_empty_array($last_regis_data)) {
                     $args['default_value'] = epl_get_element($field_atts['input_name'], $last_regis_data);
                 } elseif ($ticket_number == 0) {
                     $def_val = apply_filters('epl_construct_form_default_value', $field_atts);
                     $args['default_value'] = !is_array($def_val) && !is_null($def_val) ? $def_val : $field_atts['default_value'];
                 } else {
                     $args['default_value'] = $field_atts['default_value'];
                 }
             }
             if ($who_to_email == 1 && $ticket_number == 0 || $who_to_email == 2) {
                 if (stripos($field_atts['input_slug'], 'email') !== false) {
                     $customer_email[$ticket_number] = $args['value'];
                     $has_email_field = true;
                 }
                 if (stripos($field_atts['input_slug'], 'first_name') !== false || stripos($field_atts['input_slug'], 'last_name') !== false) {
                     $customer_name[$ticket_number][$field_atts['input_slug']] = $args['value'];
                 }
             }
             //if overview, we don't want to display the field, just the value
             if ($this->mode == 'overview') {
                 $args += (array) $this->overview_trigger;
                 unset($args['required']);
             }
             $data['el'] = $this->epl_util->create_element($args, 0);
             $data['fields'] .= $this->epl->load_view($this->dest . '/registration/regis-field-row', $data, true);
             $data['email_fields'] .= $this->epl->load_view($this->dest . '/registration/regis-email-field-row', $data, true);
         }
         $data['event_title'] = $event_details['post_title'];
         $data['form_label'] = isset($form_atts['epl_form_options']) && in_array(0, (array) $form_atts['epl_form_options']) ? $form_atts['epl_form_label'] : '';
         $data['form_descr'] = isset($form_atts['epl_form_options']) && in_array(10, (array) $form_atts['epl_form_options']) ? $form_atts['epl_form_descritption'] : '';
         $r = $this->epl->load_view($this->dest . '/registration/regis-form-wrap', $data, true);
         $data['form'] .= $r;
         $data['email_body_form'] = $this->epl->load_view($this->dest . '/registration/regis-email-form-wrap', $data, true);
         $email_regis_form .= $data['email_body_form'];
     }
     if ($scope == 'ticket_buyer' || !epl_has_primary_forms()) {
         /*
          * - if enabled for all events
          * - and not set to no for this event
          * - or set to yes for this event
          */
         $global_newsletter_ok = false;
         if (epl_get_setting('epl_api_option_fields', 'epl_mc_key') != '' && epl_get_setting('epl_api_option_fields', 'epl_mc_action') != 0 && epl_get_element('_epl_offer_notification_sign_up', $event_details) != 0) {
             $global_newsletter_ok = true;
         }
         if ($has_email_field && epl_get_setting('epl_api_option_fields', 'epl_mc_action') != 0 && (epl_get_element('_epl_offer_notification_sign_up', $event_details) == 1 && $global_newsletter_ok)) {
             $_newsletter_signup = array('input_type' => 'select', 'input_name' => "newsletter_signup[{$ticket_number}]", 'label' => epl_get_setting('epl_api_option_fields', 'epl_mc_permission_label'), 'options' => epl_yes_no(), 'value' => epl_get_element($ticket_number, $this->current_data[$this->regis_id]['newsletter_signup']), 'class' => 'epl_w70');
             $data['el'] = $this->epl_util->create_element($_newsletter_signup + (array) $this->overview_trigger, 0);
             $data['form'] .= '<div class="epl_section epl_regis_field_wrapper regis_form">' . $this->epl->load_view($this->dest . '/registration/regis-field-row', $data, true) . '</div>';
         }
     }
     //if ( $event_details[''] )
     //  $copy_from = '';
     if ($this->mode != 'overview' && $data['copy_link'] || $this->on_admin) {
         $copy_from = '<a href="#" style="float:right;" class="epl_copy_from epl_button_small">' . epl__('Copy From') . '</a>';
     }
     $lookup_form = epl_get_element('epl_m', $_POST, 0) == 0 && epl_um_is_enabled() && epl_user_is_admin() && $this->mode == 'edit' ? ' <a href="#"  style="float:right;" class="open_lookup_form epl_button_small">' . epl__('Lookup') . '</a>' : '';
     if ($ticket_number == 0) {
         $edit_profile_link = apply_filters('epl_edit_profile_link', null);
         $ticket_buyer_legend = apply_filters('epl_ticket_buyer_form_legend', epl__('Primary Registrant'));
         $r = "<div id='epl_form_section--0' class='epl_regis_attendee_wrapper'><fieldset class='epl_fieldset'><legend>" . $ticket_buyer_legend . ' ' . $edit_profile_link . "</legend>" . $lookup_form . $data['form'] . '</fieldset></div>';
     } else {
         $delete_att = '';
         if (EPL_IS_ADMIN) {
             $delete_att = "<a href='#' class='epl_button_small epl_admin_del_attendee' data-event_id='{$event_details['ID']}' data-price_id='{$price_id}' data-ticket_no={$ticket_number}>" . epl__("Delete") . "</a>";
             $data['form'] .= "<input type='hidden' class='epl_ticket_no-{$event_id}-{$price_id}' value='{$ticket_number}' />";
         }
         $r = "<div id='epl_form_section--" . (isset($ticket_number) ? $event_id . '-' . $price_id . '-' . $ticket_number : 0) . "' class='epl_regis_attendee_wrapper'><fieldset class='epl_fieldset'><legend>" . $data['ticket_counter_label'] . ' ' . $ticket_number . ': ' . $data['price_name'] . " - {$event_details['post_title']}</legend> {$lookup_form} {$copy_from} {$delete_att}" . $data['form'] . '</fieldset></div>';
     }
     $ticket_number++;
     return $r;
 }
 $_a['ticket'] = $event_details['_epl_price_name'][$row->price_id];
 $_a['price'] = $row->price;
 $_a['paid'] = '';
 $_a['discount_code'] = '';
 $_a['discount_amount'] = '';
 if (epl_get_regis_setting('epl_enable_donation') == 10) {
     $_a['donation_amount'] = '';
 }
 $_a['date'] = epl_formatted_date($event_details['_epl_start_date'][$row->date_id]);
 $_a['time'] = $event_details['_epl_start_time'][$row->time_id];
 if ($tmp_regis_id == '' || $tmp_regis_id != $row->regis_id) {
     $tmp_regis_id = $row->regis_id;
     $new_record = true;
     $ticket_buyer_data = array();
     $form_counter = 0;
     if (epl_has_primary_forms()) {
         $form_data = $erptm->get_form_data($row->regis_id, $row->event_id, 0);
         if ($form_data) {
             foreach ($form_data as $r) {
                 if (strpos($r->field_id, EPL_PLUGIN_DB_DELIM)) {
                     $fields = explode(EPL_PLUGIN_DB_DELIM, $r->field_id);
                     $values = explode(EPL_PLUGIN_DB_DELIM, $r->value);
                 } else {
                     $fields = array($r->field_id);
                     $values = array($r->value);
                 }
                 $tb_only_fields = $fields;
                 $full_data = array_combine($fields, $values);
                 $_row = array_merge($default_row, $full_data);
                 $ticket_buyer_data += epl_process_fields_for_display($_row);
             }