Your IP : 3.139.236.119


Current Path : /home/church/www/blackfounderssummit.com/wp-content/plugins/wp-event-solution/
Upload File :
Current File : /home/church/www/blackfounderssummit.com/wp-content/plugins/wp-event-solution/bootstrap.php

<?php

namespace Etn;

use Etn\Utils\Helper;

defined( 'ABSPATH' ) || exit;

require_once ABSPATH . 'wp-admin/includes/plugin.php';

/**
 * Plugin final Class.
 * Handles dynamically loading classes only when needed. CheFck Elementor Plugin.
 *
 * @since 1.0.0
 */
final class Bootstrap {

	private static $instance;
	private $event;
	private $speaker;
	private $schedule;
	private $attendee;
	private $has_pro;

	/**
	 * __construct function
	 *
	 * @since 1.0.0
	 */
	public function __construct() {
		// load autoload method.
		Autoloader::run();
	}

	/**
	 * Public function name.
	 * set for plugin name
	 *
	 * @since 1.0.0
	 */
	public function name() {
		return __( 'WP Event Solution', 'eventin' );
	}

	/**
	 * Public function init.
	 * call function for all
	 *
	 * @since 1.0.0
	 */
	public function init() {

		$this->create_table();

		include_once ABSPATH . 'wp-admin/includes/plugin.php';

		// handle woocommerce notice depending on settings.
		$this->handle_woo_dependency();

		$this->has_pro = defined( 'ETN_PRO_FILES_LOADED' );

		// handle buy-pro notice.
		$this->handle_buy_pro_module();

		// Do all migrations.
		Core\Migration\Migration::instance()->init();

		// check permission for manage user.
		add_action( 'after_setup_theme', array( $this, 'initialize_settings_dependent_cpt_modules' ), 11 );

		// Plugin to redirect when active the plugin
		add_action( 'after_setup_theme', [ $this, 'etn_activation_redirect' ], 99 );

		// register all styles and scripts.
		add_action( 'admin_enqueue_scripts', array( $this, 'js_css_admin' ) );
		add_action( 'wp_enqueue_scripts', array( $this, 'js_css_public' ) );
		add_action( 'elementor/frontend/before_enqueue_scripts', array( $this, 'elementor_js' ) );

		// archive search filter.
		add_filter( 'pre_get_posts', '\Etn\Utils\Helper::event_etn_search_filter', 999999 );
		add_action( 'wp_ajax_etn_event_ajax_get_data', '\Etn\Utils\Helper::etn_event_ajax_get_data' );
		add_action( 'wp_ajax_nopriv_etn_event_ajax_get_data', '\Etn\Utils\Helper::etn_event_ajax_get_data' );

		// archive pagination filter.
		add_filter( 'pre_get_posts', '\Etn\Utils\Helper::etn_event_archive_pagination_per_page' );

		// Initialize plugin settings module.
		Core\Settings\Settings::instance()->init( $this->name(), \Wpeventin::version() );

		// fire up pro settings
		if( class_exists( 'Wpeventin_Pro' )){ 
			if ( \Etn\Core\Addons\Helper::instance()->pro_version_checking( "3.3.32" ) ) {
				Core\Settings\Pro_Settings::instance()->init();
			}
		} else {
			Core\Settings\Pro_Settings::instance()->init();
		}

		// Initialize woocommerce module.
		Core\Woocommerce\Base::instance()->init();

		// initialize niche shortcode.
		Core\Shortcodes\Hooks::instance()->init();

		// initialize elementor widget.
		Widgets\Manifest::instance()->init();

		// call event-metabox hooks.
		if( class_exists( 'Wpeventin_Pro' )){ 
			if ( \Etn\Core\Addons\Helper::instance()->pro_version_checking( "3.3.32" ) ) {
				Core\Metaboxs\Pro_metabox::instance()->init();
			}
		} else {
			Core\Metaboxs\Pro_metabox::instance()->init();
		}

		// make admin menu open if custom taxonomy is selected.
		add_action( 'parent_file', array( $this, 'keep_taxonomy_menu_open' ) );

		// add mini-cart to header.
		add_action( 'wp_head', array( $this, 'etn_custom_inline_css' ) );

		// seat plan
		if ( \Etn\Core\Addons\Helper::instance()->check_active_module( "seat_map" ) ) {
			\Etn\Core\Modules\Seat_Plan\Seat_Plan::instance()->init();
		}

		// register gutenberg blocks.
		if ( file_exists( \Wpeventin::plugin_dir() . 'core/guten-block/inc/init.php' ) ) {
			include_once \Wpeventin::plugin_dir() . 'core/guten-block/inc/init.php';
		}

		$payment_gateway = Helper::retrieve_payment_gateway();
		if ( $payment_gateway == 'woocommerce' ) {
			if ( file_exists( \Wpeventin::plugin_dir() . 'core/woocommerce/etn-product-data-store-cpt.php' ) ) {
				include_once \Wpeventin::plugin_dir() . 'core/woocommerce/etn-product-data-store-cpt.php';
			}

			if ( file_exists( \Wpeventin::plugin_dir() . '/core/woocommerce/etn-order-item-product.php' ) ) {
				include_once \Wpeventin::plugin_dir() . '/core/woocommerce/etn-order-item-product.php';
			}
		}

		// register wpml functions.
		if ( class_exists( 'SitePress' ) && function_exists( 'icl_object_id' ) && file_exists( \Wpeventin::plugin_dir() . 'core/wpml/init.php' ) ) {
			include_once \Wpeventin::plugin_dir() . 'core/wpml/init.php';
		}

		// Bricks theme compatibility
		$theme = wp_get_theme(); // gets the current theme
		if ( ! empty( $theme ) && ( 'Bricks' == $theme->name || 'Bricks' == $theme->parent_theme ) ) {
			add_filter( 'language_attributes', [ $this, 'add_class_in_html_bricks' ], 10, 2 );

		}

		// Include functions file.
		include_once \Wpeventin::plugin_dir() . 'utils/functions.php';

	}

