HEX
Server: nginx/1.27.1
System: Linux in-4 5.15.0-131-generic #141-Ubuntu SMP Fri Jan 10 21:18:28 UTC 2025 x86_64
User: ilikadirect (1186)
PHP: 7.4.33
Disabled: exec,passthru,shell_exec,system,proc_open,popen,parse_ini_file,show_source
Upload Files
File: /storage/v6964/testingff/public_html/fdfctr/wp-content/plugins/wp-event-solution/utils/helper.php
<?php

namespace Etn\Utils;

defined( 'ABSPATH' ) || exit;

/**
 * Global helper class.
 *
 * @since 1.0.0
 */

use DateTime;

class Helper {

	use \Etn\Traits\Singleton;
	

	private static $settings_key = 'etn_event_options';

	/**
	 * Auto generate classname from path.
	 */
	public static function make_classname( $dirname ) {
		$dirname    = pathinfo( $dirname, PATHINFO_FILENAME );
		$class_name = explode( '-', $dirname );
		$class_name = array_map( 'ucfirst', $class_name );
		$class_name = implode( '_', $class_name );

		return $class_name;
	}

	/**
	 * Renders provided markup
	 */
	public static function render( $content ) {
		return $content;
	}

	/**
	 * Filters only accepted kses
	 */
	public static function kses( $raw ) {
		$allowed_tags = [
			'a'                             => [
				'class'  => [],
				'href'   => [],
				'rel'    => [],
				'title'  => [],
				'target' => [],
			],
			'input'                         => [
				'value'              => [],
				'type'               => [],
				'size'               => [],
				'name'               => [],
				'checked'            => [],
				'data-value'         => [],
				'data-default-color' => [],
				'placeholder'        => [],
				'id'                 => [],
				'class'              => [],
				'min'                => [],
				'step'               => [],
				'readonly'           => 'readonly',
			],
			'button'                        => [
				'type'    => [],
				'name'    => [],
				'id'      => [],
				'class'   => [],
				'onclick' => [],
			],
			'select'                        => [
				'value'       => [],
				'type'        => [],
				'size'        => [],
				'name'        => [],
				'placeholder' => [],
				'id'          => [],
				'class'       => [],
				'option'      => [
					'value'   => [],
					'checked' => [],
				],
			],
			'textarea'                      => [
				'value'       => [],
				'type'        => [],
				'size'        => [],
				'name'        => [],
				'rows'        => [],
				'cols'        => [],
				'placeholder' => [],
				'id'          => [],
				'class'       => [],
			],
			'abbr'                          => [
				'title' => [],
			],
			'b'                             => [],
			'blockquote'                    => [
				'cite' => [],
			],
			'cite'                          => [
				'title' => [],
			],
			'code'                          => [],
			'del'                           => [
				'datetime' => [],
				'title'    => [],
			],
			'dd'                            => [],
			'div'                           => [
				'class' => [],
				'title' => [],
				'style' => [],
			],
			'dl'                            => [],
			'dt'                            => [],
			'em'                            => [],
			'h1'                            => [
				'class' => [],
			],
			'h2'                            => [
				'class' => [],
			],
			'h3'                            => [
				'class' => [],
			],
			'h4'                            => [
				'class' => [],
			],
			'h5'                            => [
				'class' => [],
			],
			'h6'                            => [
				'class' => [],
			],
			'i'                             => [
				'class' => [],
			],
			'img'                           => [
				'alt'    => [],
				'class'  => [],
				'height' => [],
				'src'    => [],
				'width'  => [],
			],
			'li'                            => [
				'class' => [],
			],
			'ol'                            => [
				'class' => [],
			],
			'p'                             => [
				'class' => [],
			],
			'q'                             => [
				'cite'  => [],
				'title' => [],
			],
			'span'                          => [
				'class' => [],
				'title' => [],
				'style' => [],
			],
			'iframe'                        => [
				'width'       => [],
				'height'      => [],
				'scrolling'   => [],
				'frameborder' => [],
				'allow'       => [],
				'src'         => [],
			],
			'strike'                        => [],
			'br'                            => [],
			'strong'                        => [],
			'data-wow-duration'             => [],
			'data-wow-delay'                => [],
			'data-wallpaper-options'        => [],
			'data-stellar-background-ratio' => [],
			'ul'                            => [
				'class' => [],
			],
			'label'                         => [
				'class'      => [],
				'for'        => [],
				'data-left'  => [],
				'data-right' => [],
			],
			'form'                          => [
				'class'  => [],
				'id'     => [],
				'role'   => [],
				'action' => [],
				'method' => [],
			],
		];

		if ( function_exists( 'wp_kses' ) ) { // WP is here
			return wp_kses( $raw, $allowed_tags );
		} else {
			return $raw;
		}

	}

	/**
	 * internal
	 *
	 * @param [type] $text
	 *
	 * @return void
	 */
	public static function kspan( $text ) {
		return str_replace( [ '{', '}' ], [ '<span>', '</span>' ], self::kses( $text ) );
	}

	/**
	 * retuns trimmed word
	 */
	public static function trim_words( $text, $num_words ) {
		return wp_trim_words( $text, $num_words, '' );
	}

	/**
	 * Undocumented function
	 *
	 * @param [type] $id
	 *
	 * @return void
	 */
	public static function img_meta( $id ) {
		$attachment = get_post( $id );

		if ( $attachment == null || $attachment->post_type != 'attachment' ) {
			return null;
		}

		return [
			'alt'         => get_post_meta( $attachment->ID, '_wp_attachment_image_alt', true ),
			'caption'     => $attachment->post_excerpt,
			'description' => $attachment->post_content,
			'href'        => get_permalink( $attachment->ID ),
			'src'         => $attachment->guid,
			'title'       => $attachment->post_title,
		];
	}

	/**
	 * Undocumented function
	 *
	 * @return void
	 */
	public static function get_date_formats() {
		return [
			'0'  => 'Y-m-d',
			'1'  => 'n/j/Y',
			'2'  => 'm/d/Y',
			'3'  => 'j/n/Y',
			'4'  => 'd/m/Y',
			'5'  => 'n-j-Y',
			'6'  => 'm-d-Y',
			'7'  => 'j-n-Y',
			'8'  => 'd-m-Y',
			'9'  => 'Y.m.d',
			'10' => 'm.d.Y',
			'11' => 'd.m.Y',
			'11' => 'd M Y',
			'12' => 'j F Y',
		];
	}

	/**
	 * Undocumented function
	 *
	 * @param [type] $path
	 *
	 * @return void
	 */
	public static function safe_path( $path ) {
		$path = str_replace( [ '//', '\\\\' ], [ '/', '\\' ], $path );

		return str_replace( [ '/', '\\' ], DIRECTORY_SEPARATOR, $path );
	}

	/**
	 * Convert a multi-dimensional array into a single-dimensional array.
	 *
	 * @param array $array The multi-dimensional array.
	 *
	 * @return array
	 * @author Sean Cannon, LitmusBox.com | seanc@litmusbox.com
	 */
	public static function array_flatten( $array ) {

		if ( ! is_array( $array ) ) {
			return false;
		}

		$result = [];

		foreach ( $array as $key => $value ) {

			if ( is_array( $value ) ) {
				$result = array_merge( $result, self::array_flatten( $value ) );
			} else {
				$result = array_merge( $result, [ $key => $value ] );
			}

		}

		return $result;
	}

	public static function show_parent_child( $show_parent_event, $show_child_event ) {
		if ( ( isset( $show_parent_event ) && 'yes' == $show_parent_event ) && ( isset( $show_child_event ) && 'yes' == $show_child_event ) ) {
			// show child and parents
			$post_parent = 'id';
		} else if ( ( isset( $show_parent_event ) && 'yes' == $show_parent_event ) && ( isset( $show_child_event ) && 'yes' !== $show_child_event ) ) {
			// show parents and not child
			$post_parent = '0';
		} else if ( ( isset( $show_parent_event ) && 'yes' !== $show_parent_event ) && ( isset( $show_child_event ) && 'yes' == $show_child_event ) ) {
			// show child and not parents
			$post_parent = 'child';
		} else if ( ( isset( $show_parent_event ) && 'yes' !== $show_parent_event ) && ( isset( $show_child_event ) && 'yes' !== $show_child_event ) ) {
			// no child and not parents
			$post_parent = 'hide_both';
		} else {
			// show only parents
			$post_parent = '0';
		}

		return $post_parent;
	}

	/**
	 * Post query to get data for widget and shortcode
	 */
	public static function post_data_query( $post_type, $count = null, $order = 'DESC', $term_arr = null, $taxonomy_slug = null, $post__in = null, $post_not_in = null, $tag__in = null, $orderby_meta = null, $orderby = 'post_date', $filter_with_status = null, $post_parent = '0', $post_author = '' ) {

		$data = [];
		$args = [
			'post_type'        => $post_type,
			'post_status'      => 'publish',
			'suppress_filters' => false,
			'tax_query'        => [
				'relation' => 'AND',
			],
		];

		if ( $post_author != '' ) {
			$args['author'] = $post_author;
		}

		if ( $order != null ) {

			if ( $orderby_meta == null ) {
				$args['orderby'] = $orderby;
			} else {
				$args['meta_key'] = $orderby;
				$args['orderby']  = $orderby_meta;
			}

			$args['order'] = strtoupper( $order );
		}

		if ( $post_not_in != null ) {
			$args['post__not_in'] = $post_not_in;
		}

		if ( $count != null ) {
			$args['posts_per_page'] = $count;
		}

		if ( $post__in != null ) {
			$args['post__in'] = $post__in;
		}

		// Elementor::If categories selected, add them to tax_query
		if ( is_array( $term_arr ) && ! empty( $term_arr ) ) {
			$categories = [
				'taxonomy'         => $taxonomy_slug,
				'terms'            => $term_arr,
				'field'            => 'id',
				'include_children' => true,
				'operator'         => 'IN',
			];
			array_push( $args['tax_query'], $categories );
		}

		// Elementor::If tags selected, add them to tax_query
		if ( ! empty( $tag__in ) && is_array( $tag__in ) ) {
			$tags = [
				'taxonomy'         => 'etn_tags',
				'terms'            => $tag__in,
				'field'            => 'id',
				'include_children' => true,
				'operator'         => 'IN',
			];
			array_push( $args['tax_query'], $tags );
		}

		// Elementor::If select upcoming  event , filter out the upcoming events
		if ( $post_type == "etn" ) {

			if ( $filter_with_status == 'upcoming' ) {

				$args['meta_query'] = [
					[
						'key'     => 'etn_start_date',
						'value'   => date( 'Y-m-d' ),
						'compare' => '>=',
						'type'    => 'DATE',
					],
				];
			}

			if ( $filter_with_status == 'expire' ) {

				$args['meta_query'] = [
					'relation' => 'AND',
					[
						'relation' => 'OR',
							[
								'key'     => 'etn_end_date',
								'value'   => date( 'Y-m-d' ),
								'compare' => '<',
								'type'    => 'DATE',
	
							],
							[
								'key'     => 'etn_end_date',
								'value'   => date( 'Y-m-d' ),
								'compare' => '=',
								'type'    => 'DATE',
							],
							[
								'key'     => 'etn_end_date',
								'value'   => '',
								'compare' => '=',
							],
					],
					[
						'key'     => 'etn_start_date',
						'value'   => date( 'Y-m-d' ),
						'compare' => '<',
						'type'    => 'DATE',
					],
				];
			}

		}

		if ( 'child' !== $post_parent || 'hide_both' == $post_parent ) {
			$parent_id           = $post_parent == 'hide_both' ? '0' : $post_parent;
			$args['post_parent'] = $parent_id;
		}

		$data = get_posts( $args );
		// adding recurring tag
		$data = \Etn\Core\Event\Helper::instance()->recurring_tag( $data );

		if ( ( 'child' == $post_parent || 'hide_both' == $post_parent ) && ( is_array( $data ) && count( $data ) > 0 ) ) {
			// Delete all the Parent recurring event
			foreach ( $data as $index => $post ) {
				$post_id             = $post->ID;
				$is_recurring_parent = Helper::get_child_events( $post_id );
				if ( $is_recurring_parent ) {
					unset( $data[ $index ] );
				}
			}
		}

		return $data;
	}


	/**
	 * get all settings options
	 *
	 * @return void
	 */
	public static function get_settings() {
		return get_option( "etn_event_options" );
	}

	/**
	 * Undocumented function
	 *
	 * @param [type] $key
	 * @param string $default
	 *
	 * @return void
	 */
	public static function get_option( $key, $default = '' ) {
		$all_settings = get_option( self::$settings_key );

		return ( isset( $all_settings[ $key ] ) && $all_settings[ $key ] != '' ) ? $all_settings[ $key ] : $default;
	}

	/**
	 * get single data by meta
	 */
	public static function get_single_data_by_meta( $post_type, $limit, $key, $value, $sign = "=" ) {
		$args         = [
			'post_type'      => $post_type,
			'posts_per_page' => $limit,
			'meta_query'     => [
				[
					'key'     => $key,
					'value'   => $value,
					'compare' => $sign,
				],
			],
		];
		$query_result = get_posts( $args );

		return $query_result;
	}

	/**
	 * Undocumented function
	 *
	 * @param [type] $key
	 * @param string $value
	 *
	 * @return void
	 */
	public static function update_option( $key, $value = '' ) {
		$all_settings         = get_option( self::$settings_key );
		$all_settings[ $key ] = $value;
		update_option( self::$settings_key, $all_settings );

		return true;
	}

	/**
	 * sanitizes given input
	 *
	 * @param string $data
	 *
	 * @return void
	 */
	public static function sanitize( string $data ) {
		return strip_tags(
			stripslashes(
				sanitize_text_field(
					filter_input( INPUT_POST, $data )
				)
			)
		);
	}

	/**
	 * returns list of all speaker
	 * returns single speaker if speaker id is provuded
	 */
	public static function get_speakers( $id = null ) {
		$return_organizers = [];
		try {

			if ( is_null( $id ) ) {
				$args       = [
					'post_type'        => 'etn-speaker',
					'post_status'      => 'publish',
					'posts_per_page'   => - 1,
					'suppress_filters' => false,
				];
				$organizers = get_posts( $args );

				foreach ( $organizers as $value ) {
					$return_organizers[ $value->ID ] = $value->post_title;
				}

				return $return_organizers;
			} else {
				// return single speaker
				return get_post( $id );
			}

		} catch ( \Exception $es ) {
			return [];
		}

	}

	/**
	 * returns category of a speaker
	 */
	public static function get_speakers_category( $id = null ) {
		$speaker_category = [];
		try {

			if ( is_null( $id ) ) {
				$terms = get_terms( [
					'taxonomy'   => 'etn_speaker_category',
					'hide_empty' => false,
				] );

				foreach ( $terms as $speakers ) {
					$speaker_category[ $speakers->term_id ] = $speakers->name;
				}

				return $speaker_category;
			} else {
				// return single speaker
				return get_post( $id );
			}

		} catch ( \Exception $es ) {
			return [];
		}

	}

	/**
	 * returns category of an event
	 *
	 * @param [type] $id
	 *
	 * @return array
	 */
	public static function get_event_category( $id = null ) {
		$event_category = [];
		$terms          = [];

		try {
			if ( is_null( $id ) || ! is_numeric( $id ) ) {
				$terms = get_terms( [
					'taxonomy'   => 'etn_category',
					'hide_empty' => false,
				] );
			} else {
				$terms = wp_get_post_terms( $id, 'etn_category' );
			}

			foreach ( $terms as $event ) {
				$event_category[ $event->term_id ] = $event->name;
			}

			return $event_category;

		} catch ( \Exception $es ) {
			return [];
		}

	}

