GhostManSec
Server: Apache
System: Linux webm019.cluster130.gra.hosting.ovh.net 6.18.42-ovh-vps-grsec-zfs+ #1 SMP PREEMPT_DYNAMIC Wed Aug 5 15:59:48 CEST 2026 x86_64
User: exhehbu (1008962)
PHP: 8.0.30
Disabled: _dyuweyrj4,_dyuweyrj4r,dl
Upload Files
File: /home/exhehbu/www/wp-content/plugins/eventer/WC/wc_functions.php
<?php
if (!function_exists('wceventer_enqueue_scripts')) {
  function wceventer_enqueue_scripts()
  {
    $theme_info = wp_get_theme();
    wp_enqueue_script('eventer-woocommerce-scripts', EVENTER__PLUGIN_URL . 'WC/wc_scripts.js', array(), $theme_info->get('Version'), false);
  }
  add_action('wp_enqueue_scripts', 'wceventer_enqueue_scripts');
}
function eventer_add_product_to_cart()
{
  global $woocommerce;
  $product_id = (isset($_REQUEST['product'])) ? $_REQUEST['product'] : '';
  if (!has_term('eventer', 'product_cat', $product_id)) return;
  if (get_post_type($product_id) != 'product') wp_die();
  $tickets = (isset($_REQUEST['tickets'])) ? $_REQUEST['tickets'] : '';
  $eventer_id = (isset($_REQUEST['ticket_id'])) ? $_REQUEST['ticket_id'] : '';
  $event_date = (isset($_REQUEST['event_date'])) ? $_REQUEST['event_date'] : '';
  $event_date_multi = (isset($_REQUEST['event_multi'])) ? $_REQUEST['event_multi'] : '';
  $event_time = (isset($_REQUEST['event_time'])) ? $_REQUEST['event_time'] : '';
  $event_time_slot = (isset($_REQUEST['event_slot'])) ? $_REQUEST['event_slot'] : '';
  $event_time = ($event_time_slot != '' && $event_time_slot != '00:00:00') ? date_i18n(get_option('time_format'), strtotime($event_time_slot)) : $event_time;
  $event_time_slot_title = (isset($_REQUEST['event_slot_title'])) ? $_REQUEST['event_slot_title'] : '';
  $event_allday = (isset($_REQUEST['event_allday'])) ? $_REQUEST['event_allday'] : '';
  $event_url = (isset($_REQUEST['event_url'])) ? $_REQUEST['event_url'] : '';
  $ticket_price = (isset($_REQUEST['ticket_price'])) ? $_REQUEST['ticket_price'] : '';
  $cart_item_data = array('wceventer_name' => apply_filters('eventer_raw_event_title', '', $eventer_id), 'wceventer_id' => $eventer_id, 'wceventer_date' => $event_date, 'wceventer_time' => $event_time, 'wceventer_url' => $event_url, 'eventer_custom_price' => $ticket_price, 'wceventer_product' => 'ticket', 'wceventer_allday' => $event_allday, 'wceventer_slot' => $event_time_slot, 'wceventer_slot_title' => $event_time_slot_title, 'wceventer_multi' => $event_date_multi);
  foreach ($woocommerce->cart->get_cart() as $key => $item) {
    $item_id = $item['wceventer_id'];
    $cart_product_id = $item['product_id']; // the product ID
    if ($eventer_id == $item_id && $product_id == $cart_product_id) {
      $woocommerce->cart->remove_cart_item($key);
    }
  }
  //$cart_item_data = array('price' => $_REQUEST['product_with_services_cost']);
  WC()->cart->add_to_cart($product_id, $tickets, '', array(), $cart_item_data);
  wp_die();
}
add_action('wp_ajax_eventer_add_product_to_cart', 'eventer_add_product_to_cart');
add_action('wp_ajax_nopriv_eventer_add_product_to_cart', 'eventer_add_product_to_cart');

add_action('woocommerce_before_calculate_totals', 'eventer_add_custom_price');

function eventer_add_custom_price($cart)
{
  foreach ($cart->cart_contents as $key => $value) {
    if (isset($value['_eventer_custom_title']) && $value['_eventer_custom_title'] != '') {
      $value['data']->set_name($value['_eventer_custom_title']);
    }
    if (!isset($value['eventer_custom_price'])) continue;
    $value['data']->set_price((!isset($value['eventer_custom_price'])) ? $value['price'] : $value['eventer_custom_price']);
  }
}

function eventer_custom_pre_get_posts_query($q)
{
  $tax_query = (array) $q->get('tax_query');
  $tax_query[] = array(
    'taxonomy' => 'product_cat',
    'field' => 'slug',
    'terms' => array('eventer', 'eventer_services'), // Don't display products in the eventer category on the shop page.
    'operator' => 'NOT IN'
  );
  if (in_array($q->get('post_type'), array('product'))) {
    $q->set('tax_query', $tax_query);
  }
}
//add_action( 'woocommerce_product_query', 'eventer_custom_pre_get_posts_query' );
//add_action( 'pre_get_posts' ,'eventer_custom_pre_get_posts_query' ); 