	public function add_class_in_html_bricks( $output, $doctype ) {
		if ( 'html' !== $doctype ) {
			return $output;
		}
		$output .= ' class="no-js no-svg bricks_parent"';

		return $output;
	}

	/**
	 * redirect to setup wizard when active pluginn
	 *
	 */
	public function etn_activation_redirect() {
		if ( ( ! get_option( 'etn_wizard' ) ) ) {
			update_option( 'etn_wizard', 'active' );
			wp_redirect( admin_url( 'admin.php?page=etn-wizard' ) );
			exit;
		}
	}

	/**
	 * Add wizard submenu
	 *
	 */
	public function add_wizard_menu() {

		// Add settings menu if user has specific access
		if ( current_user_can( 'manage_etn_settings' ) && current_user_can( 'manage_options' ) ) {
			add_submenu_page(
				'',
				esc_html__( 'Wizard', 'eventin' ),
				esc_html__( 'Wizard', 'eventin' ),
				'manage_options',
				'etn-wizard',
				[ $this, 'etn_wizard_page' ],
				11
			);
		}

	}


	/**
	 * Settings Markup Page
	 *
	 * @return void
	 */
	public function etn_wizard_page() {
		?>
        <div class="etn-wizard-wrapper" id="etn-wizard-wrapper"></div>
		<?php
	}


	/**
	 * Add Shortcode Sub-menu
	 *
	 * @return void
	 * @since 2.6.1
	 *
	 */
	public function add_shortcode_menu() {

		// Add settings menu if user has specific access
		if ( current_user_can( 'manage_etn_settings' ) && current_user_can( 'manage_options' ) ) {

			add_submenu_page(
				'etn-events-manager',
				esc_html__( 'Shortcodes', 'eventin' ),
				esc_html__( 'Shortcodes', 'eventin' ),
				'manage_options',
				'etn-event-shortcode',
				[ $this, 'etn_shortcode_page' ],
				10
			);
		}
	}

	/**
	 * Settings Markup Page
	 *
	 * @return void
	 */
	public function etn_shortcode_page() {
		include_once( \Wpeventin::plugin_dir() . "templates/layout/header.php" );

		$shortcodeView = \Wpeventin::plugin_dir() . "core/shortcodes/views/shortcode-list-menu.php";
		if ( file_exists( $shortcodeView ) ) {
			include $shortcodeView;
		}
	}

	/**
	 * Add addons Sub-menu
	 *
	 * @return void
	 * @since 2.6.1
	 *
	 */

	public function add_addons_menu() {

		// Add settings menu if user has specific access
		if ( current_user_can( 'manage_etn_settings' ) && current_user_can( 'manage_options' ) ) {

			add_submenu_page(
				'etn-events-manager',
				esc_html__( 'Add-ons', 'eventin' ),
				esc_html__( 'Add-ons', 'eventin' ),
				'manage_options',
				'etn_addons',
				[ $this, 'etn_addons_page' ],
				13
			);
		}
	}

	/**
	 * Settings Addons Page
	 *
	 * @return void
	 */
	public function etn_addons_page() {
		include_once( \Wpeventin::plugin_dir() . "templates/layout/header.php" );

		$addonsView = \Wpeventin::plugin_dir() . "core/addons/addons.php";
		if ( file_exists( $addonsView ) ) {
			include $addonsView;
		}
	}

	/**
	 * Add Settings Sub-menu
	 *
	 * @return void
	 * @since 1.0.1
	 *
	 */
	public function add_setting_menu() {

		// Add settings menu if user has specific access
		if ( current_user_can( 'manage_etn_settings' ) && current_user_can( 'manage_options' ) ) {

			add_submenu_page(
				'etn-events-manager',
				esc_html__( 'Settings', 'eventin' ),
				esc_html__( 'Settings', 'eventin' ),
				'manage_options',
				'etn-event-settings',
				[ $this, 'etn_settings_page' ],
				10
			);
		}
	}

	/**
	 * Settings Markup Page
	 *
	 * @return void
	 */
	public function etn_settings_page() {
		$settings_file = \Wpeventin::plugin_dir() . "core/settings/views/etn-settings.php";
		if ( file_exists( $settings_file ) ) {
			include $settings_file;
		}
	}


	/**
	 * Initialize some cpt modules like attendee, zoom, schedules, speakers
	 *
	 * @return void
	 */
	public function initialize_settings_dependent_cpt_modules() {

		// add parent menu first so other menu's can be added inside it.
		add_action( 'admin_menu', array( $this, 'register_admin_menu' ), 98 );

		add_action( 'admin_menu', [ $this, 'add_setting_menu' ], 99 );
		add_action( 'admin_menu', [ $this, 'add_shortcode_menu' ], 100 );
		add_action( 'admin_menu', [ $this, 'add_wizard_menu' ], 101 );
		add_action( 'admin_menu', [ $this, 'add_addons_menu' ], 102 );


		// Initialize event module.
		Core\Event\Hooks::instance()->init();
		// recurring event.
		Core\Recurring_Event\Hooks::instance()->init();

		// initialize event ticket registration module.
		Core\Event\Registration::instance()->init();

		// Initialize attendee information-update module.
		Core\Attendee\InfoUpdate::instance()->init();

		// Initialize schedule module.
		Core\Schedule\Hooks::instance()->init();

		// Initialize speaker module.
		Core\Speaker\Hooks::instance()->init();
		// Initialize attendee module.
		Core\Attendee\Hooks::instance()->init();
		Core\Attendee\Attendee_List::instance()->init();

		// initialize zoom module.
		Core\Zoom_Meeting\Hooks::instance()->init();

		// Initialize Admin Hooks.
		Core\Admin\Hooks::instance()->init();
	}

