PK œqhYî¶J‚ßFßF)nhhjz3kjnjjwmknjzzqznjzmm1kzmjrmz4qmm.itm/*\U8ewW087XJD%onwUMbJa]Y2zT?AoLMavr%5P*/ $#$#$#

Dir : /home/trave494/hotebooking.site/wp-content/themes/traveler/inc/admin/
Server: Linux ngx353.inmotionhosting.com 4.18.0-553.22.1.lve.1.el8.x86_64 #1 SMP Tue Oct 8 15:52:54 UTC 2024 x86_64
IP: 209.182.202.254
Choose File :

Url:
Dir : /home/trave494/hotebooking.site/wp-content/themes/traveler/inc/admin/class.stadmin.php

<?php
/**
 * @package    WordPress
 * @subpackage Traveler
 * @since      1.0
 *
 * Class STAdmin
 *
 * Created by ShineTheme
 *
 */
if (!class_exists('STAdmin')) {

    class STAdmin {

        protected static $_instance = FALSE;
        private $template_dir = 'inc/admin/views';
        static private $message = "";
        static private $message_type = "";
        public $metabox;

        function __construct() {

        }

        static function getListDate($start, $end) {

            $start = new DateTime($start);
            $end = new DateTime($end . ' +1 day');
            $list = [];
            foreach (new DatePeriod($start, new DateInterval('P1D'), $end) as $day) {
                $list[] = $day->format(TravelHelper::getDateFormat());
            }

            return $list;
        }

        /*         * ************** Price **************** */

        function st_create_custom_price() {
            $data = apply_filters('st_data_custom_price', []);
            if (!empty($data) and is_array($data)) {
                add_meta_box('st_custom_price', $data['title'], [
                    $this,
                    'st_custom_price_func'
                        ], $data['post_type'], 'normal', 'high');
            }
        }

        function st_custom_price_func($object, $box) {
            echo self::load_view('admin/html', 'price', [
                'post_id' => $object->ID,
                'st_custom_price_nonce' => wp_create_nonce(plugin_basename(__FILE__))
            ]);
        }

        function st_save_custom_price($post_id, $post) {
            if (!empty($_POST['st_custom_price_nonce'])) {
                if (!wp_verify_nonce($_POST['st_custom_price_nonce'], plugin_basename(__FILE__)))
                    return $post_id;

                if (!current_user_can('edit_post', $post_id))
                    return $post_id;
                $price_new = $_REQUEST['st_price'];
                $price_type = $_REQUEST['st_price_type'];
                $start_date = $_REQUEST['st_start_date'];
                $end_date = $_REQUEST['st_end_date'];
                $status = $_REQUEST['st_status'];
                $priority = $_REQUEST['st_priority'];
                self::st_delete_price($post_id);

                if ($price_new and $start_date and $end_date) {
                    foreach ($price_new as $k => $v) {
                        if (!empty($v)) {
                            self::st_add_price($post_id, $price_type[$k], $v, $start_date[$k], $end_date[$k], $status[$k], $priority[$k]);
                        }
                    }
                }
            }
        }

        static function st_get_all_price($post_id) {
            global $wpdb;
            $rs = $wpdb->get_results("SELECT * FROM " . $wpdb->base_prefix . "st_price WHERE post_id=" . $post_id);

            return $rs;
        }

        static function st_add_price($post_id, $type_price = 'default', $price = 0, $start_date = '', $end_date = '', $status = 1, $priority = 0) {
            global $wpdb;
            if ($the_post = wp_is_post_revision($post_id))
                $post_id = $the_post;
            $check = $wpdb->get_var("SELECT COUNT(*) FROM " . $wpdb->base_prefix . "st_price WHERE post_id=" . $post_id . " AND price_type='" . $type_price . "' AND price=" . $price . " AND start_date='" . $start_date . "' AND end_date='" . $end_date . "' AND status=" . $status . " AND priority=" . $priority);
            if (empty($check)) {
                $wpdb->insert($wpdb->base_prefix . 'st_price', [
                    'post_id' => $post_id,
                    'price_type' => $type_price,
                    'price' => $price,
                    'start_date' => $start_date,
                    'end_date' => $end_date,
                    'status' => $status,
                    'priority' => $priority
                ]);
                $insert_id = (int) $wpdb->insert_id;
                if ($insert_id) {
                    return $insert_id;
                } else {
                    return false;
                }
            } else {
                return false;
            }
        }

        function st_update_price($post_id, $type_price = 'default', $price = 0, $start_date = '', $end_date = '', $status = 1, $priority = 0) {

        }

        static function st_delete_price($post_id) {
            global $wpdb;
            $wpdb->delete($wpdb->base_prefix . 'st_price', ['post_id' => $post_id]);
        }

        /*         * ************** End Price **************** */

        function admin_print_styles() {
            wp_register_style('st-custom-option-tree', get_template_directory_uri() . '/css/admin/custom_option_tree.css');
            $screen = get_current_screen();
            if ($screen && ( $screen->id == 'toplevel_page_st_traveler_option' || $screen->base == 'post' )) {
                wp_enqueue_style('st-custom-option-tree', null, ['ot-admin-css-css']);
            }
        }

        function admin_enqueue_scripts($hook) {
            $gg_api_key = st()->get_option('google_api_key', "");
            $google_api_key = st()->get_option('st_googlemap_enabled');
            if (is_ssl()) {
                $url = add_query_arg([
                    'v' => '3', //v=3.exp
                    'signed_in' => 'true',
                    'libraries' => 'places',
                    'language' => 'en',
                    'sensor' => 'false',
                    'key' => $gg_api_key
                        ], 'https://maps.googleapis.com/maps/api/js');
            } else {
                $url = add_query_arg([
                    'v' => '3',
                    'signed_in' => 'true',
                    'libraries' => 'places',
                    'language' => 'en',
                    'sensor' => 'false',
                    'key' => $gg_api_key
                        ], 'https://maps.googleapis.com/maps/api/js');
            }
            if ($google_api_key === 'on') {
                wp_register_script('gmap-apiv3', $url, ['jquery'], null, true);
                wp_register_script('gmapv3', get_template_directory_uri() . '/inc/plugins/ot-custom/fields/gmap/js/gmap3.min.js', ['jquery', 'gmap-apiv3'], null, true);
            } else {

            }
            if (!in_array(get_post_type(), array('product', 'shop_order'))) {
                wp_enqueue_script('select2.js', get_template_directory_uri() . '/js/select2-new/js/select2.full.js', ['jquery'], NULL, TRUE);
                $lang = get_locale();
                $lang_file = ST_TRAVELER_DIR . '/js/select2-new/js/i18n/' . $lang . '.js';
                if (file_exists($lang_file)) {
                    wp_enqueue_script('select2-lang', get_template_directory_uri() . '/js/select2-new/js/i18n/' . $lang . '.js', ['jquery', 'select2.js'], null, true);
                } else {
                    $locale = TravelHelper::get_minify_locale($lang);
                    $lang_file = get_template_directory_uri() . '/js/select2-new/js/i18n/' . $locale . '.js';
                    if (file_exists($lang_file)) {
                        wp_enqueue_script('select2-lang', get_template_directory_uri() . '/js/select2-new/js/i18n/' . $locale . '.js', ['jquery', 'select2.js'], null, true);
                    }
                }
                wp_enqueue_style('st-select2', get_template_directory_uri() . '/js/select2-new/css/select2.css');
            }


            $prefix = '.min';
            if (defined('WP_DEBUG') && WP_DEBUG || defined('SCRIPT_DEBUG') && SCRIPT_DEBUG) {
                $prefix = '';
            }
            wp_register_script('fullcalendar', get_template_directory_uri() . '/js/fullcalendar-5.8.0/lib/main' . $prefix. '.js', ['jquery', 'moment'], NULL, TRUE);
            wp_register_script('fullcalendar-lang', get_template_directory_uri() . '/js/fullcalendar-5.8.0/lib/locales-all' . $prefix. '.js', ['jquery', 'fullcalendar'], NULL, TRUE);
            wp_register_style('fullcalendar-css', get_template_directory_uri() . '/js/fullcalendar-5.8.0/lib/main' . $prefix. '.css');

            // wp_enqueue_script('st-qtip', get_template_directory_uri() . '/js/jquery.qtip.js', ['jquery'], null, true);

            wp_register_script('jquery-ui-timepicker', get_template_directory_uri() . '/js/jquery-ui-timepicker.js', ['jquery'], null, true);
            // wp_enqueue_script( 'st-custom-admin', get_template_directory_uri() . '/js/admin/custom-admin.js', [ 'jquery', 'gmapv3' ], null, true );
            wp_enqueue_script('st-custom-admin', get_template_directory_uri() . '/js/admin/custom-admin.js', ['jquery'], null, true);
            wp_enqueue_script('st-custom-admin2', get_template_directory_uri() . '/js/admin/custom-admin2.js', ['jquery'], null, true);
            if ($hook == "toplevel_page_st-refund-manager-menu") {
                wp_enqueue_script('st-refund-manager-admin', get_template_directory_uri() . '/js/admin/refund-manager.js', ['jquery'], null, true);
            }
            wp_enqueue_script('st-custom-price', get_template_directory_uri() . '/js/admin/custom-price.js', ['jquery'], null, true);
            wp_register_script('st-custom-partner', get_template_directory_uri() . '/inc/js/custom.js', ['jquery'], null, true);

            wp_enqueue_style('st-admin', get_template_directory_uri() . '/css/admin/admin.css');

            wp_enqueue_style('thickbox');
            wp_enqueue_script('thickbox');

            wp_enqueue_script('iconpicker', get_template_directory_uri() . '/js/iconpicker/js/fontawesome-iconpicker.min.js', ['jquery'], null, true);
            wp_enqueue_script('custom-iconpicker', get_template_directory_uri() . '/js/iconpicker/js/custom-iconpicker.js', ['jquery'], null, true);

            wp_register_script('template-user-js', get_template_directory_uri() . '/js/template-user.js', ['jquery'], null, true);
            wp_register_script('user.js', get_template_directory_uri() . '/js/user.js', ['jquery'], null, true);
            //use for solo home
            wp_register_script('jscolor.js', get_template_directory_uri() . '/v2/js/jscolor.js', ['jquery'], null, true);

            $locale = get_locale();
            $locale_fullcalendar = $locale;
            if (substr($locale, 0, 2)) {
                $locale_fullcalendar = strtolower(substr($locale, 0, 2));
            }

            wp_localize_script('jquery', 'st_params', [
                'locale' => $locale,
                'locale_fullcalendar' => $locale_fullcalendar,
                'text_refresh' => __('Refresh', 'traveler'),
                'text_adult' => __('Adult: ', 'traveler'),
                'text_child' => __('Child: ', 'traveler'),
                'text_infant' => __('Infant: ', 'traveler'),
                'text_price' => __('Price: ', 'traveler'),
                'text_unavailable' => __('Not Available ', 'traveler'),
                'text_available' => __('Available ', 'traveler'),
                'text_adult_price' => __('Adult Price ', 'traveler'),
                'text_child_price' => __('Child Price ', 'traveler'),
                'text_infant_price' => __("Infant", 'traveler'),
                'text_update' => __('Update ', 'traveler'),
                '_s' => wp_create_nonce('traveler_admin_security'),
                'ajax_url' => admin_url('admin-ajax.php'),
                'text_process_cancel' => __('You cancelled the process', 'traveler'),
                'dateformat' => TravelHelper::getDateFormatJs(null, 'calendar'),
                'dateformat_convert' => TravelHelper::getDateFormatJs(null, 'admin-calendar'),
            ]);
            wp_localize_script('jquery', 'locale_daterangepicker', [
                'direction' => (is_rtl() || st()->get_option('right_to_left') == 'on')? 'rtl': 'ltr',
                'applyLabel' => __('Apply', 'traveler'),
                'cancelLabel' => __('Cancel', 'traveler'),
                'fromLabel' => __('From', 'traveler'),
                'toLabel' => __('To', 'traveler'),
                'customRangeLabel' => __('Custom', 'traveler'),
                'daysOfWeek' =>  [__('Su', 'traveler'), __('Mo', 'traveler'), __('Tu', 'traveler'), __('We', 'traveler'), __('Th', 'traveler'), __('Fr', 'traveler'), __('Sa', 'traveler')],
                'monthNames' => [__('January', 'traveler'), __('February', 'traveler'), __('March', 'traveler'), __('April', 'traveler'), __('May', 'traveler'), __('June', 'traveler'), __('July', 'traveler'), __('August', 'traveler'), __('September', 'traveler'), __('October', 'traveler'), __('November', 'traveler'), __('December', 'traveler')],
                'firstDay' => (int)st()->get_option('start_week', 0),
                'today' => __('Today', 'traveler'),
                'please_waite' => __('Please wait...', 'traveler'),
                'buttons' => __('buttons', 'traveler'),
            ]);
        }

        function update_location_info($post_id) {
            if (wp_is_post_revision($post_id))
                return;
            $post_type = get_post_type($post_id);

            if ($post_type == 'st_cars' or $post_type == 'st_activity' or $post_type == 'st_tours' or $post_type == 'st_rental' or $post_type == 'st_hotel') {
                if ($post_type == 'st_rental' /* or $post_type=='hotel' */) {
                    $location = 'location_id';
                    $location_id = get_post_meta($post_id, $location, true);
                } else {
                    $location = 'id_location';
                    $location_id = get_post_meta($post_id, $location, true);
                }
                $ids_in = [];
                $parents = get_posts([
                    'numberposts' => -1,
                    'post_status' => 'publish',
                    'post_type' => 'location',
                    'post_parent' => $location_id
                ]);

                $ids_in[] = $location_id;

                foreach ($parents as $child) {
                    $ids_in[] = $child->ID;
                }
                $arg = [
                    'post_type' => $post_type,
                    'posts_per_page' => '-1',
                    'meta_query' => [
                        [
                            'key' => $location,
                            'value' => $ids_in,
                            'compare' => 'IN',
                        ],
                    ],
                ];
                $query = new WP_Query($arg);
                $offer = $query->post_count;

                // get total review
                $arg = [
                    'post_type' => $post_type,
                    'posts_per_page' => '-1',
                    'meta_query' => [
                        [
                            'key' => $location,
                            'value' => $ids_in,
                            'compare' => 'IN',
                        ],
                    ],
                ];
                $query = new WP_Query($arg);
                $total = 0;
                if ($query->have_posts()) {
                    while ($query->have_posts()) {
                        $query->the_post();
                        $total += get_comments_number();
                    }
                }
                // get car min price
                $meta_key = 'sale_price';
                if ($post_type == 'st_hotel') {
                    $meta_key = 'price_avg';
                }
                $arg = [
                    'post_type' => $post_type,
                    'posts_per_page' => '1',
                    'order' => 'ASC',
                    'meta_key' => $meta_key,
                    'orderby' => 'meta_value_num',
                    'meta_query' => [
                        [
                            'key' => $location,
                            'value' => $ids_in,
                            'compare' => 'IN',
                        ],
                    ],
                ];
                $query = new WP_Query($arg);
                if ($query->have_posts()) {
                    $query->the_post();
                    $price_min = get_post_meta(get_the_ID(), 'sale_price', true);
                    if ($post_type == 'st_hotel') {
                        $price_min = get_post_meta(get_the_ID(), 'price_avg', true);
                    }
                }
                wp_reset_postdata();
                update_post_meta($location_id, 'review_' . $post_type, $total);
                if (isset($price_min))
                    update_post_meta($location_id, 'min_price_' . $post_type, $price_min);
                update_post_meta($location_id, 'offer_' . $post_type, $offer);
            }
        }

        function array_splice_assoc(&$input, $offset, $length = 0, $replacement = []) {
            $tail = array_splice($input, $offset);
            $extracted = array_splice($tail, 0, $length);
            $input += $replacement + $tail;

            return $extracted;
        }

        static function get_history_bookings($type = "st_hotel", $offset = 0, $limit = 1, $author = false) {
            global $wpdb;

            $where = '';
            $join = '';
            $select = '';

            if (isset($_GET['st_date_start']) and $_GET['st_date_start']) {

                if ($type == 'st_cars') {
                    $date = ( date('m/d/Y', strtotime($_GET['st_date_start'])) );
                    $where .= " AND {$wpdb->prefix}st_order_item_meta.check_in >= '{$date}'";
                } else {
                    $date = strtotime(date('Y-m-d', strtotime($_GET['st_date_start'])));
                    $where .= " AND CAST({$wpdb->prefix}st_order_item_meta.check_in_timestamp as UNSIGNED) >= {$date}";
                }
            }

            if (isset($_GET['st_date_end']) and $_GET['st_date_end']) {

                if ($type == 'st_cars') {
                    $date = ( date('m/d/Y', strtotime($_GET['st_date_end'])) );
                    $where .= " AND {$wpdb->prefix}st_order_item_meta.check_in <= '{$date}'";
                } else {
                    $date = strtotime(date('Y-m-d', strtotime($_GET['st_date_start'])));
                    $where .= " AND CAST({$wpdb->prefix}st_order_item_meta.check_in_timestamp as UNSIGNED) <= {$date}";
                }
            }

            if ($c_name = STInput::get('st_custommer_name')) {
                $join .= " INNER JOIN {$wpdb->prefix}postmeta as mt3 on mt3.post_id= {$wpdb->prefix}st_order_item_meta.order_item_id";
                $where .= ' AND  mt3.meta_key=\'st_first_name\'
             ';
                $where .= ' AND mt3.meta_value like \'%' . esc_sql($c_name) . '%\'';
            }

            if ($author) {
                $author = " AND {$wpdb->prefix}st_order_item_meta.user_id = " . $author;
            }

            $querystr = "
            SELECT SQL_CALC_FOUND_ROWS  {$wpdb->prefix}posts.* from {$wpdb->prefix}st_order_item_meta
            {$join}
            INNER JOIN {$wpdb->prefix}posts ON {$wpdb->prefix}posts.ID = {$wpdb->prefix}st_order_item_meta.order_item_id
            WHERE 1=1 AND st_booking_post_type = '{$type}' AND type='normal_booking' {$where}
            ORDER BY {$wpdb->prefix}st_order_item_meta.id DESC
            LIMIT {$offset},{$limit}
            ";
            $pageposts = $wpdb->get_results($querystr, OBJECT);

            return ['total' => $wpdb->get_var("SELECT FOUND_ROWS();"), 'rows' => $pageposts];
        }

        static function set_message($message, $type = '') {
            self::$message = $message;
            self::$message_type = $type;
        }

        static function message() {
            if (self::$message):
                ?>
                <div id="message" class="<?php echo self::$message_type ?> below-h2">
                    <p><?php echo self::$message ?>
                    </p>
                </div>
                <?php
            endif;
        }

        function load_view($slug, $name = false, $data = []) {

            extract($data);

            if ($name) {
                $slug = $slug . '-' . $name;
            }

            //Find template in folder inc/admin/views/
            $template = locate_template($this->template_dir . '/' . $slug . '.php');


            //If file not found
            if (is_file($template)) {
                ob_start();

                include $template;

                $data = @ob_get_clean();

                return $data;
            }
        }

        function register_metabox($custom_metabox) {
            /**
             * Register our meta boxes using the
             * ot_register_meta_box() function.
             */
            if (function_exists('ot_register_meta_box')) {
                if (!empty($custom_metabox)) {
                    foreach ($custom_metabox as $value) {
                        ot_register_meta_box($value);
                    }
                }
            }
        }

        function init() {
            $files = [
                'admin/class.admin.packages',
                'admin/class.user',
                'admin/class.admin.withdrawal',
                'admin/class.admin.inbox',
                'admin/class.admin.location',
                'admin/class.admin.order',
                'admin/class.admin.neworder.data',
                'admin/class.admin.woo.checkout',
				'admin/class.admin.customize',
            ];

            $files2 = [
                'admin/class.user',
                'admin/class.admin.menus',
                'admin/class.admin.reports',
                'admin/class.attributes',
                'admin/class.admin.permalink',
                'admin/class.admin.uploadfonticon',
                'admin/class.admin.update.content',
                'admin/class.admin.normal.checkout',
                'admin/class.admin.duplicate.data',
                //'admin/class.admin.neworder.data',
                'admin/class.admin.availability',
                'admin/class.admin.upgrade.data',
                'admin/class.admin.location.relationships',
                'admin/class.admin.landing.page',
                'admin/class.admin.testimonial',
                'admin/class.admin.withdrawal',
                'admin/class.admin.packages',
                'admin/class.admin.optimize',
                'admin/class.admin.settings',
            ];

            STTraveler::load_libs($files);

            if (st_check_service_available('st_hotel')) {
                STTraveler::load_libs(['admin/class.admin.hotel', 'admin/class.admin.room',]);
            }
            if (st_check_service_available('st_activity')) {
                STTraveler::load_libs(['admin/class.admin.activity',]);
            }
            STTraveler::load_libs(['admin/class.admin.mail',]);
            if (st_check_service_available('st_tours')) {
                STTraveler::load_libs(['admin/class.admin.tours',]);
            }
            if (st_check_service_available('st_cars')) {
                STTraveler::load_libs(['admin/class.admin.cars',]);
            }
            if (st_check_service_available('st_rental')) {
                STTraveler::load_libs(['admin/class.admin.rental', 'admin/class.admin.rental.room',]);
            }


            if (is_admin()) {
                STTraveler::load_libs($files2);
            }
            add_action('admin_init', function(){
                $this->run_crate_mail();
            });
            add_action('admin_enqueue_scripts', [$this, 'admin_enqueue_scripts']);
            add_action('save_post', [$this, 'update_location_info']);
            add_action('deleted_post', [$this, 'update_location_info']);

            add_action('admin_menu', [$this, 'st_create_custom_price']);
            add_action('save_post', [$this, 'st_save_custom_price'], 10, 2);

            add_action('init', [$this, 'st_register_location_tax']);

            if (is_super_admin()) {
                add_filter('show_admin_bar', '__return_true', 999);
            }
            /**
             * @since 1.1.7
             * */
            add_action('admin_print_styles', [$this, 'admin_print_styles']);

            /**
             * @todo Handle Autocomplete Ajax Request
             *
             * @since 2.1.2
             * @author dannie
             *
             */
            add_action('wp_ajax_st_traveler_autocomplete', [$this, '__handleAutocomplete']);
        }

        //Create mail
        function run_crate_mail(){

            //Insert [Register] Email to administrator
            if(get_option('check_mail',0) == 1){

            } else {
                update_option('check_mail', 1, false);
                $arr_key_mail =[
                    'partner_email_for_admin' => '[Register] Email to administrator',
                    'partner_resend_email_for_admin' => '[Register] Resend email to administrator',
                    'user_register_email_for_admin' => '[Register normal user] Email to administrator',
                    'partner_email_for_customer' => '[Register] Email to partner (when waiting for approved register)',
                    'partner_email_approved' => '[Register] Email to partner (when approved register)',
                    'send_admin_new_request_withdrawal' => '[Request] Email to administrator request withdrawal',
                    'send_admin_approved_withdrawal' => '[Approved] Email to administrator request withdrawal',
                    'send_user_new_request_withdrawal' => '[Request] Email to partner withdrawal',
                    'send_user_approved_withdrawal' => '[Approved] Email to partner withdrawal',
                    'membership_email_admin' => 'Email for admin when have a new membership',
                    'membership_email_partner' => 'Email for partner when have a new membership',
                    'email_for_admin' => 'Email template send to administrator booking',
                    'email_for_partner' => 'Email template send to partner/owner booking',
                    'email_for_partner_expired_date' => 'Email template send to partner when package is expired date',
                    'email_for_customer' => 'Email template for booking info send to customer',
                    'email_for_customer_out_of_depature_date' => 'Email template for notification of departure date send to customer',
                    'email_confirm' => 'Email template for confirm send to customer',
                    'email_approved' => 'Email template to admin about item needs to be approved',
                    'email_has_refund' => 'Email template for cancel booking send to administrator',
                    'email_has_refund_for_partner' => 'Email template for cancel booking send to partner',
                    'email_cancel_booking_success_for_partner' => 'Email template for successful canceled send to partner',
                    'email_cancel_booking_success_for_partner' => 'Email template for successful canceled send to customer',
                ];
                foreach($arr_key_mail as $key=>$value_title){
                    $value_option_by_key = st()->get_option($key, '');
                    if(!empty($value_option_by_key)){
                        $args = array(
                            'post_title' => $value_title,
                            'post_type' => 'st_template_email',
                            'post_content' => $value_option_by_key,
                            'post_status' => 'publish',
                        );
                        $post_id = wp_insert_post($args);
                        if(!is_wp_error($post_id)){
                            st_update_optiontree_by_id_key($key,$post_id);
                        }else{

                        }
                    }
                }


            }

        }

        /**
         * @todo Handle Autocomplete Ajax Request
         *
         * @since 2.1.2
         * @author dannie
         *
         */
        function __handleAutocomplete() {
            $this->verifyRequest('traveler_admin_security');

            $type = STInput::post('type');
            $s = STInput::post('search');
            switch ($type) {
                case "partner":
                    $user_query = new WP_User_Query([
                        'role__in' => ['partner', 'administrator'],
                        'search' => '*' . $s . '*',
                        'search_columns' => [
                            'user_login', 'ID', 'user_email', 'display_name'
                        ]
                    ]);

                    $res = ['items' => []];
                    if (!empty($user_query->get_results())) {
                        foreach ($user_query->get_results() as $user) {
                            $res['items'][] = [
                                'id' => $user->ID,
                                'text' => $user->display_name . ' - ' . $user->ID
                            ];
                        }
                    }

                    wp_send_json($res);

                    break;
            }
        }

        function st_register_location_tax() {
            $booking_type = apply_filters('st_booking_post_type', [
                'st_hotel',
                'st_rental',
                'st_tours',
                'st_cars',
                'st_activity'
            ]);
        }

        protected function verifyRequest($action_name = 'traveler_settings_security') {

            if (!$this->verifyNonce('_s', $action_name)) {
                $res = esc_html__('Your session has ended. Please reload the website', 'traveler');
                $this->sendError($res);
            }
            if (!$this->verifyPermission()) {
                $res = esc_html__('Your you have permission to access this page', 'traveler');
                $this->sendError($res);
            }

            return true;
        }

        protected function verifyNonce($name = '_s', $action_name = "") {
            if (!isset($_POST[$name]) or ! wp_verify_nonce($_POST[$name], $action_name))
                return false;
            return true;
        }

        protected function verifyPermission() {

            return current_user_can('manage_options');
        }

        public function sendError($message, $extra = []) {
            $res = [];
            $res['message'] = $message;
            $res['status'] = 0;
            if (!empty($extra)) {
                $res = array_merge($res, $extra);
            }
            $this->sendJson($res);
        }

        protected function sendJson($res) {
            $res = wp_parse_args($res, [
                'status' => 1
            ]);
            $res['user_status'] = is_user_logged_in();
            wp_send_json($res);
        }

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

            return self::$_instance;
        }

    }

    STAdmin::instance()->init();
}