File "admin_functions.php"

Full Path: /home/exhehbu/www/wp-content/plugins/eventer/admin/admin_functions.php
File size: 80.61 KB
MIME-type: text/x-php
Charset: utf-8

<?php
defined('ABSPATH') or die('No script kiddies please!');
include('bookings-details.php');
if (!function_exists('load_custom_wp_admin_scripts')) {
  /*
	* load_custom_wp_admin_scripts function
	* Enqueue the style and js for back end
	* Variables of strings are used to send them in js file using wp_localize_script function, so that they can be fully translatable
	*/
  function load_custom_wp_admin_scripts($hook)
  {
    $screen = get_current_screen();
    if ('edit.php' != $hook && $screen->post_type != 'eventer' && $hook != 'admin_page_eventer-booking-info') {
      //return;
    }
	$woocommerce_ticketing = eventer_get_settings('eventer_enable_woocommerce_ticketing');
    $category_eventer = '';
    $google_map_api = eventer_get_settings('google_apikey');
    $multiple_days_message = esc_html__('Recurring options will not work if you select event of more than one day/24 hours.', 'eventer');
    $primary_button = esc_html__('Primary', 'eventer');
    $saving_btn = esc_html__('Saving', 'eventer');
    $save_btn = esc_html__('Save', 'eventer');
    $remove_btn = esc_html__('Remove', 'eventer');
    $time_format = eventer_get_settings('eventer_datepicker_format');
    $eventer_id = (isset($_REQUEST['post'])) ? get_post_meta($_REQUEST['post'], 'eventer_primary_term', true) : '';
	$plugin_data = get_plugin_data(__FILE__);
	$plugin_version = $plugin_data['Version'];
    $shortcode_copy = esc_html__('shortcode copied to clipboard', 'eventer');
    wp_enqueue_script('jquery-ui-datepicker');
    if (isset($_REQUEST['taxonomy']) == 'eventer-venue') {
      wp_enqueue_media();
    }
    $coupons_load = '';
    if (isset($_REQUEST['taxonomy']) == 'eventer-category' || isset($_REQUEST['page']) == 'eventer_settings_options') {
      wp_enqueue_script('wp-color-picker');
      wp_enqueue_style('wp-color-picker');
      $category_eventer = 1;
      $coupons_load = '1';
    }
    $screen = get_current_screen();
    $screen_taxonomy = (property_exists($screen, 'taxonomy')) ? $screen->taxonomy : '';
    wp_enqueue_style('eventer_ui_css', '//ajax.googleapis.com/ajax/libs/jqueryui/1.9.0/themes/base/jquery-ui.css', false, "1.9.0", false);
    wp_enqueue_style('eventer_datetimepicker', EVENTER__PLUGIN_URL . 'css/jquery.simple-dtpicker.css', array(), $plugin_version, 'all');
    wp_enqueue_script('eventer_datetimepicker', EVENTER__PLUGIN_URL . 'js/jquery.simple-dtpicker.js', array('jquery-ui-core'), $plugin_version, true);
    wp_enqueue_script('eventer_ui_plugins', EVENTER__PLUGIN_URL . 'js/jquery-ui.multidatespicker.js', array('jquery-ui-core'), $plugin_version, true);
    wp_enqueue_script('eventer_admin_gmap_autocomplete', '//maps.googleapis.com/maps/api/js?libraries=places&key=' . $google_map_api);
    wp_enqueue_script('eventer_admin_scripts', EVENTER__PLUGIN_URL . 'js/admin_scripts.js', array('jquery'), $plugin_version, true);
    wp_enqueue_script('eventer_admin_checkin', EVENTER__PLUGIN_URL . 'js/admin_checkin.js', array('jquery'), $plugin_version, true);
    wp_localize_script('eventer_admin_checkin', 'checkin', array('ajax_url' => admin_url('admin-ajax.php')));
    wp_localize_script('eventer_admin_scripts', 'dynamicval', array('multiplemsg' => $multiple_days_message, 'ajax_url' => admin_url('admin-ajax.php'), 'venue_nonce' => wp_create_nonce("eventer_make_event_primary_venue_nonce"), 'eventer' => $eventer_id, 'event_cat' => $category_eventer, 'woocommerce_payment' => $woocommerce_ticketing, 'registrant_remove_nonce' => wp_create_nonce("eventer_remove_registrant_nonce"), 'shortcode_copied' => $shortcode_copy, 'primary_btn' => $primary_button, 'gmap_api' => $google_map_api, 'screen_tax' => $screen_taxonomy, 'saving_btn' => $saving_btn, 'save_btn' => $save_btn, 'remove_btn' => $remove_btn, 'time_format' => $time_format, 'load_coupons' => $coupons_load, 'week_start' => get_option('start_of_week')));
    wp_enqueue_style('eventer_admin_style', EVENTER__PLUGIN_URL . 'css/admin_style.css', array(), $plugin_version, 'all');
  }
  add_action('admin_enqueue_scripts', 'load_custom_wp_admin_scripts');
}

