/**
  * Save Booking data for the product
  *
  * @param  int $post_id
  */
 public function save_product_data($post_id)
 {
     global $wpdb;
     $product_type = empty($_POST['product-type']) ? 'simple' : sanitize_title(stripslashes($_POST['product-type']));
     $has_additional_costs = false;
     if ('booking' !== $product_type) {
         return;
     }
     // Save meta
     $meta_to_save = array('_wc_booking_base_cost' => 'float', '_wc_booking_cost' => 'float', '_wc_display_cost' => '', '_wc_booking_min_duration' => 'int', '_wc_booking_max_duration' => 'int', '_wc_booking_enable_range_picker' => 'yesno', '_wc_booking_calendar_display_mode' => '', '_wc_booking_qty' => 'int', '_wc_booking_has_persons' => 'issetyesno', '_wc_booking_person_qty_multiplier' => 'yesno', '_wc_booking_person_cost_multiplier' => 'yesno', '_wc_booking_min_persons_group' => 'int', '_wc_booking_max_persons_group' => 'int', '_wc_booking_has_person_types' => 'yesno', '_wc_booking_has_resources' => 'issetyesno', '_wc_booking_resources_assignment' => '', '_wc_booking_duration_type' => '', '_wc_booking_duration' => 'int', '_wc_booking_duration_unit' => '', '_wc_booking_user_can_cancel' => '', '_wc_booking_cancel_limit' => 'int', '_wc_booking_cancel_limit_unit' => '', '_wc_booking_max_date' => 'max_date', '_wc_booking_max_date_unit' => 'max_date_unit', '_wc_booking_min_date' => 'int', '_wc_booking_min_date_unit' => '', '_wc_booking_first_block_time' => '', '_wc_booking_requires_confirmation' => 'yesno', '_wc_booking_default_date_availability' => '', '_wc_booking_check_availability_against' => '', '_wc_booking_resouce_label' => '');
     foreach ($meta_to_save as $meta_key => $sanitize) {
         $value = !empty($_POST[$meta_key]) ? $_POST[$meta_key] : '';
         switch ($sanitize) {
             case 'int':
                 $value = $value ? absint($value) : '';
                 break;
             case 'float':
                 $value = $value ? floatval($value) : '';
                 break;
             case 'yesno':
                 $value = $value == 'yes' ? 'yes' : 'no';
                 break;
             case 'issetyesno':
                 $value = $value ? 'yes' : 'no';
                 break;
             case 'max_date':
                 $value = absint($value);
                 if ($value == 0) {
                     $value = 1;
                 }
                 break;
             default:
                 $value = sanitize_text_field($value);
         }
         update_post_meta($post_id, $meta_key, $value);
     }
     // Availability
     $availability = array();
     $row_size = isset($_POST["wc_booking_availability_type"]) ? sizeof($_POST["wc_booking_availability_type"]) : 0;
     for ($i = 0; $i < $row_size; $i++) {
         $availability[$i]['type'] = wc_clean($_POST["wc_booking_availability_type"][$i]);
         $availability[$i]['bookable'] = wc_clean($_POST["wc_booking_availability_bookable"][$i]);
         switch ($availability[$i]['type']) {
             case 'custom':
                 $availability[$i]['from'] = wc_clean($_POST["wc_booking_availability_from_date"][$i]);
                 $availability[$i]['to'] = wc_clean($_POST["wc_booking_availability_to_date"][$i]);
                 break;
             case 'months':
                 $availability[$i]['from'] = wc_clean($_POST["wc_booking_availability_from_month"][$i]);
                 $availability[$i]['to'] = wc_clean($_POST["wc_booking_availability_to_month"][$i]);
                 break;
             case 'weeks':
                 $availability[$i]['from'] = wc_clean($_POST["wc_booking_availability_from_week"][$i]);
                 $availability[$i]['to'] = wc_clean($_POST["wc_booking_availability_to_week"][$i]);
                 break;
             case 'days':
                 $availability[$i]['from'] = wc_clean($_POST["wc_booking_availability_from_day_of_week"][$i]);
                 $availability[$i]['to'] = wc_clean($_POST["wc_booking_availability_to_day_of_week"][$i]);
                 break;
             case 'time':
             case 'time:1':
             case 'time:2':
             case 'time:3':
             case 'time:4':
             case 'time:5':
             case 'time:6':
             case 'time:7':
                 $availability[$i]['from'] = wc_booking_sanitize_time($_POST["wc_booking_availability_from_time"][$i]);
                 $availability[$i]['to'] = wc_booking_sanitize_time($_POST["wc_booking_availability_to_time"][$i]);
                 break;
         }
     }
     update_post_meta($post_id, '_wc_booking_availability', $availability);
     // Pricing
     $pricing = array();
     $row_size = isset($_POST["wc_booking_pricing_type"]) ? sizeof($_POST["wc_booking_pricing_type"]) : 0;
     for ($i = 0; $i < $row_size; $i++) {
         $pricing[$i]['type'] = wc_clean($_POST["wc_booking_pricing_type"][$i]);
         $pricing[$i]['cost'] = wc_clean($_POST["wc_booking_pricing_cost"][$i]);
         $pricing[$i]['modifier'] = wc_clean($_POST["wc_booking_pricing_cost_modifier"][$i]);
         $pricing[$i]['base_cost'] = wc_clean($_POST["wc_booking_pricing_base_cost"][$i]);
         $pricing[$i]['base_modifier'] = wc_clean($_POST["wc_booking_pricing_base_cost_modifier"][$i]);
         switch ($pricing[$i]['type']) {
             case 'custom':
                 $pricing[$i]['from'] = wc_clean($_POST["wc_booking_pricing_from_date"][$i]);
                 $pricing[$i]['to'] = wc_clean($_POST["wc_booking_pricing_to_date"][$i]);
                 break;
             case 'months':
                 $pricing[$i]['from'] = wc_clean($_POST["wc_booking_pricing_from_month"][$i]);
                 $pricing[$i]['to'] = wc_clean($_POST["wc_booking_pricing_to_month"][$i]);
                 break;
             case 'weeks':
                 $pricing[$i]['from'] = wc_clean($_POST["wc_booking_pricing_from_week"][$i]);
                 $pricing[$i]['to'] = wc_clean($_POST["wc_booking_pricing_to_week"][$i]);
                 break;
             case 'days':
                 $pricing[$i]['from'] = wc_clean($_POST["wc_booking_pricing_from_day_of_week"][$i]);
                 $pricing[$i]['to'] = wc_clean($_POST["wc_booking_pricing_to_day_of_week"][$i]);
                 break;
             case 'time':
             case 'time:1':
             case 'time:2':
             case 'time:3':
             case 'time:4':
             case 'time:5':
             case 'time:6':
             case 'time:7':
                 $pricing[$i]['from'] = wc_booking_sanitize_time($_POST["wc_booking_pricing_from_time"][$i]);
                 $pricing[$i]['to'] = wc_booking_sanitize_time($_POST["wc_booking_pricing_to_time"][$i]);
                 break;
             default:
                 $pricing[$i]['from'] = wc_clean($_POST["wc_booking_pricing_from"][$i]);
                 $pricing[$i]['to'] = wc_clean($_POST["wc_booking_pricing_to"][$i]);
                 break;
         }
         if ($pricing[$i]['cost'] > 0) {
             $has_additional_costs = true;
         }
     }
     update_post_meta($post_id, '_wc_booking_pricing', $pricing);
     // Resources
     if (isset($_POST['resource_id']) && isset($_POST['_wc_booking_has_resources'])) {
         $resource_ids = $_POST['resource_id'];
         $resource_menu_order = $_POST['resource_menu_order'];
         $resource_base_cost = $_POST['resource_cost'];
         $resource_block_cost = $_POST['resource_block_cost'];
         $max_loop = max(array_keys($_POST['resource_id']));
         $resource_base_costs = array();
         $resource_block_costs = array();
         for ($i = 0; $i <= $max_loop; $i++) {
             if (!isset($resource_ids[$i])) {
                 continue;
             }
             $resource_id = absint($resource_ids[$i]);
             $wpdb->update("{$wpdb->prefix}wc_booking_relationships", array('sort_order' => $resource_menu_order[$i]), array('product_id' => $post_id, 'resource_id' => $resource_id));
             $resource_base_costs[$resource_id] = wc_clean($resource_base_cost[$i]);
             $resource_block_costs[$resource_id] = wc_clean($resource_block_cost[$i]);
             if ($resource_base_cost[$i] + $resource_block_cost[$i] > 0) {
                 $has_additional_costs = true;
             }
         }
         update_post_meta($post_id, '_resource_base_costs', $resource_base_costs);
         update_post_meta($post_id, '_resource_block_costs', $resource_block_costs);
     }
     // Person Types
     if (isset($_POST['person_id']) && isset($_POST['_wc_booking_has_persons'])) {
         $person_ids = $_POST['person_id'];
         $person_menu_order = $_POST['person_menu_order'];
         $person_name = $_POST['person_name'];
         $person_cost = $_POST['person_cost'];
         $person_block_cost = $_POST['person_block_cost'];
         $person_description = $_POST['person_description'];
         $person_min = $_POST['person_min'];
         $person_max = $_POST['person_max'];
         $max_loop = max(array_keys($_POST['person_id']));
         for ($i = 0; $i <= $max_loop; $i++) {
             if (!isset($person_ids[$i])) {
                 continue;
             }
             $person_id = absint($person_ids[$i]);
             if (empty($person_name[$i])) {
                 $person_name[$i] = sprintf(__('Person Type #%d', 'woocommerce-bookings'), $i + 1);
             }
             $wpdb->update($wpdb->posts, array('post_title' => stripslashes($person_name[$i]), 'post_excerpt' => stripslashes($person_description[$i]), 'menu_order' => $person_menu_order[$i]), array('ID' => $person_id), array('%s', '%s', '%d'), array('%d'));
             update_post_meta($person_id, 'cost', woocommerce_clean($person_cost[$i]));
             update_post_meta($person_id, 'block_cost', woocommerce_clean($person_block_cost[$i]));
             update_post_meta($person_id, 'min', woocommerce_clean($person_min[$i]));
             update_post_meta($person_id, 'max', woocommerce_clean($person_max[$i]));
             if ($person_cost[$i] > 0 || $person_block_cost[$i] > 0) {
                 $has_additional_costs = true;
             }
         }
     }
     update_post_meta($post_id, '_has_additional_costs', $has_additional_costs ? 'yes' : 'no');
     update_post_meta($post_id, '_regular_price', '');
     update_post_meta($post_id, '_sale_price', '');
     update_post_meta($post_id, '_manage_stock', 'no');
     // Set price so filters work - using get_base_cost()
     $bookable_product = get_product($post_id);
     update_post_meta($post_id, '_price', $bookable_product->get_base_cost());
 }
                $availability[$i]['to'] = wc_clean($_POST['wc_booking_availability_to_week'][$i]);
                break;
            case 'days':
                $availability[$i]['from'] = wc_clean($_POST['wc_booking_availability_from_day_of_week'][$i]);
                $availability[$i]['to'] = wc_clean($_POST['wc_booking_availability_to_day_of_week'][$i]);
                break;
            case 'time':
            case 'time:1':
            case 'time:2':
            case 'time:3':
            case 'time:4':
            case 'time:5':
            case 'time:6':
            case 'time:7':
                $availability[$i]['from'] = wc_booking_sanitize_time($_POST['wc_booking_availability_from_time'][$i]);
                $availability[$i]['to'] = wc_booking_sanitize_time($_POST['wc_booking_availability_to_time'][$i]);
                break;
        }
    }
    update_option('wc_global_booking_availability', $availability);
    echo '<div class="updated"><p>' . __('Settings saved', 'woocommerce-bookings') . '</p></div>';
}
?>