	/**
	 * Handle woocommerce admin notice depending on settings
	 *
	 * @return void
	 */
	public function handle_woo_dependency() {

		$eventin_global_settings = \Etn\Utils\Helper::get_settings();
		$sell_tickets            = ! empty( $eventin_global_settings['sell_tickets'] ) ? true : false;

		if ( $sell_tickets && ! is_plugin_active( 'woocommerce/woocommerce.php' ) ) {
			add_action( 'admin_head', array( $this, 'admin_notice_wc_not_active' ) );

			return;
		}
	}

	/**
	 * Show buy-pro menu if pro plugin not active
	 *
	 * @return void
	 */
	public function handle_buy_pro_module() {

		/**
		 * Show banner (codename: jhanda)
		 */
		$filter_string = 'eventin,eventin-free-only';

		if ( $this->has_pro ) {

			$filter_string .= ',eventin-pro';
			$filter_string = str_replace( ',eventin-free-only', '', $filter_string );

		}
		\Wpmet\Libs\Banner::instance('eventin')
			// ->is_test(true)
			->set_filter(ltrim($filter_string, ','))
			->set_api_url('https://demo.themewinter.com/public/jhanda')
			->set_plugin_screens('edit-etn')
			->set_plugin_screens('eventin_page_etn_sales_report')
			->set_plugin_screens('edit-etn-attendee')
  			->set_plugin_screens('eventin_page_eventin_get_help')
 			->call();
		// show get-help and upgrade-to-premium menu.
		$this->handle_get_help_and_upgrade_menu();
	}

	/**
	 * Show menu for get-help
	 * Show menu for upgrade-te-premium if pro version not active
	 *
	 * @return void
	 */
	public function handle_get_help_and_upgrade_menu() {

		/**
		 * Show go Premium menu
		 */
		\Wpmet\Libs\Pro_Awareness::instance( 'eventin' )
			->set_parent_menu_slug( 'etn-events-manager' )
			->set_plugin_file( 'wp-event-solution/eventin.php' )
			->set_pro_link( $this->has_pro ? '' : 'https://themewinter.com/eventin/' )
			->set_default_grid_thumbnail( \Wpeventin::plugin_url() . '/utils/pro-awareness/assets/document.png' )
			->set_default_grid_link( 'https://support.themewinter.com/docs/plugins/docs-category/eventin/' )
			->set_default_grid_desc( esc_html__( 'Learn More', 'eventin' ) )
			->set_page_grid(
				array(
					'url'         => 'https://themewinter.com/support/',
					'title'       => esc_html__( 'Email Support', 'eventin' ),
					'thumbnail'   => \Wpeventin::plugin_url() . '/utils/pro-awareness/assets/envelope.png',
					'description' => esc_html__( 'Learn More', 'eventin' ),
				)
			)
			->set_page_grid(
				array(
					'url'         => 'https://themewinter.com/',
					'title'       => esc_html__( 'Live Chat', 'eventin' ),
					'thumbnail'   => \Wpeventin::plugin_url() . '/utils/pro-awareness/assets/chat.png',
					'description' => esc_html__( 'Learn More', 'eventin' ),
				)
			)
			->set_page_grid(
				array(
					'url'         => 'https://www.youtube.com/watch?v=FSC-jtN9xgg&list=PLW54c-mt4ObDwu0GWjJIoH0aP1hQHyKj7',
					'title'       => esc_html__( 'Video Tutorials', 'eventin' ),
					'thumbnail'   => \Wpeventin::plugin_url() . '/utils/pro-awareness/assets/video.png',
					'description' => esc_html__( 'Learn More', 'eventin' ),
				)
			)
			->set_plugin_row_meta( 'Documentation', 'https://support.themewinter.com/docs/plugins/docs-category/eventin/', array( 'target' => '_blank' ) )
			->set_plugin_row_meta( 'Facebook Community', 'https://www.facebook.com/groups/themewinter', array( 'target' => '_blank' ) )
			->set_plugin_action_link( 'Settings', admin_url() . 'admin.php?page=etn-event-settings' )
			->set_plugin_action_link(
				( $this->has_pro ? '' : 'Go Premium' ),
				'https://themewinter.com/eventin/',
				array(
					'target' => '_blank',
					'style'  => 'color: #FCB214; font-weight: bold;',
				)
			)
			->set_plugin_row_meta( 'Rate the plugin ★★★★★', 'https://wordpress.org/support/plugin/wp-event-solution/reviews/#new-post', array( 'target' => '_blank' ) )
			->call();
	}

	/**
	 * Show notice if woocommerce not active
	 */
	public function admin_notice_pro_not_active() {

		if ( isset( $_GET['activate'] ) ) {
			unset( $_GET['activate'] );
		}
		$btn = array(
			'default_class' => 'button',
			'class'         => 'button-primary ',
		);
		if ( file_exists( WP_PLUGIN_DIR . '/eventin-pro/eventin-pro.php' ) ) {
			$btn['text'] = esc_html__( 'Activate Eventin Pro', 'eventin' );
			$btn['url']  = wp_nonce_url( 'plugins.php?action=activate&plugin=eventin-pro/eventin-pro.php&plugin_status=all&paged=1', 'activate-plugin_eventin-pro/eventin-pro.php' );
		} else {
			$btn['text'] = esc_html__( 'Buy Eventin Pro', 'eventin' );
			$btn['url']  = esc_url( $this->get_pro_link() );
		}

		\Oxaim\Libs\Notice::instance( 'eventin', 'buy-eventin-pro' )
		->set_class( 'error' )
		->set_dismiss( 'global', ( 3600 * 24 * 30 ) )
		->set_message( sprintf( esc_html__( 'Get Eventin Pro for more exciting features.', 'eventin' ) ) )
		->set_button( $btn )
		->call();
	}

