PluginProbe
Booking Calendar / 11.9
Booking Calendar v11.9
11.9 11.8.4 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 All 205 releases
booking / core / admin / page-settings.php

page-settings.php in Booking Calendar 11.9, at core/admin/page-settings.php

915 lines 48.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php /**
2 * @version 1.0
3 * @package Booking Calendar
4 * @category Content of Settings page
5 * @author wpdevelop
6 *
7 * @web-site https://wpbookingcalendar.com/
8 * @email [email protected]
9 *
10 * @modified 2015-11-02
11 */
12
13 if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
14
15
16 /**
17 * Show Content
18 * Update Content
19 * Define Slug
20 * Define where to show
21 */
22 class WPBC_Page_SettingsGeneral extends WPBC_Page_Structure {
23
24 /**
25 * Link to Settings API obj
26 *
27 * @var bool
28 */
29 private $settings_api = false;
30
31 public function __construct() {
32 $this->normalize_legacy_settings_request();
33
34 if ( ! wpbc_is_mu_user_can_be_here( 'only_super_admin' ) ) { // If this User not "super admin", then do not load this page at all
35 // If tab was not selected or selected default, then redirect it to the "form" tab.
36 // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.NonceVerification.Missing
37 if ( ( isset( $_REQUEST['page'] ) && ( 'wpbc-settings' === $_REQUEST['page'] ) ) && ( ( ! isset( $_REQUEST['tab'] ) ) || ( 'general' === $_REQUEST['tab'] ) ) ) {
38 $_REQUEST['tab'] = 'form';
39 }
40 } else {
41 parent::__construct();
42 }
43 }
44
45 /**
46 * Route settings links for sections that were moved into the Advanced group.
47 *
48 * Existing bookmarks and integrations can continue using the former Admin
49 * Panel group and the previous Manage Bookings location of the front-end
50 * Timeline settings. Subtab identifiers remain unchanged.
51 *
52 * @return void
53 */
54 private function normalize_legacy_settings_request() {
55 $request_page = isset( $_REQUEST['page'] ) && is_scalar( $_REQUEST['page'] )
56 ? sanitize_key( (string) wp_unslash( $_REQUEST['page'] ) )
57 : ''; // phpcs:ignore WordPress.Security.NonceVerification.Recommended
58 $request_tab = isset( $_REQUEST['tab'] ) && is_scalar( $_REQUEST['tab'] )
59 ? sanitize_key( (string) wp_unslash( $_REQUEST['tab'] ) )
60 : ''; // phpcs:ignore WordPress.Security.NonceVerification.Recommended
61 $request_subtab = isset( $_REQUEST['subtab'] ) && is_scalar( $_REQUEST['subtab'] )
62 ? sanitize_key( (string) wp_unslash( $_REQUEST['subtab'] ) )
63 : ''; // phpcs:ignore WordPress.Security.NonceVerification.Recommended
64
65 $is_legacy_admin_panel = 'admin_panel' === $request_tab;
66 $is_legacy_timeline = 'manage_bookings' === $request_tab && 'booking_timeline' === $request_subtab;
67
68 if ( 'wpbc-settings' !== $request_page || ( ! $is_legacy_admin_panel && ! $is_legacy_timeline ) ) {
69 return;
70 }
71
72 $_REQUEST['tab'] = 'advanced'; // phpcs:ignore WordPress.Security.NonceVerification.Recommended
73 if ( isset( $_GET['tab'] ) ) {
74 $_GET['tab'] = 'advanced'; // phpcs:ignore WordPress.Security.NonceVerification.Recommended
75 }
76 }
77
78 public function in_page() {
79
80 if ( ! wpbc_is_mu_user_can_be_here( 'only_super_admin' ) ) { // If this User not "super admin", then do not load this page at all.
81 return (string) wp_rand( 100000, 1000000 );
82 }
83
84 return 'wpbc-settings';
85 }
86
87
88 /**
89 * Get Settings API class - define, show, update "Fields".
90 *
91 * @return object Settings API
92 */
93 public function settings_api() {
94
95 if ( false === $this->settings_api ) {
96 $this->settings_api = new WPBC_Settings_API_General();
97 }
98
99 return $this->settings_api;
100 }
101
102
103 public function tabs() {
104
105 // Init vars.
106 $separator_i = 0;
107 $tabs = array();
108 $subtab_default = array(
109 'type' => 'subtab', // Required| Possible values: 'subtab' | 'separator' | 'button' | 'goto-link' | 'html'.
110 'title' => '',
111 'page_title' => '',
112 'hint' => '',
113 'link' => '',
114 'css_classes' => '',
115 'font_icon' => 'wpbc_icn_dashboard',
116 'font_icon_right' => 'wpbc-bi-question-circle',
117 'default' => false,
118 );
119
120 // =============================================================================================================
121 // == D A S H B O A R D ==
122 // =============================================================================================================
123 $tabs['general'] = array(
124 'is_show_top_path' => true, // true | false. By default value is: false.
125 'is_show_top_navigation' => false, // true | false. By default value is: false.
126 'left_navigation__default_view_mode' => '', // '' | 'min' | 'compact' | 'max' | 'none'. By default value is: ''.
127 'page_title' => __( 'General Settings', 'booking' ), // Header - Title. If false, than hidden.
128 // translators: 1: Booking Calendar.
129 'page_description' => sprintf( __( 'Configure various options and settings in the %s.', 'booking' ), 'Booking Calendar' ),
130 'title' => __( 'Dashboard', 'booking' ), // Left Vertical Menu - Title.
131 // translators: 1: Booking Calendar.
132 'hint' => sprintf( __( 'Configure various options and settings in the %s.', 'booking' ), 'Booking Calendar' ),
133 'link' => '', // Can be skiped, then generated link based on Page and Tab tags. Or can be extenral link.
134 'default' => true, // Is this tab activated by default or not: true / false.
135 'font_icon' => 'wpbc-bi-speedometer2',
136 // 'font_icon_right' => 'wpbc-bi-question-circle',
137 'css_classes' => 'do_expand__' . 'wpbc_general_settings_dashboard_metabox' . '_link',
138 'onclick' => "wpbc_admin_ui__do__open_url__expand_section( '" . wpbc_get_settings_url() . "', '" . 'wpbc_general_settings_dashboard_metabox' . "' );",
139 'folder_style' => 'order:10;',
140 );
141 // FixIn: 10.12.4.7. $tabs[ 'settings' . ( ++$separator_i ) ] = array_merge( $subtab_default, array( 'type' => 'separator' ,'folder_style' => 'order:10;' ) );
142
143
144 // =============================================================================================================
145 // == C O N F I R M A T I ON ==
146 // =============================================================================================================
147 $tabs['booking_confirmation'] = array(
148 'is_show_top_path' => true, // true | false. By default value is: true.
149 'is_show_top_navigation' => false, // true | false. By default value is: false.
150 'left_navigation__default_view_mode' => '', // '' | 'min' | 'compact' | 'max' | 'none'. By default value is: ''.
151 'page_title' => __( 'General Settings', 'booking' ), // Header - Title. If false, than hidden.
152 // translators: 1: Booking Calendar.
153 'page_description' => sprintf( __( 'Configure various options and settings in the %s.', 'booking' ), 'Booking Calendar' ),
154 'title' => __( 'Booking Confirmation', 'booking' ), // Left Vertical Menu - Title.
155 'hint' => __( 'Customize how the booking summary is displayed after a booking is created', 'booking' ),
156 'link' => '', // Can be skiped, then generated link based on Page and Tab tags. Or can be extenral link.
157 'default' => false, // Is this tab activated by default or not: true / false.
158 'font_icon' => 'wpbc-bi-card-checklist',
159 'font_icon_right' => 'wpbc-bi-question-circle',
160 'css_classes' => 'do_expand__' . 'wpbc_general_settings_booking_confirmation_metabox' . '_link',
161 'onclick' => "wpbc_admin_ui__do__open_url__expand_section( '" . wpbc_get_settings_url() . "', '" .
162 'wpbc_general_settings_booking_confirmation_metabox#wpbc_general_settings_booking_confirmation_left_metabox#wpbc_general_settings_booking_confirmation_right_metabox#wpbc_general_settings_booking_confirmation_help_metabox' .
163 "' );",
164 'folder_style' => 'order:20;',
165 );
166
167 // FixIn: 10.12.4.7. $tabs[ 'settings' . ( ++$separator_i ) ] = array_merge( $subtab_default, array( 'type' => 'separator' ,'folder_style' => 'order:20;' ) );
168
169 // =============================================================================================================
170 // == Manage Bookings ==
171 // =============================================================================================================
172 $tabs['manage_bookings'] = array(
173 'is_show_top_path' => true, // true | false. By default value is: true.
174 'is_show_top_navigation' => false, // true | false. By default value is: false.
175 'left_navigation__default_view_mode' => '', // '' | 'min' | 'compact' | 'max' | 'none'. By default value is: ''.
176 'page_title' => __( 'General Settings', 'booking' ), // Header - Title. If false, than hidden.
177 // translators: 1: Booking Calendar.
178 'page_description' => sprintf( __( 'Configure various options and settings in the %s.', 'booking' ), 'Booking Calendar' ),
179 'title' => __( 'Manage Bookings', 'booking' ), // Left Vertical Menu - Title.
180 // translators: 1: Booking Calendar.
181 'hint' => sprintf( __( 'Configure various options and settings in the %s.', 'booking' ), 'Booking Calendar' ),
182 'font_icon' => 'wpbc_icn_app_registration', // Left Vertical Menu - Icon.
183 'link' => '', // Can be skiped, then generated link based on Page and Tab tags. Or can be extenral link.
184 'css_classes' => '', // CSS.
185 'icon' => '', // Icon - link to the real PNG img.
186 'default' => false, // Is this tab activated by default or not: true / false.
187 'folder_style' => 'order:1000',
188 );
189
190 $subtabs = array();
191
192 $section_id = 'wpbc_general_settings_booking_timeline_metabox';
193 $booking_timeline_subtab = array_merge(
194 $subtab_default,
195 array(
196 'title' => __( 'Timeline (front-end)', 'booking' ),
197 'page_title' => __( 'General Settings', 'booking' ),
198 'hint' => __( 'Customize timeline options, including the display of booking details.', 'booking' ),
199 'font_icon' => 'wpbc_icn_align_vertical_bottom wpbc_icn_rotate_90',
200 'font_icon_right' => 'wpbc-bi-question-circle',
201 'css_classes' => 'do_expand__' . $section_id . '_link ',
202 'onclick' => "wpbc_admin_ui__do__open_url__expand_section( '" . wpbc_get_settings_url() . "', '" . $section_id . "' );",
203 'default' => false,
204 )
205 );
206
207 if ( class_exists('wpdev_bk_personal') ) {
208 $section_id = 'wpbc_general_settings_bookings_options_metabox';
209 $subtabs['bookings_options'] = array_merge(
210 $subtab_default,
211 array(
212 'title' => __( 'Manage Bookings', 'booking' ),
213 'page_title' => __( 'General Settings', 'booking' ),
214 'hint' => __( 'Allow customers to edit or cancel their own bookings.', 'booking' ),
215 'font_icon' => 'wpbc_icn_app_registration mode_edit_outline edit_calendar',
216 'font_icon_right' => 'wpbc-bi-question-circle',
217 'css_classes' => 'do_expand__' . $section_id . '_link ',
218 'onclick' => "wpbc_admin_ui__do__open_url__expand_section( '" . wpbc_get_settings_url() . "', '" . $section_id . "' );",
219 'default' => false,
220 )
221 );
222 }
223
224
225 if ( class_exists('wpdev_bk_biz_s') ) {
226 $section_id = 'wpbc_general_settings_auto_cancelation_approval_metabox';
227 $subtabs['auto_cancelation_approval'] = array_merge(
228 $subtab_default,
229 array(
230 'title' => __( 'Auto Cancellation / Auto Approval', 'booking' ),
231 'page_title' => __( 'General Settings', 'booking' ),
232 'hint' => __( 'Enable automatic approval or cancellation of bookings.', 'booking' ),
233 'font_icon' => 'wpbc_icn_published_with_changes',
234 'font_icon_right' => 'wpbc-bi-question-circle',
235 'css_classes' => 'do_expand__' . $section_id . '_link',
236 'onclick' => "wpbc_admin_ui__do__open_url__expand_section( '" . wpbc_get_settings_url() . "', '" . $section_id . "' );",
237 'default' => false,
238 )
239 );
240 }
241
242 $tabs['manage_bookings']['subtabs'] = $subtabs;
243
244
245 // =============================================================================================================
246 // == Admin Panel ==
247 // =============================================================================================================
248 $tabs['admin_panel'] = array(
249 'is_show_top_path' => true, // true | false. By default value is: true.
250 'is_show_top_navigation' => false, // true | false. By default value is: false.
251 'left_navigation__default_view_mode' => '', // '' | 'min' | 'compact' | 'max' | 'none'. By default value is: ''.
252 'page_title' => __( 'General Settings', 'booking' ), // Header - Title. If false, than hidden.
253 'page_description' => __( 'Configure various options and settings in the admin panel.', 'booking' ), // Header - Title Description. If false, than hidden.
254 'title' => __( 'Admin Panel', 'booking' ), // Left Vertical Menu - Title.
255 // translators: 1: Booking Calendar.
256 'hint' => sprintf( __( 'Configure various options and settings in the %s.', 'booking' ), 'Booking Calendar' ),
257 'font_icon' => 'wpbc_icn_widgets', // Left Vertical Menu - Icon.
258 'link' => '', // Can be skiped, then generated link based on Page and Tab tags. Or can be extenral link.
259 'css_classes' => '', // CSS.
260 'icon' => '', // Icon - link to the real PNG img.
261 'default' => false, // Is this tab activated by default or not: true / false.
262 'folder_style' => 'order:1000',
263 );
264
265 $subtabs = array();
266
267 $section_id = 'wpbc_general_settings_booking_listing_metabox';
268 $subtabs['booking_listing'] = array_merge(
269 $subtab_default,
270 array(
271 'title' => __( 'Booking Admin Panel', 'booking' ),
272 'page_title' => __( 'General Settings', 'booking' ),
273 'hint' => __( 'Configure various options and settings in the admin panel.', 'booking' ),
274 'font_icon' => 'wpbc-bi-list',
275 'font_icon_right' => 'wpbc-bi-question-circle',
276 'css_classes' => 'do_expand__' . $section_id . '_link',
277 'onclick' => "wpbc_admin_ui__do__open_url__expand_section( '" . wpbc_get_settings_url() . "', '" . $section_id . "' );",
278 'default' => false,
279 )
280 );
281
282 $section_id = 'wpbc_general_settings_booking_calendar_overview_metabox';
283 $subtabs['booking_calendar_overview'] = array_merge(
284 $subtab_default,
285 array(
286 'title' => __( 'Timeline View (Back-End)', 'booking' ),
287 'page_title' => __( 'General Settings', 'booking' ),
288 'hint' => __( 'Customize timeline options in the admin panel, including displaying booking details.', 'booking' ),
289 'font_icon' => 'wpbc-bi-bar-chart-steps _icn_timeline 0wpbc_icn_rotate_45 0wpbc_icn_align_vertical_bottom',
290 'font_icon_right' => 'wpbc-bi-question-circle',
291 'css_classes' => 'do_expand__' . $section_id . '_link',
292 'onclick' => "wpbc_admin_ui__do__open_url__expand_section( '" . wpbc_get_settings_url() . "', '" . $section_id . "' );",
293 'default' => false,
294 )
295 );
296
297 $subtabs['booking_timeline'] = $booking_timeline_subtab;
298
299 $section_id = 'wpbc_general_settings_datestimes_metabox';
300 $subtabs['datestimes'] = array_merge(
301 $subtab_default,
302 array(
303 'title' => __( 'Date and Time Formats', 'booking' ),
304 'page_title' => __( 'General Settings', 'booking' ),
305 'hint' => __( 'Customize the display format for dates and times.', 'booking' ),
306 'font_icon' => 'wpbc-bi-braces-asterisk _icn_password',
307 'font_icon_right' => 'wpbc-bi-question-circle',
308 'css_classes' => 'do_expand__' . $section_id . '_link',
309 'onclick' => "wpbc_admin_ui__do__open_url__expand_section( '" . wpbc_get_settings_url() . "', '" . $section_id . "' );",
310 'default' => false,
311 )
312 );
313
314 $section_id = 'wpbc_general_settings_permissions_metabox';
315 $subtabs['permissions'] = array_merge(
316 $subtab_default,
317 array(
318 'title' => __( 'Plugin Menu / Permissions', 'booking' ),
319 'page_title' => __( 'General Settings', 'booking' ),
320 'hint' => __( 'Set user permissions for accessing plugin menu pages and configure the menu position.', 'booking' ),
321 'font_icon' => 'wpbc-bi-key',
322 'font_icon_right' => 'wpbc-bi-question-circle',
323 'css_classes' => 'do_expand__' . $section_id . '_link',
324 'onclick' => "wpbc_admin_ui__do__open_url__expand_section( '" . wpbc_get_settings_url() . "', '" . $section_id . "' );",
325 'default' => false,
326 )
327 );
328
329 $section_id = 'wpbc_general_settings_translations_metabox';
330 $subtabs['translations'] = array_merge(
331 $subtab_default,
332 array(
333 'title' => __( 'Translations', 'booking' ),
334 'page_title' => __( 'General Settings', 'booking' ),
335 'hint' => __( 'Choose whether to use local translations or WordPress translations.', 'booking' ),
336 'font_icon' => 'wpbc_icn_translate 0wpbc-bi-translate',
337 'font_icon_right' => 'wpbc-bi-question-circle',
338 'css_classes' => 'do_expand__' . $section_id . '_link',
339 'onclick' => "wpbc_admin_ui__do__open_url__expand_section( '" . wpbc_get_settings_url() . "', '" . $section_id . "' );",
340 'default' => false,
341 )
342 );
343
344 $tabs['admin_panel']['subtabs'] = $subtabs;
345 $admin_panel_subtabs = $subtabs;
346 unset( $tabs['admin_panel'] );
347
348
349 // =============================================================================================================
350 // == Advanced ==
351 // =============================================================================================================
352 $tabs['advanced'] = array(
353 'is_show_top_path' => true, // true | false. By default value is: true.
354 'is_show_top_navigation' => false, // true | false. By default value is: false.
355 'left_navigation__default_view_mode' => '', // '' | 'min' | 'compact' | 'max' | 'none'. By default value is: ''.
356 'page_title' => __( 'General Settings', 'booking' ), // Header - Title. If false, than hidden.
357 // translators: 1: Booking Calendar.
358 'page_description' => sprintf( __( 'Configure various options and settings in the %s.', 'booking' ), 'Booking Calendar' ),
359 'title' => __( 'Advanced', 'booking' ), // Left Vertical Menu - Title.
360 // translators: 1: Booking Calendar.
361 'hint' => sprintf( __( 'Configure various options and settings in the %s.', 'booking' ), 'Booking Calendar' ),
362 'font_icon' => 'wpbc-bi-gear', // Left Vertical Menu - Icon.
363 'link' => '', // Can be skiped, then generated link based on Page and Tab tags. Or can be extenral link.
364 'css_classes' => '', // CSS.
365 'icon' => '', // Icon - link to the real PNG img.
366 'default' => false, // Is this tab activated by default or not: true / false.
367 'folder_style' => 'order:1000',
368 );
369
370 $subtabs = array();
371
372 $section_id = 'wpbc_general_settings_advanced_metabox';
373 $subtabs['advanced_options'] = array_merge(
374 $subtab_default,
375 array(
376 'title' => __( 'Advanced Options', 'booking' ),
377 'page_title' => __( 'General Settings', 'booking' ),
378 'hint' => __( 'Configure loading of CSS/JavaScript files, set the number of simultaneous requests, and other advanced options.', 'booking' ),
379 'font_icon' => 'wpbc_icn_adjust',
380 'font_icon_right' => 'wpbc-bi-question-circle',
381 'css_classes' => 'do_expand__' . $section_id . '_link',
382 'onclick' => "wpbc_admin_ui__do__open_url__expand_section( '" . wpbc_get_settings_url() . "', '" . $section_id . "' );",
383 'default' => false,
384 )
385 );
386
387 $section_id = 'wpbc_general_settings_uninstall_metabox';
388 $subtabs['uninstall'] = array_merge(
389 $subtab_default,
390 array(
391 'title' => __( 'Uninstall / Deactivation', 'booking' ),
392 'page_title' => __( 'General Settings', 'booking' ),
393 'hint' => __( 'Enable the option to fully erase booking data when the plugin is deactivated.', 'booking' ),
394 'font_icon' => 'wpbc-bi-trash',
395 'font_icon_right' => 'wpbc-bi-question-circle',
396 'css_classes' => 'do_expand__' . $section_id . '_link',
397 'onclick' => "wpbc_admin_ui__do__open_url__expand_section( '" . wpbc_get_settings_url() . "', '" . $section_id . "' );",
398 'default' => false,
399 )
400 );
401
402 $section_id = 'wpbc_general_settings_information_metabox';
403 $subtabs['information'] = array_merge(
404 $subtab_default,
405 array(
406 'title' => __( 'Plugin Info & News', 'booking' ),
407 'page_title' => __( 'General Settings', 'booking' ),
408 'hint' => __( 'Stay informed with the latest news and details about the plugin.', 'booking' ),
409 'font_icon' => 'wpbc_icn_newspaper -bi-newspaper _icn_news 0wpbc-bi-translate',
410 'font_icon_right' => 'wpbc-bi-question-circle',
411 'css_classes' => 'do_expand__' . $section_id . '_link',
412 'onclick' => "wpbc_admin_ui__do__open_url__expand_section( '" . wpbc_get_settings_url() . "', '" . $section_id . "' );",
413 'default' => false,
414 )
415 );
416
417 $section_id = 'wpbc_general_settings_help_metabox';
418 $subtabs['tools'] = array_merge(
419 $subtab_default,
420 array(
421 'title' => __( 'Tools', 'booking' ),
422 'page_title' => __( 'General Settings', 'booking' ),
423 'hint' => '', //__( 'Stay informed with the latest news and details about the plugin. ', 'booking' ),
424 'font_icon' => 'wpbc_icn_construction',
425 'font_icon_right' => '',
426 'css_classes' => 'do_expand__' . $section_id . '_link',
427 'onclick' => "wpbc_admin_ui__do__open_url__expand_section( '" . wpbc_get_settings_url() . "', '" . $section_id . "' );",
428 'default' => false,
429 )
430 );
431 $tabs['advanced']['subtabs'] = array_merge( $admin_panel_subtabs, $subtabs );
432
433 // FixIn: 10.12.4.7. $tabs[ 'settings' . ( ++$separator_i ) ] = array_merge( $subtab_default, array( 'type' => 'separator' ,'folder_style' => 'order:900;' ) );
434 // $tabs[ 'settings' . ( ++$separator_i ) ] = array_merge( $subtab_default, array( 'type' => 'separator' ,'folder_style' => 'order:1000;' ) );
435
436 return $tabs;
437 }
438
439
440 public function content() {
441
442 // Checking.
443
444 do_action( 'wpbc_hook_settings_page_header', 'general_settings' ); // Define Notices Section and show some static messages, if needed.
445
446 if ( ! wpbc_is_mu_user_can_be_here( 'activated_user' ) ) {
447 return false;
448 } // Check if MU user activated, otherwise show Warning message.
449
450 if ( ! wpbc_is_mu_user_can_be_here( 'only_super_admin' ) ) {
451 return false;
452 } // User is not Super admin, so exit. Basically its was already checked at the bottom of the PHP file, just in case.
453
454 // Redirect legacy Settings > Calendar links to the dedicated Calendar settings page.
455 // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.NonceVerification.Missing
456 if ( ! empty( $_GET['scroll_to_section'] ) ) {
457 $scroll_to_section = sanitize_text_field( wp_unslash( $_GET['scroll_to_section'] ) );
458
459 if ( 'wpbc_general_settings_calendar_tab' === $scroll_to_section ) {
460 wpbc_redirect( function_exists( 'wpbc_settings_calendar__get_section_url' ) ? wpbc_settings_calendar__get_section_url( 'general' ) : admin_url( 'admin.php?page=wpbc-settings&tab=calendar_settings' ) );
461 return;
462 }
463
464 if ( 'wpbc_general_settings_days_tooltips_tab' === $scroll_to_section ) {
465 wpbc_redirect( function_exists( 'wpbc_settings_calendar__get_section_url' ) ? wpbc_settings_calendar__get_section_url( 'tooltips' ) : admin_url( 'admin.php?page=wpbc-settings&tab=calendar_settings&wpbc_calendar_section=tooltips' ) );
466 return;
467 }
468
469 if ( 'wpbc_general_settings_availability_tab' === $scroll_to_section ) {
470 wpbc_redirect( function_exists( 'wpbc_get_general_availability_url' ) ? wpbc_get_general_availability_url() : admin_url( 'admin.php?page=wpbc-availability&tab=general_availability' ) );
471 return;
472 }
473 }
474
475 $is_can = apply_bk_filter( 'recheck_version', true );
476 if ( ! $is_can ) {
477 ?>
478 <script type="text/javascript"> jQuery(document).ready(function () {
479 jQuery('.wpdvlp-sub-tabs').remove();
480 });
481 </script>
482 <?php
483 return;
484 }
485
486
487 // Init Settings API & Get Data from DB.
488 $this->settings_api(); // Define all fields and get values from DB.
489
490 // Submit .
491
492 $submit_form_name = 'wpbc_general_settings_form'; // Define form name.
493
494 // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.NonceVerification.Missing
495 if ( isset( $_POST[ 'is_form_sbmitted_' . $submit_form_name ] ) ) {
496
497 // Nonce checking {Return false if invalid, 1 if generated between, 0-12 hours ago, 2 if generated between 12-24 hours ago. }.
498 $nonce_gen_time = check_admin_referer( 'wpbc_settings_page_' . $submit_form_name ); // Its stop show anything on submiting, if its not refear to the original page.
499
500 // Save Changes .
501 $this->update();
502 }
503 // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.NonceVerification.Missing
504 if ( ! empty( $_GET['scroll_to_section'] ) ) {
505 ?>
506 <script type="text/javascript">
507 jQuery(document).ready(function () {
508 jQuery('#<?php echo esc_js( sanitize_text_field( wp_unslash( $_GET['scroll_to_section'] ) ) ); ?> a').trigger('click');
509 });
510 </script>
511 <?php
512 }
513
514 // JavaScript: Tooltips, Popover, Datepick (js & css) .
515 echo '<span class="wpdevelop">';
516 wpbc_js_for_bookings_page();
517 echo '</span>';
518
519 // TODO: 2025-05-05 update in real top path. wpbc_ui_settings__top_path();
520
521 // Content .
522 ?>
523 <div class="clear"></div>
524 <div class="wpbc_settings_flex_container">
525
526 <div class="wpbc_settings_flex_container_left" style="display:none;">
527
528 <div class="wpbc_settings_navigation_column">
529
530 <div id="wpbc_general_settings_dashboard_tab" class="wpbc_settings_navigation_item wpbc_settings_navigation_item_active">
531 <?php
532 $title = esc_attr__( 'Dashboard', 'booking' );
533 ?>
534 <a onclick="javascript:wpbc_ui_settings__panel__click( '#wpbc_general_settings_dashboard_tab a' ,'#wpbc_general_settings_dashboard_metabox', '<?php echo esc_js( $title ); ?>' );"
535 href="javascript:void(0);"><span><?php echo esc_html( $title ); ?></span></a>
536 </div>
537 <div id="wpbc_general_settings_booking_confirmation_tab" class="wpbc_settings_navigation_item">
538 <?php
539 $title = esc_attr__( 'Booking Confirmation', 'booking' );
540 ?>
541 <a onclick="javascript:wpbc_ui_settings__panel__click( '#wpbc_general_settings_booking_confirmation_tab a' ,'#wpbc_general_settings_booking_confirmation_metabox,#wpbc_general_settings_booking_confirmation_left_metabox,#wpbc_general_settings_booking_confirmation_right_metabox,#wpbc_general_settings_booking_confirmation_help_metabox', '<?php echo esc_js( $title ); ?>' );" href="javascript:void(0);"><span><?php echo esc_html( $title ); ?></span></a>
542 </div>
543
544 <?php if ( class_exists('wpdev_bk_personal') ) { ?>
545 <div id="wpbc_general_settings_bookings_options_tab" class="wpbc_settings_navigation_item wpbc_navigation_top_border">
546 <?php
547 $title = esc_attr__( 'Manage Bookings', 'booking' );
548 ?>
549 <a onclick="javascript:wpbc_ui_settings__panel__click( '#wpbc_general_settings_bookings_options_tab a' ,'#wpbc_general_settings_bookings_options_metabox', '<?php echo esc_js( $title ); ?>' );" href="javascript:void(0);"><span><?php echo esc_html( $title ); ?></span></a>
550 </div>
551 <?php } ?>
552
553 <?php if ( class_exists('wpdev_bk_biz_s') ) { ?>
554 <div id="wpbc_general_settings_auto_cancelation_approval_tab" class="wpbc_settings_navigation_item wpbc_navigation_sub_item">
555 <?php
556 $title = esc_attr__( 'Auto Cancellation / Auto Approval', 'booking' );
557 ?>
558 <a onclick="javascript:wpbc_ui_settings__panel__click( '#wpbc_general_settings_auto_cancelation_approval_tab a' ,'#wpbc_general_settings_auto_cancelation_approval_metabox', '<?php echo esc_js( $title ); ?>' );" href="javascript:void(0);"><span><?php echo esc_html( $title ); ?></span></a>
559 </div>
560 <?php } ?>
561
562
563 <div id="wpbc_general_settings_booking_listing_tab" class="wpbc_settings_navigation_item wpbc_navigation_top_border">
564 <?php
565 $title = esc_attr__( 'Admin Panel', 'booking' );
566 ?>
567 <a onclick="javascript:wpbc_ui_settings__panel__click( '#wpbc_general_settings_booking_listing_tab a' ,'#wpbc_general_settings_booking_listing_metabox', '<?php echo esc_js( $title ); ?>' );" href="javascript:void(0);"><span><?php echo esc_html( $title ); ?></span></a>
568 </div>
569 <div id="wpbc_general_settings_booking_calendar_overview_tab" class="wpbc_settings_navigation_item wpbc_navigation_sub_item">
570 <?php
571 $title = esc_attr__( 'Timeline View', 'booking' );
572 ?>
573 <a onclick="javascript:wpbc_ui_settings__panel__click( '#wpbc_general_settings_booking_calendar_overview_tab a' ,'#wpbc_general_settings_booking_calendar_overview_metabox', '<?php echo esc_js( $title ); ?>' );" href="javascript:void(0);"><span><?php echo esc_html( $title ); ?></span></a>
574 </div>
575 <div id="wpbc_general_settings_booking_timeline_tab" class="wpbc_settings_navigation_item wpbc_navigation_sub_item">
576 <?php
577 $title = esc_attr__( 'Timeline (front-end)', 'booking' );
578 ?>
579 <a onclick="javascript:wpbc_ui_settings__panel__click( '#wpbc_general_settings_booking_timeline_tab a' ,'#wpbc_general_settings_booking_timeline_metabox', '<?php echo esc_js( $title ); ?>' );" href="javascript:void(0);"><span><?php echo esc_html( $title ); ?></span></a>
580 </div>
581 <div id="wpbc_general_settings_datestimes_tab" class="wpbc_settings_navigation_item wpbc_navigation_sub_item">
582 <?php
583 $title = esc_attr__( 'Date / Time Formats', 'booking' );
584 ?>
585 <a onclick="javascript:wpbc_ui_settings__panel__click( '#wpbc_general_settings_datestimes_tab a' ,'#wpbc_general_settings_datestimes_metabox', '<?php echo esc_js( $title ); ?>' );" href="javascript:void(0);"><span><?php echo esc_html( $title ); ?></span></a>
586 </div>
587 <div id="wpbc_general_settings_permissions_tab" class="wpbc_settings_navigation_item wpbc_navigation_sub_item">
588 <?php
589 $title = esc_attr__( 'Plugin Menu / Permissions', 'booking' );
590 ?>
591 <a onclick="javascript:wpbc_ui_settings__panel__click( '#wpbc_general_settings_permissions_tab a' ,'#wpbc_general_settings_permissions_metabox', '<?php echo esc_js( $title ); ?>' );" href="javascript:void(0);"><span><?php echo esc_html( $title ); ?></span></a>
592 </div>
593 <div id="wpbc_general_settings_translations_tab" class="wpbc_settings_navigation_item wpbc_navigation_sub_item">
594 <?php
595 $title = esc_attr__( 'Translations', 'booking' );
596 ?>
597 <a onclick="javascript:wpbc_ui_settings__panel__click( '#wpbc_general_settings_translations_tab a' ,'#wpbc_general_settings_translations_metabox', '<?php echo esc_js( $title ); ?>' );" href="javascript:void(0);"><span><?php echo esc_html( $title ); ?></span></a>
598 </div>
599 <div id="wpbc_general_settings_advanced_tab" class="wpbc_settings_navigation_item">
600 <?php
601 $title = esc_attr__( 'Advanced', 'booking' );
602 ?>
603 <a onclick="javascript:wpbc_ui_settings__panel__click( '#wpbc_general_settings_advanced_tab a' ,'#wpbc_general_settings_advanced_metabox', '<?php echo esc_js( $title ); ?>' );" href="javascript:void(0);"><span><?php echo esc_html( $title ); ?></span></a>
604 </div>
605 <div id="wpbc_general_settings_uninstall_tab" class="wpbc_settings_navigation_item wpbc_navigation_sub_item">
606 <?php
607 $title = esc_attr__( 'Uninstall / deactivation', 'booking' );
608 ?>
609 <a onclick="javascript:wpbc_ui_settings__panel__click( '#wpbc_general_settings_uninstall_tab a' ,'#wpbc_general_settings_uninstall_metabox', '<?php echo esc_js( $title ); ?>' );" href="javascript:void(0);"><span><?php echo esc_html( $title ); ?></span></a>
610 </div>
611 <div id="wpbc_general_settings_information_tab" class="wpbc_settings_navigation_item wpbc_navigation_sub_item">
612 <?php
613 $title = esc_attr__( 'Info / News', 'booking' );
614 ?>
615 <a onclick="javascript:wpbc_ui_settings__panel__click( '#wpbc_general_settings_information_tab a' ,'#wpbc_general_settings_information_metabox', '<?php echo esc_js( $title ); ?>' );" href="javascript:void(0);"><span><?php echo esc_html( $title ); ?></span></a>
616 </div>
617 <?php if ( ( class_exists('wpdev_bk_personal') ) && ( ! wpbc_is_this_demo() ) ) { ?>
618 <div id="wpbc_general_settings_help_tab" class="wpbc_settings_navigation_item wpbc_navigation_sub_item">
619 <?php
620 $title = esc_attr__( 'Tools', 'booking' );
621 ?>
622 <a onclick="javascript:wpbc_ui_settings__panel__click( '#wpbc_general_settings_help_tab a' ,'#wpbc_general_settings_help_metabox', '<?php echo esc_js( $title ); ?>' );" href="javascript:void(0);"><span><?php echo esc_html( $title ); ?></span></a>
623 </div>
624 <?php } ?>
625
626 <div id="wpbc_general_settings_all_tab" class="wpbc_settings_navigation_item wpbc_navigation_top_border">
627 <?php
628 $title = esc_attr__( 'Show All Settings', 'booking' );
629 ?>
630 <a onclick="javascript:wpbc_ui_settings__panel__click( '#wpbc_general_settings_all_tab a' ,'.postbox', '<?php echo esc_js( $title ); ?>' );"
631 href="javascript:void(0);"><span><?php echo esc_html( $title ); ?></span></a>
632 </div>
633
634 </div>
635
636 </div>
637 <div class="wpbc_settings_flex_container_right">
638
639 <span class="metabox-holder">
640 <form name="<?php echo esc_attr( $submit_form_name ); ?>" id="<?php echo esc_attr( $submit_form_name ); ?>" action="" method="post">
641 <?php
642 // N o n c e field, and key for checking S u b m i t.
643 wp_nonce_field( 'wpbc_settings_page_' . $submit_form_name );
644 ?>
645 <input type="hidden" name="is_form_sbmitted_<?php echo esc_attr( $submit_form_name ); ?>" id="is_form_sbmitted_<?php echo esc_attr( $submit_form_name ); ?>" value="1"/>
646 <input type="hidden" name="form_visible_section" id="form_visible_section" value=""/>
647
648 <?php
649 if ( wpbc_is_show_general_setting_options() ) {
650 // FixIn: 8.9.4.11.
651 ?>
652
653 <div class="wpbc_settings_row wpbc_settings_row_full_width" >
654
655 <div id="wpbc_general_settings_dashboard_metabox" class="postbox"
656 style="background: transparent;border: 0;box-shadow: none;"><?php //wpbc_open_meta_box_section( 'wpbc_general_settings_dashboard', __('Dashboard'), array( 'is_section_visible_after_load' => true, 'is_show_minimize' => false ) ); ?>
657 <?php
658
659 wpbc_ui_settings__panel__statistic();
660
661 wpbc_ui_settings__panel__all_settings_panels();
662
663 wpbc_ui_settings__panel__plugin_version();
664
665 ?></div><?php //wpbc_close_meta_box_section(); ?>
666
667 <?php
668 wpbc_open_meta_box_section( 'wpbc_general_settings_booking_confirmation',
669 __( 'Booking Confirmation', 'booking' ),
670 array( 'is_section_visible_after_load' => false, 'is_show_minimize' => false ) );
671 $this->settings_api()->show( 'booking_confirmation' );
672 wpbc_close_meta_box_section();
673 ?>
674 <div class="wpbc_settings_row wpbc_settings_row_left">
675 <?php
676 wpbc_open_meta_box_section( 'wpbc_general_settings_booking_confirmation_left',
677 __( 'Section', 'booking' ) . ': ' . __( 'Personal Information', 'booking' ),
678 array( 'is_section_visible_after_load' => false, 'is_show_minimize' => false ) );
679 $this->settings_api()->show( 'booking_confirmation_left' );
680 wpbc_close_meta_box_section();
681
682 wpbc_open_meta_box_section( 'wpbc_general_settings_booking_confirmation_right',
683 __( 'Section', 'booking' ) . ': ' . __( 'Booking details', 'booking' ),
684 array( 'is_section_visible_after_load' => false, 'is_show_minimize' => false ) );
685 $this->settings_api()->show( 'booking_confirmation_right' );
686 wpbc_close_meta_box_section();
687 ?>
688 </div>
689 <div class="wpbc_settings_row wpbc_settings_row_right">
690 <?php
691 wpbc_open_meta_box_section( 'wpbc_general_settings_booking_confirmation_help',
692 __( 'Shortcodes', 'booking' ),
693 array( 'is_section_visible_after_load' => false, 'is_show_minimize' => false ) );
694 $this->settings_api()->show( 'booking_confirmation_help' );
695 wpbc_close_meta_box_section();
696 ?>
697 </div>
698 <div class="clear"></div>
699
700 <?php if ( class_exists('wpdev_bk_personal') ) { ?>
701 <?php wpbc_open_meta_box_section( 'wpbc_general_settings_bookings_options', __('Bookings Options', 'booking'), array( 'is_section_visible_after_load' => false, 'is_show_minimize' => false ) ); ?>
702
703 <?php $this->settings_api()->show( 'bookings_options' ); ?>
704
705 <?php wpbc_close_meta_box_section(); ?>
706 <?php } ?>
707
708
709 <?php wpbc_open_meta_box_section( 'wpbc_general_settings_booking_listing', __('Booking Admin Panel', 'booking'), array( 'is_section_visible_after_load' => false, 'is_show_minimize' => false ) ); ?>
710
711 <?php $this->settings_api()->show( 'booking_listing' ); ?>
712
713 <?php wpbc_close_meta_box_section(); ?>
714
715
716 <?php wpbc_open_meta_box_section( 'wpbc_general_settings_booking_calendar_overview', __('Calendar Overview (admin panel)', 'booking'), array( 'is_section_visible_after_load' => false, 'is_show_minimize' => false ) ); ?>
717
718 <?php // FixIn: 8.5.2.20.
719 $this->settings_api()->show( 'booking_calendar_overview' );
720 ?>
721
722 <?php wpbc_close_meta_box_section(); ?>
723
724
725 <?php wpbc_open_meta_box_section( 'wpbc_general_settings_booking_timeline', __('Timeline (front-end)', 'booking'), array( 'is_section_visible_after_load' => false, 'is_show_minimize' => false ) ); ?>
726
727 <?php
728 $this->settings_api()->show( 'booking_timeline' );
729 ?>
730
731 <?php wpbc_close_meta_box_section(); ?>
732
733
734 <?php if ( class_exists('wpdev_bk_biz_s') ) { ?>
735
736
737 <?php wpbc_open_meta_box_section( 'wpbc_general_settings_auto_cancelation_approval', __('Auto cancellation / auto approval of bookings', 'booking'), array( 'is_section_visible_after_load' => false, 'is_show_minimize' => false ) ); ?>
738
739 <?php $this->settings_api()->show( 'auto_cancelation_approval' ); ?>
740
741 <?php wpbc_close_meta_box_section(); ?>
742
743 <?php } ?>
744
745 <?php wpbc_open_meta_box_section( 'wpbc_general_settings_advanced', __('Advanced', 'booking'), array( 'is_section_visible_after_load' => false, 'is_show_minimize' => false ) ); ?>
746
747 <?php $this->settings_api()->show( 'advanced' ); ?>
748
749 <?php wpbc_close_meta_box_section(); ?>
750
751
752 <?php wpbc_open_meta_box_section( 'wpbc_general_settings_information', __('Information', 'booking'), array( 'is_section_visible_after_load' => false, 'is_show_minimize' => false ) ); ?>
753
754 <?php $this->settings_api()->show( 'information' ); ?>
755
756 <?php wpbc_close_meta_box_section(); ?>
757
758
759
760 <?php wpbc_open_meta_box_section( 'wpbc_general_settings_datestimes', __('Date : Time', 'booking'), array( 'is_section_visible_after_load' => false, 'is_show_minimize' => false ) ); ?>
761
762 <?php $this->settings_api()->show( 'date_time' ); ?>
763
764 <?php wpbc_close_meta_box_section(); ?>
765
766
767
768 <?php wpbc_open_meta_box_section( 'wpbc_general_settings_permissions', __('Plugin Menu', 'booking'), array( 'is_section_visible_after_load' => false, 'is_show_minimize' => false ) ); ?>
769
770 <?php $this->settings_api()->show( 'permissions' ); ?>
771
772 <?php wpbc_close_meta_box_section(); ?>
773
774
775 <?php wpbc_open_meta_box_section( 'wpbc_general_settings_uninstall', __('Uninstall / deactivation', 'booking'), array( 'is_section_visible_after_load' => false, 'is_show_minimize' => false ) ); ?>
776
777 <?php $this->settings_api()->show( 'uninstall' ); ?>
778
779 <?php wpbc_close_meta_box_section(); ?>
780
781 <?php if ( ( class_exists( 'wpdev_bk_personal' ) ) && ( ! wpbc_is_this_demo() ) ) { ?>
782 <?php wpbc_open_meta_box_section( 'wpbc_general_settings_help', __( 'Tools', 'booking' ), array( 'is_section_visible_after_load' => false, 'is_show_minimize' => false ) ); ?>
783
784 <?php $this->settings_api()->show( 'help' ); ?>
785
786 <?php if ( function_exists( 'wpbc_customer_access_render_rate_limit_reset_tool' ) ) { ?>
787 <?php wpbc_customer_access_render_rate_limit_reset_tool(); ?>
788 <?php } ?>
789
790 <?php wpbc_close_meta_box_section(); ?>
791 <?php } ?>
792
793 <?php wpbc_open_meta_box_section( 'wpbc_general_settings_translations', __( 'Translations', 'booking' ), array( 'is_section_visible_after_load' => false, 'is_show_minimize' => false ) ); ?>
794
795 <?php $this->settings_api()->show( 'translations' ); ?>
796
797 <?php wpbc_translation_buttons_settings_section(); ?>
798
799 <?php wpbc_close_meta_box_section(); ?>
800
801 </div>
802 <div class="clear"></div>
803 <div class="container_for_save_buttons">
804 <input type="submit" value="<?php esc_attr_e( 'Save Changes', 'booking' ); ?>" class="button button-primary wpbc_submit_button"/>
805 <span class="sub_right">
806 <a style="margin:0;" class="button button"
807 onclick="javascript:wpbc_ui_settings__panel__click( '#wpbc_general_settings_all_tab a' ,'.postbox', 'Show All Settings' );"
808 href="javascript:void(0);">
809 <?php
810 esc_html_e( 'Show All Settings', 'booking' )
811 ?>
812 </a>
813 <?php
814 if ( 'translations_updated_from_wpbc_and_wp' !== get_bk_option( 'booking_translation_update_status' ) ) {
815
816 $current_locale = wpbc_get_maybe_reloaded_booking_locale();
817
818 if ( ! in_array( $current_locale, array( 'en_US', 'en_CA', 'en_GB', 'en_AU' ), true ) ) {
819
820 echo '<a class="button button" href="'
821 . esc_url( wpbc_get_settings_url() . '&system_info=show&_wpnonce=' . wp_create_nonce( 'wpbc_settings_url_nonce' ) . '&update_translations=1#wpbc_general_settings_system_info_metabox' )
822 . '">'
823 . esc_html__( 'Update Translations', 'booking' )
824 . '</a>';
825 }
826 }
827
828 if ( ! wpbc_is_this_demo() ) {
829
830 echo '<a style="margin:0 2em;" class="button button" href="'
831 . esc_url( wpbc_get_settings_url() . '&system_info=show&_wpnonce=' . wp_create_nonce( 'wpbc_settings_url_nonce' ) . '&restore_dismissed=On#wpbc_general_settings_restore_dismissed_metabox' )
832 . '">'
833 . esc_html__( 'Restore all dismissed windows', 'booking' )
834 . '</a>';
835 }
836 ?>
837 </span>
838 </div>
839
840 <?php } ?>
841 </form>
842 </span>
843
844 </div>
845 </div>
846
847
848 <?php
849
850 do_action( 'wpbc_hook_settings_page_footer', 'general_settings' );
851 }
852
853
854 public function update() {
855
856 $validated_fields = $this->settings_api()->validate_post(); // Get Validated Settings fields in $_POST request.
857
858 $validated_fields = apply_filters( 'wpbc_settings_validate_fields_before_saving', $validated_fields ); // Hook for validated fields.
859
860 foreach ( $this->settings_api()->get_form_fields() as $field_name => $field ) {
861 if ( ! empty( $field['group'] ) && in_array( $field['group'], array( 'calendar', 'days_tooltips', 'availability' ), true ) ) {
862 unset( $validated_fields[ $field_name ] );
863 }
864 }
865
866 /**
867 * Skip saving specific option, for example in Demo mode.
868 * // unset( $validated_fields['booking_start_day_weeek'] );
869 */
870
871 // FixIn: 9.8.6.1.
872 // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.NonceVerification.Missing
873 if ( ! empty( $_POST['form_visible_section'] ) ) {
874 ?>
875 <script type="text/javascript">
876 jQuery(document).ready(function () {
877 jQuery('<?php
878 // phpcs:ignore WordPress.Security.NonceVerification.Missing, WordPress.Security.ValidatedSanitizedInput.MissingUnslash, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
879 echo esc_js( $_POST['form_visible_section'] );
880 ?> a').trigger('click');
881 });
882 </script>
883 <?php
884 }
885
886 $this->settings_api()->save_to_db( $validated_fields ); // Save fields to DB.
887
888 wpbc_show_changes_saved_message();
889
890 /**
891 * // O L D W A Y: Saving Fields Data
892 * // update_bk_option( 'booking_is_delete_if_deactive'
893 * // , WPBC_Settings_API::validate_checkbox_post('booking_is_delete_if_deactive') );
894 * // ( (isset( $_POST['booking_is_delete_if_deactive'] ))?'On':'Off') );
895 */
896 }
897 }
898
899
900 /**
901 *
902
903 if ( ! wpbc_is_mu_user_can_be_here( 'only_super_admin' ) ) { // If this User not "super admin", then do not load this page at all
904
905 if ( ( ! isset( $ _GET['tab'] ) ) || ( $_GET['tab'] == 'general' ) ) { // If tab was not selected or selected default, then redirect it to the "form" tab.
906 $_GET['tab'] = 'form';
907 }
908 } else {
909 add_action('wpbc_menu_created', array( new WPBC_Page_SettingsGeneral() , '__construct') ); // Executed after creation of Menu
910 }
911 */
912
913 add_action('wpbc_menu_created', array( new WPBC_Page_SettingsGeneral() , '__construct') ); // Executed after creation of Menu
914
915