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/registration/RegistrationProcess.php
<?php
class RegistrationProcess
{
  public function __construct()
  {
    add_action('woocommerce_checkout_order_processed', [$this, 'eventerWooRegister'], 999);
    add_action('woocommerce_thankyou', [$this, 'createTickets'], 1);
    add_action('wp_ajax_generateTicketsImage', [$this, 'generateTicketsImage']);
    add_action('wp_ajax_nopriv_generateTicketsImage', [$this, 'generateTicketsImage']);
    add_action('sendTicketsEmail', [$this, 'sendTicketsEmail'], 10, 2);
    add_filter('eventer_registrationv2_status_update', [$this, 'eventerRegistrationV2StatusUpdate'], 999, 2);
    add_action('send_tickets', [$this, 'sendTicketsAgain'], 10, 1);
  }

  public function eventerWooRegister($order_id)
  {

    if (empty(get_post_meta($order_id, 'eventer_order_recorded', true))) {

      $order = wc_get_order($order_id);
      $counter = 0;
      $elocation = '';
      $registrant_uname = $order->get_billing_first_name() . ' ' . $order->get_billing_last_name(); 
      $registrant_email = $order->get_billing_email();
      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;
        $eventRawDate = 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);
        $eventer_venue = get_the_terms($event_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;
          }
        }
        $event_allday = wc_get_order_item_meta($item_id, '_eventer_allday', true);
        $event_time = get_post_meta($event_id, 'eventer_event_start_dt', true);
        $ticketPrimaryId = wc_get_order_item_meta($item_id, '_ticket_id', true);
        $event_time = date_i18n(get_option('time_format'), strtotime($event_time));
        $event_registrants = wc_get_order_item_meta($item_id, '_eventer_registrants', true);
        $wc_event_registrants = wc_get_order_item_meta($item_id, '_wc_event_registrants', true);
        $eventTicketName = wc_get_order_item_meta($item_id, '_eventer_custom_title', true);
        if ($counter == 0) {
          $transID = $order->get_transaction_id();
          $payment_method = $order->get_payment_method();
          $status = $order->get_status();
          $amount = $order->get_total();
          $user_reg_id = get_current_user_id();
          $data = ['booking_id' => 1, 'user_id' => $user_reg_id, 'order_id' => $order_id, 'reg_date' => date_i18n('Y-m-d H:i:s'), 'transaction_id' => $transID, 'paymentmode' => $payment_method, 'reg_status' => $status, 'reg_amount' => $amount];
          $registrationId = addRegistration($data);
          addRegistrationMeta(['reg_id' => $registrationId, 'meta_key' => 'slot_title', 'meta_value' => $event_time_slot_title]);
          addRegistrationMeta(['reg_id' => $registrationId, 'meta_key' => 'user_name', 'meta_value' => $registrant_uname]);
          addRegistrationMeta(['reg_id' => $registrationId, 'meta_key' => 'user_email', 'meta_value' => $registrant_email]);
        }

