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/e/x/h/exhehbu/wp/wp-content/plugins/eventer/registration/RegistrationTable.php
<?php
if (!class_exists("WP_List_Table")) {
    require_once ABSPATH . "wp-admin/includes/class-wp-list-table.php";
}
class RegistrationTable extends WP_List_Table
{
    /** Class constructor */
    public function __construct()
    {
        parent::__construct([
            "singular" => __("Booking", "eventer"), //singular name of the listed records
            "plural" => __("Bookings", "eventer"), //plural name of the listed records
            "ajax" => false, //should this table support ajax?
        ]);
    }

    function extra_tablenav($which)
    {
        if ($which == "top") {

            $specific_event = isset($_REQUEST["eventer"])
                ? $_REQUEST["eventer"]
                : "";
            $specific_event_date = isset($_REQUEST["booking"])
                ? $_REQUEST["booking"]
                : "";
            $event_booking_date = isset($_REQUEST["booking"])
                ? $_REQUEST["booking"]
                : "";
            ?>
          <div class="alignleft actions">
            <div class="alignleft actions">
              <label class="screen-reader-text" for="cat"><?php esc_html_e(
                  "Filter by event",
                  "eventer"
              ); ?></label>
              <select name="eventer" class="postform">
                <option value=""><?php esc_html_e(
                    "All Events",
                    "eventer"
                ); ?></option>
                <?php
                $all_registered_events = [];
                $event_arg = [
                    "post_type" => "eventer",
                    "posts_per_page" => -1,
                    "orderby" => "name",
                    "order" => "ASC",
                ];
                $event_list = new WP_Query($event_arg);
                if ($event_list->have_posts()):
                    while ($event_list->have_posts()):
                        $event_list->the_post();
                        $all_registered_events[get_the_ID()] = get_the_title();
                    endwhile;
                endif;
                wp_reset_postdata();

                // $order_recording_switch = eventer_get_settings('eventer_woo_orders');
                $woocommerce_ticketing = eventer_get_settings(
                    "eventer_enable_woocommerce_ticketing"
                );
                foreach ($all_registered_events as $key => $value) {
                    $selected = $specific_event == $key ? "selected" : "";
                    echo "<option " .
                        $selected .
                        ' value="' .
                        $key .
                        '">' .
                        $value .
                        "</option>";
                }
                ?>
                </select>
                <input type="text" class="eventer-bookings-date" name="booking" value="<?php echo $event_booking_date; ?>" placeholder="<?php esc_html_e(
    "Select Date",
    "eventer"
); ?>">
                 <input type="hidden" name="filter_eventer_bookings" value="1">
                 <input type="submit" class="button" id="filter_eventer_bookins" value="Filter">
              </div>
          </div>
        <?php
        }
    }

    /**
     * Retrieve customer’s data from the database
     *
     * @param int $per_page
     * @param int $page_number
     *
     * @return mixed
     */
    public static function get_customers($per_page = 10, $page_number = 1)
    {
        $offset = ($page_number - 1) * $per_page;
        $result = getRegistration(null, $per_page, $offset);
        return $result;
    }

    public static function get_filter_customers($event_id)
    {
        $ticket = getRegistrationTickets($event_id, 10, 0, "event_id");

        if (!$ticket) {
            return [];
        }

        $array = [];
        foreach ($ticket as $key => $data) {
            $result = getRegistration($data->reg_id, 10, 1, "id");
            if (!$result) {
                continue;
            }

            $array[] = get_object_vars($result);
        }

        return $array;
    }

    /**
     * Returns the count of records in the database.
     *
     * @return null|string
     */
    public static function record_count()
    {
        $items = self::getBookings();
        return count($items);
    }

    public static function getBookings()
    {
        global $wpdb;
        $table_name = $wpdb->prefix . "eventer_registration_tickets";
        $specific_event = isset($_REQUEST["eventer"])
            ? $_REQUEST["eventer"]
            : "";
        $bookings = isset($_REQUEST["multipleslect"])
            ? $_REQUEST["multipleslect"]
            : [];
        $specific_event_date = isset($_REQUEST["booking"])
            ? $_REQUEST["booking"]
            : "";
        $bookings_list = [];

        if ($bookings) {
            foreach ($bookings as $id) {
                if (!intval($id)) {
                    continue;
                }

                $bookings_list[] = $id;
            }
        }

        $where = "";
        if ($specific_event != "") {
            $where = "WHERE event_id = '$specific_event'";
        }

        $wpdb->show_errors();
        $export_query = $wpdb->get_results(
            "SELECT * FROM $table_name $where",
            ARRAY_A
        );

        if (!$export_query) {
            return [];
        } else {
            $array_data = [];
            foreach ($export_query as $key => $data) {
                // if this registrant belongs to already added main register event just continue.
                if (
                    in_array($data["reg_id"], array_column($array_data, "id"))
                ) {
                    continue;
                }

                $result = getRegistration($data["reg_id"], 10, 1, "id");
                if (!$result) {
                    continue;
                }

                if (!empty($specific_event_date)) {
                    $event_date = date("Y-m-d", strtotime($result->reg_date));
                    if ($event_date !== $specific_event_date) {
                        continue;
                    }
                }

                $array_data[] = get_object_vars($result);
            }

            // Sort the array in reverse order based on the date
            usort($array_data, function ($a, $b) {
                return strtotime($b["reg_date"]) - strtotime($a["reg_date"]);
            });
        }

        return $array_data;
    }

    /** Text displayed when no customer data is available */
    public function no_items()
    {
        _e("No customers avaliable.", "eventer");
    }

    /**
     * Method for name column
     *
     * @param array $item an array of DB data
     *
     * @return string
     */
    function column_name($item)
    {
        // create a nonce
        $delete_nonce = wp_create_nonce("sp_delete_customer");

        $title = "<strong>" . $item["id"] . "</strong>";

        $actions = [
            "delete" => sprintf(
                '<a href="?page=%s&action=%s&customer=%s&_wpnonce=%s">Delete</a>',
                esc_attr($_REQUEST["page"]),
                "delete",
                absint($item["id"]),
                $delete_nonce
            ),
        ];

        return $title . $this->row_actions($actions);
    }

    /**
     * Render a column when no column specific method exists.
     *
     * @param array $item
     * @param string $column_name
     *
     * @return mixed
     */
    public function column_default($item, $column_name)
    {
        switch ($column_name) {
            case "order_id":
                return '<a href="' .
                    esc_url(
                        get_admin_url() .
                            "admin.php?page=booking_details&booking_id=" .
                            $item["id"]
                    ) .
                    '">' .
                    $item["order_id"] .
                    "</a>";
            case "date":
                return $item["reg_date"];
            case "mode":
                return $item["paymentmode"];
            case "status":
                return $item["reg_status"];
            case "amount":
                return $item["reg_amount"];
            case 'event_name':
                return $this->eventer_get_registrant_data($item['id'], 'event_name');
            case 'event_date':
                return $this->eventer_get_registrant_data($item['id'], 'event_date');
            case 'reg_name':
                return $this->eventer_get_registrant_data($item['id'], 'name');
            case 'reg_email':
                return $this->eventer_get_registrant_data($item['id'], $column_name);
            case 'check_in':
                return $this->eventer_get_registrant_data($item['id'], 'check_in');
            default:
                return print_r($item, true); //Show the whole array for troubleshooting purposes
        }
    }

    function eventer_get_registrant_data($bookingId, $field)
    {
        $bookingDetails = getRegistration($bookingId);
        $tickets = getRegistrationTickets($bookingId);

        $return = [];
        foreach ($tickets as $ticket)
        {
            if (empty($ticket))
            {
                continue;
            }

            $reg_details = getTicketMeta($ticket->id, 'reg_details');

            if ($ticket->ticket_status == '10')
            {
                $check_in_status = 'Yes';
            }
            else
            {
                $check_in_status = 'No';
            }

            if ($field == 'name')
            {
                $reg_name = $ticket->user_name;
            }
            else if ($field == 'reg_email')
            {
                $reg_name = getTicketMeta($ticket->id, 'email');
            }
            else if ($field == 'check_in')
            {
                $reg_name = $check_in_status;
            }
            else if ($field == 'event_name')
            {
                $return[] = isset($ticket->event_id) ? get_the_title($ticket->event_id) : '';
                break;
            }
            else if ($field == 'event_date')
            {
                $eventer_id = isset($ticket->event_id) ? $ticket->event_id : '';

                if ($eventer_id)
                {
                    $return[] = get_post_meta($eventer_id, 'eventer_event_start_dt', true) ? get_post_meta($eventer_id, 'eventer_event_start_dt', true) : '';
                }

                break;
            }

            if ($reg_details)
            {
                $reg_details = unserialize($reg_details);

                if (isset($reg_details[$field]))
                {
                    $reg_name = $reg_details[$field];
                }
            }

            $return[] = $reg_name;
        }

        return implode('<br />', $return);
    }
    
    /**
     * Render the bulk edit checkbox
     *
     * @param array $item
     *
     * @return string
     */
    function column_cb($item)
    {
        return sprintf(
            '<input type="checkbox" name="bulk-delete[]" value="%s" />',
            $item["id"]
        );
    }

    /**
     * Associative array of columns
     *
     * @return array
     */
    function get_columns()
    {
        $columns = [
            "cb" => '<input type="checkbox" />',
            "order_id" => __("Order", "eventer"),
            "date" => __("Booking Date", "eventer"),
            "event_name" => __("Event", "eventer"),
            "event_date" => __("Event Date", "eventer"),
            "mode" => __("Payment Mode", "eventer"),
            "status" => __("Payment Status", "eventer"),
            "amount" => __("Total Amount", "eventer"),
			'reg_name' => __('Reg Name', 'eventer'),
            'reg_email' => __('Reg Email', 'eventer'),
            'check_in' => __('Check-In', 'eventer')
        ];

        return $columns;
    }

    /**
     * Columns to make sortable.
     *
     * @return array
     */
    public function get_sortable_columns()
    {
        $sortable_columns = [
            "date" => ["Date", true],
        ];

        return $sortable_columns;
    }

    /**
     * Returns an associative array containing the bulk action
     *
     * @return array
     */
    public function get_bulk_actions()
    {
        $actions = [
            "bulk-delete" => "Delete",
        ];

        return $actions;
    }

    /**
     * Handles data query and filter, sorting, and pagination.
     */
    public function prepare_items()
    {
        $this->_column_headers = $this->get_column_info();

        /** Process bulk action */
        $this->process_bulk_action();

        $per_page = $this->get_items_per_page("customers_per_page", 5);
        $current_page = $this->get_pagenum();
        $total_items = self::record_count();

        $this->set_pagination_args([
            "total_items" => $total_items, //WE have to calculate the total number of items
            "per_page" => $per_page, //WE have to determine how many items to show on a page
        ]);

        $this->items = self::getBookings();
    }

    public function process_bulk_action()
    {
        //Detect when a bulk action is being triggered...
        if ("delete" === $this->current_action()) {
            // In our file that handles the request, verify the nonce.
            $nonce = esc_attr($_REQUEST["_wpnonce"]);

            if (!wp_verify_nonce($nonce, "sp_delete_customer")) {
                die("Go get a life script kiddies");
            } else {
                self::delete_customer(absint($_GET["customer"]));

                wp_redirect(esc_url(add_query_arg()));
                exit();
            }
        }

        if ("bulk-delete" === $this->current_action()) {
            $delete_ids = esc_sql($_POST["bulk-delete"]);
            if (!is_array($delete_ids)) {
                $delete_ids = [$delete_ids];
            }

            foreach ((array) $delete_ids as $id) {
                self::delete_customer($id);
            }

            // self::delete_customer(absint($_GET['customer']));

            wp_redirect(esc_url(add_query_arg()));
            exit();
        }

        // // If the delete bulk action is triggered
        // if ((isset($_POST['action']) && $_POST['action'] == 'bulk-delete')
        //   || (isset($_POST['action2']) && $_POST['action2'] == 'bulk-delete')
        // ) {

        //   $delete_ids = esc_sql($_POST['bulk-delete']);

        //   // loop over the array of record IDs and delete them
        //   foreach ($delete_ids as $id) {
        //     self::delete_customer($id);
        //   }

        //   wp_redirect(esc_url(add_query_arg()));
        //   exit;
        // }
    }
    public function delete_customer($id)
    {
        global $wpdb;

        // Delete the record from the table
        $table_name = $wpdb->prefix . "eventer_registrations";
        // $wpdb->delete($table_name, array('id' => $id ) );

        $registration = getRegistration($id);
        $registration_meta = getRegistrationMeta($id, "reg_id");

        $meta_table_name = $wpdb->prefix . "eventer_registration_meta";
        $wpdb->delete($meta_table_name, ["reg_id" => $id]);

        $tickets_table_name = $wpdb->prefix . "eventer_registration_tickets";
        $ticket_ids = $wpdb->get_col(
            "SELECT id FROM $tickets_table_name WHERE reg_id = $id"
        );

        if (!empty($ticket_ids)) {
            $ticket_meta_table_name = $wpdb->prefix . "eventer_ticket_meta";
            foreach ($ticket_ids as $ticket) {
                $wpdb->delete($ticket_meta_table_name, [
                    "ticket_id" => $ticket,
                ]);
            }

            $wpdb->delete($tickets_table_name, ["reg_id" => $id]);
        }

        // Delete record from eventer_registrations
        $registrations_table_name = $wpdb->prefix . "eventer_registrations";
        $wpdb->delete($registrations_table_name, ["id" => $id]);
    }
}