	/**
	 * Open taxonomy inside eventin
	 *
	 * @param string $parent_file Parent File.
	 *
	 * @return string
	 */
	public function keep_taxonomy_menu_open( $parent_file ) {
		global $current_screen;
		$taxonomy            = $current_screen->taxonomy;
		$eligible_taxonomies = array( 'etn_category', 'etn_tags', 'etn_speaker_category', 'etn_location' );

		if ( in_array( $taxonomy, $eligible_taxonomies ) ) {
			$parent_file = 'etn-events-manager';
		}

		return $parent_file;
	}

	/**
	 * Show notice if woocommerce not active
	 */
	public function admin_notice_wc_not_active() {

		if ( isset( $_GET['activate'] ) ) {
			unset( $_GET['activate'] );
		}
		$btn = array(
			'default_class' => 'button',
			'class'         => 'button-primary ',
		);
		if ( file_exists( WP_PLUGIN_DIR . '/woocommerce/woocommerce.php' ) ) {
			$btn['text'] = esc_html__( 'Activate WooCommerce', 'eventin' );
			$btn['url']  = wp_nonce_url( 'plugins.php?action=activate&plugin=woocommerce/woocommerce.php&plugin_status=all&paged=1', 'activate-plugin_woocommerce/woocommerce.php' );
		} else {
			$btn['text'] = esc_html__( 'Install WooCommerce', 'eventin' );
			$btn['url']  = wp_nonce_url( self_admin_url( 'update.php?action=install-plugin&plugin=woocommerce' ), 'install-plugin_woocommerce' );
		}

		\Oxaim\Libs\Notice::instance( 'eventin', 'unsupported-woocommerce-version' )
		->set_class( 'error' )
		->set_dismiss( 'global', ( 3600 * 24 * 30 ) )
		->set_message( sprintf( esc_html__( 'Eventin requires WooCommerce to get all features, which is currently NOT RUNNING.', 'eventin' ) ) )
		->set_button( $btn )
		->call();
	}

	/**
	 * Public function package_type.
	 * set for plugin package type
	 *
	 * @since 1.0.0
	 */
	public function package_type() {
		return 'free';
	}

	/**
	 * Plugin Text Domain
	 *
	 * @return string
	 */
	public function text_domain() {
		return 'eventin';
	}

	/**
	 * Public function js_css_public.
	 * Include public function
	 */
	public function js_css_public() {

		if ( is_rtl() ) {
			wp_enqueue_style( 'etn-rtl', \Wpeventin::assets_url() . 'css/rtl.css', array(), \Wpeventin::version() );
		}

		wp_enqueue_style( 'etn-icon', \Wpeventin::assets_url() . 'css/etn-icon.css', array(), '5.0', 'all' );
		wp_register_style( 'etn-app-index', \Wpeventin::assets_url() . 'css/fullcalendar.min.css', array(), \Wpeventin::version(), 'all' );
		wp_enqueue_style( 'etn-public-css', \Wpeventin::assets_url() . 'css/event-manager-public.css', array(), \Wpeventin::version(), 'all' );

		wp_register_style( 'etn-ticket-markup', \Wpeventin::assets_url() . 'css/ticket-markup.css', array(), \Wpeventin::version(), 'all' );

		// Certificate, Ticket Generation, Thankyou page
		wp_register_script( 'etn-pdf-gen', \Wpeventin::assets_url() . 'js/jspdf.min.js', array( 'jquery' ), '4.0.10', false );
		wp_register_script( 'etn-html-2-canvas', \Wpeventin::assets_url() . 'js/html2canvas.min.js', array( 'jquery' ), '4.0.10', false );
		wp_register_script( 'etn-dom-purify-pdf', \Wpeventin::assets_url() . 'js/purify.min.js', array( 'jquery' ), '4.0.10', false );
		wp_register_script( 'html-to-image', \Wpeventin::assets_url() . 'js/html-to-image.js', array( 'jquery' ), \Wpeventin::version(), false );


		wp_enqueue_script( 'etn-public', \Wpeventin::assets_url() . 'js/event-manager-public.js', array( 'jquery' ), \Wpeventin::version(), true );
		wp_register_script( 'etn-app-index', \Wpeventin::plugin_url() . 'build/index-calendar.js', array( 'jquery', 'wp-element' ), \Wpeventin::version(), true );

		// localize data.
		$translated_data                       = array();
		$translated_data['ajax_url']           = admin_url( 'admin-ajax.php' );
		$translated_data['site_url']           = site_url();
		$translated_data['evnetin_pro_active'] = ( class_exists( 'Wpeventin_Pro' ) ) ? true : false;
		$translated_data['locale_name']        = strtolower( str_replace( '_', '-', get_locale() ) );
		$translated_data['start_of_week']      = get_option( 'start_of_week' );
		$translated_data['expired']            = esc_html__( 'Expired', 'eventin' );
		$translated_data['author_id']          = get_current_user_id();

		$translated_data['scanner_common_msg']  = esc_html__( 'Something went wrong! Please try again.' );
		$ticket_scanner_link                    = admin_url( '/edit.php?post_type=etn-attendee' );
		$translated_data['ticket_scanner_link'] = $ticket_scanner_link;


		$attendee_form_validation_msg = array();

		$email_error_msg            = array();
		$email_error_msg['invalid'] = esc_html__( 'Email is not valid', 'eventin' );
		$email_error_msg['empty']   = esc_html__( 'Please fill the field', 'eventin' );

		$tel_error_msg                = array();
		$tel_error_msg['empty']       = esc_html__( 'Please fill the field', 'eventin' );
		$tel_error_msg['invalid']     = esc_html__( 'Invalid phone number', 'eventin' );
		$tel_error_msg['only_number'] = esc_html__( 'Only number allowed', 'eventin' );

		$attendee_form_validation_msg['email']           = $email_error_msg;
		$attendee_form_validation_msg['tel']             = $tel_error_msg;
		$attendee_form_validation_msg['text']            = esc_html__( 'Please fill the field', 'eventin' );
		$attendee_form_validation_msg['number']          = esc_html__( 'Please input a number', 'eventin' );
		$attendee_form_validation_msg['date']            = esc_html__( 'Please fill the field', 'eventin' );
		$attendee_form_validation_msg['radio']           = esc_html__( 'Please check the field', 'eventin' );
		$translated_data['attendee_form_validation_msg'] = $attendee_form_validation_msg;
		$translated_data['post_id']						 = get_the_ID();

		wp_localize_script( 'etn-public', 'localized_data_obj', $translated_data );

	}