function eventer_store_default_form_settings()
{
  $existing_form_settings = get_option('eventer_forms_data');
  if (empty($existing_form_settings)) {
    $form_settings_val = unserialize('a:1:{s:29:"eventer-default-form-settings";a:5:{s:7:"dynamic";a:5:{s:8:"section5";a:3:{s:4:"type";s:0:"";s:3:"btn";s:7:"enabled";s:6:"fields";a:4:{i:0;a:2:{s:6:"status";s:6:"enable";s:6:"shorts";a:3:{i:0;a:3:{s:6:"column";s:4:"1by3";s:2:"id";s:27:"eventer-0.33826693254757756";s:9:"shortcode";s:171:"[eventer_fields type="text" required="yes" featured_type="" text_row="4" textarea_type="" class="" id="" name="Event title" label="Event title" meta_key="title" param="|"]";}i:1;a:3:{s:6:"column";s:4:"1by3";s:2:"id";s:25:"eventer-0.640654605593687";s:9:"shortcode";s:198:"[eventer_fields type="date" required="yes" featured_type="" text_row="4" textarea_type="" class="" id="" name="Event start date" label="Event start date" meta_key="eventer_event_start_dt" param="|"]";}i:2;a:3:{s:6:"column";s:4:"1by3";s:2:"id";s:26:"eventer-0.4938553863997305";s:9:"shortcode";s:192:"[eventer_fields type="date" required="yes" featured_type="" text_row="4" textarea_type="" class="" id="" name="Event end date" label="Event end date" meta_key="eventer_event_end_dt" param="|"]";}}}i:1;a:2:{s:6:"status";s:6:"enable";s:6:"shorts";a:1:{i:0;a:3:{s:6:"column";s:2:"10";s:2:"id";s:25:"eventer-0.505141878395051";s:9:"shortcode";s:208:"[eventer_fields type="textarea" required="yes" featured_type="" text_row="5" textarea_type="wp" class="" id="eventer-wp-editor" name="Event description" label="Event description" meta_key="content" param="|"]";}}}i:2;a:2:{s:6:"status";s:7:"disable";s:6:"shorts";a:1:{i:0;a:3:{s:6:"column";s:2:"10";s:2:"id";s:25:"eventer-0.761745691922583";s:9:"shortcode";s:171:"[eventer_fields type="featured" required="no" featured_type="wp" text_row="4" textarea_type="" class="" id="" name="Event image" label="Event image" meta_key="" param="|"]";}}}i:3;a:2:{s:6:"status";s:6:"enable";s:6:"shorts";a:1:{i:0;a:3:{s:6:"column";s:2:"10";s:2:"id";s:27:"eventer-0.44703476545334286";s:9:"shortcode";s:169:"[eventer_fields type="featured" required="no" featured_type="" text_row="4" textarea_type="" class="" id="" name="Event image" label="Event image" meta_key="" param="|"]";}}}}}s:8:"section2";a:3:{s:4:"type";s:0:"";s:3:"btn";s:7:"enabled";s:6:"fields";a:1:{i:0;a:2:{s:6:"status";s:6:"enable";s:6:"shorts";a:3:{i:0;a:3:{s:6:"column";s:4:"1by3";s:2:"id";s:26:"eventer-0.5236805438494746";s:9:"shortcode";s:213:"[eventer_fields type="select" required="no" featured_type="" text_row="4" textarea_type="" class="" id="" name="Recurring event" label="Recurring event" meta_key="eventer_event_frequency_type" param="no|No,1|Yes"]";}i:1;a:3:{s:6:"column";s:4:"1by3";s:2:"id";s:26:"eventer-0.7611748863799075";s:9:"shortcode";s:328:"[eventer_fields type="select" required="no" featured_type="" text_row="4" textarea_type="" class="" id="" name="Event recurring" label="Event recurring" meta_key="eventer_event_frequency" param="1|Every day,2|Every second day,3|Every third day,4|Every fourth day,5|Every fifth day,6|Every sixth day,7|Every week,30|Every month"]";}i:2;a:3:{s:6:"column";s:4:"1by3";s:2:"id";s:27:"eventer-0.03241813253593584";s:9:"shortcode";s:212:"[eventer_fields type="number" required="no" featured_type="" text_row="4" textarea_type="" class="" id="" name="Recurring frequency" label="Recurring frequency" meta_key="eventer_event_frequency_count" param="|"]";}}}}}s:8:"section1";a:3:{s:4:"type";s:17:"eventer-organizer";s:3:"btn";s:7:"enabled";s:6:"fields";a:2:{i:0;a:2:{s:6:"status";s:6:"enable";s:6:"shorts";a:2:{i:0;a:3:{s:6:"column";s:1:"5";s:2:"id";s:26:"eventer-0.5579738415141968";s:9:"shortcode";s:210:"[eventer_fields type="text" required="no" featured_type="" text_row="4" textarea_type="" class="eventer_get_saved_data" id="" name="Organizer name" label="Organizer name" meta_key="eventer-organizer" param="|"]";}i:1;a:3:{s:6:"column";s:1:"5";s:2:"id";s:26:"eventer-0.1088470188812577";s:9:"shortcode";s:188:"[eventer_fields type="text" required="no" featured_type="" text_row="4" textarea_type="" class="" id="" name="Organizer email" label="Organizer email" meta_key="organizer_email" param="|"]";}}}i:1;a:2:{s:6:"status";s:6:"enable";s:6:"shorts";a:2:{i:0;a:3:{s:6:"column";s:1:"5";s:2:"id";s:27:"eventer-0.49224397744948345";s:9:"shortcode";s:192:"[eventer_fields type="text" required="no" featured_type="" text_row="4" textarea_type="" class="" id="" name="Oganizer website" label="Oganizer website" meta_key="organizer_website" param="|"]";}i:1;a:3:{s:6:"column";s:1:"5";s:2:"id";s:27:"eventer-0.41708263450628547";s:9:"shortcode";s:217:"[eventer_fields type="number" required="no" featured_type="" text_row="4" textarea_type="" class="" id="" name="Organizer phone" label="Organizer phone" meta_key="organizer_phone" meta_key="organizer_phone" param="|"]";}}}}}s:8:"section4";a:3:{s:4:"type";s:13:"eventer-venue";s:3:"btn";s:7:"enabled";s:6:"fields";a:1:{i:0;a:2:{s:6:"status";s:6:"enable";s:6:"shorts";a:2:{i:0;a:3:{s:6:"column";s:1:"5";s:2:"id";s:26:"eventer-0.6507914953184427";s:9:"shortcode";s:176:"[eventer_fields type="text" required="no" featured_type="" text_row="4" textarea_type="" class="" id="" name="Venue name" label="Venue name" meta_key="eventer-venue" param="|"]";}i:1;a:3:{s:6:"column";s:1:"5";s:2:"id";s:26:"eventer-0.3573525663784346";s:9:"shortcode";s:182:"[eventer_fields type="text" required="no" featured_type="" text_row="4" textarea_type="" class="" id="" name="Venue address" label="Venue address" meta_key="venue_address" param="|"]";}}}}}s:8:"section3";a:3:{s:4:"type";s:7:"tickets";s:3:"btn";s:7:"enabled";s:6:"fields";a:4:{i:0;a:2:{s:6:"status";s:6:"enable";s:6:"shorts";a:3:{i:0;a:3:{s:6:"column";s:4:"1by3";s:2:"id";s:28:"eventer-0.024479173211175653";s:9:"shortcode";s:257:"[eventer_fields type="select" required="no" featured_type="" text_row="4" textarea_type="" class="" id="" name="Registration" label="Registration" meta_key="eventer_event_registration_swtich" meta_key="eventer_event_registration_swtich" param="no|No,1|Yes"]";}i:1;a:3:{s:6:"column";s:4:"1by3";s:2:"id";s:26:"eventer-0.6542816918697981";s:9:"shortcode";s:200:"[eventer_fields type="text" required="no" featured_type="" text_row="4" textarea_type="" class="" id="" name="Custom URL" label="Custom URL" meta_key="eventer_event_custom_registration_url" param="|"]";}i:2;a:3:{s:6:"column";s:4:"1by3";s:2:"id";s:26:"eventer-0.6991851641940596";s:9:"shortcode";s:234:"[eventer_fields type="select" required="no" featured_type="" text_row="4" textarea_type="" class="" id="" name="Custom URL Target" label="Custom URL Target" meta_key="eventer_event_registration_target" param="_self|Self,_blank|Blank"]";}}}i:1;a:2:{s:6:"status";s:6:"enable";s:6:"shorts";a:3:{i:0;a:3:{s:6:"column";s:4:"1by3";s:2:"id";s:26:"eventer-0.4266792564731865";s:9:"shortcode";s:207:"[eventer_fields type="text" required="no" featured_type="" text_row="4" textarea_type="" class="eventer_get_saved_data" id="" name="Ticket name" label="Ticket name" meta_key="eventer_ticket_name0" param="|"]";}i:1;a:3:{s:6:"column";s:4:"1by3";s:2:"id";s:26:"eventer-0.4884638474764328";s:9:"shortcode";s:197:"[eventer_fields type="text" required="no" featured_type="" text_row="4" textarea_type="" class="" id="" name="Ticket Quantity" label="Ticket Quantity" meta_key="eventer_ticket_quantity0" param="|"]";}i:2;a:3:{s:6:"column";s:4:"1by3";s:2:"id";s:27:"eventer-0.08380307243794716";s:9:"shortcode";s:198:"[eventer_fields type="text" required="no" featured_type="" text_row="4" textarea_type="" class="" id="" name="Ticket price in $" label="Ticket price in $" meta_key="eventer_ticket_price0" param="|"]";}}}i:2;a:2:{s:6:"status";s:6:"enable";s:6:"shorts";a:3:{i:0;a:3:{s:6:"column";s:4:"1by3";s:2:"id";s:26:"eventer-0.7664874155298499";s:9:"shortcode";s:185:"[eventer_fields type="text" required="no" featured_type="" text_row="4" textarea_type="" class="" id="" name="Ticket name" label="Ticket name" meta_key="eventer_ticket_name1" param="|"]";}i:1;a:3:{s:6:"column";s:4:"1by3";s:2:"id";s:27:"eventer-0.05912964997083725";s:9:"shortcode";s:197:"[eventer_fields type="text" required="no" featured_type="" text_row="4" textarea_type="" class="" id="" name="Ticket Quantity" label="Ticket Quantity" meta_key="eventer_ticket_quantity1" param="|"]";}i:2;a:3:{s:6:"column";s:4:"1by3";s:2:"id";s:26:"eventer-0.8276879316332272";s:9:"shortcode";s:198:"[eventer_fields type="text" required="no" featured_type="" text_row="4" textarea_type="" class="" id="" name="Ticket price in $" label="Ticket price in $" meta_key="eventer_ticket_price1" param="|"]";}}}i:3;a:2:{s:6:"status";s:6:"enable";s:6:"shorts";a:3:{i:0;a:3:{s:6:"column";s:4:"1by3";s:2:"id";s:26:"eventer-0.2155069921141367";s:9:"shortcode";s:185:"[eventer_fields type="text" required="no" featured_type="" text_row="4" textarea_type="" class="" id="" name="Ticket name" label="Ticket name" meta_key="eventer_ticket_name2" param="|"]";}i:1;a:3:{s:6:"column";s:4:"1by3";s:2:"id";s:27:"eventer-0.20954417053933816";s:9:"shortcode";s:197:"[eventer_fields type="text" required="no" featured_type="" text_row="4" textarea_type="" class="" id="" name="Ticket Quantity" label="Ticket Quantity" meta_key="eventer_ticket_quantity2" param="|"]";}i:2;a:3:{s:6:"column";s:4:"1by3";s:2:"id";s:26:"eventer-0.6886590932765758";s:9:"shortcode";s:198:"[eventer_fields type="text" required="no" featured_type="" text_row="4" textarea_type="" class="" id="" name="Ticket price in $" label="Ticket price in $" meta_key="eventer_ticket_price2" param="|"]";}}}}}}s:8:"sections";a:6:{i:0;s:15:"section-message";i:1;s:8:"section5";i:2;s:8:"section2";i:3;s:8:"section1";i:4;s:8:"section4";i:5;s:8:"section3";}s:6:"number";s:1:"5";s:6:"status";s:5:"draft";s:4:"name";s:0:"";}}');
    update_option('eventer_forms_data', $form_settings_val);
  }
}
add_action('plugins_loaded', 'eventer_store_default_form_settings');

if (!function_exists('eventer_get_post_language')) {
  /*
	* eventer_get_post_language function
	* Get language of post while using WPML plugin
	*/
  function eventer_get_post_language($post_id)
  {
    if (class_exists('SitePress')) {
      global $wpdb;
      $query = $wpdb->prepare('SELECT language_code FROM ' . $wpdb->prefix . 'icl_translations WHERE element_id="%d"', $post_id);
      $query_exec = $wpdb->get_row($query);
      if (!empty($query_exec)) {
        return $query_exec->language_code;
      }
    }
  }
  //add_action('init', 'eventer_get_post_language');
}