function eventer_add_custom_ticket_variation($item_data, $cart_item)
{
  if (!isset($cart_item['wceventer_name'])) {
    return $item_data;
  }
  $show_order_meta_date = (isset($cart_item['wceventer_date'])) ? date_i18n(get_option('date_format'), $cart_item['wceventer_date']) : '';
  $show_order_meta_allday = (isset($cart_item['wceventer_allday'])) ? $cart_item['wceventer_allday'] : '';
  $time = ($show_order_meta_allday != '') ? esc_html__('All day', 'eventer') : $cart_item['wceventer_time'];
  $multi_date = (isset($cart_item['wceventer_multi'])) ? $cart_item['wceventer_multi'] : '';
  $time_slot = (isset($cart_item['wceventer_slot'])) ? $cart_item['wceventer_slot'] : '';
  $time = ($time_slot != '' && $time_slot != '00:00:00') ? date_i18n(get_option('time_format'), strtotime($cart_item['wceventer_slot'])) : $time;
  $item_data[] = array(
    'key'     => esc_html__('Event', 'eventer'),
    'value'   => wc_clean($cart_item['wceventer_name']),
    'display' => '',
  );
  if ($multi_date) {
    $date_all = explode('-', $multi_date);
    $date_start = date_i18n(get_option('date_format') . ' ' . get_option('time_format'), $date_all[0]);
    $date_end = date_i18n(get_option('date_format') . ' ' . get_option('time_format'), $date_all[1]);
  }
  $cart_date_show = ($multi_date != '') ? $date_start . '-' . $date_end : $show_order_meta_date . ' ' . $time;
  $item_data[] = array(
    'key'     => esc_html__('Event Date', 'eventer'),
    'value'   => $cart_date_show,
    'display' => '',
  );
  if (isset($cart_item['wceventer_services'])) {
    $item_data[] = array(
      'key'     => esc_html__('Services', 'eventer'),
      'value'   => wc_clean($cart_item['wceventer_services']),
      'display' => '',
    );
  }
  return $item_data;
}
add_filter('woocommerce_get_item_data', 'eventer_add_custom_ticket_variation', 10, 2);

//add_filter('woocommerce_checkout_cart_item_quantity','eventer_add_ticket_custom_option_from_session_into_cart',1,3);  
add_filter('woocommerce_cart_item_name', 'eventer_add_ticket_custom_option_from_session_into_cart', 1, 3);
add_filter('woocommerce_order_item_name', 'eventer_add_ticket_custom_option_from_session_into_cart', 999, 3);
if (!function_exists('eventer_add_ticket_custom_option_from_session_into_cart')) {
  function eventer_add_ticket_custom_option_from_session_into_cart($product_name, $values, $cart_item_key)
  {
    if ((!has_term('eventer', 'product_cat', $values['product_id']) && !has_term('eventer_services', 'product_cat', $values['product_id'])) || is_page(array('checkout'))) return $product_name;
    if (isset($values['_eventer_custom_title']) && $values['_eventer_custom_title'] != '') {
      return $values['_eventer_custom_title'];
    } else {
      return get_the_title($values['product_id']);
    }
  }
}
add_action('woocommerce_checkout_order_created', 'eventer_new_order_send_emails', 99, 1);
add_action('woocommerce_order_status_processing', 'eventer_processing_order_send_emails', 99, 1 );
add_action('woocommerce_order_status_completed', 'eventer_payment_confirmation_send_emails', 99, 1 );
function eventer_new_order_send_emails( $order ) {
  eventer_normalize_pre_send_emails( $order->get_id(), 'before_payment' );
}

function eventer_processing_order_send_emails( $order_id ) {
  eventer_normalize_pre_send_emails( $order_id, 'before_payment' );
}

function eventer_payment_confirmation_send_emails( $order_id ) {
  eventer_normalize_pre_send_emails( $order_id, 'after_payment' );
}

function eventer_normalize_pre_send_emails( $order_id, $payment ) {

  $registration_process = new RegistrationProcess();
  $registration_process->eventerWooRegister( $order_id );

  $reg_id = get_post_meta( $order_id, 'eventer_order_recorded', true );
  $reg_object = getRegistration( $reg_id );
  $tickets = getRegistrationTickets( $reg_id );

  $content = eventer_get_woo_email_content( $order_id, $reg_object, $tickets, $payment );
  eventer_send_emails( $reg_object, $content, $payment );
}

function eventer_send_emails( $reg_object, $content, $payment ) {
  $reg_user_email = getRegistrationMeta( $reg_object->id, 'user_email' );

  $sender = eventer_get_settings( 'email_from_address' ) ? eventer_get_settings( 'email_from_address' ) : get_option('admin_email');

  $sender_name = eventer_get_settings( 'email_from_name' ) ? eventer_get_settings( 'email_from_name' ) : get_bloginfo('name');

  $headers[] = 'From: ' . $sender_name . ' <' . $sender . '>';
  $headers[] = "MIME-Version: 1.0" . "\r\n";
  $headers[] = "Content-Type: text/html; charset=" . get_bloginfo('charset') . "" . "\r\n";

  $content = wpautop($content);
  $subject = esc_html__('Ticket Pre Payment Email', 'eventer');
  $registration_content_switch = eventer_get_settings('pre_registration_content_switch');
  if ($payment == 'after_payment') {
    $subject = esc_html__('Payment Confirmation email', 'eventer');
    $registration_content_switch = eventer_get_settings('payment_confirmation_content_switch');
  }

  if( $registration_content_switch == '0' ) return;

  $email_status = wp_mail($sender, $subject, $content, $headers);
  if ($email_status) {
    return 1;
  } else {
    return 0;
  }
}