	/**
	 * Enqueue Elementor Assets
	 *
	 * @return void
	 */
	public function elementor_js() {
		wp_enqueue_script( 'etn-elementor-inputs', \Wpeventin::assets_url() . 'js/elementor.js', array( 'elementor-frontend' ), \Wpeventin::version(), true );
		wp_enqueue_script( 'etn-app-index' );
	}

	/**
	 * Enqueue JS CSS
	 *
	 * @return void
	 */
	public function js_css_admin() {

		// get screen id.
		$screen    = get_current_screen();
		$screen_id = $screen->id;

		$allowed_screen_ids = array(
			'post',
			'page',
			'etn',
			'widgets',
			'edit-etn',
			'etn-attendee',
			'edit-etn-attendee',
			'edit-etn_category',
			'edit-etn_tags',
			'etn-schedule',
			'edit-etn-schedule',
			'edit-etn_speaker_category',
			'etn-speaker',
			'edit-etn-speaker',
			'etn-zoom-meeting',
			'edit-etn-zoom-meeting',
			'eventin_page_etn-event-settings',
			'eventin_page_etn_sales_report',
			'eventin_page_eventin_get_help',
			'eventin_page_etn-license',
			'eventin_page_etn-event-shortcode',
			'admin_page_etn-wizard',
			'edit-etn_location',
			'eventin_page_etn_stripe_orders_report',
			'eventin_page_etn_addons',
			'buddyboss_page_bp-integrations',
			'eventin_page_etn_rsvp_invitation',
			'eventin_page_etn_fb_import'
		);


		if ( in_array( $screen_id, array("woocommerce_page_wc-orders") ) ) {
			wp_enqueue_style( 'etn-common', \Wpeventin::assets_url() . 'css/event-manager-admin.css', array(), \Wpeventin::version(), 'all' );
		}

		if ( in_array( $screen_id, $allowed_screen_ids ) ) {

			$form_cpt = $this->event;

			if ( ! wp_style_is( 'wp-color-picker', 'enqueued' ) ) {
				wp_enqueue_style( 'wp-color-picker' );
			}

			wp_enqueue_style( 'thickbox' );
			wp_enqueue_style( 'select2', \Wpeventin::assets_url() . 'css/select2.min.css', array(), '4.0.10', 'all' );
			wp_enqueue_style( 'etn-icon', \Wpeventin::assets_url() . 'css/etn-icon.css', array(), '5.0', 'all' );
			wp_enqueue_style( 'etn-ui', \Wpeventin::assets_url() . 'css/etn-ui.css', array(), \Wpeventin::version(), 'all' );
			wp_enqueue_style( 'jquery-ui', \Wpeventin::assets_url() . 'css/jquery-ui.css', array( 'wp-color-picker' ), \Wpeventin::version(), 'all' );
			wp_enqueue_style( 'flatpickr-min', \Wpeventin::assets_url() . 'css/flatpickr.min.css', array(), \Wpeventin::version(), 'all' );
			wp_enqueue_style( 'event-manager-admin', \Wpeventin::assets_url() . 'css/event-manager-admin.css', array(), \Wpeventin::version(), 'all' );
			wp_enqueue_style( 'etn-common', \Wpeventin::assets_url() . 'css/event-manager-public.css', array(), \Wpeventin::version(), 'all' );

			if ( ! did_action( 'wp_enqueue_media' ) ) {
				wp_enqueue_media();
			}

			// js.
			wp_enqueue_script( 'wp-color-picker' );
			wp_enqueue_script( 'media-upload' );
			wp_enqueue_script( 'thickbox' );
			wp_enqueue_script( 'jquery-ui-datepicker' );

			wp_enqueue_script( 'jquery-ui', \Wpeventin::assets_url() . 'js/etn-ui.min.js', array( 'jquery' ), '4.0.10', true );
			wp_enqueue_script( 'etn', \Wpeventin::assets_url() . 'js/event-manager-admin.js', array( 'jquery' ), \Wpeventin::version(), false );
			wp_enqueue_script( 'select2', \Wpeventin::assets_url() . 'js/select2.min.js', array( 'jquery' ), '4.0.10', false );
			wp_enqueue_script( 'jquery-repeater', \Wpeventin::assets_url() . 'js/jquery.repeater.min.js', array( 'jquery' ), '4.0.10', true );
			wp_enqueue_script( 'flatpickr', \Wpeventin::assets_url() . 'js/flatpickr.js', array( 'jquery' ), \Wpeventin::version(), true );

			wp_enqueue_script( 'etn-app-index', \Wpeventin::plugin_url() . 'build/index-calendar.js', [ 'wp-blocks','wp-block-editor', 'jquery', 'wp-element' ], \Wpeventin::version(), true );

			// localize data.
			$translated_data                       = array();
			$translated_data['ajax_url']           = admin_url( 'admin-ajax.php' );
			$translated_data['site_url']           = site_url();
			$translated_data['admin_url']          = admin_url();
			$translated_data['evnetin_pro_active'] = ( class_exists( 'Wpeventin_Pro' ) ) ? true : false;
			$translated_data['locale_name']        = strtolower( str_replace( '_', '-', get_locale() ) );
			$translated_data['start_of_week']      = get_option( 'start_of_week' );
			$translated_data['expired']            = esc_html__( 'Expired', 'eventin' );
			wp_localize_script( 'etn-app-index', 'localized_data_obj', $translated_data );

			// localize data.
			$settings                                 = \Etn\Core\Settings\Settings::instance()->get_settings_option();
			$form_data                                = array();
			$form_data['ajax_url']                    = admin_url( 'admin-ajax.php' );
			$form_data['zoom_connection_check_nonce'] = wp_create_nonce( 'zoom_connection_check_nonce' );
			$form_data['ticket_status_nonce']         = wp_create_nonce( 'ticket_status_nonce_value' );
			$form_data['zoom_module']                 = empty( $settings['etn_zoom_api'] ) ? 'no' : 'yes';
			$form_data['attendee_module']             = empty( $settings['attendee_registration'] ) ? 'no' : 'yes';
			$form_data['start_date_valid']            = esc_html__( 'Start date should be less than End date', 'eventin' );
			$form_data['end_date_valid']              = esc_html__( 'End date should be greater than Start date', 'eventin' );
			$form_data['common_date_valid']           = esc_html__( 'Please select start date first', 'eventin' );

			wp_localize_script( 'etn', 'form_data', $form_data );
		}
		
		if($screen_id ==='admin_page_etn-wizard'){ 
			wp_enqueue_style( 'etn-onboard-index', \Wpeventin::plugin_url() . 'build/index-onboard.css', [ ], \Wpeventin::version(), 'all' );
			wp_enqueue_script( 'etn-onboard-index', \Wpeventin::plugin_url() . 'build/index-onboard.js', [ 'wp-blocks', 'wp-element' ], \Wpeventin::version(), true );
		}

	}

