function _express_checkout_redirect()
 {
     global $event_details;
     $event_id = $event_details['ID'];
     //key( ( array ) $_SESSION['__epl'][$regis_id]['events'] );
     if (is_null($event_id)) {
         return false;
     }
     $this->epl->load_file('libraries/gateways/paypal/paypal.php');
     $url = !empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443 ? "https://" . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'] : "http://" . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
     //echo "<pre class='prettyprint'>" . print_r( $_SESSION, true ) . "</pre>";
     $regis_id = $this->erm->get_regis_id();
     $gateway_info = $this->erm->get_gateway_info();
     $tickets = $_SESSION['__epl'][$regis_id]['_dates']['_att_quantity'];
     $post_ID = $_SESSION['__epl']['post_ID'];
     //echo "<pre class='prettyprint'>" . print_r($post_ID, true). "</pre>";
     $this->ecm->setup_event_details($event_id);
     $_totals = $this->erm->calculate_totals();
     $requestParams = array('RETURNURL' => esc_url_raw(add_query_arg(array('cart_action' => '', 'p_ID' => $post_ID, 'regis_id' => $regis_id, 'epl_action' => '_exp_checkout_payment_success'), $url)), 'CANCELURL' => esc_url_raw(add_query_arg(array('cart_action' => '', 'p_ID' => $post_ID, 'regis_id' => $regis_id, 'epl_action' => '_exp_checkout_payment_cancel'), $url)), "SOLUTIONTYPE" => 'Sole', "LANDINGPAGE" => epl_nz($gateway_info['_epl_pp_landing_page'], 'Login'));
     $orderParams = array('PAYMENTREQUEST_0_AMT' => $_totals['money_totals']['grand_total'], 'PAYMENTREQUEST_0_SHIPPINGAMT' => 0, 'PAYMENTREQUEST_0_CURRENCYCODE' => epl_nz(epl_get_general_setting('epl_currency_code'), 'USD'), 'PAYMENTREQUEST_0_ITEMAMT' => $_totals['money_totals']['grand_total']);
     $item = array('L_PAYMENTREQUEST_0_NAME0' => epl__('Registration'), 'L_PAYMENTREQUEST_0_DESC0' => $event_details['post_title'] . ', ' . $_totals['_att_quantity']['total'][$event_details['ID']] . ' ' . epl__('attendees'), 'L_PAYMENTREQUEST_0_AMT0' => $_totals['money_totals']['grand_total'], 'L_PAYMENTREQUEST_0_QTY0' => 1);
     /*
              $counter = 0;
             $item = array( );
             foreach ( $tickets as $event_id => $ind_tickets ) {
     
                 foreach ( $ind_tickets as $ticket_id => $ticket_qty ) {
     
                     $ticket_name = epl_get_element( $ticket_id, $event_details['_epl_price_name'] );
                     $ticket_price = epl_get_element( $ticket_id, $event_details['_epl_price'] );
                     $qty = (is_array( $ticket_qty )) ? array_sum( $ticket_qty ) : $ticket_qty;
     
                     if ( $qty > 0 ) {
                         $item['L_PAYMENTREQUEST_0_NAME' . $counter] = substr( $event_details['post_title'], 0, 126 );
                         $item['L_PAYMENTREQUEST_0_DESC' . $counter] = $ticket_name;
                         //$item['L_PAYMENTREQUEST_0_NUMBER' . $counter] = $ticket_id;
                         $item['L_PAYMENTREQUEST_0_AMT' . $counter] = $ticket_price;
                         $item['L_PAYMENTREQUEST_0_QTY' . $counter] = $qty;
     
                         $counter++;
                     }
                 }
             }
     */
     //echo "<pre class='prettyprint'>" . print_r( $requestParams + $orderParams + $item, true ) . "</pre>";
     $paypal = new EPL_Paypal();
     $response = $paypal->request('SetExpressCheckout', $requestParams + $orderParams + $item);
     if (is_array($response) && $response['ACK'] == 'Success') {
         //Request successful
         $token = $response['TOKEN'];
         if ($gateway_info['_epl_sandbox'] == 10) {
             header('Location: https://www.sandbox.paypal.com/webscr?cmd=_express-checkout&token=' . urlencode($token));
         } else {
             header('Location: https://www.paypal.com/webscr?cmd=_express-checkout&token=' . urlencode($token));
         }
     } else {
         $error = 'ERROR: ' . $response['L_SHORTMESSAGE0'] . '. ' . $response['L_LONGMESSAGE0'];
         echo EPL_Util::get_instance()->epl_invoke_error(0, $error, false);
     }
 }
 function __construct()
 {
     parent::__construct();
     //resetting the var just in case there is a widget on the left
     global $event_details;
     $event_details = array();
     $this->user_id = get_current_user_id();
     $this->ecm = $this->epl->load_model('epl-common-model');
     $this->ercm = $this->epl->load_model('epl-recurrence-model');
     $this->eutil = EPL_Util::get_instance();
     $this->mode = 'edit';
     $this->overview_trigger = null;
     self::$instance = $this;
 }
 function _exp_checkout_do_payment()
 {
     global $event_details, $cart_totals;
     $event_id = $event_details['ID'];
     if (is_null($event_id)) {
         //return false;
     }
     $regis_id = $this->erm->get_regis_id();
     $post_ID = $this->erm->get_regis_post_id();
     $this->ecm->setup_event_details($event_id);
     $line_item_surcharge = false;
     $line_item_surcharge = apply_filters('egm__pp_exp__line_item_surcharge', $line_item_surcharge);
     $_totals = $this->erm->calculate_cart_totals();
     $amount = $cart_totals['money_totals']['grand_total'];
     $amount = epl_get_balance_due();
     $tax = epl_get_element_m('surcharge', 'money_totals', $cart_totals, 0);
     $subtotal = epl_get_element_m('subtotal', 'money_totals', $cart_totals, 0);
     $num_days_in_cart = array();
     $price_multiplier = array();
     $price_multiplier_label = array();
     $discount_amount = number_format(epl_get_element('discount_amount', $cart_totals['money_totals'], 0), 2, ".", "");
     //$subtotal = $discount_amount > 0 ? number_format( $subtotal - $discount_amount, 2 ) : $subtotal;
     $this->epl->load_file('libraries/gateways/paypal/paypal.php');
     $paypal = new EPL_Paypal();
     $gateway_info = $this->erm->get_gateway_info();
     $paypal->_credentials = array('USER' => $gateway_info['_epl_pp_exp_user'], 'PWD' => $gateway_info['_epl_pp_exp_pwd'], 'SIGNATURE' => $gateway_info['_epl_pp_exp_sig']);
     $requestParams = array('TOKEN' => $_GET['token'], 'PAYMENTACTION' => 'Sale', 'PAYERID' => $_GET['PayerID']);
     $orderParams = array('PAYMENTREQUEST_0_AMT' => $amount, 'PAYMENTREQUEST_0_ITEMAMT' => $amount - $tax, 'PAYMENTREQUEST_0_CURRENCYCODE' => epl_nz(epl_get_general_setting('epl_currency_code'), 'USD'), 'PAYMENTREQUEST_0_TAXAMT' => $line_item_surcharge === false ? $tax : 0);
     $counter = 0;
     $tickets = $_SESSION['__epl'][$regis_id]['_dates']['_att_quantity'];
     $dates = isset($_SESSION['__epl'][$regis_id]['_dates']['_epl_start_date']) ? $_SESSION['__epl'][$regis_id]['_dates']['_epl_start_date'] : array();
     $events = $_SESSION['__epl'][$regis_id]['_events'];
     $parallel_pay = epl_get_regis_setting('_epl_enable_PP_parallel_pay') == 10 && !epl_is_empty_array(epl_get_element('_epl_price_parallel_pay_email', $event_details, array()));
     $pp_email = epl_get_element('_epl_pp_exp_email', $gateway_info);
     if ($parallel_pay) {
         $orderParams = array();
         foreach ($tickets as $event_id => $ind_tickets) {
             $this->ecm->setup_event_details($event_id);
             foreach ($ind_tickets as $ticket_id => $ticket_qty) {
                 $ticket_name = epl_get_element($ticket_id, $event_details['_epl_price_name']);
                 $ticket_price = epl_get_element($ticket_id, $event_details['_epl_price']);
                 if (epl_is_eligible_for_member_price($ticket_id)) {
                     $ticket_price = epl_get_element_m($ticket_id, '_epl_member_price', $event_details, $ticket_price);
                 }
                 $qty = is_array($ticket_qty) ? array_sum($ticket_qty) : $ticket_qty;
                 if ($qty > 0) {
                     $orderParams['PAYMENTREQUEST_' . $counter . '_AMT'] = $ticket_price;
                     $orderParams['PAYMENTREQUEST_' . $counter . '_SELLERPAYPALACCOUNTID'] = epl_get_element_m($ticket_id, '_epl_price_parallel_pay_email', $event_details, $pp_email);
                     $orderParams['PAYMENTREQUEST_' . $counter . '_SHIPPINGAMT'] = 0;
                     $orderParams['PAYMENTREQUEST_' . $counter . '_CURRENCYCODE'] = epl_nz(epl_get_general_setting('epl_currency_code'), 'USD');
                     $orderParams['PAYMENTREQUEST_' . $counter . '_ITEMAMT'] = $ticket_price;
                     $orderParams['PAYMENTREQUEST_' . $counter . '_TAXAMT'] = 0;
                     $orderParams['PAYMENTREQUEST_' . $counter . '_DESC'] = substr($ticket_name, 0, 126);
                     $orderParams['PAYMENTREQUEST_' . $counter . '_PAYMENTREQUESTID'] = $post_ID . '-' . $counter;
                     $counter++;
                 }
             }
         }
     }
     $counter = 0;
     $item = array();
     foreach ($tickets as $event_id => $ind_tickets) {
         $this->ecm->setup_event_details($event_id);
         $num_days_in_cart[$event_id] = count(epl_get_element($event_id, $dates, array()));
         $price_multiplier[$event_id] = $event_details['_epl_price_per'] == 10 && !epl_is_date_level_price() ? $num_days_in_cart[$event_id] : 1;
         $price_multiplier_label[$event_id] = $price_multiplier[$event_id] > 1 ? ' - ' . $num_days_in_cart[$event_id] . ' ' . epl__('days') : '';
         foreach ($ind_tickets as $ticket_id => $ticket_qty) {
             $ticket_name = epl_get_element($ticket_id, $event_details['_epl_price_name']);
             $ticket_price = epl_get_element($ticket_id, $event_details['_epl_price']);
             if (epl_is_eligible_for_member_price($ticket_id)) {
                 $ticket_price = epl_get_element_m($ticket_id, '_epl_member_price', $event_details, $ticket_price);
             }
             $qty = is_array($ticket_qty) ? array_sum($ticket_qty) : $ticket_qty;
             if ($qty > 0) {
                 $item['L_PAYMENTREQUEST_0_NAME' . $counter] = substr($event_details['post_title'], 0, 126);
                 $item['L_PAYMENTREQUEST_0_DESC' . $counter] = $ticket_name . $price_multiplier_label[$event_id];
                 //$item['L_PAYMENTREQUEST_0_NUMBER' . $counter] = $ticket_id;
                 $item['L_PAYMENTREQUEST_0_AMT' . $counter] = $ticket_price;
                 $item['L_PAYMENTREQUEST_0_QTY' . $counter] = $qty * $price_multiplier[$event_id];
                 $counter++;
             }
         }
     }
     if ($parallel_pay) {
         $item = array();
         $counter = 0;
         $ticket_counter = 0;
         //this will be incremented if we do line item per ticket qty
         foreach ($tickets as $event_id => $ind_tickets) {
             $this->ecm->setup_event_details($event_id);
             foreach ($ind_tickets as $ticket_id => $ticket_qty) {
                 $ticket_name = epl_get_element($ticket_id, $event_details['_epl_price_name']);
                 $ticket_price = epl_get_element($ticket_id, $event_details['_epl_price']);
                 if (epl_is_eligible_for_member_price($ticket_id)) {
                     $ticket_price = epl_get_element_m($ticket_id, '_epl_member_price', $event_details, $ticket_price);
                 }
                 $qty = is_array($ticket_qty) ? array_sum($ticket_qty) : $ticket_qty;
                 if ($qty > 0) {
                     $item['L_PAYMENTREQUEST_' . $counter . '_NAME' . $ticket_counter] = substr($event_details['post_title'], 0, 126);
                     $item['L_PAYMENTREQUEST_' . $counter . '_DESC' . $ticket_counter] = $ticket_name . $price_multiplier_label[$event_id];
                     //$item['L_PAYMENTREQUEST_0_NUMBER' . $counter] = $ticket_id;
                     $item['L_PAYMENTREQUEST_' . $counter . '_AMT' . $ticket_counter] = $ticket_price;
                     $item['L_PAYMENTREQUEST_' . $counter . '_QTY' . $ticket_counter] = $qty * $price_multiplier[$event_id];
                     $counter++;
                 }
             }
         }
     }
     if (!$parallel_pay) {
         if ($tax > 0 && $line_item_surcharge !== false) {
             //$discount_description = epl_get_element( 'discount_description', $cart_totals['money_totals'], null );
             foreach ($_SESSION['__epl'][$regis_id]['_events'] as $event_id => $event_totals) {
                 $sc = epl_get_element_m('surcharge', 'money_totals', $event_totals, 0);
                 if ($sc == 0) {
                     continue;
                 }
                 $this->ecm->setup_event_details($event_id);
                 $surcharge_label = epl_get_element('_epl_surcharge_label', $event_details, epl__('Surcharge'));
                 $item['L_PAYMENTREQUEST_0_NAME' . $counter] = $surcharge_label;
                 //$item['L_PAYMENTREQUEST_0_DESC' . $counter] = $discount_description;
                 //$item['L_PAYMENTREQUEST_0_NUMBER' . $counter] = $ticket_id;
                 $item['L_PAYMENTREQUEST_0_AMT' . $counter] = $sc;
                 $item['L_PAYMENTREQUEST_0_QTY' . $counter] = 1;
                 $requestParams['PAYMENTREQUEST_0_ITEMAMT'] += $sc;
                 $counter++;
             }
         }
         if ($discount_amount > 0) {
             $discount_description = epl_get_element('discount_description', $cart_totals['money_totals'], null);
             $discount_description = substr($discount_description, 0, 126);
             $item['L_PAYMENTREQUEST_0_NAME' . $counter] = $discount_description;
             //$item['L_PAYMENTREQUEST_0_DESC' . $counter] = $discount_description;
             //$item['L_PAYMENTREQUEST_0_NUMBER' . $counter] = $ticket_id;
             $item['L_PAYMENTREQUEST_0_AMT' . $counter] = -1 * $discount_amount;
             $item['L_PAYMENTREQUEST_0_QTY' . $counter] = 1;
         }
         $alt_total_due = epl_get_element_m('pay_deposit', 'money_totals', $cart_totals) == 1;
         if ($alt_total_due > 0) {
             $counter++;
             $balance_due_desc = epl__('Deposit Offset.  Due at a later date.');
             $balance_due_desc = substr($balance_due_desc, 0, 126);
             $balance_offset = get_the_regis_total_amount(false) - $amount;
             $item['L_PAYMENTREQUEST_0_NAME' . $counter] = $balance_due_desc;
             //$item['L_PAYMENTREQUEST_0_DESC' . $counter] = $discount_description;
             //$item['L_PAYMENTREQUEST_0_NUMBER' . $counter] = $ticket_id;
             $item['L_PAYMENTREQUEST_0_AMT' . $counter] = -1 * $balance_offset;
             $item['L_PAYMENTREQUEST_0_QTY' . $counter] = 1;
         }
         $payment_data = epl_get_regis_payments();
         if (!empty($payment_data)) {
             if (count($payment_data) > 0) {
                 foreach ($payment_data as $time => $p) {
                     $counter++;
                     $payment_made_description = epl__('Offset for payment made on: ') . epl_formatted_date($p['_epl_payment_date']);
                     $payment_made_description = substr($payment_made_description, 0, 126);
                     $item['L_PAYMENTREQUEST_0_NAME' . $counter] = $payment_made_description;
                     //$item['L_PAYMENTREQUEST_0_DESC' . $counter] = $discount_description;
                     //$item['L_PAYMENTREQUEST_0_NUMBER' . $counter] = $ticket_id;
                     $item['L_PAYMENTREQUEST_0_AMT' . $counter] = -1 * $p['_epl_payment_amount'];
                     $item['L_PAYMENTREQUEST_0_QTY' . $counter] = 1;
                 }
             }
         }
         if (($donation_amount = epl_get_element_m('donation_amount', 'money_totals', $cart_totals, 0)) > 0) {
             $counter++;
             $item['L_PAYMENTREQUEST_0_NAME' . $counter] = epl__('Donation');
             $item['L_PAYMENTREQUEST_0_AMT' . $counter] = $donation_amount;
             $item['L_PAYMENTREQUEST_0_QTY' . $counter] = 1;
         }
         if (($original_total = epl_get_element_m('original_total', 'money_totals', $cart_totals, 0)) > 0) {
             $counter++;
             $item['L_PAYMENTREQUEST_0_NAME' . $counter] = epl__('Offset');
             $item['L_PAYMENTREQUEST_0_AMT' . $counter] = -1 * ($original_total - $orderParams['PAYMENTREQUEST_0_AMT']);
             $item['L_PAYMENTREQUEST_0_QTY' . $counter] = 1;
         }
     }
     $request = $requestParams + $item + $orderParams;
     $request = apply_filters('epl_express_checkout_do_payment_request_params', $request);
     $response = $paypal->request('DoExpressCheckoutPayment', $request);
     if (is_array($response) && $response['ACK'] == 'Success') {
         $payment_amount = $response['PAYMENTINFO_0_AMT'];
         $counter = 0;
         if ($parallel_pay) {
             $payment_amount = 0;
             foreach ($tickets as $event_id => $ind_tickets) {
                 $this->ecm->setup_event_details($event_id);
                 foreach ($ind_tickets as $ticket_id => $ticket_qty) {
                     $qty = is_array($ticket_qty) ? array_sum($ticket_qty) : $ticket_qty;
                     if ($qty > 0) {
                         $payment_amount += epl_get_element('PAYMENTINFO_' . $counter . '_AMT', $response, 0);
                         $counter++;
                     }
                 }
             }
         }
         $data['post_ID'] = $post_ID;
         $data['_epl_grand_total'] = $cart_totals['money_totals']['grand_total'];
         $data['_epl_payment_amount'] = $payment_amount;
         $data['_epl_payment_date'] = current_time('mysql');
         $data['_epl_payment_method'] = $this->erm->get_payment_profile_id();
         $data['_epl_transaction_id'] = $response['PAYMENTINFO_0_TRANSACTIONID'];
         $data['_epl_prediscount_total'] = epl_get_element('pre_discount_total', $cart_totals['money_totals'], 0);
         $data['_epl_discount_amount'] = epl_get_element('discount_amount', $cart_totals['money_totals'], 0);
         $data = apply_filters('epl_pp_exp_response_data', $data, $response);
         $this->erm->update_payment_data($data);
         return true;
         //echo "DONE";
     } else {
         $error = 'ERROR: ' . $response['L_SHORTMESSAGE0'] . '. ' . $response['L_LONGMESSAGE0'];
         echo EPL_Util::get_instance()->epl_invoke_error(0, $error, false);
     }
     return false;
 }
function get_remote_help()
{
    if (isset($_REQUEST['epl_get_help']) && $_REQUEST['epl_get_help'] == 1) {
        $r = wp_remote_post('http://www.wpeventsplanner.com/?get_remote_help=1', array('body' => array('help_context' => $_POST['section'], 'api_key' => '14654654dsfd4g54d5sd4fgsdfg')));
        $r = wp_remote_retrieve_body($r);
        $r = json_decode($r);
        echo EPL_Util::get_instance()->epl_response(array('html' => $r->help_text));
        die;
    }
}