function eventer_get_woo_email_content( $order_id, $reg_object, $tickets, $type ) {
  
  $email_content = eventer_get_settings('pre_registration_content');

  if( $type == 'after_payment' ){
    $email_content = eventer_get_settings('payment_confirmation_content');
  }

  if( empty( $email_content ) ) return;

  $order = wc_get_order($order_id);
  $eventer_id = $event_date = '';
  $services = [];

  foreach ($order->get_items() as $item_key => $item ) {
    $eventer_id = wc_get_order_item_meta($item->get_id(), '_wceventer_id', true);
    $eventer_date = wc_get_order_item_meta($item->get_id(), '_wceventer_date', true);
    $item_data = $item->get_data();
    $product_name = $item_data['name'];
    $quantity = $item_data['quantity'];
    $services[$product_name] = array('name' => $product_name, 'quantity' => $quantity);
  }

  $event_services = [];
  $services_list = '';
  if ($services) {
    foreach ($services as $service) {
      $event_services['{' . $service['name'] . '}'] = $service['quantity'];
      if ($service['name'] == $service['quantity'] ) {
        $services_list .= '<p>' . $service['name'] . '</p>';
      } else {
        $services_list .= '<p>' . $service['name'] . ': ' . $service['quantity'] . '</p>';
      }
    }
  }

  $eventer_organizer = get_the_terms($eventer_id, 'eventer-organizer');
  $eventer_venue = get_the_terms($eventer_id, 'eventer-venue');
  if (!is_wp_error($eventer_venue) && !empty($eventer_venue)) {
    foreach ($eventer_venue as $venue) {
      $location_address = get_term_meta($venue->term_id, 'venue_address', true);
      $elocation = ($location_address != '') ? $location_address : $venue->name;
    }
  }
  if (!is_wp_error($eventer_organizer) && !empty($eventer_organizer)) {
    foreach ($eventer_organizer as $organizer) {
      $organizer_name = $organizer->name;
      $organizer_email = get_term_meta($organizer->term_id, 'organizer_email', true);
      $organizer_phone = get_term_meta($organizer->term_id, 'organizer_phone', true);
      $organizer_website = get_term_meta($organizer->term_id, 'organizer_website', true);
    }
  }
  $event_start_date = get_post_meta($eventer_id, 'eventer_event_start_dt', true);
  $event_end_date = get_post_meta($eventer_id, 'eventer_event_end_dt', true);
  $start_date_string = strtotime($event_start_date);
  $end_date_string = strtotime($event_end_date);
  $eventer_date_formatted = date_i18n(get_option('date_format'), $start_date_string);
  if (date_i18n('Y-m-d', $start_date_string) != date_i18n('Y-m-d', $end_date_string)) {
    $eventer_date_formatted = date_i18n(get_option('date_format') . ' ' . get_option('time_format'), $start_date_string) . ' - ' . date_i18n(get_option('date_format') . ' ' . get_option('time_format'), $end_date_string);
  }
  $eventer_time_formatted = date_i18n(get_option('time_format'), $start_date_string);
  $payment_status = $reg_object->reg_status;
  $user_fields_val = $registrant_tickets_name = $registrant_tickets_vals = array();
  $user_info = '';
  $vars = [];

  $tickets_name_numbers = '';
  $tickets_array = [];
  if ( ! empty( $tickets ) ) {
    $ticket_start = 1;

    foreach( $tickets as $index => $ticket ) {
      $tickets_array[$ticket->ticket_name] = $ticket->ticket_name . ' X ' . $services[$ticket->ticket_name]['quantity'] . '<br/>';
    
      $registrant_tickets_name['{ticket' . $ticket_start . '}'] = $ticket->ticket_name;
      $registrant_tickets_vals['{ticket_nos' . $ticket_start . '}'] = $services[$ticket->ticket_name]['quantity'];
      $vars['{registrant_name' . $ticket_start.'}'] = getTicketMeta($ticket->id, 'name');
      $vars['{registrant_email' . $ticket_start.'}'] = getTicketMeta($ticket->id, 'email');
      $ticket_start++;
    }
    $tickets_name_numbers = join( ' ', $tickets_array );
  }

    $reg_user_name = getRegistrationMeta( $reg_object->id, 'user_name' );
    $reg_user_email = getRegistrationMeta( $reg_object->id, 'user_email' );
    $registrant_time_slot = getRegistrationMeta( $reg_object->id, 'slot_title' );
    $registrant_id = $reg_object->id;
    $registrant_email = $reg_user_email;

    $user_fields_val['{Name}'] = $reg_user_name;
    $user_fields_val['{email}'] = $reg_user_email;
    $user_info .= '<p>Name: ' . esc_attr($reg_user_name) . '</p>';
    $user_info .= '<p>email: ' . esc_attr($reg_user_email) . '</p>';

  $paymentmode = $reg_object->paymentmode;

  $organizer = wp_get_object_terms($eventer_id, 'eventer-organizer');
  $organizer_email = $completed_url_tkt = $pending_url_tkt = $failed_url_tkt = '';
  
  $message_dynamic = $email_content;

  // Get the payment method
  $payment_method = $order->get_payment_method();
  // Check the payment method
  if ($payment_method == 'offline_payment') {
     remove_shortcode('eventer_free');
  } else {
    remove_shortcode('eventer_offline');
    remove_shortcode('eventer_free');
  }

  $content = do_shortcode($message_dynamic);
  $registration_content_new = preg_replace('#\[[^\]]+\]#', '', $content);

  //Generate unique number using registration ID
  //We here using $start =8 and $end = 9, so that user can see tickets when receiving this email
  $registration_unique_number = eventer_encode_security_registration($registrant_id, 8, 9);
  if ($payment_status == "Completed" || $payment_status == "completed") {
    $completed_url_tkt = eventer_generate_endpoint_url('edate', $eventer_date, get_permalink($eventer_id));
    $completed_url_tkt = add_query_arg(array('reg' => $registration_unique_number), $completed_url_tkt);
  }
  if ($payment_status == "Pending" || $payment_status == "pending") {
    $pending_url_tkt = 'pending';
  } elseif ($payment_status == "Failed" || $payment_status == "failed") {
    $failed_url_tkt = 'failed';
  }

  $amount = $order->get_total();
  $eventer_currency = eventer_get_currency_symbol(eventer_get_settings('eventer_paypal_currency'));
  //We are here changing provided codes to the dynamic data of registrants
  
    $vars['{services}']         = $services_list;
    $vars['{venue}']            = $elocation;
    $vars['{organizer_name}']   = $organizer_name;
    $vars['{organizer_email}']  = $organizer_email;
    $vars['{organizer_phone}']  = $organizer_phone;
    $vars['{organizer_website}']= $organizer_website;
    $vars['{reg_id}']           = esc_attr($registrant_id);
    $vars['{tx_id}']            = $order->get_transaction_id();
    $vars['{pmt_st}']           = esc_attr($payment_status);
    $vars['{reg_email}']        = $registrant_email;
    $vars['{amt_pd}']           = esc_attr($eventer_currency . $amount);
    $vars['{evt_date}']         = esc_attr($eventer_date_formatted);
    $vars['{evt_time}']         = esc_attr($eventer_time_formatted);
    $vars['{evt_title}']        = apply_filters('eventer_raw_event_title', '', $eventer_id);
    $vars['{evt_url}']          = esc_url(eventer_generate_endpoint_url('edate', $eventer_date, get_permalink($eventer_id)));
    $vars['{event_additional_info}'] = wpautop(get_post_meta($eventer_id, 'eventer_event_email_additional_info', true));
    $vars['{tkt}']              = $tickets_name_numbers;
    $vars['{time_slot_title}']  = $registrant_time_slot;
    $vars['{user_details}']     = $user_info;
    $vars['{completed}']        = $completed_url_tkt;
    $vars['{pending}']          = $pending_url_tkt;
    $vars['{failed}']           = $failed_url_tkt;
  $new_vars = array_merge($vars, $user_fields_val, $registrant_tickets_name, $registrant_tickets_vals);
  $message = strtr($registration_content_new, $new_vars);
  $start = '{';
  $end = '}';
  $pattern = sprintf(
    '/%s(.+?)%s/ims',
    preg_quote($start, '/'),
    preg_quote($end, '/')
  );

  $match_found = '';
  if (preg_match_all($pattern, $message, $matches)) {
    $match_found = $matches[0];
  }
  if ($match_found) {
    foreach ($match_found as $match) {
      $message = str_replace($match, '', $message);
    }
  }
  $content = $message;
  return $content;
}