	/**
	 * returns tag of an event
	 */
	public static function get_event_tag( $id = null ) {
		$event_tag = [];
		$terms     = [];

		try {
			if ( is_null( $id ) || ! is_numeric( $id ) ) {
				$terms = get_terms( [
					'taxonomy'   => 'etn_tags',
					'hide_empty' => false,
				] );
			} else {
				$terms = wp_get_post_terms( $id, 'etn_tags' );
			}

			// return $terms;

			foreach ( $terms as $event ) {
				$event_tag[ $event->term_id ] = $event->name;
			}

			return $event_tag;

		} catch ( \Exception $es ) {
			return [];
		}

	}

	/**
	 * returns event locations ids
	 *
	 * @param [type] $id
	 *
	 * @return array
	 */
	public static function get_event_locations( $id = null ) {
		$event_location = [];
		$terms          = [];

		try {
			if ( is_null( $id ) || ! is_numeric( $id ) ) {
				$terms = get_terms( [
					'taxonomy'   => 'etn_location',
					'hide_empty' => false,
				] );
			} else {
				$terms = wp_get_post_terms( $id, 'etn_location' );
			}

			foreach ( $terms as $event ) {
				$event_location[ $event->term_id ] = $event->name;
			}

			return $event_location;

		} catch ( \Exception $es ) {
			return [];
		}

	}

	/**
	 * Undocumented function
	 *
	 * @param [type] $id
	 *
	 * @return void
	 */
	public static function get_schedules( $id = null ) {
		$return_schedules = [];
		try {

			if ( is_null( $id ) ) {
				$args      = [
					'post_type'        => 'etn-schedule',
					'post_status'      => 'publish',
					'posts_per_page'   => - 1,
					'suppress_filters' => false,
				];
				$schedules = get_posts( $args );

				foreach ( $schedules as $value ) {
					$schedule_date                  = get_post_meta( $value->ID, 'etn_schedule_date', true );
					$return_schedules[ $value->ID ] = $value->post_title . " ($schedule_date)";
				}

				return $return_schedules;
			} else {
				// return single speaker
				return get_post( $id );
			}

		} catch ( \Exception $es ) {
			return [];
		}

	}

	/**
	 * Undocumented function
	 *
	 * @param [type] $id
	 *
	 * @return void
	 */
	public static function get_events( $id = null, $allow_child = false, $return_recurring_only = false , $upcoming = false ) {
		$return_events = [];
		try {

			if ( is_null( $id ) ) {
				$args = [
					'post_type'      => 'etn',
					'post_status'    => 'publish',
					'posts_per_page' => - 1,
				];

				if ( ! $allow_child ) {
					$args['post_parent'] = 0;
				}
				if ( $upcoming ) {
					$args['meta_query']  = array(
						array(
							'key'     => 'etn_end_date',
							'value'   => date( 'Y-m-d' ),
							'compare' => '>=',
							'type'    => 'DATE',
						),
					);
				}

				$events = get_posts( $args );

				foreach ( $events as $value ) {

					if ( $return_recurring_only ) {
						$args = array(
							'post_parent' => $value->ID,
							'post_type'   => 'etn',
						);

						$children = get_children( $args );

						if ( empty( $children ) ) {
							continue;
						}
					}

					$return_events[ $value->ID ] = $value->post_title;
				}

				return $return_events;
			} else {
				// return single speaker
				return get_post( $id );
			}

		} catch ( \Exception $es ) {
			return [];
		}

	}

	/**
	 * Undocumented function
	 *
	 * @param [type] $id
	 *
	 * @return void
	 */
	public static function get_users( $id = null ) {
		$return_organizers = [ '' => esc_html__( 'select organizer', 'eventin' ) ];
		try {
			$blogusers = get_users(
				[
					'order'    => 'DESC',
					'role__in' => [ 'etn_organizer', 'administrator' ],
				]
			);

			foreach ( $blogusers as $user ) {
				$name                           = isset( $user->display_name ) ? $user->display_name : $user->user_nicename;
				$return_organizers[ $user->ID ] = $name . ' - ' . $user->user_email;
			}

			return $return_organizers;
		} catch ( \Exception $es ) {
			return [];
		}

	}

	/**
	 * Undocumented function
	 *
	 * @param string $prefix
	 *
	 * @return void
	 */
	public static function etn_event_manager_fontawesome_icons( $prefix = 'etn-icon' ) {
		$prefix       = apply_filters( 'etn_event_social_icons_prefix', $prefix );
		$social_icons = [
			"$prefix fa-facebook"           => esc_html__( 'facebook', 'eventin' ),
			"$prefix fa-facebook-f"         => esc_html__( 'facebook-f', 'eventin' ),
			"$prefix fa-facebook-messenger" => esc_html__( 'facebook-messenger', 'eventin' ),
			"$prefix fa-facebook-square"    => esc_html__( 'facebook-square', 'eventin' ),
			"$prefix fa-linkedin"           => esc_html__( 'linkedin', 'eventin' ),
			"$prefix fa-linkedin-in"        => esc_html__( 'linkedin-in', 'eventin' ),
			"$prefix fa-twitter"            => esc_html__( 'twitter', 'eventin' ),
			"$prefix fa-twitter-square"     => esc_html__( 'twitter-square', 'eventin' ),
			"$prefix fa-uber"               => esc_html__( 'uber', 'eventin' ),
			"$prefix fa-google"             => esc_html__( 'google', 'eventin' ),
			"$prefix fa-google-drive"       => esc_html__( 'google-drive', 'eventin' ),
			"$prefix fa-google-play"        => esc_html__( 'google-play', 'eventin' ),
			"$prefix fa-google-wallet"      => esc_html__( 'google-wallet', 'eventin' ),
			"$prefix fa-linkedin"           => esc_html__( 'linkedin', 'eventin' ),
			"$prefix fa-linkedin-in"        => esc_html__( 'linkedin-in', 'eventin' ),
			"$prefix fa-whatsapp"           => esc_html__( 'whatsapp', 'eventin' ),
			"$prefix fa-whatsapp-square"    => esc_html__( 'whatsapp-square', 'eventin' ),
			"$prefix fa-wordpress"          => esc_html__( 'wordpress', 'eventin' ),
			"$prefix fa-wordpress-simple"   => esc_html__( 'wordpress-simple', 'eventin' ),
			"$prefix fa-youtube"            => esc_html__( 'youtube', 'eventin' ),
			"$prefix fa-youtube-square"     => esc_html__( 'youtube-square', 'eventin' ),
			"$prefix fa-xbox"               => esc_html__( 'xbox', 'eventin' ),
			"$prefix fa-vk"                 => esc_html__( 'vk', 'eventin' ),
			"$prefix fa-vnv"                => esc_html__( 'vnv', 'eventin' ),
			"$prefix fa-instagram"          => esc_html__( 'instagram', 'eventin' ),
			"$prefix fa-reddit"             => esc_html__( 'reddit', 'eventin' ),
			"$prefix fa-reddit-alien"       => esc_html__( 'reddit-alien', 'eventin' ),
			"$prefix fa-reddit-square"      => esc_html__( 'reddit-square', 'eventin' ),
			"$prefix fa-pinterest"          => esc_html__( 'pinterest', 'eventin' ),
			"$prefix fa-pinterest-p"        => esc_html__( 'pinterest-p', 'eventin' ),
			"$prefix fa-pinterest-square"   => esc_html__( 'pinterest-square', 'eventin' ),
			"$prefix fa-tumblr"             => esc_html__( 'tumblr', 'eventin' ),
			"$prefix fa-tumblr-square"      => esc_html__( 'tumblr-square', 'eventin' ),
			"$prefix fa-flickr"             => esc_html__( 'flickr', 'eventin' ),
			"$prefix fa-meetup"             => esc_html__( 'meetup', 'eventin' ),
			"$prefix fa-vimeo-v"            => esc_html__( 'vimeo', 'eventin' ),
			"$prefix fa-weixin"             => esc_html__( 'Wechat', 'eventin' ),
		];

		return apply_filters( 'etn_social_icons', $social_icons );
	}

	/**
	 * returns all organizers list
	 */
	public static function get_orgs() {
		$return_organizers = [
			'' => esc_html__( 'Select Category', 'eventin' ),
		];

		try {
			$terms = get_terms( [
				'taxonomy'   => 'etn_speaker_category',
				'orderby'    => 'count',
				'hide_empty' => false,
				'fields'     => 'all',
			] );

			foreach ( $terms as $term ) {
				$return_organizers[ $term->slug ] = $term->name;
			}

			return $return_organizers;
		} catch ( \Exception $es ) {
			return [];
		}

	}

	/**
	 * returns all categories of an event
	 */
	public static function cate_with_link( $post_id = null, $category = '', $single = false ) {
		$terms         = get_the_terms( $post_id, $category );
		$category_name = '';

		if ( is_array( $terms ) ):

			foreach ( $terms as $tkey => $term ):
				$cat = $term->name;

				$category_name .= sprintf( "<span>%s</span> ", $cat );

				if ( $single ) {
					break;
				}

				if ( $tkey == 1 ) {
					break;
				}

			endforeach;
		endif;

		return $category_name;
	}

	/**
	 * validation for nonce
	 */
	public static function is_secured( $nonce_field, $action, $post_id = null, $post = [] ) {

		$nonce = ! empty( $post[ $nonce_field ] ) ? sanitize_text_field( $post[ $nonce_field ] ) : '';

		if ( $nonce == '' ) {
			return false;
		}

		if ( null !== $post_id ) {

			if ( ! current_user_can( 'edit_post', $post_id ) ) {
				return false;
			}

			if ( wp_is_post_autosave( $post_id ) ) {
				return false;
			}

			if ( wp_is_post_revision( $post_id ) ) {
				return false;
			}

		}

		if ( ! wp_verify_nonce( $nonce, $action ) ) {
			return false;
		}

		return true;
	}

	/**
	 * Single page settings option
	 */
	public static function single_template_options( $single_event_id ) {
		$data                     = [];
		$date_options             = Helper::get_date_formats();
		$text_domain              = 'eventin';
		$etn_start_date           = get_post_meta( $single_event_id, 'etn_start_date', true );
		$etn_start_time           = strtotime( get_post_meta( $single_event_id, 'etn_start_time', true ) );
		$etn_end_date             = get_post_meta( $single_event_id, 'etn_end_date', true );
		$etn_end_time             = strtotime( get_post_meta( $single_event_id, 'etn_end_time', true ) );
		$etn_event_location_type  = get_post_meta( $single_event_id, 'etn_event_location_type', true );
		$etn_event_location       = get_post_meta( $single_event_id, 'etn_event_location', true );
		$event_timezone           = get_post_meta( $single_event_id, 'event_timezone', true );
		$etn_event_tags           = get_post_meta( $single_event_id, 'etn_event_tags', true );
		$etn_event_description    = get_post_meta( $single_event_id, 'etn_event_description', true );
		$etn_event_schedule       = get_post_meta( $single_event_id, 'etn_event_schedule', true );
		$etn_online_event         = get_post_meta( $single_event_id, 'etn_online_event', true );
		$etn_es_event_feature     = get_post_meta( $single_event_id, 'etn_es_event_feature', true );
		$etn_event_banner         = get_post_meta( $single_event_id, 'etn_event_banner', true );
		$etn_event_banner_url     = wp_get_attachment_image_src( $etn_event_banner );
		$etn_organizer_banner     = get_post_meta( $single_event_id, 'etn_organizer_banner', true );
		$etn_organizer_banner_url = wp_get_attachment_image_src( $etn_organizer_banner );
		$etn_event_socials        = get_post_meta( $single_event_id, 'etn_event_socials', true );
		$etn_event_page           = get_post_meta( $single_event_id, 'etn_event_page', true );
		$etn_organizer_events     = get_post_meta( $single_event_id, 'etn_event_organizer', true );
		$etn_avaiilable_tickets   = get_post_meta( $single_event_id, 'etn_avaiilable_tickets', true );
		$etn_avaiilable_tickets   = isset( $etn_avaiilable_tickets ) ? ( intval( $etn_avaiilable_tickets ) ) : 0;
		$etn_ticket_unlimited     = get_post_meta( $single_event_id, 'etn_ticket_availability', true );

		$cart_product_id = get_post_meta( $single_event_id, 'link_wc_product', true ) ? esc_attr( get_post_meta( $single_event_id, 'link_wc_product', true ) ) : esc_attr( $single_event_id );

		$etn_sold_tickets = get_post_meta( $single_event_id, 'etn_sold_tickets', true );

		if ( ! $etn_sold_tickets ) {
			$etn_sold_tickets = 0;
		}

		$etn_ticket_price   = get_post_meta( $single_event_id, 'etn_ticket_price', true );
		$etn_ticket_price   = isset( $etn_ticket_price ) ? ( floatval( $etn_ticket_price ) ) : 0;
		$etn_left_tickets   = $etn_avaiilable_tickets - $etn_sold_tickets;
		$event_options      = get_option( "etn_event_options" );
		$event_time_format  = empty( $event_options["time_format"] ) ? '12' : $event_options["time_format"];
		$event_start_time   = empty( $etn_start_time ) ? '' : ( ( $event_time_format == "24" ) ? date( 'H:i', $etn_start_time ) : date( 'g:i a', $etn_start_time ) );
		$event_end_time     = empty( $etn_end_time ) ? '' : ( ( $event_time_format == "24" ) ? date( 'H:i', $etn_end_time ) : date( 'g:i a', $etn_end_time ) );
		$event_start_date   = self::etn_date( $etn_start_date );
		$event_end_date     = self::etn_date( $etn_end_date );
		$etn_deadline       = get_post_meta( $single_event_id, 'etn_registration_deadline', true );
		$etn_deadline_value = self::etn_date( $etn_deadline );

		$category = self::cate_with_link( $single_event_id, 'etn_category' );

		$data['category']             			= $category;
		$data['etn_event_schedule']   			= $etn_event_schedule;
		$data['event_options']        			= $event_options;
		$data['text_domain']          			= $text_domain;
		$data['event_start_date']     			= $event_start_date;
		$data['event_end_date']       			= $event_end_date;
		$data['event_start_time']     			= $event_start_time;
		$data['event_end_time']       			= $event_end_time;
		$data['etn_deadline_value']   			= $etn_deadline_value;
		$data['etn_event_location_type']        = $etn_event_location_type;
		$data['etn_event_location']   			= $etn_event_location;
		$data['etn_left_tickets']     			= $etn_left_tickets;
		$data['etn_organizer_events'] 			= $etn_organizer_events;
		$data['date_options']         			= $date_options;
		$data['etn_event_socials']    			= $etn_event_socials;
		$data['etn_ticket_price']     			= $etn_ticket_price;
		$data['etn_ticket_unlimited'] 			= $etn_ticket_unlimited;
		$data['event_timezone']       			= $event_timezone;

		return $data;
	}

	/**
	 * Single page organizer
	 */
	public static function single_template_organizer_free( $etn_organizer_events ) {

		if ( file_exists( get_stylesheet_directory() . \Wpeventin::theme_templates_dir() . 'event/event-organizers-free.php' ) ) {
			require_once get_stylesheet_directory() . \Wpeventin::theme_templates_dir() . 'event/event-organizers-free.php';
		} elseif ( file_exists( get_template_directory() . \Wpeventin::theme_templates_dir() . 'event/event-organizers-free.php' ) ) {
			require_once get_template_directory() . \Wpeventin::theme_templates_dir() . 'event/event-organizers-free.php';
		} else {
			require_once \Wpeventin::templates_dir() . 'event/event-organizers-free.php';
		}

	}

