postnl_cutoff_time */ // Defaults public const SETTING_CARRIER_DEFAULT_EXPORT_SIGNATURE = "export_signature"; public const SETTING_CARRIER_DEFAULT_EXPORT_ONLY_RECIPIENT = "export_only_recipient"; public const SETTING_CARRIER_DEFAULT_EXPORT_AGE_CHECK = "export_age_check"; public const SETTING_CARRIER_DEFAULT_EXPORT_RETURN = "export_return_shipments"; public const SETTING_CARRIER_DEFAULT_EXPORT_INSURED = "export_insured"; public const SETTING_CARRIER_DEFAULT_EXPORT_INSURED_AMOUNT = "export_insured_amount"; public const SETTING_CARRIER_DEFAULT_EXPORT_INSURED_FROM_PRICE = "export_insured_from_price"; // Delivery options settings public const SETTING_CARRIER_CUTOFF_TIME = "cutoff_time"; public const SETTING_CARRIER_DELIVERY_DAYS_WINDOW = "delivery_days_window"; public const SETTING_CARRIER_DELIVERY_ENABLED = "delivery_enabled"; public const SETTING_CARRIER_DROP_OFF_DAYS = "drop_off_days"; public const SETTING_CARRIER_DROP_OFF_DELAY = "drop_off_delay"; public const SETTING_CARRIER_PICKUP_ENABLED = "pickup_enabled"; public const SETTING_CARRIER_PICKUP_FEE = "pickup_fee"; public const SETTING_CARRIER_PICKUP_TITLE = "pickup_title"; public const SETTING_CARRIER_ONLY_RECIPIENT_ENABLED = "only_recipient_enabled"; public const SETTING_CARRIER_ONLY_RECIPIENT_FEE = "only_recipient_fee"; public const SETTING_CARRIER_SIGNATURE_ENABLED = "signature_enabled"; public const SETTING_CARRIER_SIGNATURE_FEE = "signature_fee"; public const SETTING_CARRIER_DELIVERY_MORNING_ENABLED = "delivery_morning_enabled"; public const SETTING_CARRIER_DELIVERY_MORNING_FEE = "delivery_morning_fee"; public const SETTING_CARRIER_DELIVERY_EVENING_ENABLED = "delivery_evening_enabled"; public const SETTING_CARRIER_DELIVERY_EVENING_FEE = "delivery_evening_fee"; // Saturday delivery // TODO; Currently not implemented public const SETTING_CARRIER_FRIDAY_CUTOFF_TIME = "friday_cutoff_time"; public const SETTING_CARRIER_SATURDAY_DELIVERY_ENABLED = "saturday_delivery_enabled"; public const SETTING_CARRIER_SATURDAY_DELIVERY_FEE = "saturday_delivery_fee"; // Monday delivery public const SETTING_CARRIER_MONDAY_DELIVERY_ENABLED = "monday_delivery_enabled"; public const SETTING_CARRIER_MONDAY_DELIVERY_FEE = "monday_delivery_fee"; public const SETTING_CARRIER_SATURDAY_CUTOFF_TIME = "saturday_cutoff_time"; public function __construct() { add_action("admin_menu", [$this, "menu"]); add_filter( "plugin_action_links_" . WCPOST()->plugin_basename, [ $this, "add_settings_link", ] ); /** * Add the new screen to the woocommerce screen ids to make wc tooltips work. */ add_filter( "woocommerce_screen_ids", function($ids) { $ids[] = "woocommerce_page_" . self::SETTINGS_MENU_SLUG; return $ids; } ); // Create the admin settings require_once("class-wcpn-settings-data.php"); // notice for WooCommerce PostNL plugin add_action("woocommerce_postnl_before_settings_page", [$this, "postnl_country_notice"], 10, 1); } /** * Add settings item to WooCommerce menu */ public function menu() { add_submenu_page( "woocommerce", __("PostNL", "woocommerce-postnl"), __("PostNL", "woocommerce-postnl"), "manage_options", self::SETTINGS_MENU_SLUG, [$this, "settings_page"] ); } /** * Add settings link to plugins page * * @param array $links * * @return array */ public function add_settings_link(array $links): array { $url = admin_url("admin.php?page=" . self::SETTINGS_MENU_SLUG); array_push( $links, sprintf( '%s', $url, __("Settings", "woocommerce-postnl") ) ); return $links; } /** * Output the settings pages. */ public function settings_page() { $settings_tabs = apply_filters( self::SETTINGS_MENU_SLUG . "_tabs", WCPN_Settings_Data::getTabs() ); $active_tab = isset($_GET["tab"]) ? $_GET["tab"] : self::SETTINGS_GENERAL; ?>

render_settings_sections(self::getOptionId($active_tab)); do_action("woocommerce_postnl_after_settings", $active_tab); submit_button(); ?>
countries->get_base_country(); // save or check option to hide notice if (Arr::get($_GET, "postnl_hide_be_notice")) { update_option("postnl_hide_be_notice", true); $hide_notice = true; } else { $hide_notice = get_option("postnl_hide_be_notice"); } // link to hide message when one of the premium extensions is installed if (! $hide_notice && $base_country === "BE") { $postnl_nl_link = 'WC PostNL Netherlands'; $text = sprintf( __( "It looks like your shop is based in Netherlands. This plugin is for PostNL. If you are using PostNL Netherlands, download the %s plugin instead!", "woocommerce-postnl" ), $postnl_nl_link ); $dismiss_button = sprintf( '%s', add_query_arg('postnl_hide_be_notice', 'true'), __("Hide this message", "woocommerce-postnl") ); printf('

%s %s

', $text, $dismiss_button); } } /** * @param string $option * * @return string */ public static function getOptionId(string $option) { return "woocommerce_postnl_{$option}_settings"; } /** * Render the settings sections. Mostly taken from the WordPress equivalent but done like this so parts can * be overridden/changed easily. * * @param string $page - Page ID * * @see \do_settings_sections */ private function render_settings_sections(string $page) { global $wp_settings_sections, $wp_settings_fields; if (! isset($wp_settings_sections[$page])) { return; } foreach ((array) $wp_settings_sections[$page] as $section) { echo '
'; $id = Arr::get($section, "id"); $title = Arr::get($section, "title"); $callback = Arr::get($section, "callback"); if ($title) { printf('

%s

', $id, $title); } if ($callback) { call_user_func($callback, $section); } if (! isset($wp_settings_fields) || ! isset($wp_settings_fields[$page]) || ! isset($wp_settings_fields[$page][$id])) { continue; } echo ''; $this->render_settings_fields($page, $id); echo ""; echo "
"; } } /** * Mostly copied from the WordPress function. * * @param $page * @param $section * * @see \do_settings_fields */ private function render_settings_fields($page, $section): void { global $wp_settings_fields; if (! Arr::get($wp_settings_fields, "$page.$section")) { return; } foreach (Arr::get($wp_settings_fields, "$page.$section") as $field) { $class = Arr::get($field, "args.class") ?? ""; if ($class) { $class = is_array($class) ? implode(" ", $class) : $class; $class = wc_implode_html_attributes(["class" => esc_attr($class)]); } echo ""; $helpText = Arr::get($field, "args.help_text"); $label = Arr::get($field, "args.label_for"); printf('', $label ? "for=\"" . esc_attr($label) . "\"" : "", Arr::get($field, "title"), $helpText ? wc_help_tip($helpText) : "" ); // Pass the option id as argument Arr::set($field, "args.option_id", $page); echo ''; call_user_func( Arr::get($field, "callback"), Arr::get($field, "args") ); echo ''; echo ''; } } } return new WCPOST_Settings();