add_action('woocommerce_new_order_item', 'eventer_add_values_to_order_item_meta', 1, 3);
if (!function_exists('eventer_add_values_to_order_item_meta')) {
  function eventer_add_values_to_order_item_meta($item_id, $item, $order_id)
  {
    $order_item = new WC_Order_Item_Product($item_id);
    $product_id = $order_item->get_product_id();
    if (!has_term('eventer', 'product_cat', $product_id) && !has_term('eventer_services', 'product_cat', $product_id)) return;
    global $woocommerce, $wpdb;
    $eventer_name = (isset($item->legacy_values['wceventer_name'])) ? $item->legacy_values['wceventer_name'] : '';
    $wceventer_id = (isset($item->legacy_values['wceventer_id'])) ? $item->legacy_values['wceventer_id'] : '';
    $wceventer_date = (isset($item->legacy_values['wceventer_date'])) ? $item->legacy_values['wceventer_date'] : '';
    $wceventer_date_multi = (isset($item->legacy_values['wceventer_multi'])) ? $item->legacy_values['wceventer_multi'] : '';
    $wceventer_time = (isset($item->legacy_values['wceventer_time'])) ? $item->legacy_values['wceventer_time'] : '';
    $wceventer_time_slot = (isset($item->legacy_values['wceventer_slot'])) ? $item->legacy_values['wceventer_slot'] : '';
    $wceventer_time_slot_title = (isset($item->legacy_values['wceventer_slot_title'])) ? $item->legacy_values['wceventer_slot_title'] : '';
    $wceventer_ticket_id = (isset($item->legacy_values['ticket_id'])) ? $item->legacy_values['ticket_id'] : '';
    $wceventer_allday = (isset($item->legacy_values['wceventer_allday'])) ? $item->legacy_values['wceventer_allday'] : '';
    $wceventer_url = (isset($item->legacy_values['wceventer_url'])) ? $item->legacy_values['wceventer_url'] : '';
    $wceventer_registrants = (isset($item->legacy_values['eventer_registrants'])) ? $item->legacy_values['eventer_registrants'] : '';
    $wceventer_services = (isset($item->legacy_values['wceventer_services'])) ? $item->legacy_values['wceventer_services'] : '';
    $wceventer_product = (isset($item->legacy_values['wceventer_product'])) ? $item->legacy_values['wceventer_product'] : '';
    $wceventer_product_title = (isset($item->legacy_values['_eventer_custom_title'])) ? $item->legacy_values['_eventer_custom_title'] : '';

    $wc_registrants = (isset($item->legacy_values['registrants'])) ? $item->legacy_values['registrants'] : '';

    if (!empty($eventer_name)) {
      wc_add_order_item_meta($item_id, 'Event name', $eventer_name);
    }
    if (!empty($wceventer_id)) {
      wc_add_order_item_meta($item_id, '_wceventer_id', $wceventer_id);
    }
    if (!empty($wceventer_date)) {
      $set_time = ($wceventer_allday != '') ? '' : $wceventer_time;
      $show_order_meta_date = date_i18n(get_option('date_format'), $wceventer_date);
      $save_order_meta_date = date_i18n('Y-m-d', $wceventer_date);
      wc_add_order_item_meta($item_id, 'Event Date', $show_order_meta_date . ' ' . $set_time);
      wc_add_order_item_meta($item_id, '_wceventer_date', $save_order_meta_date);
    }
    wc_add_order_item_meta($item_id, '_eventer_multi_date', $wceventer_date_multi);
    if (!empty($wceventer_url)) {
      wc_add_order_item_meta($item_id, 'Event URL', $wceventer_url);
    }
    if (!empty($wceventer_time_slot)) {
      wc_add_order_item_meta($item_id, '_wceventer_slot', $wceventer_time_slot);
      wc_add_order_item_meta($item_id, 'wceventer_slot_title', $wceventer_time_slot_title);
      wc_add_order_item_meta($item_id, '_ticket_id', $wceventer_ticket_id);
    }
    if (!empty($wceventer_allday)) {
      wc_add_order_item_meta($item_id, '_eventer_allday', $wceventer_allday);
    }
    if (!empty($wceventer_registrants)) {
      wc_add_order_item_meta($item_id, '_eventer_registrants', $wceventer_registrants);
    }
    if (!empty($wceventer_services)) {
      wc_add_order_item_meta($item_id, 'Services', $wceventer_services);
    }
    if (!empty($wceventer_product)) {
      wc_add_order_item_meta($item_id, '_eventer_product', $wceventer_product);
    }
    if (!empty($wceventer_product_title)) {
      wc_add_order_item_meta($item_id, '_eventer_custom_title', $wceventer_product_title);
    }

    if (!empty($wc_registrants)) {
      wc_add_order_item_meta( $item_id, '_wc_event_registrants', serialize( $wc_registrants ) );
    }
  }
}

add_action('woocommerce_before_cart_item_quantity_zero', 'eventer_remove_user_ticket_data_options_from_cart', 1, 1);