	/**
	 * Speaker sessions in single page
	 */
	public static function speaker_sessions( $speaker_id ) {
		global $wpdb;
		$orgs = $wpdb->get_results( "SELECT * FROM $wpdb->postmeta LEFT JOIN $wpdb->posts ON $wpdb->postmeta.post_id = $wpdb->posts.ID WHERE $wpdb->posts.post_status = 'publish' AND $wpdb->postmeta.meta_key = 'etn_schedule_topics' AND $wpdb->postmeta.meta_value LIKE '%\"$speaker_id\"%' ORDER BY post_id DESC", ARRAY_A );

		return $orgs;
	}

	/**
	 * Remove attendee data when status failed
	 */
	public static function remove_attendee_data() {
		global $wpdb;
		$query = $wpdb->query(
			"UPDATE $wpdb->posts posts
            INNER JOIN $wpdb->postmeta postmeta
            ON posts.ID = postmeta.post_id
            SET posts.post_status = 'etn-trashed-attendee'
            WHERE postmeta.meta_key = 'etn_status'
            AND postmeta.meta_value = 'failed'
            AND posts.post_type = 'etn-attendee'"
		);

		return $query;
	}

	/**
	 * get  corn schedule days for remove attendee
	 */
	public static function get_schedule_days() {
		$event_options   = get_option( "etn_event_options" );
		$attendee_remove = isset( $event_options['attendee_remove'] ) && $event_options['attendee_remove'] !== "" ? $event_options['attendee_remove'] : 30;

		return 60 * 60 * 24 * $attendee_remove;
	}

	/**
	 * Send email function
	 */
	public static function send_email( $to, $subject, $mail_body, $from, $from_name ) {
		$body    = html_entity_decode( $mail_body );
		$headers = [ 'Content-Type: text/html; charset=UTF-8', 'From: ' . $from_name . ' <' . $from . '>' ];
		$result  = wp_mail( $to, $subject, $body, $headers );

		return $result;
	}

	/**
	 * Get all sales history of event
	 */
	public static function get_tickets_by_event( $current_post_id, $report_sorting ) {
		global $wpdb;
		$response_data = [];
		$data          = [];

		$table_etn_events = ETN_EVENT_PURCHASE_HISTORY_TABLE;
		$data             = $wpdb->get_results( "SELECT * FROM $table_etn_events WHERE post_id = $current_post_id ORDER BY event_id $report_sorting" );

		if ( is_array( $data ) && count( $data ) > 0 ) {
			$total_sale_price = 0;

			$trans_history_meta_table = ETN_EVENT_PURCHASE_HISTORY_META_TABLE;

			foreach ( $data as &$single_sale ) {
				$total_sale_price += $single_sale->event_amount;
				$single_sale_meta = $wpdb->get_results( "SELECT * FROM $trans_history_meta_table WHERE event_id = $single_sale->event_id AND meta_key = '_etn_order_qty'" );
				$single_sale->{'single_sale_meta'}

				                  = $single_sale_meta[0]->meta_value;
			}

		}

		$response_data['all_sales']        = $data;
		$response_data['total_sale_price'] = isset( $total_sale_price ) ? $total_sale_price : 0;

		return $response_data;
	}

	/**
	 * module for related events
	 *
	 * @param [type] $single_event_id
	 *
	 * @return void
	 */
	public static function related_events_widget( $single_event_id, $configs = [] ) {

		$etn_terms    = wp_get_post_terms( $single_event_id, 'etn_tags' );
		$etn_term_ids = [];

		if ( $etn_terms ) {

			foreach ( $etn_terms as $terms ) {
				array_push( $etn_term_ids, $terms->term_id );
			}

		}

		$event_options = get_option( "etn_event_options" );
		$date_options  = self::get_date_formats();
		$data          = self::post_data_query( 'etn', null, null, $etn_term_ids, "etn_tags", null, [ $single_event_id ], null, null, 'post_date', 'upcoming' );

		$column = "4";

		if ( ! empty( $configs ) && ! empty( $configs["column"] ) ) {
			$column = $configs["column"];
		}

		$title = ( is_array( $configs ) && ! empty( $configs["title"] ) ) ? $configs["title"] : esc_html__( 'Related Events', 'eventin' );

		if ( file_exists( get_stylesheet_directory() . \Wpeventin::theme_templates_dir() . 'event/related-events-free.php' ) ) {
			$template = get_stylesheet_directory() . \Wpeventin::theme_templates_dir() . 'event/related-events-free.php';
		} elseif ( file_exists( get_template_directory() . \Wpeventin::theme_templates_dir() . 'event/related-events-free.php' ) ) {
			$template = get_template_directory() . \Wpeventin::theme_templates_dir() . 'event/related-events-free.php';
		} elseif ( file_exists( \Wpeventin::templates_dir() . 'event/related-events-free.php' ) ) {
			$template = \Wpeventin::templates_dir() . 'event/related-events-free.php';
		}

		include $template;

	}

	/**
	 * Undocumented function
	 *
	 * @param [type] $key
	 * @param [type] $value
	 *
	 * @return void
	 */
	public static function get_attendee_by_token( $key, $value ) {
		global $wpdb;
		$query_result = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}postmeta WHERE meta_key='$key' AND meta_value='$value'" );

