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.admin.tours.php

<?php
    /**
     * @package    WordPress
     * @subpackage Traveler
     * @since      1.0
     *
     * Class STAdminTours
     *
     * Created by ShineTheme
     *
     */
    $order_id = 0;
    if ( !class_exists( 'STAdminTours' ) ) {

        class STAdminTours extends STAdmin
        {

            static    $booking_page;
            static    $_table_version = "1.3.5";
            protected $post_type      = "st_tours";
            protected static $_inst;

            /**
             *
             *
             * @update 1.1.3
             * */
            function __construct()
            {
                add_action( 'init', [ $this, '_init_post_type' ], 8 );
                if ( !st_check_service_available( $this->post_type ) ) return;

                add_action( 'current_screen', [ $this, 'init_metabox' ] );

                /// add_action( 'save_post', array($this,'tours_update_location') );
                add_action( 'save_post', [ $this, 'tours_update_price_sale' ] );
                add_filter( 'manage_st_tours_posts_columns', [ $this, 'add_col_header' ], 10 );
                add_action( 'manage_st_tours_posts_custom_column', [ $this, 'add_col_content' ], 10, 2 );

                // ==========================================================================

                self::$booking_page = admin_url( 'edit.php?post_type=st_tours&page=st_tours_booking' );
                add_action( 'admin_menu', [ $this, 'new_menu_page' ] );

                //Check booking edit and redirect
                if ( self::is_booking_page() ) {
                    add_action( 'admin_enqueue_scripts', [ __CLASS__, 'add_edit_scripts' ] );
                    add_action( 'admin_init', [ $this, '_do_save_booking' ] );

                }

                if ( isset( $_GET[ 'send_mail' ] ) and $_GET[ 'send_mail' ] == 'success' ) {
                    self::set_message( __( 'Email sent', 'traveler' ), 'updated' );
                }

                add_action( 'wp_ajax_st_room_select_ajax', [ __CLASS__, 'st_room_select_ajax' ] );
                add_action( 'save_post', [ $this, 'meta_update_sale_price' ], 10, 4 );
                add_action( 'save_post', [ $this, 'meta_update_min_price' ], 10, 4 );
                //parent::__construct();

                add_action( 'save_post', [ $this, '_update_list_location' ], 999999, 2 );
                add_action( 'save_post', [ $this, '_update_duplicate_data' ], 50, 2 );
                add_action( 'before_delete_post', [ $this, '_delete_data' ], 50 );

                add_action( 'wp_ajax_st_getInfoTour', [ __CLASS__, '_getInfoTour' ], 9999 );

                /**
                 *   since 1.2.4
                 *   auto create & update table st_tours
                 **/
                add_action( 'after_setup_theme', [ __CLASS__, '_check_table_tour' ] );

                /**
                 * @since 1.3.0
                 *        Bulk calendar
                 **/
                add_action( 'traveler_after_form_tour_calendar', [ $this, 'custom_traveler_after_form_tour_calendar' ] );
                add_action( 'traveler_after_form_submit_tour_calendar', [ $this, 'custom_traveler_after_form_submit_tour_calendar' ] );

                add_action('init', array($this, '__update_db_available_first_run'), 99);

	            add_action('st_availability_cronjob',array($this,'__cronjob_fill_availability'));
                add_action('admin_init', [$this, '_upgradeTourTable133']);
                add_action('admin_init', [$this, '_upgradeColumnDiscountTypeTourTable']);
            }
            public function _upgradeTourTable133(){
                $updated = get_option('st_upgradeTourTable133', false);
                if(!$updated){
                    global $wpdb;
                    $table = $wpdb->prefix. $this->post_type;
                    $sql = "Update {$table} as t inner join {$wpdb->postmeta} as m on (t.post_id = m.post_id and m.meta_key = 'is_featured') set t.is_featured = m.meta_value";
                    $wpdb->query($sql);
                    update_option('st_upgradeTourTable133', 'updated');
                }
            }

	        public function __run_fill_old_order($key='')
	        {
		        $ids = [];
		        global $wpdb;
		        $table  = $wpdb->prefix . 'st_tour_availability';
		        $model=ST_Order_Item_Model::inst();
		        $orderItems=$model->where("st_booking_post_type in ('st_tours')",false,true)
		                          ->where( 'check_in_timestamp >= UNIX_TIMESTAMP(CURRENT_DATE)', false, true )
		                          ->where("STATUS NOT IN('canceled','trash')",false,true)->get()->result();

		        if(!empty($orderItems))
		        {
			        foreach($orderItems as $data)
			        {
				        if (!empty($data['origin_id']))
				        {
					        if(in_array($data['id'],$ids)) continue;
					        $ids[]=$data['id'];
					        $booked =  $data['adult_number'] + $data['child_number'] + $data['infant_number'];

					        $where=[
						        'post_id'=>$data['origin_id'],
						        'check_in'=>$data['check_in_timestamp'],
					        ];
					        $check=ST_Tour_Availability::inst()->where($where)->get(1)->row();
					        if($check)
					        {
						        $sql = $wpdb->prepare("UPDATE {$table} SET number_booked = IFNULL(number_booked, 0) + %d WHERE post_id = %d AND check_in = %s",$booked,$data['origin_id'],$data['check_in_timestamp']);
						        $wpdb->query( $sql );
					        }else{
						        for($i_d = $data['check_in_timestamp']; $i_d <= $data['check_out_timestamp']; $i_d = strtotime('+1 day', $i_d)){
							        $data_insert = [
								        'post_id' => $data['origin_id'],
								        'check_in' => $i_d,
								        'check_out' => $i_d,
								        'starttime' => '',
								        'count_starttime' => 1,
								        'number' => get_post_meta($data['origin_id'], 'max_people', true),
								        'price' => get_post_meta($data['origin_id'], 'base_price', true),
								        'adult_price' => get_post_meta($data['origin_id'], 'adult_price', true),
								        'child_price' => get_post_meta($data['origin_id'], 'child_price', true),
								        'infant_price' => get_post_meta($data['origin_id'], 'infant_price', true),
								        'status' => 'available',
								        'groupday' => 0,
								        'number_booked' => $booked,
								        'booking_period' => get_post_meta($data['origin_id'], 'tours_booking_period', true),
								        'is_base' => 0,
							        ];
							        ST_Tour_Availability::inst()->insert($data_insert);
						        }
					        }
				        }
			        }
		        }
	        }

            public static function __cronjob_update_min_price($offset, $limit = 2) {
                global $wpdb;
                $list_tour = new WP_Query(array(
                    'posts_per_page' => $limit,
                    'post_type' => 'st_tours',
                    'offset' => $offset
                ));

                if ($list_tour->have_posts()) {
                    while ($list_tour->have_posts()) {
                        $list_tour->the_post();
                        $tour_id = get_the_ID();
                        STAdminTours::meta_update_min_price($tour_id);
                        STAdminTours::_update_duplicate_data($tour_id, []);
                    }
                }

                wp_reset_postdata();
            }

	        public function __cronjob_fill_availability($offset = 0, $limit = -1, $day=null)
	        {
		        global $wpdb;
		        if(!$day){
			        $today=new DateTime(date('Y-m-d'));
			        $today->modify('+ 6 months');
			        $day=$today->modify('+ 1 day');
		        }
		        $table='st_tour_availability';
		        $post_type='st_tours';

		        $tours=new WP_Query(array(
			        'posts_per_page'=>$limit,
			        'post_type'=>$post_type,
			        'meta_key' => 'type_tour',
			        'meta_value' => 'daily_tour',
			        'offset' => $offset
		        ));
		        $insertBatch=[];
		        $ids=[];
		        while ($tours->have_posts())
		        {
			        $tours->the_post();
			        $adult_price = get_post_meta(get_the_ID(), 'adult_price', true);
			        if(empty($adult_price)) $adult_price = 0;
			        $child_price = get_post_meta(get_the_ID(), 'child_price', true);
			        if(empty($child_price)) $child_price = 0;
			        $infant_price = get_post_meta(get_the_ID(), 'infant_price', true);
			        if(empty($infant_price)) $infant_price = 0;
			        $base_price = get_post_meta(get_the_ID(), 'base_price', true);
			        if(empty($base_price)) $base_price = 0;
			        $max_people = get_post_meta(get_the_ID(), 'max_people', true);
			        if(empty($max_people)) $max_people = 0;
			        $booking_period = get_post_meta(get_the_ID(), 'tours_booking_period', true);
			        if(empty($booking_period)) $booking_period = 0;
			        $status='available';
			        $insertBatch[]=$wpdb->prepare("(%d,%d,%d,%s,%s,%s,%s,%s,%d,%d,%s,%d)",$day->getTimestamp(),$day->getTimestamp(),get_the_ID(),$status,$base_price, $adult_price, $child_price, $infant_price, 1, 0,$max_people,$booking_period);

			        $ids[]=get_the_ID();
		        }
		        if(!empty($insertBatch))
		        {
			        $wpdb->query("INSERT IGNORE INTO {$wpdb->prefix}{$table} (check_in,check_out,post_id,`status`,price,adult_price,child_price,infant_price,is_base,groupday,`number`,booking_period) VALUES ".implode(",\r\n",$insertBatch));
		        }

		        wp_reset_postdata();
	        }

            public function __update_db_available_first_run(){
            	//Fill old data
	            $key = 'st_tour_availability_fill_old_data';
	            if(empty(get_option($key))) {
		            $model_avail = ST_Availability_Model::inst()
		                                                ->where( 'post_type', 'st_tours' )
		                                                ->where( 'check_in >= UNIX_TIMESTAMP(CURRENT_DATE)', false, true )->get()->result();
		            if ( ! empty( $model_avail ) ) {
			            global $wpdb;
			            $table       = $wpdb->prefix . 'st_tour_availability';
			            $insertBatch = [];
			            $ids         = [];
			            $i           = 1;
			            foreach ( $model_avail as $k => $v ) {
				            $max_people = get_post_meta( $v['post_id'], 'max_people', true );
				            if ( empty( $max_people ) ) {
					            $max_people = 0;
				            }
				            $booking_period = get_post_meta( $v['post_id'], 'tours_booking_period', true );
				            if ( empty( $booking_period ) ) {
					            $booking_period = 0;
				            }
				            $insertBatch[] = $wpdb->prepare( "(%d,%s,%s,%s,%d,%d,%s,%s,%s,%s,%s,%d,%d,%d,%d)", $v['post_id'], $v['check_in'], $v['check_out'], $v['starttime'], $v['count_starttime'], $max_people, $v['price'], $v['adult_price'], $v['child_price'], $v['infant_price'], $v['status'], $v['groupday'], 0, $booking_period, 1 );
				            $i ++;
				            $ids[] = $v['id'];
			            }
			            if ( ! empty( $insertBatch ) ) {
				            $res = $wpdb->query( "INSERT IGNORE INTO {$table} (post_id, check_in, check_out, starttime, count_starttime, `number`, price, adult_price, child_price, infant_price, `status`, groupday, number_booked, booking_period, is_base) VALUES " . implode( ",\r\n", $insertBatch ) );
				            if ( $res ) {
					            $sql_delete = $wpdb->prepare("DELETE FROM {$wpdb->prefix}st_availability WHERE post_type=%s", 'st_tours');
					            $wpdb->query($sql_delete);
				            }
			            }
		            }
		            update_option( $key, 1 );
	            }

	            //Fill old starttime data
		        $key_st = 'st_tour_availability_fill_old_starttime_data';
	            if(empty(get_option($key_st))){
					$model_st_avail = ST_Availability_Model::inst()
						->where('post_type', 'st_starttime_tours')
						->where('check_in >= UNIX_TIMESTAMP(CURRENT_DATE)', false, true)
						->get()->result();
		            if ( ! empty( $model_st_avail ) ) {
			            global $wpdb;
			            foreach ( $model_st_avail as $k => $v ) {
				            $starttime_arr = explode($v['starttime']);
							ST_Tour_Availability::inst()
								->where('post_id', $v['post_id'])
								->where('check_in', $v['check_in'])
								->update(array(
									'starttime' => $v['starttime'],
									'count_starttime' => count($starttime_arr)
								));
				            $sql_delete = $wpdb->prepare("DELETE FROM {$wpdb->prefix}st_availability WHERE post_type=%s", 'st_starttime_tours');
				            $wpdb->query($sql_delete);
			            }
		            }

                    update_option( $key_st, 1 );
	            }
            }


            public function custom_traveler_after_form_tour_calendar()
            {
                echo balanceTags( st()->load_template( 'tours/tour-calendar', false ) );
            }

            public function custom_traveler_after_form_submit_tour_calendar()
            {
                echo '<button type="button" id="calendar-bulk-edit" class="option-tree-ui-button option-tree-ui-button traveler_after_form_submit_tour_calendar button button-primary button-large btn btn-primary btn-sm" style="float: right;">' . __( 'Bulk Edit', 'traveler' ) . '</button>';
            }

            static function check_ver_working()
            {
                $dbhelper = new DatabaseHelper( self::$_table_version );

                return $dbhelper->check_ver_working( 'st_tours_table_version' );
            }

            static function _check_table_tour()
            {
                $dbhelper = new DatabaseHelper( self::$_table_version );
                $dbhelper->setTableName( 'st_tours' );
                $column = [
                    'post_id'              => [
                        'type'   => 'INT',
                        'length' => 11,
                    ],
                    'multi_location'       => [
                        'type' => 'text',
                    ],
                    'id_location'          => [
                        'type'   => 'varchar',
                        'length' => 255
                    ],
                    'address'              => [
                        'type' => 'text',
                    ],
                    'price'                => [
                        'type'   => 'varchar',
                        'length' => 255
                    ],
                    'sale_price'           => [
                        'type'   => 'varchar',
                        'length' => 255
                    ],
                    'child_price'          => [
                        'type'   => 'varchar',
                        'length' => 255
                    ],
                    'adult_price'          => [
                        'type'   => 'varchar',
                        'length' => 255
                    ],
                    'infant_price'         => [
                        'type'   => 'varchar',
                        'length' => 255
                    ],
                    'min_price'            => [
                        'type'   => 'varchar',
                        'length' => 255
                    ],
                    'max_people'           => [
                        'type'   => 'varchar',
                        'length' => 255
                    ],
                    'type_tour'            => [
                        'type'   => 'varchar',
                        'length' => 255
                    ],
                    'check_in'             => [
                        'type'   => 'varchar',
                        'length' => 255
                    ],
                    'check_out'            => [
                        'type'   => 'varchar',
                        'length' => 255
                    ],
                    'rate_review'          => [
                        'type'   => 'varchar',
                        'length' => 255
                    ],
                    'duration_day'         => [
                        'type'   => 'varchar',
                        'length' => 255
                    ],
                    'tours_booking_period' => [
                        'type'   => 'varchar',
                        'length' => 255
                    ],
                    'is_sale_schedule'     => [
                        'type'   => 'varchar',
                        'length' => 255
                    ],
                    'discount'             => [
                        'type'   => 'varchar',
                        'length' => 255
                    ],
                    'sale_price_from'      => [
                        'type'   => 'date',
                        'length' => 255
                    ],
                    'sale_price_to'        => [
                        'type'   => 'date',
                        'length' => 255
                    ],
	                'price_type'        => [
			            'type'   => 'varchar',
			            'length' => 255
		            ],
                    'is_featured'        => [
                        'type'   => 'varchar',
                        'length' => 5
                    ],
                    'discount_type'        => [
                        'type'   => 'varchar',
                        'length' => 10
                    ],
                ];

                $column = apply_filters( 'st_change_column_st_tours', $column );

                $dbhelper->setDefaultColums( $column );
                $dbhelper->check_meta_table_is_working( 'st_tours_table_version' );

                return array_keys( $column );
            }

            static function _getInfoTour()
            {
                $tour_id  = intval( STInput::request( 'tour_id', '' ) );
                $result   = [
                    'type_tour'    => '',
                    'max_people'   => 0,
                    'adult_html'   => '',
                    'child_html'   => '',
                    'infant_html'  => '',
                    'child_price'  => '',
                    'adult_price'  => '',
                    'infant_price' => '',
                ];
                $duration = 0;
                if ( get_post_type( $tour_id ) == 'st_tours' ) {

                    $child_price              = get_post_meta( $tour_id, 'child_price', true );
                    $adult_price              = get_post_meta( $tour_id, 'adult_price', true );
                    $infant_price             = get_post_meta( $tour_id, 'infant_price', true );
                    $result[ 'child_price' ]  = $child_price;
                    $result[ 'adult_price' ]  = $adult_price;
                    $result[ 'infant_price' ] = $infant_price;

                    $type_tour = get_post_meta( $tour_id, 'type_tour', true );

                    $max_people = intval( get_post_meta( $tour_id, 'max_people', true ) );

                    $adult_html  = '<select name="adult_number" class="form-control" style="width: 100px">';
                    $child_html  = '<select name="child_number" class="form-control" style="width: 100px">';
                    $infant_html = '<select name="infant_number" class="form-control" style="width: 100px">';
                    for ( $i = 0; $i <= 20; $i++ ) {
                        $adult_html .= '<option value="' . $i . '">' . $i . '</option>';
                        $child_html .= '<option value="' . $i . '">' . $i . '</option>';
                        $infant_html .= '<option value="' . $i . '">' . $i . '</option>';
                    }
                    $adult_html .= '</select>';
                    $child_html .= '</select>';
                    $child_html .= '</select>';

                    if ( $type_tour && $type_tour == 'daily_tour' ) {
                        $html                  = "<select name='type_tour' class='form-control form-control-admin'>
                        <option value='daily_tour'>" . __( 'Daily Tour', 'traveler' ) . "</option>
                    </select>";
                        $result[ 'type_tour' ] = $html;
                        $result[ 'tour_text' ] = $type_tour;
                        $duration              = get_post_meta( $tour_id, 'duration_day', true );
                        $result[ 'label_type_tour' ]    = __( 'Daily Tour', 'traveler' );
                    } elseif ( $type_tour && $type_tour == 'specific_date' ) {
                        $html                  = "<select name='type_tour' class='form-control form-control-admin'>
                        <option value='specific_date'>" . __( 'Specific Date', 'traveler' ) . "</option>
                    </select>";
                        $result[ 'type_tour' ] = $html;
                        $result[ 'tour_text' ] = $type_tour;
                        $result[ 'label_type_tour' ]    = __( 'Specific Date', 'traveler' );
                    }
                    $extras = get_post_meta( $tour_id, 'extra_price', true );
                    if ( is_array( $extras ) && count( $extras ) ):
                        $html_extra = '<table class="table">';
                        foreach ( $extras as $key => $val ):
                            $html_extra .= '
                    <tr>
                        <td width="80%">
                            <label for="' . $val[ 'extra_name' ] . '" class="ml20">' . $val[ 'title' ] . ' (' . TravelHelper::format_money( $val[ 'extra_price' ] ) . ')' . '</label>
                            <input type="hidden" name="extra_price[price][' . $val[ 'extra_name' ] . ']" value="' . $val[ 'extra_price' ] . '">
                            <input type="hidden" name="extra_price[title][' . $val[ 'extra_name' ] . ']" value="' . $val[ 'title' ] . '">
                        </td>
                        <td width="20%">
                            <select style="width: 100px" class="form-control" name="extra_price[value][' . $val[ 'extra_name' ] . ']" id="">';

                            $max_item = intval( $val[ 'extra_max_number' ] );
                            if ( $max_item <= 0 ) $max_item = 1;
                            for ( $i = 0; $i <= $max_item; $i++ ):
                                $html_extra .= '<option value="' . $i . '">' . $i . '</option>';
                            endfor;
                            $html_extra .= '
                            </select>
                        </td>
                    </tr>';
                        endforeach;
                        $html_extra .= '</table>';
                    endif;
                    $result[ 'extras' ]      = $html_extra;
                    $result[ 'max_people' ]  = ( $max_people == 0 ) ? __( 'Unlimited', 'traveler' ) : $max_people;
                    $result[ 'adult_html' ]  = $adult_html;
                    $result[ 'child_html' ]  = $child_html;
                    $result[ 'infant_html' ] = $infant_html;
                    $result[ 'duration' ]    = $duration;
                }

                echo json_encode( $result );
                die();
            }

            function _do_save_booking()
            {
                $section = isset( $_GET[ 'section' ] ) ? $_GET[ 'section' ] : false;
                switch ( $section ) {
                    case "edit_order_item":
                        if ( $this->is_able_edit() ) {
                            if ( isset( $_POST[ 'submit' ] ) and $_POST[ 'submit' ] ) $this->_save_booking( STInput::get( 'order_item_id' ) );
                        }

                        break;
                    case 'resend_email_tours':
                        $this->_resend_mail();
                        break;
                }
            }

            public function _delete_data( $post_id )
            {
                if ( get_post_type( $post_id ) == 'st_tours' ) {
                    global $wpdb;
                    $table = $wpdb->prefix . 'st_tours';
                    $rs    = TravelHelper::deleteDuplicateData( $post_id, $table );
                    if ( !$rs )
                        return false;

                    return true;
                }
            }

            function _update_duplicate_data( $id, $data )
            {
                if ( !TravelHelper::checkTableDuplicate( 'st_tours' ) ) return;

                if ( get_post_type( $id ) == 'st_tours' ) {
                    $num_rows = TravelHelper::checkIssetPost( $id, 'st_tours' );

                    $location_str = get_post_meta( $id, 'multi_location', true );
                    $location_id = '';  // location_id
                    $address = get_post_meta( $id, 'address', true );  // address
                    $max_people           = get_post_meta( $id, 'max_people', true );            // maxpeople
                    $check_in             = get_post_meta( $id, 'check_in', true );              // check in
                    $check_out            = get_post_meta( $id, 'check_out', true );             // check out
                    $type_tour            = get_post_meta( $id, 'type_tour', true );             // check out
                    $duration_day         = get_post_meta( $id, 'duration_day', true );          // duration_day
                    $tours_booking_period = get_post_meta( $id, 'tours_booking_period', true );  // tours_booking_period
                    $tour_price_type      = get_post_meta($id, 'tour_price_by', true);
                    $sale_price = get_post_meta( $id, 'sale_price', true );  // sale_price
					$base_price   = get_post_meta($id, 'base_price', true);
					$child_price  = get_post_meta( $id, 'child_price', true );
					$adult_price  = get_post_meta( $id, 'adult_price', true );
					$infant_price = get_post_meta( $id, 'infant_price', true );
					$off_adult    = get_post_meta( $id, 'hide_adult_in_booking_form', true );
					$off_child    = get_post_meta( $id, 'hide_children_in_booking_form', true );
					$off_infant   = get_post_meta( $id, 'hide_infant_in_booking_form', true );
                    if ( $off_adult == "on" ) {
                        $adult_price = 0;
                    }
                    if ( $off_child == "on" ) {
                        $child_price = 0;
                    }
                    if ( $off_infant == "on" ) {
                        $infant_price = 0;
                    }
                    $min_price = get_post_meta( $id, 'min_price', true );

                    $discount         = get_post_meta( $id, 'discount', true );
                    $is_sale_schedule = get_post_meta( $id, 'is_sale_schedule', true );
                    $sale_from        = get_post_meta( $id, 'sale_price_from', true );
                    $sale_to          = get_post_meta( $id, 'sale_price_to', true );
                    $is_featured      = get_post_meta( $id, 'is_featured', true );
                    $discount_type    = get_post_meta( $id, 'discount_type', true );
                    if ( $is_sale_schedule == 'on' ) {
                        if ( $sale_from and $sale_from ) {
                            $today     = date( 'Y-m-d' );
                            $sale_from = date( 'Y-m-d', strtotime( $sale_from ) );
                            $sale_to   = date( 'Y-m-d', strtotime( $sale_to ) );
                            if ( ( $today >= $sale_from ) && ( $today <= $sale_to ) ) {

                            } else {

                                $discount = 0;
                            }

                        } else {
                            $discount = 0;
                        }
                    }
                    if ( $discount ) {
                        if ($discount_type == 'amount')
                            $sale_price = $sale_price - $discount;
                        else
                            $sale_price = $sale_price - ( $sale_price / 100 ) * $discount;
                    }

                    $rate_review = STReview::get_avg_rate( $id ); // rate review

                    if ( $num_rows == 1 ) {
                        $data  = [
                            'multi_location'       => $location_str,
                            'id_location'          => $location_id,
                            'address'              => $address,
                            'type_tour'            => $type_tour,
                            'check_in'             => $check_in,
                            'check_out'            => $check_out,
                            'sale_price'           => $sale_price,
                            'child_price'          => $child_price,
                            'adult_price'          => $adult_price,
                            'infant_price'         => $infant_price,
                            'min_price'            => $min_price,
                            'max_people'           => $max_people,
                            'rate_review'          => $rate_review,
                            'duration_day'         => $duration_day,
                            'tours_booking_period' => $tours_booking_period,
                            'discount'             => $discount,
                            'sale_price_from'      => $sale_from,
                            'sale_price_to'        => $sale_to,
                            'is_sale_schedule'     => $is_sale_schedule,
                            'price'                => $base_price,
                            'price_type'           => $tour_price_type,
                            'is_featured'          => $is_featured,
                            'discount_type'        => $discount_type,
                        ];
                        $where = [
                            'post_id' => $id
                        ];

                        TravelHelper::updateDuplicate( 'st_tours', $data, $where );
                    } elseif ( $num_rows == 0 ) {
                        $data = [
                            'post_id'              => $id,
                            'multi_location'       => $location_str,
                            'id_location'          => $location_id,
                            'address'              => $address,
                            'type_tour'            => $type_tour,
                            'check_in'             => $check_in,
                            'check_out'            => $check_out,
                            'sale_price'           => $sale_price,
                            'child_price'          => $child_price,
                            'adult_price'          => $adult_price,
                            'infant_price'         => $infant_price,
                            'min_price'            => $min_price,
                            'max_people'           => $max_people,
                            'rate_review'          => $rate_review,
                            'duration_day'         => $duration_day,
                            'tours_booking_period' => $tours_booking_period,
                            'discount'             => $discount,
                            'sale_price_from'      => $sale_from,
                            'sale_price_to'        => $sale_to,
                            'is_sale_schedule'     => $is_sale_schedule,
                            'price'                => $base_price,
                            'price_type'           => $tour_price_type,
                            'is_featured'          => $is_featured,
                            'discount_type'        => $discount_type,
                        ];

                        TravelHelper::insertDuplicate( 'st_tours', $data );
                    }

	                // Update Availability
	                $model=ST_Tour_Availability::inst();
	                $model->where('post_id',$id)
                            ->where("check_in", "UNIX_TIMESTAMP(CURRENT_DATE)", ">=")
	                      ->update(array(
		                'number'=>empty($max_people) ? 0 : $max_people,
		                'booking_period' => empty($tours_booking_period) ? 0 : $tours_booking_period
	                ));

	                $data_prices = $model->get_prices_by_id($id);
	                if(!empty($data_prices)) {
		                $data_price      = $data_prices[0];
		                if($tour_price_type == 'person'){
			                $adult_price_db  = $data_price['adult_price'];
			                $child_price_db  = $data_price['child_price'];
			                $infant_price_db = $data_price['infant_price'];
			                if ( $adult_price_db != $adult_price or $child_price_db != $child_price or $infant_price_db != $infant_price ) {
				                $model->where(array('post_id' => $id, 'is_base' => 1))
                                        ->where("check_in", "UNIX_TIMESTAMP(CURRENT_DATE)", ">=")
                                      ->update(array(
					                'adult_price'=>$adult_price,
					                'child_price' => $child_price,
					                'infant_price' => $infant_price,
				                ));
			                }
		                }else{
			                $base_price_db  = $data_price['price'];
			                if ( $base_price_db != $base_price) {
				                $model->where(array('post_id' => $id, 'is_base' => 1))
				                      ->where("check_in >= UNIX_TIMESTAMP(CURRENT_DATE)", true, false)->update(array(
					                'price'=>$base_price
				                ));
			                }
		                }
	                }
                }
            }

            /**
             * @since 1.1.7
             **/
            function _update_list_location( $id, $data )
            {
                $location = STInput::request( 'multi_location', '' );
                if ( isset( $_REQUEST[ 'multi_location' ] ) ) {
                    if ( is_array( $location ) && count( $location ) ) {
                        $location_str = '';
                        foreach ( $location as $item ) {
                            if ( empty( $location_str ) ) {
                                $location_str .= $item;
                            } else {
                                $location_str .= ',' . $item;
                            }
                        }
                    } else {
                        $location_str = '';
                    }
                    update_post_meta( $id, 'multi_location', $location_str );
                    update_post_meta( $id, 'id_location', '' );
                }

            }

            /**
             * Init the post type
             *
             * @since 1.1.3
             * */
            function _init_post_type()
            {
                if ( !st_check_service_available( $this->post_type ) ) {
                    return;
                }

                if ( !function_exists( 'st_reg_post_type' ) ) return;
                // Tours ==============================================================
                $labels = [
                    'name'                  => __( 'Tours', 'traveler' ),
                    'singular_name'         => __( 'Tour', 'traveler' ),
                    'menu_name'             => __( 'Tours', 'traveler' ),
                    'name_admin_bar'        => __( 'Tour', 'traveler' ),
                    'add_new'               => __( 'Add New', 'traveler' ),
                    'add_new_item'          => __( 'Add New Tour', 'traveler' ),
                    'new_item'              => __( 'New Tour', 'traveler' ),
                    'edit_item'             => __( 'Edit Tour', 'traveler' ),
                    'view_item'             => __( 'View Tour', 'traveler' ),
                    'all_items'             => __( 'All Tour', 'traveler' ),
                    'search_items'          => __( 'Search Tour', 'traveler' ),
                    'parent_item_colon'     => __( 'Parent Tour:', 'traveler' ),
                    'not_found'             => __( 'No Tours found.', 'traveler' ),
                    'not_found_in_trash'    => __( 'No Tours found in Trash.', 'traveler' ),
                    'insert_into_item'      => __( 'Insert into Tour', 'traveler' ),
                    'uploaded_to_this_item' => __( "Uploaded to this Tour", 'traveler' ),
                    'featured_image'        => __( "Feature Image", 'traveler' ),
                    'set_featured_image'    => __( "Set featured image", 'traveler' )
                ];

                $args = [
                    'labels'             => $labels,
                    'public'             => true,
                    'publicly_queryable' => true,
                    'show_ui'            => true,
                    'query_var'          => true,
                    'rewrite'            => [ 'slug' => get_option( 'tour_permalink', 'st_tour' ) ],
                    'capability_type'    => 'post',
                    'hierarchical'       => false,
                    'supports'           => [ 'author', 'title', 'editor', 'excerpt', 'thumbnail', 'comments' ],
                    'menu_icon'          => 'dashicons-palmtree-st'
                ];

                st_reg_post_type( 'st_tours', $args );

                $labels = [
                    'name'                       => __( 'Tour Categories', 'traveler' ),
                    'singular_name'              => __( 'Tour Categories', 'traveler' ),
                    'search_items'               => __( 'Search Tour Categories', 'traveler' ),
                    'popular_items'              => __( 'Popular Tour Categories', 'traveler' ),
                    'all_items'                  => __( 'All Tour Categories', 'traveler' ),
                    'parent_item'                => null,
                    'parent_item_colon'          => null,
                    'edit_item'                  => __( 'Edit Tour Categories', 'traveler' ),
                    'update_item'                => __( 'Update Tour Categories', 'traveler' ),
                    'add_new_item'               => __( 'Add New Tour Categories', 'traveler' ),
                    'new_item_name'              => __( 'New Tour Type Name', 'traveler' ),
                    'separate_items_with_commas' => __( 'Separate Tour Categories with commas', 'traveler' ),
                    'add_or_remove_items'        => __( 'Add or remove Tour Categories', 'traveler' ),
                    'choose_from_most_used'      => __( 'Choose from the most used Tour Categories', 'traveler' ),
                    'not_found'                  => __( 'No Tour Categories.', 'traveler' ),
                    'menu_name'                  => __( 'Tour Categories', 'traveler' ),
                ];
                $args   = [
                    'hierarchical'      => true,
                    'labels'            => $labels,
                    'show_ui'           => true,
                    'show_admin_column' => true,
                    'query_var'         => true,
                    'rewrite'           => [ 'slug' => 'st_tour_type' ],
                    'public' => apply_filters('stt_show_term_frontend',false),
                ];

                st_reg_taxonomy( 'st_tour_type', 'st_tours', $args );
            }

            /**
             *
             *
             * @since  1.1.1
             * @update 1.1.2
             * */
            function init_metabox()
            {
                $screen = get_current_screen();
                if ( $screen->id != 'st_tours' ) {
                    return false;
                }

                //Room
                $this->metabox[] = [
                    'id'       => 'tour_metabox',
                    'title'    => __( 'Tour Setting', 'traveler' ),
                    'desc'     => '',
                    'pages'    => [ 'st_tours' ],
                    'context'  => 'normal',
                    'priority' => 'high',
                    'fields'   => [
                        [
                            'label' => __( 'Location', 'traveler' ),
                            'id'    => 'location_reneral_tab',
                            'type'  => 'tab'
                        ],
                        [
                            'label'     => __( 'Tour location', 'traveler' ),
                            'id'        => 'multi_location', // id_location
                            'type'      => 'list_item_post_type',
                            'desc'      => __( 'Select one or more location for your tour', 'traveler' ),
                            'post_type' => 'location'
                        ],
                        [
                            'label' => __( 'Real tour address ', 'traveler' ),
                            'id'    => 'address',
                            'type'  => 'address_autocomplete',
                            'desc'  => __( 'Input your tour address detail', 'traveler' ),
                        ],
                        [
                            'label' => __( 'Location on map', 'traveler' ),
                            'id'    => 'st_google_map',
                            'type'  => 'bt_gmap',
                            'desc'  => __( 'Kindly input Map API in Theme Settings > Other Options . Select one location on map to see latiture and longiture', 'traveler' ),
                            'std'   => 'off',
                        ],
                        [
                            'label'    => __( 'Properties near by', 'traveler' ),
                            'id'       => 'properties_near_by',
                            'type'     => 'list-item',
                            'desc'     => __( 'Properties near by this tour', 'traveler' ),
                            'settings' => [
                                [
                                    'id'    => 'featured_image',
                                    'label' => __( 'Featured Image', 'traveler' ),
                                    'type'  => 'upload',
                                ],
                                [
                                    'id'    => 'description',
                                    'label' => __( 'Description', 'traveler' ),
                                    'type'  => 'textarea',
                                    'row'   => 5
                                ],
                                [
                                    'id'    => 'icon',
                                    'label' => __( 'Map icon', 'traveler' ),
                                    'type'  => 'upload'
                                ],
                                [
                                    'id'    => 'map_lat',
                                    'label' => __( 'Map lat', 'traveler' ),
                                    'type'  => 'text'
                                ],
                                [
                                    'id'    => 'map_lng',
                                    'label' => __( 'Map long', 'traveler' ),
                                    'type'  => 'text'
                                ]
                            ]
                        ],
                        [
                            'label' => __( 'Street view mode', 'traveler' ),
                            'id'    => 'enable_street_views_google_map',
                            'type'  => 'on-off',
                            'desc'  => __( 'Turn on/off street view mode for this location', 'traveler' ),
                            'std'   => 'on'
                        ],
                        [
                            'label' => __( 'General', 'traveler' ),
                            'id'    => 'room_reneral_tab',
                            'type'  => 'tab'
                        ],
                        [
                            'label' => __( 'Set tour as feature', 'traveler' ),
                            'id'    => 'is_featured',
                            'type'  => 'on-off',
                            'desc'  => __( 'Will show this tour with feature label or not', 'traveler' ),
                            'std'   => 'off'
                        ],

                        /**
                         * version 2.7.4
                         */
                        [
                            'label'   => __( 'Booking Options', 'traveler' ),
                            'id'      => 'st_booking_option_type',
                            'type'    => 'select',
                            'choices' => [
                                [
                                    'label' => __( 'Instant Booking', 'traveler' ),
                                    'value' => 'instant'
                                ],
                                [
                                    'label' => __( 'Enquire Booking', 'traveler' ),
                                    'value' => 'enquire'
                                ],
                                [
                                    'label' => __( 'Instant & Enquire Booking', 'traveler' ),
                                    'value' => 'instant_enquire'
                                ],
                            ],
                            'std'     => 'instant',
                        ],

                        [
                            'label'     => __( 'Tour single layout', 'traveler' ),
                            'id'        => 'st_custom_layout',
                            'post_type' => 'st_layouts',
                            'desc'      => __( 'Select one tour single layout', 'traveler' ),
                            'type'      => 'select',
                            'choices'   => st_get_layout( 'st_tours' )
                        ],

                        [
                            'label' => __( 'Tour gallery', 'traveler' ),
                            'id'    => 'gallery',
                            'type'  => 'gallery',
                            'desc'  => __( 'Upload tour images to show to customers', 'traveler' )
                        ],
                        [
                            'label' => __( 'Tour Video', 'traveler' ),
                            'id'    => 'video',
                            'type'  => 'text',
                            'desc'  => __( 'Input youtube/vimeo url here', 'traveler' )
                        ],

                        [
                            'label' => __( 'Contact information', 'traveler' ),
                            'id'    => 'contact_info_tab',
                            'type'  => 'tab'
                        ],
                        [
                            'label'   => __( 'Select contact info will show', 'traveler' ),
                            'id'      => 'show_agent_contact_info',
                            'type'    => 'select',
                            'choices' => [

                                [
                                    'label' => __( "----Select----", 'traveler' ),
                                    'value' => ''
                                ],
                                [
                                    'label' => __( "Use agent contact Info", 'traveler' ),
                                    'value' => 'user_agent_info'
                                ],
                                [
                                    'label' => __( "Use Item Info", 'traveler' ),
                                    'value' => 'user_item_info'
                                ],
                            ],
                            'desc'    => __( 'Use info configuration in theme option || Use contact info of people who upload hotel || Use contact info in hotel detail', 'traveler' ),
                        ],

                        [
                            'label' => __( 'Email address', 'traveler' ),
                            'id'    => 'contact_email',
                            'type'  => 'text',
                            'desc'  => __( 'Email address', 'traveler' ),
                        ],
                        [
                            'label' => __( 'Website address', 'traveler' ),
                            'id'    => 'website',
                            'type'  => 'text',
                            'desc'  => __( 'Website. Ex: <em>http://domain.com</em>', 'traveler' ),
                        ],
                        [
                            'label' => __( 'Phone', 'traveler' ),
                            'id'    => 'phone',
                            'type'  => 'text',
                            'desc'  => __( 'Phone number', 'traveler' ),
                        ],
                        [
                            'label' => __( 'Fax number', 'traveler' ),
                            'id'    => 'fax',
                            'type'  => 'text',
                            'desc'  => __( 'Fax number', 'traveler' ),
                        ],
                        [
                            'label' => __( 'Price settings', 'traveler' ),
                            'id'    => 'price_number_tab',
                            'type'  => 'tab'
                        ],
	                    //Option price by...
	                    [
		                    'label'   => __( 'Show price by person/fixed', 'traveler' ),
		                    'id'      => 'tour_price_by',
		                    'type'    => 'select',
		                    'choices' => [
			                    [
				                    'label' => __( "Price by person", 'traveler' ),
				                    'value' => 'person'
			                    ],
			                    [
				                    'label' => __( "Price by fixed", 'traveler' ),
				                    'value' => 'fixed'
			                    ],
			                    [
				                    'label' => __( "Fixed Departure", 'traveler' ),
				                    'value' => 'fixed_depart'
			                    ],
		                    ],
		                    'desc'    => __( 'Show price by person or fixed.', 'traveler' ),
	                    ],
	                    [
		                    'label'     => __( 'Start date', 'traveler' ),
		                    'desc'      => __( 'Start date for fixed departure tour', 'traveler' ),
		                    'id'        => 'start_date_fixed',
		                    'type'      => 'date-picker',
		                    'condition' => 'tour_price_by:is(fixed_depart)'
	                    ],

	                    [
		                    'label'     => __( 'End date', 'traveler' ),
		                    'desc'      => __( 'End date for fixed departure tour', 'traveler' ),
		                    'id'        => 'end_date_fixed',
		                    'type'      => 'date-picker',
		                    'condition' => 'tour_price_by:is(fixed_depart)'
	                    ],
	                    [
		                    'label'     => __( 'Base price', 'traveler' ),
		                    'id'        => 'base_price',
		                    'type'      => 'text',
		                    'std'       => 0,
		                    'condition' => 'tour_price_by:is(fixed)'
	                    ],
                        [
                            'label'     => __( 'Adult price', 'traveler' ),
                            'id'        => 'adult_price',
                            'type'      => 'text',
                            'desc'      => __( 'Price per adult. Input number only. No decimal or thousand separator or any other character', 'traveler' ),
                            'std'       => 0,
                            'condition' => 'hide_adult_in_booking_form:is(off),tour_price_by:not(fixed)'
                        ],
                        [
                            'label'     => __( 'Fields list discount by adult number booking', 'traveler' ),
                            'id'        => 'discount_by_adult',
                            'type'      => 'list-item',
                            'desc'      => __( 'Fields list discount by adult number booking', 'traveler' ),
                            'std'       => 0,
                            'settings'  => [
                                [
                                    'id'    => 'key',
                                    'label' => __( 'Number of adult (From)', 'traveler' ),
                                    'type'  => 'text',
                                ],
                                [
                                    'id'    => 'key_to',
                                    'label' => __( 'Number of adult (To)', 'traveler' ),
                                    'type'  => 'text',
                                ],
                                [
                                    'id'    => 'value',
                                    'label' => __( 'Discount amount', 'traveler' ),
                                    'desc'      => __( 'Enter amount: For example: 50', 'traveler' ),
                                    'type'  => 'text',
                                ]
                            ],
                            'condition' => 'hide_adult_in_booking_form:is(off),tour_price_by:not(fixed)'
                        ],

                        [
                            'label'     => __( 'Child price', 'traveler' ),
                            'id'        => 'child_price',
                            'type'      => 'text',
                            'desc'      => __( 'Price per Child. Input number only. No decimal or thousand separator or any other character', 'traveler' ),
                            'std'       => 0,
                            'condition' => "hide_children_in_booking_form:is(off),tour_price_by:not(fixed)"
                        ],
                        [
                            'label'     => __( 'Fields list discount by child number booking', 'traveler' ),
                            'id'        => 'discount_by_child',
                            'type'      => 'list-item',
                            'desc'      => __( 'Fields list discount by child number booking', 'traveler' ),
                            'std'       => 0,
                            'settings'  => [
                                [
                                    'id'    => 'key',
                                    'label' => __( 'Number of children (From)', 'traveler' ),
                                    'type'  => 'text',
                                ],
                                [
                                    'id'    => 'key_to',
                                    'label' => __( 'Number of children (To)', 'traveler' ),
                                    'type'  => 'text',
                                ],
                                [
                                    'id'    => 'value',
                                    'label' => __( 'Discount Amount', 'traveler' ),
                                    'type'  => 'text',
                                ]
                            ],
                            'condition' => "hide_children_in_booking_form:is(off),tour_price_by:not(fixed)"
                        ],
                        [
                            'id'      => 'discount_by_people_type',
                            'label'   => __( 'Type of discount by people', 'traveler' ),
                            'type'    => 'select',
                            'choices' => [
                                [
                                    'label' => __( 'Percent', 'traveler' ),
                                    'value' => 'percent'
                                ],
                                [
                                    'label' => __( 'Amount', 'traveler' ),
                                    'value' => 'amount'
                                ]
                            ],
                            'condition' => "tour_price_by:not(fixed)"
                        ],
                        [
                            'label'     => __( 'Infant price', 'traveler' ),
                            'id'        => 'infant_price',
                            'type'      => 'text',
                            'desc'      => __( 'Price per infant', 'traveler' ),
                            'std'       => 0,
                            'condition' => "hide_infant_in_booking_form:is(off),tour_price_by:not(fixed)"
                        ],
                        [
                            'label' => __( 'Disable adult booking', 'traveler' ),
                            'id'    => 'hide_adult_in_booking_form',
                            'type'  => 'on-off',
                            'desc'  => __( 'Hide No of adult in booking form', 'traveler' ),
                            'std'   => 'off',
                            'condition' => "tour_price_by:not(fixed)"
                        ],
                        [
                            'label' => __( 'Disable child booking', 'traveler' ),
                            'id'    => 'hide_children_in_booking_form',
                            'type'  => 'on-off',
                            'desc'  => __( 'Hide No of child in booking form', 'traveler' ),
                            'std'   => 'off',
                            'condition' => "tour_price_by:not(fixed)"
                        ],
                        [
                            'label' => __( 'Disable infant booking', 'traveler' ),
                            'id'    => 'hide_infant_in_booking_form',
                            'type'  => 'on-off',
                            'desc'  => __( 'Hide No of infant in booking form', 'traveler' ),
                            'std'   => 'off',
                            'condition' => "tour_price_by:not(fixed)"
                        ],

                        [
                            'label'=>esc_html__('Disable "Adult Name Required"','traveler'),
                            'type'=>'on-off',
                            'std'=>'off',
                            'id'=>'disable_adult_name'
                        ],

                        [
                            'label'=>esc_html__('Disable "Children Name Required"','traveler'),
                            'type'=>'on-off',
                            'std'=>'off',
                            'id'=>'disable_children_name'
                        ],

                        [
                            'label'=>esc_html__('Disable "Infant Name Required"','traveler'),
                            'type'=>'on-off',
                            'std'=>'off',
                            'id'=>'disable_infant_name'
                        ],
                        [
                            'label'    => __( 'Extra pricing', 'traveler' ),
                            'id'       => 'extra_price',
                            'type'     => 'list-item',
                            'settings' => [
                                [
                                    'id'    => 'extra_name',
                                    'type'  => 'text',
                                    'std'   => 'extra_',
                                    'label' => __( 'Name of Item', 'traveler' ),
                                ],
                                [
                                    'id'    => 'extra_max_number',
                                    'type'  => 'text',
                                    'std'   => '',
                                    'label' => __( 'Max of Number', 'traveler' ),
                                ],
                                [
                                    'id'    => 'extra_price',
                                    'type'  => 'text',
                                    'std'   => '',
                                    'label' => __( 'Price', 'traveler' ),
                                    'desc'  => __( 'per 1 Item', 'traveler' ),
                                ],
                                [
                                    'id'    => 'extra_required',
                                    'type'  => 'on-off',
                                    'std'   => 'off',
                                    'label' => __( 'Required Extra', 'traveler' ),
                                    'desc'  => __( '', 'traveler' ),
                                ],
                            ],
                            'desc'     => __( 'You can define any extra service and price for with name, quantity, and price', 'traveler' )

                        ],
                        [
                            'label' => __( 'Discount', 'traveler' ),
                            'id'    => 'discount',
                            'type'  => 'text',
                            'desc'  => __( 'Discount of this tour (percent | amount)', 'traveler' ),
                            'std'   => 0
                        ],
                        [
                            'label'   => __( 'Type of discount', 'traveler' ),
                            'id'      => 'discount_type',
                            'type'    => 'select',
                            'choices' => [
                                [
                                    'label' => __( 'Percent', 'traveler' ),
                                    'value' => 'percent',
                                ],
                                [
                                    'label' => __( 'Amount', 'traveler' ),
                                    'value' => 'amount'
                                ]
                            ]
                        ],
                        [
                            'label' => __( 'Sale schedule', 'traveler' ),
                            'id'    => 'is_sale_schedule',
                            'type'  => 'on-off',
                            'std'   => 'off',
                        ],
                        [
                            'label'     => __( 'Sale start date', 'traveler' ),
                            'desc'      => __( 'Sale start date', 'traveler' ),
                            'id'        => 'sale_price_from',
                            'type'      => 'date-picker',
                            'condition' => 'is_sale_schedule:is(on)'
                        ],

                        [
                            'label'     => __( 'Sale end date', 'traveler' ),
                            'desc'      => __( 'Sale end date', 'traveler' ),
                            'id'        => 'sale_price_to',
                            'type'      => 'date-picker',
                            'condition' => 'is_sale_schedule:is(on)'
                        ],
                        [
                            'id'      => 'deposit_payment_status',
                            'label'   => __( "Deposit payment options", 'traveler' ),
                            'desc'    => __( 'You can select <code>Disallow Deposit</code>, <code>Deposit by percent</code>' ),
                            'type'    => 'select',
                            'choices' => [
                                [
                                    'value' => '',
                                    'label' => __( 'Disallow Deposit', 'traveler' )
                                ],
                                [
                                    'value' => 'percent',
                                    'label' => __( 'Deposit by percent', 'traveler' )
                                ],
                                /*[
                                    'value' => 'amount',
                                    'label' => __( 'Deposit by amount', 'traveler' )
                                ],*/
                            ]
                        ],
                        [
                            'label'     => __( 'Deposit payment amount', 'traveler' ),
                            'desc'      => __( 'Leave empty for disallow deposit payment', 'traveler' ),
                            'id'        => 'deposit_payment_amount',
                            'type'      => 'text',
                            'condition' => 'deposit_payment_status:not()'
                        ],
                        [
                            'label' => __( 'Information', 'traveler' ),
                            'id'    => 'st_info_tours_tab',
                            'type'  => 'tab'
                        ],
                        [
                            'label'   => __( 'Tour type', 'traveler' ),
                            'id'      => 'type_tour',
                            'type'    => 'select',
                            'desc'    => __( 'Select tour type. If you selected the \'Specific Date\' tour, you need to set price in \'Availability\' tab (required)', 'traveler' ),
                            'choices' => [
                                [
                                    'value' => 'daily_tour',
                                    'label' => __( 'Daily tour', 'traveler' )
                                ],
                                [
                                    'value' => 'specific_date',
                                    'label' => __( 'Specific date', 'traveler' )
                                ],
                            ]
                        ],
                        [
                            'label'     => __( 'Duration', 'traveler' ),
                            'id'        => 'duration_day',
                            'type'      => 'text',
                            'desc'      => __( 'Enter tour duration. Example: <em>3 days 2 nights</em>', 'traveler' ),
                            'std'       => '',
                            'condition' => 'type_tour:is(daily_tour)'
                        ],
                        [
                            'label'        => __( 'Minimum days to book before departure', 'traveler' ),
                            'desc'         => __( 'Minimum days to book before departure', 'traveler' ),
                            'id'           => 'tours_booking_period',
                            'type'         => 'numeric-slider',
                            'min_max_step' => '0,30,1',
                            'std'          => 0,
                        ],
                        [
                            'label' => __( 'Allow external booking', 'traveler' ),
                            'id'    => 'st_tour_external_booking',
                            'type'  => 'on-off',
                            'std'   => "off",
                            'desc'  => __( 'You can set booking by an external link', 'traveler' )
                        ],
                        [
                            'label'     => __( 'Tour external booking link ', 'traveler' ),
                            'id'        => 'st_tour_external_booking_link',
                            'type'      => 'text',
                            'std'       => "",
                            'condition' => 'st_tour_external_booking:is(on)',
                            'desc'      => "<em>" . __( 'Notice: Must be http://...', 'traveler' ) . "</em>",
                        ],
                        [
                            'label' => __( 'Min of people', 'traveler' ),
                            'id'    => 'min_people',
                            'type'  => 'text',
                            'desc'  => __( 'Min of people', 'traveler' ),
                            'std'   => '1',
                        ],

                        /**
                         * @updated 1.2.8
                         *          can set unlimited peope
                         **/
                        [
                            'label' => __( 'Max of people', 'traveler' ),
                            'id'    => 'max_people',
                            'type'  => 'text',
                            'desc'  => __( 'Max No. People. Leave empty or enter \'0\' for unlimited', 'traveler' ),
                            'std'   => '0',
                        ],
                        [
                            'id'       => 'tours_program',
                            'label'    => __( "Tour program", 'traveler' ),
                            'type'     => 'list-item',
                            'settings' => [
                                [
                                    'id'    => 'desc',
                                    'label' => __( 'Description', 'traveler' ),
                                    'type'  => 'textarea',
                                    'rows'  => '5',
                                ]
                            ]
                        ],

                        [
                            'label' => __( 'Availability', 'traveler' ),
                            'id'    => 'availability_tab',
                            'type'  => 'tab'
                        ],
                        [
                            'label' => __( 'Tour calendar', 'traveler' ),
                            'id'    => 'st_tour_calendar',
                            'type'  => 'st_tour_calendar'
                        ],
                        /**
                         * Tour package(Hotel)
                         */
                        [
                            'label' => __( 'Tour package', 'traveler' ),
                            'id'    => 'st_tour_package_tab',
                            'type'  => 'tab'
                        ],
                        [
                            'label' => __('Setting Tour Packages', 'traveler'),
                            'id' => 'st_tour_package',
                            'type' => 'st_tour_package',
                        ],
                        // End Tour package
                        [
                            'label' => __( 'Cancel booking', 'traveler' ),
                            'id'    => 'st_cancel_booking_tab',
                            'type'  => 'tab'
                        ],
                        [
                            'label' => __( 'Allow cancellation', 'traveler' ),
                            'id'    => 'st_allow_cancel',
                            'type'  => 'on-off',
                            'std'   => 'off'
                        ],
                        [
                            'label'     => __( 'Number of days before the arrival', 'traveler' ),
                            'desc'      => __( 'Number of days before the arrival', 'traveler' ),
                            'id'        => 'st_cancel_number_days',
                            'type'      => 'text',
                            'condition' => 'st_allow_cancel:is(on)'
                        ],
                        [
                            'label'        => __( 'Cancellation Fee', 'traveler' ),
                            'desc'         => __( 'A percentage of money customers will be deducted if they cancel a reservation', 'traveler' ),
                            'id'           => 'st_cancel_percent',
                            'type'         => 'numeric-slider',
                            'min_max_step' => '0,100,1',
                            'condition'    => 'st_allow_cancel:is(on)'
                        ],
                        [
                            'label' => __( 'Ical Sysc', 'traveler' ),
                            'id'    => 'ical_sys_tab',
                            'type'  => 'tab'
                        ],
                        [
                            'label' => __('Ical URL', 'traveler'),
                            'id' => 'ical_url',
                            'type' => 'ical',
                            'desc' => __('Enter an ical url and click Import button. All data will be updated and shown in the Availability tab', 'traveler')
                        ]
                    ]
                ];
                $data_paypment   = STPaymentGateways::get_payment_gateways();
                if ( !empty( $data_paypment ) and is_array( $data_paypment ) ) {
                    $this->metabox[ 0 ][ 'fields' ][] = [
                        'label' => __( 'Payment', 'traveler' ),
                        'id'    => 'payment_detail_tab',
                        'type'  => 'tab'
                    ];
                    foreach ( $data_paypment as $k => $v ) {
                        $this->metabox[ 0 ][ 'fields' ][] = [
                            'label' => $v->get_name(),
                            'id'    => 'is_meta_payment_gateway_' . $k,
                            'type'  => 'on-off',
                            'desc'  => $v->get_name(),
                            'std'   => 'on'
                        ];
                    }
                }
                $custom_field = st()->get_option( 'tours_unlimited_custom_field' );
                if ( !empty( $custom_field ) && is_array( $custom_field ) ) {
                    $this->metabox[ 0 ][ 'fields' ][] = [
                        'label' => __( 'Custom fields', 'traveler' ),
                        'id'    => 'custom_field_tab',
                        'type'  => 'tab'
                    ];
                    foreach ( $custom_field as $k => $v ) {
                        $key                              = str_ireplace( '-', '_', 'st_custom_' . sanitize_title( $v[ 'title' ] ) );
                        $this->metabox[ 0 ][ 'fields' ][] = [
                            'label' => $v[ 'title' ],
                            'id'    => $key,
                            'type'  => $v[ 'type_field' ],
                            'desc'  => '<input size="50" value=\'[st_custom_meta key="' . $key . '"]\' type=text readonly />',
                            'std'   => $v[ 'default_field' ]
                        ];
                    }
                }


                parent::register_metabox( $this->metabox );
            }

            // from 1.2.4
            static function get_min_price( $post_id = null )
            {
                // if disable == 0ff, allow add to array
                if ( !$post_id ) $post_id = get_the_ID();
                $prices     = [];
                $off_adult  = get_post_meta( $post_id, 'hide_adult_in_booking_form', true );
                $off_child  = get_post_meta( $post_id, 'hide_children_in_booking_form', true );
                $off_infant = get_post_meta( $post_id, 'hide_infant_in_booking_form', true );
                if ( $off_adult != "on" ) $prices[] = get_post_meta( $post_id, 'adult_price', true );
                if ( $off_child != "on" ) $prices[] = get_post_meta( $post_id, 'child_price', true );
                if ( $off_infant != "on" ) $prices[] = get_post_meta( $post_id, 'infant_price', true );
                $discount = get_post_meta( $post_id, 'discount', true );
                if ( !empty( $discount ) ) {
                    return min( $prices ) * ( 100 - $discount ) / 100;
                }

                return min( $prices );
            }

            // from 1.2.4
            function meta_update_min_price( $post_id )
            {
                $min_price = self::get_min_price( $post_id );
                update_post_meta( $post_id, 'min_price', $min_price );
            }

            function meta_update_sale_price( $post_id )
            {
                if ( wp_is_post_revision( $post_id ) )
                    return;
                $post_type = get_post_type( $post_id );
                if ( $post_type == 'st_tours' ) {
                    $sale_price       = get_post_meta( $post_id, 'adult_price', true );
                    $discount         = get_post_meta( $post_id, 'discount', true );
                    $is_sale_schedule = get_post_meta( $post_id, 'is_sale_schedule', true );
                    if ( $is_sale_schedule == 'on' ) {
                        $sale_from = get_post_meta( $post_id, 'sale_price_from', true );
                        $sale_to   = get_post_meta( $post_id, 'sale_price_to', true );
                        if ( $sale_from and $sale_from ) {

                            $today     = date( 'Y-m-d' );
                            $sale_from = date( 'Y-m-d', strtotime( $sale_from ) );
                            $sale_to   = date( 'Y-m-d', strtotime( $sale_to ) );
                            if ( ( $today >= $sale_from ) && ( $today <= $sale_to ) ) {

                            } else {

                                $discount = 0;
                            }

                        } else {
                            $discount = 0;
                        }
                    }
                    if ( $discount ) {
                        $sale_price = $sale_price - ( $sale_price / 100 ) * $discount;
                    }
                    update_post_meta( $post_id, 'sale_price', $sale_price );
                }
            }

            function _resend_mail()
            {
                $order_item = isset( $_GET[ 'order_item_id' ] ) ? $_GET[ 'order_item_id' ] : false;

                $test = isset( $_GET[ 'test' ] ) ? $_GET[ 'test' ] : false;
                if ( $order_item ) {

                    $order = $order_item;

                    if ( $test ) {
                        global $order_id;
                        $order_id       = $order_item;
                        $id_page_email_for_admin = st()->get_option('email_for_admin', '');
                        $content = !empty(get_post($id_page_email_for_admin)) ? wp_kses_post(get_post($id_page_email_for_admin)->post_content) : "";
                        $email          = "";
	                    $email .= TravelHelper::_get_template_email($email, $content);

                        echo( $email );
                        die;
                    }


                    if ( $order ) {
                        STCart::send_mail_after_booking( $order );
                    }
                }

                wp_safe_redirect( self::$booking_page . '&send_mail=success' );
            }

            static function st_room_select_ajax()
            {
                extract( wp_parse_args( $_GET, [
                    'room_parent' => '',
                    'post_type'   => '',
                    'q'           => ''
                ] ) );


                query_posts( [ 'post_type' => $post_type, 'posts_per_page' => 10, 's' => $q, 'meta_key' => 'room_parent', 'meta_value' => $room_parent ] );

                $r = [
                    'items' => [],
                ];
                while ( have_posts() ) {
                    the_post();
                    $r[ 'items' ][] = [
                        'id'          => get_the_ID(),
                        'name'        => get_the_title(),
                        'description' => ''
                    ];
                }

                wp_reset_query();

                echo json_encode( $r );
                die;

            }

            static function add_edit_scripts()
            {
                wp_enqueue_script( 'tour-booking', get_template_directory_uri() . '/js/admin/tour-booking.js', [ 'jquery', 'jquery-ui-datepicker' ], null, true );
                wp_enqueue_style( 'jjquery-ui.theme.min.css', get_template_directory_uri() . '/css/admin/jquery-ui.min.css' );

            }

            static function is_booking_page()
            {
                if ( is_admin()
                    and isset( $_GET[ 'post_type' ] )
                    and $_GET[ 'post_type' ] == 'st_tours'
                    and isset( $_GET[ 'page' ] )
                    and $_GET[ 'page' ] = 'st_tours_booking'
                ) return true;

                return false;
            }

            function new_menu_page()
            {
                //Add booking page
                add_submenu_page( 'edit.php?post_type=st_tours', __( 'Tour Booking', 'traveler' ), __( 'Tour Booking', 'traveler' ), 'manage_options', 'st_tours_booking', [ $this, '__tours_booking_page' ] );
            }

            function __tours_booking_page()
            {

                $section = isset( $_GET[ 'section' ] ) ? $_GET[ 'section' ] : false;

                if ( $section ) {
                    switch ( $section ) {
                        case "edit_order_item":
                            // show edit page
                            $this->edit_order_item();
                            break;
                    }
                } else {

                    $action = isset( $_POST[ 'st_action' ] ) ? $_POST[ 'st_action' ] : false;
                    switch ( $action ) {
                        case "delete":
                            $this->_delete_items();
                            break;
                    }
                    echo balanceTags( $this->load_view( 'tour/booking_index', false ) );
                }

            }

            function add_booking()
            {

                echo balanceTags( $this->load_view( 'tour/booking_edit', false, [ 'page_title' => __( 'Add new Tour Booking', 'traveler' ) ] ) );
            }

            function _delete_items()
            {
                if ( empty( $_POST ) or !check_admin_referer( 'shb_action', 'shb_field' ) ) {
                    //// process form data, e.g. update fields
                    return;
                }
                $ids = isset( $_POST[ 'post' ] ) ? $_POST[ 'post' ] : [];
                if ( !empty( $ids ) ) {
                    foreach ( $ids as $id ){
                    	$status = get_post_meta($id, 'status', true);
                    	if(!empty($status)){
                    		if($status != 'canceled'){
								AvailabilityHelper::syncAvailabilityAfterCanceled($id);
		                    }
	                    }
	                    wp_delete_post( $id, true );
                        do_action('st_admin_delete_booking',$id);
                    }
                    die;
                }

                STAdmin::set_message( __( "Delete item(s) success", 'traveler' ), 'updated' );

            }

            function edit_order_item()
            {
                $item_id = isset( $_GET[ 'order_item_id' ] ) ? $_GET[ 'order_item_id' ] : false;
                if ( !$item_id or get_post_type( $item_id ) != 'st_order' ) {
                    return false;
                }


                echo balanceTags( $this->load_view( 'tour/booking_edit' ) );
            }

            function _save_booking( $order_id )
            {
                if ( !check_admin_referer( 'shb_action', 'shb_field' ) ) die;
                if ( $this->_check_validate() ) {

                    $check_out_field = STCart::get_checkout_fields();

                    if ( !empty( $check_out_field ) ) {
                        foreach ( $check_out_field as $field_name => $field_desc ) {
                            if($field_name != 'st_note'){
                                update_post_meta( $order_id, $field_name, STInput::post( $field_name ) );
                            }
                        }
                    }

                    $item_data = [
                        'status' => $_POST[ 'status' ],

                    ];

                    foreach ( $item_data as $key => $value ) {
                        update_post_meta( $order_id, $key, $value );
                    }

                    if ( TravelHelper::checkTableDuplicate( 'st_tours' ) ) {
                        global $wpdb;

                        $table = $wpdb->prefix . 'st_order_item_meta';
                        $data  = [
                            'status' => $_POST[ 'status' ],
                            'cancel_refund_status' => 'complete'
                        ];
                        $where = [
                            'order_item_id' => $order_id,
                        ];
                        $wpdb->update( $table, $data, $where );
                    }

                    STCart::send_mail_after_booking( $order_id, true );

                    do_action('st_admin_edit_booking_status',$item_data['status'],$order_id);

                    wp_safe_redirect( self::$booking_page );
                }
            }

            function _check_validate()
            {
                $st_first_name = STInput::request( 'st_first_name', '' );
                if ( empty( $st_first_name ) ) {
                    STAdmin::set_message( __( 'The firstname field is not empty.', 'traveler' ), 'danger' );

                    return false;
                }

                $st_last_name = STInput::request( 'st_last_name', '' );
                if ( empty( $st_last_name ) ) {
                    STAdmin::set_message( __( 'The lastname field is not empty.', 'traveler' ), 'danger' );

                    return false;
                }

                $st_email = STInput::request( 'st_email', '' );
                if ( empty( $st_email ) ) {
                    STAdmin::set_message( __( 'The email field is not empty.', 'traveler' ), 'danger' );

                    return false;
                }

                $st_phone = STInput::request( 'st_phone', '' );
                if ( empty( $st_phone ) ) {
                    STAdmin::set_message( __( 'The phone field is not empty.', 'traveler' ), 'danger' );

                    return false;
                }


                return true;
            }

            static function get_price_person( $post_id = null )
            {
                if ( !$post_id ) $post_id = get_the_ID();

                $adult_price = get_post_meta( $post_id, 'adult_price', true );
                $child_price = get_post_meta( $post_id, 'child_price', true );

                $adult_price = apply_filters( 'st_apply_tax_amount', $adult_price );
                $child_price = apply_filters( 'st_apply_tax_amount', $child_price );

                $discount         = get_post_meta( $post_id, 'discount', true );
                $is_sale_schedule = get_post_meta( $post_id, 'is_sale_schedule', true );

                if ( $is_sale_schedule == 'on' ) {
                    $sale_from = get_post_meta( $post_id, 'sale_price_from', true );
                    $sale_to   = get_post_meta( $post_id, 'sale_price_to', true );
                    if ( $sale_from and $sale_from ) {

                        $today     = date( 'Y-m-d' );
                        $sale_from = date( 'Y-m-d', strtotime( $sale_from ) );
                        $sale_to   = date( 'Y-m-d', strtotime( $sale_to ) );
                        if ( ( $today >= $sale_from ) && ( $today <= $sale_to ) ) {

                        } else {

                            $discount = 0;
                        }

                    } else {
                        $discount = 0;
                    }
                }

                if ( $discount ) {
                    if ( $discount > 100 ) $discount = 100;

                    $adult_price_new = $adult_price - ( $adult_price / 100 ) * $discount;
                    $child_price_new = $child_price - ( $child_price / 100 ) * $discount;
                    $data            = [
                        'adult'     => $adult_price,
                        'adult_new' => $adult_price_new,
                        'child'     => $child_price,
                        'child_new' => $child_price_new,
                        'discount'  => $discount,

                    ];
                } else {
                    $data = [
                        'adult_new' => $adult_price,
                        'adult'     => $adult_price,
                        'child'     => $child_price,
                        'child_new' => $child_price,
                        'discount'  => $discount,
                    ];
                }


                return $data;
            }

            function get_price_by_tour( $tour_id )
            {
                if ( !empty( $tour_id ) && get_post_type( $tour_id ) == 'st_tours' ) {
                    $price            = floatval( get_post_meta( $tour_id, 'price', true ) );
                    $discount         = get_post_meta( $tour_id, 'discount', true );
                    $is_sale_schedule = get_post_meta( $tour_id, 'is_sale_schedule', true );

                    if ( $is_sale_schedule == 'on' ) {
                        $sale_from = get_post_meta( $tour_id, 'sale_price_from', true );
                        $sale_to   = get_post_meta( $tour_id, 'sale_price_to', true );
                        if ( $sale_from and $sale_from ) {

                            $today     = date( 'Y-m-d' );
                            $sale_from = date( 'Y-m-d', strtotime( $sale_from ) );
                            $sale_to   = date( 'Y-m-d', strtotime( $sale_to ) );
                            if ( ( $today >= $sale_from ) && ( $today <= $sale_to ) ) {

                            } else {

                                $discount = 0;
                            }

                        } else {
                            $discount = 0;
                        }
                    }
                    if ( $discount ) {
                        if ( $discount > 100 ) $discount = 100;

                        $price_new = $price - ( $price / 100 ) * $discount;

                        return $price_new;
                    } else {
                        return $price;
                    }
                }
            }

            function filter_price_by_person( $price_old, $number, $key = 1 )
            {
                $flag_return = false;

                $discount_by_adult = ( get_post_meta( STInput::request( 'item_id' ), 'discount_by_adult', true ) );
                $discount_by_child = ( get_post_meta( STInput::request( 'item_id' ), 'discount_by_child', true ) );

                if ( $key == 1 and is_array( $discount_by_adult ) and !empty( $discount_by_adult ) ) {
                    foreach ( $discount_by_adult as $key => $value ) {
                        if ( $number >= $value[ 'key' ] ) {
                            $flag_return = ( 1 - $value[ 'value' ] / 100 ) * $price_old;

                        }
                        if ( !$flag_return ) {
                            $flag_return = $price_old;
                        }
                    }

                    return $flag_return;
                }
                if ( $key == 2 and is_array( $discount_by_child ) and !empty( $discount_by_child ) ) {

                    foreach ( $discount_by_child as $key => $value ) {
                        if ( $number >= $value[ 'key' ] ) {
                            $flag_return = ( 1 - $value[ 'value' ] / 100 ) * $price_old;
                        }
                        if ( !$flag_return ) {
                            $flag_return = $price_old;
                        }
                    }

                    return $flag_return;
                }

                return $price_old;
            }

            function is_able_edit()
            {
                $item_id = isset( $_GET[ 'order_item_id' ] ) ? $_GET[ 'order_item_id' ] : false;
                if ( !$item_id or get_post_type( $item_id ) != 'st_order' ) {
                    wp_safe_redirect( self::$booking_page );
                    die;
                }

                return true;
            }


            /* Function  update ========================================================= */

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

                if ( $post_type == 'st_tours' ) {
                    $location_id = get_post_meta( $post_id, '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'  => 'st_tours',
                        'meta_query' => [
                            [
                                'key'            => 'id_location',
                                'posts_per_page' => '-1',
                                'value'          => $ids_in,
                                'compare'        => 'IN',
                            ],
                        ],
                    ];
                    $query       = new WP_Query( $arg );
                    $offer_tours = $query->post_count;

                    // get total review
                    $arg   = [
                        'post_type'      => 'st_tours',
                        'posts_per_page' => '-1',
                        'meta_query'     => [
                            [
                                'key'     => 'id_location',
                                'value'   => [ $location_id ],
                                '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
                    $arg   = [
                        'post_type'      => 'st_tours',
                        'posts_per_page' => '1',
                        'order'          => 'ASC',
                        'meta_key'       => 'price',
                        'orderby'        => 'meta_value_num',
                        'meta_query'     => [
                            [
                                'key'     => 'id_location',
                                'value'   => [ $location_id ],
                                'compare' => 'IN',
                            ],
                        ],
                    ];
                    $query = new WP_Query( $arg );
                    if ( $query->have_posts() ) {
                        $query->the_post();
                        $price_min = get_post_meta( get_the_ID(), 'price', true );
                        update_post_meta( $location_id, 'review_st_tours', $total );
                        update_post_meta( $location_id, 'min_price_st_tours', $price_min );
                        update_post_meta( $location_id, 'offer_st_tours', $offer_tours );
                    }
                    wp_reset_postdata();

                }
            }

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

                if ( $post_type == 'st_tours' ) {
                    $discount = get_post_meta( $post_id, 'discount', true );
                    $price    = get_post_meta( $post_id, 'price', true );
                    if ( !empty( $discount ) ) {
                        $price_sale = (float)$price - (float)$price * ( (float)$discount / 100 );
                        update_post_meta( $post_id, 'price_sale', $price_sale );
                    }
                }
            }

            function add_col_header( $defaults )
            {

                $this->array_splice_assoc( $defaults, 2, 0, [
                    'tour_type'   => __( "Tour Type", 'traveler' ),
                    'price'       => __( 'Price', 'traveler' ),
                    'tour_layout' => __( 'Layout', 'traveler' ),

                ] );

                return $defaults;
            }

            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;
            }

            function add_col_content( $column_name, $post_ID )
            {
                if ( $column_name == 'tour_layout' ) {
                    // show content of 'directors_name' column
                    $parent = get_post_meta( $post_ID, 'st_custom_layout', TRUE );

                    if ( $parent ) {
                        echo "<a href='" . get_edit_post_link( $parent ) . "'>" . get_the_title( $parent ) . "</a>";
                    } else {
                        echo __( 'Default', 'traveler' );
                    }
                }
                if ( $column_name == 'tour_type' ) {
                    $type = get_post_meta( $post_ID, 'type_tour', true );
                    switch ( $type ) {
                        case 'daily_tour' :
                            echo __( "Daily Tour", 'traveler' );
                            break;
                        case 'specific_date':
                            echo __( "Specific Date", 'traveler' );
                            break;
                        default:
                            echo "none";
                            break;
                    }
                }
                if ( $column_name == 'price' ) {
                    $discount = get_post_meta( $post_ID, 'discount', true );
                    $discount_type    = get_post_meta( $post_ID, 'discount_type', TRUE );
                    $price_adult = get_post_meta( $post_ID, 'adult_price', true );
                    $price_child = get_post_meta( $post_ID, 'child_price', true );
                    $str_discount_type = ($discount_type == 'percent') ? '%' : '';
                    if ( !empty( $discount ) ) {
                        $is_sale_schedule = get_post_meta( $post_ID, 'is_sale_schedule', true );

                        $sale_adult = $price_adult - $price_adult * ( $discount / 100 );
                        $sale_child = $price_child - $price_child * ( $discount / 100 );
                        if ( isset( $discount_type ) && $discount_type == 'amount' ) {
                            $sale_adult = $price_adult - $discount;
                            $sale_child = $price_child - $discount;
                        }
                        if ( isset( $sale_adult ) && intval( $sale_adult ) < 0 ) {
                            $sale_adult = 0;
                        }
                        if ( isset( $sale_child ) && intval( $sale_child ) < 0 ) {
                            $sale_child = 0;
                        }
                        if ( $is_sale_schedule == "on" ) {
                            $sale_from = get_post_meta( $post_ID, 'sale_price_from', true );
                            $sale_from = mysql2date( 'd/m/Y', $sale_from );
                            $sale_to   = get_post_meta( $post_ID, 'sale_price_to', true );
                            $sale_to   = mysql2date( 'd/m/Y', $sale_to );
                            echo '<span> ' . __( "Adult Price", 'traveler' ) . ': ' . TravelHelper::format_money( $price_adult ) . '</span> <i class="fa fa-arrow-right"></i> <strong>' . TravelHelper::format_money( $sale_adult ) . '</strong><br>';
                            echo '<span>' . __( "Child Price", 'traveler' ) . ': ' . TravelHelper::format_money( $price_child ) . '</span> <i class="fa fa-arrow-right"></i> <strong>' . TravelHelper::format_money( $sale_child ) . '</strong><br>';
                            if ( isset( $discount_type ) && $discount_type == 'amount' ) {
                                echo '<span>' . __( 'Discount rate', 'traveler' ) . ' : ' . TravelHelper::format_money( $discount ) .'</span><br>';
                            } else {
                                echo '<span>' . __( 'Discount rate', 'traveler' ) . ' : ' . $discount . $str_discount_type .'</span><br>';
                            }
                            echo '<span> ' . $sale_from . ' <i class="fa fa-arrow-right"></i> ' . $sale_to . '</span>';
                        } else {
                            echo '<span> ' . __( "Adult Price", 'traveler' ) . ': ' . TravelHelper::format_money( $price_adult ) . '</span> <i class="fa fa-arrow-right"></i> <strong>' . TravelHelper::format_money( $sale_adult ) . '</strong><br>';
                            echo '<span>' . __( "Child Price", 'traveler' ) . ': ' . TravelHelper::format_money( $price_child ) . '</span> <i class="fa fa-arrow-right"></i> <strong>' . TravelHelper::format_money( $sale_child ) . '</strong><br>';
                            if ( isset( $discount_type ) && $discount_type == 'amount' ) {
                                echo '<span>' . __( 'Discount rate', 'traveler' ) . ' : ' . TravelHelper::format_money( $discount ) .'</span><br>';
                            } else {
                                echo '<span>' . __( 'Discount rate', 'traveler' ) . ' : ' . $discount . $str_discount_type .'</span><br>';
                            }
                        }
                    } else {
                        echo '<span> ' . __( "Adult Price", 'traveler' ) . ': ' . TravelHelper::format_money( $price_adult ) . '</span><br>';
                        echo '<span>' . __( "Child Price", 'traveler' ) . ': ' . TravelHelper::format_money( $price_child ) . '</span>';
                    }
                }
            }

            public function _upgradeColumnDiscountTypeTourTable(){
                $updated = get_option('st_upgrade_column_discount_type_tour_table', false);
                if(!$updated){
                    global $wpdb;
                    $table = $wpdb->prefix. $this->post_type;
                    $sql = "Update {$table} as t inner join {$wpdb->postmeta} as m on (t.post_id = m.post_id and m.meta_key = 'discount_type') set t.discount_type = m.meta_value";
                    $wpdb->query($sql);
                    update_option('st_upgrade_column_discount_type_tour_table', true);
                }
            }


	        static function inst()
	        {
		        if ( !self::$_inst ) {
			        self::$_inst = new self();
		        }

		        return self::$_inst;
	        }
        }

	    STAdminTours::inst();
    }