//add_filter('woocommerce_order_item_display_meta_key', 'change_order_item_meta_title', 20, 3);
/**
 * Changing a meta title
 * @param  string        $key  The meta key
 * @param  WC_Meta_Data  $meta The meta object
 * @param  WC_Order_Item $item The order item object
 * @return string        The title
 */
function change_order_item_meta_title($key, $meta, $item)
{

  // By using $meta-key we are sure we have the correct one.
  if ('Event Date' === $meta->key) {
    $key = 'SOMETHING';
  }

  return $key;
}
add_filter('woocommerce_order_item_display_meta_value', 'change_order_item_meta_value', 20, 3);
/**
 * Changing a meta value
 * @param  string        $value  The meta value
 * @param  WC_Meta_Data  $meta   The meta object
 * @param  WC_Order_Item $item   The order item object
 * @return string        The title
 */
function change_order_item_meta_value($value, $meta, $item)
{

  // By using $meta-key we are sure we have the correct one.
  if ('Event Date' === $meta->key) {
    $item_id = $item->get_id();
    $multi_date = wc_get_order_item_meta($item_id, '_eventer_multi_date', true);
    if ($multi_date != '') {
      $date_all = explode('-', $multi_date);
      $date_start = date_i18n(get_option('date_format') . ' ' . get_option('time_format'), $date_all[0]);
      $date_end = date_i18n(get_option('date_format') . ' ' . get_option('time_format'), $date_all[1]);
      $value = $date_start . '-' . $date_end;
    }
  }

  return $value;
}





if (!function_exists('eventer_remove_user_ticket_data_options_from_cart')) {
  function eventer_remove_user_ticket_data_options_from_cart($cart_item_key)
  {
    global $woocommerce;
    // Get cart
    $cart = $woocommerce->cart->get_cart();
    // For each item in cart, if item is upsell of deleted product, delete it
    foreach ($cart as $key => $values) {
      //if ( $values['_wceventer_id'] == $cart_item_key || $values['_wceventer_date'] == $cart_item_key)
      //unset( $woocommerce->cart->cart_contents[ $key ] );
    }
  }
}
add_action('woocommerce_checkout_order_processed', 'eventer_update_tickets', 10, 1);
//add_action('woocommerce_thankyou', 'eventer_update_tickets', 10, 1);
function eventer_update_tickets($order_id)
{
  if (!$order_id) return;
  $ticket_orders = (is_array(get_option('eventer_ticket_orders'))) ? get_option('eventer_ticket_orders') : array();
  if (in_array($order_id, $ticket_orders)) {
    return;
  }
  $order = wc_get_order($order_id);
  $update_new_val = $new_already_booked = $cart_items = array();
  foreach ($order->get_items() as $item_key => $item_values) :
    $new_already_booked = $update_new_val = array();
    $item_data = $item_values->get_data();
    $item_id = $item_values->get_id();
    $product_name = $item_data['name'];
    $product_id = $item_data['product_id'];
    if (!has_term('eventer', 'product_cat', $product_id) && !has_term('eventer_services', 'product_cat', $product_id)) continue;
    $quantity = $item_data['quantity'];
    $order_event_url = wc_get_order_item_meta($item_id, 'Event URL', true);
    $eventer_id = wc_get_order_item_meta($item_id, '_wceventer_id', true);
    $original_event = eventer_wpml_original_post_id($eventer_id);
    $eventer_date = wc_get_order_item_meta($item_id, '_wceventer_date', true);
    $eventer_time_slot = wc_get_order_item_meta($item_id, '_wceventer_slot', true);
    $eventer_time = wc_get_order_item_meta($item_id, 'Event Date', true);
    $eventer_time = $eventer_time_slot;
    $send_ticket_data = array('id' => intval($product_id) + intval($original_event), 'number' => $quantity);
    if (get_post_meta($eventer_id, 'eventer_common_ticket_count', true) != '') {
      $booked_tickets = eventer_update_date_wise_bookings_table($eventer_id, $eventer_date . ' ' . $eventer_time, array(), 2);
      if ($booked_tickets) {
        foreach ($booked_tickets as $get_ticket) {
          $all_tickets = (isset($get_ticket['pid'])) ? $get_ticket['pid'] : '';
          if ($all_tickets != '' && $all_tickets != $product_id) {
            $send_ticket_data_new = array('id' => intval($all_tickets) + intval($original_event), 'number' => $quantity);
            eventer_update_date_wise_bookings_table($eventer_id, $eventer_date . ' ' . $eventer_time, array($send_ticket_data_new), 3, 1);
          }
        }
      }
    }
    eventer_update_date_wise_bookings_table($eventer_id, $eventer_date . ' ' . $eventer_time, array($send_ticket_data), 3, 1);
  endforeach;
  $new_order_vals = array_unique(array_merge($ticket_orders, array($order_id)));
  update_option('eventer_ticket_orders', $new_order_vals);
}

function eventer_remove_editing_quantity($product_quantity, $cart_item_key)
{
  $cart_item = WC()->cart->cart_contents[$cart_item_key];
  $product_id = $cart_item['product_id'];
  if (!has_term('eventer', 'product_cat', $product_id) && !has_term('eventer_services', 'product_cat', $product_id)) return $product_quantity;
  $quantity = $cart_item['quantity'];
  return $quantity;
}
add_filter('woocommerce_cart_item_quantity', 'eventer_remove_editing_quantity', 10, 3);

