PluginProbe
Booking Calendar / 11.8.2
Booking Calendar v11.8.2
11.8.3 11.8.2 11.8.1 11.8 11.7 11.6.1 11.6 11.5 11.4.3 11.4.2 11.4.1 11.4 11.3 11.2.1 11.2 11.1 11.0 10.15.7 10.15.6 10.1.3 10.10 10.10.1 10.10.2 10.11 10.11.2 All 203 releases
← All changes | includes/wpbc-include.php +168 -30 11.511.8.2 View file →
@@ -24,23 +24,128 @@
24 24
25 25 require_once WPBC_PLUGIN_DIR . '/core/wpbc-debug.php'; // Debug = Package: WPBC =.
26 26 require_once WPBC_PLUGIN_DIR . '/core/wpbc-core.php'; // Core.
27 27 require_once WPBC_PLUGIN_DIR . '/includes/_functions/feature-flags.php'; // Release gates for functionality under development.
28 +require_once WPBC_PLUGIN_DIR . '/includes/_functions/starter-assets.php'; // Local or remote starter-image URLs.
28 29
29 -if ( wpbc_is_11_5_features_enabled() ) {
30 - require_once WPBC_PLUGIN_DIR . '/includes/booking_modes/booking_modes.php'; // Administration presentation modes.
30 +/**
31 + * Register a fail-closed diagnostic when no complete booking-mode engine exists.
32 + *
33 + * The production package contains one booking-mode engine. An incomplete V3
34 + * package must stop before registering partial navigation, services, or assets.
35 + * Translation remains inside the later notice callback so this early bootstrap
36 + * does not load the text domain prematurely.
37 + *
38 + * @param array<int,string> $errors Preflight or package-integrity errors.
39 + *
40 + * @return void
41 + */
42 +function wpbc_booking_modes_register_missing_engine_diagnostic( $errors ) {
43 + $GLOBALS['wpbc_booking_modes_missing_engine_errors'] = is_array( $errors ) ? $errors : array();
44 + add_action( 'admin_notices', 'wpbc_booking_modes_render_missing_engine_diagnostic' );
31 45 }
32 46
33 -// Explicit diagnostics can prove that the disabled master gate leaves the Booking Modes runtime unloaded.
34 -if ( defined( 'WPBC_ENABLE_BOOKING_MODES_TESTS' ) && true === WPBC_ENABLE_BOOKING_MODES_TESTS && ! wpbc_is_11_5_features_enabled() ) {
35 - require_once WPBC_PLUGIN_DIR . '/includes/booking_modes/tests/disabled-gate-test-page.php';
47 +/**
48 + * Render the administrator-only missing-engine package diagnostic.
49 + *
50 + * @return void
51 + */
52 +function wpbc_booking_modes_render_missing_engine_diagnostic() {
53 + if ( ! current_user_can( 'activate_plugins' ) ) {
54 + return;
55 + }
56 +
57 + $errors = isset( $GLOBALS['wpbc_booking_modes_missing_engine_errors'] ) && is_array( $GLOBALS['wpbc_booking_modes_missing_engine_errors'] )
58 + ? $GLOBALS['wpbc_booking_modes_missing_engine_errors']
59 + : array();
60 + ?>
61 + <div class="notice notice-error">
62 + <p><strong><?php esc_html_e( 'Booking Calendar could not start a complete booking-mode engine. Restore a complete plugin package before using Booking Calendar administration pages.', 'booking' ); ?></strong></p>
63 + <?php if ( ! empty( $errors ) ) : ?>
64 + <ul>
65 + <?php foreach ( array_slice( $errors, 0, 10 ) as $error_message ) : ?>
66 + <li><?php echo esc_html( $error_message ); ?></li>
67 + <?php endforeach; ?>
68 + </ul>
69 + <?php endif; ?>
70 + </div>
71 + <?php
36 72 }
37 73
38 -// Explicit test panels can verify that the disabled 11.5 gate leaves feature modules unloaded.
39 -if ( defined( 'WPBC_ENABLE_APPOINTMENT_TESTS' ) && true === WPBC_ENABLE_APPOINTMENT_TESTS && ! wpbc_is_11_5_features_enabled() ) {
40 - require_once WPBC_PLUGIN_DIR . '/includes/booking-appointment/tests/http-test-page.php';
74 +/**
75 + * Register a migration notice for the removed development engine selector.
76 + *
77 + * The constant is intentionally ignored after cutover. Keeping a late notice
78 + * gives administrators an actionable upgrade path without loading translations
79 + * during the early plugin bootstrap.
80 + *
81 + * @return void
82 + */
83 +function wpbc_booking_modes_register_obsolete_selector_diagnostic() {
84 + add_action( 'admin_notices', 'wpbc_booking_modes_render_obsolete_selector_diagnostic' );
41 85 }
42 86
87 +/**
88 + * Render the administrator-only obsolete-selector migration notice.
89 + *
90 + * @return void
91 + */
92 +function wpbc_booking_modes_render_obsolete_selector_diagnostic() {
93 + if ( ! current_user_can( 'activate_plugins' ) ) {
94 + return;
95 + }
96 + ?>
97 + <div class="notice notice-warning is-dismissible">
98 + <p><?php esc_html_e( 'Booking Calendar V3 is now the production booking-mode engine. Remove the obsolete WPBC_BOOKING_MODE constant from your configuration.', 'booking' ); ?></p>
99 + </div>
100 + <?php
101 +}
102 +
103 +if ( defined( 'WPBC_BOOKING_MODE' ) ) {
104 + wpbc_booking_modes_register_obsolete_selector_diagnostic();
105 +}
106 +
107 +$wpbc_booking_modes_v3_preflight_file = WPBC_PLUGIN_DIR . '/includes/booking_modes_v3/preflight.php';
108 +$wpbc_booking_modes_v3_result = array(
109 + 'ready' => false,
110 + 'errors' => array(),
111 +);
112 +
113 +if ( is_readable( $wpbc_booking_modes_v3_preflight_file ) ) {
114 + require_once $wpbc_booking_modes_v3_preflight_file;
115 + $wpbc_booking_modes_v3_result = wpbc_booking_modes_v3_preflight();
116 +} else {
117 + $wpbc_booking_modes_v3_result['errors'][] = 'Missing or unreadable V3 component: preflight.php';
118 +}
119 +
120 +if ( ! empty( $wpbc_booking_modes_v3_result['ready'] ) ) {
121 + if ( ! defined( 'WPBC_BOOKING_MODES_ACTIVE_ENGINE' ) ) {
122 + define( 'WPBC_BOOKING_MODES_ACTIVE_ENGINE', 'v3' );
123 + }
124 + require_once WPBC_PLUGIN_DIR . '/includes/booking_modes_v3/booking_modes.php';
125 +} else {
126 + if ( ! defined( 'WPBC_BOOKING_MODES_ACTIVE_ENGINE' ) ) {
127 + define( 'WPBC_BOOKING_MODES_ACTIVE_ENGINE', 'none' );
128 + }
129 +
130 + $wpbc_booking_modes_missing_engine_errors = isset( $wpbc_booking_modes_v3_result['errors'] ) && is_array( $wpbc_booking_modes_v3_result['errors'] )
131 + ? $wpbc_booking_modes_v3_result['errors']
132 + : array();
133 + wpbc_booking_modes_register_missing_engine_diagnostic( $wpbc_booking_modes_missing_engine_errors );
134 +
135 + unset(
136 + $wpbc_booking_modes_v3_preflight_file,
137 + $wpbc_booking_modes_v3_result,
138 + $wpbc_booking_modes_missing_engine_errors
139 + );
140 + return;
141 +}
142 +
143 +unset(
144 + $wpbc_booking_modes_v3_preflight_file,
145 + $wpbc_booking_modes_v3_result
146 +);
147 +
43 148 require_once WPBC_PLUGIN_DIR . '/core/any/class-css-js.php'; // Abstract. Loading CSS & JS files = Package: Any =.
44 149 require_once WPBC_PLUGIN_DIR . '/core/any/class-admin-settings-api.php'; // Abstract. Settings API.
45 150
46 151 require_once WPBC_PLUGIN_DIR . '/includes/ui_settings/class-settings-page-parts.php'; // Settings Template - "Settins Parts", which used in the class-page-structure.php .
@@ -46,9 +151,8 @@
46 151 require_once WPBC_PLUGIN_DIR . '/includes/ui_settings/class-settings-page-parts.php'; // Settings Template - "Settins Parts", which used in the class-page-structure.php .
47 152 require_once WPBC_PLUGIN_DIR . '/includes/ui_settings/class-menu-structure.php'; // Abstract. Page Structure in Admin Panel // 2025-02-09.
48 153 require_once WPBC_PLUGIN_DIR . '/includes/ui_settings/class-page-structure.php'; // Abstract. Page Structure in Admin Panel // 2024-12-23.
49 154 require_once WPBC_PLUGIN_DIR . '/includes/ui_settings/class-sidebar-panels.php'; // Common right sidebar panels and collapsible groups.
50 -require_once WPBC_PLUGIN_DIR . '/includes/ui_settings/class-listing.php'; // Shared AJAX-ready administration listing shell.
51 155
52 156 // -----------------------------------------------------------------------------------------------------------------
53 157 // Booking Listing templates.
54 158 // -----------------------------------------------------------------------------------------------------------------
@@ -93,8 +197,9 @@
93 197 // =====================================================================================================================
94 198 // Functions
95 199 // =====================================================================================================================
96 200 require_once WPBC_PLUGIN_DIR . '/includes/_functions/class-wpbc-action-scheduler-compatibility.php'; // Class to Increase Memory and Time.
201 +require_once WPBC_PLUGIN_DIR . '/includes/_functions/woocommerce-compatibility.php'; // Allow public Booking Calendar AJAX requests through WooCommerce admin-access protection.
97 202 require_once WPBC_PLUGIN_DIR . '/includes/_functions/nonce_func.php'; // Nonce functions - front-end excluding.
98 203 require_once WPBC_PLUGIN_DIR . '/includes/_functions/str_regex.php'; // String and Regex functions for shortcodes.
99 204 require_once WPBC_PLUGIN_DIR . '/includes/_functions/is_table_exist.php'; // Is DB Tables Exists.
100 205 require_once WPBC_PLUGIN_DIR . '/includes/_functions/is_dismissed.php'; // Is Dismissed.
@@ -102,10 +207,12 @@
102 207 require_once WPBC_PLUGIN_DIR . '/includes/_functions/booking_data__get.php'; // Booking details | replace / fields functions.
103 208 require_once WPBC_PLUGIN_DIR . '/includes/_functions/simple_html_tags.php'; // Simple HTML Tags - Custom Shortcodes.
104 209 require_once WPBC_PLUGIN_DIR . '/includes/_functions/admin_menu_url.php'; // Admin Menu Pages & URLs.
105 210 require_once WPBC_PLUGIN_DIR . '/includes/_functions/admin_top_bar.php'; // Admin Top Bar.
211 +require_once WPBC_PLUGIN_DIR . '/includes/_functions/admin-cost-correction.php'; // Shared Add Booking and Add Appointment exact-total control.
106 212 require_once WPBC_PLUGIN_DIR . '/includes/_functions/news_version.php'; // News, Version.
107 213 require_once WPBC_PLUGIN_DIR . '/includes/_functions/versions.php'; // Versions.
214 +require_once WPBC_PLUGIN_DIR . '/includes/_functions/booking-resources-catalog-compatibility.php'; // Temporary 11.6 Resources catalog compatibility.
108 215 require_once WPBC_PLUGIN_DIR . '/includes/_functions/sanitizing.php'; // Sanitizing.
109 216 require_once WPBC_PLUGIN_DIR . '/includes/_functions/request.php'; // Class for sanitizing $_REQUEST parameters and saving or getting it from DB // FixIn: 9.3.1.2.
110 217 require_once WPBC_PLUGIN_DIR . '/includes/_functions/city_list.php'; // City list.
111 218 require_once WPBC_PLUGIN_DIR . '/includes/save-user-meta/save-user-meta.php'; // Saving custom user data.
@@ -113,8 +220,9 @@
113 220 require_once WPBC_PLUGIN_DIR . '/includes/_functions/calendar_scripts.php'; // Calendar Scripts.
114 221
115 222 require_once WPBC_PLUGIN_DIR . '/core/wpbc_functions.php'; // Functions.
116 223 require_once WPBC_PLUGIN_DIR . '/core/wpbc_functions_dates.php'; // Function Dates New in 9.8.
224 +require_once WPBC_PLUGIN_DIR . '/includes/_front_end/class-fe-booking-context.php'; // Signed native Booking Form context for AJAX availability and booking requests.
117 225 require_once WPBC_PLUGIN_DIR . '/core/form_parser.php'; // Parser for booking form New in 9.8.
118 226 require_once WPBC_PLUGIN_DIR . '/core/wpbc-dates.php'; // Dates.
119 227 require_once WPBC_PLUGIN_DIR . '/includes/_front_end/date-hints.php'; // Front-end date hints for Free. // FixIn: 10.15.6.2.
120 228 require_once WPBC_PLUGIN_DIR . '/core/wpbc_welcome.php'; // Welcome Panel Functions.
@@ -160,9 +268,12 @@
160 268 }
161 269
162 270 require_once WPBC_PLUGIN_DIR . '/core/wpbc-frontend-messages.php'; // Visitor-facing form messages and multilingual overrides.
163 271
272 +require_once WPBC_PLUGIN_DIR . '/includes/publish/class-wpbc-booking-form-publisher.php'; // Neutral Booking Form page publishing service.
164 273 require_once WPBC_PLUGIN_DIR . '/includes/publish/wpbc-create-pages.php'; // Create pages for different purposes // FixIn: 9.6.2.10.
274 +require_once WPBC_PLUGIN_DIR . '/includes/publish/class-wpbc-booking-form-publish-ajax.php'; // Authorized AJAX publishing endpoint.
275 +require_once WPBC_PLUGIN_DIR . '/includes/publish/class-wpbc-booking-form-publish-modal.php'; // Shared native publishing modal.
165 276 require_once WPBC_PLUGIN_DIR . '/includes/publish/wpbc-publish-shortcode.php'; // Publish Booking Calendar shortcodes into the Pages // FixIn: 9.8.15.5.
166 277 require_once WPBC_PLUGIN_DIR . '/core/wpbc-emails.php'; // Emails.
167 278 // JS & CSS.
168 279 require_once WPBC_PLUGIN_DIR . '/core/wpbc-css.php'; // Load CSS.
@@ -218,23 +329,44 @@
218 329 require_once WPBC_PLUGIN_DIR . '/includes/page-availability-timeslots/availability_timeslots__activate.php';
219 330 require_once WPBC_PLUGIN_DIR . '/includes/page-availability-timeslots/ajax/availability_timeslots__save.php';
220 331 require_once WPBC_PLUGIN_DIR . '/includes/page-availability-timeslots/availability_timeslots__page.php';
221 332
222 -if ( wpbc_is_11_5_features_enabled() ) {
223 - // WP Booking Calendar > Services and Appointment details.
224 - require_once WPBC_PLUGIN_DIR . '/includes/page-appointment-services/appointment_services__activate.php';
225 - require_once WPBC_PLUGIN_DIR . '/includes/page-appointment-services/appointment_services__functions.php';
226 - require_once WPBC_PLUGIN_DIR . '/includes/page-appointment-services/repository/appointment_services__repository.php';
227 - require_once WPBC_PLUGIN_DIR . '/includes/page-appointment-services/appointment_services__booking.php';
228 - require_once WPBC_PLUGIN_DIR . '/includes/page-appointment-services/appointment_services__ui.php';
229 - require_once WPBC_PLUGIN_DIR . '/includes/page-appointment-services/ajax/appointment_services__list.php';
230 - require_once WPBC_PLUGIN_DIR . '/includes/page-appointment-services/ajax/appointment_services__load.php';
231 - require_once WPBC_PLUGIN_DIR . '/includes/page-appointment-services/ajax/appointment_services__save.php';
232 - require_once WPBC_PLUGIN_DIR . '/includes/page-appointment-services/ajax/appointment_services__duplicate.php';
233 - require_once WPBC_PLUGIN_DIR . '/includes/page-appointment-services/ajax/appointment_services__archive.php';
234 - require_once WPBC_PLUGIN_DIR . '/includes/page-appointment-services/appointment_services__page.php';
333 +if ( wpbc_is_11_6_features_enabled() ) {
334 + // Edition-neutral Booking Resource identity and presentation storage.
335 + require_once WPBC_PLUGIN_DIR . '/includes/booking-resources/class-wpbc-booking-resource-content-repository.php';
235 336 }
236 337
338 +// Domain-neutral template-driven catalog mechanics shared by all registered catalogs.
339 +require_once WPBC_PLUGIN_DIR . '/includes/_shared-ui-catalog/wpbc-ui-catalog.php';
340 +
341 +if ( wpbc_is_11_6_features_enabled() ) {
342 + // Independent template-driven Booking Resources catalog.
343 + require_once WPBC_PLUGIN_DIR . '/includes/page-catalog-booking-resources/booking-resources-catalog.php';
344 +}
345 +
346 +// WP Booking Calendar > Services and Appointment details.
347 +require_once WPBC_PLUGIN_DIR . '/includes/page-appointment-services/appointment_services__activate.php';
348 +require_once WPBC_PLUGIN_DIR . '/includes/page-appointment-services/appointment_services__functions.php';
349 +require_once WPBC_PLUGIN_DIR . '/includes/page-appointment-services/repository/appointment_services__repository.php';
350 +require_once WPBC_PLUGIN_DIR . '/includes/page-appointment-services/catalog/class-wpbc-appointment-services-catalog-request.php';
351 +require_once WPBC_PLUGIN_DIR . '/includes/page-appointment-services/catalog/class-wpbc-appointment-service-catalog-dto.php';
352 +require_once WPBC_PLUGIN_DIR . '/includes/page-appointment-services/catalog/class-wpbc-appointment-services-catalog-provider.php';
353 +require_once WPBC_PLUGIN_DIR . '/includes/page-appointment-services/catalog/appointment-services-catalog-config.php';
354 +require_once WPBC_PLUGIN_DIR . '/includes/page-appointment-services/catalog/appointment-services-catalog.php';
355 +require_once WPBC_PLUGIN_DIR . '/includes/page-appointment-services/class-wpbc-catalog-inline-fields.php';
356 +require_once WPBC_PLUGIN_DIR . '/includes/page-appointment-services/mutations/class-wpbc-appointment-services-catalog-editor.php';
357 +require_once WPBC_PLUGIN_DIR . '/includes/page-appointment-services/mutations/class-wpbc-appointment-services-catalog-deleter.php';
358 +require_once WPBC_PLUGIN_DIR . '/includes/page-appointment-services/appointment_services__booking.php';
359 +require_once WPBC_PLUGIN_DIR . '/includes/page-appointment-services/appointment_services__ui.php';
360 +require_once WPBC_PLUGIN_DIR . '/includes/page-appointment-services/ajax/appointment_services__list.php';
361 +require_once WPBC_PLUGIN_DIR . '/includes/page-appointment-services/ajax/appointment_services__load.php';
362 +require_once WPBC_PLUGIN_DIR . '/includes/page-appointment-services/ajax/appointment_services__save.php';
363 +require_once WPBC_PLUGIN_DIR . '/includes/page-appointment-services/ajax/appointment_services__duplicate.php';
364 +require_once WPBC_PLUGIN_DIR . '/includes/page-appointment-services/ajax/appointment_services__archive.php';
365 +require_once WPBC_PLUGIN_DIR . '/includes/page-appointment-services/ajax/appointment_services__catalog_edit.php';
366 +require_once WPBC_PLUGIN_DIR . '/includes/page-appointment-services/ajax/appointment_services__delete.php';
367 +require_once WPBC_PLUGIN_DIR . '/includes/page-appointment-services/appointment_services__page.php';
368 +
237 369 require_once WPBC_PLUGIN_DIR . '/includes/page-form-builder/bfb-include.php'; // Booking Form Builder - @since: 11.0.0.
238 370 require_once WPBC_PLUGIN_DIR . '/includes/page-form-builder/form-render/class-wpbc-bfb-form-shortcode-engine.php'; // New Shortcode Parsers and Form Render. 11.0.1.
239 371 require_once WPBC_PLUGIN_DIR . '/includes/page-form-builder/form-render/bfb-form-render.php';
240 372
@@ -309,17 +441,16 @@
309 441 require_once WPBC_PLUGIN_DIR . '/includes/_front_end/hooks/class-fe-bfb-settings-hooks.php'; // Apply BFB settings to rendered booking form HTML.
310 442 require_once WPBC_PLUGIN_DIR . '/includes/_front_end/class-fe-render-form-body.php';
311 443 require_once WPBC_PLUGIN_DIR . '/includes/_custom_forms/class-custom-forms-helper.php'; // Custom forms Helpers.
312 444
313 -if ( wpbc_is_11_5_features_enabled() ) {
314 - // Service-first, AJAX Appointment booking shortcode built on the existing resource-bound renderer.
315 - require_once WPBC_PLUGIN_DIR . '/includes/booking-appointment/booking-appointment.php';
316 - // Resource-first, AJAX booking shortcode built on the same native resource-bound renderer.
317 - require_once WPBC_PLUGIN_DIR . '/includes/booking-resource-selector/booking-resource-selector.php';
318 - // Dedicated administrator workflow built on the same Appointment controller.
319 - require_once WPBC_PLUGIN_DIR . '/includes/page-add-appointment/add_appointment__page.php';
320 -}
445 +// Service-first, AJAX Appointment booking shortcode built on the existing resource-bound renderer.
446 +require_once WPBC_PLUGIN_DIR . '/includes/booking-appointment/booking-appointment.php';
447 +// Dedicated administrator workflow built on the same Appointment controller.
448 +require_once WPBC_PLUGIN_DIR . '/includes/page-add-appointment/add_appointment__page.php';
321 449
450 +// Resource-first public workflow with a shared frontend catalog boundary.
451 +require_once WPBC_PLUGIN_DIR . '/includes/booking-resource-selector/booking-resource-selector.php';
452 +
322 453 require_once WPBC_PLUGIN_DIR . '/core/lib/wpdev-booking-class.php'; // C L A S S B o o k i n g.
323 454 require_once WPBC_PLUGIN_DIR . '/core/lib/wpbc-booking-new.php'; // N e w.
324 455 require_once WPBC_PLUGIN_DIR . '/core/lib/wpbc-cron.php'; // CRON @since: 5.2.0.
325 456
@@ -345,8 +476,15 @@
345 476 require_once WPBC_PLUGIN_DIR . '/core/any/activation.php';
346 477 require_once WPBC_PLUGIN_DIR . '/core/wpbc-activation.php';
347 478
348 479 require_once WPBC_PLUGIN_DIR . '/core/wpbc-dev-api.php'; // API for Booking Calendar integrations.
480 +
481 +// Development-only tests are disabled when the removable _tests bootstrap is unavailable.
482 +$wpbc_tests_bootstrap_file = WPBC_PLUGIN_DIR . '/_tests/wpbc-tests.php';
483 +if ( is_admin() && is_readable( $wpbc_tests_bootstrap_file ) ) {
484 + require_once $wpbc_tests_bootstrap_file;
485 +}
486 +unset( $wpbc_tests_bootstrap_file );
349 487
350 488 wpbc_prevent_incompatible_pro_version_loading();
351 489
352 490 make_bk_action( 'wpbc_loaded_php_files' );