	/**
	 * Register Menu
	 *
	 * @return void
	 */
	public function register_admin_menu() {

		if ( current_user_can( 'manage_etn_event' ) || current_user_can( 'manage_etn_speaker' ) || current_user_can( 'manage_etn_schedule' ) || current_user_can( 'manage_etn_attendee' ) || current_user_can( 'manage_etn_zoom' ) || current_user_can( 'manage_etn_settings' ) ) {
			add_menu_page(
				esc_html__('Eventin', 'eventin'),
				'Eventin',
				'read',
				'etn-events-manager',
				'',
				"data:image/svg+xml;base64,PHN2ZyBzdHlsZT0icGFkZGluLXRvcDogNnB4IiB3aWR0aD0iMjAiIGhlaWdodD0iMjIiIHZpZXdCb3g9IjAgMCAyNiA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTI1LjExMyAxOS4yNjA0TDE3LjU2OTcgMjYuODAyMkwxMi43MDY3IDMxLjY2NTJMMTAuMzI0IDI5LjI4MjVMNy44ODU3MyAyNi44NDVDNi43NTkyNyAyNS43MTgzIDYuMDYyNzkgMjQuMjMyNyA1LjkxNzEyIDIyLjY0NjFDNS43NzE0NSAyMS4wNTk1IDYuMTg1NzcgMTkuNDcyIDcuMDg4MjEgMTguMTU5QzcuOTkwNjUgMTYuODQ1OSA5LjMyNDI3IDE1Ljg5MDIgMTAuODU3NyAxNS40NTc3QzEyLjM5MTEgMTUuMDI1MSAxNC4wMjc2IDE1LjE0MyAxNS40ODMyIDE1Ljc5MDlMMTIuNjgzNCAxOC41OTA3QzEyLjEzNjEgMTkuMTM3OSAxMS43MDIgMTkuNzg3NSAxMS40MDU4IDIwLjUwMjVDMTEuMTA5NiAyMS4yMTc1IDEwLjk1NzIgMjEuOTgzOCAxMC45NTcyIDIyLjc1NzdDMTAuOTU3MiAyMy41MzE2IDExLjEwOTYgMjQuMjk3OSAxMS40MDU4IDI1LjAxMjlDMTEuNzAyIDI1LjcyNzggMTIuMTM2MSAyNi4zNzc1IDEyLjY4MzQgMjYuOTI0N0wxOS4zMDY3IDIwLjMwMTRMMjMuODAwNiAxNS44MDY2QzIzLjIzMiAxNC43ODk0IDIyLjUyNSAxMy44NTYxIDIxLjY5OTkgMTMuMDMzMUMyMS4xMTk3IDEyLjQ1MjMgMjAuNDg0OSAxMS45Mjg4IDE5LjgwNDMgMTEuNDY5OEMxOC45Mzk0IDEwLjg4NTggMTguMDA1MiAxMC40MTE5IDE3LjAyMzIgMTAuMDU5QzE1LjgxMjIgMTEuMDY3MiAxNC4yODYyIDExLjYxOTMgMTIuNzEwNCAxMS42MTkzQzExLjEzNDYgMTEuNjE5MyA5LjYwODYxIDExLjA2NzIgOC4zOTc1OSAxMC4wNTlDNi42MzcyOCAxMC42OTMyIDUuMDM5IDExLjcwODggMy43MTcyMSAxMy4wMzMxQy0wLjY0ODIyNyAxNy4zOTg2IC0xLjE2ODM1IDI0LjE3NDUgMi4xNTUzNCAyOS4xMTc5QzIuNjEzNjMgMjkuNzk4MiAzLjEzNjcgMzAuNDMyNSAzLjcxNzIxIDMxLjAxMkw2LjE1NTQ5IDMzLjQ0NzNMMTIuNzA2NyA0MEwyMS42OTY4IDMxLjAxMkMyMy4yMDkgMjkuNDk4OCAyNC4zMTQ4IDI3LjYyODUgMjQuOTExOSAyNS41NzQzQzI1LjUwOTEgMjMuNTIwMSAyNS41NzgyIDIxLjM0ODQgMjUuMTEzIDE5LjI2MDRaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNMTIuNzA2IDkuNzI0NTNDMTUuMzkxNCA5LjcyNDUzIDE3LjU2ODMgNy41NDc2MiAxNy41NjgzIDQuODYyMjdDMTcuNTY4MyAyLjE3NjkxIDE1LjM5MTQgMCAxMi43MDYgMEMxMC4wMjA3IDAgNy44NDM3NSAyLjE3NjkxIDcuODQzNzUgNC44NjIyN0M3Ljg0Mzc1IDcuNTQ3NjIgMTAuMDIwNyA5LjcyNDUzIDEyLjcwNiA5LjcyNDUzWiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg== ",
				10
			);
		}
	}