function eventer_remove_permalink_thumb($image, $cart_item, $cart_item_key)
{
  $product_id = $cart_item['product_id'];
  $event_id = (isset($cart_item['wceventer_id'])) ? $cart_item['wceventer_id'] : '';
  if (!has_term('eventer', 'product_cat', $product_id) && !has_term('eventer_services', 'product_cat', $product_id)) return $image;
  return get_the_post_thumbnail($event_id);
}
add_filter('woocommerce_cart_item_thumbnail', 'eventer_remove_permalink_thumb', 10, 3);
function eventer_alter_ticket_thumbnail($product_get_permalink_cart_item, $cart_item, $cart_item_key)
{
  $product_id = $cart_item['product_id'];
  $event_url = (isset($cart_item['wceventer_url'])) ? $cart_item['wceventer_url'] : '';
  if (!has_term('eventer', 'product_cat', $product_id) && !has_term('eventer_services', 'product_cat', $product_id)) return $product_get_permalink_cart_item;
  return $event_url;
}
add_filter('woocommerce_cart_item_permalink', 'eventer_alter_ticket_thumbnail', 10, 3);
function eventer_change_item_key($cart_item_data, $product_id)
{
  if (!has_term('eventer', 'product_cat', $product_id) && has_term('eventer_services', 'product_cat', $product_id)) return $cart_item_data;
  $unique_cart_item_key = md5(microtime() . rand());
  $cart_item_data['unique_key'] = $unique_cart_item_key;
  return $cart_item_data;
}
add_filter('woocommerce_add_cart_item_data', 'eventer_change_item_key', 10, 2);
add_filter('woocommerce_order_item_name', 'eventer_remove_hyperlink_from_order', 10, 2);
function eventer_remove_hyperlink_from_order($item_name, $item)
{
  if (!has_term('eventer', 'product_cat', $item['product_id']) && !has_term('eventer_services', 'product_cat', $item['product_id'])) return $item_name;
  $item_name = get_the_title($item['product_id']);
  return $item_name;
}
function eventer_add_meta_on_success($array)
{
  $order = $array['order'];
  if ($order->get_status() == "completed") {
    wp_add_inline_script('eventer-init', 'jQuery(".eventer-show-download-tickets-form").show();');
    $order_id = $order->get_id();
    $has_eventer = 0;

    foreach ($order->get_items() as $item_key => $item_values) :
      $item_data = $item_values->get_data();
      $product_id = $item_data['product_id'];
      if (!has_term('eventer', 'product_cat', $product_id)) continue;
      $has_eventer = 1;
    endforeach;
    if ($has_eventer == 0) return $array;

    wp_schedule_single_event(time() + 5, 'eventer_woocommerce_generate_ticket', array($order_id));
  }
  return $array;
}
add_filter('woocommerce_email_order_items_args', 'eventer_add_meta_on_success', 12, 1);

add_action('eventer_woocommerce_generate_ticket', 'eventer_woo_tickets_attachment', 10, 1);
function eventer_woo_tickets_attachment($order_id)
{
  $registrants = eventer_get_registrant_details('eventer', $order_id);
  echo apply_filters('eventer_status_changed_completed', $registrants);
}

function eventer_change_product_meta_key($display_key)
{
  if ($display_key == "Event Ticket") {
    $display_key = esc_html__('Event Ticket', 'eventer');
  } elseif ($display_key == "Event name") {
    $display_key = esc_html__('Event name', 'eventer');
  } elseif ($display_key == "Event Date") {
    $display_key = esc_html__('Event Date', 'eventer');
  } elseif ($display_key == "Event URL") {
    $display_key = esc_html__('Event URL', 'eventer');
  } elseif ($display_key == "Services") {
    $display_key = esc_html__('Services', 'eventer');
  }
  return $display_key;
};
add_filter('woocommerce_order_item_display_meta_key', 'eventer_change_product_meta_key', 10, 1);

//add_action('eventer_dashboard_bookings_tickets', 'eventer_create_booking_woocommerce', 20, 1);
//add_action('woocommerce_thankyou', 'eventer_show_thanks_page_download_button', 1);

function eventer_show_thanks_page_download_button($order_id)
{
  $order = wc_get_order($order_id);
  $download = '';
  foreach ($order->get_items() as $item_key => $item_values) :
    $item_id = $item_values->get_id();
    $eventer_product_type = wc_get_order_item_meta($item_id, '_eventer_product', true);
    if ($eventer_product_type == '') continue;
    $download = 1;
  endforeach;
  if ($download == 1) {
    $back_order_tickets = (isset($_REQUEST['backorder'])) ? wp_get_referer() : '';
    $registrant_uname = $order->get_billing_first_name() . ' ' . $order->get_billing_last_name();
    $registrant_email = $order->get_billing_email();
    $default = array();
    $newTickets = $new_tickets = apply_filters('eventer_preapare_data_for_tickets', 'eventer', $order_id, array());
    $registrants = eventer_get_registrant_details('eventer', $order_id);
    $user_system = unserialize($registrants->user_system);
    $tickets = isset($user_system['tickets']) ? $user_system['tickets'] : [];
    if ($tickets) {
      $count = 0;
      foreach ($tickets as $index => $ticket) {
        $new_tickets['data-regpos'] = 14;
        $new_tickets['data-backorder'] = $back_order_tickets;
        $new_tickets['default']['data-eid'] = '';
        $new_tickets['default']['data-regpos'] = 14;
        $new_tickets['default']['data-registrant'] = $registrants->id;
        $ticket_info = $newTickets['individual'][0];
        $count++;
        $ticket_info['data-eventid'] = $ticket['event'];
        $ticket_info['data-eventname'] = get_the_title($ticket['event']);
        $ticket_info['data-ticket'] = $ticket['ticket'];
        $quantity = $ticket['quantity'];
        $qr_id = $ticket['id'];
        $ticket_info['data-qrcode'] = $registrants->id . '-' . $qr_id;
        $new_tickets['individual'] = [$ticket_info];
        for ($counter = 0; $counter < $quantity; $counter++) {
          do_action('eventer_ticket_raw_design', '', $new_tickets);
        }
      }
    }

    echo '<form action="' . esc_url(admin_url('admin-ajax.php')) . '" method="post" class="eventer-show-download-tickets-form" style="display:none;">';
    echo '<input type="hidden" name="action" value="eventer_woo_download_tickets">';
    echo '<input type="hidden" class="eventer-woo-tickets" name="tickets" value="">';
    echo '<input type="hidden" name="captcha" value="' . wp_create_nonce('eventer-tickets-download') . '">';
    echo '<input type="submit" value="' . esc_html__('Download Tickets', 'eventer') . '" class="button"></form><br/>';
  }
}
//add_action('woocommerce_checkout_order_processed', 'eventer_create_booking_woocommerce', 999);