if (!function_exists('eventer_add_form_fields_venue')) {
  /*
	* eventer_add_form_fields_venue function
	* Make term description field to WYSIWYG, if yoast seo plugin activated then this function will not work
	*/
  function eventer_add_form_fields_venue($term, $taxonomy)
  {
    ?>
    <table class="form-table">
      <tbody>
        <tr valign="top" class="form-field">
          <th scope="row">
            <label><?php esc_html_e('Description', 'eventer'); ?></label>
          </th>
          <td>
            <?php wp_editor(html_entity_decode($term->description), 'description', array('media_buttons' => true)); ?>
            <script>
              jQuery(window).ready(function() {
                jQuery('label[for=description]').parent().parent().remove();
              });
            </script>
          </td>
        </tr>
      </tbody>
    </table>
    <?php
      }
      if (is_admin() && function_exists('is_plugin_active') && !is_plugin_active('wordpress-seo/wp-seo.php')) {
        $taxonomies = array('eventer-venue', 'eventer-category', 'eventer-organizer', 'eventer-tag');
        foreach ($taxonomies as $taxonomy) {
          add_action("{$taxonomy}_edit_form_fields", 'eventer_add_form_fields_venue', 10, 2);
        }
        remove_filter('pre_term_description', 'wp_filter_kses');
        remove_filter('term_description', 'wp_kses_data');
      }
    }

    function eventer_date_sort($a, $b)
    {
      return strtotime($a) - strtotime($b);
    }

    if (!function_exists('eventer_find_non_recurring_events')) {
      /*
	* eventer_find_non_recurring_events function
	* This function create array of all dates of recurring events and save them in database, so that we can easily get the all date of event by ID 		only.
	* This is the case if user do not select any recurring option for event
	*/
      function eventer_find_non_recurring_events($ID)
      {
        $ID = eventer_wpml_original_post_id($ID);
        $update_date = array();
        $show_event_until = eventer_get_settings('countdown_timer');
        $eventer_start_dt = get_post_meta($ID, 'eventer_event_start_dt', true);
        $eventer_end_dt = get_post_meta($ID, 'eventer_event_end_dt', true);
        $eventer_start_dt_str = strtotime($eventer_start_dt);
        $eventer_end_dt_str = strtotime($eventer_end_dt);
        $hour_diff = (intval($eventer_end_dt_str) - intval($eventer_end_dt_str));
        $eventer_dynamic_include = get_post_meta($ID, 'eventer_event_multiple_dt_inc', true);
        $eventer_dynamic_include_get = array_map('trim', explode(',', $eventer_dynamic_include));
        $eventer_dynamic_include_get = array_filter($eventer_dynamic_include_get);

        $count_date_diff = eventer_dateDiff(date('Y-m-d', $eventer_start_dt_str), date('Y-m-d', $eventer_end_dt_str));
        $eventer_multi_date = (!empty(get_option('eventer_multi_day_event'))) ? get_option('eventer_multi_day_event') : array();
        if (date_i18n('Y-m-d', $eventer_start_dt_str) == date_i18n('Y-m-d', $eventer_end_dt_str)) {
          $actual_date = date_i18n('Y-m-d', $eventer_start_dt_str);
          $update_date = (!empty($eventer_dynamic_include_get)) ? array_merge($eventer_dynamic_include_get, array($actual_date)) : array($actual_date);
          if (in_array($ID, $eventer_multi_date)) {
            $updated_multi = array_diff($eventer_multi_date, array($ID));
            update_option('eventer_multi_day_event', $updated_multi);
          }
        } else {
          $update_date[] = date_i18n('Y-m-d', $eventer_start_dt_str);
          if (!empty($eventer_dynamic_include_get)) {
            $update_date = array_merge($update_date, $eventer_dynamic_include_get);
          }
          $updating_multi_ids = array_merge($eventer_multi_date, array($ID));
          $updating_multi_ids = array_unique($updating_multi_ids);
          update_option('eventer_multi_day_event', $updating_multi_ids);
        }
        return $update_date;
      }
    }

    if (!function_exists('eventer_find_first_recurring_events')) {
      /*
	* eventer_find_first_recurring_events function
	* This function create array of all dates of recurring events and save them in database, so that we can easily get the all date of event by ID 		only.
	* This is the case if user select fixed date option for event frequency
	*/
      function eventer_find_first_recurring_events($ID)
      {
        $ID = eventer_wpml_original_post_id($ID);
        $show_event_until = eventer_get_settings('countdown_timer');
        $eventer_start_dt = get_post_meta($ID, 'eventer_event_start_dt', true);
        $eventer_end_dt = get_post_meta($ID, 'eventer_event_end_dt', true);
        $eventer_start_dt_str = strtotime($eventer_start_dt);
        $eventer_end_dt_str = strtotime($eventer_end_dt);
        $eventer_start_time = date('G:i', $eventer_start_dt_str);
        $eventer_end_time = date('G:i', $eventer_end_dt_str);
        $eventer_time_set = ($show_event_until == 1) ? $eventer_start_time : $eventer_end_time;
        $eventer_default_set = ($show_event_until == 1) ? $eventer_start_dt_str : $eventer_end_dt_str;

        //First Selection Fixed Date EveryDay, EveryWeek, EveryMonth
        $eventer_frequency = get_post_meta($ID, 'eventer_event_frequency', true);

        $eventer_dynamic_include = get_post_meta($ID, 'eventer_event_multiple_dt_inc', true) . ',';
        $eventer_dynamic_include_get = array_map('trim', explode(',', $eventer_dynamic_include));
        $eventer_dynamic_include_get = array_filter($eventer_dynamic_include_get);

        $eventer_frequency_count = get_post_meta($ID, 'eventer_event_frequency_count', true);
        $eventer_dynamic_exclude = get_post_meta($ID, 'eventer_event_multiple_dt_exc', true) . ',';
        $eventer_dynamic_exclude_get = array_map('trim', explode(',', $eventer_dynamic_exclude));
        $eventer_dynamic_exclude_get = array_filter($eventer_dynamic_exclude_get);

        $count_date_diff = eventer_dateDiff(date('Y-m-d', $eventer_start_dt_str), date('Y-m-d', $eventer_end_dt_str));
        $update_date = array();
        $update_date[] = date('Y-m-d', $eventer_start_dt_str);
        //if($count_date_diff<=0)
        //{
        if ($eventer_frequency_count > 0) {
          $eventer_frequency_val = ($eventer_frequency == 365) ? 'year' : (($eventer_frequency == 30) ? 'month' : 'days');
          $eventer_frequency = ($eventer_frequency == 365) ? 1 : (($eventer_frequency == 30) ? 1 : $eventer_frequency);
          for ($i = 0; $i < $eventer_frequency_count; $i++) {
            $event_new_date = strtotime("+" . $eventer_frequency . " " . $eventer_frequency_val, $eventer_start_dt_str);
            $event_new_date = date('Y-m-d', $event_new_date);
            $update_date[] = $event_new_date;
            $eventer_start_dt_str = strtotime($event_new_date);
          }
        }
        //}
        $update_date_new = array_merge($update_date, $eventer_dynamic_include_get);
        $update_date_unique = array_unique($update_date_new);
        $updated_date_get = array_diff($update_date_unique, $eventer_dynamic_exclude_get);
        usort($updated_date_get, "eventer_date_sort");
        $eventer_multi_date = (!empty(get_option('eventer_multi_day_event'))) ? get_option('eventer_multi_day_event') : array();
        if (in_array($ID, $eventer_multi_date)) {
          $updated_multi = array_diff($eventer_multi_date, array($ID));
          update_option('eventer_multi_day_event', $updated_multi);
        }
        return $updated_date_get;
      }
    }

    if (!function_exists('eventer_find_second_recurring_events')) {
      /*
	* eventer_find_second_recurring_events function
	* This function create array of all dates of recurring events and save them in database, so that we can easily get the all date of event by ID 		only.
	* This is the case if user select week day option for event frequency
	*/
      function eventer_find_second_recurring_events($ID)
      {
        $ID = eventer_wpml_original_post_id($ID);
        $all_events = array();
        $show_event_until = eventer_get_settings('countdown_timer');
        $eventer_start_dt = get_post_meta($ID, 'eventer_event_start_dt', true);
        $eventer_end_dt = get_post_meta($ID, 'eventer_event_end_dt', true);
        $eventer_start_dt_str = strtotime($eventer_start_dt);
        $eventer_end_dt_str = strtotime($eventer_end_dt);
        $eventer_start_time = date_i18n('G:i', $eventer_start_dt_str);
        $eventer_end_time = date_i18n('G:i', $eventer_end_dt_str);
        $eventer_time_set = ($show_event_until == 1) ? $eventer_start_time : $eventer_end_time;
        $eventer_default_set = ($show_event_until == 1) ? $eventer_start_dt_str : $eventer_end_dt_str;
        $event_weekly = get_post_meta($ID, 'eventer_event_weekly_repeat', true);

        //Second Selection Week Day First Sunday of First Week ETC
        $eventer_week_number = get_post_meta($ID, 'eventer_event_day_month', true);
        $eventer_week_day = get_post_meta($ID, 'eventer_event_week_day', true);

        $eventer_dynamic_include = get_post_meta($ID, 'eventer_event_multiple_dt_inc', true) . ',';
        $eventer_dynamic_include_get = array_map('trim', explode(',', $eventer_dynamic_include));
        $eventer_dynamic_include_get = array_filter($eventer_dynamic_include_get);

        $eventer_frequency_count = get_post_meta($ID, 'eventer_event_frequency_count', true);
        $eventer_dynamic_exclude = get_post_meta($ID, 'eventer_event_multiple_dt_exc', true) . ',';
        $eventer_dynamic_exclude_get = array_map('trim', explode(',', $eventer_dynamic_exclude));
        $eventer_dynamic_exclude_get = array_filter($eventer_dynamic_exclude_get);

        $count_date_diff = eventer_dateDiff(date('Y-m-d', $eventer_start_dt_str), date('Y-m-d', $eventer_end_dt_str));


        $get_updated_date = $eventer_start_dt_str;
        if ($event_weekly === 'on') {
          foreach ($eventer_week_number as $week_number) {
            switch ($week_number) {
              case 'first':
                $daysbyweek = 7;
                break;
              case 'second':
                $daysbyweek = 14;
                break;
              case 'third':
                $daysbyweek = 21;
                break;
              case 'fourth':
                $daysbyweek = 28;
                break;
              default:
                $daysbyweek = 35;
                break;
            }
            $eventer_frequency_val = 'days';
            $event_new_date_original = date_i18n('Y-m-d', $eventer_start_dt_str);
            for ($i = 1; $i <= $eventer_frequency_count; $i++) {
              $extent_for = $daysbyweek * $i;
              $event_new_date_get = date_i18n('Y-m-d', strtotime($event_new_date_original . ' + ' . $extent_for . ' ' . $eventer_frequency_val));
              foreach ($eventer_week_day as $week_day) {
                $day_num = date('N', strtotime($week_day));
                $dayofweek = date('w', strtotime($event_new_date_get));
                $event_new_date    = date('Y-m-d', strtotime(($day_num - $dayofweek) . ' day', strtotime($event_new_date_get)));
                $all_events[] = $event_new_date;
              }
            }
          }
        } else {
          //$all_events[] = date_i18n('Y-m-d', $eventer_start_dt_str);
          for ($i = 0; $i < $eventer_frequency_count; $i++) {
            $eventDate = strtotime(date_i18n('Y-m-01', $get_updated_date));
            $event_start_date_next = strtotime("+" . $i . " month", $eventDate);
            $next_month = date('F', $event_start_date_next);
            $next_event_year = date_i18n('Y', $event_start_date_next);
            $start_date_time = date_i18n('G:i', $get_updated_date);
            foreach ($eventer_week_number as $week_number) {
              foreach ($eventer_week_day as $week_day) {
                $all_events_add = date('Y-m-d', strtotime($week_number . ' ' . $week_day . ' of ' . $next_month . ' ' . $next_event_year));
                $all_events[] = $all_events_add;
              }
            }
          }
        }

        $update_date_new = array_merge($all_events, $eventer_dynamic_include_get);
        $update_date_unique = array_unique($update_date_new);
        $updated_date_get = array_diff($update_date_unique, $eventer_dynamic_exclude_get);
        usort($updated_date_get, "eventer_date_sort");
        $eventer_multi_date = (!empty(get_option('eventer_multi_day_event'))) ? get_option('eventer_multi_day_event') : array();
        if (in_array($ID, $eventer_multi_date)) {
          $updated_multi = array_diff($eventer_multi_date, array($ID));
          update_option('eventer_multi_day_event', $updated_multi);
        }
        return $updated_date_get;
      }
    }

    if (!function_exists('eventer_date_updated')) {
      /*
	* eventer_find_second_recurring_events function
	* This function create array of all dates of recurring events and save them in database, so that we can easily get the all date of event by ID 		only.
	* This is the case if user select week day option for event frequency
	*/
      function eventer_date_updated($post_id)
      {
        if (get_post_type($post_id) != 'eventer') return;
        $eventer_frequency_type = get_post_meta($post_id, 'eventer_event_frequency_type', true);
        $all_day = get_post_meta($post_id, 'eventer_event_all_day', true);
        $st_date = get_post_meta($post_id, 'eventer_event_start_dt', true);
        $en_date = get_post_meta($post_id, 'eventer_event_end_dt', true);
        if ($all_day && $en_date < $st_date) {
          update_post_meta($post_id, 'eventer_event_end_dt', $st_date);
        }
        update_option('eventer_saved_show_until', '');
        $update_all_date = '';
        $site_lang = EVENTER__LANGUAGE_CODE;
        $polylang_lang = (function_exists('pll_get_post_language')) ? pll_get_post_language($post_id) : '';
        $site_lang = ($polylang_lang) ? $polylang_lang : $site_lang;
        update_option($site_lang . '_eventer_future_data_wp', array());
        update_option($site_lang . '_eventer_future_data_formatted_wp', array());
        $eventer_stored = get_option($site_lang . '_eventer_stored');
        $new_eventer_save[$post_id] = get_the_title($post_id);
        $merge_eventer_stored = array_merge($eventer_stored, $new_eventer_save);
        update_option($site_lang . '_eventer_stored', $merge_eventer_stored);
        switch ($eventer_frequency_type) {
          case 'no':
            $update_all_date = eventer_find_non_recurring_events($post_id);
            update_post_meta($post_id, 'eventer_all_dates', $update_all_date);
            break;
          case '1':
            $update_all_date = eventer_find_first_recurring_events($post_id);
            update_post_meta($post_id, 'eventer_all_dates', $update_all_date);
            break;
          case '2':
            $update_all_date = eventer_find_second_recurring_events($post_id);
            update_post_meta($post_id, 'eventer_all_dates', $update_all_date);
            break;
          default:
            $update_all_date = eventer_find_non_recurring_events($post_id);
            update_post_meta($post_id, 'eventer_all_dates', $update_all_date);
        }
      }
    }

    if (!function_exists('eventer_actioned_post')) {
      /*
	* eventer_actioned_post function
	* This function remove all recurring date from database if trash action trigerred
	*/
      function eventer_actioned_post($post_id)
      {
        if (get_post_type($post_id) != 'eventer') return;
        update_post_meta($post_id, 'eventer_all_dates', '');
        $eventer_multi_date = (!empty(get_option('eventer_multi_day_event'))) ? get_option('eventer_multi_day_event') : array();
        if (in_array($post_id, $eventer_multi_date)) {
          $eventer_multi_date = array_diff($eventer_multi_date, array($post_id));
          $updating_multi_ids = array_unique($eventer_multi_date);
          update_option('eventer_multi_day_event', $updating_multi_ids);
        }
      }
      add_action('save_post', 'eventer_date_updated', 99, 2);
      add_action('edit_post', 'eventer_date_updated', 99, 2);
      add_action('publish_eventer', 'eventer_date_updated', 999, 2);
      add_action('trashed_post', 'eventer_actioned_post', 10, 2);
      add_action('untrash_post', 'eventer_date_updated', 10, 2);
      add_action('eventer_create_action_rest_api', 'eventer_date_updated', 10, 1);
    }

    function eventer_get_eventer_list()
    {
      $event_list = array('' => esc_html__('Next Future Event', 'eventer'));
      $args = array('post_type' => 'eventer', 'posts_per_page' => -1);
      $eventer_list = new WP_Query($args);
      if ($eventer_list->have_posts()) : while ($eventer_list->have_posts()) : $eventer_list->the_post();
          $event_list[get_the_ID()] = get_the_title();
        endwhile;
      endif;
      wp_reset_postdata();
      return $event_list;
    }

    if (!function_exists('eventer_get_terms')) {
      /*
	* eventer_get_terms function
	* This function returns all terms of given taxonomy
	*/
      function eventer_get_terms($taxonomy = '')
      {
        if ($taxonomy == '') return;
        $event_terms = array('' => esc_html__('All', 'eventer'));
        $term_args = get_terms($taxonomy);
        if (!is_wp_error($term_args) && !empty($term_args)) {
          foreach ($term_args as $term) {
            $event_terms[$term->term_id] = $term->name;
          }
        }
        return $event_terms;
      }
    }

    if (!function_exists('eventer_make_event_primary_venue')) {
      /*
	* eventer_make_event_primary_venue function
	* This function make venue primary if selected multiple for event
	*/
      function eventer_make_event_primary_venue()
      {
        $status = '';
        if (!wp_verify_nonce($_REQUEST['nonce'], "eventer_make_event_primary_venue_nonce")) {
          exit();
        }
        $eventer_id = $_REQUEST['post_id'];
        $term_id = $_REQUEST['term'];
        $uncheck = $_REQUEST['uncheck'];
        $terms = explode("-", $term_id);

        if (defined('DOING_AJAX') && DOING_AJAX) {
          $old_status = get_post_meta($eventer_id, 'eventer_primary_term', true);
          if ($old_status == $terms[2] && $uncheck == '1') {
            $status = update_post_meta($eventer_id, 'eventer_primary_term', '');
            echo 0;
          } elseif ($uncheck != '1') {
            $status = update_post_meta($eventer_id, 'eventer_primary_term', $terms[2]);
            echo 1;
          }
          echo 'eventer-venue-' . get_post_meta($eventer_id, 'eventer_primary_term', true);

          die();
        } else {
          exit();
        }
      }
      add_action('wp_ajax_eventer_make_event_primary_venue', 'eventer_make_event_primary_venue');
    }

    if (!function_exists('eventer_update_registrant_status')) {
      /*
	* eventer_update_registrant_status function
	* This function update the status of registrant payment
	*/
      function eventer_update_registrant_status()
      {
        $nonce = (isset($_REQUEST['nonce'])) ? $_REQUEST['nonce'] : '';
        if (!wp_verify_nonce($nonce, 'eventer_update_registrant_status')) {
          wp_die();
        }
        $registrant_id = (isset($_REQUEST['id'])) ? $_REQUEST['id'] : '';
        $registrants = eventer_get_registrant_details('id', $registrant_id);
        $status = (isset($_REQUEST['status'])) ? $_REQUEST['status'] : 'woo';
        if ($status == "woo") {
          echo apply_filters('eventer_status_changed_completed', $registrants, 'admin');
          wp_die();
        }

        $user_system = unserialize($registrants->user_system);
        $user_system['email_post'] = "1";

        eventer_update_registrant_details(array('status' => $status), $registrant_id, array("%s", "%s"));
        if ($status == "completed") {
          $new_user_system_restore = (isset($user_system['restore'])) ? $user_system['restore'] : '';
          //if ($new_user_system_restore == 1) {
          $tickets = $registrants->tickets;
          $tickets = unserialize($tickets);
          $time_slot = (isset($user_system['time_slot']) && $user_system['time_slot'] != '') ? $user_system['time_slot'] : '00:00:00';
          $ticket_date = $registrants->eventer_date . ' ' . $time_slot;
          if (!empty($tickets)) {
            $new_tickets = [];
            foreach ($tickets as $ticket_set) {
              $this_ticket = $ticket_set;
              $this_ticket['restored'] = '0';
              $new_tickets[] = $this_ticket;
              $tickets_id = $ticket_set['id'];
              $total_tickets = $ticket_set['number'];
              if (isset($ticket_set['restored']) && $ticket_set['restored'] == '1') {
                eventer_update_date_wise_bookings_table($registrants->eventer, $ticket_date, array(array('id' => $tickets_id, 'number' => $total_tickets)), 3, 1);
              }
            }
            global $wpdb;
            $registration_table = $wpdb->prefix . "eventer_registrant";
            $wpdb->update($registration_table, array('tickets' => serialize($new_tickets)), ['id' => $registrant_id], array('%s'), array('%d'));
          }
          //}
          $user_system['restore'] = 0;
          //$new_user_system = serialize($user_system);
          eventer_pass_email_registration($registrant_id, 4);
          //eventer_update_registrant_details(array('user_system' => $new_user_system), $registrant_id, array("%s", "%s"));
          echo apply_filters('eventer_status_changed_completed', $registrants, 'admin');
        } else {

          $tickets = $registrants->tickets;
          $tickets = unserialize($tickets);
          $restore_status = (isset($user_system['restore'])) ? $user_system['restore'] : '';
          $time_slot = (isset($user_system['time_slot']) && $user_system['time_slot'] != '') ? $user_system['time_slot'] : '00:00:00';
          $ticket_date = $registrants->eventer_date . ' ' . $time_slot;
          if (!empty($tickets)) {
            $new_tickets = [];
            foreach ($tickets as $ticket_set) {
              $this_ticket = $ticket_set;
              $this_ticket['restored'] = '1';
              $new_tickets[] = $this_ticket;
              $tickets_id = $ticket_set['id'];
              $user_system['restore'] = 1;
              if (isset($ticket_set['restored']) && $ticket_set['restored'] == '1') continue;
              //$restore_tickets = serialize($user_system);
              //eventer_update_registrant_details(array('user_system' => $restore_tickets), $registrant_id, array("%s", "%s"));
              $total_tickets = $ticket_set['number'];
              if ($total_tickets <= 0 || $restore_status == 1) continue;
              eventer_update_date_wise_bookings_table($registrants->eventer, $ticket_date, array(array('id' => $tickets_id, 'number' => $total_tickets)), 3, 2);
            }
            global $wpdb;
            $registration_table = $wpdb->prefix . "eventer_registrant";
            $wpdb->update($registration_table, array('tickets' => serialize($new_tickets)), ['id' => $registrant_id], array('%s'), array('%d'));
          }
        }
        echo 'completed';
        wp_die();
      }
      add_action('wp_ajax_eventer_update_registrant_status', 'eventer_update_registrant_status');
    }

    if (!function_exists('eventer_send_tickets_again')) {
      /*
	* eventer_update_registrant_status function
	* This function update the status of registrant payment
	*/
      function eventer_send_tickets_again()
      {
        $nonce = (isset($_REQUEST['nonce'])) ? $_REQUEST['nonce'] : '';
        if (!wp_verify_nonce($nonce, 'eventer_send_tickets_again')) {
          wp_die();
        }
        $registrant_id = (isset($_REQUEST['id'])) ? $_REQUEST['id'] : '';
        $registrants = eventer_get_registrant_details('id', $registrant_id);
        echo apply_filters('eventer_status_changed_completed', $registrants, 'admin');
        wp_die();
      }
      add_action('wp_ajax_eventer_send_tickets_again', 'eventer_send_tickets_again');
    }



    if (!function_exists('eventer_remove_registrant')) {
      /*
	* eventer_remove_registrant function
	* This function removes entry of registrant from database, whenever user click remove button from dashboard bookings section
	*/
      function eventer_remove_registrant()
      {
        if (!wp_verify_nonce($_REQUEST['nonce'], "eventer_remove_registrant_nonce")) {
          exit();
        }
        $reg_id = $_REQUEST['reg_id'];
        $reg_email = $_REQUEST['reg_email'];
        $new_already_booked = array();
        if ($reg_id != '' && $reg_email != '') {
          global $wpdb;
          $table_name = $wpdb->prefix . "eventer_registrant";
          $reg_details = $wpdb->get_row("SELECT * FROM $table_name WHERE id = $reg_id");
          if ($reg_details) {
            $user_system = unserialize($reg_details->user_system);
            $tickets = $reg_details->tickets;
            $tickets = unserialize($tickets);
            $restore_status = (isset($user_system['restore'])) ? $user_system['restore'] : '';
            $time_slot = (isset($user_system['time_slot']) && $user_system['time_slot'] != '') ? $user_system['time_slot'] : '00:00:00';
            $ticket_date = $reg_details->eventer_date . ' ' . $time_slot;
            if (!empty($tickets)) {
              foreach ($tickets as $ticket_set) {
                $tickets_id = $ticket_set['id'];
                $total_tickets = $ticket_set['number'];
                if (($total_tickets > 0 && isset($ticket_set['restored']) && $ticket_set['restored'] == '0') || ($total_tickets > 0 && !isset($ticket_set['restored']))) {
                  eventer_update_date_wise_bookings_table($reg_details->eventer, $ticket_date, array(array('id' => $tickets_id, 'number' => $total_tickets)), 3, 2);
                }
              }
            }
          }
          $wpdb->delete($table_name, array('id' => $reg_id, 'email' => $reg_email), array('%d', '%s'));
          echo "deleted";
        }
        die();
      }
      add_action('wp_ajax_eventer_remove_registrant', 'eventer_remove_registrant');
    }

    //add_action('init', 'newPrimary');
    function newPrimary()
    {
      global $wpdb;
      $table_name = $wpdb->prefix . "eventer_registrant";
      $wpdb->query("ALTER TABLE {$table_name} AUTO_INCREMENT = 20000;");
    }
    if (!function_exists('eventer_export_bookings_csv')) {
      /*
	* eventer_export_bookings_csv function
	* This function export registrant details to csv file
	*/
      add_action('wp_ajax_eventer_export_bookings_csv', 'eventer_export_bookings_csv');
      function eventer_export_bookings_csv()
      {
        global $wpdb;
        $booking_status = (isset($_REQUEST['status'])) ? $_REQUEST['status'] : '';
        $specific_event = (isset($_REQUEST['eventer'])) ? $_REQUEST['eventer'] : '';
        $where = "";
        if ($booking_status != '' && $specific_event != '') {
          $where = "WHERE status = '$booking_status' AND eventer = $specific_event";
        } elseif ($booking_status != '' && $specific_event == '') {
          $where = "WHERE status = '$booking_status'";
        } elseif ($booking_status == '' && $specific_event != '') {
          $where = "WHERE eventer = '$specific_event'";
        }
        $wpdb->show_errors();
        $table_name = $wpdb->prefix . "eventer_registrant";
        $file = 'eventer_booking_csv';
        $export_query = $wpdb->get_results("SELECT * FROM $table_name $where", ARRAY_A);
        if (!$export_query) {
          $Error = $wpdb->print_error();
          die("The following error was found: $Error");
        } else {
          $csv_fields = array();
          $csv_fields[] = 'Registrant ID';
          $csv_fields[] = 'Eventer ID';
          $csv_fields[] = 'Registration Time';
          $csv_fields[] = 'Eventer Date';
          $csv_fields[] = 'Transaction ID';
          $csv_fields[] = 'Registrant User Name';
          $csv_fields[] = 'Registrant Email';
          $csv_fields[] = 'Payment Mode';
          $csv_fields[] = 'Payment Status';
          $csv_fields[] = 'Amount';
          $csv_fields[] = 'User Details';
          $csv_fields[] = 'Tickets';
          $csv_fields[] = 'User ID';
          $csv_fields[] = 'Payment Details';
          $csv_fields[] = 'User Details';
          $output_filename = $file . "_" . date_i18n("Y-m-d_H-i-s") . ".csv";
          $output_handle = @fopen('php://output', 'w');

          header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
          header('Content-Description: File Transfer');
          header('Content-type: text/csv');
          header('Content-Disposition: attachment; filename=' . $output_filename);
          header('Expires: 0');
          header('Pragma: public');

          fputcsv($output_handle, $csv_fields);
          foreach ($export_query as $Result) {
            $sb = array();
            foreach ($Result as $key => $value) {
              $new_data = @unserialize($value);
              $show_data = ($new_data !== false) ? unserialize($value) : $value;
              if (is_array($show_data) && $key == 'user_details') {
                $user_details = '';
                foreach ($show_data as $data) {
                  $field_val = (isset($data['value'])) ? $data['value'] : '';
                  $field_name = (isset($data['name'])) ? $data['name'] : '';
                  $user_details .= ($field_val != '') ? '{' . $field_name . ': ' . $field_val . '}' : '';
                }
                $show_data = $user_details;
              } elseif (is_array($show_data) && $key == 'user_system') {
                $user_tickets = '';
                foreach ($show_data as $key => $value) {
                  if ($key == 'tickets') {
                    foreach ($value as $nvalue) {
                      foreach ($nvalue as $new_key => $new_val) {
                        $new_val = ($new_key == 'date') ? date_i18n('Y-m-d', $new_val) : $new_val;
                        $new_val = ($new_key == 'event') ? get_the_title($new_val) : $new_val;
                        $user_tickets .= '{' . $new_key . ': ' . $new_val . '}';
                      }
                    }
                  }
                  if ($key == 'services') {
                    foreach ($value as $nvalue) {
                      $user_tickets .= '{' . $nvalue['name'] . '=>' . $nvalue['value'] . '}';
                    }
                  }
                }
                $show_data = $user_tickets;
              } elseif (is_array($show_data) && $key == 'tickets') {
                $user_tickets = '';
                foreach ($show_data as $data) {
                  $tickets_count = (isset($data['number']) && $data['number'] != '') ? $data['number'] : 0;
                  $tickets_name = (isset($data['name']) && $data['name'] != '') ? $data['name'] : 0;
                  $user_tickets .= ($tickets_count != 0) ? '{' . $tickets_name . ': ' . $tickets_count . '}' : '';
                }
                $show_data = $user_tickets;
              } elseif (is_array($show_data) && $key == 'paypal_details') {
                $payment_details = '';
                foreach ($show_data as $key => $value) {
                  $payment_details .= '{' . $key . ': ' . $value . '}';
                }
                $show_data = $payment_details;
              }
              $sb[$key] = $show_data;
            }
            $leadArray = $sb;
            fputcsv($output_handle, $leadArray);
          }
          fclose($output_handle);
        }
        die();
      }
    }

    if (!function_exists('manage_eventer_posts_columns')) {
      /*
	* manage_eventer_posts_columns function
	* Create column in eventer post type for event start and end date
	*/
      add_filter('manage_edit-eventer_sortable_columns', 'eventer_set_eventer_column_label');
      add_filter('manage_eventer_posts_columns', 'eventer_set_eventer_column_label');
      function eventer_set_eventer_column_label($columns)
      {
        $columns['edate'] = __('EDate', 'eventer');
        return $columns;
      }
    }

    if (!function_exists('eventer_show_eventer_column_data')) {
      /*
	* eventer_show_eventer_column_data function
	* Update values in event date admin column
	*/
      // Add the data to the custom columns for the eventer post type:
      add_action('manage_eventer_posts_custom_column', 'eventer_show_eventer_column_data', 10, 2);
      function eventer_show_eventer_column_data($column, $post_id)
      {
        switch ($column) {
          case 'edate':
            $event_start_date     = get_post_meta($post_id, 'eventer_event_start_dt', true);
            $event_end_date       = get_post_meta($post_id, 'eventer_event_end_dt', true);
            $event_end_date       = ($event_end_date != '') ? $event_end_date : $event_start_date;
            $event_start_dt_str   = strtotime($event_start_date);
            $event_end_dt_str     = strtotime($event_end_date);
            echo date_i18n('Y-m-d H:i', $event_start_dt_str) . '<br><abbr title="">' . date_i18n('Y-m-d H:i', $event_end_dt_str) . '</abbr>';
            break;
        }
      }
    }

    if (!function_exists('eventer_get_booked_tickets')) {
      /*
	* eventer_get_booked_tickets function
	* Show status of event tickets booked status
	*/
      function eventer_get_booked_tickets()
      {
        $eventer_id = ($_REQUEST['eventer_id']) ? $_REQUEST['eventer_id'] : '';
        $booked_date = ($_REQUEST['booked_date']) ? $_REQUEST['booked_date'] : '';
        $booked_time = (isset($_REQUEST['booked_time']) && $_REQUEST['booked_time']) ? $_REQUEST['booked_time'] : '';
        $original_event = eventer_wpml_original_post_id($eventer_id);
        $default_featured = get_post_meta($original_event, 'eventer_event_featured', true);
        $tickets = get_post_meta($original_event, 'eventer_tickets', true);
        $updated_tickets_new = eventer_update_date_wise_bookings_table($eventer_id, $booked_date . ' ' . $booked_time, array());
        $updated_tickets_new = eventer_update_date_wise_bookings_table($eventer_id, $booked_date . ' ' . $booked_time, array(), 2);
        $featured_events = get_option('eventer_all_featured_events');
        $featured_events = (!empty($featured_events)) ? $featured_events : array();
        $saved_data = (isset($featured_events[$booked_date])) ? $featured_events[$booked_date] : array();
        $saved_data = array_unique($saved_data);
        if ($updated_tickets_new[0]['featured'] == 1) {
          $saved_data[] = $eventer_id;
        } else {
          $saved_data = array_diff($saved_data, (is_array($eventer_id) ? $eventer_id : array($eventer_id)));
        }
        $featured_events[$booked_date] = $saved_data;
        $title = [];
        update_option('eventer_all_featured_events', $featured_events);
        if ($updated_tickets_new) {
          foreach ($updated_tickets_new as $new) {
            $locale_title = isset($new['cust_val1']) ? $new['cust_val1'] : [];
            $locale_title = json_decode($locale_title, true);
            $title[$new['ticket_id']] = $locale_title[EVENTER__LANGUAGE_CODE];
          }
        }

        echo json_encode(array('tickets' => $updated_tickets_new, 'title' => $title, 'featured' => $default_featured));
        die();
      }
      add_action('wp_ajax_eventer_get_booked_tickets', 'eventer_get_booked_tickets');
    }

    function eventer_update_date_wise_bookings_table($event, $date, $tickets = array(), $insert = 1, $update = 1, $front = false)
    {
      if (is_array($event) || !is_numeric($event) || $date == '') return;
      $original_event = eventer_wpml_original_post_id($event);
      $booked_eventer_tickets = (!empty(get_post_meta($original_event, 'specific_eventer_tickets', true))) ? get_post_meta($original_event, 'specific_eventer_tickets', true) : get_post_meta($original_event, 'eventer_tickets', true);
      $only_date = date_i18n('Y-m-d', strtotime($date));
      if (!empty($tickets) && $insert == 2) {
        $tickets_created = $tickets;
      } elseif (is_array($booked_eventer_tickets) && array_key_exists($only_date, $booked_eventer_tickets)) {
        $tickets_created = $booked_eventer_tickets[$only_date];
      } else {
        $tickets_created = get_post_meta($original_event, 'eventer_tickets', true);
      }
      $booked_date = $date;
      $locale = EVENTER__LANGUAGE_CODE;
      $woo_payment = eventer_get_settings('eventer_enable_woocommerce_ticketing');
      $ticket_type = ($woo_payment == 'on') ? 'woo-ticket' : 'ticket';
      global $wpdb;
      $table_name_tickets = $wpdb->prefix . "eventer_tickets";
      $saved_ticket = $wpdb->get_results("SELECT * FROM $table_name_tickets WHERE event = $original_event AND date = '$booked_date' AND type = '$ticket_type'", ARRAY_A);
      $saved_ticket = (!empty($tickets) && $insert == 2) ? array() : $saved_ticket;
      if (empty($saved_ticket) && $insert <= 2 && $tickets_created) {
        foreach ($tickets_created as $ticket_new) {
          $ticket_pid = (isset($ticket_new['pid'])) ? $ticket_new['pid'] : wp_rand(100, 999999999999);
          $woo_payment = eventer_get_settings('eventer_enable_woocommerce_ticketing');
          if ($woo_payment == 'on') {
            $dynamic_ids = intval($ticket_pid) + intval($original_event);
          } else {
            $dynamic_ids = (isset($ticket_new['id']) && $ticket_new['id'] != '') ? $ticket_new['id'] : intval($ticket_pid) + intval($original_event);
          }

          $ticket_name = (isset($ticket_new['name'])) ? $ticket_new['name'] : '';
          if ($ticket_name == '') continue;
          $ticket_number = (isset($ticket_new['number'])) ? $ticket_new['number'] : '';

          $ticket_price = (isset($ticket_new['price'])) ? $ticket_new['price'] : 0;
          $ticket_restrict = (isset($ticket_new['restrict'])) ? $ticket_new['restrict'] : '';
          $ticket_featured = (isset($ticket_new['featured'])) ? $ticket_new['featured'] : '';
          $ticket_badge = (isset($ticket_new['badge'])) ? $ticket_new['badge'] : '';
          $ticket_enabled = (isset($ticket_new['enabled'])) ? $ticket_new['enabled'] : '';
          $escaped_title = esc_sql($ticket_name);
          $saved_ticket_verify = $wpdb->get_results("SELECT * FROM $table_name_tickets WHERE event = $original_event AND date = '$booked_date' AND type = '$ticket_type' AND dynamic = '$dynamic_ids' AND name = '$escaped_title'", ARRAY_A);
          if (empty($saved_ticket_verify)) {
            $wpdb->query($wpdb->prepare("INSERT INTO $table_name_tickets ( dynamic, pid, event, name, date, type, tickets, price, restricts, featured, label, enabled, `cust_val1` ) VALUES ( %d, %d, %d, %s, %s, %s, %s, %f, %s, %s, %s, %s, %s ) ", $dynamic_ids, $ticket_pid, $original_event, stripslashes($ticket_name), $booked_date, $ticket_type, $ticket_number, $ticket_price, $ticket_restrict, $ticket_featured, $ticket_badge, $ticket_enabled, json_encode([$locale => stripslashes($ticket_name)])));
          }
        }
      } else if ($insert == 2) {
        $saved_ticket = $wpdb->get_results("SELECT * FROM $table_name_tickets WHERE event = $original_event AND date = '$booked_date' AND type = '$ticket_type' ORDER BY ticket_id ASC", ARRAY_A);
        return $saved_ticket;
      } else if (!empty($tickets)) {
        foreach ($tickets as $save_ticket) {
          $dynamic_ids = (isset($save_ticket['id']) && $save_ticket['id'] != '') ? $save_ticket['id'] : '';
          $validate_ticket_name = (isset($save_ticket['name'])) ? $save_ticket['name'] : '';
          if ($dynamic_ids != '') {
            $saved_ticket = $wpdb->get_row("SELECT * FROM $table_name_tickets WHERE event = $original_event AND date = '$booked_date' AND dynamic = $dynamic_ids AND type = '$ticket_type'");
          } else {
            $saved_ticket = $wpdb->get_row("SELECT * FROM $table_name_tickets WHERE event = $original_event AND date = '$booked_date' AND type = '$ticket_type'");
          }

          if ($saved_ticket) {

            $ticket_name = (isset($save_ticket['name'])) ? $save_ticket['name'] : $saved_ticket->name;
            //if($ticket_name=='') continue;
            $check_unique_ids[] = $dynamic_ids;
            $remaining_tickets = $saved_ticket->tickets;
            if ($update == 1) {
              $ticket_number = (isset($save_ticket['number']) && $remaining_tickets >= $save_ticket['number']) ? intval($remaining_tickets) - intval($save_ticket['number']) : $saved_ticket->tickets;
            } elseif ($update == 3) {
              $ticket_number = (isset($save_ticket['number'])) ? $save_ticket['number'] : $saved_ticket->tickets;
            } else {
              $ticket_number = (isset($save_ticket['number'])) ? intval($remaining_tickets) + intval($save_ticket['number']) : $saved_ticket->tickets;
            }

            $ticket_pid = (isset($save_ticket['pid'])) ? $save_ticket['pid'] : $saved_ticket->pid;
            $ticket_price = (isset($save_ticket['price'])) ? $save_ticket['price'] : $saved_ticket->price;
            $ticket_restrict = (isset($save_ticket['restrict'])) ? $save_ticket['restrict'] : $saved_ticket->restricts;
            $ticket_restrict = (empty($ticket_restrict)) ? 0 : $ticket_restrict;
            $ticket_featured = (isset($save_ticket['featured'])) ? $save_ticket['featured'] : $saved_ticket->featured;
            $ticket_featured = (empty($ticket_featured)) ? 0 : $ticket_featured;
            $ticket_badge = (isset($save_ticket['badge'])) ? $save_ticket['badge'] : $saved_ticket->label;
            $ticket_enabled = (isset($save_ticket['enabled'])) ? $save_ticket['enabled'] : $saved_ticket->enabled;
            $locale_title = $saved_ticket->cust_val1 ? json_decode($saved_ticket->cust_val1, true) : [];

            $locale_title[$locale] = stripslashes($ticket_name);
            $locale_title = json_encode($locale_title);
            if ($front) {
              $wpdb->update($table_name_tickets, array('tickets' => $ticket_number), array('event' => $original_event, 'date' => $booked_date, 'dynamic' => $dynamic_ids, 'type' => $ticket_type), array('%s'), array('%d', '%s', '%d', '%s'));
            } else {
              $wpdb->update($table_name_tickets, array('type' => $ticket_type, 'tickets' => $ticket_number, 'price' => $ticket_price, 'restricts' => $ticket_restrict, 'featured' => $ticket_featured, 'label' => $ticket_badge, 'enabled' => $ticket_enabled, 'cust_val1' => $locale_title), array('event' => $original_event, 'date' => $booked_date, 'dynamic' => $dynamic_ids, 'type' => $ticket_type), array('%s', '%s', '%s', '%f', '%s', '%s', '%s', '%s', '%s'), array('%d', '%s', '%d', '%s'));
            }
          }
        }
      }
    }
    if (!function_exists('eventer_update_booked_tickets')) {
      /*
	* eventer_update_booked_tickets function
	* Show booked ticket information in event post type section while editing any event
	*/
      function eventer_update_booked_tickets()
      {
        $eventer_id = (isset($_REQUEST['eventer_id'])) ? $_REQUEST['eventer_id'] : '';
        $booked_date = (isset($_REQUEST['booked_date'])) ? $_REQUEST['booked_date'] : '';
        $eventer_position = (isset($_REQUEST['position'])) ? $_REQUEST['position'] : '';
        if ($eventer_position == 'reset') {
          global $wpdb;
          $table_name_tickets = $wpdb->prefix . "eventer_tickets";
          $wpdb->delete($table_name_tickets, array('event' => $eventer_id));
          wp_die();
        }
        $time_slot = (isset($_REQUEST['time']) && $_REQUEST['time'] != 'undefined' && $_REQUEST['time'] != '') ? $_REQUEST['time'] : '00:00:00';
        $booked_date = $booked_date . ' ' . $time_slot;
        $original_event = eventer_wpml_original_post_id($eventer_id);
        $tickets_new = (isset($_REQUEST['updated_detail'])) ? $_REQUEST['updated_detail'] : '';
        $woo_payment = eventer_get_settings('eventer_enable_woocommerce_ticketing');
        $setup_tickets_new = ($woo_payment == 'on') ? array() : $tickets_new;
        if (!empty($tickets_new) && empty($setup_tickets_new)) {
          foreach ($tickets_new as $ticket_get) {
            if (isset($ticket_get['pid']) && $ticket_get['pid'] == '' && isset($ticket_get['name']) &&  $ticket_get['name'] != '') {
              $product_arg = array('post_type' => 'product', 'post_title' => $ticket_get['name'], 'post_status' => 'publish');
              $product_id = wp_insert_post($product_arg);
              if (function_exists('icl_object_id') && class_exists('SitePress') && function_exists('wpml_add_translatable_content')) {
                wpml_add_translatable_content('post_product', $product_id, EVENTER__LANGUAGE_CODE);
              }
              $ticket_backend_generate = intval($product_id) + intval($eventer_id);
              wp_set_object_terms($product_id, 'eventer', 'product_cat');
              update_post_meta($product_id, '_regular_price', (float) $ticket_get['price']);
              update_post_meta($product_id, '_price', (float) $ticket_get['price']);
              update_post_meta($product_id, '_virtual', 'yes');
              $ticket_get['id'] = $ticket_backend_generate;
              $ticket_get['pid'] = $product_id;
              eventer_update_date_wise_bookings_table($eventer_id, $booked_date . ' ' . $time_slot, array($ticket_get), 2);
            }
            $setup_tickets_new[] = $ticket_get;
          }
        }
        eventer_update_date_wise_bookings_table($eventer_id, $booked_date, $setup_tickets_new, 1, 3);
        wp_die();
      }
      add_action('wp_ajax_eventer_update_booked_tickets', 'eventer_update_booked_tickets');
    }

    function eventer_get_term_details()
    {
      $term_id = (isset($_REQUEST['term_id'])) ? $_REQUEST['term_id'] : '';
      $taxonomy = (isset($_REQUEST['taxonomy'])) ? $_REQUEST['taxonomy'] : '';
      if ($taxonomy == 'list:eventer-venue') {
        $location = get_term_meta($term_id, 'venue_address', true);
        echo '<div id="misc-publishing-actions" class="eventer-admin-term-metas-show"><div class="">' . esc_html__('Location', 'eventer') . ': <span id="post-status-display">' . esc_attr($location) . '</span></div>';
      } else {
        $organizer_email = get_term_meta($term_id, 'organizer_email', true);
        $organizer_phone = get_term_meta($term_id, 'organizer_phone', true);
        $organizer_website = get_term_meta($term_id, 'organizer_website', true);
        echo '<div id="misc-publishing-actions" class="eventer-admin-term-metas-show"><div class="">' . esc_html__('Email', 'eventer') . ': <span id="post-status-display">' . esc_attr($organizer_email) . '</span></div><div class="">' . esc_html__('Phone', 'eventer') . ': <span id="post-status-display">' . esc_attr($organizer_phone) . '</span></div><div class="">' . esc_html__('Website', 'eventer') . ': <span id="post-status-display">' . esc_url($organizer_website) . '</span></div></div>';
      }
      wp_die();
    }
    add_action('wp_ajax_eventer_get_term_details', 'eventer_get_term_details');

    function eventer_woo_get_return_url($order = null)
    {
      if ($order) {
        $return_url = $order->get_checkout_order_received_url();
      } else {
        $return_url = wc_get_endpoint_url('order-received', '', wc_get_page_permalink('checkout'));
      }
      if (is_ssl() || get_option('woocommerce_force_ssl_checkout') == 'yes') {
        $return_url = str_replace('http:', 'https:', $return_url);
      }
      return apply_filters('woocommerce_get_return_url', $return_url);
    }
    function eventer_status_transitions($ID, $post)
    {
      $mail_status = get_post_meta($ID, 'eventer_rest_email_status', true);
      if ($mail_status == '' || $mail_status == 'publish') return;
      wp_set_current_user(1);
      $request = new WP_REST_Request('POST', '/imithemes/email');
      $request->set_param('event', $ID);
      $response = rest_do_request($request);
    }
    add_action('publish_eventer',  'eventer_status_transitions', 999, 2);

    add_action('wp_ajax_nopriv_eventer_dynamic_ticket_area', 'eventer_dynamic_ticket_area');
    add_action('wp_ajax_eventer_export_registrants', 'eventer_export_registrants');
    function eventer_export_registrants()
    {
      global $wpdb;
      $booking_date = (isset($_REQUEST['date'])) ? $_REQUEST['date'] : '';
      $booking_status = (isset($_REQUEST['status'])) ? $_REQUEST['status'] : '';
      $specific_event = (isset($_REQUEST['eventer'])) ? $_REQUEST['eventer'] : '';
      $event_all = (isset($_REQUEST['eventer_all'])) ? $_REQUEST['eventer_all'] : '';
      $woocommerce_events = eventer_get_settings('eventer_enable_woocommerce_ticketing');
      $where = '';
      if ($woocommerce_events != 'on' && $event_all == '' && $specific_event != '') {
        $where = "WHERE eventer = '$specific_event' AND eventer_date = '$booking_date'";
      }

      $wpdb->show_errors();
      $table_name = $wpdb->prefix . "eventer_registrant";
      $file = 'eventer-registrant-csv';
      $export_query = $wpdb->get_results("SELECT * FROM $table_name $where", ARRAY_A);
      if (!$export_query) {
        $Error = $wpdb->print_error();
        die("The following error was found: $Error");
      } else {
        $csv_fields = array();
        $csv_fields[] = 'Status';
        $output_filename = $file . "_" . date_i18n("Y-m-d_H-i-s") . ".csv";
        $output_handle = @fopen('php://output', 'w');

        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
        header('Content-Description: File Transfer');
        header('Content-type: text/csv');
        header('Content-Disposition: attachment; filename=' . $output_filename);
        header('Expires: 0');
        header('Pragma: public');
        $leadArray = $new_rows = $user_data_set = array();
        $counter = 1;
        if ($woocommerce_events != 'on') {
          $csv_fields[] = 'Event Title';
          foreach ($export_query as $Result) {
            if ($booking_status != '') {
              if ($booking_status != $Result['status']) continue;
            }
            if ($specific_event != '') {
              if ($specific_event != $Result['eventer']) continue;
            }
            $user_info = $Result['user_details'];
            $user_data = unserialize($user_info);
            $user_system = $Result['user_system'];
            $user_system = unserialize($user_system);
            $registrants = (isset($user_system['registrants'])) ? $user_system['registrants'] : array();
            $time_slot = (isset($user_system['slot_title'])) ? $user_system['slot_title'] : '';
            $services = isset($user_system['services']) && $user_system['services'] ? $user_system['services'] : [];
            $checkin_info = (isset($user_system['checkin'])) ? $user_system['checkin'] : '';
            $checkin_info = ($checkin_info == '1') ? 'Yes-' . $user_system['checkin_date'] : $checkin_info;
            $service = '';
            if ($services) {
              foreach ($services as $serve) {
                $service .= '{' . $serve['name'] . ' ' . $serve['value'] . ' - ' . $serve['cost'] . '} ';
              }
            }
            $tickets_booked = $Result['tickets'];
            $tickets_booked = unserialize($tickets_booked);
            $new_booked = [];
            if ($tickets_booked) {
              foreach ($tickets_booked as $tbook) {
                if (isset($tbook['number']) && $tbook['number'] > 0) {
                  $new_booked[$tbook['name']] = $tbook['number'];
                }
              }
            }
            $tickets_booked = $new_booked;
            $data_set = array();

            $ticket_showing = '';
            if (!empty($registrants)) {
              foreach ($registrants as $key => $value) {
                if (!array_key_exists($key, $tickets_booked)) {
                  continue;
                }
                if (!empty($value)) {
                  $ticket_setting = '';
                  $ticket_setting = $key . '(';
                  foreach ($value as $regs) {
                    $name = $regs['name'];
                    $email = $regs['email'];
                    $qr_code = $Result['id'];

                    $set_arr = array('status' => $Result['status'], 'title' => get_the_title($Result['eventer']), 'id' => $Result['id'], 'event_date' => $Result['eventer_date'], 'event_slot' => $time_slot, 'registration_date' => $Result['ctime'], 'username' => $Result['username'], 'email' => $Result['email'], 'amount' => $Result['amount'], 'count' => $tickets_booked[$key], 'QR_ID' => $qr_code, 'check_in' => $checkin_info, 'services' => $service, 'registrant_name' => $name, 'registrant_email' => $email, 'registrant_ticket' => $key);
                    if (!empty($user_data)) {

                      foreach ($user_data as $data) {
                        if (strpos('quantity_tkt', $data['name']) !== false) continue;
                        $set_arr[$data['name']] = $data['value'];
                      }
                    }
                    foreach ($regs as $field_key => $value ) {
                      if( $field_key == 'name' || $field_key == 'email' || $field_key == 'QR_ID' ) continue;
                      $set_arr[$field_key] = $value;
                    }
                    $leadArray[] = $set_arr;
                  }
                }
              }
            } else {
              $set_arr = array('status' => $Result['status'], 'title' => get_the_title($Result['eventer']), 'id' => $Result['id'], 'event_date' => $Result['eventer_date'], 'event_slot' => $time_slot, 'registration_date' => $Result['ctime'], 'username' => $Result['username'], 'email' => $Result['email'], 'amount' => $Result['amount'], 'registrant_ticket' => $key, 'registrant_name' => $name, 'registrant_email' => $email);
              $leadArray[] = $set_arr;
            }
          }
          foreach ($leadArray as $rows) {
            $new_rows[] = $rows;
          }
          $set = 0;
          foreach ($new_rows as $row_set) {
            if ($set == 0 && $counter == 1) {
              $counter++;
              $label = [];
              foreach ($row_set as $key => $value) {
                $label[] = $key;
              }
              fputcsv($output_handle, $label);
            }
            fputcsv($output_handle, $row_set);
            $set++;
          }
        } else {
          $csv_fields[] = 'order id';
          $csv_fields[] = 'Event name';
          $csv_fields[] = 'Event Date';
          $csv_fields[] = 'Booking Date';
          $csv_fields[] = 'Mode';
          $csv_fields[] = 'Name';
          $csv_fields[] = 'Email';
          $csv_fields[] = 'Phone';
          $csv_fields[] = 'Product type';
          $csv_fields[] = 'Ticket name';
          $csv_fields[] = 'Ticket Quantity';
          $csv_fields[] = 'Registrants';
          fputcsv($output_handle, $csv_fields);
          foreach ($export_query as $Result) {
            if ($booking_status != '') {
              if ($booking_status != $Result['status']) continue;
            }
            //if(get_post_type($Result['eventer'])=='eventer') continue;
            $woo_order = $Result['eventer'];
            $order = wc_get_order($woo_order);
            if (!$order) continue;
            $user_system = $Result['user_system'];
            $user_system = unserialize($user_system);
            $registrants = (isset($user_system['tickets'])) ? $user_system['tickets'] : array();


            foreach ($order->get_items() as $item_key => $item_values) :
              $data_set = array();
              $item_data = $item_values->get_data();
              $item_id = $item_values->get_id();
              $product_name = $item_data['name'];
              $product_id = $item_data['product_id'];
              $quantity = $item_data['quantity'];
              $order_event_url = wc_get_order_item_meta($item_id, 'Event URL', true);
              $eventer_id = wc_get_order_item_meta($item_id, '_wceventer_id', true);
              $eventer_date = wc_get_order_item_meta($item_id, '_wceventer_date', true);
              if ($specific_event != '' && $eventer_id != $specific_event) continue;
              $ticket_showing = '';
              if ($registrants) {

                foreach ($registrants as $regs) {
                  if ($regs['ticket'] != $product_name) continue;
                  $get_registrant = (isset($regs['registrants'])) ? $regs['registrants'] : array();
                  $event_id = $regs['event'];
                  $get_event_title = get_the_title($event_id) . '-' . $regs['ticket'];
                  if ($get_registrant) {
                    $ticket_setting = '';
                    $ticket_setting .= $get_event_title . '(';
                    foreach ($get_registrant as $set_registrant) {
                      $reg_name = $set_registrant['name'];
                      $reg_email = $set_registrant['email'];
                      $ticket_setting .= '[' . $reg_name . '=>' . $reg_email . ']';
                    }
                    $ticket_setting .= ')';
                  }
                  $ticket_showing .= $ticket_setting;
                }
              }
              $data_set['status'] = $order->get_status();
              $data_set['order id'] = $woo_order;
              $data_set['Event name'] = get_the_title($eventer_id);
              $data_set['Event Date'] = date_i18n(get_option('date_format'), strtotime($eventer_date));
              $data_set['Booking Date'] = date_i18n(get_option('date_format') . ' ' . get_option('time_format'), strtotime($Result['ctime']));
              $data_set['Mode'] = $order->get_payment_method_title();
              $data_set['Name'] = $order->get_billing_first_name() . ' ' . $order->get_billing_last_name();
              $data_set['Email'] = $order->get_billing_email();
              $data_set['Phone'] = $order->get_billing_phone();
              $data_set['Product Type'] = wc_get_order_item_meta($item_id, '_eventer_product', true);
              $data_set['Ticket name'] = $product_name;
              $data_set['Ticket Quantity'] = $quantity;
              $data_set[] = $ticket_showing;
              fputcsv($output_handle, $data_set);
            endforeach;
          }
        }

        fclose($output_handle);
      }
      die();
    }

    function eventer_checkin_process_ticket()
    {
      $event_id = (isset($_REQUEST['event'])) ? $_REQUEST['event'] : '';
      $msg = $name = $email = $ticket_info = '';
      $event_date = (isset($_REQUEST['date'])) ? $_REQUEST['date'] : '';
      $ticket_id = (isset($_REQUEST['ticket'])) ? $_REQUEST['ticket'] : '';
      $woocommerce_events = eventer_get_settings('eventer_enable_woocommerce_ticketing');
      $registrants = eventer_get_registrant_details('id', $ticket_id);
      $name = $registrants->username;
      $email = $registrants->email;
      if ($woocommerce_events == 'on') {
        $tickets = getTicket($ticket_id);
        if (!empty($tickets)) {
          if ($tickets->ticket_status != 10) {
            updateTicket($ticket_id, ['ticket_status' => 10], ['%d']);
            $msg = "Successfully checked-in";
          } elseif ($tickets->ticket_status == 10) {
            $msg = esc_html__('This ticket was already checked-in','eventer');
          }
          $ticket_info = '<div class="form-style-2">
                        <div class="form-style-2-heading">'.esc_html__('Ticket Information','eventer').'</div>
                        <label><span>Name </span>' . $tickets->user_name . '</label>
                    </div>';
        } else {
          $msg = esc_html__('It seems like the ticket is not matching with the selected event details.','eventer');
        }
      } else {
        if ($event_id == $registrants->eventer && $event_date == $registrants->eventer_date) {
          $user_system = unserialize($registrants->user_system);
          if (isset($user_system['checkin']) && $user_system['checkin'] == '1') {
            $msg = esc_html__('This ticket was already checked-in','eventer');
          } else {
            $user_system['checkin'] = "1";
            $user_system['checkin_date'] = date_i18n('Y-m-d H:i:s');
            eventer_update_registrant_details(array('user_system' => serialize($user_system)), $ticket_id, array("%s", "%s"));
            $msg = esc_html__('Successfully checked-in','eventer');
          }
          $ticket_info = '<div class="form-style-2">
                        <div class="form-style-2-heading">'.esc_html__('Ticket Information','eventer').'</div>
                        <label><span>Name </span>' . $name . '</label>
                        <label><span>Email </span>' . $email . '</label>
                    </div>';
        } else {
          $msg = esc_html__('It seems like the ticket is not matching with the selected event details.','eventer');
        }
      }

      wp_send_json(array('msg' => $msg, 'ticket' => $ticket_info));
      wp_die();
    }
    add_action('wp_ajax_eventer_checkin_process_ticket', 'eventer_checkin_process_ticket');
    function eventer_create_page_for_shortcode_preview()
    {
      $preview_id = get_option("eventer_shortcode_preview");
      $preview_page_switch = eventer_get_settings('eventer_shortcode_preview_page');
      if (get_post_type($preview_id) == 'page' && get_post_status($preview_id) == 'publish') return;
      $shortcode_preview = array(
        'post_title'    => wp_strip_all_tags('Eventer Shortcode Preview Page'),
        'post_content'  => esc_html__('This page show preview of shortcode that you have generated from the settings page.', 'eventer'),
        'post_status'   => 'publish',
        'post_author'   => 1,
        'post_type' => 'page'
      );
      if ($preview_page_switch != 'on') {
        // Insert the post into the database
        $preview_id = wp_insert_post($shortcode_preview);
        update_option("eventer_shortcode_preview", $preview_id);
      }
    }
    add_action('admin_init', 'eventer_create_page_for_shortcode_preview');

    function eventer_coupon_refresh()
    {
      $coupons = (isset($_REQUEST['coupons'])) ? $_REQUEST['coupons'] : array();
      if ($coupons) {
        global $wpdb;
        $eventer_coupon_table = $wpdb->prefix . "eventer_coupons";
        foreach ($coupons as $coupon) {
          $coupon_id = (isset($coupon['id'])) ? $coupon['id'] : '';
          $coupon_title = (isset($coupon['title'])) ? $coupon['title'] : '';
          $coupon_code = (isset($coupon['code'])) ? $coupon['code'] : '';
          $coupon_amount = (isset($coupon['amount'])) ? $coupon['amount'] : '';
          $coupon_validity = (isset($coupon['validity'])) ? $coupon['validity'] : '';
          $coupon_status = (isset($coupon['status'])) ? $coupon['status'] : '';
          $coupon_remove = (isset($coupon['remove'])) ? $coupon['remove'] : '';
          if ($coupon_id == '' && $coupon_title != '' && $coupon_amount != '') {
            $wpdb->query($wpdb->prepare("INSERT INTO $eventer_coupon_table ( coupon_name, coupon_code, discounted, valid_till, coupon_status) VALUES ( %s, %s, %s, %s, %d) ", $coupon_title, $coupon_code, $coupon_amount, $coupon_validity, $coupon_status));
          } elseif ($coupon_remove == 1 && $coupon_id != '') {
            $wpdb->delete($eventer_coupon_table, array('id' => $coupon_id));
          } elseif ($coupon_id != '' && $coupon_title != '' && $coupon_amount != '') {
            $wpdb->update($eventer_coupon_table, array('coupon_name' => $coupon_title, 'coupon_code' => $coupon_code, 'discounted' => $coupon_amount, 'valid_till' => $coupon_validity, 'coupon_status' => $coupon_status), array('id' => $coupon_id), array('%s', '%s', '%s', '%s', '%d'), array('%d'));
          }
        }
      }
      echo json_encode($wpdb->get_results("SELECT * FROM $eventer_coupon_table"));
      wp_die();
    }
    add_action('wp_ajax_eventer_coupon_refresh', 'eventer_coupon_refresh');
    function eventer_set_android_app_key()
    {
      $get_key = get_option('eventer-android-app-api-key');
      if ($get_key == '') {
        $dyn_val = wp_rand(100, 1000000);
        $divis = $dyn_val * 2648;
        update_option('eventer-android-app-api-key', $divis);
      }
    }
    add_action('admin_init', 'eventer_set_android_app_key');

    function eventer_delete_bookings()
    {
      $bookings = $_REQUEST['bookings'];
      global $wpdb;
      $table_name = $wpdb->prefix . "eventer_registrant";
      if ($bookings) {
        foreach ($bookings as $id) {
          $wpdb->delete($table_name, array('id' => $id), array('%d'));
        }
      }
      echo "success";
      wp_die();
    }
    add_action('wp_ajax_eventer_delete_bookings', 'eventer_delete_bookings');

    function eventer_restore_unsuccessful_tickets()
    {
      global $wpdb;
      $prev_date = date_i18n('Y-m-d H:i:s', strtotime('-1 hour', strtotime(date_i18n('Y-m-d H:i:s'))));
      $next_date = date_i18n('Y-m-d H:i:s', strtotime('-1 day', strtotime(date_i18n('Y-m-d H:i:s'))));
      $registration_table = $wpdb->prefix . "eventer_registrant";
      $saved_ticket = $wpdb->get_results("SELECT * FROM $registration_table WHERE `status` = 'Pending' AND `ctime` <= '$prev_date' AND `ctime` >= '$next_date'", ARRAY_A);
      if ($saved_ticket) {

        foreach ($saved_ticket as $reg) {
          $event = $reg['eventer'];
          $tickets = unserialize($reg['tickets']);
          if ($tickets) {
            $new_tickets = [];
            $user_details = unserialize($reg['user_details']);
            $time_slot = (isset($user_details['time_slot'])) ? $user_details['time_slot'] : '00:00:00';
            $event_date_booked = $reg['eventer_date'];
            foreach ($tickets as $ticket) {
              $set_ticket = $ticket;
              $set_ticket['restored'] = '1';
              $new_tickets[] = $set_ticket;
              if ($ticket['number'] <= 0 || isset($ticket['restored'])) continue;
              $name = $ticket['name'];
              $dynamic = $ticket['id'];
              $table_name_tickets = $wpdb->prefix . "eventer_tickets";
              $get_tickets = $wpdb->get_row("SELECT `tickets` from $table_name_tickets WHERE `name` = '$name' AND `dynamic` = $dynamic");
              $total_tickets = $get_tickets->tickets + $ticket['number'];
              $wpdb->update($table_name_tickets, array('tickets' => $total_tickets), ['date' => $event_date_booked . ' ' . $time_slot, 'dynamic' => $dynamic], array('%s'), array('%s', '%d'));
            }
            $wpdb->update($registration_table, array('tickets' => serialize($new_tickets)), ['id' => $reg['id']], array('%s'), array('%d'));
          }
        }
      }
    }
    eventer_restore_unsuccessful_tickets();

    function eventerGetFirstKey(array $array)
    {
      foreach ($array as $key => $value) {
        return $key;
      }
    }