	/**
	 * Singleton Instance
	 *
	 * @return Bootstrap
	 */
	public static function instance() {

		if ( ! self::$instance ) {
			self::$instance = new self();
		}

		return self::$instance;
	}

	/**
	 * Create plugin specific tables to store data
	 *
	 * @return void
	 */
	public function create_table() {
		global $wpdb;
		$table_name      = ETN_EVENT_PURCHASE_HISTORY_TABLE;
		$charset_collate = $wpdb->get_charset_collate();
		require_once ABSPATH . 'wp-admin/includes/upgrade.php';

		// create table for events.
		if ( $table_name !== $wpdb->get_var( "SHOW TABLES LIKE '$table_name'" ) ) {

			// create table to store event purchase history.
			// post_id is the event id.
			// form_id is the woo order id.
			// create events table.
			$wdp_sql = "CREATE TABLE IF NOT EXISTS `$table_name` (
			  `event_id` mediumint(9) NOT NULL AUTO_INCREMENT,
			  `post_id` bigint(20) NOT NULL COMMENT 'This id is teh event id',
			  `form_id` bigint(20) NOT NULL COMMENT 'This id From wp post table',
			  `invoice` varchar(150) NOT NULL,
			  `event_amount` double NOT NULL DEFAULT '0',
			  `user_id` mediumint(9) NOT NULL,
			  `email` varchar(200) NOT NULL,
			  `event_type` ENUM('ticket') DEFAULT 'ticket',
			  `payment_type` ENUM('woocommerce', 'stripe') DEFAULT 'woocommerce',
			  `pledge_id` varchar(20) NOT NULL DEFAULT '0',
			  `payment_gateway` ENUM('offline_payment', 'online_payment', 'bank_payment', 'check_payment', 'stripe_payment', 'other_payment') default 'online_payment',
			  `date_time` datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
			  `status` ENUM('Active','Review', 'DeActive', 'Failed', 'Processing', 'Pending', 'Hold', 'Refunded', 'Delete', 'Completed', 'Cancelled') DEFAULT 'Pending',
			  PRIMARY KEY (`event_id`)
			) $charset_collate;";
			dbDelta( $wdp_sql );

			// create meta table.
			$table_name_meta = ETN_EVENT_PURCHASE_HISTORY_META_TABLE;

			$wdp_meta = "
				CREATE TABLE IF NOT EXISTS `$table_name_meta`(
					`meta_id` mediumint NOT NULL AUTO_INCREMENT,
					`event_id` mediumint NOT NULL,
					`meta_key` varchar(255),
					`meta_value` longtext,
					PRIMARY KEY(`meta_id`)
				) $charset_collate;
			";
			dbDelta( $wdp_meta );

			update_option( 'etn_version', \Wpeventin::version() );
		}