<form method="post" action="" id="bookings_settings">
	<input type="hidden" name="bookings_availability_submitted" value="1" />
	<div id="poststuff">
		<div class="postbox">
			<h3 class="hndle"><?php 
_e('Global availability', 'woocommerce-bookings');
?>
 /**
  * Save handler
  */
 public function meta_box_save($post_id)
 {
     if (!isset($_POST['bookable_resource_details_meta_box_nonce']) || !wp_verify_nonce($_POST['bookable_resource_details_meta_box_nonce'], 'bookable_resource_details_meta_box')) {
         return $post_id;
     }
     if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
         return $post_id;
     }
     if (!in_array($_POST['post_type'], $this->post_types)) {
         return $post_id;
     }
     // Qty field
     update_post_meta($post_id, 'qty', wc_clean($_POST['_wc_booking_qty']));
     // Availability
     $availability = array();
     $row_size = isset($_POST["wc_booking_availability_type"]) ? sizeof($_POST["wc_booking_availability_type"]) : 0;
     for ($i = 0; $i < $row_size; $i++) {
         $availability[$i]['type'] = wc_clean($_POST["wc_booking_availability_type"][$i]);
         $availability[$i]['bookable'] = wc_clean($_POST["wc_booking_availability_bookable"][$i]);
         switch ($availability[$i]['type']) {
             case 'custom':
                 $availability[$i]['from'] = wc_clean($_POST["wc_booking_availability_from_date"][$i]);
                 $availability[$i]['to'] = wc_clean($_POST["wc_booking_availability_to_date"][$i]);
                 break;
             case 'months':
                 $availability[$i]['from'] = wc_clean($_POST["wc_booking_availability_from_month"][$i]);
                 $availability[$i]['to'] = wc_clean($_POST["wc_booking_availability_to_month"][$i]);
                 break;
             case 'weeks':
                 $availability[$i]['from'] = wc_clean($_POST["wc_booking_availability_from_week"][$i]);
                 $availability[$i]['to'] = wc_clean($_POST["wc_booking_availability_to_week"][$i]);
                 break;
             case 'days':
                 $availability[$i]['from'] = wc_clean($_POST["wc_booking_availability_from_day_of_week"][$i]);
                 $availability[$i]['to'] = wc_clean($_POST["wc_booking_availability_to_day_of_week"][$i]);
                 break;
             case 'time':
             case 'time:1':
             case 'time:2':
             case 'time:3':
             case 'time:4':
             case 'time:5':
             case 'time:6':
             case 'time:7':
                 $availability[$i]['from'] = wc_booking_sanitize_time($_POST["wc_booking_availability_from_time"][$i]);
                 $availability[$i]['to'] = wc_booking_sanitize_time($_POST["wc_booking_availability_to_time"][$i]);
                 break;
         }
     }
     update_post_meta($post_id, '_wc_booking_availability', $availability);
 }