function eventer_create_booking_woocommerce($order_id)
{
  return;
  if (empty(get_post_meta($order_id, 'eventer_order_recorded', true))) {
  $order = wc_get_order($order_id);
    $registrant_uname = $order->get_billing_first_name() . ' ' . $order->get_billing_last_name();
    $registrant_email = $order->get_billing_email();
    $event_ids = $registrants = $all_tickets = $all_services = $reg_details = $ticket_wise_registrants = array();
    foreach ($order->get_items() as $item_key => $item_values) :
      $item_data = $item_values->get_data();
      $item_id = $item_values->get_id();
      $product_id = $item_data['product_id'];
      $eventer_product_type = wc_get_order_item_meta($item_id, '_eventer_product', true);
      if ($eventer_product_type == '') continue;
      $event_date = wc_get_order_item_meta($item_id, '_wceventer_date', true);
      $event_time_slot = wc_get_order_item_meta($item_id, '_wceventer_slot', true);
      $event_time_slot_title = wc_get_order_item_meta($item_id, 'wceventer_slot_title', true);
      $event_id = wc_get_order_item_meta($item_id, '_wceventer_id', true);
      $event_allday = wc_get_order_item_meta($item_id, '_eventer_allday', true);
      $event_ids[$event_id . '-' . mt_rand()] = $event_date;
      $event_time = get_post_meta($event_id, 'eventer_event_start_dt', true);
      $event_time = date_i18n(get_option('time_format'), strtotime($event_time));
      $event_time = ($event_allday != '') ? esc_html__('All day', 'eventer') : $event_time;
      $event_registrants = wc_get_order_item_meta($item_id, '_eventer_registrants', true);
      $registrants[$event_id . '-' . mt_rand()] = $event_registrants;
      $event_date = strtotime($event_date);
      $product_name = $item_data['name'];
      $quantity = $item_data['quantity'];
      $all_tickets[] = array('name' => $product_name, 'quantity' => $quantity, 'number' => $quantity);
      $ticket_wise_registrants[] = array('event' => $event_id, 'date' => $event_date, 'type' => $eventer_product_type, 'ticket' => $product_name, 'quantity' => $quantity, 'registrants' => $event_registrants, 'time_slot' => $event_time_slot, 'slot_title' => $event_time_slot_title, 'id' => intval($product_id) + intval($event_id));
      if ($eventer_product_type != 'ticket') {
        $all_services[] = array('name' => $product_name, 'quantity' => $quantity);
      }
    endforeach;
    $current_date = date_i18n('Y-m-d G:i');
    $transID = $order->get_transaction_id();
    $payment_method = $order->get_payment_method();
    $ip = eventer_client_ip();
    $status = $order->get_status();
    $amount = $order->get_total();
    $user_reg_id = get_current_user_id();
    $user_system_data = serialize(array('ip' => $ip, 'services' => $all_services, 'tickets' => $ticket_wise_registrants, 'registrants' => $registrants, 'events' => $event_ids, 'time_slot' => $event_time_slot, 'slot_title' => $event_time_slot_title));
    $eventer_date = $event_date;
    global $wpdb;
    $table_name = $wpdb->prefix . "eventer_registrant";
    $wpdb->query(
      $wpdb->prepare(
        "INSERT INTO $table_name
          ( eventer, transaction_id , username, email, paymentmode, user_details, tickets, ctime, status, amount, user_system, user_id)
          VALUES ( %d, %s, %s, %s, %s, %s, %s, %s, %s, %d, %s, %d )",
        array($order_id, $transID, $registrant_uname, $registrant_email, $payment_method, serialize($reg_details), serialize($all_tickets), $current_date, $status, $amount, $user_system_data, $user_reg_id)
      )
    );
    update_post_meta($order_id, 'eventer_order_recorded', $wpdb->insert_id);
    wp_schedule_single_event(time() + 5, 'eventer_woocommerce_ticket_restore_auto', array($order_id));
  }
}

if (eventer_get_settings('eventer_woo_layout') != 'off') {
  add_action('woocommerce_widget_shopping_cart_buttons', function () {
    // Removing Buttons
    remove_action('woocommerce_widget_shopping_cart_buttons', 'woocommerce_widget_shopping_cart_button_view_cart', 10);
    remove_action('woocommerce_widget_shopping_cart_buttons', 'woocommerce_widget_shopping_cart_proceed_to_checkout', 20);

    // Adding customized Buttons
    add_action('woocommerce_widget_shopping_cart_buttons', 'eventer_custom_widget_shopping_cart_button_view_cart', 10);
    add_action('woocommerce_widget_shopping_cart_buttons', 'eventer_custom_widget_shopping_cart_button_view_cart', 20);
  }, 1);
}


// Custom cart button
function eventer_custom_widget_shopping_cart_button_view_cart()
{
  echo '';
}
add_action('woocommerce_order_status_changed', 'eventer_update_booking_status');
function eventer_update_booking_status($order_id)
{
  $order = wc_get_order($order_id);
  $status = $order->get_status();
  $registrant_id = get_post_meta($order_id, 'eventer_order_recorded', true);
  eventer_update_registrant_details(array('status' => $status), $registrant_id, array("%s", "%s"));
  //}
}
add_action('eventer_woocommerce_ticket_restore_auto', 'eventer_update_tickets_woocommerce', 10, 1);