		return $query_result;
	}

	/**
	 * Sorting Schedule repeater data
	 */
	public static function sort_schedule_items( $post_id, $etn_rep_key ) {
		$new_order = sanitize_text_field( stripslashes( $_POST['etn_schedule_sorting'] ) );
		$order     = json_decode( $new_order, true );
		$order     = array_values( $order );

		if ( is_array( $order ) && ! empty( $order ) ) {
			$schedules = $etn_rep_key;
			$new_arr   = [];
			$sort_arr  = [];

			foreach ( $order as $key => $value ) {
				$new_arr[ $key ]  = $schedules[ $value ];
				$sort_arr[ $key ] = $key;
			}

			$new_sort = json_encode( $sort_arr );
			update_post_meta( $post_id, 'etn_schedule_topics', $new_arr );
			update_post_meta( $post_id, 'etn_schedule_sorting', $new_sort );
		}

	}

	public static function generate_name_from_label( $prefix, $label ) {
		return $prefix . self::get_name_structure_from_label( $label );
	}

	public static function get_name_structure_from_label( $label ) {
		return strtolower( preg_replace( "/[^a-zA-Z0-9]/", "_", $label ) );
	}

	/**
	 * Undocumented function
	 *
	 * @param [type] $default_template_name
	 * @param [type] $template_name
	 *
	 * @return void
	 */
	public static function prepare_event_template_path( $default_template_name, $template_name ) {

		if ( "event-one" !== $template_name && class_exists( 'Etn_Pro\Bootstrap' ) ) {
			$single_template_path = \Wpeventin_Pro::templates_dir() . $template_name . ".php";
		} else {
			$single_template_path = \Wpeventin::templates_dir() . $default_template_name . ".php";
		}

		$single_template_path = apply_filters( "etn_event_content_template_path", $single_template_path );

		return $single_template_path;
	}

	/**
	 * Undocumented function
	 *
	 * @param [type] $default_template_name
	 * @param [type] $template_name
	 *
	 * @return void
	 */
	public static function prepare_speaker_template_path( $default_template_name, $template_name ) {
		$arr = [
			'speaker-one',
			'speaker-two-lite',
		];

		if ( ! in_array( $template_name, $arr ) && class_exists( 'Etn_Pro\Bootstrap' ) ) {
			$single_template_path = \Wpeventin_Pro::templates_dir() . $template_name . ".php";
		} else {
			$single_template_path = \Wpeventin::templates_dir() . $template_name . ".php";
		}

		$single_template_path = apply_filters( "etn_speaker_content_template_path", $single_template_path );

		return $single_template_path;
	}

	public static function get_attendee_by_woo_order( $order_id ) {
		$all_attendee = [];
		global $wpdb;
		$table_name = $wpdb->prefix . "postmeta";
		$sql        = "SELECT post_id FROM $table_name WHERE meta_key='etn_attendee_order_id' AND meta_value=$order_id";
		$results    = $wpdb->get_results( $sql );

		if ( is_array( $results ) && ! empty( $results ) ) {

			foreach ( $results as $result ) {
				array_push( $all_attendee, $result->post_id );
			}

		}

		return $all_attendee;
	}

	public static function update_attendee_payment_status( $attendee_id, $order_status ) {
		$payment_success_status_array = [
			// 'pending',
			'processing',
			// 'on-hold',
			'completed',
			// 'cancelled',
			'refunded',
			// 'failed',
			'partial-payment',
			'stripe-pending',
		];

		if ( in_array( $order_status, $payment_success_status_array ) ) {
			//payment complete, update payment status to success
			update_post_meta( $attendee_id, 'etn_status', 'success' );
		} else {
			//payment failed, update payment status to falied
			update_post_meta( $attendee_id, 'etn_status', 'failed' );
		}

	}

	/**
	 * Undocumented function
	 *
	 * @param [type] $attendee_id
	 * @param [type] $check_info_edit_token
	 *
	 * @return void
	 */
	public static function verify_attendee_edit_token( $attendee_id, $check_info_edit_token ) {
		$post_status = get_post_status( $attendee_id );


		if ( "publish" !== $post_status || empty( $attendee_id ) || empty( $check_info_edit_token ) ) {
			return false;
		}

		$stored_edit_token = get_post_meta( $attendee_id, "etn_info_edit_token", true );

		if ( $stored_edit_token == $check_info_edit_token ) {
			return true;
		}

		return false;

	}

	/**
	 * Show Invalid Data Page
	 *
	 * @return html
	 */
	public static function show_attendee_pdf_invalid_data_page() {
		wp_head();
		?>
        <div class="section-inner">
            <h3 class="entry-title">
				<?php echo esc_html__( "Invalid data. ", "eventin" ); ?>
            </h3>
            <div class="intro-text">
                <a href="<?php echo esc_url( home_url() ); ?>"><?php echo esc_html__( "Return to homepage", "eventin" ); ?></a>
            </div>
        </div>
		<?php
		wp_footer();
	}

	/************************
	 *advanced search
	 *******************************/

	// get event data
	public static function get_eventin_search_data( $posts_per_page = - 1 ) {
		$etn_event_location = "";

		if ( isset( $_GET['etn_event_location'] ) ) {
			$etn_event_location = $_GET['etn_event_location'];
		}

		$event_cat = "";

		if ( isset( $_GET['etn_categorys'] ) ) {
			$event_cat = $_GET['etn_categorys'];
		}

		$keyword = "";

		if ( isset( $_GET['s'] ) ) {
			$keyword = $_GET['s'];
		}

		$data_query_args = [
			'post_type'      => 'etn',
			'post_status'    => 'publish',
			's'              => $keyword,
			'posts_per_page' => isset( $posts_per_page ) ? $posts_per_page : - 1,
		];

		if ( ! empty( $event_cat ) ) {
			$data_query_args['tax_query'] = [
				[
					'taxonomy'         => 'etn_category',
					'terms'            => [ $event_cat ],
					'field'            => 'id',
					'include_children' => true,
					'operator'         => 'IN',
				],
			];
		}

		if ( ! empty( $etn_event_location ) ) {
			$data_query_args['meta_query'] = [
				[
					'key'     => 'etn_event_location',
					'value'   => $etn_event_location,
					'compare' => 'LIKE',
				],
			];
		}

		$query_data = get_posts( $data_query_args );

		return $query_data;
	}

	// get event location
	public static function get_event_location() {
		$location_args       = [
			'post_type'   => [ 'etn' ],
			'numberposts' => - 1,
			'meta_query'  => [
				[
					'key'     => 'etn_event_location',
					'compare' => 'EXISTS',
				],
				[
					'key'     => 'etn_event_location',
					'value'   => [ '' ],
					'compare' => 'NOT IN',
				],
			],
		];
		$location_query_data = get_posts( $location_args );
		$location_data[]     = esc_html__( "Select Location", 'eventin' );

		if ( ! empty( $location_query_data ) ) {

			foreach ( $location_query_data as $value ) {
				$location_data[ get_post_meta( $value->ID, 'etn_event_location', true ) ] = get_post_meta( $value->ID, 'etn_event_location', true );
			}

		}

		return $location_data;
	}

	// get event search form
	public static function get_event_search_form( $etn_event_input_filed_title = "Find your next event", $etn_event_category_filed_title = "Event Category", $etn_event_location_filed_title = "Event Location", $etn_event_button_title = "Search Now" ) {

		$category_data = Helper::get_event_category();
		$location_data = [];
		$location_data = self::get_event_location();

		?>
        <form method="GET" action="<?php echo esc_url( home_url( '/' ) ); ?>" class="etn_event_inline_form">
            <div class="etn-event-search-wrapper">
                <div class="input-group">
                    <div class="input-group-prepend">
						<span class="input-group-text">
							<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-search"><circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line></svg>
						</span>
                    </div>
                    <input 
						type="search" 
						name="s" 
						value="<?php echo get_search_query() ?>"
                        placeholder="<?php echo esc_html__( $etn_event_input_filed_title, 'eventin' ) ?>"
                        class="form-control"
					>
                </div>
                <!-- // Search input filed -->
                <div class="input-group">
                    <div class="input-group-prepend">
						<span class="input-group-text">
							<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-map-pin"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"></path><circle cx="12" cy="10" r="3"></circle></svg>
						</span>
                    </div>
                    <select name="etn_event_location" class="etn_event_select2 etn_event_select">
                        <option value><?php echo esc_html__( $etn_event_location_filed_title, 'eventin' ) ?></option>
						<?php

						if ( is_array( $location_data ) && ! empty( $location_data ) ) {
							$modify_array_data = array_shift( $location_data );

							foreach ( $location_data as $value ) {
								$select_value = "";

								if ( isset( $_GET['etn_event_location'] ) ) {
									$select_value = $_GET['etn_event_location'];
								}

								?>
                                <option <?php

								if ( ! empty( $select_value ) && $select_value === $value ) {
									echo ' selected="selected"';
								}

								?> value="<?php echo esc_attr( $value ); ?>"><?php echo esc_html( $value ); ?></option>
								<?php
							}

						}

						?>
                    </select>
                </div>
                <!-- // location -->
                <div class="input-group">
                    <div class="input-group-prepend">
						<span class="input-group-text">
							<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-layers"><polygon points="12 2 2 7 12 12 22 7 12 2"></polygon><polyline points="2 17 12 22 22 17"></polyline><polyline points="2 12 12 17 22 12"></polyline></svg>
						</span>
                    </div>
                    <select name="etn_categorys" class="etn_event_select2 etn_event_select">
                        <option value><?php echo esc_html__( $etn_event_category_filed_title, 'eventin' ) ?></option>
						<?php

						if ( ! empty( $category_data ) && is_array( $category_data ) ) {
							$select_cat_value = '';

							if ( isset( $_GET['etn_categorys'] ) ) {
								$select_cat_value = $_GET['etn_categorys'];
							}

							foreach ( $category_data as $key => $value ) {
								?>
                                <option
									<?php

									if ( ! empty( $select_cat_value ) && $select_cat_value == $key ) {
										echo ' selected="selected"';
									}

									?>
                                        value="<?php echo esc_attr( $key ); ?>"><?php echo esc_html( $value ); ?></option>
								<?php
							}

						}

						?>
                    </select>
                </div>

                <!-- // cat -->
				<div class="search-button-wrapper">
					<input type="hidden" name="post_type" value="etn"/>
					<?php if ( defined( 'ETN_PRO_FILES_LOADED' ) ) : ?>
						<button 
							type="button" 
							class="etn-btn etn-filter-icon"
							aria-label="<?php echo __('Event filter button', 'eventin'); ?>"
						>
							<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-sliders"><line x1="4" y1="21" x2="4" y2="14"></line><line x1="4" y1="10" x2="4" y2="3"></line><line x1="12" y1="21" x2="12" y2="12"></line><line x1="12" y1="8" x2="12" y2="3"></line><line x1="20" y1="21" x2="20" y2="16"></line><line x1="20" y1="12" x2="20" y2="3"></line><line x1="1" y1="14" x2="7" y2="14"></line><line x1="9" y1="8" x2="15" y2="8"></line><line x1="17" y1="16" x2="23" y2="16"></line></svg>
						</button>
					<?php endif; ?>
					<button 
						type="submit"
						class="etn-btn etn-btn-primary"
					>
						<?php echo esc_html__( $etn_event_button_title, 'eventin' ) ?> 
					</button>
				</div>
            </div>
			<?php do_action( 'etn_advanced_search' ); ?>
        </form>
		<?php
	}

	/**
	 * event normal search filter
	 * Attendee list filter by event id
	 */
	public static function event_etn_search_filter( $query ) {
		if ( ( isset( $_GET['post_type'] ) && $_GET['post_type'] === "etn" ) && $query->is_search && ! is_admin() ) {

			$prev_date = date( 'Y-m-d', strtotime( date( 'Y-m-d' ) . ' -1 day' ) );
			$next_date = date( 'Y-m-d', strtotime( date( 'Y-m-d' ) . ' +1 day' ) );

			$week_date = date( 'Y-m-d', strtotime( date( 'Y-m-d' ) . ' +7 day' ) );

			$week_start = strtotime( "last monday" );
			$week_start = date( 'w', $week_start ) == date( 'w' ) ? $week_start + 7 * 86400 : $week_start;
			$weekend    = date( 'Y-m-d', strtotime( date( "Y-m-d", $week_start ) . " +6 days" ) );

			$month_start_date = date( 'Y-m-d', strtotime( date( 'Y-m' ) ) );
			$month_end_date   = date( 'Y-m-d', strtotime( date( "Y-m-t", strtotime( $month_start_date ) ) ) );

			$etn_event_location = "";

			if ( isset( $_GET['etn_event_location'] ) ) {
				$etn_event_location = $_GET['etn_event_location'];
			}

			$etn_event_date_range = "";

			if ( isset( $_GET['etn_event_date_range'] ) ) {
				$etn_event_date_range = $_GET['etn_event_date_range'];
			}

			$event_cat = "";

			if ( isset( $_GET['etn_categorys'] ) ) {
				$event_cat = $_GET['etn_categorys'];
			}

			$etn_event_will_happen = "";

			if ( isset( $_GET['etn_event_will_happen'] ) ) {
				$etn_event_will_happen = $_GET['etn_event_will_happen'];
			}

			$keyword = "";

			if ( isset( $_GET['s'] ) ) {
				$keyword = $_GET['s'];
			}

			$meta_location_query = [];

			if ( ! empty( $etn_event_location ) ) {
				$meta_location_query = [
					[
						'key'     => 'etn_event_location',
						'value'   => $etn_event_location,
						'compare' => "EXSISTS",
					],
				];
			}

			$meta_date_query = [];

			if ( ! empty( $etn_event_date_range ) ) {

				if ( $etn_event_date_range === "today" ) {
					$meta_date_query = [
						'relation' => 'AND',
						[
							'key'     => 'etn_end_date',
							'value'   => date( 'Y-m-d' ),
							'compare' => '>=',
						],
						[
							'key'     => 'etn_start_date',
							'value'   => date( 'Y-m-d' ),
							'compare' => '<=',
						],
					];
				} elseif ( $etn_event_date_range === "tomorrow" ) {
					$meta_date_query = [
						'relation' => 'AND',
						[
							'key'     => 'etn_end_date',
							'value'   => $next_date,
							'compare' => '>=',
						],
						[
							'key'     => 'etn_start_date',
							'value'   => $next_date,
							'compare' => '<=',
						],
					];
				} elseif ( $etn_event_date_range === "yesterday" ) {
					$meta_date_query = [
						'relation' => 'AND',
						[
							'key'     => 'etn_end_date',
							'value'   => $prev_date,
							'compare' => '>=',
						],
						[
							'key'     => 'etn_start_date',
							'value'   => $prev_date,
							'compare' => '<=',
						],
					];
				} elseif ( $etn_event_date_range === "this-weekend" ) {
					$meta_date_query = [
						'relation' => 'AND',
						[
							'key'     => 'etn_end_date',
							'value'   => $weekend,
							'compare' => '>=',
						],
						[
							'key'     => 'etn_start_date',
							'value'   => $weekend,
							'compare' => '<=',
						],
					];
				} elseif ( $etn_event_date_range === "this-week" ) {
					$meta_date_query = [
						'relation' => 'OR',
						[
							'key'     => 'etn_start_date',
							'value'   => [ $week_start, $weekend ],
							'type'    => 'date',
							'compare' => 'BETWEEN',
						],
						[
							'key'     => 'etn_end_date',
							'value'   => [ $week_start, $weekend ],
							'type'    => 'date',
							'compare' => 'BETWEEN',
						],
					];
				} elseif ( $etn_event_date_range === "this-month" ) {
					$meta_date_query = [
						'relation' => 'OR',
						[
							'key'     => 'etn_start_date',
							'value'   => [ $month_start_date, $month_end_date ],
							'type'    => 'date',
							'compare' => 'BETWEEN',
						],
						[
							'key'     => 'etn_end_date',
							'value'   => [ $month_start_date, $month_end_date ],
							'type'    => 'date',
							'compare' => 'BETWEEN',
						],
					];
				} elseif ( $etn_event_date_range === "upcoming" ) {
					$meta_date_query = [
						'relation' => 'OR',
						[
							'key'     => 'etn_end_date',
							'value'   => date( 'Y-m-d' ),
							'compare' => '>',
						],
						[
							'key'     => 'etn_end_date',
							'value'   => '',
							'compare' => '=',
						],
					];
				} elseif ( $etn_event_date_range === "expired" ) {
					$meta_date_query = [
						'relation' => 'OR',
						[
							'key'     => 'etn_end_date',
							'value'   => date( 'Y-m-d' ),
							'compare' => '<',
						],
						[
							'key'     => 'etn_end_date',
							'value'   => '',
							'compare' => '=',
						],
					];
				}

			}

			$meta_event_happen_query = [];

			if ( ! empty( $etn_event_will_happen ) ) {
				$meta_event_happen_query = [
					[
						'key'     => 'etn_zoom_event',
						'value'   => $etn_event_will_happen,
						'compare' => "EXSISTS",
					],
				];
			}

			$meta_query = [
				'relation' => 'AND',
				[
					$meta_location_query,
					$meta_date_query,
					$meta_event_happen_query,
				],
			];
			$query->set( 'meta_query', $meta_query );

			if ( ! empty( $keyword ) ) {
				$query->set( 's', $keyword );
			}

			if ( ! empty( $event_cat ) ) {
				$taxquery = [
					[
						'taxonomy' => 'etn_category',
						'terms'    => [ $event_cat ],
						'field'    => 'id',
					],
				];
				$query->set( 'tax_query', $taxquery );
			}

			$query->set( 'post_type', [ 'etn' ] );

			// Archive page event sort by event start date
			if ( is_archive() ) {
				$query->set( 'order', 'ASC' );
				$query->set( 'meta_key', 'etn_start_date' );
				$query->set( 'orderby', 'meta_value' );
			}

		}

		// Attendee by event id
		\Etn\Core\Event\Helper::instance()->attendee_by_events( $query );

		return $query;
	}

	// ajax event filter in event archive
	public static function etn_event_ajax_get_data() {

		$post_arr  = filter_input_array( INPUT_POST, FILTER_SANITIZE_STRING );
		$prev_date = date( 'Y-m-d', strtotime( date( 'Y-m-d' ) . ' -1 day' ) );
		$next_date = date( 'Y-m-d', strtotime( date( 'Y-m-d' ) . ' +1 day' ) );

		$week_date = date( 'Y-m-d', strtotime( date( 'Y-m-d' ) . ' +7 day' ) );

		$week_start = strtotime( "last monday" );
		$week_start = date( 'w', $week_start ) == date( 'w' ) ? $week_start + 7 * 86400 : $week_start;
		$weekend    = date( 'Y-m-d', strtotime( date( "Y-m-d", $week_start ) . " +6 days" ) );

		$month_start_date = date( 'Y-m-d', strtotime( date( 'Y-m' ) ) );
		$month_end_date   = date( 'Y-m-d', strtotime( date( "Y-m-t", strtotime( $month_start_date ) ) ) );

		$keyword = "";

		if ( isset( $post_arr['s'] ) ) {
			$keyword = $post_arr['s'];
		}

		$event_cat = "";

		if ( isset( $post_arr['etn_categorys'] ) ) {
			$event_cat = $post_arr['etn_categorys'];
		}

		$etn_event_location = "";

		if ( isset( $post_arr['etn_event_location'] ) ) {
			$etn_event_location = $post_arr['etn_event_location'];
		}

		$etn_event_date_range = "";

		if ( isset( $post_arr['etn_event_date_range'] ) ) {
			$etn_event_date_range = $post_arr['etn_event_date_range'];
		}

		$etn_event_will_happen = "";

		if ( isset( $post_arr['etn_event_will_happen'] ) ) {
			$etn_event_will_happen = $post_arr['etn_event_will_happen'];
		}

		if ( isset( $post_arr['etn_event_location'] ) || isset( $post_arr['etn_categorys'] ) || isset( $post_arr['s'] ) || isset( $post_arr['etn_event_date_range'] ) || isset( $post_arr['etn_event_will_happen'] ) ) {
			$query_string = [
				'post_type'   => 'etn',
				'post_status' => 'publish',
			];

			if ( isset( $post_arr['type'] ) ) {
				$id                           = $post_arr['id'];
				$query_string['post__not_in'] = explode( ',', $id );
			}

			if ( ! empty( $keyword ) ) {
				$query_string['s'] = $keyword;
			}

			if ( ! empty( $event_cat ) ) {
				$query_string['tax_query'] = [
					[
						'taxonomy' => 'etn_category',
						'terms'    => [ $event_cat ],
						'field'    => 'id',
					],
				];
			}

			$meta_location_query_string = [];

			if ( ! empty( $etn_event_location ) ) {
				$meta_location_query_string = [
					'key'     => 'etn_event_location',
					'value'   => $etn_event_location,
					'compare' => 'EXSISTS',
				];
			}

			$meta_event_happen_query = [];

			if ( ! empty( $etn_event_will_happen ) ) {
				$meta_event_happen_query = [
					'key'     => 'etn_zoom_event',
					'value'   => $etn_event_will_happen,
					'compare' => 'LIKE',
				];
			}

			$meta_event_date_query_string = [];

			if ( ! empty( $etn_event_date_range ) ) {

				if ( $etn_event_date_range === "today" ) {
					$meta_event_date_query_string = [
						'relation' => 'AND',
						[
							'key'     => 'etn_end_date',
							'value'   => date( 'Y-m-d' ),
							'compare' => '>=',
						],
						[
							'key'     => 'etn_start_date',
							'value'   => date( 'Y-m-d' ),
							'compare' => '<=',
						],
					];
				} elseif ( $etn_event_date_range === "tomorrow" ) {
					$meta_event_date_query_string = [
						'relation' => 'AND',
						[
							'key'     => 'etn_end_date',
							'value'   => $next_date,
							'compare' => '>=',
						],
						[
							'key'     => 'etn_start_date',
							'value'   => $next_date,
							'compare' => '<=',
						],
					];
				} elseif ( $etn_event_date_range === "yesterday" ) {
					$meta_event_date_query_string = [
						'relation' => 'AND',
						[
							'key'     => 'etn_end_date',
							'value'   => $prev_date,
							'compare' => '>=',
						],
						[
							'key'     => 'etn_start_date',
							'value'   => $prev_date,
							'compare' => '<=',
						],
					];
				} elseif ( $etn_event_date_range === "this-weekend" ) {
					$meta_event_date_query_string = [
						'relation' => 'AND',
						[
							'key'     => 'etn_end_date',
							'value'   => $weekend,
							'compare' => '>=',
						],
						[
							'key'     => 'etn_start_date',
							'value'   => $weekend,
							'compare' => '<=',
						],
					];
				} elseif ( $etn_event_date_range === "this-week" ) {
					$meta_event_date_query_string = [
						'relation' => 'OR',
						[
							'key'     => 'etn_start_date',
							'value'   => [ $week_start, $weekend ],
							'type'    => 'date',
							'compare' => 'BETWEEN',
						],
						[
							'key'     => 'etn_end_date',
							'value'   => [ $week_start, $weekend ],
							'type'    => 'date',
							'compare' => 'BETWEEN',
						],
					];
				} elseif ( $etn_event_date_range === "this-month" ) {
					$meta_event_date_query_string = [
						'relation' => 'OR',
						[
							'key'     => 'etn_start_date',
							'value'   => [ $month_start_date, $month_end_date ],
							'type'    => 'date',
							'compare' => 'BETWEEN',
						],
						[
							'key'     => 'etn_end_date',
							'value'   => [ $month_start_date, $month_end_date ],
							'type'    => 'date',
							'compare' => 'BETWEEN',
						],
					];
				} elseif ( $etn_event_date_range === "upcoming" ) {
					$meta_event_date_query_string = [
						'relation' => 'OR',
						[
							'key'     => 'etn_end_date',
							'value'   => date( 'Y-m-d' ),
							'compare' => '>',
						],
						[
							'key'     => 'etn_end_date',
							'value'   => '',
							'compare' => '=',
						],
					];
				} elseif ( $etn_event_date_range === "expired" ) {
					$meta_event_date_query_string = [
						'relation' => 'OR',
						[
							'key'     => 'etn_end_date',
							'value'   => date( 'Y-m-d' ),
							'compare' => '<',
						],
						[
							'key'     => 'etn_end_date',
							'value'   => '',
							'compare' => '=',
						],
					];
				}

			}

			$query_string['meta_query'] = [
				'relation' => 'AND',
				[
					$meta_location_query_string,
					$meta_event_date_query_string,
					$meta_event_happen_query,
				],
			];
			$search                     = new \WP_Query( $query_string );
			$newdata                    = '';
			$ids                        = [];

			if ( $search->have_posts() ) {

				while ( $search->have_posts() ) {
					$search->the_post();
					?>
                    <div class="etn-col-md-6 etn-col-lg-<?php echo esc_attr( apply_filters( 'etn_event_archive_column', '4' ) ); ?>">

                        <div class="etn-event-item">

							<?php do_action( 'etn_before_event_archive_content', get_the_ID() ); ?>

                            <!-- content start-->
                            <div class="etn-event-content">

								<?php do_action( 'etn_before_event_archive_title', get_the_ID() ); ?>

                                <h3 class="etn-title etn-event-title">
                                    <a href="<?php echo esc_url( get_the_permalink() ) ?>">
										<?php echo esc_html( get_the_title() ); ?>
                                    </a>
                                </h3>

								<?php do_action( 'etn_after_event_archive_title', get_the_ID() ); ?>
                            </div>
                            <!-- content end-->

							<?php do_action( 'etn_after_event_archive_content', get_the_ID() ); ?>

                        </div>
                        <!-- etn event item end-->
                    </div>

					<?php
				}

			}

			wp_reset_postdata();

		}

		wp_die();
	}

	/**
	 * get_category id
	 *
	 * @param [type] $order_id
	 * @param [type] $order
	 *
	 * @return void
	 * @since 2.4.1
	 *
	 */
	public static function get_etn_taxonomy_ids( $taxonomy = 'etn_category', $shortcode_cat = "cat_id", $multiple = true ) {
		$multiple_val   = '';
		$default_select = '<option value="">' . esc_html__( 'Select a Category', 'eventin' ) . '</option>';
		if ( $multiple ) {
			$multiple_val   = 'multiple';
			$default_select = '';
		}
		$taxonomy = $taxonomy;
		$args_cat = [
			'taxonomy'   => $taxonomy,
			'number'     => 50,
			'hide_empty' => 0,
		];
		$cats     = get_categories( $args_cat );
		?>
        <select data-cat="<?php echo esc_attr( $shortcode_cat ); ?>"
                class="etn-shortcode-select etn-setting-input" <?php echo esc_attr( $multiple_val ); ?>>
			<?php echo Helper::render( $default_select ); ?>
			<?php foreach ( $cats as $item ): ?>
				<?php echo '<option value="' . esc_attr( $item->term_id ) . '">' . ( esc_html( $item->name ) ) . '</option>'; ?>
			<?php endforeach; ?>
        </select>
		<?php
	}

	/**
	 * returns list of all speaker
	 * returns single speaker if speaker id is provuded
	 */
	public static function get_posts_ids( $post_type = 'etn-schedule', $shortcode_ids = "ids", $multiple = 'multiple', $query_args = [] ) {
		$args = [
			'post_type'        => $post_type,
			'post_status'      => 'publish',
			'posts_per_page'   => - 1,
			'post_parent'      => 0,
			'suppress_filters' => false,
		];

		if ( ! empty( $query_args ) ) {
			$args = $query_args;
		}

		$schedules = get_posts( $args );
		?>
        <select data-cat="<?php echo esc_attr( $shortcode_ids ); ?>"
                class="etn-shortcode-select etn-setting-input" <?php echo esc_attr( $multiple ) ?>>
			<?php foreach ( $schedules as $item ): ?>
				<?php if ( $post_type === 'etn-zoom-meeting' ) {
					$post_item_id = get_post_meta( $item->ID, 'zoom_meeting_id', true );
				} else {
					$post_item_id = $item->ID;
				}

				?>
				<?php echo '<option  value="' . esc_attr( $post_item_id ) . '">' . ( esc_html( $item->post_title ) ) . '</option>'; ?>
			<?php endforeach; ?>
        </select>
		<?php
	}

	/**
	 * returns modified posts_per_page for event archive page
	 */
	public static function etn_event_archive_pagination_per_page( $query ) {
		if ( ! is_admin() && $query->is_main_query() && is_post_type_archive( 'etn' ) ) {
			$settings        = \Etn\Core\Settings\Settings::instance()->get_settings_option();
			$events_per_page = ! empty( $settings['events_per_page'] ) ? $settings['events_per_page'] : 10;
			$event_sorting   = ! empty( $settings['archive_event_sorting'] ) ? $settings['archive_event_sorting'] : "";
			$meta_query      = [];
			// upcoming event query
			if ( $event_sorting === 'upcoming' ) {
				$meta_query = array(
					array(
						'key'     => 'etn_start_date',
						'value'   => date( 'Y-m-d' ),
						'compare' => '>=',
						'type'    => 'DATE',
					)
				);
			}
			// expire events query
			if ( $event_sorting == 'expire' ) {
				$meta_query = [
					'relation' => 'OR',
					[
						'key'     => 'etn_end_date',
						'value'   => date( 'Y-m-d' ),
						'compare' => '<',
						'type'    => 'DATE',

					],
					[
						'key'     => 'etn_end_date',
						'value'   => date( 'Y-m-d' ),
						'compare' => '=',
						'type'    => 'DATE',
					],
				];
			}

			$query->set( 'meta_query', $meta_query );

			$query->set( 'orderby', 'meta_value' );
			$query->set( 'meta_key', 'etn_start_date' );
			$query->set( 'order', 'ASC' );

			$query->set( 'posts_per_page', $events_per_page );

			return $query;
		}

	}

	/**
	 * Undocumented function
	 *
	 * @param [type] $attendee_id
	 *
	 * @return void
	 */
	public static function generate_unique_ticket_id_from_attendee_id( $attendee_id ) {
		$info_edit_token = get_post_meta( $attendee_id, 'etn_info_edit_token', true );
		$ticket_id       = substr( strtoupper( md5( $info_edit_token ) . $attendee_id ), - 10 );

		return $ticket_id;
	}

	/**
	 * shortcode builder option range
	 */
	public static function get_option_range( $arr = [], $class = "", $selected_index = 2 ) {
		?>
        <select class="etn-setting-input <?php echo esc_attr( $class ); ?>">
			<?php
			$i = 0;
			foreach ( $arr as $key => $value ) {
				$i ++;
				$selected = ( $i === $selected_index ) ? 'selected' : '';
				?>
                <option value="<?php echo esc_html( $key ); ?>" <?php echo esc_attr( $selected ); ?>> <?php echo esc_html( $value ); ?> </option>
			<?php }

			?>
        </select>
		<?php
		return;
	}

	/**
	 * shortcode builder hide empty
	 */
	public static function get_show_hide( $key ) {
		$hide_empty = [
			"$key='yes'" => esc_html__( 'Yes', 'eventin' ),
			"$key='no'"  => esc_html__( 'No', 'eventin' ),
		];

		return self::get_option_range( $hide_empty, '' );
	}

	/**
	 * shortcode builder hide empty
	 */
	public static function get_show_hide_recurring( $key, $selected_index = '' ) {
		$selected_index = 1;
		$hide_empty     = [
			"$key='yes'" => esc_html__( 'Yes', 'eventin' ),
			"$key='no'"  => esc_html__( 'No', 'eventin' ),
		];

		return self::get_option_range( $hide_empty, '', $selected_index );
	}

	/**
	 * shortcode builder hide empty
	 */
	public static function get_order( $key ) {
		$order = [
			"$key='ASC'"  => esc_html__( 'ASC', 'eventin' ),
			"$key='DESC'" => esc_html__( 'DESC', 'eventin' ),
		];

		return self::get_option_range( $order, '' );
	}

	/**
	 * shortcode builder hide empty
	 */
	public static function get_event_status( $key ) {
		$event_status = [
			"$key=''"         => esc_html__( 'All', 'eventin' ),
			"$key='upcoming'" => esc_html__( 'Upcoming', 'eventin' ),
			"$key='expire'"   => esc_html__( 'Expire', 'eventin' ),
		];

		return self::get_option_range( $event_status, '' );
	}

	/**
	 * shortcode builder style
	 */
	public static function get_option_style( $limit, $value_name, $option_name = "", $display_name = "" ) {
		?>
        <select class="etn-setting-input">
			<?php for ( $i = 1; $i <= $limit; $i ++ ) { ?>
                <option value="<?php echo esc_html( $value_name ); ?> ='<?php echo esc_html( $option_name . $i ); ?>'"> <?php echo esc_html( $display_name . $i, 'eventin' ); ?> </option>
			<?php }

			?>
        </select>
		<?php
		return;
	}

	/**
	 * Check If Attendee Exists For A Specific Event Of A Specific Order
	 *
	 * @param [type] $order_id
	 * @param [type] $id
	 *
	 * @return void
	 * @since 2.4.6
	 *
	 */
	public static function check_if_attendee_exists_for_ordered_event( $order_id ) {
		$args               = [
			'post_type'   => 'etn-attendee',
			'post_status' => 'publish',
		];
		$args['meta_query'] = [
			'relation' => "AND",
			[
				'key'     => 'etn_attendee_order_id',
				'value'   => $order_id,
				'compare' => '=',
			],
		];
		$data               = get_posts( $args );

		return $data;
	}

	/**
	 * Send Attendee Tickets Email For Specific Woocommerce Order
	 *
	 * @param [type] $order_id
	 * @param [type] $report_event_id
	 *
	 * @return void
	 */
	public static function send_attendee_ticket_for_woo_order( $order_id, $report_event_id = null, $gateway = 'woocommerce' ) {
		if ( $gateway == 'woocommerce' ) {
			$order = wc_get_order( $order_id );

			foreach ( $order->get_items() as $item_id => $item ) {
				// Get the product name
				$product_name = $item->get_name();
				$product_id   = ! is_null( $item->get_meta( 'event_id', true ) ) ? $item->get_meta( 'event_id', true ) : "";

				if ( ! empty( $product_id ) ) {
					$event_object = get_post( $product_id );
				} else {
					$event_object = get_page_by_title( $product_name, OBJECT, 'etn' );
				}

				if ( ! empty( $event_object->post_type ) && ( 'etn' == $event_object->post_type ) && ( $event_object->ID == $report_event_id ) ) {
					$event_id = $event_object->ID;
					$update_key = ! is_null( $item->get_meta( 'etn_status_update_key', true ) ) ? $item->get_meta( 'etn_status_update_key', true ) : "";
					self::mail_info_data( $event_id, $order_id, $product_name, $update_key );
				}
			}
		} else {
			$product_name = get_the_title( $report_event_id );
			$update_key   = get_post_meta( $order_id, 'etn_status_update_key', true );
			self::mail_info_data( $report_event_id, $order_id, $product_name, $update_key, $gateway );
		}
	}

	public static function mail_info_data( $event_id = null, $order_id = null, $product_name = '', $update_key = '', $gateway = 'woocommerce' ) {
		// update attendee status and send ticket to email
		$event_location   = ! is_null( get_post_meta( $event_id, 'etn_event_location', true ) ) ? get_post_meta( $event_id, 'etn_event_location', true ) : "";
		$etn_ticket_price = ! is_null( get_post_meta( $event_id, 'etn_ticket_price', true ) ) ? get_post_meta( $event_id, 'etn_ticket_price', true ) : "";
		$etn_start_date   = ! is_null( get_post_meta( $event_id, 'etn_start_date', true ) ) ? get_post_meta( $event_id, 'etn_start_date', true ) : "";
		$etn_end_date     = ! is_null( get_post_meta( $event_id, 'etn_end_date', true ) ) ? get_post_meta( $event_id, 'etn_end_date', true ) : "";
		$etn_start_time   = ! is_null( get_post_meta( $event_id, 'etn_start_time', true ) ) ? get_post_meta( $event_id, 'etn_start_time', true ) : "";
		$etn_end_time     = ! is_null( get_post_meta( $event_id, 'etn_end_time', true ) ) ? get_post_meta( $event_id, 'etn_end_time', true ) : "";
		$purchaser_email  = ! is_null( get_post_meta( $order_id, '_billing_email', true ) ) ? get_post_meta( $order_id, '_billing_email', true ) : "";

		$pdf_data = [
			'order_id'         => $order_id,
			'event_name'       => $product_name,
			'update_key'       => $update_key,
			'user_email'       => $purchaser_email,
			'event_location'   => $event_location,
			'etn_ticket_price' => $etn_ticket_price,
			'etn_start_date'   => $etn_start_date,
			'etn_end_date'     => $etn_end_date,
			'etn_start_time'   => $etn_start_time,
			'etn_end_time'     => $etn_end_time,
		];

		self::mail_attendee_report( $pdf_data, false, false, $gateway );
		// ========================== Attendee related works start ========================= //
	}

	/**
	 * markup for attendee ticket send in mail
	 */
	public static function generate_attendee_ticket_email_markup( $attendee_id ) {
		$attendee_name = get_the_title( $attendee_id );
		$ticket_name   = ! empty( get_post_meta( $attendee_id, 'ticket_name', true ) ) ? get_post_meta( $attendee_id, 'ticket_name', true ) : ETN_DEFAULT_TICKET_NAME;
		$edit_token    = get_post_meta( $attendee_id, 'etn_info_edit_token', true );

		$base_url              = home_url();
		$attendee_cpt          = new \Etn\Core\Attendee\Cpt();
		$attendee_endpoint     = $attendee_cpt->get_name();
		$action_url            = $base_url . "/" . $attendee_endpoint;
		$ticket_download_link  = $action_url . "?etn_action=" . urlencode( 'download_ticket' ) . "&attendee_id=" . urlencode( $attendee_id ) . "&etn_info_edit_token=" . urlencode( $edit_token );
		$edit_information_link = $action_url . "?etn_action=" . urlencode( 'edit_information' ) . "&attendee_id=" . urlencode( $attendee_id ) . "&etn_info_edit_token=" . urlencode( $edit_token );

		?>
        <div class="etn-attendee-details-button-parent">
            <div class="etn-attendee-details-name"><?php echo esc_html__( 'Ticket name: ', 'eventin' ) . esc_html( $ticket_name ); ?></div>
            <div class="etn-attendee-details-name"><?php echo esc_html__( 'Attendee: ', 'eventin' ) . esc_html( $attendee_name ); ?></div>
            <div class="etn-attendee-details-button-download">
                <a class="etn-btn etn-success download-details" target="_blank"
                   href="<?php echo esc_url( $ticket_download_link ); ?>"><?php echo esc_html__( 'Download Ticket', 'eventin' ); ?></a>
                |
                <a class="etn-btn etn-success edit-information" target="_blank"
                   href="<?php echo esc_url( $edit_information_link ); ?>"><?php echo esc_html__( 'Edit Information', 'eventin' ); ?></a>
            </div>
        </div><br>
		<?php
	}

	/**
	 * update attendee status and send ticket to email
	 */
	public static function mail_attendee_report( $pdf_data, $checkout = false, $update_payment_status = true, $gateway = 'woocommerce' ) {

		global $wpdb;

		if ( is_array( $pdf_data ) && ! empty( $pdf_data['update_key'] ) ) {
			$prepare_guery           = $wpdb->prepare( "SELECT post_id FROM $wpdb->postmeta where meta_key ='etn_status_update_token' and meta_value = '%s' ", $pdf_data['update_key'] );
			$current_event_attendees = $wpdb->get_col( $prepare_guery );
			$event_name              = $pdf_data['event_name'];

			if ( $gateway == 'woocommerce' ) {
				$order        = wc_get_order( $pdf_data['order_id'] );
				$order_status = $order->get_status();
			} else {
				$order_status = get_post_meta( $pdf_data['order_id'], 'etn_payment_status', true );
			}

			// update attendee payment status
			if ( $update_payment_status ) {
				$special_status = $order_status;
				if ( $gateway == 'stripe' ) {
					$special_status = 'stripe-pending';
				}
				self::process_attendee_payment_status( $current_event_attendees, $pdf_data, $special_status );
			}

			if ( ! $checkout ) {
				// don't attempt to send ticket email while creating an order
				// send attendee ticket email
				self::process_attendee_ticket_email( $current_event_attendees, $event_name, $pdf_data, $order_status );
			}
		}
	}

	public static function process_attendee_payment_status( $current_order_attendees, $pdf_data, $order_status ) {

		if ( is_array( $current_order_attendees ) && ! empty( $current_order_attendees ) ) {

			foreach ( $current_order_attendees as $key => $value ) {
				$attendee_id = intval( $value );

				//update attendee status
				update_post_meta( $attendee_id, 'etn_attendee_order_id', $pdf_data['order_id'] );
				Helper::update_attendee_payment_status( $attendee_id, $order_status );
			}

		}

	}

	public static function process_attendee_ticket_email( $current_order_attendees, $event_name, $pdf_data, $order_status ) {

		ob_start();
		
		// Get email message
		$settings                   =  \Etn\Core\Settings\Settings::instance()->get_settings_option();
		$purchase_email_message     = !empty( $settings['purchase_email_message'] ) ? $settings['purchase_email_message'] : esc_html__( "You have purchased ticket(s) for %s. Attendee ticket details are as follows.", "eventin" );
		
		?>
        <div>
			<?php echo sprintf( $purchase_email_message, $event_name ); ?>
        </div>
        <br><br>
		<?php

		if ( is_array( $current_order_attendees ) && ! empty( $current_order_attendees ) ) {

			foreach ( $current_order_attendees as $key => $value ) {
				$attendee_id = intval( $value );

				//generate email content markup
				Helper::generate_attendee_ticket_email_markup( $attendee_id );
			}

		}

		$mail_content 			= ob_get_clean();
		$mail_content  			= self::filter_template_tags( $mail_content, $event_name);


		$settings_options 		= Helper::get_settings();
		$disable_ticket_email 	= ! empty( Helper::get_option( 'disable_ticket_email' ) ) ? true : false;

		// send email with attendee tickets
		if ( ( ! $disable_ticket_email ) && is_array( $pdf_data ) && ! empty( $settings_options['admin_mail_address'] ) && ! empty( $pdf_data['user_email'] ) ) {
			$to        = $pdf_data['user_email'];
			$subject   = esc_html__( 'Event Ticket', "eventin" );
			$from      = $settings_options['admin_mail_address'];
			$from_name = self::retrieve_mail_from_name();

			$proceed_ticket_mail = true;

			$order_status = strtolower( $order_status );

			// if checkout time and order_status is processing/completed then ticket mail will sent
			if ( ! ( $order_status == 'processing' || $order_status == 'completed' ) ) {
				$proceed_ticket_mail = false;
			}
			$proceed_ticket_mail = true;
			if ( $proceed_ticket_mail ) {
				Helper::send_email( $to, $subject, $mail_content, $from, $from_name );
			}

		}
	}

	/**
	 * get decoded version of special character to show
	 *
	 * @return string
	 */
	public static function retrieve_mail_from_name() {
		add_filter( 'wp_mail_from_name', function () {
			return html_entity_decode( get_bloginfo( "name" ), ENT_QUOTES );
		} );
	}

	public static function send_all_attendee_ticket_email_by_order( $order_id ) {

	}

	/**
	 * Sanitize Recurring Event Slug Name
	 *
	 * @param [type] $post_slug
	 * @param [type] $post_slug_postfix
	 *
	 * @return void
	 */
	public static function sanitize_recurring_event_slug( $post_slug, $post_slug_postfix ) {

		if ( strlen( $post_slug . '-' . $post_slug_postfix ) > 200 ) {
			if ( preg_match( '/^(.+)(\-[0-9]+)$/', $post_slug, $post_slug_parts ) ) {
				$post_slug_decoded = urldecode( $post_slug_parts[1] );
				$post_slug_suffix  = $post_slug_parts[2];
			} else {
				$post_slug_decoded = urldecode( $post_slug );
				$post_slug_suffix  = '';
			}

			$post_slug_maxlength = 200 - strlen( $post_slug_suffix . '-' . $post_slug_postfix );
			if ( $post_slug_parts[0] === $post_slug_decoded . $post_slug_suffix ) {
				$post_slug = substr( $post_slug_decoded, 0, $post_slug_maxlength );
			} else {
				$post_slug = utf8_uri_encode( $post_slug_decoded, $post_slug_maxlength );
			}

			$post_slug = rtrim( $post_slug, '-' ) . $post_slug_suffix;
		} else {
			$post_slug = rtrim( $post_slug . '-' ) . $post_slug_postfix;
		}

		return apply_filters( 'etn_sanitize_recurring_event_slug', $post_slug, $post_slug_postfix );
	}

	/**
	 * Check if slug exists
	 *
	 * @param [type] $post_name
	 *
	 * @return void
	 */
	public static function the_slug_exists( $post_name ) {
		global $wpdb;
		if ( $wpdb->get_row( "SELECT post_name FROM $wpdb->posts WHERE post_name = '" . $post_name . "'", 'ARRAY_A' ) ) {
			return true;
		} else {
			return false;
		}

	}

	/*
     * get all posts which are shop_order
     */
	public static function get_order_posts() {
		global $wpdb;
		$order_posts = $wpdb->get_results( "SELECT * FROM $wpdb->posts WHERE post_type = 'shop_order' ORDER BY id DESC", ARRAY_A );

		return $order_posts;
	}

	/**
	 * Checks If An Event Has Recurring Events
	 *
	 * @param [type] $single_event_id
	 *
	 * @return void
	 */
	public static function get_child_events( $single_event_id ) {
		//if post type is etn and post has this is as parent-id
		$args     = [
			'post_parent' => $single_event_id,
			'post_type'   => 'etn',
		];
		$children = get_children( $args );

		if ( ! empty( $children ) ) {
			return $children;
		}

		return false;
	}

	/**
	 * All data for recurrence details table
	 */
	public static function get_all_data( $id ) {
		$events_data = [];

		$events = get_posts( [
			'post_parent'    => $id,
			'posts_per_page' => - 1,
			'post_type'      => 'etn',
		] );

		if ( ! empty( $events ) ) {

			foreach ( $events as $key => $post ) {
				$freq                            = get_post_meta( $id, 'etn_event_recurrence', true );
				$recurr_type                     = ! empty( $freq['recurrence_freq'] ) ? ucfirst( $freq['recurrence_freq'] ) : "";
				$events_data[ $key ]['ID']       = $post->ID;
				$events_data[ $key ]['name']     = $post->post_title;
				$events_data[ $key ]['location'] = get_post_meta( $post->ID, 'etn_event_location', true );

				$events_data[ $key ]['schedule'] = esc_html__( 'Date: ', 'eventin' ) . get_post_meta( $post->ID, 'etn_start_date', true ) . esc_html__( ' to ', 'eventin' ) . get_post_meta( $post->ID, 'etn_end_date', true ) .
				esc_html__( ' Time: ', 'eventin' ) . get_post_meta( $post->ID, 'etn_start_time', true ) . esc_html__( ' - ', 'eventin' ) . get_post_meta( $post->ID, 'etn_end_time', true );
			}

		}

		return $events_data;
	}

	public static function total_data( $id ) {
		$events = get_posts( [
			'post_parent'    => $id,
			'posts_per_page' => - 1,
			'post_type'      => 'etn',
		] );

		return count( $events );
	}

	/**
	 * Check If An Event Is A Recurrence Child
	 *
	 * @param [type] $event_id
	 *
	 * @return boolean
	 */
	public static function is_recurrence( $event_id ) {

		if ( 'etn' == get_post_type( $event_id ) && '0' != wp_get_post_parent_id( $event_id ) ) {
			return true;
		}

		return false;
	}

	/**
	 * Return day name
	 *
	 * @return void
	 */
	public static function day_name() {
		return [
			'Sun' => 'Sun',
			'Mon' => 'Mon',
			'Tue' => 'Tue',
			'Wed' => 'Wed',
			'Thu' => 'Thu',
			'Fri' => 'Fri',
			'Sat' => 'Sat'
		];
	}

	/**
	 * Create page
	 *
	 * @param string $title_of_the_page
	 * @param string $content
	 * @param [type] $parent_id
	 *
	 * @return void
	 */
	public static function create_page( $title_of_the_page, $content = '', $parent_id = null, $replace = '_' ) {

		$objPage = get_page_by_path( $title_of_the_page );

		if ( empty( $objPage ) ) {

			$page_id = wp_insert_post(
				[
					'comment_status' => 'close',
					'ping_status'    => 'close',
					'post_author'    => 1,
					'post_title'     => ucwords( str_replace( $replace, ' ', trim( $title_of_the_page ) ) ),
					'post_name'      => $title_of_the_page,
					'post_status'    => 'publish',
					'post_content'   => $content,
					'post_type'      => 'page',
					'post_parent'    => $parent_id,
				]
			);

		} else {
			$page_id = $objPage->ID;
		}

		return $page_id;
	}

	public static function send_attendee_ticket_email_on_order_status_change( $order_id ) {

		if ( ! $order_id ) {
			return;
		}

		global $wpdb;

		$order = wc_get_order( $order_id );

		$userId = 0;

		if ( is_user_logged_in() ) {
			$userId = get_current_user_id();
		}

		foreach ( $order->get_items() as $item_id => $item ) {

			// Get the product name
			$product_name = $item->get_name();
			$event_id     = ! is_null( $item->get_meta( 'event_id', true ) ) ? $item->get_meta( 'event_id', true ) : "";

			if ( ! empty( $event_id ) ) {
				$event_object = get_post( $event_id );
			} else {
				$event_object = get_page_by_title( $product_name, OBJECT, 'etn' );
			}

			if ( ! empty( $event_object->post_type ) && ( 'etn' == $event_object->post_type ) ) {

				$event_id = $event_object->ID;

				// ========================== Attendee related works start ========================= //
				$settings            = Helper::get_settings();
				$attendee_reg_enable = ! empty( $settings["attendee_registration"] ) ? true : false;

				if ( $attendee_reg_enable ) {
					// update attendee status and send ticket to email
					$event_location        = ! is_null( get_post_meta( $event_object->ID, 'etn_event_location', true ) ) ? get_post_meta( $event_object->ID, 'etn_event_location', true ) : "";
					$ticket_price          = ! is_null( get_post_meta( $event_object->ID, 'etn_ticket_price', true ) ) ? get_post_meta( $event_object->ID, 'etn_ticket_price', true ) : "";
					$start_date            = ! is_null( get_post_meta( $event_object->ID, 'etn_start_date', true ) ) ? get_post_meta( $event_object->ID, 'etn_start_date', true ) : "";
					$end_date              = ! is_null( get_post_meta( $event_object->ID, 'etn_end_date', true ) ) ? get_post_meta( $event_object->ID, 'etn_end_date', true ) : "";
					$start_time            = ! is_null( get_post_meta( $event_object->ID, 'etn_start_time', true ) ) ? get_post_meta( $event_object->ID, 'etn_start_time', true ) : "";
					$end_time              = ! is_null( get_post_meta( $event_object->ID, 'etn_end_time', true ) ) ? get_post_meta( $event_object->ID, 'etn_end_time', true ) : "";
					$update_key            = ! is_null( $item->get_meta( 'etn_status_update_key', true ) ) ? $item->get_meta( 'etn_status_update_key', true ) : "";
					$purchaser_email       = ! is_null( get_post_meta( $order_id, '_billing_email', true ) ) ? get_post_meta( $order_id, '_billing_email', true ) : "";
					$etn_ticket_variations = ! is_null( $item->get_meta( 'etn_ticket_variations', true ) ) ? $item->get_meta( 'etn_ticket_variations', true ) : [];

					$pdf_data = [
						'order_id'         => $order_id,
						'event_name'       => $product_name,
						'update_key'       => $update_key,
						'user_email'       => $purchaser_email,
						'event_location'   => $event_location,
						'etn_ticket_price' => $ticket_price,
						'etn_start_date'   => $start_date,
						'etn_end_date'     => $end_date,
						'etn_start_time'   => $start_time,
						'etn_end_time'     => $end_time,
					];

					self::mail_attendee_report( $pdf_data, false, false );
				}

				// ========================== Attendee related works end ========================= //
			}

		}

	}

	/**
	 * Input field escaping , sanitizing , validation
	 *
	 * @param array $request
	 * @param array $input_fields
	 *
	 * @return array
	 */
	public static function input_field_validation( $request, $input_fields ) {

		$response = [
			'status_code' => 1,
			'messages'    => [],
			'data'        => [],
		];

		if ( ! empty( $input_fields ) ) {
			$error_field = [];

			foreach ( $input_fields as $key => $value ) {

				if ( $value['required'] == true && empty( $request[ $value['name'] ] ) ) {
					$error_field[] = esc_html( ucfirst( str_replace( '_', ' ', $value['name'] ) ) . ' is empty', 'eventin' );
				}

			}

			if ( count( $error_field ) > 0 ) {
				$response = [
					'status_code' => 0,
					'messages'    => $error_field,
				];
			} else {

				$input_data = [];

				foreach ( $input_fields as $key => $value ) {
					$data                         = self::validate_param_data( $request, $value );
					$input_data[ $value['name'] ] = $data;
				}

				// pass sanitizing data
				$response = [
					'status_code' => 1,
					'messages'    => [],
					'data'        => $input_data,
				];
			}

		} else {
			$response = [
				'status_code' => 0,
				'messages'    => [
					'error' => esc_html__( 'Input field is empty', 'eventin' ),
				],
			];
		}

		return $response;
	}

	/**
	 * Sanitize and escaping data
	 *
	 * @param array $request
	 * @param array $input_fields
	 *
	 * @return mixed
	 */
	public static function validate_param_data( $request, $input_fields ) {
		$data = "";

		switch ( $input_fields['type'] ) {
			case "email":
				$data = sanitize_email( $request[ $input_fields['name'] ] );
				break;
			case "text":
				$data = sanitize_text_field( $request[ $input_fields['name'] ] );
				break;
			case "richeditor":
				$data = self::kses( $request[ $input_fields['name'] ] );
				break;
			case "number":
				$data = absint( $request[ $input_fields['name'] ] );
				break;
			default:
				break;
		}

		return $data;
	}

	/**
	 * Get All Events By Month of A Year
	 *
	 * @param [type] $month
	 * @param [type] $year
	 * @param array $params
	 *
	 * @return void
	 */
	public static function get_events_by_date( $month, $year, $display, $endDate, $startTime, $start_date = '', $end_date = '', $post_parent = '0' ) {

		if ( empty( $month ) || empty( $year ) ) {
			return;
		}

		$all_events = [];

		$args = [
			'post_type'   => 'etn',
			'numberposts' => - 1,
			'post_status' => 'publish',
			'fields'      => 'ids',
			'meta_query'  => array(
				array(
					'key'     => 'etn_start_date',
					'value'   => array( $start_date, $end_date ),
					'compare' => 'BETWEEN',
					'type'    => 'DATE',
				),
			),
		];

		if ( 'child' !== $post_parent || 'hide_both' == $post_parent ) {
			$parent_id           = $post_parent == 'hide_both' ? '0' : $post_parent;
			$args['post_parent'] = $parent_id;
		}
		$post_ids = get_posts( $args );

		if ( ( 'child' == $post_parent || 'hide_both' == $post_parent ) && ( is_array( $post_ids ) && count( $post_ids ) > 0 ) ) {
			// Delete all the Parent recurring event
			foreach ( $post_ids as $index => $post_id ) {
				$is_recurring_parent = Helper::get_child_events( $post_id );
				if ( $is_recurring_parent ) {
					unset( $post_ids[ $index ] );
				}
			}
		}

		foreach ( $post_ids as $post_id ) {
			$event_id              = $post_id;
			$event_cat             = wp_get_post_terms( $event_id, 'etn_category' );
			$cat_names             = wp_list_pluck( $event_cat, 'name' );
			$event                 = new \stdClass;
			$etn_ticket_variations = get_post_meta( $event_id, "etn_ticket_variations", true );

			$currency = '';

			if ( class_exists( 'woocommerce' ) && ! empty( $etn_ticket_variations ) ) {
				$currency = get_woocommerce_currency_symbol();
			} else if ( ! class_exists( 'woocommerce' ) && ! empty( $etn_ticket_variations ) ) {
				$currency = '$';
			}
			$min_price       = '';
			$max_price       = '';
			$variation_price = [];
			if ( ! empty( $etn_ticket_variations ) && is_array( $etn_ticket_variations ) ) {
				foreach ( $etn_ticket_variations as $index => $price ) {
					$variation_price[ $index ] = $price['etn_ticket_price'];
				}
				$min_price = min( $variation_price );
				$max_price = max( $variation_price );
			}

			if ( $min_price === $max_price ) {
				$price = $currency . $min_price;
			} else {
				$price = $currency . $min_price . "-" . $currency . $max_price;
			}
			if ( ! empty( $display ) ) {
				$event->display = $display;
			}

			$start_times = date_i18n( get_option( "time_format" ), strtotime( get_post_meta( $event_id, 'etn_start_time', true ) ) );
			$end_times   = date_i18n( get_option( "time_format" ), strtotime( get_post_meta( $event_id, 'etn_end_time', true ) ) );

			// time stamp
			$start_date   = get_post_meta( $event_id, 'etn_start_date', true );
			$end_date     = get_post_meta( $event_id, 'etn_end_date', true ) == "" ? $start_date : get_post_meta( $event_id, 'etn_end_date', true );
			$date_format  = Helper::get_option( "date_format" );
			$date_options = Helper::get_date_formats();

			$etn_start_date   = get_post_meta( $event_id, 'etn_start_date', true );
			$event_start_date = ! empty( $date_format ) ? date( $date_options[ $date_format ], strtotime( $etn_start_date ) ) : date( get_option( "date_format" ), strtotime( $etn_start_date ) );


			$start_time = ! empty( date( "H:i:s", strtotime( get_post_meta( $event_id, 'etn_start_time', true ) ) ) ) ? 'T' . date( "H:i:s", strtotime( get_post_meta( $event_id, 'etn_start_time', true ) ) ) : '12:00 00';
			$end_time   = ! empty( date( "H:i:s", strtotime( get_post_meta( $event_id, 'etn_end_time', true ) ) ) ) ? 'T' . date( "H:i:s", strtotime( get_post_meta( $event_id, 'etn_end_time', true ) ) ) : '12:00 00';
			if ( $start_date < $end_date ) {
				$start_date = $start_date;
				$end_date   = $end_date;
			} else {
				$start_date = $start_date . "" . $start_time;
				$end_date   = $end_date . "" . $end_time;
			}

			$event->className  = "has-event";
			$event->start_time = $start_times;
			$event->end_time   = $end_times;
			$event->end_time   = $end_times;
			$event->id         = $event_id;
			$event->title      = get_the_title( $event_id );
			$event->date       = get_post_meta( $event_id, 'etn_start_date', true );
			if ( $startTime ) {
				$event->start = $start_date;
			}
			$endDatePlusOne = date( 'Y-m-d', strtotime( $end_date . ' +1 day' ) );
			if ( $endDate ) {
				$event->end = $end_date;
			}

			$event->price           = $price;
			$event->description     = get_post_field( 'post_content', $event_id );
			$event->thumbnail       = get_the_post_thumbnail_url( $event_id );
			$event->category        = $cat_names;
			
			// Show location based on location type.
			$location_tax_array 	= array_column( wp_get_post_terms($event_id, 'etn_location', [ 'fields' => 'all' ] ), 'name' );
			$selected_etn_location  = implode(', ' , $location_tax_array);
			$location        		= get_post_meta($event_id, 'etn_event_location', true );
			$location_type          = get_post_meta($event_id, 'etn_event_location_type', true ); 
			$event->location        = 'new_location' === $location_type ? $selected_etn_location : $location;

			$event->url             = get_permalink( $event_id );
			$event->backgroundColor = get_post_meta( $event_id, 'etn_event_calendar_bg', true );

			$event->borderColor = get_post_meta( $event_id, 'etn_event_calendar_bg', true );
			$event->textColor   = get_post_meta( $event_id, 'etn_event_calendar_text_color', true );
			$event->dateFormat  = ! empty( $date_options[ $date_format ] ) ? $date_options[ $date_format ] : get_option( 'date_format' );
			$event->end_date    = get_post_meta( $event_id, 'etn_end_date', true );
			$all_events[]       = $event;
		}

		return $all_events;
	}

	public static function generate_unique_slug_from_ticket_title( $event_id, $event_ticket_variation_title ) {
		$ticket_title = $event_ticket_variation_title == "" ? esc_html__( "Default", "eventin" ) : $event_ticket_variation_title;

		return $event_id . "-" . sanitize_title_with_dashes( $ticket_title ) . "-" . substr( md5( time() ), 0, 5 );
	}

	/**
	 * returns list of all attendee
	 * returns single speaker if speaker id is provided
	 */
	public static function get_attendee( $id = null, $posts_per_page = - 1, $paged = 1 ) {
		try {
			if ( is_null( $id ) || ! is_numeric( $id ) ) {
				$args      = [
					'post_type'      => 'etn-attendee',
					'posts_per_page' => $posts_per_page,
					'paged'          => $paged,
				];
				$attendees = get_posts( $args );

				return $attendees;
			} else {
				// return single speaker
				$attendee = null;
				if ( 'etn-attendee' === get_post_type( $id ) ) {
					$attendee = get_post( $id );
				}

				return $attendee;
			}

		} catch ( \Exception $es ) {
			return [];
		}

	}

	/**
	 * calculate left ticket for individual variation ticket from total and sold quantity
	 *
	 * @param [array] $ticket_variation
	 *
	 * @return void
	 */
	public static function compute_left_tickets( $ticket_variation ) {
		$left_tickets = 0;

		if ( ! empty( $ticket_variation ) ) {
			$avaiilable_tickets = ! empty( $ticket_variation['etn_avaiilable_tickets'] ) ? absint( $ticket_variation['etn_avaiilable_tickets'] ) : 0;
			$sold_tickets       = ! empty( $ticket_variation['etn_sold_tickets'] ) ? absint( $ticket_variation['etn_sold_tickets'] ) : 0;
			$left_tickets       = $avaiilable_tickets - $sold_tickets;
		}

		return $left_tickets;
	}

	/**
	 * Ticket Form Widget For Single Events
	 *
	 * @param [type] $single_event_id
	 * @param string $class
	 *
	 * @return void
	 */
	public static function eventin_ticket_widget( $single_event_id, $class = "" ) {
		$data        = self::single_template_options( $single_event_id );
		$ticket_list = get_post_meta( $single_event_id, 'etn_ticket_variations', true );
		$unique_id   = md5( md5( microtime() ) );

		if ( is_array( $ticket_list ) && ! empty( $ticket_list ) ) {
			$event_options        = ! empty( $data['event_options'] ) ? $data['event_options'] : [];
			$etn_ticket_unlimited = ( isset( $data['etn_ticket_unlimited'] ) && $data['etn_ticket_unlimited'] == "no" ) ? true : false;
			$is_zoom_event        = get_post_meta( $single_event_id, 'etn_zoom_event', true );
			$event_title          = get_the_title( $single_event_id );
			$deadline             = $data['etn_deadline_value'];
			$reg_deadline_expired = false;

			if ( ! empty( $deadline ) ) {
				$date_options    = \Etn\Utils\Helper::get_date_formats();
				$etn_date_format = ( isset( $event_options["date_format"] ) && $event_options["date_format"] != "" ) ? $date_options[ $event_options["date_format"] ] : get_option( "date_format" );

				$deadline_new = $deadline;
				$deadline_arr = date_parse_from_format( $etn_date_format, $deadline );
				if ( is_array( $deadline_arr ) && count( $deadline_arr ) > 0 ) {
					$deadline_new = $deadline_arr['year'] . '-' . $deadline_arr['month'] . '-' . $deadline_arr['day'];
				}

				$etn_start_time         = get_post_meta( $single_event_id, 'etn_start_time', true );
				$event_expire_date_time = trim( $deadline_new . " " . $etn_start_time );

				$event_timezone = get_post_meta( $single_event_id, "event_timezone", true );
				if ( str_contains( $event_timezone, 'UTC+' ) || str_contains( $event_timezone, 'UTC-' ) ) {
					$time_cal = self::time_calculation( $event_timezone );
					$dt       = date_i18n( "Y-m-d H:i:s", strtotime( "$event_expire_date_time" ) );
					$now_dt   = date_i18n( "Y-m-d H:i:s", $time_cal );
				} else {
					date_default_timezone_set( $event_timezone );
					$dt     = date_i18n( "Y-m-d H:i:s", strtotime( "$event_expire_date_time $event_timezone" ) );
					$now_dt = date_i18n( "Y-m-d H:i:s" );
				}

				$dt_int     = strtotime( $dt );
				$now_dt_int = strtotime( $now_dt );

				if ( $now_dt_int > $dt_int ) {
					$reg_deadline_expired = true;
				}

			}

			$event_total_ticket = ! empty( get_post_meta( $single_event_id, "etn_total_avaiilable_tickets", true ) ) ? absint( get_post_meta( $single_event_id, "etn_total_avaiilable_tickets", true ) ) : 0;
			$event_sold_ticket  = ! empty( get_post_meta( $single_event_id, "etn_total_sold_tickets", true ) ) ? absint( get_post_meta( $single_event_id, "etn_total_sold_tickets", true ) ) : 0;
			$event_left_ticket  = $event_total_ticket - $event_sold_ticket;

			if ( file_exists( get_stylesheet_directory() . \Wpeventin::theme_templates_dir() . 'event/purchase-form/single-event-variable-ticket.php' ) ) {
				$purchase_form_widget = get_stylesheet_directory() . \Wpeventin::theme_templates_dir() . 'event/purchase-form/single-event-variable-ticket.php';
			} elseif ( file_exists( get_template_directory() . \Wpeventin::theme_templates_dir() . 'event/purchase-form/single-event-variable-ticket.php' ) ) {
				$purchase_form_widget = get_template_directory() . \Wpeventin::theme_templates_dir() . 'event/purchase-form/single-event-variable-ticket.php';
			} else {
				$purchase_form_widget = \Wpeventin::templates_dir() . 'event/purchase-form/single-event-variable-ticket.php';
			}

		} else {

			$etn_left_tickets     = ! empty( $data['etn_left_tickets'] ) ? $data['etn_left_tickets'] : 0;
			$etn_ticket_unlimited = ( isset( $data['etn_ticket_unlimited'] ) && $data['etn_ticket_unlimited'] == "no" ) ? true : false;
			$etn_ticket_price     = isset( $data['etn_ticket_price'] ) ? $data['etn_ticket_price'] : '';
			$ticket_qty           = get_post_meta( $single_event_id, "etn_sold_tickets", true );
			$total_sold_ticket    = isset( $ticket_qty ) ? intval( $ticket_qty ) : 0;
			$is_zoom_event        = get_post_meta( $single_event_id, 'etn_zoom_event', true );
			$event_options        = ! empty( $data['event_options'] ) ? $data['event_options'] : [];
			$event_title          = get_the_title( $single_event_id );
			$etn_min_ticket       = ! empty( get_post_meta( $single_event_id, 'etn_min_ticket', true ) ) ? get_post_meta( $single_event_id, 'etn_min_ticket', true ) : 1;
			$etn_max_ticket       = ! empty( get_post_meta( $single_event_id, 'etn_max_ticket', true ) ) ? get_post_meta( $single_event_id, 'etn_max_ticket', true ) : $etn_left_tickets;
			$etn_max_ticket       = min( $etn_left_tickets, $etn_max_ticket );

			if ( file_exists( get_stylesheet_directory() . \Wpeventin::theme_templates_dir() . 'event/purchase-form/event-ticket.php' ) ) {
				$purchase_form_widget = get_stylesheet_directory() . \Wpeventin::theme_templates_dir() . 'event/purchase-form/event-ticket.php';
			} elseif ( file_exists( get_template_directory() . \Wpeventin::theme_templates_dir() . 'event/purchase-form/event-ticket.php' ) ) {
				$purchase_form_widget = get_template_directory() . \Wpeventin::theme_templates_dir() . 'event/purchase-form/event-ticket.php';
			} else {
				$purchase_form_widget = \Wpeventin::templates_dir() . 'event/purchase-form/event-ticket.php';
			}

		}

		include $purchase_form_widget;
	}

	/**
	 * utc time calculation with event timezone
	 */
	public static function time_calculation( $event_timezone = '' ) {
		$utc_plus_minus = '+';
		if ( str_contains( $event_timezone, 'UTC-' ) ) {
			$utc_plus_minus = '-';
		}

		$utc_h_m = explode( $utc_plus_minus, $event_timezone )[1];

		$utc_h = $utc_h_m;
		$utc_m = 0;
		if ( str_contains( $utc_h_m, '.' ) ) {
			$utc_h_m_again = explode( '.', $utc_h_m );
			$utc_h         = $utc_h_m_again[0];
			$utc_m         = $utc_h_m_again[1];

			if ( $utc_m == '5' ) {
				$utc_m = 30;
			} else if ( $utc_m == '75' ) {
				$utc_m = 45;
			}
		}

		$utc_cal = $utc_h * 60 * 60;
		if ( ! empty( $utc_m ) ) {
			$utc_cal += $utc_m * 60;
		}

		if ( $utc_plus_minus == '+' ) {
			$time_cal = time() + $utc_cal;
		} else {
			$time_cal = time() - $utc_cal;
		}

		return $time_cal;
	}

	/**
	 * Ticket Form Widget For Recurring Events
	 *
	 * @param [type] $single_event_id
	 * @param string $class
	 *
	 * @return void
	 */
	public static function woocommerce_recurring_events_ticket_widget( $parent_event_id, $recurring_event_ids, $class = "" ) {
		do_action( 'etn_before_recurring_event_form_content', $parent_event_id );

		if ( is_array( $recurring_event_ids ) && ! empty( $recurring_event_ids ) ) {

			asort( $recurring_event_ids );
			$i = 0;

			$events_with_start_date = [];
			foreach ( $recurring_event_ids as $key => $single_event_id ) {
				if ( ! empty( get_post_meta( $single_event_id, 'etn_start_date', true ) ) ) {
					$temp                     = [];
					$temp['id']               = $single_event_id;
					$temp['date']             = get_post_meta( $single_event_id, 'etn_start_date', true );
					$events_with_start_date[] = $temp;
				}
			}

			// sort events with start date
			usort( $events_with_start_date, function ( $a, $b ) {
				if ( $a == $b ) {
					return 0;
				}

				return strtotime( $a['date'] ) - strtotime( $b['date'] );
			} );

			if ( is_array( $events_with_start_date ) && ! empty( $events_with_start_date ) ) {
				foreach ( $events_with_start_date as $single_event ) {
					$single_event_id = intval( $single_event['id'] );
					$data            = self::single_template_options( $single_event_id );
					$ticket_list     = get_post_meta( $single_event_id, 'etn_ticket_variations', true );
					$unique_id       = md5( md5( microtime() ) );

					if ( is_array( $ticket_list ) && ! empty( $ticket_list ) ) {
						$event_options        = ! empty( $data['event_options'] ) ? $data['event_options'] : [];
						$etn_ticket_unlimited = ( isset( $data['etn_ticket_unlimited'] ) && $data['etn_ticket_unlimited'] == "no" ) ? true : false;
						$is_zoom_event        = get_post_meta( $single_event_id, 'etn_zoom_event', true );
						$event_title          = get_the_title( $single_event_id );
						$deadline             = $data['etn_deadline_value'];
						$reg_deadline_expired = false;

						if ( ! empty( $deadline ) ) {
							$date_options    = \Etn\Utils\Helper::get_date_formats();
							$etn_date_format = ( isset( $event_options["date_format"] ) && $event_options["date_format"] != "" ) ? $date_options[ $event_options["date_format"] ] : get_option( "date_format" );

							$deadline_new = $deadline;
							$deadline_arr = date_parse_from_format( $etn_date_format, $deadline );
							if ( is_array( $deadline_arr ) && count( $deadline_arr ) > 0 ) {
								$deadline_new = $deadline_arr['year'] . '-' . $deadline_arr['month'] . '-' . $deadline_arr['day'];
							}

							$etn_start_time         = get_post_meta( $single_event_id, 'etn_start_time', true );
							$event_expire_date_time = trim( $deadline_new . " " . $etn_start_time );

							$event_timezone = get_post_meta( $single_event_id, "event_timezone", true );
							if ( str_contains( $event_timezone, 'UTC+' ) || str_contains( $event_timezone, 'UTC-' ) ) {
								$time_cal = self::time_calculation( $event_timezone );

								$dt     = date_i18n( "Y-m-d H:i:s", strtotime( "$event_expire_date_time" ) );
								$now_dt = date_i18n( "Y-m-d H:i:s", $time_cal );
							} else {
								date_default_timezone_set( $event_timezone );
								$dt     = date_i18n( "Y-m-d H:i:s", strtotime( "$event_expire_date_time $event_timezone" ) );
								$now_dt = date_i18n( "Y-m-d H:i:s" );
							}

							$dt_int     = strtotime( $dt );
							$now_dt_int = strtotime( $now_dt );

							if ( $now_dt_int > $dt_int ) {
								$reg_deadline_expired = true;
							}

						}

						$event_total_ticket = ! empty( get_post_meta( $single_event_id, "etn_total_avaiilable_tickets", true ) ) ? absint( get_post_meta( $single_event_id, "etn_total_avaiilable_tickets", true ) ) : 0;
						$event_sold_ticket  = ! empty( get_post_meta( $single_event_id, "etn_total_sold_tickets", true ) ) ? absint( get_post_meta( $single_event_id, "etn_total_sold_tickets", true ) ) : 0;
						$event_left_ticket  = $event_total_ticket - $event_sold_ticket;

						if ( file_exists( get_stylesheet_directory() . \Wpeventin::theme_templates_dir() . 'event/purchase-form/recurring-event-variable-ticket.php' ) ) {
							$purchase_form_widget = get_stylesheet_directory() . \Wpeventin::theme_templates_dir() . 'event/purchase-form/recurring-event-variable-ticket.php';
						} elseif ( file_exists( get_template_directory() . \Wpeventin::theme_templates_dir() . 'event/purchase-form/recurring-event-variable-ticket.php' ) ) {
							$purchase_form_widget = get_template_directory() . \Wpeventin::theme_templates_dir() . 'event/purchase-form/recurring-event-variable-ticket.php';
						} else {
							$purchase_form_widget = \Wpeventin::templates_dir() . 'event/purchase-form/recurring-event-variable-ticket.php';
						}

					} else {

						$etn_left_tickets     = ! empty( $data['etn_left_tickets'] ) ? $data['etn_left_tickets'] : 0;
						$etn_ticket_unlimited = ( isset( $data['etn_ticket_unlimited'] ) && $data['etn_ticket_unlimited'] == "no" ) ? true : false;
						$etn_ticket_price     = isset( $data['etn_ticket_price'] ) ? $data['etn_ticket_price'] : '';
						$ticket_qty           = get_post_meta( $single_event_id, "etn_sold_tickets", true );
						$total_sold_ticket    = isset( $ticket_qty ) ? intval( $ticket_qty ) : 0;
						$is_zoom_event        = get_post_meta( $single_event_id, 'etn_zoom_event', true );
						$event_options        = ! empty( $data['event_options'] ) ? $data['event_options'] : [];
						$event_title          = get_the_title( $single_event_id );
						$etn_min_ticket       = ! empty( get_post_meta( $single_event_id, 'etn_min_ticket', true ) ) ? get_post_meta( $single_event_id, 'etn_min_ticket', true ) : 1;
						$etn_max_ticket       = ! empty( get_post_meta( $single_event_id, 'etn_max_ticket', true ) ) ? get_post_meta( $single_event_id, 'etn_max_ticket', true ) : $etn_left_tickets;
						$etn_max_ticket       = min( $etn_left_tickets, $etn_max_ticket );

						if ( file_exists( get_stylesheet_directory() . \Wpeventin::theme_templates_dir() . 'event/purchase-form/recurring-event-ticket.php' ) ) {
							$purchase_form_widget = get_stylesheet_directory() . \Wpeventin::theme_templates_dir() . 'event/purchase-form/recurring-event-ticket.php';
						} elseif ( file_exists( get_template_directory() . \Wpeventin::theme_templates_dir() . 'event/purchase-form/recurring-event-ticket.php' ) ) {
							$purchase_form_widget = get_template_directory() . \Wpeventin::theme_templates_dir() . 'event/purchase-form/recurring-event-ticket.php';
						} else {
							$purchase_form_widget = \Wpeventin::templates_dir() . 'event/purchase-form/recurring-event-ticket.php';
						}

					}

					if ( file_exists( $purchase_form_widget ) ) {
						include $purchase_form_widget;
					}

					$i ++;
				}
			}

		}

		do_action( 'etn_after_recurring_event_form_content', $parent_event_id );

	}

	public static function convert_to_calender_date( $datetime ) {
		$time_string   = strtotime( $datetime );
		$date          = date_i18n( 'Ymd', $time_string );
		$time          = date( 'Hi', $time_string );
		$calendar_date = $date . "T" . $time . "00";

		return $calendar_date;
	}

	public static function content_to_html( $array_or_string ) {

		if ( is_string( $array_or_string ) ) {

			$array_or_string = sanitize_text_field( htmlentities( nl2br( $array_or_string ) ) );

		} elseif ( is_array( $array_or_string ) ) {

			foreach ( $array_or_string as $key => &$value ) {

				if ( is_array( $value ) ) {
					$value = self::content_to_html( $value );
				} else {
					$value = sanitize_text_field( htmlentities( nl2br( $value ) ) );
				}

			}

		}

		return $array_or_string;
	}

	public static function convert_to_calendar_title( $post_title ) {
		return str_replace( ' ', '+', $post_title );
	}

	/**
	 * check webinar plan is enabled for the user
	 */
	public static function is_webinar_user() {
		$webinar_enabled   = false;
		$user_settings_obj = json_decode( \Etn\Core\Zoom_Meeting\Api_Handlers::instance()->get_user_settings() );

		if ( is_object( $user_settings_obj ) && isset( $user_settings_obj->feature ) ) {
			$webinar_enabled = $user_settings_obj->feature->webinar;
		}

		return $webinar_enabled;
	}

	/**
	 * return settings set payment gateway like woocommerce, stripe etc.
	 */
	public static function retrieve_payment_gateway() {
		$settings     = \Etn\Core\Settings\Settings::instance()->get_settings_option();
		$payment_type = isset( $settings['etn_sells_engine_stripe'] ) ? $settings['etn_sells_engine_stripe'] : 'woocommerce';

		return $payment_type;
	}

	/**
	 * ticket variations structure and value updation
	 *
	 * @param [type] $event_id
	 * @param array $ticket_variations
	 * @param [type] $from_multivendor
	 *
	 * @return array
	 */
	public static function get_ticket_variations_info( $event_id = null, $ticket_variations = [], $from_multivendor = false ) {
		$etn_total_created_tickets = 0;

		foreach ( $ticket_variations as $key => &$value ) {
			// will optimize
			if ( ! empty( $value['etn_ticket_name'] ) || ! empty( $value['etn_ticket_price'] ) || ! empty( $value['etn_avaiilable_tickets'] ) ||
			     ! empty( $value['etn_sold_tickets'] ) ) {
				if ( empty( $value['etn_ticket_name'] ) ) {
					$value['etn_ticket_name'] = ETN_DEFAULT_TICKET_NAME;
				}

				if ( empty( $value['etn_ticket_price'] ) ) {
					$value['etn_ticket_price'] = 0;
				}

				if ( ! isset( $value['etn_ticket_slug'] ) ) {
					$value['etn_ticket_slug'] = "";
				}

				if ( $value['etn_ticket_slug'] == "" ) {
					$value['etn_ticket_slug'] = Helper::generate_unique_slug_from_ticket_title( $event_id, $value['etn_ticket_name'] );
				}

				$etn_avaiilable_tickets          = ! empty( absint( $value['etn_avaiilable_tickets'] ) ) ? absint( $value['etn_avaiilable_tickets'] ) : 100000;
				$value['etn_avaiilable_tickets'] = $etn_avaiilable_tickets;
				$etn_total_created_tickets       += $etn_avaiilable_tickets;

				$etn_min_ticket = ! empty( $value['etn_min_ticket'] ) ? absint( $value['etn_min_ticket'] ) : 1;
				$etn_max_ticket = ! empty( $value['etn_max_ticket'] ) ? absint( $value['etn_max_ticket'] ) : $etn_avaiilable_tickets;

				if ( $etn_min_ticket > $etn_avaiilable_tickets ) {
					$etn_min_ticket = 1;
				}

				if ( $etn_max_ticket > $etn_avaiilable_tickets ) {
					$etn_max_ticket = $etn_avaiilable_tickets;
				}

				if ( $etn_min_ticket > $etn_max_ticket ) {
					$swap           = $etn_min_ticket;
					$etn_min_ticket = $etn_max_ticket;
					$etn_max_ticket = $swap;
				}

				$value['etn_min_ticket'] = $etn_min_ticket;
				$value['etn_max_ticket'] = $etn_max_ticket;

			} else {
				if ( count( $ticket_variations ) > 1 ) {
					unset( $ticket_variations[ $key ] );
				}
			}
		}

		return [
			'ticket_variations'         => $ticket_variations,
			'etn_total_created_tickets' => $etn_total_created_tickets,
		];
	}

	/**
	 * Check conditions for ticket selling
	 */
	public static function check_sells_engine() {
		$settings                = \Etn\Core\Settings\Settings::instance()->get_settings_option();
		$sell_tickets            = ( ! empty( $settings['sell_tickets'] ) ? 'checked' : '' );
		$etn_sells_engine_stripe = ( ! empty( $settings['etn_sells_engine_stripe'] ) ? 'checked' : '' );

		if ( 'checked' == $etn_sells_engine_stripe && '' == $sell_tickets ) {
			$sells_engine = 'stripe';
		} elseif ( $sell_tickets == 'checked' ) {
			$sells_engine = 'woocommerce';
		} else {
			$sells_engine = '';
		}

		return $sells_engine;
	}

	/**
	 * Change default date format
	 */
	public static function etn_date( $get_date ) {
		$etn_date = '';
		if ( '' !== $get_date ) {
			$date_format  = Helper::get_option( "date_format" );
			$date_options = Helper::get_date_formats();
			date_default_timezone_set( 'UTC' );
			$new_date = str_replace( '/', '-', $get_date );
			$etn_date = ! empty( $date_format ) ? date_i18n( $date_options[ $date_format ], strtotime( $new_date ) ) : date_i18n( get_option( "date_format" ), strtotime( $new_date ) );
		}

		return $etn_date;
	}

	// display event date
	public static function etn_display_date( $post_id = null, $show_start_date = 'yes', $show_end_date = 'no' ) {
		$start_date     = get_post_meta( $post_id, 'etn_start_date', true );
		$end_date       = get_post_meta( $post_id, 'etn_end_date', true );
		$etn_start_date = Helper::etn_date( $start_date );
		$etn_end_date   = Helper::etn_date( $end_date );

		if ( ! empty( $etn_start_date ) && $show_start_date == 'yes' ) {
			?>
            <span>
				<i class="etn-icon etn-calendar"></i>
                <?php echo esc_html( $etn_start_date ) ?>
            </span>
			<?php
		}
		if ( ( ! empty( $etn_end_date ) && $etn_start_date != $etn_end_date ) && $show_end_date == 'yes' ) {
			?>
            <span>
                <span><?php echo esc_html__( 'To', 'eventin' ) ?></span>
                <?php echo esc_html( $etn_end_date ) ?>
            </span>
			<?php
		}
	}

	/**
	 * Get Attendees AN Event
	 *
	 * @param [type] $event_id
	 * @param integer $posts_per_page
	 * @param integer $paged
	 *
	 * @return void
	 */
	public static function get_attendees_by_event( $event_id, $posts_per_page = - 1, $paged = 1 ) {

		if ( empty( $event_id ) || ! is_numeric( $event_id ) ) {
			return [];
		}
 
        global $wpdb;
        $query = "SELECT * FROM {$wpdb->prefix}postmeta WHERE meta_key='etn_event_id' AND meta_value=%d";
        if( $posts_per_page !== -1 ){
            $start  = ($paged - 1) * $posts_per_page;
            $total    = $posts_per_page;
            $query .= " LIMIT {$start},{$total}";
        }
        $event_attendees    = $wpdb->get_results( $wpdb->prepare( $query, $event_id ) );
        
        foreach( $event_attendees as $key => $attendee ){
            if( ( 'etn-attendee' !== get_post_type($attendee->post_id) )
            || ('etn-attendee' == get_post_type($attendee->post_id) && get_post_status($attendee->post_id) !== "publish") ){
                unset( $event_attendees[$key] );
            }

        }
 

		return $event_attendees;
	}

	/**
	 * Get Total Attendee Row Count
	 *
	 * @param [type] $event_id
	 *
	 * @return void
	 * @since 3.3.5
	 */
	public static function get_attendee_count( $event_id = null ) {
		if ( is_null( $event_id ) || ! is_numeric( $event_id ) ) {
			return wp_count_posts( 'etn-attendee' )->publish;
		} else {
			$attendees = self::get_attendees_by_event( $event_id );

			return count( $attendees );
		}
	}

	/**
	 * recurring tag add when available child event
	 */
	public static function event_recurring_status( $value = null ) {
		if ( ! empty( $value ) ) {
			if ( ( ! empty( $value->etn_recurring ) && true == $value->etn_recurring ) ) {
				?>
                <span class="more-event-tag">
                    <svg width="13" height="13" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
                        <path d="M11 6C11 8.76 8.76 11 6 11C3.24 11 1.555 8.22 1.555 8.22M1.555 8.22H3.815M1.555 8.22V10.72M1 6C1 3.24 3.22 1 6 1C9.335 1 11 3.78 11 3.78M11 3.78V1.28M11 3.78H8.78"
                              stroke="white" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round"/>
                    </svg>
                    <?php echo esc_html_e( 'More Events', 'eventin' ) ?>
                </span>
				<?php
			}
		}
	}

	/**
	 * Get Orders By Event Id
	 *
	 * @param [type] $product_id
	 *
	 * @return void
	 */
	public static function get_orders_ids_by_event_id( $event_id ) {
		global $wpdb;

		// Define HERE the orders status to include in  <==  <==  <==  <==  <==  <==  <==
		$orders_statuses = "'wc-completed', 'wc-processing', 'wc-on-hold'";

		# Get All defined statuses Orders IDs for a defined product ID (or variation ID)
		return $wpdb->get_col(
			"SELECT DISTINCT woi.order_id
                FROM {$wpdb->prefix}woocommerce_order_itemmeta as woim, 
                    {$wpdb->prefix}woocommerce_order_items as woi, 
                    {$wpdb->prefix}posts as p
                WHERE woi.order_item_id = woim.order_item_id
                AND woi.order_id = p.ID
                AND p.post_status IN ( $orders_statuses )
                AND woim.meta_key IN ( '_product_id', '_variation_id', 'event_id' )
                AND woim.meta_value LIKE '$event_id'
                ORDER BY woi.order_item_id DESC"
		);
	}

	/**
	 * Show 404 Page From Theme
	 *
	 * @return void
	 */
	public static function show_404() {
		global $wp_query;
		$wp_query->set_404();
		status_header( 404 );
		get_template_part( 404 );
		exit();
	}

	/**
	 * Convert reservation form email template tags
	 * @param [string] $content
	 * @param [string] $invoice
	 * @return string
	 */
	static function filter_template_tags($content, $event_name ){

		// Get custom logo
		$site_log_id = get_theme_mod( 'custom_logo' );
		$site_logo = wp_get_attachment_image( $site_log_id , 'medium' );

		//List of template tags
		$etn_tag_arr = [
			'{site_name}',
			'{site_link}',
			'{site_logo}',
			'{event_title}',
		];

		// Replace template tags with data 
		$etn_value_arr = [
			get_bloginfo( 'name' ),
			get_option( 'home' ),
			$site_logo,
			$event_name
		];

		return str_replace( $etn_tag_arr, $etn_value_arr , $content );
	}
}