| @@ -2,11 +2,11 @@ | ||
| 2 | 2 | |
| 3 | 3 | namespace FluentBooking\App\Hooks\Handlers; |
| 4 | 4 | |
| 5 | 5 | use FluentBooking\App\App; |
| 6 | +use FluentBooking\App\Vite; | |
| 6 | 7 | use FluentBooking\App\Models\Calendar; |
| 7 | 8 | use FluentBooking\App\Models\CalendarSlot; |
| 8 | -use FluentBooking\App\Models\User; | |
| 9 | 9 | use FluentBooking\App\Services\DateTimeHelper; |
| 10 | 10 | use FluentBooking\App\Services\Helper; |
| 11 | 11 | use FluentBooking\App\Services\PermissionManager; |
| 12 | 12 | use FluentBooking\App\Services\TransStrings; |
| @@ -22,10 +22,45 @@ | ||
| 22 | 22 | return; |
| 23 | 23 | } |
| 24 | 24 | $this->enqueueAssets(); |
| 25 | 25 | }, 100); |
| 26 | + | |
| 27 | + add_action('admin_head', function () { | |
| 28 | + if (!isset($_REQUEST['page']) || $_REQUEST['page'] != 'fluent-booking') { // phpcs:ignore WordPress.Security.NonceVerification.Recommended | |
| 29 | + return; | |
| 30 | + } | |
| 31 | + $this->printThemeClass(); | |
| 32 | + }, 1); | |
| 26 | 33 | } |
| 27 | 34 | |
| 35 | + /** | |
| 36 | + * Put the dark class on the document before the page paints. | |
| 37 | + * | |
| 38 | + * The theme is chosen in the browser, so the server cannot know it - which means | |
| 39 | + * without this the first frame is always light, and somebody on dark gets a white flash | |
| 40 | + * on every page load. This runs in <head>, before wp-admin's own markup, and is the | |
| 41 | + * only reason it is inline rather than in global_admin.js: a file in the footer is too | |
| 42 | + * late to matter, and one in the header is still a request the paint would wait on. | |
| 43 | + * | |
| 44 | + * `fluent_theme_mode` is the key every Fluent plugin shares (see global_admin.js), and it | |
| 45 | + * holds a bare `light`, `dark` or `system`, so `system` is resolved here against the | |
| 46 | + * machine's own preference. <body> does not exist yet, so only <html> is marked; | |
| 47 | + * global_admin.js puts the same classes on <body> and #wpbody-content once it runs. | |
| 48 | + * | |
| 49 | + * @return void | |
| 50 | + */ | |
| 51 | + public function printThemeClass() | |
| 52 | + { | |
| 53 | + $script = <<<'JS' | |
| 54 | +(function(){try{var s=localStorage.getItem('fluent_theme_mode')||''; | |
| 55 | +if(!s){s=localStorage.getItem('fcal_color_mode')==='dark'?'dark':'light';} | |
| 56 | +if(s==='system'){s='system:'+(window.matchMedia&&window.matchMedia('(prefers-color-scheme: dark)').matches?'dark':'light');} | |
| 57 | +if(s==='dark'||s==='system:dark'){var e=document.documentElement;e.classList.add('fluent_theme_dark');e.classList.add('dark');}}catch(e){}})(); | |
| 58 | +JS; | |
| 59 | + | |
| 60 | + echo '<script id="fluent-booking-theme-class">' . $script . '</script>'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped | |
| 61 | + } | |
| 62 | + | |
| 28 | 63 | public function add() |
| 29 | 64 | { |
| 30 | 65 | $capability = PermissionManager::getMenuPermission(); |
| 31 | 66 | $menuPriority = 26; |
| @@ -83,9 +118,9 @@ | ||
| 83 | 118 | add_submenu_page( |
| 84 | 119 | 'fluent-booking', |
| 85 | 120 | __('Settings', 'fluent-booking'), |
| 86 | 121 | __('Settings', 'fluent-booking'), |
| 87 | - 'manage_options', | |
| 122 | + $capability, | |
| 88 | 123 | 'fluent-booking#/settings/general-settings', |
| 89 | 124 | [$this, 'render'] |
| 90 | 125 | ); |
| 91 | 126 | } |
| @@ -95,9 +130,17 @@ | ||
| 95 | 130 | if (!as_has_scheduled_action('fluent_booking_five_minutes_tasks')) { |
| 96 | 131 | as_schedule_recurring_action(time(), (60 * 5), 'fluent_booking_five_minutes_tasks', [], 'fluent-booking', true); |
| 97 | 132 | } |
| 98 | 133 | |
| 134 | + // The daily task carries the summary report and the MCP record purge. | |
| 135 | + // A site that never got it — a secondary blog on a network activation, | |
| 136 | + // or one that lost it — would grow fcal_mcp_g_* rows forever. | |
| 137 | + if (!as_has_scheduled_action('fluent_booking/daily_tasks')) { | |
| 138 | + as_schedule_recurring_action(time(), (60 * 60 * 24), 'fluent_booking/daily_tasks', [], 'fluent-booking', true); | |
| 139 | + } | |
| 140 | + | |
| 99 | 141 | $this->changeFooter(); |
| 142 | + | |
| 100 | 143 | $app = App::getInstance(); |
| 101 | 144 | |
| 102 | 145 | $config = $app->config; |
| 103 | 146 | |
| @@ -126,9 +169,9 @@ | ||
| 126 | 169 | ], |
| 127 | 170 | [ |
| 128 | 171 | 'key' => 'scheduled-events', |
| 129 | 172 | 'label' => __('Bookings', 'fluent-booking'), |
| 130 | - 'permalink' => $baseUrl . 'scheduled-events?period=upcoming&author=me', | |
| 173 | + 'permalink' => $baseUrl . 'scheduled-events', | |
| 131 | 174 | ], |
| 132 | 175 | [ |
| 133 | 176 | 'key' => 'availability', |
| 134 | 177 | 'label' => __('Availability', 'fluent-booking'), |
| @@ -135,10 +178,11 @@ | ||
| 135 | 178 | 'permalink' => $baseUrl . 'availability' |
| 136 | 179 | ] |
| 137 | 180 | ]; |
| 138 | 181 | |
| 139 | - if (current_user_can('manage_options')) { | |
| 140 | - $menuItems[] = [ | |
| 182 | + $settingItems = []; | |
| 183 | + if (PermissionManager::userCan('manage_all_data')) { | |
| 184 | + $settingItems = [ | |
| 141 | 185 | 'key' => 'settings', |
| 142 | 186 | 'label' => __('Settings', 'fluent-booking'), |
| 143 | 187 | 'permalink' => $baseUrl . 'settings/general-settings' |
| 144 | 188 | ]; |
| @@ -143,16 +187,8 @@ | ||
| 143 | 187 | 'permalink' => $baseUrl . 'settings/general-settings' |
| 144 | 188 | ]; |
| 145 | 189 | } |
| 146 | 190 | |
| 147 | - if (!defined('FLUENT_BOOKING_PRO_DIR_FILE')) { | |
| 148 | - $menuItems[] = [ | |
| 149 | - 'key' => 'buy', | |
| 150 | - 'label' => __('Upgrade to Pro', 'fluent-booking'), | |
| 151 | - 'permalink' => Helper::getUpgradeUrl() | |
| 152 | - ]; | |
| 153 | - } | |
| 154 | - | |
| 155 | 191 | $menuItems = apply_filters('fluent_booking/admin_menu_items', $menuItems); |
| 156 | 192 | |
| 157 | 193 | $assets = $app['url.assets']; |
| 158 | 194 | |
| @@ -159,12 +195,16 @@ | ||
| 159 | 195 | $portalVars = apply_filters('fluent_booking/admin_portal_vars', [ |
| 160 | 196 | 'name' => $name, |
| 161 | 197 | 'slug' => $slug, |
| 162 | 198 | 'menuItems' => $menuItems, |
| 199 | + 'settings' => $settingItems, | |
| 163 | 200 | 'baseUrl' => $baseUrl, |
| 164 | 201 | 'logo' => $assets . 'images/logo.svg', |
| 202 | + 'dark_logo' => $assets . 'images/logo_dark.svg', | |
| 165 | 203 | ]); |
| 166 | 204 | |
| 205 | + do_action('fluent_booking/admin_app_rendering'); | |
| 206 | + | |
| 167 | 207 | $app->view->render('admin.menu', $portalVars); |
| 168 | 208 | } |
| 169 | 209 | |
| 170 | 210 | public function changeFooter() |
| @@ -185,16 +225,14 @@ | ||
| 185 | 225 | $app = App::getInstance(); |
| 186 | 226 | |
| 187 | 227 | $isRtl = Helper::fluentbooking_is_rtl(); |
| 188 | 228 | |
| 189 | - $assets = $app['url.assets']; | |
| 229 | + $slug = $app->config->get('app.slug'); | |
| 190 | 230 | |
| 191 | - $slug = $app->config->get('app.slug'); | |
| 231 | + $assetsVersion = Vite::isDev() ? time() : FLUENT_BOOKING_ASSETS_VERSION; | |
| 192 | 232 | |
| 193 | - $adminAppCss = 'admin/admin.css'; | |
| 194 | 233 | if ($isRtl) { |
| 195 | - $adminAppCss = 'admin/admin-rtl.css'; | |
| 196 | - wp_enqueue_style('fluentbooking_admin_rtl', $assets . 'admin/fluentbooking_admin_rtl.css', [], FLUENT_BOOKING_ASSETS_VERSION); | |
| 234 | + Vite::enqueueStyle('fluentbooking_admin_rtl', 'admin_rtl_css', [], $assetsVersion); | |
| 197 | 235 | } |
| 198 | 236 | |
| 199 | 237 | add_action('wp_print_scripts', function () { |
| 200 | 238 | |
| @@ -285,27 +323,15 @@ | ||
| 285 | 323 | wp_dequeue_style($wp_styles->registered[$script]->handle); |
| 286 | 324 | } |
| 287 | 325 | }, 999999); |
| 288 | 326 | |
| 289 | - wp_enqueue_style('fluent_booing_admin_app', $assets . $adminAppCss, [], FLUENT_BOOKING_ASSETS_VERSION, 'all'); | |
| 327 | + Vite::enqueueStyle('fluent_booing_admin_app', 'admin_css', [], $assetsVersion, 'all'); | |
| 290 | 328 | |
| 291 | - do_action($slug . '_loading_app'); | |
| 329 | + do_action($slug . '_loading_app'); // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.DynamicHooknameFound | |
| 292 | 330 | |
| 293 | - wp_enqueue_script( | |
| 294 | - $slug . '_admin_app', | |
| 295 | - $assets . 'admin/app.js', | |
| 296 | - array('jquery'), | |
| 297 | - FLUENT_BOOKING_ASSETS_VERSION, | |
| 298 | - true | |
| 299 | - ); | |
| 331 | + Vite::enqueueScript($slug . '_admin_app', 'admin_app', array('jquery'), $assetsVersion); | |
| 300 | 332 | |
| 301 | - wp_enqueue_script( | |
| 302 | - $slug . '_global_admin', | |
| 303 | - $assets . 'admin/global_admin.js', | |
| 304 | - array(), | |
| 305 | - FLUENT_BOOKING_ASSETS_VERSION, | |
| 306 | - true | |
| 307 | - ); | |
| 333 | + Vite::enqueueScript($slug . '_global_admin', 'global_admin', array(), $assetsVersion); | |
| 308 | 334 | |
| 309 | 335 | if (function_exists('wp_enqueue_editor')) { |
| 310 | 336 | add_filter('user_can_richedit', '__return_true'); |
| 311 | 337 | wp_enqueue_editor(); |
| @@ -319,8 +345,13 @@ | ||
| 319 | 345 | { |
| 320 | 346 | $assets = $app['url.assets']; |
| 321 | 347 | $currentUser = get_user_by('ID', get_current_user_id()); |
| 322 | 348 | |
| 349 | + $currentUsername = trim($currentUser->first_name . ' ' . $currentUser->last_name); | |
| 350 | + if (!$currentUsername) { | |
| 351 | + $currentUsername = $currentUser->display_name; | |
| 352 | + } | |
| 353 | + | |
| 323 | 354 | $isNew = $this->isNew(); |
| 324 | 355 | |
| 325 | 356 | $requireSlug = false; |
| 326 | 357 | |
| @@ -355,8 +386,9 @@ | ||
| 355 | 386 | $customFieldTypes = Helper::getCustomFieldTypes(); |
| 356 | 387 | $weekSelectTimes = Helper::getWeekSelectTimes(); |
| 357 | 388 | $overrideSelectTimes = Helper::getOverrideSelectTimes(); |
| 358 | 389 | $statusChangingTimes = Helper::getBookingStatusChangingTimes(); |
| 390 | + $defaultTermsAndConditions = Helper::getDefaultTermsAndConditions(); | |
| 359 | 391 | $locationFields = (new CalendarSlot())->getLocationFields(); |
| 360 | 392 | |
| 361 | 393 | return apply_filters('fluent_booking/admin_vars', [ |
| 362 | 394 | 'slug' => $slug = $app->config->get('app.slug'), |
| @@ -376,12 +408,14 @@ | ||
| 376 | 408 | 'duration_lookup' => $durationLookup, |
| 377 | 409 | 'multi_duration_lookup' => $multiDurationLookup, |
| 378 | 410 | 'override_select_times' => $overrideSelectTimes, |
| 379 | 411 | 'status_changing_times' => $statusChangingTimes, |
| 412 | + 'default_terms' => $defaultTermsAndConditions, | |
| 380 | 413 | 'me' => [ |
| 381 | 414 | 'id' => $currentUser->ID, |
| 382 | 415 | 'calendar_id' => $calendarId, |
| 383 | - 'full_name' => trim($currentUser->first_name . ' ' . $currentUser->last_name), | |
| 416 | + 'full_name' => $currentUsername, | |
| 417 | + 'avatar' => get_avatar_url($currentUser->ID, ['size' => 96]), | |
| 384 | 418 | 'email' => $currentUser->user_email, |
| 385 | 419 | 'is_admin' => $hasAllAccess, |
| 386 | 420 | 'permissions' => PermissionManager::getUserPermissions($currentUser, false), |
| 387 | 421 | ], |
| @@ -388,22 +422,34 @@ | ||
| 388 | 422 | 'all_hosts' => Calendar::getAllHosts(), |
| 389 | 423 | 'is_new' => $isNew, |
| 390 | 424 | 'require_slug' => $requireSlug, |
| 391 | 425 | 'site_url' => site_url('/'), |
| 426 | + 'site_title' => get_bloginfo('name'), | |
| 392 | 427 | 'upgrade_url' => Helper::getUpgradeUrl(), |
| 393 | 428 | 'timezones' => DateTimeHelper::getTimeZones(true), |
| 429 | + 'features' => Helper::getFeatures(), | |
| 394 | 430 | 'supported_features' => apply_filters('fluent_booking/supported_featured', [ |
| 395 | 431 | 'multi_users' => true |
| 396 | 432 | ]), |
| 397 | - 'has_pro' => defined('FLUENT_BOOKING_PRO_DIR_FILE'), | |
| 398 | - 'require_upgrade' => defined('FLUENT_BOOKING_PRO_DIR_FILE') && !defined('FLUENT_BOOKING_LITE'), | |
| 399 | - 'dashboard_notices' => apply_filters('fluent_booking/dashboard_notices', []), | |
| 400 | - 'trans' => TransStrings::getStrings(), | |
| 401 | - 'date_format' => DateTimeHelper::getDateFormatter(true), | |
| 402 | - 'time_format' => DateTimeHelper::getTimeFormatter(true), | |
| 403 | - 'date_time_formatter' => DateTimeHelper::getDateFormatter(true) . ', ' . DateTimeHelper::getTimeFormatter(true), | |
| 404 | - 'available_date_formats' => DateTimeHelper::getAvailableDateFormats(), | |
| 405 | - 'admin_url' => admin_url(), | |
| 433 | + 'i18' => [ | |
| 434 | + 'date_time_config' => DateTimeHelper::getI18nDateTimeConfig(), | |
| 435 | + ], | |
| 436 | + 'has_pro' => defined('FLUENT_BOOKING_PRO_DIR_FILE'), | |
| 437 | + 'require_upgrade' => defined('FLUENT_BOOKING_PRO_DIR_FILE') && !defined('FLUENT_BOOKING_LITE'), | |
| 438 | + 'dashboard_notices' => apply_filters('fluent_booking/dashboard_notices', []), | |
| 439 | + 'payment_methods' => apply_filters('fluent_booking/payment/get_all_methods', []), | |
| 440 | + 'trans' => TransStrings::getStrings(), | |
| 441 | + 'date_format' => DateTimeHelper::getDateFormatter(true), | |
| 442 | + 'time_format' => DateTimeHelper::getTimeFormatter(true), | |
| 443 | + 'date_time_formatter' => DateTimeHelper::getDateFormatter(true) . ', ' . DateTimeHelper::getTimeFormatter(true), | |
| 444 | + 'available_date_formats' => DateTimeHelper::getAvailableDateFormats(), | |
| 445 | + 'default_booking_filters' => Helper::getDefaultBookingFilters(), | |
| 446 | + 'default_paginations' => Helper::getDefaultPaginations(), | |
| 447 | + 'pref_settings' => Helper::getPrefSettings(), | |
| 448 | + 'settings_menu_items' => static::settingsMenuItems(), | |
| 449 | + 'admin_url' => admin_url(), | |
| 450 | + 'is_rtl' => Helper::fluentbooking_is_rtl(), | |
| 451 | + 'iframe_html' => Helper::getIframeHtml() | |
| 406 | 452 | ]); |
| 407 | 453 | } |
| 408 | 454 | |
| 409 | 455 | protected function getRestInfo($app) |
| @@ -472,9 +518,9 @@ | ||
| 472 | 518 | $urlAssets = $app['url.assets']; |
| 473 | 519 | |
| 474 | 520 | return apply_filters('fluent_booking/settings_menu_items', [ |
| 475 | 521 | 'general_settings' => [ |
| 476 | - 'title' => __('General Settings', 'fluent-booking'), | |
| 522 | + 'title' => __('General', 'fluent-booking'), | |
| 477 | 523 | 'disable' => false, |
| 478 | 524 | 'el_icon' => 'Operation', |
| 479 | 525 | 'component_type' => 'StandAloneComponent', |
| 480 | 526 | 'class' => 'general_settings', |
| @@ -491,8 +537,44 @@ | ||
| 491 | 537 | 'route' => [ |
| 492 | 538 | 'name' => 'team_members' |
| 493 | 539 | ] |
| 494 | 540 | ], |
| 541 | + 'payment_settings' => [ | |
| 542 | + 'title' => __('Payment', 'fluent-booking'), | |
| 543 | + 'disable' => true, | |
| 544 | + 'el_icon' => 'Money', | |
| 545 | + 'component_type' => 'PaymentSettingsComponent', | |
| 546 | + 'class' => 'payment_settings', | |
| 547 | + 'route' => [ | |
| 548 | + 'name' => 'global_payment_settings', | |
| 549 | + ], | |
| 550 | + 'children' => [ | |
| 551 | + 'payment_settings' => [ | |
| 552 | + 'title' => __('Settings', 'fluent-booking'), | |
| 553 | + 'disable' => true, | |
| 554 | + 'route' => [ | |
| 555 | + 'name' => 'global_payment_settings' | |
| 556 | + ] | |
| 557 | + ], | |
| 558 | + 'payment_methods' => [ | |
| 559 | + 'title' => __('Payment Methods', 'fluent-booking'), | |
| 560 | + 'disable' => true, | |
| 561 | + 'route' => [ | |
| 562 | + 'name' => 'payment_methods', | |
| 563 | + 'params' => [ | |
| 564 | + 'settings_key' => 'stripe' | |
| 565 | + ] | |
| 566 | + ] | |
| 567 | + ], | |
| 568 | + 'payment_coupons' => [ | |
| 569 | + 'title' => __('Coupons', 'fluent-booking'), | |
| 570 | + 'disable' => true, | |
| 571 | + 'route' => [ | |
| 572 | + 'name' => 'payment_coupons' | |
| 573 | + ] | |
| 574 | + ] | |
| 575 | + ], | |
| 576 | + ], | |
| 495 | 577 | 'google' => [ |
| 496 | 578 | 'title' => __('Google Calendar / Meet', 'fluent-booking'), |
| 497 | 579 | 'disable' => true, |
| 498 | 580 | 'icon_url' => $urlAssets . 'images/gg-calendar.svg', |
| @@ -530,9 +612,9 @@ | ||
| 530 | 612 | ], |
| 531 | 613 | 'next_cloud_calendar' => [ |
| 532 | 614 | 'title' => __('Nextcloud Calendar', 'fluent-booking'), |
| 533 | 615 | 'disable' => true, |
| 534 | - 'icon_url' => $urlAssets . 'images/Ncloud.svg', | |
| 616 | + 'svg_icon' => '<svg xmlns="http://www.w3.org/2000/svg" height="800" width="1200" viewBox="-17.0838 -18.65685 148.0596 111.9411"><path d="M57.0328 0C45.2275 0 35.2216 8.0032 32.1204 18.8466c-2.6952-5.7515-8.5359-9.781-15.2633-9.781C7.6053 9.0657 0 16.671 0 25.9228c0 9.2519 7.6052 16.8606 16.857 16.8606 6.7275 0 12.5682-4.0319 15.2635-9.7844 3.1011 10.8442 13.107 18.85 24.9123 18.85 11.718 0 21.6729-7.885 24.8533-18.607 2.745 5.622 8.5135 9.5414 15.1454 9.5414 9.2518 0 16.8605-7.6087 16.8605-16.8606 0-9.2518-7.6087-16.857-16.8605-16.857-6.632 0-12.4003 3.917-15.1454 9.5378C78.7057 7.8825 68.7507 0 57.0328 0zm0 9.8955c8.9116 0 16.0307 7.1156 16.0307 16.0272s-7.119 16.0308-16.0307 16.0308c-8.9116 0-16.0272-7.1192-16.0272-16.0308S48.1212 9.8955 57.0328 9.8955zm-40.1757 9.0657c3.9044 0 6.965 3.0571 6.965 6.9615s-3.0606 6.965-6.965 6.965-6.9616-3.0606-6.9616-6.965 3.0572-6.9615 6.9616-6.9615zm80.1744 0c3.9044 0 6.965 3.0571 6.965 6.9615s-3.0606 6.965-6.965 6.965-6.9616-3.0606-6.9616-6.965 3.0572-6.9615 6.9616-6.9615z" color="currentColor" font-weight="400" font-family="sans-serif" overflow="visible" fill="currentColor"></path><path d="M29.1085 63.7615c2.7752 0 4.3275 1.9756 4.3275 4.939 0 .2822-.2352.5174-.5174.5174h-7.4792c.047 2.6342 1.8816 4.1394 3.9983 4.1394 1.3171 0 2.2579-.5644 2.7283-.9408.2822-.1881.5174-.141.6585.1412l.1411.2352c.1411.2351.094.4703-.1411.6585-.5645.4233-1.7875 1.129-3.4338 1.129-3.0575 0-5.4094-2.2109-5.4094-5.4095.047-3.3868 2.3048-5.4094 5.1272-5.4094zm2.8693 4.4216c-.094-2.1638-1.4112-3.2457-2.9164-3.2457-1.7404 0-3.2456 1.129-3.575 3.2457zm15.584-2.9164v-3.622c0-.3292.1882-.5174.5174-.5174h.3764c.3292 0 .4703.1882.4703.5174v2.446h2.1168c.3292 0 .5174.1882.5174.5174v.1412c0 .3292-.1882.4703-.5174.4703h-2.1168v5.1743c0 2.399 1.4582 2.6812 2.2579 2.7282.4233.047.5644.1411.5644.5174v.2823c0 .3292-.141.4704-.5644.4704-2.2579 0-3.622-1.3642-3.622-3.8102zm10.7718-1.5052c1.7875 0 2.9164.7526 3.4339 1.176.2351.188.2822.4233.047.7055l-.1411.2352c-.1882.2822-.4234.2822-.7056.094-.4704-.3292-1.3641-.9407-2.5871-.9407-2.2579 0-4.0453 1.6934-4.0453 4.1864 0 2.446 1.7874 4.1394 4.0453 4.1394 1.4582 0 2.446-.6585 2.9164-1.0819.2822-.1881.4704-.141.6585.1411l.1411.1882c.1411.2822.0941.4704-.141.7056-.5175.4233-1.7876 1.317-3.6691 1.317-3.0575 0-5.4094-2.2108-5.4094-5.4094.047-3.1986 2.399-5.4564 5.4564-5.4564zm6.2562-3.3398c0-.3292-.1882-.5174.141-.5174h.3764c.3293 0 .8467.1882.8467.5174V71.664c0 1.3171.6115 1.4582 1.0819 1.5053.2352 0 .4233.141.4233.4703v.3293c0 .3293-.1411.5174-.5174.5174-.8467 0-2.352-.2822-2.352-2.54zm9.6429 3.3398c3.0104 0 5.4564 2.3048 5.4564 5.3623 0 3.1046-2.446 5.4565-5.4564 5.4565-3.0105 0-5.4565-2.352-5.4565-5.4565 0-3.0575 2.446-5.3623 5.4565-5.3623zm0 9.5958c2.2108 0 3.9982-1.7875 3.9982-4.2335 0-2.3519-1.7874-4.0923-3.9982-4.0923s-4.0454 1.7875-4.0454 4.0923c.047 2.399 1.8346 4.2335 4.0454 4.2335zm23.4722-9.5958c2.493 0 3.3868 2.0697 3.3868 2.0697h.047s-.047-.3293-.047-.7997v-4.6568c0-.3293-.1412-.5174.1881-.5174h.3763c.3293 0 .8467.1881.8467.5174v13.406c0 .3292-.1411.5174-.4704.5174h-.3292c-.3293 0-.5175-.1411-.5175-.4704v-.7997c0-.3763.0941-.6585.0941-.6585h-.047s-.8938 2.1638-3.575 2.1638c-2.7752 0-4.5157-2.2108-4.5157-5.4095-.094-3.1986 1.8345-5.3623 4.5628-5.3623zm.047 9.5958c1.7404 0 3.3398-1.223 3.3398-4.1864 0-2.1167-1.082-4.1394-3.2927-4.1394-1.8345 0-3.3398 1.5052-3.3398 4.1394.047 2.54 1.3641 4.1864 3.2927 4.1864zm-85.8923.9878h.3763c.3293 0 .5174-.1881.5174-.5174V63.7274c0-1.5993 1.7404-2.7412 3.716-2.7412 1.9757 0 3.7161 1.142 3.7161 2.7412v10.1003c0 .3293.1882.5174.5174.5174h.3763c.3293 0 .4704-.1881.4704-.5174V63.6674c0-2.6812-2.6812-3.9983-5.1272-3.9983-2.3519 0-5.0331 1.317-5.0331 3.9983v10.1603c0 .3293.1411.5174.4704.5174zm78.5073-10.3485h-.3763c-.3293 0-.5175.1882-.5175.5175v5.6916c0 1.5993-1.0348 3.0575-3.0575 3.0575-1.9756 0-3.0575-1.4582-3.0575-3.0575v-5.6916c0-.3293-.1881-.5175-.5174-.5175h-.3763c-.3293 0-.4704.1882-.4704.5175v6.068c0 2.6811 1.9756 3.9982 4.4216 3.9982 2.446 0 4.4217-1.317 4.4217-3.9983v-6.068c.047-.3292-.1412-.5174-.4704-.5174zm-46.5643-.0771c-.1152.0184-.2258.0953-.3317.2214L41.5673 66.41l-1.4249 1.6978-2.1571-2.5715-1.1705-1.3955c-.1058-.1261-.2257-.195-.35-.2058-.1244-.0107-.2533.0366-.3795.1424l-.2884.2416c-.2523.2117-.2392.446-.0276.6982l1.9045 2.2693 1.5793 1.8815-2.3124 2.7553c-.0018.002-.0029.0043-.0046.0064l-1.1668 1.39c-.2117.2523-.188.5178.0643.7295l.2885.2407c.2522.2116.481.1585.6927-.0937l1.9036-2.2693 1.425-1.6977 2.157 2.5715c.0015.0016.0032.0029.0047.0046l1.1668 1.391c.2116.2521.4763.275.7285.0633l.2885-.2416c.2522-.2117.2392-.446.0275-.6983l-1.9045-2.2692-1.5792-1.8815 2.3124-2.7553c.0017-.002.0028-.0044.0046-.0064l1.1668-1.39c.2116-.2523.1879-.5179-.0643-.7295l-.2885-.2416c-.1261-.1058-.2459-.1452-.361-.1268z" fill="currentColor"></path></svg>', | |
| 535 | 617 | 'component_type' => 'GlobalSettingsComponent', |
| 536 | 618 | 'class' => 'configure_nextcloud_calendar', |
| 537 | 619 | 'route' => [ |
| 538 | 620 | 'name' => 'configure-integrations', |
| @@ -553,9 +635,9 @@ | ||
| 553 | 635 | ], |
| 554 | 636 | 'twilio' => [ |
| 555 | 637 | 'title' => __('SMS by Twilio', 'fluent-booking'), |
| 556 | 638 | 'disable' => true, |
| 557 | - 'icon_url' => $urlAssets . 'images/tw.svg', | |
| 639 | + 'svg_icon' => '<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" viewBox="0 0 24 24" id="twilio"><path d="M0,12c0,6.64,5.359,12,12,12s12-5.36,12-12c0-6.641-5.36-12-12-12C5.381-0.008,0.008,5.352,0,11.971V12z M3.199,12c-0.014-4.846,3.904-8.786,8.75-8.801H12c4.847-0.014,8.786,3.904,8.801,8.75V12c0.015,4.847-3.904,8.786-8.75,8.801H12c-4.846,0.015-8.786-3.904-8.801-8.75V12z"></path><path d="M14.959 17.44c1.361 0 2.481-1.12 2.481-2.48 0-1.359-1.12-2.48-2.481-2.479-1.359 0-2.479 1.12-2.479 2.479C12.486 16.326 13.592 17.432 14.959 17.44zM14.959 11.52c1.361 0 2.481-1.12 2.481-2.479 0-1.361-1.12-2.481-2.481-2.481-1.359 0-2.479 1.12-2.479 2.481C12.487 10.407 13.593 11.513 14.959 11.52zM9.042 17.44c1.359 0 2.479-1.12 2.479-2.48 0-1.359-1.121-2.48-2.479-2.479-1.361 0-2.481 1.12-2.481 2.479C6.567 16.327 7.674 17.433 9.042 17.44zM9.042 11.52c1.359 0 2.479-1.12 2.479-2.479 0-1.361-1.121-2.481-2.479-2.481-1.361 0-2.481 1.12-2.481 2.481C6.567 10.408 7.675 11.513 9.042 11.52z"></path></svg>', | |
| 558 | 640 | 'component_type' => 'GlobalSettingsComponent', |
| 559 | 641 | 'class' => 'configure_twilio', |
| 560 | 642 | 'route' => [ |
| 561 | 643 | 'name' => 'configure-integrations', |
| @@ -563,34 +645,8 @@ | ||
| 563 | 645 | 'settings_key' => 'twilio' |
| 564 | 646 | ] |
| 565 | 647 | ] |
| 566 | 648 | ], |
| 567 | - 'stripe' => [ | |
| 568 | - 'title' => __('Stripe', 'fluent-booking'), | |
| 569 | - 'disable' => true, | |
| 570 | - 'icon_url' => $urlAssets . 'images/payment-methods/stripe.svg', | |
| 571 | - 'component_type' => 'GlobalSettingsComponent', | |
| 572 | - 'class' => 'stripe_payment', | |
| 573 | - 'route' => [ | |
| 574 | - 'name' => 'PaymentSettingsIndex', | |
| 575 | - 'params' => [ | |
| 576 | - 'settings_key' => 'stripe' | |
| 577 | - ] | |
| 578 | - ] | |
| 579 | - ], | |
| 580 | - 'paypal' => [ | |
| 581 | - 'title' => __('PayPal', 'fluent-booking'), | |
| 582 | - 'disable' => true, | |
| 583 | - 'icon_url' => $urlAssets . 'images/payment-methods/paypal.svg', | |
| 584 | - 'component_type' => 'GlobalSettingsComponent', | |
| 585 | - 'class' => 'paypal_payment', | |
| 586 | - 'route' => [ | |
| 587 | - 'name' => 'PaymentSettingsIndex', | |
| 588 | - 'params' => [ | |
| 589 | - 'settings_key' => 'paypal' | |
| 590 | - ] | |
| 591 | - ] | |
| 592 | - ], | |
| 593 | 649 | 'license' => [ |
| 594 | 650 | 'title' => __('License', 'fluent-booking'), |
| 595 | 651 | 'disable' => true, |
| 596 | 652 | 'el_icon' => 'Lock', |
| @@ -598,9 +654,9 @@ | ||
| 598 | 654 | 'class' => 'configure_license', |
| 599 | 655 | 'route' => [ |
| 600 | 656 | 'name' => 'license' |
| 601 | 657 | ] |
| 602 | - ], | |
| 658 | + ] | |
| 603 | 659 | ]); |
| 604 | 660 | } |
| 605 | 661 | |
| 606 | 662 | public static function getEventSettingsMenuItems($event) |
| @@ -617,9 +673,9 @@ | ||
| 617 | 673 | 'event_id' => $event->id |
| 618 | 674 | ] |
| 619 | 675 | ], |
| 620 | 676 | 'label' => __('Event Details', 'fluent-booking'), |
| 621 | - 'svgIcon' => '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"><path d="M8 2V5" stroke="#1B2533" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/><path d="M16 2V5" stroke="#1B2533" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/><path d="M7 13H15" stroke="#1B2533" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/><path d="M7 17H12" stroke="#1B2533" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/><path d="M16 3.5C19.33 3.68 21 4.95 21 9.65V15.83C21 19.95 20 22.01 15 22.01H9C4 22.01 3 19.95 3 15.83V9.65C3 4.95 4.67 3.69 8 3.5H16Z" stroke="#1B2533" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/></svg>' | |
| 677 | + 'svgIcon' => '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"><path d="M8 2V5" stroke="currentColor" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/><path d="M16 2V5" stroke="currentColor" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/><path d="M7 13H15" stroke="currentColor" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/><path d="M7 17H12" stroke="currentColor" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/><path d="M16 3.5C19.33 3.68 21 4.95 21 9.65V15.83C21 19.95 20 22.01 15 22.01H9C4 22.01 3 19.95 3 15.83V9.65C3 4.95 4.67 3.69 8 3.5H16Z" stroke="currentColor" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/></svg>' | |
| 622 | 678 | ], |
| 623 | 679 | 'assignment' => [ |
| 624 | 680 | 'type' => 'route', |
| 625 | 681 | 'visible' => false, |
| @@ -645,9 +701,9 @@ | ||
| 645 | 701 | 'event_id' => $event->id |
| 646 | 702 | ] |
| 647 | 703 | ], |
| 648 | 704 | 'label' => __('Availability', 'fluent-booking'), |
| 649 | - 'svgIcon' => '<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none"><path d="M6.66666 1.66699V4.16699" stroke="#445164" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/><path d="M13.3333 1.66699V4.16699" stroke="#445164" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/><path d="M2.91666 7.5752H17.0833" stroke="#445164" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/><path d="M17.5 7.08366V14.167C17.5 16.667 16.25 18.3337 13.3333 18.3337H6.66667C3.75 18.3337 2.5 16.667 2.5 14.167V7.08366C2.5 4.58366 3.75 2.91699 6.66667 2.91699H13.3333C16.25 2.91699 17.5 4.58366 17.5 7.08366Z" stroke="#445164" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/><path d="M13.0789 11.4167H13.0864" stroke="#445164" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><path d="M13.0789 13.9167H13.0864" stroke="#445164" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><path d="M9.99623 11.4167H10.0037" stroke="#445164" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><path d="M9.99623 13.9167H10.0037" stroke="#445164" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><path d="M6.91194 11.4167H6.91942" stroke="#445164" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><path d="M6.91194 13.9167H6.91942" stroke="#445164" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>' | |
| 705 | + 'svgIcon' => '<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none"><path d="M6.66666 1.66699V4.16699" stroke="currentColor" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/><path d="M13.3333 1.66699V4.16699" stroke="currentColor" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/><path d="M2.91666 7.5752H17.0833" stroke="currentColor" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/><path d="M17.5 7.08366V14.167C17.5 16.667 16.25 18.3337 13.3333 18.3337H6.66667C3.75 18.3337 2.5 16.667 2.5 14.167V7.08366C2.5 4.58366 3.75 2.91699 6.66667 2.91699H13.3333C16.25 2.91699 17.5 4.58366 17.5 7.08366Z" stroke="currentColor" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/><path d="M13.0789 11.4167H13.0864" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><path d="M13.0789 13.9167H13.0864" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><path d="M9.99623 11.4167H10.0037" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><path d="M9.99623 13.9167H10.0037" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><path d="M6.91194 11.4167H6.91942" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><path d="M6.91194 13.9167H6.91942" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>' | |
| 650 | 706 | ], |
| 651 | 707 | 'limit_settings' => [ |
| 652 | 708 | 'type' => 'route', |
| 653 | 709 | 'visible' => true, |
| @@ -673,9 +729,9 @@ | ||
| 673 | 729 | 'event_id' => $event->id |
| 674 | 730 | ] |
| 675 | 731 | ], |
| 676 | 732 | 'label' => __('Question Settings', 'fluent-booking'), |
| 677 | - 'svgIcon' => '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8 2V5" stroke="#292D32" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/><path d="M16 2V5" stroke="#292D32" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/><path d="M12 13.8714V13.6441C12 12.908 12.5061 12.5182 13.0121 12.2043C13.5061 11.9012 14 11.5115 14 10.797C14 9.8011 13.1085 9 12 9C10.8915 9 10 9.8011 10 10.797" stroke="#292D32" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/><path d="M11.9945 16.4587H12.0053" stroke="#292D32" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/><path d="M16 3.5C19.33 3.67504 21 4.91005 21 9.48055V15.4903C21 19.4968 20 21.5 15 21.5H9C4 21.5 3 19.4968 3 15.4903V9.48055C3 4.91005 4.67 3.68476 8 3.5H16Z" stroke="#292D32" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/></svg>' | |
| 733 | + 'svgIcon' => '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8 2V5" stroke="currentColor" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/><path d="M16 2V5" stroke="currentColor" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/><path d="M12 13.8714V13.6441C12 12.908 12.5061 12.5182 13.0121 12.2043C13.5061 11.9012 14 11.5115 14 10.797C14 9.8011 13.1085 9 12 9C10.8915 9 10 9.8011 10 10.797" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/><path d="M11.9945 16.4587H12.0053" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/><path d="M16 3.5C19.33 3.67504 21 4.91005 21 9.48055V15.4903C21 19.4968 20 21.5 15 21.5H9C4 21.5 3 19.4968 3 15.4903V9.48055C3 4.91005 4.67 3.68476 8 3.5H16Z" stroke="currentColor" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/></svg>' | |
| 678 | 734 | ], |
| 679 | 735 | 'email_notification' => [ |
| 680 | 736 | 'type' => 'route', |
| 681 | 737 | 'visible' => true, |
| @@ -703,8 +759,22 @@ | ||
| 703 | 759 | ], |
| 704 | 760 | 'label' => __('SMS Notification', 'fluent-booking'), |
| 705 | 761 | 'elIcon' => 'Notification' |
| 706 | 762 | ], |
| 763 | + 'recurring_settings' => [ | |
| 764 | + 'type' => 'route', | |
| 765 | + 'visible' => ($event->isOneToOne() || $event->isGroup()) ? true : false, | |
| 766 | + 'disable' => true, | |
| 767 | + 'route' => [ | |
| 768 | + 'name' => 'recurring_settings', | |
| 769 | + 'params' => [ | |
| 770 | + 'calendar_id' => $event->calendar_id, | |
| 771 | + 'event_id' => $event->id | |
| 772 | + ] | |
| 773 | + ], | |
| 774 | + 'label' => __('Recurring Settings', 'fluent-booking'), | |
| 775 | + 'svgIcon' => '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="16" height="16" fill="currentColor"><path d="M6 4H21C21.5523 4 22 4.44772 22 5V12H20V6H6V9L1 5L6 1V4ZM18 20H3C2.44772 20 2 19.5523 2 19V12H4V18H18V15L23 19L18 23V20Z"></path></svg>' | |
| 776 | + ], | |
| 707 | 777 | 'advanced_settings' => [ |
| 708 | 778 | 'type' => 'route', |
| 709 | 779 | 'visible' => true, |
| 710 | 780 | 'disable' => true, |
| @@ -776,9 +846,22 @@ | ||
| 776 | 846 | 'calendar_id' => $calendar->id |
| 777 | 847 | ] |
| 778 | 848 | ], |
| 779 | 849 | 'label' => __('Calendar Settings', 'fluent-booking'), |
| 780 | - 'svgIcon' => '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M12 15C13.6569 15 15 13.6569 15 12C15 10.3431 13.6569 9 12 9C10.3431 9 9 10.3431 9 12C9 13.6569 10.3431 15 12 15Z" stroke="#292D32" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/><path d="M2 12.8799V11.1199C2 10.0799 2.85 9.21994 3.9 9.21994C5.71 9.21994 6.45 7.93994 5.54 6.36994C5.02 5.46994 5.33 4.29994 6.24 3.77994L7.97 2.78994C8.76 2.31994 9.78 2.59994 10.25 3.38994L10.36 3.57994C11.26 5.14994 12.74 5.14994 13.65 3.57994L13.76 3.38994C14.23 2.59994 15.25 2.31994 16.04 2.78994L17.77 3.77994C18.68 4.29994 18.99 5.46994 18.47 6.36994C17.56 7.93994 18.3 9.21994 20.11 9.21994C21.15 9.21994 22.01 10.0699 22.01 11.1199V12.8799C22.01 13.9199 21.16 14.7799 20.11 14.7799C18.3 14.7799 17.56 16.0599 18.47 17.6299C18.99 18.5399 18.68 19.6999 17.77 20.2199L16.04 21.2099C15.25 21.6799 14.23 21.3999 13.76 20.6099L13.65 20.4199C12.75 18.8499 11.27 18.8499 10.36 20.4199L10.25 20.6099C9.78 21.3999 8.76 21.6799 7.97 21.2099L6.24 20.2199C5.33 19.6999 5.02 18.5299 5.54 17.6299C6.45 16.0599 5.71 14.7799 3.9 14.7799C2.85 14.7799 2 13.9199 2 12.8799Z" stroke="#292D32" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/></svg>' | |
| 850 | + 'svgIcon' => '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M12 15C13.6569 15 15 13.6569 15 12C15 10.3431 13.6569 9 12 9C10.3431 9 9 10.3431 9 12C9 13.6569 10.3431 15 12 15Z" stroke="currentColor" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/><path d="M2 12.8799V11.1199C2 10.0799 2.85 9.21994 3.9 9.21994C5.71 9.21994 6.45 7.93994 5.54 6.36994C5.02 5.46994 5.33 4.29994 6.24 3.77994L7.97 2.78994C8.76 2.31994 9.78 2.59994 10.25 3.38994L10.36 3.57994C11.26 5.14994 12.74 5.14994 13.65 3.57994L13.76 3.38994C14.23 2.59994 15.25 2.31994 16.04 2.78994L17.77 3.77994C18.68 4.29994 18.99 5.46994 18.47 6.36994C17.56 7.93994 18.3 9.21994 20.11 9.21994C21.15 9.21994 22.01 10.0699 22.01 11.1199V12.8799C22.01 13.9199 21.16 14.7799 20.11 14.7799C18.3 14.7799 17.56 16.0599 18.47 17.6299C18.99 18.5399 18.68 19.6999 17.77 20.2199L16.04 21.2099C15.25 21.6799 14.23 21.3999 13.76 20.6099L13.65 20.4199C12.75 18.8499 11.27 18.8499 10.36 20.4199L10.25 20.6099C9.78 21.3999 8.76 21.6799 7.97 21.2099L6.24 20.2199C5.33 19.6999 5.02 18.5299 5.54 17.6299C6.45 16.0599 5.71 14.7799 3.9 14.7799C2.85 14.7799 2 13.9199 2 12.8799Z" stroke="currentColor" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/></svg>' | |
| 851 | + ], | |
| 852 | + 'calendar_events' => [ | |
| 853 | + 'type' => 'route', | |
| 854 | + 'visible' => true, | |
| 855 | + 'disable' => false, | |
| 856 | + 'route' => [ | |
| 857 | + 'name' => 'calendar_events', | |
| 858 | + 'params' => [ | |
| 859 | + 'calendar_id' => $calendar->id | |
| 860 | + ] | |
| 861 | + ], | |
| 862 | + 'label' => __('Event Types', 'fluent-booking'), | |
| 863 | + 'svgIcon' => '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8 6H21" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/><path d="M8 12H21" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/><path d="M8 18H21" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/><path d="M3 6H3.01" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><path d="M3 12H3.01" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><path d="M3 18H3.01" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>' | |
| 781 | 864 | ], |
| 782 | 865 | 'remote_calendars' => [ |
| 783 | 866 | 'type' => 'route', |
| 784 | 867 | 'visible' => true, |