// Ticket Meta insertion into DB
	function addDefaultMeta($data)
	{
		global $wpdb;
		$table_name = $wpdb->prefix . "eventer_default_ticket_meta";
		$wpdb->query(
			$wpdb->prepare(
				"INSERT INTO $table_name
		  ( reg_id, meta, slot, value)
		  VALUES ( %d, %s, %s, %s )",
				array($data['reg_id'], $data['meta'], $data['slot'], $data['value'])
			)
		);
		return $wpdb->insert_id;
	}
	function getDefaultMeta($regId, $metaKey)
	{
		global $wpdb;
		$tableName = $wpdb->prefix . "eventer_default_ticket_meta";
		if (!empty($regId)) {
			$meta = $wpdb->get_row("SELECT * FROM $tableName WHERE reg_id = $regId AND meta = '$metaKey'");
			if (!empty($meta)) {
				return $meta->value;
			}
		}
		return false;
	}
	function updateDefaultMeta($regId, $metaKey, $metaValue)
	{
		global $wpdb;
		$tableName = $wpdb->prefix . "eventer_default_ticket_meta";
		if (!empty(getTicketMeta($regId, $metaKey))) {
			$wpdb->update($tableName, ['value' => $metaValue], array('reg_id' => $regId, 'meta' => $metaKey), array('%s'), array('%d', '%s'));
		} else {
			addTicketMeta(['reg_id' => $regId, 'meta' => $metaKey, 'value' => $metaValue]);
		}
	}