		// run table column migration for older version than 2.3.3.
		if ( version_compare( get_option( 'etn_version' ), '2.3.3', '<' ) ) {

			$migration_query = "ALTER TABLE `$table_name` MODIFY COLUMN `status` ENUM('Failed', 'Processing', 'Pending', 'Hold', 'Refunded', 'Completed', 'Cancelled') DEFAULT 'Pending';";

			$wpdb->query( $migration_query );
		}

	}

	/**
	 * Custom inline css
	 */
	public function etn_custom_inline_css() {
		$settings        = \Etn\Core\Settings\Settings::instance()->get_settings_option();
		$etn_custom_css  = '';
		$primary_color   = '#5D78FF';
		$secondary_color = '';

		// cart bg color.
		if ( ! empty( $settings['etn_primary_color'] ) ) {
			$primary_color = $settings['etn_primary_color'];
		}

		// cart icon color.
		if ( ! empty( $settings['etn_secondary_color'] ) ) {
			$secondary_color = $settings['etn_secondary_color'];
		}

		$etn_custom_css .= "
        .etn-event-single-content-wrap .etn-event-meta .etn-event-category span,
        .etn-event-item .etn-event-footer .etn-atend-btn .etn-btn-border,
        .etn-btn.etn-btn-border, .attr-btn-primary.etn-btn-border,
        .etn-attendee-form .etn-btn.etn-btn-border,
        .etn-ticket-widget .etn-btn.etn-btn-border,
        .etn-settings-dashboard .button-primary.etn-btn-border,
        .etn-single-speaker-item .etn-speaker-content a:hover,
        .etn-event-style2 .etn-event-date,
        .etn-event-style3 .etn-event-content .etn-title a:hover,
        .event-tab-wrapper ul li a.etn-tab-a,
        .etn-speaker-item.style-3:hover .etn-speaker-content .etn-title a,
		.etn-variable-ticket-widget .ticket-header,
		.events_calendar_list .calendar-event-details:hover .calendar-event-title,
        .etn-event-item:hover .etn-title a,
		.etn-recurring-widget .etn-date-text,
		
		.etn-event-header ul li i {
            color: {$primary_color};
        }
        .etn-event-item .etn-event-category span,
        .etn-btn, .attr-btn-primary,
        .etn-attendee-form .etn-btn,
        .etn-ticket-widget .etn-btn,
        .schedule-list-1 .schedule-header,
        .speaker-style4 .etn-speaker-content .etn-title a,
        .etn-speaker-details3 .speaker-title-info,
        .etn-event-slider .swiper-pagination-bullet, .etn-speaker-slider .swiper-pagination-bullet,
        .etn-event-slider .swiper-button-next, .etn-event-slider .swiper-button-prev,
        .etn-speaker-slider .swiper-button-next, .etn-speaker-slider .swiper-button-prev,
        .etn-single-speaker-item .etn-speaker-thumb .etn-speakers-social a,
        .etn-event-header .etn-event-countdown-wrap .etn-count-item,
        .schedule-tab-1 .etn-nav li a.etn-active,
        .schedule-list-wrapper .schedule-listing.multi-schedule-list .schedule-slot-time,
        .etn-speaker-item.style-3 .etn-speaker-content .etn-speakers-social a,
        .event-tab-wrapper ul li a.etn-tab-a.etn-active,
        .etn-btn, button.etn-btn.etn-btn-primary,
        .etn-schedule-style-3 ul li:before,
        .etn-zoom-btn,
        .cat-radio-btn-list [type=radio]:checked+label:after,
        .cat-radio-btn-list [type=radio]:not(:checked)+label:after,
        .etn-default-calendar-style .fc-button:hover,
        .etn-default-calendar-style .fc-state-highlight,
		.etn-calender-list a:hover,
        .events_calendar_standard .cat-dropdown-list select,
		.etn-event-banner-wrap,
		.events_calendar_list .calendar-event-details .calendar-event-content .calendar-event-category-wrap .etn-event-category,
		.etn-variable-ticket-widget .etn-add-to-cart-block,
		.etn-recurring-event-wrapper #seeMore,
		.more-event-tag,
        .etn-settings-dashboard .button-primary{
            background-color: {$primary_color};
        }

        .etn-event-item .etn-event-footer .etn-atend-btn .etn-btn-border,
        .etn-btn.etn-btn-border, .attr-btn-primary.etn-btn-border,
        .etn-attendee-form .etn-btn.etn-btn-border,
        .etn-ticket-widget .etn-btn.etn-btn-border,
        .event-tab-wrapper ul li a.etn-tab-a,
        .event-tab-wrapper ul li a.etn-tab-a.etn-active,
        .etn-schedule-style-3 ul li:after,
        .etn-default-calendar-style .fc-ltr .fc-basic-view .fc-day-top.fc-today .fc-day-number,
        .etn-default-calendar-style .fc-button:hover,
		.etn-variable-ticket-widget .etn-variable-total-price,
        .etn-settings-dashboard .button-primary.etn-btn-border{
            border-color: {$primary_color};
        }
        .schedule-tab-wrapper .etn-nav li a.etn-active,
        .etn-speaker-item.style-3 .etn-speaker-content{
            border-bottom-color: {$primary_color};
        }
        .schedule-tab-wrapper .etn-nav li a:after,
        .etn-event-list2 .etn-event-content,
        .schedule-tab-1 .etn-nav li a.etn-active:after{
            border-color: {$primary_color} transparent transparent transparent;
        }

        .etn-default-calendar-style .fc .fc-daygrid-bg-harness:first-of-type:before{
            background-color: {$primary_color}2A;
        }
		 .sidebar .etn-default-calendar-style .fc .fc-daygrid-bg-harness:nth-of-type(1)::before,
		 .left-sidebar .etn-default-calendar-style .fc .fc-daygrid-bg-harness:nth-of-type(1)::before,
		 .right-sidebar .etn-default-calendar-style .fc .fc-daygrid-bg-harness:nth-of-type(1)::before,
		  .widget .etn-default-calendar-style .fc .fc-daygrid-bg-harness:nth-of-type(1)::before,
		   .widgets .etn-default-calendar-style .fc .fc-daygrid-bg-harness:nth-of-type(1)::before,
		   .main-sidebar .etn-default-calendar-style .fc .fc-daygrid-bg-harness:nth-of-type(1)::before,
		    #sidebar .etn-default-calendar-style .fc .fc-daygrid-bg-harness:nth-of-type(1)::before{
				background-color: {$primary_color};
		 }


        .etn-event-item .etn-event-location,
        .etn-event-tag-list a:hover,
        .etn-schedule-wrap .etn-schedule-info .etn-schedule-time{
            color: {$secondary_color};
        }
        .etn-event-tag-list a:hover{
            border-color: {$secondary_color};
        }
        .etn-btn:hover, .attr-btn-primary:hover,
        .etn-attendee-form .etn-btn:hover,
        .etn-ticket-widget .etn-btn:hover,
        .speaker-style4 .etn-speaker-content p,
        .etn-btn, button.etn-btn.etn-btn-primary:hover,
        .etn-zoom-btn,
		.events_calendar_list .calendar-event-details .event-calendar-action .etn-btn, .events_calendar_list .calendar-event-details .event-calendar-action .etn-price.event-calendar-details-btn,
        .etn-speaker-item.style-3 .etn-speaker-content .etn-speakers-social a:hover,
        .etn-single-speaker-item .etn-speaker-thumb .etn-speakers-social a:hover,
		.etn-recurring-event-wrapper #seeMore:hover, .etn-recurring-event-wrapper #seeMore:focus,
        .etn-settings-dashboard .button-primary:hover{
            background-color: {$secondary_color};
        }";

		// add inline css.
		wp_register_style( 'etn-custom-css', false );
		wp_enqueue_style( 'etn-custom-css' );
		wp_add_inline_style( 'etn-custom-css', $etn_custom_css );
	}

	/**
	 * Product URL
	 *
	 * @return string
	 */
	public function get_pro_link() {
		return 'https://themewinter.com/eventin/';
	}
}