/** * 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); }