File manager - Edit - /home/aussies6/public_html/wp-content/plugins/order-delivery-date/orddd-settings.php
Back
<?php /** * Order Delivery Date Settings * * It has all the settings declarations in the admin. * * @author Tyche Softwares * @package Order-Delivery-Date-Pro-for-WooCommerce/Admin/Settings * @since 2.8.3 * @category Classes */ if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly } include_once( 'includes/class-orddd-date-settings.php' ); include_once( 'includes/class-orddd-shipping-days-settings.php' ); include_once( 'includes/class-orddd-time-settings.php' ); include_once( 'includes/class-orddd-holidays-settings.php' ); include_once( 'includes/class-orddd-appearance-settings.php' ); include_once( 'includes/orddd-delivery-days-settings.php' ); include_once( 'includes/class-orddd-time-slot-settings.php' ); include_once( 'includes/class-orddd-additional-settings.php' ); include_once( 'includes/class-orddd-shipping-based-settings.php' ); include_once( 'includes/class-orddd-calendar-sync-settings.php' ); /** * Add order delivery date settings. * * @since 2.8.3 */ class orddd_settings { /** * Default Constructor * * @since 2.8.3 */ public function __construct() { add_action( 'wp_ajax_orddd_advance_settings_save_changes', array( &$this, 'orddd_advance_settings_save_changes' ) ); // WordPress Administration Menu add_action( 'admin_menu', array( &$this, 'orddd_menu' ) ); //Delete Settings add_action( 'admin_init', array( &$this, 'orddd_delete_settings' ) ); // Setting Registration if( ( isset( $_GET[ 'action' ] ) && 'orddd_import_export_settings' !== $_GET[ 'action' ] ) || ! isset( $_GET[ 'action' ] ) ) { add_action( 'admin_init', array( &$this, 'order_delivery_date_admin_settings' ) ); add_action( 'admin_init', array( &$this, 'orddd_integration_of_plugins' ), 15 ); add_action( 'admin_init', array( &$this, 'orddd_time_settings' ) ); add_action( 'admin_init', array( &$this, 'orddd_holidays_settings' ) ); add_action( 'admin_init', array( &$this, 'orddd_disable_time_slot_settings' ) ); add_action( 'admin_init', array( &$this, 'orddd_appearance_settings' ) ); add_action( 'admin_init', array( &$this, 'orddd_delivery_days_settings' ) ); add_action( 'admin_init', array( &$this, 'orddd_time_slot_settings' ) ); add_action( 'admin_init', array( &$this, 'orddd_shipping_based_delivery_callback' ) ); add_action( 'admin_init', array( &$this, 'orddd_shipping_based_settings_callback' ) ); add_action( 'admin_init', array( &$this, 'orddd_calendar_sync_settings_callback' ) ); } //Enable Delivery Date checkbox on Product Categories page add_action( 'product_cat_add_form_fields', array( &$this, 'orddd_enable_for_product_category' ) ); add_action( 'product_cat_edit_form_fields', array( &$this, 'orddd_edit_delivery_field_for_product_category' ), 10, 2 ); add_action( 'created_term', array( &$this, 'orddd_save_category_fields' ), 10,3 ); add_action( 'edit_term', array( &$this, 'orddd_save_category_fields' ), 10, 3 ); add_filter( 'manage_edit-product_cat_columns', array( &$this, 'orddd_product_cat_columns' ) ); add_filter( 'manage_product_cat_custom_column', array( &$this, 'orddd_product_cat_column' ), 10, 3 ); add_filter( 'woocommerce_screen_ids', array( &$this, 'set_wc_screen_ids' ) ); } /** * Add screen ids to WooCommerce in order to make wc_help_tip work * * @param array $screen Screen IDs array * @return array Screen IDs array * @since 8.2 */ public function set_wc_screen_ids( $screen ) { $screen[] = 'order-delivery-date_page_orddd_view_orders'; $screen[] = 'toplevel_page_order_delivery_date'; return $screen; } /** * Add settings fields & Register settings in Date Settings tab using Settings API * * @since 2.8.3 */ public function order_delivery_date_admin_settings() { global $orddd_weekdays, $orddd_shipping_days; // First, we register a section. This is necessary since all future options must belong to one. add_settings_section( 'orddd_date_settings_section', // ID used to identify this section and with which to register options __( 'Order Delivery Date Settings', 'order-delivery-date' ), // Title to be displayed on the administration page array( 'Orddd_Date_Settings', 'orddd_delivery_date_setting' ), // Callback used to render the description of the section 'orddd_date_settings_page' // Page on which to add this section of options ); add_settings_field( 'orddd_enable_delivery_date', __( 'Enable Delivery Date:', 'order-delivery-date' ), array( 'Orddd_Date_Settings', 'orddd_enable_delivery_date_callback' ), 'orddd_date_settings_page', 'orddd_date_settings_section', array ( __( 'Enable Delivery Date capture on the checkout page.', 'order-delivery-date' ) ) ); do_action( 'orddd_after_enable_delivery_date_setting' ); add_settings_field( 'orddd_delivery_checkout_options', __( 'Delivery Checkout options:', 'order-delivery-date' ), array( 'Orddd_Date_Settings', 'orddd_delivery_checkout_options_callback' ), 'orddd_date_settings_page', 'orddd_date_settings_section', array ( __( 'Choose the delivery date option to be displayed on the checkout page.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_delivery_days', __( 'Delivery Days:', 'order-delivery-date' ), array( 'Orddd_Date_Settings', 'orddd_delivery_days_callback' ), 'orddd_date_settings_page', 'orddd_date_settings_section', array ( __( 'Select weekdays for deliveries.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_enable_day_wise_settings', __( 'Weekday Settings:', 'order-delivery-date' ), array( 'Orddd_Date_Settings', 'orddd_enable_day_wise_settings_callback' ), 'orddd_date_settings_page', 'orddd_date_settings_section', array ( __( 'Enable this setting to add Additional charges, Additional charges\' checkout label, Same day cut-off time, Next day cut-off time and Minimum Delivery Time (in hours) for each weekday.' ) ) ); add_settings_field( 'orddd_minimumOrderDays', __( 'Minimum Delivery time (in hours):', 'order-delivery-date' ), array( 'Orddd_Date_Settings', 'orddd_minimum_delivery_time_callback' ), 'orddd_date_settings_page', 'orddd_date_settings_section', array( __( 'Minimum number of hours required to prepare for delivery.<br><em> Note: This setting will be applied with Same day & Next day cutoff. Please refer <a href="https://www.tychesoftwares.com/how-does-minimum-delivery-time-work-with-same-day-next-day-cutoff-settings/" target="_blank">this post</a> to know more.</em>', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_number_of_dates', __( 'Number of dates to choose:', 'order-delivery-date' ), array( 'Orddd_Date_Settings', 'orddd_number_of_dates_callback' ), 'orddd_date_settings_page', 'orddd_date_settings_section', array ( __( 'Number of dates available for delivery.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_date_field_mandatory', __( 'Mandatory field?:', 'order-delivery-date' ), array( 'Orddd_Date_Settings', 'orddd_date_field_mandatory_callback' ), 'orddd_date_settings_page', 'orddd_date_settings_section', array ( __( 'Selection of delivery date on the checkout page will become mandatory.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_lockout_date_after_orders', __( 'Maximum Order Deliveries per day (based on per order):', 'order-delivery-date' ), array( 'Orddd_Date_Settings', 'orddd_lockout_date_after_orders_callback' ), 'orddd_date_settings_page', 'orddd_date_settings_section', array ( __( 'A date will become unavailable for further deliveries once these many orders are placed for delivery for that date.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_lockout_date_quantity_based', __( 'Enable Maximum Deliveries based on per product quantity:', 'order-delivery-date' ), array( 'Orddd_Date_Settings', 'orddd_lockout_date_quantity_based_callback' ), 'orddd_date_settings_page', 'orddd_date_settings_section', array ( __( 'If this is enabled, then the date and time (if enabled) will become unavailable for further deliveries once these many product quantities are selected for delivery for that date and time (if enabled). For example, if an order has a product for 2 quantity in the cart, then the availability for a date will be reduced by 2. If this setting is disabled, then the availability will be reduced by 1.<br><i>Note: The availability will be reduced by product quantities for General settings as well as for Custom Delivery Settings, if this setting is enabled.</i>', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_text_block_between_days', __( 'Delivery Range', 'order-delivery-date' ), array( 'Orddd_Date_Settings', 'orddd_text_block_between_days_callback' ), 'orddd_date_settings_page', 'orddd_date_settings_section', array ( __( '</br>Interval of days it takes to deliver an order after submitting the order.', 'order-delivery-date' ) ) ); // Finally, we register the fields with WordPress register_setting( 'orddd_date_settings', 'orddd_enable_delivery_date' ); register_setting( 'orddd_date_settings', 'orddd_delivery_checkout_options' ); foreach ( $orddd_weekdays as $n => $day_name ) { register_setting( 'orddd_date_settings', $n, array( 'Orddd_Date_Settings', $n . '_save' ) ); } register_setting( 'orddd_date_settings', 'orddd_enable_day_wise_settings' ); register_setting( 'orddd_date_settings', 'orddd_minimumOrderDays' ); register_setting( 'orddd_date_settings', 'orddd_number_of_dates' ); register_setting( 'orddd_date_settings', 'orddd_date_field_mandatory' ); register_setting( 'orddd_date_settings', 'orddd_lockout_date_after_orders' ); register_setting( 'orddd_date_settings', 'orddd_lockout_date_quantity_based' ); // Shipping Days section add_settings_section( 'orddd_shipping_days_settings_section', __( 'Shipping Days Settings', 'order-delivery-date' ), array( 'Orddd_Shipping_Days_Settings', 'orddd_shipping_days_settings_section_callback' ), 'orddd_date_settings_page' ); add_settings_field( 'orddd_enable_shipping_days', __( 'Enable Shipping days based calculation:', 'order-delivery-date' ), array( 'Orddd_Shipping_Days_Settings', 'orddd_enable_shipping_days_callback'), 'orddd_date_settings_page', 'orddd_shipping_days_settings_section', array ( __( 'Calculate Minimum Delivery Time (in hours), Same Day cut-off and Next Day cut-off based on the shipping days selected.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_shipping_days', __( 'Shipping Days:', 'order-delivery-date' ), array( 'Orddd_Shipping_Days_Settings', 'orddd_shipping_days_callback' ), 'orddd_date_settings_page', 'orddd_shipping_days_settings_section', array ( __( 'Select weekdays for shipping.', 'order-delivery-date' ) ) ); register_setting( 'orddd_date_settings', 'orddd_enable_shipping_days' ); foreach ( $orddd_shipping_days as $n => $day_name ) { register_setting( 'orddd_date_settings', $n, array( 'Orddd_Shipping_Days_Settings', $n . '_save' ) ); } register_setting( 'orddd_date_settings', 'orddd_min_between_days' ); register_setting( 'orddd_date_settings', 'orddd_max_between_days' ); } /** * Add settings fields & Register settings in Date Settings tab for Integration with our plugins * * @since 2.8.3 */ public function orddd_integration_of_plugins() { add_settings_section( 'orddd_additional_settings_section', __( 'Additional Settings', 'order-delivery-date' ), array( 'orddd_additional_settings', 'orddd_additional_settings_section_callback' ), 'orddd_additional_settings_page' ); add_settings_field( 'orddd_show_column_on_orders_page_check', __( 'Show on Orders Listing Page:', 'order-delivery-date' ), array( 'orddd_additional_settings', 'orddd_show_column_on_orders_page_check_callback'), 'orddd_additional_settings_page', 'orddd_additional_settings_section', array ( __( 'Displays the Delivery Date on the WooCommerce->Orders page.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_show_filter_on_orders_page_check', __( 'Show Filter on Orders Listing Page:', 'order-delivery-date' ), array( 'orddd_additional_settings', 'orddd_show_filter_on_orders_page_check_callback' ), 'orddd_additional_settings_page', 'orddd_additional_settings_section', array ( __( 'Displays the Filter on the WooCommerce->Orders page that allows you to view orders to be delivered today, tomorrow or in any month.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_enable_autofill_of_delivery_date', __( 'Auto-populate first available Delivery date:', 'order-delivery-date' ), array( 'orddd_additional_settings', 'orddd_enable_autofill_of_delivery_date_callback' ), 'orddd_additional_settings_page', 'orddd_additional_settings_section', array ( __( 'Auto-populate first available Delivery date when the checkout page loads.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_enable_tax_calculation_for_delivery_charges', __( 'Enable Tax calculation for Delivery charges', 'order-delivery-date' ), array( 'orddd_additional_settings', 'orddd_enable_tax_calculation_for_delivery_charges_callback' ), 'orddd_additional_settings_page', 'orddd_additional_settings_section', array ( __( 'Enable Tax calculation for Delivery charges on the checkout page.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_no_fields_for_product_type', __( 'Disable the Delivery Date and Time Slot Fields for:', 'order-delivery-date' ), array( 'orddd_additional_settings', 'orddd_appearance_virtual_product_callback' ), 'orddd_additional_settings_page', 'orddd_additional_settings_section', array( __( '<br>Disable the Delivery Date and Time Slot on the Checkout page for Virtual products and Featured products.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_allow_customers_to_edit_date', __( 'Allow Customers to edit Delivery Date & Time:', 'order-delivery-date' ), array( 'orddd_additional_settings', 'orddd_allow_customers_to_edit_date_callback' ), 'orddd_additional_settings_page', 'orddd_additional_settings_section', array( __( 'When enabled, it will add Delivery Date & Time field on the My Account -> Orders -> View page. So customers will be able to edit the date and time once the order is placed.<br>', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_enable_availability_display', __( 'Display availability on date', 'order-delivery-date' ), array( 'orddd_additional_settings', 'orddd_enable_availability_display_callback' ), 'orddd_additional_settings_page', 'orddd_additional_settings_section', array( __( 'When enabled, it will display the availability on hover of the dates in the delivery calendar on checkout page.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_show_partially_booked_dates', __( 'Show Partially Booked Dates on the Delivery Calendar', 'order-delivery-date' ), array( 'orddd_additional_settings', 'orddd_show_partially_booked_dates_callback' ), 'orddd_additional_settings_page', 'orddd_additional_settings_section', array( __( 'When enabled, it will show the dates with diagonally separated colors of Booked dates and Available Dates if 1 or more orders are placed for that date. <div class="orddd-tooltip">Preview here.<span class="orddd-tooltipimg"><img src="' . plugins_url() . '/order-delivery-date/images/partial-booked-dates.png"></span></div>', 'order-delivery-date' ) ) ); add_settings_section( 'orddd_integration_with_other_plugins', __( 'Integration with Other Plugins:', 'order-delivery-date' ), array( 'orddd_additional_settings', 'orddd_integration_with_other_plugins_callback' ), 'orddd_additional_settings_page' ); add_settings_field( 'orddd_show_fields_in_csv_export_check', __( 'WooCommerce Customer/ Order CSV Export plugin', 'order-delivery-date' ), array( 'orddd_additional_settings', 'orddd_show_fields_in_csv_export_check_callback' ), 'orddd_additional_settings_page', 'orddd_integration_with_other_plugins', array ( __( 'Displays the Delivery details in the CSV Export File.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_show_fields_in_pdf_invoice_and_packing_slips', __( 'WooCommerce PDF Invoices & Packing Slips plugin', 'order-delivery-date' ), array( 'orddd_additional_settings', 'orddd_show_fields_in_pdf_invoice_and_packing_slips_callback' ), 'orddd_additional_settings_page', 'orddd_integration_with_other_plugins', array ( __( 'Displays the Delivery details in the PDF Invoice and Packing Slips.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_show_fields_in_invoice_and_delivery_note', __( 'WooCommerce Print Invoice & Delivery Note plugin', 'order-delivery-date' ), array( 'orddd_additional_settings', 'orddd_show_fields_in_invoice_and_delivery_note_callback' ), 'orddd_additional_settings_page', 'orddd_integration_with_other_plugins', array ( __( 'Displays the Delivery details in the Invoice and Delivery Note.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_show_fields_in_cloud_print_orders', __( 'WooCommerce Print orders plugin', 'order-delivery-date'), array( 'orddd_additional_settings', 'orddd_show_fields_in_cloud_print_orders_callback' ), 'orddd_additional_settings_page', 'orddd_integration_with_other_plugins', array ( __( 'Displays the Delivery details in the print copy of the order.', 'order-delivery-date' ) ) ); /** * Add settings fields & Register settings in Additional Settings tab for Compatility with other plugins * * @since 2.8.3 */ add_settings_section( 'orddd_compatibility_with_other_plugins', __( 'Compatibility with Other Plugins:', 'order-delivery-date' ), array( 'orddd_additional_settings', 'orddd_compatibility_with_other_plugins_callback' ), 'orddd_additional_settings_page' ); add_settings_field( 'orddd_shipping_multiple_address_compatibility', __( 'WooCommerce Shipping Multiple addresses', 'order-delivery-date' ), array( 'orddd_additional_settings', 'orddd_shipping_multiple_address_compatibility_callback' ), 'orddd_additional_settings_page', 'orddd_compatibility_with_other_plugins', array ( __( 'When enabled, it will allow to choose a Delivery Date & Time (if enabled) for each shipping address chosen on checkout page with the WooCommerce Shipping Multiple addresses plugin.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_amazon_payments_advanced_gateway_compatibility', __( 'WooCommerce Amazon Payments Advanced Gateway', 'order-delivery-date' ), array( 'orddd_additional_settings', 'orddd_amazon_payments_advanced_gateway_compatibility_callback' ), 'orddd_additional_settings_page', 'orddd_compatibility_with_other_plugins', array ( __( 'If enabled, it will add the Delivery Date and Time fields when the customer clicks on "Pay with Amazon" button.', 'order-delivery-date' ) ) ); register_setting( 'orddd_additional_settings', 'orddd_amazon_payments_advanced_gateway_compatibility' ); register_setting( 'orddd_additional_settings', 'orddd_show_fields_in_csv_export_check' ); register_setting( 'orddd_additional_settings', 'orddd_show_fields_in_pdf_invoice_and_packing_slips' ); register_setting( 'orddd_additional_settings', 'orddd_show_fields_in_invoice_and_delivery_note' ); register_setting( 'orddd_additional_settings', 'orddd_show_fields_in_cloud_print_orders' ); register_setting( 'orddd_additional_settings', 'orddd_show_column_on_orders_page_check' ); register_setting( 'orddd_additional_settings', 'orddd_enable_default_sorting_of_column' ); register_setting( 'orddd_additional_settings', 'orddd_show_filter_on_orders_page_check' ); register_setting( 'orddd_additional_settings', 'orddd_enable_autofill_of_delivery_date' ); register_setting( 'orddd_additional_settings', 'orddd_enable_tax_calculation_for_delivery_charges' ); register_setting( 'orddd_additional_settings', 'orddd_no_fields_for_virtual_product' ); register_setting( 'orddd_additional_settings', 'orddd_no_fields_for_featured_product' ); register_setting( 'orddd_additional_settings', 'orddd_allow_customers_to_edit_date' ); register_setting( 'orddd_additional_settings', 'orddd_enable_availability_display' ); register_setting( 'orddd_additional_settings', 'orddd_show_partially_booked_dates' ); register_setting( 'orddd_additional_settings', 'orddd_send_email_to_admin_when_date_updated' ); register_setting( 'orddd_additional_settings', 'orddd_disable_edit_after_cutoff' ); register_setting( 'orddd_additional_settings', 'orddd_shipping_multiple_address_compatibility' ); do_action( "orddd_add_new_settings" ); } /** * Add settings fields & Register settings in Time Settings tab * * @since 2.8.3 */ public function orddd_time_settings() { add_settings_section( 'orddd_time_settings', __( 'Order Delivery Time Settings', 'order-delivery-date' ), array('orddd_time_settings','orddd_delivery_time_settings_callback'), 'orddd_time_settings_page' ); add_settings_section( 'orddd_time_settings_section', __( 'Time Settings', 'order-delivery-date' ), array( 'orddd_time_settings', 'orddd_delivery_time_settings_callback' ), 'orddd_time_settings_page' ); add_settings_field( 'orddd_enable_delivery_time', __( 'Enable delivery time capture:', 'order-delivery-date' ), array( 'orddd_time_settings', 'orddd_enable_delivery_time_capture_callback' ), 'orddd_time_settings_page', 'orddd_time_settings_section', array ( __( 'Enable to choose the time for delivery on the checkout page.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_time_range', __( 'Time Range:', 'order-delivery-date' ), array( 'orddd_time_settings', 'orddd_time_range_callback' ), 'orddd_time_settings_page', 'orddd_time_settings_section', array ( '<br>' . __( 'Select time range for the time sliders.', 'order-delivery-date' ) ) ); add_settings_section( 'orddd_same_day_delivery_section', __( 'Same Day Delivery', 'order-delivery-date' ), array( 'orddd_time_settings', 'orddd_same_day_delivery_callback' ), 'orddd_time_settings_page' ); add_settings_field( 'orddd_enable_same_day_delivery', __( 'Enable Same day delivery:', 'order-delivery-date' ), array( 'orddd_time_settings', 'orddd_enable_same_day_delivery_callback' ), 'orddd_time_settings_page', 'orddd_same_day_delivery_section', array ( __( 'Enable same day delivery for the orders.', 'order-delivery-date' ) . '<br><i>' . __( 'This is very useful in cases when your customers are gifting items to their loved ones, especially on birthdays, anniversaries, etc.', 'order-delivery-date' ) . '</i>' ) ); add_settings_field( 'cutoff_time_for_same_day_delivery_orders', __( 'Cut-off time for same day delivery orders:', 'order-delivery-date' ), array( 'orddd_time_settings', 'orddd_cutoff_time_for_same_day_delivery_orders_callback' ), 'orddd_time_settings_page', 'orddd_same_day_delivery_section', array ( '<br>' . __( 'Current day will be disabled if an order is placed after the time mentioned in this field.', 'order-delivery-date') . '<br><i>' . __('The timezone is taken from the Settings -> General -> Timezone field.', 'order-delivery-date' ) . '</i>' ) ); add_settings_field( 'orddd_same_day_additional_charges', __( 'Additional Charges for same day delivery:', 'order-delivery-date' ), array( 'orddd_time_settings', 'orddd_additional_charges_for_same_day_delivery_callback' ), 'orddd_time_settings_page', 'orddd_same_day_delivery_section', array ( __( 'Set additional charges for same day delivery.', 'order-delivery-date' ) ) ); add_settings_section( 'orddd_next_day_delivery_section', __( 'Next Day Delivery', 'order-delivery-date' ), array( 'orddd_time_settings', 'orddd_next_day_delivery_callback' ), 'orddd_time_settings_page' ); add_settings_field( 'orddd_enable_next_day_delivery', __( 'Enable Next day delivery:', 'order-delivery-date' ), array( 'orddd_time_settings', 'orddd_enable_next_day_delivery_callback' ), 'orddd_time_settings_page', 'orddd_next_day_delivery_section', array ( __( 'If you deliver on the next day, enable this option.', 'order-delivery-date' ) ) ); add_settings_field( 'cutoff_time_for_next_day_delivery_orders', __( 'Cut-off time for next day delivery orders:', 'order-delivery-date' ), array( 'orddd_time_settings', 'orddd_cutoff_time_for_next_day_delivery_orders_callback' ), 'orddd_time_settings_page', 'orddd_next_day_delivery_section', array ( '<br>' . __( 'Next day will be disabled if an order is placed after the time mentioned in this field.', 'order-delivery-date') . '<br><i>' . __('The timezone is taken from the Settings -> General -> Timezone field.', 'order-delivery-date') . '</i>' ) ); add_settings_field( 'orddd_next_day_additional_charges', __( 'Additional Charges for next day delivery:', 'order-delivery-date' ), array( 'orddd_time_settings', 'orddd_additional_charges_for_next_day_delivery_callback' ), 'orddd_time_settings_page', 'orddd_next_day_delivery_section', array ( __( 'Set additional charges for next day delivery.', 'order-delivery-date' ) ) ); register_setting( 'orddd_time_settings', 'orddd_enable_delivery_time' ); register_setting( 'orddd_time_settings', 'orddd_delivery_from_hours' ); register_setting( 'orddd_time_settings', 'orddd_delivery_from_mins' ); register_setting( 'orddd_time_settings', 'orddd_delivery_to_hours' ); register_setting( 'orddd_time_settings', 'orddd_delivery_to_mins' ); register_setting( 'orddd_time_settings', 'orddd_enable_same_day_delivery' ); register_setting( 'orddd_time_settings', 'orddd_disable_same_day_delivery_after_hours' ); register_setting( 'orddd_time_settings', 'orddd_disable_same_day_delivery_after_minutes' ); register_setting( 'orddd_time_settings', 'orddd_same_day_additional_charges' ); register_setting( 'orddd_time_settings', 'orddd_enable_next_day_delivery' ); register_setting( 'orddd_time_settings', 'orddd_disable_next_day_delivery_after_hours' ); register_setting( 'orddd_time_settings', 'orddd_disable_next_day_delivery_after_minutes' ); register_setting( 'orddd_time_settings', 'orddd_next_day_additional_charges' ); } /** * Add settings field & Register settings in Holidays tab * * @since 2.8.4 */ public function orddd_holidays_settings() { add_settings_section( 'orddd_holidays_section', __( 'Add Holiday', 'order-delivery-date' ), array( 'orddd_holidays_settings', 'orddd_holidays_admin_setting_callback' ), 'orddd_holidays_page' ); add_settings_field( 'orddd_holiday_name', __( 'Holiday Name:', 'order-delivery-date' ), array( 'orddd_holidays_settings', 'orddd_holidays_name_callback' ), 'orddd_holidays_page', 'orddd_holidays_section', array ( __( '<br>Enter the name of the holiday here.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_holiday_from_date', __( 'From Date:', 'order-delivery-date' ), array( 'orddd_holidays_settings', 'orddd_holidays_from_date_callback' ), 'orddd_holidays_page', 'orddd_holidays_section' ); add_settings_field( 'orddd_holiday_to_date', __( 'To Date:', 'order-delivery-date' ), array( 'orddd_holidays_settings', 'orddd_holidays_to_date_callback' ), 'orddd_holidays_page', 'orddd_holidays_section', array ( __( '<br>Leave the "To Date:" field unchanged for single day holidays.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_allow_recurring_holiday', __( 'Allow Recurring:', 'order-delivery-date' ), array( 'orddd_holidays_settings', 'orddd_allow_recurring_holiday_callback' ), 'orddd_holidays_page', 'orddd_holidays_section', array ( __( 'Enable to block the holidays for all future years.', 'order-delivery-date' ) ) ); do_action('add_settings_in_holidays'); register_setting( 'orddd_holiday_settings', 'orddd_delivery_date_holidays', array( 'orddd_holidays_settings', 'orddd_delivery_date_holidays_callback' ) ); } /** * Add settings field & Register settings to block time slots * * @since 2.8.3 */ public function orddd_disable_time_slot_settings() { add_settings_section( 'orddd_disable_time_slot_section', __( 'Block a Time Slot', 'order-delivery-date' ), array( 'orddd_holidays_settings', 'orddd_disable_time_slot_callback' ), 'orddd_holidays_disable_page' ); add_settings_field( 'orddd_disable_time_slot_for_delivery_days', __( 'Block Time Slot for:', 'order-delivery-date' ), array( 'orddd_holidays_settings', 'orddd_disable_time_slot_for_delivery_days_callback' ), 'orddd_holidays_disable_page', 'orddd_disable_time_slot_section', array ( __( 'Select "Dates" option to block time slots for individual dates. Select "Weekdays" option to block the time slots for a weekday or multiple weekdays.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_disable_time_slot_for_weekdays', __( 'Select Dates or Weekdays:', 'order-delivery-date' ), array( 'orddd_holidays_settings', 'orddd_disable_time_slot_for_weekdays_callback' ), 'orddd_holidays_disable_page', 'orddd_disable_time_slot_section', array( __( 'Select Dates or Weekdays for which you want to block the time slots.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_selected_time_slots_to_be_disabled', __( 'Select Time Slots to block:', 'order-delivery-date' ), array( 'orddd_holidays_settings', 'orddd_selected_time_slots_to_be_disabled_callback' ), 'orddd_holidays_disable_page', 'orddd_disable_time_slot_section', array( __( 'This will list all the time slots which are created in General Settings or in Custom Delivery Settings.', 'order-delivery-date' ) ) ); register_setting( 'orddd_disable_time_slot_settings', 'orddd_disable_time_slot_log', array( 'orddd_holidays_settings', 'orddd_disable_time_slots_callback' ) ); } /** * Add settings fields & Register settings in Appearance tab * * @since 2.8.3 */ public function orddd_appearance_settings() { add_settings_section( 'orddd_calendar_appearance_section', __( 'Calendar Appearance', 'order-delivery-date' ), array( 'orddd_appearance_settings', 'orddd_appearance_admin_setting_callback' ), 'orddd_appearance_page' ); add_settings_field( 'orddd_language_selected', __( 'Calendar Language:', 'order-delivery-date' ), array( 'orddd_appearance_settings', 'orddd_appearance_calendar_language_callback' ), 'orddd_appearance_page', 'orddd_calendar_appearance_section', array ( __( 'Choose a Language.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_delivery_date_format', __( 'Date Format:', 'order-delivery-date' ), array( 'orddd_appearance_settings', 'orddd_appearance_date_formats_callback' ), 'orddd_appearance_page', 'orddd_calendar_appearance_section', array( '<br>' . __( 'The format in which the Delivery Date appears to the customers on the checkout page once the date is selected.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_delivery_time_format', __( 'Time Format:', 'order-delivery-date' ), array( 'orddd_appearance_settings', 'orddd_time_format_callback' ), 'orddd_appearance_page', 'orddd_calendar_appearance_section', array ( __( 'The time range will come in the selected format. If 12 hour format is selected, then the time slider will appear in am/pm format.', 'order-delivery-date' ) ) ); add_settings_field( 'start_of_week', __( 'First Day of Week:', 'order-delivery-date' ), array( 'orddd_appearance_settings', 'orddd_appearance_first_day_of_week_callback' ), 'orddd_appearance_page', 'orddd_calendar_appearance_section', array( __( 'Choose the first day of week displayed on the Delivery Date calendar.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_number_of_months', __( 'Number of Months:', 'order-delivery-date' ), array( 'orddd_appearance_settings', 'orddd_appearance_number_of_months_callback' ), 'orddd_appearance_page', 'orddd_calendar_appearance_section', array ( __( 'The number of months to be shown on the calendar.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_calendar_theme_name', __( 'Theme:', 'order-delivery-date' ), array( 'orddd_appearance_settings', 'orddd_appearance_calendar_theme_callback' ), 'orddd_appearance_page', 'orddd_calendar_appearance_section', array( __( 'Select the theme for the calendar which blends with the design of your website.', 'order-delivery-date' ) ) ); add_settings_section( 'orddd_field_appearance_section', __( 'Field Appearance', 'order-delivery-date' ), array( 'orddd_appearance_settings', 'orddd_field_appearance_admin_setting_callback' ), 'orddd_appearance_page' ); add_settings_field( 'orddd_location_field_label', __( 'Locations Label:', 'order-delivery-date' ), array( 'orddd_appearance_settings', 'orddd_location_field_label_callback' ), 'orddd_appearance_page', 'orddd_field_appearance_section', array( __( 'Choose the label that is to be displayed for the delivery locations field on checkout page. HTML allowed.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_delivery_date_field_label', __( 'Date Field Label:', 'order-delivery-date' ), array( 'orddd_appearance_settings', 'orddd_delivery_date_field_label_callback' ), 'orddd_appearance_page', 'orddd_field_appearance_section', array( __( 'Choose the label that is to be displayed for the field on checkout page. HTML allowed.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_delivery_timeslot_field_label', __( 'Time slot Field Label:', 'order-delivery-date' ), array( 'orddd_appearance_settings', 'orddd_delivery_timeslot_field_label_callback' ), 'orddd_appearance_page', 'orddd_field_appearance_section', array( __( 'Choose a label that is to be displayed for the time slot field on the checkout page.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_delivery_date_field_placeholder', __( 'Field Placeholder Text:', 'order-delivery-date' ), array( 'orddd_appearance_settings', 'orddd_delivery_date_field_placeholder_callback' ), 'orddd_appearance_page', 'orddd_field_appearance_section', array( __( 'Choose the placeholder text that is to be displayed for the field on checkout page.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_delivery_date_field_note', __( 'Field Note Text:', 'order-delivery-date' ), array( 'orddd_appearance_settings', 'orddd_delivery_date_field_note_text_callback' ), 'orddd_appearance_page', 'orddd_field_appearance_section', array( '<br>' . __( 'Choose the note to be displayed below the delivery date field on checkout page. HTML allowed.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_delivery_date_fields_on_checkout_page', __( 'Fields placement on the Checkout page:', 'order-delivery-date' ), array( 'orddd_appearance_settings', 'orddd_delivery_date_in_shipping_section_callback' ), 'orddd_appearance_page', 'orddd_field_appearance_section', array( __( '</br>The Delivery Date fields will be displayed in the selected section.</br><i>Note: WooCommerce automatically hides the Shipping section fields for Virtual products.</i>', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_delivery_date_on_cart_page', __( 'Delivery Date field on Cart page:', 'order-delivery-date' ), array( 'orddd_appearance_settings', 'orddd_delivery_date_on_cart_page_callback' ), 'orddd_appearance_page', 'orddd_field_appearance_section', array( __( 'Add the Delivery Date & Time field on the cart page along with the Checkout page.' ) ) ); add_settings_section( 'orddd_color_picker_section', __( 'Color Code Your Calendar', 'order-delivery-date' ), array( 'orddd_appearance_settings', 'orddd_color_picker_admin_setting_callback' ), 'orddd_appearance_page' ); add_settings_field( 'orddd_holiday_color', __( 'Holidays:', 'order-delivery-date' ), array( 'orddd_appearance_settings', 'orddd_holiday_color_callback' ), 'orddd_appearance_page', 'orddd_color_picker_section', array( __( 'Color in which holidays should be shown on the calendar on checkout page.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_booked_dates_color', __( 'Booked Dates:', 'order-delivery-date' ), array( 'orddd_appearance_settings', 'orddd_booked_dates_color_callback' ), 'orddd_appearance_page', 'orddd_color_picker_section', array( __( 'Color in which booked dates should be shown on the calendar on checkout page.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_cut_off_time_color', __( 'Cut-off time over Dates:', 'order-delivery-date' ), array( 'orddd_appearance_settings', 'orddd_cut_off_time_color_callback' ), 'orddd_appearance_page', 'orddd_color_picker_section', array( __( 'Color in which cut-off time over dates should be shown on the calendar on checkout page.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_available_dates_color', __( 'Available Dates:', 'order-delivery-date' ), array( 'orddd_appearance_settings', 'orddd_available_dates_color_callback' ), 'orddd_appearance_page', 'orddd_color_picker_section', array( __( 'Color in which available dates should be shown on the calendar on checkout page.', 'order-delivery-date' ) ) ); register_setting( 'orddd_appearance_settings', 'orddd_language_selected' ); register_setting( 'orddd_appearance_settings', 'orddd_delivery_date_format' ); register_setting( 'orddd_appearance_settings', 'orddd_delivery_time_format' ); register_setting( 'orddd_appearance_settings', 'start_of_week' ); register_setting( 'orddd_appearance_settings', 'orddd_location_field_label' ); register_setting( 'orddd_appearance_settings', 'orddd_delivery_date_field_label' ); register_setting( 'orddd_appearance_settings', 'orddd_delivery_timeslot_field_label' ); register_setting( 'orddd_appearance_settings', 'orddd_delivery_date_field_placeholder' ); register_setting( 'orddd_appearance_settings', 'orddd_delivery_date_field_note' ); register_setting( 'orddd_appearance_settings', 'orddd_number_of_months' ); register_setting( 'orddd_appearance_settings', 'orddd_delivery_date_fields_on_checkout_page' ); register_setting( 'orddd_appearance_settings', 'orddd_calendar_theme_name' ); register_setting( 'orddd_appearance_settings', 'orddd_calendar_theme' ); register_setting( 'orddd_appearance_settings', 'orddd_custom_hook_for_fields_placement' ); register_setting( 'orddd_appearance_settings', 'orddd_delivery_date_on_cart_page' ); register_setting( 'orddd_appearance_settings', 'orddd_holiday_color' ); register_setting( 'orddd_appearance_settings', 'orddd_booked_dates_color' ); register_setting( 'orddd_appearance_settings', 'orddd_cut_off_time_color' ); register_setting( 'orddd_appearance_settings', 'orddd_available_dates_color' ); } /** * Add settings fields & Register settings for specific delivery dates * * @since 2.8.3 */ public function orddd_delivery_days_settings() { add_settings_section( 'orddd_delivery_days_section', __( 'Add Specific Delivery Dates', 'order-delivery-date' ), array( 'orddd_delivery_days_settings', 'orddd_delivery_days_admin_setting_callback' ), 'orddd_delivery_days_page' ); add_settings_field( 'orddd_enable_specific_delivery_dates', __( 'Enable Specific Delivery Dates:', 'order-delivery-date' ), array( 'orddd_delivery_days_settings', 'orddd_delivery_days_enable_callback' ), 'orddd_delivery_days_page', 'orddd_delivery_days_section', array( __( 'Enable this option to choose specific delivery dates on the checkout page.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_delivery_date_1', __( 'Specific Delivery Date:', 'order-delivery-date' ), array( 'orddd_delivery_days_settings', 'orddd_delivery_days_datepicker_1_callback' ), 'orddd_delivery_days_page', 'orddd_delivery_days_section', array('') ); add_settings_field( 'orddd_delivery_date_2', __( 'Specific Delivery Date:', 'order-delivery-date' ), array( 'orddd_delivery_days_settings', 'orddd_delivery_days_datepicker_2_callback' ), 'orddd_delivery_days_page', 'orddd_delivery_days_section', array('') ); add_settings_field( 'orddd_delivery_date_3', __( 'Specific Delivery Date:', 'order-delivery-date' ), array( 'orddd_delivery_days_settings', 'orddd_delivery_days_datepicker_3_callback' ), 'orddd_delivery_days_page', 'orddd_delivery_days_section', array('') ); register_setting( 'orddd_delivery_days_settings', 'orddd_enable_specific_delivery_dates' ); register_setting( 'orddd_delivery_days_settings', 'orddd_delivery_dates', array( 'orddd_delivery_days_settings', 'orddd_delivery_dates_callback' ) ); } /** * Add settings fields & Register settings for time slots in the 'Time Slot' tab * * @since 2.8.3 */ public function orddd_time_slot_settings() { add_settings_section( 'orddd_time_slot_section', __( 'Time Slot Settings', 'order-delivery-date' ), array( 'orddd_time_slot_settings', 'orddd_time_slot_admin_settings_callback' ), 'orddd_time_slot_page' ); add_settings_field( 'orddd_enable_time_slot', __( 'Enable time slot capture:', 'order-delivery-date' ), array( 'orddd_time_slot_settings', 'orddd_time_slot_enable_callback' ), 'orddd_time_slot_page', 'orddd_time_slot_section', array( __( 'Allows the customer to choose a time slot for delivery on the checkout page.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_time_slot_mandatory', __( 'Mandatory field?:', 'order-delivery-date' ), array( 'orddd_time_slot_settings', 'orddd_time_slot_mandatory_callback' ), 'orddd_time_slot_page', 'orddd_time_slot_section', array( __( 'Selection of Time slot on the checkout page will become mandatory.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_time_slot_asap', __( "Show 'As Soon As Possible' option:", 'order-delivery-date' ), array( 'orddd_time_slot_settings', 'orddd_time_slot_asap_callback' ), 'orddd_time_slot_page', 'orddd_time_slot_section', array ( __( 'A new option will be added in the Time slot dropdown on checkout page.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_global_lockout_time_slots', __( 'Global Maximum Order Deliveries for Time slots:', 'order-delivery-date' ), array( 'orddd_time_slot_settings', 'orddd_global_lockout_time_slots_callback' ), 'orddd_time_slot_page', 'orddd_time_slot_section', array ( __( 'Maximum deliveries/orders applied to all the Time slots if the individual Maximum Order Deliveries for Time slots is blank for Custom Delivery Settings.<br><i>Note: Leave blank for Unlimited Deliveries.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_auto_populate_first_available_time_slot', __( 'Auto-populate first available delivery time slot:', 'order-delivery-date' ), array( 'orddd_time_slot_settings', 'orddd_show_first_available_time_slot_callback' ), 'orddd_time_slot_page', 'orddd_time_slot_section', array( __( 'Auto-populate first available Delivery time slot when the date is selected on the checkout page.', 'order-delivery-date' ) ) ); add_settings_section( 'orddd_add_time_slot_section', __( 'Add Time Slot <a href=https://www.tychesoftwares.com/docs/docs/order-delivery-date-pro-for-woocommerce/setup-delivery-date-with-time/?utm_source=userwebsite&utm_medium=link&utm_campaign=OrderDeliveryDateProSetting" target="_blank" class="dashicons dashicons-external" style="line-height:unset;"></a>', 'order-delivery-date' ), array( 'orddd_time_slot_settings', 'orddd_add_time_slot_admin_settings_callback' ), 'orddd_time_slot_page' ); add_settings_field( 'orddd_time_slot_for_delivery_days', __( 'Time Slot for:', 'order-delivery-date' ), array( 'orddd_time_slot_settings', 'orddd_time_slot_for_delivery_days_callback' ), 'orddd_time_slot_page', 'orddd_add_time_slot_section', array(__( "Select Weekday option or Specific delivery dates option to create a time slot.", 'order-delivery-date' ) ) ); add_settings_field( 'orddd_time_slot_for_weekdays', __( 'Select Delivery Days/Dates:', 'order-delivery-date' ), array( 'orddd_time_slot_settings', 'orddd_time_slot_for_weekdays_callback' ), 'orddd_time_slot_page', 'orddd_add_time_slot_section', array( __( 'Select Delivery Days/Dates for which you want to create an exclusive Time Slot. To create a time slot for all the weekdays, select "All".', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_time_from_hours', __( 'Time From:', 'order-delivery-date' ), array( 'orddd_time_slot_settings', 'orddd_time_from_hours_callback' ), 'orddd_time_slot_page', 'orddd_add_time_slot_section', array( __( 'Start time for the time slot.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_time_to_hours', __( 'Time To:', 'order-delivery-date' ), array( 'orddd_time_slot_settings', 'orddd_time_to_hours_callback' ), 'orddd_time_slot_page', 'orddd_add_time_slot_section', array( __( 'End time for the time slot.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_time_slot_lockout', __( 'Maximum Order Deliveries per time slot (based on per order):', 'order-delivery-date' ), array( 'orddd_time_slot_settings', 'orddd_time_slot_lockout_callback' ), 'orddd_time_slot_page', 'orddd_add_time_slot_section', array( __( 'A time slot will become unavailable for further deliveries once these many orders are placed for delivery for that time slot.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_time_slot_additional_charges', __( 'Additional Charges for time slot and Checkout label:', 'order-delivery-date' ), array( 'orddd_time_slot_settings', 'orddd_time_slot_additional_charges_callback' ), 'orddd_time_slot_page', 'orddd_add_time_slot_section', array( __( 'Add delivery charges (if applicable) for time slot and add the label to be displayed on Checkout page.', 'order-delivery-date' ) ) ); register_setting( 'orddd_time_slot_settings', 'orddd_enable_time_slot' ); register_setting( 'orddd_time_slot_settings', 'orddd_time_slot_mandatory' ); register_setting( 'orddd_time_slot_settings', 'orddd_time_slot_asap' ); register_setting( 'orddd_time_slot_settings', 'orddd_global_lockout_time_slots' ); register_setting( 'orddd_time_slot_settings', 'orddd_auto_populate_first_available_time_slot' ); register_setting( 'orddd_time_slot_settings', 'orddd_time_slot_for_delivery_days' ); register_setting( 'orddd_time_slot_settings', 'orddd_delivery_time_slot_log', array( 'orddd_time_slot_settings', 'orddd_delivery_time_slot_callback' ) ); } /** * Add settings fields & Register settings for Custom Delivery Settings * * @since 3.0 */ public function orddd_shipping_based_delivery_callback() { add_settings_section( 'orddd_shipping_based_delivery_section', __( 'Custom Delivery Settings', 'order-delivery-date' ), array( 'orddd_shipping_based_settings', 'orddd_shipping_based_delivery_settings_callback' ), 'orddd_shipping_based_delivery_page' ); add_settings_field( 'orddd_enable_shipping_based_delivery', __( 'Custom delivery:', 'order-delivery-date' ), array( 'orddd_shipping_based_settings', 'orddd_enable_shipping_based_delivery_callback' ), 'orddd_shipping_based_delivery_page', 'orddd_shipping_based_delivery_section', array ( __( 'Enable custom Delivery Date and Time Settings.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_enable_shipping_based_delivery_save', '', array( 'orddd_shipping_based_settings', 'orddd_enable_shipping_based_delivery_save_callback' ), 'orddd_shipping_based_delivery_page', 'orddd_shipping_based_delivery_section' ); register_setting( 'orddd_shipping_based_delivery_settings', 'orddd_enable_shipping_based_delivery' ); } /** * Add settings fields & Register settings for Custom Delivery Date & Time * * @since 3.0 */ public function orddd_shipping_based_settings_callback() { add_settings_section( 'orddd_shipping_based_section', __( 'Custom Delivery Date and Time settings', 'order-delivery-date' ), array( 'orddd_shipping_based_settings', 'orddd_shipping_based_admin_settings_callback' ), 'orddd_shipping_based_page' ); add_settings_field( 'orddd_custom_delivery_type', __( 'Settings based on:', 'order-delivery-date' ), array( 'orddd_shipping_based_settings', 'orddd_custom_delivery_type_callback' ), 'orddd_shipping_based_page', 'orddd_shipping_based_section' ); add_settings_section( 'orddd_shipping_based_date_settings_section', __( 'Date Settings', 'order-delivery-date' ), array( 'orddd_shipping_based_settings', 'orddd_shipping_based_date_settings_callback' ), 'orddd_shipping_based_page' ); add_settings_field( 'orddd_shipping_methods_for_product_categories', __( 'Shipping Methods:', 'order-delivery-date' ), array( 'orddd_shipping_based_settings', 'orddd_shipping_methods_for_product_categories_callback' ), 'orddd_shipping_based_page', 'orddd_shipping_based_date_settings_section' ); add_settings_field( 'orddd_enable_shipping_based_delivery_date', __( 'Enable Delivery Date:', 'order-delivery-date' ), array( 'orddd_shipping_based_settings', 'orddd_enable_shipping_based_delivery_date_callback' ), 'orddd_shipping_based_page', 'orddd_shipping_based_date_settings_section', array ( __( 'Enable Delivery Date capture on the checkout page for the shipping method.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_shipping_based_delivery_checkout_options', __( 'Delivery Checkout options:', 'order-delivery-date' ), array( 'orddd_shipping_based_settings', 'orddd_shipping_based_delivery_checkout_options_callback' ), 'orddd_shipping_based_page', 'orddd_shipping_based_date_settings_section', array ( __( 'Choose the delivery date option to be displayed on the checkout page.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_shipping_delivery_type', __( 'Delivery Type:', 'order-delivery-date' ), array( 'orddd_shipping_based_settings', 'orddd_shipping_delivery_type_callback' ), 'orddd_shipping_based_page', 'orddd_shipping_based_date_settings_section', array ( __( 'Select Delivery type.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_shipping_based_weekdays', __( 'Delivery Days:', 'order-delivery-date' ), array( 'orddd_shipping_based_settings', 'orddd_shipping_based_weekdays_callback' ), 'orddd_shipping_based_page', 'orddd_shipping_based_date_settings_section', array ( __( ' Select weekdays for deliveries and its Delivery Charges (if any).', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_shipping_based_specific_day', __( 'Specific Delivery Dates:', 'order-delivery-date' ), array( 'orddd_shipping_based_settings', 'orddd_shipping_based_specific_days_callback' ), 'orddd_shipping_based_page', 'orddd_shipping_based_date_settings_section', array ( __( ' Select specific delivery date and add additional charges for the date (if any).', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_shipping_based_minimumOrderDays', __( 'Minimum Delivery time (in hours):', 'order-delivery-date' ), array( 'orddd_shipping_based_settings', 'orddd_shipping_based_minimum_delivery_time_callback' ), 'orddd_shipping_based_page', 'orddd_shipping_based_date_settings_section', array ( __( 'Minimum number of hours required to prepare for delivery. <br><em> Note: This setting will be applied with Same day & Next day cutoff. Please refer <a href="https://www.tychesoftwares.com/how-does-minimum-delivery-time-work-with-same-day-next-day-cutoff-settings/" target="_blank">this post</a> to know more.</em>', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_shipping_based_number_of_dates', __( 'Number of dates to choose:', 'order-delivery-date' ), array( 'orddd_shipping_based_settings', 'orddd_shipping_based_number_of_dates_callback' ), 'orddd_shipping_based_page', 'orddd_shipping_based_date_settings_section', array ( __( 'Number of dates available for delivery.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_shipping_based_date_field_mandatory', __( 'Mandatory field?:', 'order-delivery-date' ), array( 'orddd_shipping_based_settings', 'orddd_shipping_based_date_field_mandatory_callback' ), 'orddd_shipping_based_page', 'orddd_shipping_based_date_settings_section', array ( __( 'Selection of delivery date on the checkout page will become mandatory.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_shipping_based_date_lockout', __( 'Maximum Order Deliveries per day (based on per order):', 'order-delivery-date' ), array( 'orddd_shipping_based_settings', 'orddd_shipping_based_date_lockout_callback' ), 'orddd_shipping_based_page', 'orddd_shipping_based_date_settings_section', array ( __( 'A date will become unavailable for further deliveries once these many orders are placed for delivery for that date.<br><i>Note: Leave the field blank if the Maximum Order Deliveries from General Settings -> Date Settings link should be considered.</i>', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_shipping_based_text_block_between_days', __( 'Delivery Range', 'order-delivery-date' ), array( 'orddd_shipping_based_settings', 'orddd_shipping_based_text_block_between_days_callback' ), 'orddd_shipping_based_page', 'orddd_shipping_based_date_settings_section', array ( __( '</br>Interval of days it takes to deliver an order after submitting the order.', 'order-delivery-date' ) ) ); add_settings_section( 'orddd_shipping_based_time_settings_section', __( 'Time Settings', 'order-delivery-date' ), array( 'orddd_shipping_based_settings', 'orddd_shipping_based_time_settings_callback' ), 'orddd_shipping_based_page' ); add_settings_field( 'orddd_shipping_based_time_settings', __( 'Time Settings:', 'order-delivery-date' ), array( 'orddd_shipping_based_settings', 'orddd_shipping_based_time_sliders_callback' ), 'orddd_shipping_based_page', 'orddd_shipping_based_time_settings_section', array ( __( ' Select time range for the time sliders.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_shipping_based_sameday_cutoff', __( 'Cut-off time for same day delivery orders:', 'order-delivery-date' ), array( 'orddd_shipping_based_settings', 'orddd_shipping_based_sameday_cutoff_callback' ), 'orddd_shipping_based_page', 'orddd_shipping_based_time_settings_section', array ( __( '<br>Current day will be disabled if an order is placed after the time mentioned in this field.<br><i>The timezone is taken from the Settings -> General -> Timezone field.</i>', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_shipping_based_same_day_additional_charges', __( 'Additional Charges for same day delivery:', 'order-delivery-date' ), array( 'orddd_shipping_based_settings', 'orddd_shipping_based_same_day_additional_charges_callback' ), 'orddd_shipping_based_page', 'orddd_shipping_based_time_settings_section', array ( __( 'Set additional charges for same day delivery.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_shipping_based_nextday_cutoff', __( 'Cut-off time for next day delivery orders:', 'order-delivery-date' ), array( 'orddd_shipping_based_settings', 'orddd_shipping_based_nextday_cutoff_callback' ), 'orddd_shipping_based_page', 'orddd_shipping_based_time_settings_section', array ( __( '<br>Next day will be disabled if an order is placed after the time mentioned in this field.<br><i>The timezone is taken from the Settings -> General -> Timezone field.</i>', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_shipping_based_next_day_additional_charges', __( 'Additional Charges for next day delivery:', 'order-delivery-date' ), array( 'orddd_shipping_based_settings', 'orddd_shipping_based_next_day_additional_charges_callback' ), 'orddd_shipping_based_page', 'orddd_shipping_based_time_settings_section', array ( __( 'Set additional charges for next day delivery.', 'order-delivery-date' ) ) ); add_settings_section( 'orddd_shipping_based_timeslot_section', __( 'Time Slot', 'order-delivery-date' ), array( 'orddd_shipping_based_settings', 'orddd_shipping_based_timeslot_callback' ), 'orddd_shipping_based_page' ); add_settings_field( 'orddd_shipping_based_timeslot_field_mandatory', __( 'Mandatory field?:', 'order-delivery-date' ), array( 'orddd_shipping_based_settings', 'orddd_shipping_based_timeslot_field_mandatory_callback' ), 'orddd_shipping_based_page', 'orddd_shipping_based_timeslot_section', array ( __( 'Selection of Time slot on the checkout page will become mandatory.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_shipping_based_timeslot_field_asap', __( "Show 'As Soon As Possible' option:", 'order-delivery-date' ), array( 'orddd_shipping_based_settings', 'orddd_shipping_based_timeslot_field_asap_callback' ), 'orddd_shipping_based_page', 'orddd_shipping_based_timeslot_section', array ( __( 'A new option will be added in the Time slot dropdown on checkout page.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_shipping_based_time_slot_for_delivery_days', __( 'Time Slot for:', 'order-delivery-date' ), array( 'orddd_shipping_based_settings', 'orddd_shipping_based_time_slot_for_delivery_days_callback' ), 'orddd_shipping_based_page', 'orddd_shipping_based_timeslot_section', array(__( "Select Weekday option or Specific delivery dates option to create a time slot.", 'order-delivery-date' ) ) ); add_settings_field( 'orddd_shipping_based_time_slot_for_weekdays', __( 'Select Delivery Days/Dates:', 'order-delivery-date' ), array( 'orddd_shipping_based_settings', 'orddd_shipping_based_time_slot_for_weekdays_callback' ), 'orddd_shipping_based_page', 'orddd_shipping_based_timeslot_section', array( __( 'Select Delivery Days/Dates for which you want to create an exclusive Time Slot. To create a time slot for all the weekdays, select "All".', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_shipping_based_time_from_hours', __( 'Time Slot:', 'order-delivery-date' ), array( 'orddd_shipping_based_settings', 'orddd_shipping_based_time_from_hours_callback' ), 'orddd_shipping_based_page', 'orddd_shipping_based_timeslot_section', array( __( 'Select start and end time for the Time slot.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_shipping_based_time_slot_lockout', __( 'Maximum Order Deliveries per time slot (based on per order):', 'order-delivery-date' ), array( 'orddd_shipping_based_settings', 'orddd_shipping_based_time_slot_lockout_callback' ), 'orddd_shipping_based_page', 'orddd_shipping_based_timeslot_section', array( __( 'A time slot will become unavailable for further deliveries once these many orders are placed for delivery for that time slot.<br><i>Note: Leave the field blank if the Global Maximum Order Deliveries for Time slots from the General Settings -> Time slot link should be considered.</i>', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_shipping_based_time_slot_additional_charges', __( 'Additional Charges for time slot and Checkout label:', 'order-delivery-date' ), array( 'orddd_shipping_based_settings', 'orddd_shipping_based_time_slot_additional_charges_callback' ), 'orddd_shipping_based_page', 'orddd_shipping_based_timeslot_section', array( __( 'Add delivery charges (if applicable) for time slot and add the label to be displayed on Checkout page.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_shipping_based_time_slot_save', '', array( 'orddd_shipping_based_settings', 'orddd_shipping_based_time_slot_save_callback' ), 'orddd_shipping_based_page', 'orddd_shipping_based_timeslot_section' ); add_settings_section( 'orddd_shipping_based_holidays_section', __( 'Holidays', 'order-delivery-date' ), array( 'orddd_shipping_based_settings', 'orddd_shipping_based_holidays_callback' ), 'orddd_shipping_based_page' ); add_settings_field( 'orddd_enable_global_holidays', __( 'Use Global Holidays:', 'order-delivery-date' ), array( 'orddd_shipping_based_settings', 'orddd_enable_global_holidays_callback' ), 'orddd_shipping_based_page', 'orddd_shipping_based_holidays_section', array ( __( 'Use same holidays as added under General Settings -> Holidays link. You can add more holidays below.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_shipping_based_holiday_name', __( 'Name:', 'order-delivery-date' ), array( 'orddd_shipping_based_settings', 'orddd_shipping_based_holiday_name_callback' ), 'orddd_shipping_based_page', 'orddd_shipping_based_holidays_section', array ( __( 'Enter the name of the holiday here.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_shipping_based_holiday_from_date', __( 'Holiday Range:', 'order-delivery-date' ), array( 'orddd_shipping_based_settings', 'orddd_shipping_based_holiday_from_date_callback' ), 'orddd_shipping_based_page', 'orddd_shipping_based_holidays_section', array ( __( 'Select the start and end date range for holiday here.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_shipping_based_allow_recurring_holiday', __( 'Allow Recurring:', 'order-delivery-date' ), array( 'orddd_shipping_based_settings', 'orddd_shipping_based_allow_recurring_holiday_callback' ), 'orddd_shipping_based_page', 'orddd_shipping_based_holidays_section', array ( __( 'Enable to block the holidays for every year. For example, national holidays like 15th August (India\'s Independence Day) should be disabled for every year.', 'order-delivery-date' ) ) ); do_action('add_settings_in_shipping_holidays'); add_settings_field( 'orddd_shipping_based_holiday_save', '', array( 'orddd_shipping_based_settings', 'orddd_shipping_based_holiday_save_callback' ), 'orddd_shipping_based_page', 'orddd_shipping_based_holidays_section' ); add_settings_section( 'orddd_shipping_based_appearance_section', __( 'Appearance', 'order-delivery-date' ), array( 'orddd_shipping_based_settings', 'orddd_shipping_based_appearance_section_callback' ), 'orddd_shipping_based_page' ); add_settings_field( 'orddd_shipping_based_delivery_date_field_label', __( 'Date Field Label:', 'order-delivery-date' ), array( 'orddd_shipping_based_settings', 'orddd_shipping_based_delivery_date_field_label_callback' ), 'orddd_shipping_based_page', 'orddd_shipping_based_appearance_section', array( __( 'Choose the label that is to be displayed for the field on checkout page. HTML allowed.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_shipping_based_delivery_timeslot_field_label', __( 'Time slot Field Label:', 'order-delivery-date' ), array( 'orddd_shipping_based_settings', 'orddd_shipping_based_delivery_timeslot_field_label_callback' ), 'orddd_shipping_based_page', 'orddd_shipping_based_appearance_section', array( __( 'Choose a label that is to be displayed for the time slot field on the checkout page.', 'order-delivery-date' ) ) ); $row_id = ''; if ( ( isset( $_GET[ 'action' ] ) && sanitize_text_field( $_GET[ 'action' ] ) == 'shipping_based' ) && ( isset( $_GET[ 'mode' ] ) && sanitize_text_field( $_GET[ 'mode' ] ) == 'edit' ) ) { if( isset( $_GET[ 'row_id' ] ) ) { $row_id = $_GET[ 'row_id' ]; } } else { if( isset( $_POST[ 'edit_row_id' ] ) ) { $row_id = $_POST[ 'edit_row_id' ]; } } $option_key = orddd_common::get_shipping_setting_option_key( $row_id ); register_setting( 'orddd_shipping_based_settings', 'orddd_shipping_based_settings_' . $option_key, array( 'orddd_shipping_based_settings', 'orddd_shipping_based_settings_save_callback' ) ); register_setting( 'orddd_shipping_based_settings', 'orddd_shipping_based_settings_option_key', array( 'orddd_shipping_based_settings', 'orddd_shipping_based_settings_option_key_callback' ) ); } /** * Add settings fields & Register settings to sync Google Calendar * * @since 4.0 */ public function orddd_calendar_sync_settings_callback() { add_settings_section( 'orddd_calendar_sync_general_settings_section', __( 'General Settings', 'order-delivery-date' ), array( 'orddd_calendar_sync_settings', 'orddd_calendar_sync_general_settings_callback' ), 'orddd_calendar_sync_settings_page' ); add_settings_field( 'orddd_calendar_event_location', __( 'Event Location', 'order-delivery-date' ), array( 'orddd_calendar_sync_settings', 'orddd_calendar_event_location_callback' ), 'orddd_calendar_sync_settings_page', 'orddd_calendar_sync_general_settings_section', array ( __( '<br>Enter the text that will be used in the location field of the calendar event. If left empty, the website description will be used. <br><i>Note: You can use ADDRESS, FULL_ADDRESS and CITY placeholders which will be replaced by their real values.</i>', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_calendar_event_summary', __( 'Event summary (name)', 'order-delivery-date' ), array( 'orddd_calendar_sync_settings', 'orddd_calendar_event_summary_callback' ), 'orddd_calendar_sync_settings_page', 'orddd_calendar_sync_general_settings_section' ); add_settings_field( 'orddd_calendar_event_description', __( 'Event Description', 'order-delivery-date' ), array( 'orddd_calendar_sync_settings', 'orddd_calendar_event_description_callback' ), 'orddd_calendar_sync_settings_page', 'orddd_calendar_sync_general_settings_section', array( __( '<br>For the above 2 fields, you can use the following placeholders which will be replaced by their real values: SITE_NAME, CLIENT, PRODUCTS, PRODUCT_WITH_QTY, ORDER_DATE_TIME, ORDER_DATE, ORDER_NUMBER, PRICE, PHONE, NOTE, ADDRESS, FULL_ADDRESS , EMAIL (Client\'s email) ', 'order-delivery-date' ) ) ); add_settings_section( 'orddd_calendar_sync_customer_settings_section', __( 'Customer Add to Calendar button Settings', 'order-delivery-date' ), array( 'orddd_calendar_sync_settings', 'orddd_calendar_sync_customer_settings_callback' ), 'orddd_calendar_sync_settings_page' ); add_settings_field( 'orddd_add_to_calendar_order_received_page', __( 'Show Add to Calendar button on Order received page', 'order-delivery-date' ), array( 'orddd_calendar_sync_settings', 'orddd_add_to_calendar_order_received_page_callback' ), 'orddd_calendar_sync_settings_page', 'orddd_calendar_sync_customer_settings_section', array ( __( 'Show Add to Calendar button on the Order Received page for the customers.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_add_to_calendar_customer_email', __( 'Show Add to Calendar button in the Customer notification email', 'order-delivery-date' ), array( 'orddd_calendar_sync_settings', 'orddd_add_to_calendar_customer_email_callback' ), 'orddd_calendar_sync_settings_page', 'orddd_calendar_sync_customer_settings_section', array ( __( 'Show Add to Calendar button in the Customer notification email.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_add_to_calendar_my_account_page', __( 'Show Add to Calendar button on My account', 'order-delivery-date' ), array( 'orddd_calendar_sync_settings', 'orddd_add_to_calendar_my_account_page_callback' ), 'orddd_calendar_sync_settings_page', 'orddd_calendar_sync_customer_settings_section', array ( __( 'Show Add to Calendar button on My account page for the customers.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_calendar_in_same_window', __( 'Open Calendar in Same Window', 'order-delivery-date' ), array( 'orddd_calendar_sync_settings', 'orddd_calendar_in_same_window_callback' ), 'orddd_calendar_sync_settings_page', 'orddd_calendar_sync_customer_settings_section', array ( __( 'As default, the Calendar is opened in a new tab or window. If you check this option, user will be redirected to the Calendar from the same page, without opening a new tab or window.', 'order-delivery-date' ) ) ); add_settings_section( 'orddd_calendar_sync_admin_settings_section', __( 'Admin Calendar Sync Settings', 'order-delivery-date' ), array( 'orddd_calendar_sync_settings', 'orddd_calendar_sync_admin_settings_section_callback' ), 'orddd_calendar_sync_settings_page' ); add_settings_field( 'orddd_calendar_sync_integration_mode', __( 'Integration Mode', 'order-delivery-date' ), array( 'orddd_calendar_sync_settings', 'orddd_calendar_sync_integration_mode_callback' ), 'orddd_calendar_sync_settings_page', 'orddd_calendar_sync_admin_settings_section', array ( __( '<br>Select method of integration. "Sync Automatically" will add the delivery events to the Google calendar, which is set in the "Calendar to be used" field, automatically when a customer places an order. Also, an "Add to Calendar" button is added on the Delivery Calendar page in admin to Sync past orders. <br>"Sync Manually" will add an "Add to Google Calendar" button in emails received by admin and New customer order.<br>"Disabled" will disable the integration with Google Calendar.<br>Note: Import of the events will work manually using .ics link.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_sync_calendar_instructions', __( 'Instructions', 'order-delivery-date' ), array( 'orddd_calendar_sync_settings', 'orddd_sync_calendar_instructions_callback' ), 'orddd_calendar_sync_settings_page', 'orddd_calendar_sync_admin_settings_section' ); add_settings_field( 'orddd_calendar_key_file_name', __( 'Key file name', 'order-delivery-date' ), array( 'orddd_calendar_sync_settings', 'orddd_calendar_key_file_name_callback' ), 'orddd_calendar_sync_settings_page', 'orddd_calendar_sync_admin_settings_section', array( __( '<br>Enter key file name here without extention, e.g. ab12345678901234567890-privatekey.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_calendar_service_acc_email_address', __( 'Service account email address', 'order-delivery-date' ), array( 'orddd_calendar_sync_settings', 'orddd_calendar_service_acc_email_address_callback' ), 'orddd_calendar_sync_settings_page', 'orddd_calendar_sync_admin_settings_section', array( __( '<br>Enter Service account email address here, e.g. 1234567890@developer.gserviceaccount.com.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_calendar_id', __( 'Calendar to be used', 'order-delivery-date' ), array( 'orddd_calendar_sync_settings', 'orddd_calendar_id_callback' ), 'orddd_calendar_sync_settings_page', 'orddd_calendar_sync_admin_settings_section', array( __( '<br>Enter the ID of the calendar in which your deliveries will be saved, e.g. abcdefg1234567890@group.calendar.google.com.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_calendar_test_connection', '', array( 'orddd_calendar_sync_settings', 'orddd_calendar_test_connection_callback' ), 'orddd_calendar_sync_settings_page', 'orddd_calendar_sync_admin_settings_section' ); add_settings_field( 'orddd_admin_add_to_calendar_delivery_calendar', __( 'Show "Export to Google Calendar" button on Delivery Calendar page', 'order-delivery-date' ), array( 'orddd_calendar_sync_settings', 'orddd_admin_add_to_calendar_delivery_calendar_callback' ), 'orddd_calendar_sync_settings_page', 'orddd_calendar_sync_admin_settings_section', array( __( 'Show "Export to Google Calendar" button on the Order Delivery Date -> Delivery Calendar page.<br><i>Note: This button can be used to export the already placed orders with future deliveries from the current date to the calendar used above.</i>', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_admin_add_to_calendar_email_notification', __( 'Show Add to Calendar button in New Order email notification', 'order-delivery-date' ), array( 'orddd_calendar_sync_settings', 'orddd_admin_add_to_calendar_email_notification_callback' ), 'orddd_calendar_sync_settings_page', 'orddd_calendar_sync_admin_settings_section', array( __( 'Show "Add to Calendar" button in the New Order email notification.', 'order-delivery-date' ) ) ); add_settings_section( 'orddd_calendar_import_ics_feeds_section', __( 'Import Events', 'order-delivery-date' ), array( 'orddd_calendar_sync_settings', 'orddd_calendar_import_ics_feeds_section_callback' ), 'orddd_calendar_sync_settings_page' ); add_settings_field( 'orddd_ics_feed_url_instructions', __( 'Instructions', 'order-delivery-date' ), array( 'orddd_calendar_sync_settings', 'orddd_ics_feed_url_instructions_callback' ), 'orddd_calendar_sync_settings_page', 'orddd_calendar_import_ics_feeds_section' ); add_settings_field( 'orddd_ics_feed_url', __( 'iCalendar/.ics Feed URL', 'order-delivery-date' ), array( 'orddd_calendar_sync_settings', 'orddd_ics_feed_url_callback' ), 'orddd_calendar_sync_settings_page', 'orddd_calendar_import_ics_feeds_section' ); add_settings_field( 'orddd_real_time_import', __( 'Import frequency', 'order-delivery-date' ), array( 'orddd_calendar_sync_settings', 'orddd_real_time_import_callback' ), 'orddd_calendar_sync_settings_page', 'orddd_calendar_import_ics_feeds_section', array( __( 'Import events from Google calendar based on the time set below. By default, all events from the Google calendar will be imported once every 24 hours.', 'order-delivery-date' ) ) ); add_settings_field( 'orddd_wp_cron_minutes', __( 'Enter Import frequency (in minutes)', 'order-delivery-date' ), array( 'orddd_calendar_sync_settings', 'orddd_wp_cron_minutes_callback' ), 'orddd_calendar_sync_settings_page', 'orddd_calendar_import_ics_feeds_section', array( __( 'The duration in minutes at which events from the Google Calendar ICS feeds will be imported automatically in the store. <i>Note: Setting this to a lower value then 10 minutes may impact the performance of your store.</i>' ) ) ); register_setting( 'orddd_calendar_sync_settings', 'orddd_calendar_event_location' ); register_setting( 'orddd_calendar_sync_settings', 'orddd_add_to_calendar_order_received_page' ); register_setting( 'orddd_calendar_sync_settings', 'orddd_add_to_calendar_customer_email' ); register_setting( 'orddd_calendar_sync_settings', 'orddd_add_to_calendar_my_account_page' ); register_setting( 'orddd_calendar_sync_settings', 'orddd_calendar_in_same_window' ); register_setting( 'orddd_calendar_sync_settings', 'orddd_calendar_sync_integration_mode' ); register_setting( 'orddd_calendar_sync_settings', 'orddd_calendar_details_1' ); register_setting( 'orddd_calendar_sync_settings', 'orddd_calendar_event_summary' ); register_setting( 'orddd_calendar_sync_settings', 'orddd_calendar_event_description' ); register_setting( 'orddd_calendar_sync_settings', 'orddd_admin_add_to_calendar_email_notification' ); register_setting( 'orddd_calendar_sync_settings', 'orddd_admin_add_to_calendar_delivery_calendar' ); register_setting( 'orddd_calendar_sync_settings', 'orddd_real_time_import' ); register_setting( 'orddd_calendar_sync_settings', 'orddd_wp_cron_minutes' ); } /** * Add Order Delivery Date menu in the Admin Dashboard * * @since 2.8.3 */ public function orddd_menu() { add_menu_page( 'Order Delivery Date', 'Order Delivery Date', 'manage_woocommerce', 'order_delivery_date', array( &$this, 'order_delivery_date_settings' ) ); $page = add_submenu_page( 'order_delivery_date', __( 'Delivery Calendar', 'order-delivery-date' ), __( 'Delivery Calendar', 'order-delivery-date' ), 'manage_woocommerce', 'orddd_view_orders', array( 'orddd_class_view_deliveries', 'orddd_view_calendar_orders_page' ) ); $page = add_submenu_page( 'order_delivery_date', __( 'Settings', 'order-delivery-date' ), __( 'Settings', 'order-delivery-date' ), 'manage_woocommerce', 'order_delivery_date', array( &$this, 'order_delivery_date_settings' ) ); $page = add_submenu_page( 'order_delivery_date', 'Activate License', 'Activate License', 'manage_woocommerce', 'edd_sample_license_page', array( 'orddd_license', 'orddd_edd_sample_license_page' ) ); remove_submenu_page( 'order_delivery_date', 'order_delivery_date' ); do_action( 'orddd_add_submenu' ); } /** * Display Settings in Order Delivery Date menu * * @since 2.8.3 */ public function order_delivery_date_settings() { global $orddd_date_formats, $orddd_number_of_months, $orddd_time_formats, $orddd_calendar_themes, $orddd_weekdays, $orddd_calendar_languages, $wpdb, $woocommerce; $plugin_path = plugins_url(); $check_prev = array(); $action = $active_general_settings = $calendar_sync_settings = $active_shipping_based = $active_advance_settings = ""; if ( isset( $_GET[ 'action' ] ) ) { $action = sanitize_text_field( $_GET[ 'action' ] ); } else { $action = "general_settings"; } if ( isset( $_GET[ 'mode' ] ) ) { $mode = sanitize_text_field( $_GET[ 'mode' ] ); } else { $mode = ''; } if( $action == 'general_settings' ) { $active_general_settings = "nav-tab-active"; } if ( $action == 'advance_settings' ) { $active_advance_settings = "nav-tab-active"; } if ( $action == 'shipping_based' ) { $active_shipping_based = "nav-tab-active"; } if( $action == 'calendar_sync_settings' ) { $calendar_sync_settings = "nav-tab-active"; } ?> <h2><?php _e( 'Order Delivery Date and Time Settings', 'order-delivery-date' ); ?></h2> <?php settings_errors(); ?> <div class="wrap woocommerce"> <nav class="nav-tab-wrapper woo-nav-tab-wrapper" id="orddd_settings_tabs"> <a href="admin.php?page=order_delivery_date&action=general_settings" class="nav-tab <?php echo $active_general_settings; ?>"><?php _e( 'General Settings', 'order-delivery-date' );?> </a> <?php if ( get_option( 'orddd_enable_day_wise_settings' ) == 'on' ) { ?> <a href="admin.php?page=order_delivery_date&action=advance_settings" class="nav-tab <?php echo $active_advance_settings; ?>"> <?php _e( 'Weekday Settings', 'order-delivery-date' ); ?> </a> <?php } ?> <a href="admin.php?page=order_delivery_date&action=shipping_based" class="nav-tab <?php echo $active_shipping_based; ?>"> <?php _e( 'Custom Delivery Settings', 'order-delivery-date' ); ?> </a> <a href="admin.php?page=order_delivery_date&action=calendar_sync_settings" class="nav-tab <?php echo $calendar_sync_settings; ?>"> <?php _e( 'Google Calendar Sync', 'order-delivery-date' ); ?> </a> <?php do_action( 'orddd_add_settings_tab' ); ?> </nav> </div> <?php do_action( 'orddd_add_tab_content' ); if( $action == 'general_settings' ) { $date_settings_class = $shipping_days_class = $delivery_date_class = $time_settings_class = $holidays_class = $appearance_class = $time_slot_class = $additional_settings_class = $section = ""; if ( isset( $_GET[ 'section' ] ) ) { $section = sanitize_text_field( $_GET[ 'section' ] ); } else { $section = ''; } if ( $section == 'date_settings' || $section == '' ) { $date_settings_class = "current"; } if ( $section == 'delivery_dates' ) { $delivery_date_class = "current"; } if ( $section == 'time_settings' ) { $time_settings_class = "current"; } if ( $section == 'holidays' ) { $holidays_class = "nav-tab-active"; } if ( $section == 'appearance' ) { $appearance_class = "current"; } if ( $section == 'time_slot' ) { $time_slot_class = "current"; } if ( $section == 'additional_settings' ) { $additional_settings_class = "current"; } ?> <ul class="subsubsub" id="orddd_general_settings_list"> <li> <a href="admin.php?page=order_delivery_date&action=general_settings§ion=date_settings" class="<?php echo $date_settings_class; ?>"><?php _e( 'Date Settings', 'order-delivery-date' );?> </a> | </li> <li> <a href="admin.php?page=order_delivery_date&action=general_settings§ion=delivery_dates" class="<?php echo $delivery_date_class; ?>"><?php _e( 'Specific Delivery Dates', 'order-delivery-date' );?> </a> | </li> <li> <a href="admin.php?page=order_delivery_date&action=general_settings§ion=time_settings" class="<?php echo $time_settings_class; ?>"><?php _e( 'Time Settings', 'order-delivery-date' );?> </a> | </li> <li> <a href="admin.php?page=order_delivery_date&action=general_settings§ion=holidays" class="<?php echo $holidays_class; ?>"><?php _e( 'Holidays', 'order-delivery-date' );?> </a> | </li> <li> <a href="admin.php?page=order_delivery_date&action=general_settings§ion=appearance" class="<?php echo $appearance_class; ?>"><?php _e( 'Appearance', 'order-delivery-date' );?> </a> | </li> <li> <a href="admin.php?page=order_delivery_date&action=general_settings§ion=time_slot" class="<?php echo $time_slot_class; ?>"><?php _e( 'Time Slot', 'order-delivery-date' );?> </a> | </li> <li> <a href="admin.php?page=order_delivery_date&action=general_settings§ion=additional_settings" class="<?php echo $additional_settings_class; ?>"><?php _e( 'Additional Settings', 'order-delivery-date' );?> </a> </li> <?php do_action( 'orddd_general_settings_links', $section ); ?> </ul> <br class="clear"> <?php if ( $section == 'date_settings' || $section == '' ) { print( '<div id="content"> <form method="post" action="options.php">' ); settings_fields( "orddd_date_settings" ); do_settings_sections( "orddd_date_settings_page" ); submit_button ( __( 'Save Settings', 'order-delivery-date' ), 'primary', 'save', true ); print('</form> </div>'); } if ( $section == 'delivery_dates' ) { print( '<div id="content"> <div class="orddd-col-left" > <form method="post" action="options.php">'); settings_fields( "orddd_delivery_days_settings" ); do_settings_sections( "orddd_delivery_days_page" ); submit_button ( __( 'Save Settings', 'order-delivery-date' ), 'primary', 'save', true ); print('</form> </div> </div>' ); echo "<div class='orddd-col-right'><h3 id='delivery_date_table_head'>" . __( 'Specific Delivery Dates', 'order-delivery-date' ) . "</h3>"; include_once( 'includes/class-view-delivery-days.php' ); $orddd_table = new ORDDD_View_Delivery_Dates_Table(); $orddd_table->orddd_prepare_items(); ?> <div id = "orddd_delivery_dates_list"> <form id="delivery-dates" method="get" > <input type="hidden" name="page" value="order_delivery_date" /> <input type="hidden" name="tab" value="general_settings" /> <input type="hidden" name="section" value="delivery_dates" /> <?php $orddd_table->display(); ?> </form> </div> </div> <?php } if ( $section == 'time_settings' ) { print( '<div id="content"> <form method="post" action="options.php">' ); settings_fields( "orddd_time_settings" ); do_settings_sections( "orddd_time_settings_page" ); submit_button ( __( 'Save Settings', 'order-delivery-date' ), 'primary', 'save', true ); print('</form> </div>' ); } if ( $section == 'holidays' ) { print( '<div id="content"> <div class="orddd-col-left" > <form method="post" action="options.php"> <div>' ); settings_fields( "orddd_holiday_settings" ); do_settings_sections( "orddd_holidays_page" ); submit_button ( __( 'Create Holidays', 'order-delivery-date' ), 'primary', 'save', true ); print( '</form> </div> </div>' ); echo "<div class='orddd-col-right'><h3 id='holidays_table_head'>" . __( 'Holidays', 'order-delivery-date' ) . "</h3>"; include_once( 'includes/class-view-holidays.php' ); $orddd_table = new ORDDD_View_Holidays_Table(); $orddd_table->orddd_prepare_items(); ?> <div id = "orddd_holidays_list"> <form id="holidays" method="get" > <input type="hidden" name="page" value="order_delivery_date" /> <input type="hidden" name="tab" value="general_settings" /> <input type="hidden" name="section" value="holidays" /> <?php $orddd_table->display(); ?> </form> </div> </div> <?php } if ( $section == 'appearance' ) { print( '<div id="content"> <form method="post" action="options.php">'); settings_fields( "orddd_appearance_settings" ); do_settings_sections( "orddd_appearance_page" ); submit_button ( __( 'Save Settings', 'order-delivery-date' ), 'primary', 'save', true ); print('</form> </div>' ); } if ( $section == 'time_slot' ) { print( '<div id="content"> <form method="post" action="options.php">'); settings_fields( "orddd_time_slot_settings" ); do_settings_sections( "orddd_time_slot_page" ); submit_button ( __( 'Save Settings', 'order-delivery-date' ), 'primary', 'save', true ); print('</form> </div>' ); $existing_timeslots_str = get_option( 'orddd_disable_time_slot_log' ); $existing_timeslots_arr = array(); if ( $existing_timeslots_str == 'null' || $existing_timeslots_str == '' || $existing_timeslots_str == '{}' || $existing_timeslots_str == '[]' ) { $existing_timeslots_arr = array(); } else { $existing_timeslots_arr = json_decode( $existing_timeslots_str ); } ?> <a href="admin.php?page=order_delivery_date&action=general_settings§ion=block_time_slot_settings" class="block_time_slot"> <?php _e( 'Block Time Slots', 'order-delivery-date' ); echo ' (' . count( $existing_timeslots_arr ) . ')'; ?> </a> <?php echo "<h3 id='timeslots_table_head'>" . __( 'Time Slots', 'order-delivery-date' ) . "</h3>"; include_once( 'includes/class-view-time-slots.php' ); $orddd_table = new ORDDD_View_Time_Slots_Table(); $orddd_table->orddd_prepare_items(); ?> <div id = "orddd_time_slot_list"> <form id="time-slot" method="get" > <input type="hidden" name="page" value="order_delivery_date" /> <input type="hidden" name="tab" value="general_settings" /> <input type="hidden" name="section" value="time_slot" /> <?php $orddd_table->display(); ?> </form> </div> <?php } if ( $section == 'block_time_slot_settings' ) { ?> <a href="admin.php?page=order_delivery_date&action=general_settings§ion=time_slot" class="back_to_time_slot"><?php _e( 'Back to Time Slots', 'order-delivery-date' );?> </a> <?php print( '<div id="content"> <form method="post" action="options.php">'); settings_fields( "orddd_disable_time_slot_settings" ); do_settings_sections( "orddd_holidays_disable_page" ); submit_button ( __( 'Save Settings', 'order-delivery-date' ), 'primary', 'save', true ); print('</form> </div>' ); echo "<h3 id='block_timeslot_table_head'>" . __( 'Blocked Time Slots', 'order-delivery-date' ) . "</h3>"; include_once( 'includes/class-view-disable-time-slots.php' ); $orddd_table_test = new ORDDD_View_Disable_Time_Slots_Table(); $orddd_table_test->orddd_prepare_items(); ?> <div id = "orddd_disable_time_slot_list"> <form id="time-slot" method="get" > <input type="hidden" name="page" value="order_delivery_date" /> <input type="hidden" name="tab" value="general_settings" /> <input type="hidden" name="section" value="block_time_slot_settings" /> <?php $orddd_table_test->display(); ?> </form> </div> <?php } if ( $section == 'additional_settings' ) { print( '<div id="content"> <form method="post" action="options.php">' ); settings_fields( "orddd_additional_settings" ); do_settings_sections( "orddd_additional_settings_page" ); submit_button ( __( 'Save Settings', 'order-delivery-date' ), 'primary', 'save', true ); print('</form> </div>'); } } else if( $action == 'advance_settings' ) { include_once( 'includes/views/html-advance-settings.php' ); } else if ( $action == 'shipping_based' && $mode != 'add_settings' && $mode != 'edit' ) { print( '<div id="content"> <form method="post" action="options.php">'); settings_fields( "orddd_shipping_based_delivery_settings" ); do_settings_sections( "orddd_shipping_based_delivery_page" ); print('</form> </div>' ); $number_of_shipping_settings = orddd_common::orddd_get_shipping_settings_count(); if( $number_of_shipping_settings === 0 && get_option( 'orddd_enable_shipping_based_delivery' ) == 'on' ) { echo 'There are no custom delivery settings created. Please <a href=\'admin.php?page=order_delivery_date&action=shipping_based&mode=add_settings\' class=\'add_shipping_setting\'>click here</a> to add delivery date and time settings.'; } else { echo '<a href=\'admin.php?page=order_delivery_date&action=shipping_based&mode=add_settings\' class=\'add_shipping_setting\'>' . __( 'Add Custom Delivery Settings', 'order-delivery-date' ) . '</a> <a href="https://www.tychesoftwares.com/docs/docs/order-delivery-date-pro-for-woocommerce/custom-delivery-settings/?utm_source=userwebsite&utm_medium=link&utm_campaign=OrderDeliveryDateProSetting" target="_blank" class="dashicons dashicons-external" style="line-height:unset;"></a>'; include_once( 'includes/class-view-shipping-settings.php' ); $orddd_table = new ORDDD_View_Shipping_Settings_Table(); $orddd_table->orddd_prepare_items(); ?> <div id = "orddd_shipping_based_settings_list"> <form id="custom-delivery-settings" method="get" > <input type="hidden" name="page" value="order_delivery_date" /> <input type="hidden" name="tab" value="shipping_based" /> <?php $orddd_table->display(); ?> </form> </div> <?php } } else if ( $action == 'shipping_based' && ( $mode == 'add_settings' || $mode == 'edit' ) ) { print( '<div id="content"> <form method="post" action="options.php">'); settings_fields( "orddd_shipping_based_settings" ); do_settings_sections( "orddd_shipping_based_page" ); print( '<table> <tr> <td>' ); submit_button ( __( 'Save Settings', 'order-delivery-date' ), 'primary', 'save', true ); print( '</td> <td>' ); $other_attributes = array( 'formaction' => 'admin.php?page=order_delivery_date&action=shipping_based' ); submit_button ( __( 'Cancel', 'order-delivery-date' ), '', 'cancel', true, $other_attributes ); print( '</td> </tr> </table> </form> </div>' ); } else if ( $action == 'calendar_sync_settings' ) { print( '<div id="content"> <form method="post" action="options.php">'); settings_fields( "orddd_calendar_sync_settings" ); do_settings_sections( "orddd_calendar_sync_settings_page" ); submit_button ( __( 'Save Settings', 'order-delivery-date' ), 'primary', 'save', true ); print( '</form> </div>' ); } } /** * Remove the element from the array passed * * @param array $array * @param string $key * @param string $value * @return array */ public static function removeElementWithValue( $array, $key, $value ) { foreach( $array as $subKey => $subArray ) { if( $subArray[ $key ] == $value ) { unset( $array[ $subKey ] ); } } return $array; } /** * Delete Holidays, Delivery Date or Time slots * * @since * */ public function orddd_delete_settings() { if ( ( isset( $_GET[ 'page' ] ) && sanitize_text_field( $_GET[ 'page' ] ) == 'order_delivery_date' ) && ( isset( $_GET[ 'tab' ] ) && sanitize_text_field( $_GET[ 'tab' ] ) == 'shipping_based' ) ) { if( ( isset( $_GET[ 'action' ] ) && sanitize_text_field( $_GET[ 'action' ] ) == 'orddd_delete' ) || ( isset( $_GET[ 'action2' ] ) && sanitize_text_field( $_GET[ 'action2' ] ) == 'orddd_delete') ) { $custom_delivery_setting = array(); if( isset( $_GET[ 'custom_delivery_setting' ] ) ) { $custom_delivery_setting = $_GET[ 'custom_delivery_setting' ]; } foreach( $custom_delivery_setting as $c_key => $c_value ) { delete_option( 'orddd_shipping_based_settings_' . $c_value ); } } wp_safe_redirect( admin_url( '/admin.php?page=order_delivery_date&action=shipping_based' ) ); } if ( ( isset( $_GET[ 'page' ] ) && sanitize_text_field( $_GET[ 'page' ] ) == 'order_delivery_date' ) && ( isset( $_GET[ 'tab' ] ) && sanitize_text_field( $_GET[ 'tab' ] ) == 'general_settings' ) && ( isset( $_GET[ 'section' ] ) && sanitize_text_field( $_GET[ 'section' ] ) == 'delivery_dates' ) ) { if( ( isset( $_GET[ 'action' ] ) && sanitize_text_field( $_GET[ 'action' ] ) == 'orddd_delete' ) || ( isset( $_GET[ 'action2' ] ) && sanitize_text_field( $_GET[ 'action2' ] ) == 'orddd_delete') ) { $delivery_date = array(); if( isset( $_GET[ 'delivery_date' ] ) ) { $delivery_date = $_GET[ 'delivery_date' ]; } foreach( $delivery_date as $d_key => $d_value ) { // Delivery Dates $delivery_dates = get_option( 'orddd_delivery_dates' ); if ( $delivery_dates != '' && $delivery_dates != '{}' && $delivery_dates != '[]' && $delivery_dates != 'null' ) { $delivery_dates_new_arr = json_decode( $delivery_dates, true ); } else { $delivery_dates_new_arr = array(); } $new_arr = array(); $i = 0; $delete_status = "N"; foreach ( $delivery_dates_new_arr as $key => $value ) { foreach( $value as $k => $v ) { if ( $v == $d_value ) { $delete_status = "Y"; unset( $delivery_dates_new_arr[ $key ] ); } } if ( $delete_status == "N" ) { $new_arr[ $i ] = $value; $i++; } $delete_status = "N"; } $delivery_dates_new_arr = $new_arr; update_option( 'orddd_delivery_dates', json_encode( $delivery_dates_new_arr ) ); // Lockout Days $lockout_days = json_decode( get_option( 'orddd_lockout_days' ) ); if ( $lockout_days == '' || $lockout_days == null ) { $lockout_days = array(); } $i = 0; $new_arr_order = array(); foreach ( $lockout_days as $k => $v ) { if ( $v->d == $d_value ) { $delete_status = "Y"; unset( $lockout_days[ $k ] ); } if ( $delete_status == "N" ) { $new_arr_order[ $i ] = $v; $i++; } $delete_status = "N"; } $lockout_days = $new_arr_order; update_option( 'orddd_lockout_days',json_encode( $lockout_days ) ); // Time Slots $time_slot_str = get_option( 'orddd_delivery_time_slot_log' ); $time_slot = json_decode( $time_slot_str ); $timeslot_new_arr = array(); if ( $time_slot == 'null' || $time_slot == 'null' || $time_slot == '' || $time_slot == '{}' || $time_slot == '[]' ) { $time_slot = array(); } foreach ( $time_slot as $key => $v ) { $arr = $v->fh . ":" . $v->fm . " - " . $v->th . ":" . $v->tm; if ( gettype(json_decode( $v->dd ) ) == 'array' && count( json_decode( $v->dd ) ) > 0 ) { $dd = json_decode( $v->dd ); $new_dd_str = '['; $count_dd = 0; if( is_array( $dd ) ) { $count_dd = count( $dd ); } for ( $i = 0 ; $i < $count_dd ; $i++ ) { if ( $dd[ $i ] == $d_value ) { // do nothing as this time slot needs to be deleted } else { $new_dd_str .= '"' . $dd[ $i ] . '",'; } } $new_dd_str = substr( $new_dd_str, 0, strlen( $new_dd_str )-1 ); if ( trim( $new_dd_str )!= "" ) { $new_dd_str .= ']'; $timeslot_new_arr[] = array( 'tv' => $v->tv, 'dd' => $new_dd_str, 'lockout' => $v->lockout, 'additional_charges' => $v->additional_charges, 'additional_charges_label' => $v->additional_charges_label, 'fh' => $v->fh, 'fm' => $v->fm, 'th' => $v->th, 'tm' => $v->tm ); } } else { $timeslot_new_arr[] = array( 'tv' => $v->tv, 'dd' => $v->dd, 'lockout' => $v->lockout, 'additional_charges' => $v->additional_charges, 'additional_charges_label' => $v->additional_charges_label, 'fh' => $v->fh, 'fm' => $v->fm, 'th' => $v->th, 'tm' => $v->tm ); } } $timeslot_jarr = json_encode( $timeslot_new_arr ); update_option( 'orddd_delivery_time_slot_log', $timeslot_jarr ); } } wp_safe_redirect( admin_url( '/admin.php?page=order_delivery_date&action=general_settings§ion=delivery_dates' ) ); } if ( ( isset( $_GET[ 'page' ] ) && sanitize_text_field( $_GET[ 'page' ] ) == 'order_delivery_date' ) && ( isset( $_GET[ 'tab' ] ) && sanitize_text_field( $_GET[ 'tab' ] ) == 'general_settings' ) && ( isset( $_GET[ 'section' ] ) && sanitize_text_field( $_GET[ 'section' ] ) == 'holidays' ) ) { if( ( isset( $_GET[ 'action' ] ) && sanitize_text_field( $_GET[ 'action' ] ) == 'orddd_delete' ) || ( isset( $_GET[ 'action2' ] ) && sanitize_text_field( $_GET[ 'action2' ] ) == 'orddd_delete' ) ) { $holiday = array(); if( isset( $_GET[ 'holiday' ] ) ) { $holiday = $_GET[ 'holiday' ]; } foreach( $holiday as $h_key => $h_value ) { $holidays = get_option( 'orddd_delivery_date_holidays' ); $holidays_arr = json_decode( $holidays ); $holidays_new_arr = array(); if ( $holidays_arr != '' || ( is_array( $holidays_arr ) && count( $holidays_arr ) > 0 ) ) { foreach ( $holidays_arr as $k => $v ){ $holidays_new_arr[] = array( 'n' => $v->n, 'd' => $v->d, 'r_type' => $v->r_type ); } } $cnt = count( $holidays_new_arr ); $new_arr = self::removeElementWithValue( $holidays_new_arr, 'd', $h_value ); $holidays_jarr = json_encode( $new_arr ); update_option( 'orddd_delivery_date_holidays', $holidays_jarr ); } } wp_safe_redirect( admin_url( '/admin.php?page=order_delivery_date&action=general_settings§ion=holidays' ) ); } if ( ( isset( $_GET[ 'page' ] ) && sanitize_text_field( $_GET[ 'page' ] ) == 'order_delivery_date' ) && ( isset( $_GET[ 'tab' ] ) && sanitize_text_field( $_GET[ 'tab' ] ) == 'general_settings' ) && ( isset( $_GET[ 'section' ] ) && sanitize_text_field( $_GET[ 'section' ] ) == 'time_slot' ) ) { if( ( isset( $_GET[ 'action' ] ) && sanitize_text_field( $_GET[ 'action' ] ) == 'orddd_delete' ) || ( isset( $_GET[ 'action2' ] ) && sanitize_text_field( $_GET[ 'action2' ] ) == 'orddd_delete') ) { $time_slot_to_delete = array(); if( isset( $_GET[ 'time_slot' ] ) ) { $time_slot_to_delete = $_GET[ 'time_slot' ]; } foreach( $time_slot_to_delete as $t_key => $t_value ) { $time_values = explode( ",", $t_value ); $date_to_check = $fh = $fm = $th = $tm = $tv = ''; if( isset( $time_values[ 0 ] ) ) { $date_to_check = $time_values[ 0 ]; } if( isset( $time_values[ 1 ] ) ) { $fh = $time_values[ 1 ]; } if( isset( $time_values[ 2 ] ) ) { $fm = $time_values[ 2 ]; } if( isset( $time_values[ 3 ] ) ) { $th = $time_values[ 3 ]; } if( isset( $time_values[ 4 ] ) ) { $tm = $time_values[ 4 ]; } if( isset( $time_values[ 5 ] ) ) { $tv = $time_values[ 5 ]; } $time_slot_str = get_option( 'orddd_delivery_time_slot_log' ); $time_slots = json_decode( $time_slot_str ); $timeslot_new_arr = array(); if ( $time_slots == 'null' || $time_slots == 'null' || $time_slots == '' || $time_slots == '{}' || $time_slots == '[]' ) { $time_slots = array(); } foreach( $time_slots as $key => $v ) { if ( gettype( json_decode( $v->dd ) ) == 'array' && count( json_decode( $v->dd ) ) > 0 ) { $dd = json_decode( $v->dd ); $new_dd_str = '['; $count_dd = 0; if ( is_array( $dd ) ) { $count_dd = count( $dd ); } for ( $i = 0 ; $i < $count_dd ; $i++ ) { if ( $fh == $v->fh && $fm == $v->fm && $th == $v->th && $tm == $v->tm && $date_to_check == $dd[ $i ] && $tv == $v->tv ) { // do nothing as this time slot needs to be deleted } else { $new_dd_str .= '"' . $dd[ $i ] . '",'; } } $new_dd_str = substr( $new_dd_str, 0, strlen( $new_dd_str )-1 ); if ( trim( $new_dd_str ) != "" ) { $new_dd_str .= ']'; $timeslot_new_arr[] = array( 'tv' => $v->tv, 'dd' => $new_dd_str, 'lockout' => $v->lockout, 'additional_charges' => $v->additional_charges, 'additional_charges_label' => $v->additional_charges_label, 'fh' => $v->fh, 'fm' => $v->fm, 'th' => $v->th, 'tm' => $v->tm ); } } else { if ( $fh == $v->fh && $fm == $v->fm && $th == $v->th && $tm == $v->tm && $date_to_check == $v->dd && $tv == $v->tv ) { unset( $v ); } else { $timeslot_new_arr[] = array( 'tv' => $v->tv, 'dd' => $v->dd, 'lockout' => $v->lockout, 'additional_charges' => $v->additional_charges, 'additional_charges_label' => $v->additional_charges_label, 'fh' => $v->fh, 'fm' => $v->fm, 'th' => $v->th, 'tm' => $v->tm ); } } } $timeslot_jarr = json_encode( $timeslot_new_arr ); update_option( 'orddd_delivery_time_slot_log', $timeslot_jarr ); } } wp_safe_redirect( admin_url( '/admin.php?page=order_delivery_date&action=general_settings§ion=time_slot' ) ); } if ( ( isset( $_GET[ 'page' ] ) && sanitize_text_field( $_GET[ 'page' ] ) == 'order_delivery_date' ) && ( isset( $_GET[ 'tab' ] ) && sanitize_text_field( $_GET[ 'tab' ] ) == 'general_settings' ) && ( isset( $_GET[ 'section' ] ) && sanitize_text_field( $_GET[ 'section' ] ) == 'block_time_slot_settings' ) ) { if( ( isset( $_GET[ 'action' ] ) && sanitize_text_field( $_GET[ 'action' ] ) == 'orddd_delete' ) || ( isset( $_GET[ 'action2' ] ) && sanitize_text_field( $_GET[ 'action2' ] ) == 'orddd_delete') ) { $block_time_slot_to_delete = array(); if( isset( $_GET[ 'block_time_slot' ] ) ) { $block_time_slot_to_delete = $_GET[ 'block_time_slot' ]; } foreach( $block_time_slot_to_delete as $t_key => $t_value ) { $time_values = explode( ",", $t_value ); $date_to_check = $time_Slot = ''; if( isset( $time_values[ 0 ] ) ) { $date_to_check = $time_values[ 0 ]; } if( isset( $time_values[ 1 ] ) ) { $time_Slot = $time_values[ 1 ]; } $disable_time_slot_str = get_option( 'orddd_disable_time_slot_log' ); $disable_time_slots = json_decode( $disable_time_slot_str ); $disable_timeslot_new_arr = array(); if ( $disable_time_slots == 'null' || $disable_time_slots == 'null' || $disable_time_slots == '' || $disable_time_slots == '{}' || $disable_time_slots == '[]' ) { $disable_time_slots = array(); } $timeslot_disable_new_arr = array(); foreach( $disable_time_slots as $disable_key => $disable_v ) { $time_slots = json_decode( $disable_v->ts ); if ( ( isset( $time_Slot ) && in_array( $time_Slot, $time_slots ) ) && ( isset( $date_to_check ) && $date_to_check == $disable_v->dd ) ) { //do nothing as this time slot needs to be deleted $key = array_search( $time_Slot, $time_slots ); unset( $time_slots[ $key ] ); if( is_array( $time_slots ) && count( $time_slots ) == 0 ) { unset( $disable_time_slots[ $disable_key ] ); } $new_ts_str = '['; foreach( $time_slots as $time_slot_key => $time_slot_value ) { $new_ts_str .= '"' . $time_slot_value . '",'; } $new_ts_str = substr( $new_ts_str, 0, strlen( $new_ts_str )-1 ); if ( trim( $new_ts_str ) != "" ) { $new_ts_str .= ']'; $timeslot_disable_new_arr[] = array( 'dtv' => $disable_v->dtv, 'dd' => $disable_v->dd, 'ts' => $new_ts_str ); } } else { $timeslot_disable_new_arr[] = array( 'dtv' => $disable_v->dtv, 'dd' => $disable_v->dd, 'ts' => $disable_v->ts, ); } } $disable_timeslot_jarr = json_encode( $timeslot_disable_new_arr ); update_option( 'orddd_disable_time_slot_log', $disable_timeslot_jarr ); } } wp_safe_redirect( admin_url( '/admin.php?page=order_delivery_date&action=general_settings§ion=block_time_slot_settings' ) ); } } /** * Add Enable Delivery Date checkbox on Product-> Categories page * * @since 2.8.6 */ public function orddd_enable_for_product_category() { ?> <div class="form-field"> <table> <tr> <td><input type="checkbox" name="orddd_delivery_date_for_product_category" id="orddd_delivery_date_for_product_category" checked="checked"/></td> <td><label for="orddd_delivery_date_for_product_category"><?php _e( 'Enable Delivery Dates?', 'order-delivery-date' ); ?></label></td> </tr> </table> </div> <?php } /** * Edit Enable Delivery Date checkbox on Product-> Categories page * * @param resource $term Product category term object. * @param string $taxanomy Taxonomy slug * * @since 2.8.6 */ public function orddd_edit_delivery_field_for_product_category( $term, $taxonomy ) { $display_type = get_term_meta( $term->term_id, 'orddd_delivery_date_for_product_category', true ); $checked = $display_type == 'on' ? 'checked="checked"' : ''; ?> <tr class="form-field"> <th scope="row" valign="top"><label><?php _e( 'Enable Delivery Dates?', 'order-delivery-date' ); ?></label></th> <td> <input type="checkbox" name="orddd_delivery_date_for_product_category" id="orddd_delivery_date_for_product_category" <?php echo $checked; ?> /> </td> </tr> <?php } /** * Save the value of Enable Delivery Date checkbox on Product-> Categories page * * @param int $term_id Product category id. * @param int $tt_id Term taxonomy ID. * @param string $taxonomy Taxonomy slug. * * @since 2.8.6 */ public function orddd_save_category_fields( $term_id, $tt_id, $taxonomy ) { if ( isset( $_POST[ 'orddd_delivery_date_for_product_category' ] ) ) { update_term_meta( $term_id, 'orddd_delivery_date_for_product_category', sanitize_text_field( esc_attr( $_POST[ 'orddd_delivery_date_for_product_category' ] ) ) ); } else { if( ( isset( $_POST[ 'newproduct_cat' ] ) && $_POST[ 'newproduct_cat' ] != '' ) || ( isset( $_POST[ 'action' ] ) && $_POST[ 'action' ] == 'wpml_save_job_ajax' ) ) { update_term_meta( $term_id, 'orddd_delivery_date_for_product_category', 'on' ); } else { update_term_meta( $term_id, 'orddd_delivery_date_for_product_category', '' ); } } delete_transient( 'wc_term_counts' ); } /** * Add delivery date column * * @access public * @param mixed $columns * @return array */ public function orddd_product_cat_columns( $columns ) { $columns[ 'delivery' ] = __( 'Enable Delivery Dates', 'order-delivery-date' ); return $columns; } /** * Add delivery date column value * * @access public * @param mixed $columns * @param mixed $column * @param mixed $id * @return array */ public function orddd_product_cat_column( $columns, $column, $id ) { if ( $column == 'delivery' ) { $delivery_date = get_term_meta( $id, 'orddd_delivery_date_for_product_category', true ); $data = $delivery_date ? 'Yes' : 'No'; $columns .= $data; } return $columns; } /** * Save settings. */ public function orddd_advance_settings_save_changes() { $advance_settings = get_option( 'orddd_advance_settings' ); if( '' === $advance_settings || '{}' === $advance_settings || '[]' === $advance_settings ) { $advance_settings = array(); } $changes = $_POST[ 'changes' ]; foreach ( $changes as $row_id => $data ) { $row_id_arr = explode( "-", $row_id ); if( isset( $row_id_arr[ 0 ] ) && 'new' == $row_id_arr[ 0 ] ) { foreach( $data as $data_key => $data_value ) { if( 'additional_charges' == $data_key ) { $fee_var = "additional_charges_" . $data[ 'orddd_weekdays' ]; update_option( $fee_var, $data_value ); } else if( 'delivery_charges_label' == $data_key ) { $fee_label_var = "delivery_charges_label_" . $data[ 'orddd_weekdays' ]; update_option( $fee_label_var, $data_value ); } } $id = $row_id_arr[ 1 ]; $data[ 'row_id' ] = $id; $advance_settings[ $id ] = $data; } else if ( isset( $data[ 'deleted' ] ) ) { if ( isset( $data[ 'newRow' ] ) ) { // So the user added and deleted a new row. // That's fine, it's not in the database anyways. NEXT! continue; } foreach( $advance_settings[ $row_id ] as $data_key => $data_value ) { if( 'additional_charges' == $data_key ) { $fee_var = "additional_charges_" . $advance_settings[ $row_id ][ 'orddd_weekdays' ]; update_option( $fee_var, '' ); } else if( 'delivery_charges_label' == $data_key ) { $fee_label_var = "delivery_charges_label_" . $advance_settings[ $row_id ][ 'orddd_weekdays' ]; update_option( $fee_label_var, '' ); } } unset( $advance_settings[ $row_id ] ); } else { foreach( $data as $data_key => $data_value ) { $previous_advance_settings = $advance_settings[ $row_id ]; if( 'orddd_weekdays' == $data_key ) { $fee_var = "additional_charges_" . $data_value; $previous_fee_var = "additional_charges_" . $previous_advance_settings[ 'orddd_weekdays' ]; update_option( $fee_var, $previous_advance_settings[ 'additional_charges' ] ); update_option( $previous_fee_var, '' ); $fee_label_var = "delivery_charges_label_" . $data_value; $previous_fee_label_var = "delivery_charges_label_" . $previous_advance_settings[ 'orddd_weekdays' ]; update_option( $fee_label_var, $previous_advance_settings[ 'delivery_charges_label' ] ); update_option( $previous_fee_label_var, '' ); } else if( 'additional_charges' == $data_key ) { $previous_advance_settings = $advance_settings[ $row_id ]; $fee_var = "additional_charges_" . $previous_advance_settings[ 'orddd_weekdays' ]; update_option( $fee_var, $data[ 'additional_charges' ] ); } else if( 'delivery_charges_label' == $data_key ) { $fee_label_var = "delivery_charges_label_" . $previous_advance_settings[ 'orddd_weekdays' ]; update_option( $fee_label_var, $data[ 'delivery_charges_label' ] ); } $advance_settings[ $row_id ][ $data_key ] = $data_value; } } } update_option( 'orddd_advance_settings', $advance_settings ); wp_send_json_success( array( 'orddd_advance_settings' => $advance_settings, ) ); } } $orddd_settings = new orddd_settings();
| ver. 1.4 |
Github
|
.
| PHP 7.4.33 | Generation time: 0 |
proxy
|
phpinfo
|
Settings