function eventer_update_tickets_woocommerce($order_id)
{
  $order = wc_get_order($order_id);
  $status = $order->get_status();
  if ($status != 'completed') {
    wp_schedule_single_event(time(), 'eventer_woocommerce_order_status_changed', array($order_id, 'pendings', 'failed'));
  }
}
//add_action('eventer_woocommerce_order_status_changed', 'eventer_status_changed_restore', 10, 3);
add_action('woocommerce_order_status_changed', 'eventer_status_changed_restore', 10, 3);
function eventer_status_changed_restore($order_id, $old_status, $new_status)
{
  if ($new_status == 'completed') {
    echo apply_filters('eventer_registrationv2_status_update', $order_id, 'wc_functions');
  }
  return;
  $registrants = eventer_get_registrant_details('eventer', $order_id);
  $user_system = unserialize($registrants->user_system);
  $tickets = (isset($user_system['tickets'])) ? $user_system['tickets'] : array();
  $tickets_restore = (isset($user_system['restore'])) ? $user_system['restore'] : '';
  if ($old_status == 'pending' && $tickets_restore == '') {
    $user_system['restore'] = 0;
    eventer_update_registrant_details(array('user_system' => serialize($user_system)), $registrants->id, array("%s", "%s"));
    return;
  }
  if (!empty($tickets) && $tickets_restore == 1 && $new_status == 'completed') {
    foreach ($tickets as $ticket) {
      if (!isset($ticket['id'])) break;
      $ticket_date = date_i18n('Y-m-d', $ticket['date']);
      $ticket_time = (isset($ticket['time_slot']) && $ticket['time_slot'] != '') ? $ticket['time_slot'] : '00:00:00';
      eventer_update_date_wise_bookings_table($ticket['event'], $ticket_date . ' ' . $ticket_time, array(array('id' => $ticket['id'], 'number' => $ticket['quantity'])), 3, 1);
    }
    $user_system['restore'] = 0;
    eventer_update_registrant_details(array('user_system' => serialize($user_system)), $registrants->id, array("%s", "%s"));
  } elseif ($tickets_restore != 1 && $new_status != 'completed') {
    foreach ($tickets as $ticket) {
      if (!isset($ticket['id'])) break;
      $ticket_date = date_i18n('Y-m-d', $ticket['date']);
      $ticket_time = (isset($ticket['time_slot']) && $ticket['time_slot'] != '') ? $ticket['time_slot'] : '00:00:00';
      eventer_update_date_wise_bookings_table($ticket['event'], $ticket_date . ' ' . $ticket_time, array(array('id' => $ticket['id'], 'number' => $ticket['quantity'])), 3, 2);
    }
    $user_system['restore'] = 1;
    eventer_update_registrant_details(array('user_system' => serialize($user_system)), $registrants->id, array("%s", "%s"));
  }
}

add_filter('woocommerce_checkout_get_value', 'eventer_modify_checkout_fields', 10, 2);
function eventer_modify_checkout_fields($value, $input)
{
  $token = (!empty($_GET['token'])) ? $_GET['token'] : '';
  $checkout_fields = array(
    'billing_first_name'    => ((isset($_COOKIE['woo_checkout_user_name'])) ? $_COOKIE['woo_checkout_user_name'] : ''),
    'billing_email'         => ((isset($_COOKIE['woo_checkout_user_email'])) ? $_COOKIE['woo_checkout_user_email'] : ''),
  );
  foreach ($checkout_fields as $key_field => $field_value) {
    if ($input == $key_field && !empty($field_value)) {
      $value = $field_value;
    }
  }
  return $value;
}

// Add support for the shortcode query filter
add_filter('woocommerce_shortcode_products_query', 'eventer_modify_shortcode_products_query', 10, 3);

function eventer_modify_shortcode_products_query($query_args, $atts, $loop) {
    // Define the terms to be removed
    $terms_to_remove = array('eventer', 'eventer_services');

    // Initialize an array to store the term IDs
    $term_ids_to_remove = array();

    // Loop through each term name and get the corresponding term ID
    foreach ($terms_to_remove as $term_name) {
        $term = get_term_by('name', $term_name, 'product_cat');
        if ($term) {
            $term_ids_to_remove[] = $term->term_id;
        }
    }

    if (!empty($term_ids_to_remove)) {
        // Check if tax_query already exists in query_args
        $existing_tax_query = isset($query_args['tax_query']) ? $query_args['tax_query'] : array();

        // Add a tax query to exclude products in the specified terms
        $additional_tax_query = array(
            'relation' => 'AND',
            array(
                'taxonomy' => 'product_cat',
                'field' => 'term_id',
                'terms' => $term_ids_to_remove,
                'operator' => 'NOT IN',
            ),
        );

        // Merge the existing tax query with the additional tax query
        $query_args['tax_query'] = array_merge($existing_tax_query, $additional_tax_query);
    }

    return $query_args;
}

// Add support for the pre_get_posts hook
add_action('pre_get_posts', 'eventer_hide_eventer_category_products' );

function eventer_hide_eventer_category_products($q) {

    // Check if this is the main query and if it's for products
    if ( $q->is_main_query() ) {

        // Check if it's a product archive or taxonomy page
        if ( is_post_type_archive('product')
            || is_tax('product_cat') || in_array( $q->get('post_type'), array('product') )
        ) {
            // Define the category names
            $category_names = array('eventer', 'eventer_services');

            // Initialize an array to store the term IDs
            $category_ids = array();

            // Loop through each category name and get the corresponding term ID
            foreach ($category_names as $category_name) {
                $category = get_term_by('name', $category_name, 'product_cat');
                if ($category) {
                    $category_ids[] = $category->term_id;
                }
            }

            if (!empty($category_ids)) {
                // Check if tax_query already exists in $q
                $tax_query = $q->get('tax_query');

                if (empty($tax_query)) {
                    $tax_query = array(
                        'relation' => 'AND',
                    );
                }

                // Check if the tax query for the product category already exists
                $existing_tax_query = false;
                foreach ((array) $tax_query as $query ) {
                    if ( empty( $query ) || ! is_array($query ) ) {
                        continue;
                    }
                    
                    if ($query['taxonomy'] === 'product_cat' && $query['field'] === 'term_id') {
                        $existing_tax_query = true;
                        $query['terms'] = array_merge($query['terms'], $category_ids);
                        break;
                    }
                }

                // If tax_query doesn't exist, or if the product category tax query doesn't exist, add it
                if (!$existing_tax_query) {
                    $tax_query[] = array(
                        'taxonomy' => 'product_cat',
                        'field' => 'term_id',
                        'terms' => $category_ids,
                        'operator' => 'NOT IN',
                    );
                }

                $q->set('tax_query', $tax_query );
            }
        }
    }
}