        // print_r( [ $event_registrants, $wc_event_registrants ] );exit();
        if ($event_time_slot == '00:00:00') {
          $eventTicketDate = date('Y-m-d H:i:s', strtotime($eventRawDate . ' ' . $event_time));
        } else {
          $eventTicketDate = date('Y-m-d H:i:s', strtotime($eventRawDate . ' ' . $event_time_slot));
        }
        if ($eventer_product_type == 'ticket') {
          $quantity = $item_data['quantity'];
        } else {
          $services = array_map('trim', explode(',', wc_get_order_item_meta($item_id, 'Services', true)));
          $quantity = count($services);
        }
        $order_event_url = wc_get_order_item_meta($item_id, 'Event URL', true);
        for ($count = 0; $count < $quantity; $count++) {
          if ($eventer_product_type == 'service' && empty(trim($services[$count], ' '))) {
            continue;
          }
          $ticketName = $eventer_product_type == 'ticket' ? $eventTicketName : $services[$count];
          $data = ['reg_id' => $registrationId, 'qr_code' => 1, 'ticket_name' => $ticketName, 'user_name' => $registrant_uname, 'type' => $eventer_product_type, 'ticket_date' => $eventTicketDate, 'venue' => $elocation, 'event_id' => $event_id, 'price' => 1, 'ticket_status' => 'active'];
          $ticketId = addTickets($data);
          addTicketMeta(['ticket_id' => $ticketId, 'meta_key' => 'product_id', 'meta_value' => $product_id]);
          addTicketMeta(['ticket_id' => $ticketId, 'meta_key' => 'primary_ticket_id', 'meta_value' => $ticketPrimaryId]);
          addTicketMeta(['ticket_id' => $ticketId, 'meta_key' => 'event_url', 'meta_value' => $order_event_url]);
          $registratantDetails = isset($event_registrants[$count]) ? $event_registrants[$count] : [];

          if (!empty($registratantDetails)) {
            addTicketMeta([
              'ticket_id' => $ticketId, 
              'meta_key' => 'reg_details', 
              'meta_value' => serialize($registratantDetails)
            ]);

            foreach ($registratantDetails as $key => $value) {
              if ( $key == 'name' ) {
                updateTicket($ticketId, ['user_name' => $value], ['%s']);
              }

              if( $key == 'name' || $key == 'email' ){
                addTicketMeta(['ticket_id' => $ticketId, 'meta_key' => $key, 'meta_value' => $value]);
              }  
            }
          }
        }
        $counter++;
      endforeach;
      update_post_meta($order_id, 'eventer_order_recorded', $registrationId);
      //wp_schedule_single_event(time() + 5, 'eventer_woocommerce_ticket_restore_auto', array($order_id));
    }
  }

  function generateTicketsImage($order_id)
  {
    $nonce = $_REQUEST['nonce'];
    if (!wp_verify_nonce($nonce, 'eventer-qrcode-nonce')) {
      wp_die();
    }

    $qrdata = (isset($_REQUEST['qrdata'])) ? $_REQUEST['qrdata'] : '';
    $event_id = (isset($_REQUEST['eid'])) ? $_REQUEST['eid'] : '';
    $event_cdate = (isset($_REQUEST['dateTime'])) ? $_REQUEST['dateTime'] : '';
    $event_title = apply_filters('eventer_raw_event_title', '', $event_id);
    $folder_name = eventer_clean_string($event_title);
    $folder_name = ($folder_name != '') ? $folder_name : $event_id;
    $registrant_id = (isset($_REQUEST['reg'])) ? $_REQUEST['reg'] : '';
    $source = (isset($_REQUEST['source'])) ? $_REQUEST['source'] : '';
    $reg_pos = (isset($_REQUEST['regpos'])) ? $_REQUEST['regpos'] : '';
    global $wp_filesystem;
    if (empty($wp_filesystem)) {
      require_once ABSPATH . '/wp-admin/includes/file.php';
      WP_Filesystem();
    }
    $upload = wp_upload_dir();
    $upload_blog_url = $upload['baseurl'];
    $upload_dir_base = $upload['basedir'];
    $upload_dir = $upload_dir_base . '/eventer';
    if (!$wp_filesystem->is_dir($upload_dir)) {
      /* directory didn't exist, so let's create it */
      wp_mkdir_p($upload_dir);
    }

    $attachment_content_switch = true;
    if ( metadata_exists( 'post', $event_id, 'eventer_event_ticket_email' ) ) {
      $ticket_email = get_post_meta( $event_id, 'eventer_event_ticket_email', true );
      if ( $ticket_email == 'on' ) {
          $attachment_content_switch = false;
      }
    }
  $tickets_created = array();
    
    if ($wp_filesystem) {
      $start_time = 2;
      $sub_tickets = array();

      if (!empty($qrdata)) {
        $start_key = 1;
        $ticketSend = [];
        foreach ($qrdata as $data) {
          $random_name = date_i18n('Y-m-d-H-i-s');
          if (!isset($data['src'])) {
            continue;
          }

          $image_validate = eventer_check_base64_image($data['src']);
          $ticket_name_clean = eventer_clean_string($data['ticket']);
          $qrcode_name = eventer_clean_string($data['email']);
          $eventer_venue = get_the_terms( $event_id, 'eventer-venue' );
          $filename_first = $start_key . '-' . $qrcode_name . '-' . $ticket_name_clean . '-' . $event_id . '-' . $random_name . '.png';
          $filename_pdf = $start_key . '-' . $qrcode_name . '-' . $ticket_name_clean . '-' . $event_id . '-' . $random_name . '.pdf';
      $filename = $upload_dir . '/' . $filename_first;
      $filenamePdf = $upload_dir . '/' . $filename_pdf;
          if (!$image_validate || $image_validate < 10000) {
            continue;
          }

          $sub_tickets[] = $filename_first;
          $data['filename'] = $filenamePdf;
          generatePdfTicket($data, $event_id);
      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);
        $data['location'] = ($location_address != '' ) ? $location_address : $venue->name;
        break;
      }
      }

          $wp_filesystem->put_contents(
            $filename,
            file_get_contents($data['src']),
            FS_CHMOD_FILE // predefined mode settings for WP files
          );

          

          $ticketSend[$data['email']][] = $filename_first;
          updateTicketMeta($data['code'], 'ticket_url', get_bloginfo('wpurl') . '/wp-content/uploads/eventer/' . $filename_first);
          updateTicketMeta($data['code'], 'ticket_path', $filename_first);
      $tickets_created[$email][] = $filename_first;
          $start_key++;
        }
      }

      if ($reg_pos > 14 && $source == '' && $attachment_content_switch ) {
        foreach ($ticketSend as $email => $ticket) {
          wp_schedule_single_event(time() + 1, 'sendTicketsEmail', array($email, $ticket));
        }
      }
      $qrcode_name_new_ticket = '';
      $send_tickets = array();
      if (!empty($sub_tickets)) {
        $start = 18600;
        foreach ($sub_tickets as $ticket) {
          $qrcode_name_new_ticket .= $ticket . ',';
          $send_tickets[] = $ticket;
          wp_schedule_single_event(time() + ($start + 5), 'eventer_initiate_cron_remove_directory', array($upload_dir . '/' . $ticket));
        }
      }
      $booking = getRegistration($registrant_id);
      $order = wc_get_order($booking->order_id);
      $back_order_tickets = (isset($_REQUEST['backorder'])) ? $_REQUEST['backorder'] : '';
      $back_order_tickets = ($back_order_tickets != '') ? add_query_arg('allow', $registrant_id, $back_order_tickets) : '';

      $woocommerce_thanks_redirect = eventer_get_settings('eventer_thanks_redirect');
      $order_status = $order->get_status();
      $order_event_url = getTicketMeta($data['code'], 'event_url');
      if (($order_status == 'completed' && $woocommerce_thanks_redirect == 'on' && $back_order_tickets == '')) {
        //$order_event_url = esc_url(add_query_arg('reg', $generate_dynamic_order_id_completed, $order_event_url));
      } elseif ($woocommerce_thanks_redirect == 'on' && $back_order_tickets == '') {
        //$order_event_url = esc_url(add_query_arg('reg', $generate_dynamic_order_id, $order_event_url));
      } else {
        $order_event_url = '';
      }
      $order_event_url = ($back_order_tickets != '') ? $back_order_tickets : $order_event_url;

      echo wp_json_encode(array('tickets' => $qrcode_name_new_ticket, 'event_url' => $order_event_url, 'ticket_arr' => $send_tickets, 'url' => $upload_blog_url . '/eventer', 'allow' => wp_create_nonce('eventer-tickets-download')));
    }
    wp_die();
  }

  public function createTickets($order_id)
  {
    $bookingId = get_post_meta($order_id, 'eventer_order_recorded', true);
    if (!empty($bookingId)) {
      $booking = getRegistration($bookingId);
    $order = wc_get_order($order_id);
      $registrant_uname = $order->get_billing_first_name() . ' ' . $order->get_billing_last_name();
      $registrant_email = $order->get_billing_email();
      $tickets = getRegistrationTickets($bookingId);

      $order = wc_get_order($booking->order_id);
      $status = $order->get_status();
      $position = $status == 'completed' ? 15 : 14;
      $position = isset($_REQUEST['repos']) ? $_REQUEST['repos'] : $position;
      $backorder = "";
      if (isset($_REQUEST['booking_id'])) {
        $backorder = esc_url(get_admin_url() . 'admin.php?page=booking_details&booking_id=' . $bookingId);
      }
      if (!empty($tickets)) {
        foreach ($tickets as $ticket) {
          if ($ticket->type == 'ticket') {
            $ticketName = getTicketMeta($ticket->id, 'name');
            $ticketEmail = getTicketMeta($ticket->id, 'email');
            $ticketName = !empty($ticketName) ? $ticketName : $registrant_uname;
            $ticketEmail = !empty($ticketEmail) ? $ticketEmail : $registrant_email;
            $ticketData = ['data-nonce' => wp_create_nonce('eventer-qrcode-nonce'), 'default' => ['data-uname' => $registrant_uname, 'data-regv2' => 'v2', 'data-uemail' => $registrant_email, 'data-registrant' => $bookingId, 'data-eid' => '', 'data-regpos' => $position], 'data-mainreg' => $registrant_email, 'data-registrant' => $bookingId, 'data-eid' => '', 'data-organizer' => '', 'individual' => [0 => ['data-ticket' => $ticket->ticket_name,  'data-elocation' => $ticket->venue, 'data-datetime' => date_i18n(get_option('date_format') . ' ' . get_option('time_format'), strtotime($ticket->ticket_date)),  'data-eventid' => $ticket->event_id, 'data-eventname' => get_the_title($ticket->event_id), 'data-email' => $ticketEmail, 'data-name' => $ticketName, 'data-qrcode' => $ticket->id, 'data-regv2' => 'v2', 'data-img' => '']], 'data-regpos' => $position, 'data-backorder' => $backorder];
            do_action('eventer_ticket_raw_design', '', $ticketData);
          }
        }
      }
    }
  }

  function sendTicketsEmail($email, $qrcode_name)
  {
    $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[] = "Content-type: text/html; charset=" . get_bloginfo('charset') . "" . "\r\n";
    $subject = esc_html__('Your tickets', 'eventer');
    if (empty($qrcode_name)) {
      return;
    }

    global $wp_filesystem;
    if (empty($wp_filesystem)) {
      require_once ABSPATH . '/wp-admin/includes/file.php';
      WP_Filesystem();
    }
    $message = '';
    $upload = wp_upload_dir();
    $upload_dir_base = $upload['basedir'];
    $has_attachment = 0;
    $mail_attachment = array();
    $pdfAttachment = eventer_get_settings('eventer_pdf_ticket');
    foreach ($qrcode_name as $ticket_print) {

      if ($pdfAttachment == 'on') {
        $ticket_print = str_replace('png', 'pdf', $ticket_print);
      }  

      if (!file_exists($upload_dir_base . '/eventer/' . $ticket_print)) continue;
      $mail_attachment[] = $upload_dir_base . '/eventer/' . $ticket_print;
      $size = filesize($upload_dir_base . '/eventer/' . $ticket_print);
      if ($size > 12000) {
        $has_attachment = 1;
      }
    }
    $attachment_content = apply_filters('the_content', eventer_get_settings('email_tickets_attachment'));
    $attachment_content_switch = eventer_get_settings('email_tickets_attachment_switch');

    if ($has_attachment == 0 || $attachment_content_switch == '0') {
      return;
    }
    if($attachment_content == ''){
      $message = esc_html__('Please find tickets in the attachment.', 'eventer');
  } else {
     $message = $attachment_content;
  }
    $mail_status = wp_mail($email, $subject, $message, $headers, $mail_attachment);
  }

  public function eventerRegistrationV2StatusUpdate($orderId, $source)
  {
    $booking = getRegistration($orderId, 10, 0, 'order_id');
    $order = wc_get_order($orderId);
    if ( $order ) {
      $status = $order->get_status();
      updateRegistration($booking->id, ['reg_status' => $status], ['%s']);
    }

    do_action('send_tickets', $booking);
  }

  public function sendTicketsAgain($booking)
  {
    $tickets = getRegistrationTickets($booking->id);
    $ticketsSend = $emptyTickets = [];
    $registrant_email = get_post_meta($booking->order_id, '_billing_email', true);

    foreach ($tickets as $ticket) {
      if ($ticket->type != 'ticket') continue;
      $event_id = $ticket->event_id;
      $attachment_content_switch = true;
      if ( metadata_exists( 'post', $event_id, 'eventer_event_ticket_email' ) ) {
        $ticket_email = get_post_meta( $event_id, 'eventer_event_ticket_email', true );
        if ( $ticket_email == 'on' ) {
          $attachment_content_switch = false;
        }
      }

      $ticketUrl = getTicketMeta($ticket->id, 'ticket_url');
      if (!empty($ticketUrl) && @getimagesize($ticketUrl) && $attachment_content_switch ) {
        $ticketEmail = getTicketMeta($ticket->id, 'email');
        $ticketEmail = empty($ticketEmail) ? $registrant_email : $ticketEmail;
        $ticketsSend[$ticketEmail][] = getTicketMeta($ticket->id, 'ticket_path');
      } else {
      }
    }
    if (empty($emptyTickets) && !empty($ticketsSend) ) {
      foreach ($ticketsSend as $email => $ticket) {
        wp_schedule_single_event(time() + 1, 'sendTicketsEmail', array($email, $ticket));
      }
    }
  }
}
$process = new RegistrationProcess();