Uname: Linux webm012.cluster130.gra.hosting.ovh.net 5.15.167-ovh-vps-grsec-zfs-classid #1 SMP Tue Sep 17 08:14:20 UTC 2024 x86_64
Software: Apache
PHP version: 8.0.30 [ PHP INFO ] PHP os: Linux
Server Ip: 145.239.37.162
Your Ip: 216.73.216.190
User: dreampi (1009562) | Group: users (100)
Safe Mode: OFF
Disable Function:
_dyuweyrj4,_dyuweyrj4r,dl

name : AdminMenuHandler.php
<?php

namespace FluentBooking\App\Hooks\Handlers;

use FluentBooking\App\App;
use FluentBooking\App\Models\Calendar;
use FluentBooking\App\Models\CalendarSlot;
use FluentBooking\App\Services\DateTimeHelper;
use FluentBooking\App\Services\Helper;
use FluentBooking\App\Services\PermissionManager;
use FluentBooking\App\Services\TransStrings;

class AdminMenuHandler
{
    public function register()
    {
        add_action('admin_menu', [$this, 'add']);

        add_action('admin_enqueue_scripts', function () {
            if (!isset($_REQUEST['page']) || $_REQUEST['page'] != 'fluent-booking') { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
                return;
            }
            $this->enqueueAssets();
        }, 100);
    }

    public function add()
    {
        $capability = PermissionManager::getMenuPermission();
        $menuPriority = 26;

        if (defined('FLUENTCRM')) {
            $menuPriority = 4;
        }

        add_menu_page(
            __('Fluent Booking', 'fluent-booking'),
            __('Fluent Booking', 'fluent-booking'),
            $capability,
            'fluent-booking',
            [$this, 'render'],
            $this->getMenuIcon(),
            $menuPriority
        );

        add_submenu_page(
            'fluent-booking',
            __('Dashboard', 'fluent-booking'),
            __('Dashboard', 'fluent-booking'),
            $capability,
            'fluent-booking',
            [$this, 'render']
        );

        add_submenu_page(
            'fluent-booking',
            __('Calendars', 'fluent-booking'),
            __('Calendars', 'fluent-booking'),
            $capability,
            'fluent-booking#/calendars',
            [$this, 'render']
        );

        add_submenu_page(
            'fluent-booking',
            __('Bookings', 'fluent-booking'),
            __('Bookings', 'fluent-booking'),
            $capability,
            'fluent-booking#/scheduled-events',
            [$this, 'render']
        );

        add_submenu_page(
            'fluent-booking',
            __('Availability', 'fluent-booking'),
            __('Availability', 'fluent-booking'),
            $capability,
            'fluent-booking#/availability',
            [$this, 'render']
        );

        add_submenu_page(
            'fluent-booking',
            __('Settings', 'fluent-booking'),
            __('Settings', 'fluent-booking'),
            'manage_options',
            'fluent-booking#/settings/general-settings',
            [$this, 'render']
        );
    }

    public function render()
    {
        if (!as_has_scheduled_action('fluent_booking_five_minutes_tasks')) {
            as_schedule_recurring_action(time(), (60 * 5), 'fluent_booking_five_minutes_tasks', [], 'fluent-booking', true);
        }

        $this->changeFooter();
        $app = App::getInstance();

        $config = $app->config;

        $name = $config->get('app.name');

        $slug = $config->get('app.slug');

        $baseUrl = Helper::getAppBaseUrl();

        if (is_admin()) {
            $baseUrl = admin_url('admin.php?page=fluent-booking#/');
        }

        $isNew = $this->isNew();

        $menuItems = [
            [
                'key'       => 'dashboard',
                'label'     => $isNew ? __('Getting Started', 'fluent-booking') : __('Dashboard', 'fluent-booking'),
                'permalink' => $baseUrl
            ],
            [
                'key'       => 'calendars',
                'label'     => __('Calendars', 'fluent-booking'),
                'permalink' => $baseUrl . 'calendars'
            ],
            [
                'key'       => 'scheduled-events',
                'label'     => __('Bookings', 'fluent-booking'),
                'permalink' => $baseUrl . 'scheduled-events?period=upcoming&author=me',
            ],
            [
                'key'       => 'availability',
                'label'     => __('Availability', 'fluent-booking'),
                'permalink' => $baseUrl . 'availability'
            ]
        ];

        if (current_user_can('manage_options')) {
            $menuItems[] = [
                'key'       => 'settings',
                'label'     => __('Settings', 'fluent-booking'),
                'permalink' => $baseUrl . 'settings/general-settings'
            ];
        }

        if (!defined('FLUENT_BOOKING_PRO_DIR_FILE')) {
            $menuItems[] = [
                'key'       => 'buy',
                'label'     => __('Upgrade to Pro', 'fluent-booking'),
                'permalink' => Helper::getUpgradeUrl()
            ];
        }

        $menuItems = apply_filters('fluent_booking/admin_menu_items', $menuItems);

        $assets = $app['url.assets'];

        $portalVars = apply_filters('fluent_booking/admin_portal_vars', [
            'name'      => $name,
            'slug'      => $slug,
            'menuItems' => $menuItems,
            'baseUrl'   => $baseUrl,
            'logo'      => $assets . 'images/logo.svg',
        ]);

        $app->view->render('admin.menu', $portalVars);
    }

    public function changeFooter()
    {
        add_filter('admin_footer_text', function ($content) {
            $url = 'https://fluentbooking.com/';
            /* translators: %s: URL of the FluentBooking website */
            return sprintf(wp_kses(__('Thank you for using <a href="%s">FluentBooking</a>.', 'fluent-booking'), array('a' => array('href' => array()))), esc_url($url)) . '<span title="based on your WP timezone settings" style="margin-left: 10px;" data-timestamp="' . current_time('timestamp') . '" id="fcal_server_timestamp"></span>';
        });

        add_filter('update_footer', function ($text) {
            return FLUENT_BOOKING_VERSION;
        });
    }

    public function enqueueAssets()
    {
        $app = App::getInstance();

        $isRtl = Helper::fluentbooking_is_rtl();

        $assets = $app['url.assets'];

        $slug = $app->config->get('app.slug');

        $adminAppCss = 'admin/admin.css';
        if ($isRtl) {
            $adminAppCss = 'admin/admin-rtl.css';
            wp_enqueue_style('fluentbooking_admin_rtl', $assets . 'admin/fluentbooking_admin_rtl.css', [], FLUENT_BOOKING_ASSETS_VERSION);
        }

        add_action('wp_print_scripts', function () {

            $isSkip = apply_filters('fluent_booking/skip_no_conflict', false, 'scripts');

            if ($isSkip) {
                return;
            }

            global $wp_scripts;
            if (!$wp_scripts) {
                return;
            }

            $approvedSlugs = apply_filters('fluent_booking/asset_listed_slugs', [
                '\/fluent-crm\/'
            ]);

            $approvedSlugs[] = '\/fluent-booking\/';
            $approvedSlugs[] = '\/fluent-booking-pro\/';

            $approvedSlugs = array_unique($approvedSlugs);

            $approvedSlugs = implode('|', $approvedSlugs);

            $pluginUrl = plugins_url();

            $pluginUrl = str_replace(['http:', 'https:'], '', $pluginUrl);

            foreach ($wp_scripts->queue as $script) {
                if (empty($wp_scripts->registered[$script]) || empty($wp_scripts->registered[$script]->src)) {
                    continue;
                }

                $src = $wp_scripts->registered[$script]->src;
                $isMatched = (strpos($src, $pluginUrl) !== false) && !preg_match('/' . $approvedSlugs . '/', $src);
                if (!$isMatched) {
                    continue;
                }
                wp_dequeue_script($wp_scripts->registered[$script]->handle);
            }
        });

        add_action('wp_print_styles', function () {
            $isSkip = apply_filters('fluent_booking/skip_no_conflict', false, 'styles');

            if ($isSkip) {
                return;
            }

            global $wp_styles;
            if (!$wp_styles) {
                return;
            }

            $approvedSlugs = apply_filters('fluent_booking/asset_listed_slugs', [
                '\/fluent-crm\/'
            ]);

            $approvedSlugs[] = '\/fluent-booking\/';
            $approvedSlugs[] = '\/fluent-booking-pro\/';

            $approvedSlugs = array_unique($approvedSlugs);

            $approvedSlugs = implode('|', $approvedSlugs);

            $pluginUrl = plugins_url();

            $themeUrl = get_theme_root_uri();

            $pluginUrl = str_replace(['http:', 'https:'], '', $pluginUrl);
            $themeUrl = str_replace(['http:', 'https:'], '', $themeUrl);

            foreach ($wp_styles->queue as $script) {

                if (empty($wp_styles->registered[$script]) || empty($wp_styles->registered[$script]->src)) {
                    continue;
                }

                $src = $wp_styles->registered[$script]->src;
                $pluginMatched = (strpos($src, $pluginUrl) !== false) && !preg_match('/' . $approvedSlugs . '/', $src);
                $themeMatched = (strpos($src, $themeUrl) !== false) && !preg_match('/' . $approvedSlugs . '/', $src);

                if (!$pluginMatched && !$themeMatched) {
                    continue;
                }

                wp_dequeue_style($wp_styles->registered[$script]->handle);
            }
        }, 999999);

        wp_enqueue_style('fluent_booing_admin_app', $assets . $adminAppCss, [], FLUENT_BOOKING_ASSETS_VERSION, 'all');

        do_action($slug . '_loading_app');

        wp_enqueue_script(
            $slug . '_admin_app',
            $assets . 'admin/app.js',
            array('jquery'),
            FLUENT_BOOKING_ASSETS_VERSION,
            true
        );

        wp_enqueue_script(
            $slug . '_global_admin',
            $assets . 'admin/global_admin.js',
            array(),
            FLUENT_BOOKING_ASSETS_VERSION,
            true
        );

        if (function_exists('wp_enqueue_editor')) {
            add_filter('user_can_richedit', '__return_true');
            wp_enqueue_editor();
            wp_enqueue_media();
        }

        wp_localize_script($slug . '_admin_app', 'fluentFrameworkAdmin', $this->getDashboardVars($app));
    }

    public function getDashboardVars($app)
    {
        $assets = $app['url.assets'];
        $currentUser = get_user_by('ID', get_current_user_id());

        $currentUsername = trim($currentUser->first_name . ' ' . $currentUser->last_name);
        if (!$currentUsername) {
            $currentUsername = $currentUser->display_name;
        }

        $isNew = $this->isNew();

        $requireSlug = false;

        if ($isNew) {
            $result = $this->maybeAutoCreateCalendar($currentUser);
            if (!$result) {
                $requireSlug = true;
            }
        }

        $calendarId = null;

        $firstCalendar = Calendar::where('user_id', $currentUser->ID)->where('type', 'simple')->first();

        if ($firstCalendar) {
            $calendarId = $firstCalendar->id;
        }

        $hasAllAccess = false;
        if (PermissionManager::hasAllCalendarAccess()) {
            $hasAllAccess = true;
        }

        $eventColors = Helper::getEventColors();
        $meetingDurations = Helper::getMeetingDurations();
        $multiDurations = Helper::getMeetingMultiDurations();
        $durationLookup = Helper::getDurationLookup();
        $multiDurationLookup = Helper::getDurationLookup(true);
        $scheduleSchema = Helper::getWeeklyScheduleSchema();
        $bufferTimes = Helper::getBufferTimes();
        $slotIntervals = Helper::getSlotIntervals();
        $customFieldTypes = Helper::getCustomFieldTypes();
        $weekSelectTimes = Helper::getWeekSelectTimes();
        $overrideSelectTimes = Helper::getOverrideSelectTimes();
        $statusChangingTimes = Helper::getBookingStatusChangingTimes();
        $defaultTermsAndConditions = Helper::getDefaultTermsAndConditions();
        $locationFields = (new CalendarSlot())->getLocationFields();

        return apply_filters('fluent_booking/admin_vars', [
            'slug'                   => $slug = $app->config->get('app.slug'),
            'nonce'                  => wp_create_nonce($slug),
            'rest'                   => $this->getRestInfo($app),
            'brand_logo'             => $this->getMenuIcon(),
            'asset_url'              => $assets,
            'event_colors'           => $eventColors,
            'meeting_durations'      => $meetingDurations,
            'multi_durations'        => $multiDurations,
            'buffer_times'           => $bufferTimes,
            'slot_intervals'         => $slotIntervals,
            'schedule_schema'        => $scheduleSchema,
            'location_fields'        => $locationFields,
            'custom_field_types'     => $customFieldTypes,
            'week_select_times'      => $weekSelectTimes,
            'duration_lookup'        => $durationLookup,
            'multi_duration_lookup'  => $multiDurationLookup,
            'override_select_times'  => $overrideSelectTimes,
            'status_changing_times'  => $statusChangingTimes,
            'default_terms'          => $defaultTermsAndConditions,
            'me'                     => [
                'id'          => $currentUser->ID,
                'calendar_id' => $calendarId,
                'full_name'   => $currentUsername,
                'email'       => $currentUser->user_email,
                'is_admin'    => $hasAllAccess,
                'permissions' => PermissionManager::getUserPermissions($currentUser, false),
            ],
            'all_hosts'              => Calendar::getAllHosts(),
            'is_new'                 => $isNew,
            'require_slug'           => $requireSlug,
            'site_url'               => site_url('/'),
            'upgrade_url'            => Helper::getUpgradeUrl(),
            'timezones'              => DateTimeHelper::getTimeZones(true),
            'supported_features'     => apply_filters('fluent_booking/supported_featured', [
                'multi_users' => true
            ]),
            'i18'                    => [
                'date_time_config' => DateTimeHelper::getI18nDateTimeConfig(),
            ],
            'has_pro'                => defined('FLUENT_BOOKING_PRO_DIR_FILE'),
            'require_upgrade'        => defined('FLUENT_BOOKING_PRO_DIR_FILE') && !defined('FLUENT_BOOKING_LITE'),
            'dashboard_notices'      => apply_filters('fluent_booking/dashboard_notices', []),
            'trans'                  => TransStrings::getStrings(),
            'date_format'            => DateTimeHelper::getDateFormatter(true),
            'time_format'            => DateTimeHelper::getTimeFormatter(true),
            'date_time_formatter'    => DateTimeHelper::getDateFormatter(true) . ', ' . DateTimeHelper::getTimeFormatter(true),
            'available_date_formats' => DateTimeHelper::getAvailableDateFormats(),
            'admin_url'              => admin_url(),
            'is_rtl'                 => Helper::fluentbooking_is_rtl()
        ]);
    }

    protected function getRestInfo($app)
    {
        $ns = $app->config->get('app.rest_namespace');
        $ver = $app->config->get('app.rest_version');

        return [
            'base_url'  => esc_url_raw(rest_url()),
            'url'       => rest_url($ns . '/' . $ver),
            'nonce'     => wp_create_nonce('wp_rest'),
            'namespace' => $ns,
            'version'   => $ver
        ];
    }

    protected function getMenuIcon()
    {
        return 'data:image/svg+xml;base64,' . base64_encode('<svg width="96" height="101" viewBox="0 0 96 101" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="25.5746" width="6.39365" height="15.9841" rx="3.19683" fill="white"/><rect x="63.9365" width="6.39365" height="15.9841" rx="3.19683" fill="white"/><path fill-rule="evenodd" clip-rule="evenodd" d="M54.878 53.0655C54.544 55.6678 53.4646 58.035 51.8535 59.9427C50.1623 61.9572 47.886 63.4614 45.2863 64.1988L45.1741 64.2309L44.9203 64.2976L44.8989 64.303L24.7671 69.7V65.019C24.7671 64.9148 24.7671 64.8106 24.7778 64.7064C24.8953 62.748 26.127 61.0862 27.8476 60.3514C28.0427 60.2659 28.2431 60.1938 28.4515 60.1377L28.6412 60.0869L54.8753 53.0575V53.0655H54.878Z" fill="white"/><path fill-rule="evenodd" clip-rule="evenodd" d="M71.1411 35.8059C70.4571 41.1467 66.6178 45.5017 61.5494 46.9391L61.4372 46.9712L61.1861 47.038H61.1834L61.162 47.0433L24.7671 56.7953V52.1144C24.7671 50.0197 26.0362 48.2216 27.8476 47.4468L28.4515 47.233L28.6385 47.1823L71.1384 35.7952V35.8059H71.1411Z" fill="white"/><path fill-rule="evenodd" clip-rule="evenodd" d="M19.9802 11.1889H75.9246C83.4282 11.1889 89.5111 17.2718 89.5111 24.7754V70H95.9048V24.7754C95.9048 13.7406 86.9593 4.79523 75.9246 4.79523H19.9802C8.94542 4.79523 0 13.7406 0 24.7754V80.7198C0 91.7546 8.94542 100.7 19.9802 100.7L64.9524 100.7V94.3063H19.9802C12.4765 94.3063 6.39365 88.2234 6.39365 80.7198V24.7754C6.39365 17.2718 12.4765 11.1889 19.9802 11.1889Z" fill="white"/><path fill-rule="evenodd" clip-rule="evenodd" d="M95.9524 70.7477V69.7H64.9524V100.7H66.0001L95.9524 70.7477Z" fill="white"/></svg>');
    }

    protected function isNew()
    {
        return apply_filters('fluent_booking/is_new', !Calendar::first());
    }

    /**
     * @param $user \WP_User
     * @return bool | Calendar
     */
    protected function maybeAutoCreateCalendar($user)
    {
        if (!apply_filters('fluent_booking/auto_create_calendar', false, $user)) {
            return false;
        }

        $userName = $user->user_login;

        if (is_email($userName)) {
            $userName = explode('@', $userName);
            $userName = $userName[0];
        }

        if (!Helper::isCalendarSlugAvailable($userName, true)) {
            return false;
        }

        $personName = trim($user->first_name . ' ' . $user->last_name);

        if (!$personName) {
            $personName = $user->display_name;
        }

        $data = [
            'user_id' => $user->ID,
            'title'   => $personName,
            'slug'    => $userName
        ];

        return Calendar::create($data);
    }

    public static function settingsMenuItems()
    {
        $app = App::getInstance();
        $urlAssets = $app['url.assets'];

        return apply_filters('fluent_booking/settings_menu_items', [
            'general_settings'    => [
                'title'          => __('General Settings', 'fluent-booking'),
                'disable'        => false,
                'el_icon'        => 'Operation',
                'component_type' => 'StandAloneComponent',
                'class'          => 'general_settings',
                'route'          => [
                    'name' => 'general_settings'
                ]
            ],
            'team_members'        => [
                'title'          => __('Team', 'fluent-booking'),
                'disable'        => true,
                'el_icon'        => 'TeamIcon',
                'component_type' => 'StandAloneComponent',
                'class'          => 'team_members',
                'route'          => [
                    'name' => 'team_members'
                ]
            ],
            'google'              => [
                'title'          => __('Google Calendar / Meet', 'fluent-booking'),
                'disable'        => true,
                'icon_url'       => $urlAssets . 'images/gg-calendar.svg',
                'component_type' => 'StandAloneComponent',
                'class'          => 'configure_google_calendar',
                'route'          => [
                    'name' => 'configure-google'
                ]
            ],
            'outlook'             => [
                'title'          => __('Outlook Calendar / MS Teams', 'fluent-booking'),
                'disable'        => true,
                'icon_url'       => $urlAssets . 'images/ol-icon-color.svg',
                'component_type' => 'GlobalSettingsComponent',
                'class'          => 'configure_outlook_calendar',
                'route'          => [
                    'name'   => 'configure-integrations',
                    'params' => [
                        'settings_key' => 'outlook'
                    ]
                ]
            ],
            'apple_calendar'      => [
                'title'          => __('Apple Calendar', 'fluent-booking'),
                'disable'        => true,
                'icon_url'       => $urlAssets . 'images/a-cal.svg',
                'component_type' => 'GlobalSettingsComponent',
                'class'          => 'configure_apple_calendar',
                'route'          => [
                    'name'   => 'configure-integrations',
                    'params' => [
                        'settings_key' => 'apple_calendar'
                    ]
                ]
            ],
            'next_cloud_calendar' => [
                'title'          => __('Nextcloud Calendar', 'fluent-booking'),
                'disable'        => true,
                'icon_url'       => $urlAssets . 'images/Ncloud.svg',
                'component_type' => 'GlobalSettingsComponent',
                'class'          => 'configure_nextcloud_calendar',
                'route'          => [
                    'name'   => 'configure-integrations',
                    'params' => [
                        'settings_key' => 'next_cloud_calendar'
                    ]
                ]
            ],
            'zoom_meeting'        => [
                'title'          => __('Zoom', 'fluent-booking'),
                'disable'        => true,
                'icon_url'       => $urlAssets . 'images/zoom.svg',
                'component_type' => 'StandAloneComponent',
                'class'          => 'zoom_integrations',
                'route'          => [
                    'name' => 'zoom_integrations'
                ]
            ],
            'twilio'              => [
                'title'          => __('SMS by Twilio', 'fluent-booking'),
                'disable'        => true,
                'icon_url'       => $urlAssets . 'images/tw.svg',
                'component_type' => 'GlobalSettingsComponent',
                'class'          => 'configure_twilio',
                'route'          => [
                    'name'   => 'configure-integrations',
                    'params' => [
                        'settings_key' => 'twilio'
                    ]
                ]
            ],
            'stripe'              => [
                'title'          => __('Stripe', 'fluent-booking'),
                'disable'        => true,
                'icon_url'       => $urlAssets . 'images/payment-methods/stripe.svg',
                'component_type' => 'GlobalSettingsComponent',
                'class'          => 'stripe_payment',
                'route'          => [
                    'name'   => 'PaymentSettingsIndex',
                    'params' => [
                        'settings_key' => 'stripe'
                    ]
                ]
            ],
            'paypal'              => [
                'title'          => __('PayPal', 'fluent-booking'),
                'disable'        => true,
                'icon_url'       => $urlAssets . 'images/payment-methods/paypal.svg',
                'component_type' => 'GlobalSettingsComponent',
                'class'          => 'paypal_payment',
                'route'          => [
                    'name'   => 'PaymentSettingsIndex',
                    'params' => [
                        'settings_key' => 'paypal'
                    ]
                ]
            ],
            'offline'             => [
                'title'          => __('Offline Payment', 'fluent-booking'),
                'disable'        => true,
                'icon_url'       => $urlAssets . 'images/payment-methods/offline.svg',
                'component_type' => 'GlobalSettingsComponent',
                'class'          => 'offline_payment',
                'route'          => [
                    'name' => 'PaymentSettingsIndex',
                    'params' => [
                        'settings_key' => 'offline'
                    ]
                ]
            ],
            'license'             => [
                'title'          => __('License', 'fluent-booking'),
                'disable'        => true,
                'el_icon'        => 'Lock',
                'component_type' => 'StandAloneComponent',
                'class'          => 'configure_license',
                'route'          => [
                    'name' => 'license'
                ]
            ],
        ]);
    }

    public static function getEventSettingsMenuItems($event)
    {
        return apply_filters('fluent_booking/calendar_event_setting_menu_items', [
            'event_details'         => [
                'type'    => 'route',
                'visible' => true,
                'disable' => false,
                'route'   => [
                    'name'   => 'event_details',
                    'params' => [
                        'calendar_id' => $event->calendar_id,
                        'event_id'    => $event->id
                    ]
                ],
                'label'   => __('Event Details', 'fluent-booking'),
                '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>'
            ],
            'assignment'            => [
                'type'    => 'route',
                'visible' => false,
                'disable' => true,
                'route'   => [
                    'name'   => 'assignment',
                    'params' => [
                        'calendar_id' => $event->calendar_id,
                        'event_id'    => $event->id
                    ]
                ],
                'label'   => __('Assignment', 'fluent-booking'),
                'svgIcon' => '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="mr-2 h-[16px] w-[16px] stroke-[2px] ltr:mr-2 rtl:ml-2 md:mt-px" data-testid="icon-component"><path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"></path><circle cx="9" cy="7" r="4"></circle><path d="M22 21v-2a4 4 0 0 0-3-3.87"></path><path d="M16 3.13a4 4 0 0 1 0 7.75"></path></svg>'
            ],
            'availability_settings' => [
                'type'    => 'route',
                'visible' => true,
                'disable' => false,
                'route'   => [
                    'name'   => 'availability_settings',
                    'params' => [
                        'calendar_id' => $event->calendar_id,
                        'event_id'    => $event->id
                    ]
                ],
                'label'   => __('Availability', 'fluent-booking'),
                '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>'
            ],
            'limit_settings'        => [
                'type'    => 'route',
                'visible' => true,
                'disable' => false,
                'route'   => [
                    'name'   => 'limit_settings',
                    'params' => [
                        'calendar_id' => $event->calendar_id,
                        'event_id'    => $event->id
                    ]
                ],
                'label'   => __('Limits', 'fluent-booking'),
                'elIcon'  => 'Clock'
            ],
            'question_settings'     => [
                'type'    => 'route',
                'visible' => true,
                'disable' => false,
                'route'   => [
                    'name'   => 'question_settings',
                    'params' => [
                        'calendar_id' => $event->calendar_id,
                        'event_id'    => $event->id
                    ]
                ],
                'label'   => __('Question Settings', 'fluent-booking'),
                '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>'
            ],
            'email_notification'    => [
                'type'    => 'route',
                'visible' => true,
                'disable' => false,
                'route'   => [
                    'name'   => 'email_notification',
                    'params' => [
                        'calendar_id' => $event->calendar_id,
                        'event_id'    => $event->id
                    ]
                ],
                'label'   => __('Email Notification', 'fluent-booking'),
                'elIcon'  => 'Message'
            ],
            'sms_notification'      => [
                'type'    => 'route',
                'visible' => true,
                'disable' => true,
                'route'   => [
                    'name'   => 'sms_notification',
                    'params' => [
                        'calendar_id' => $event->calendar_id,
                        'event_id'    => $event->id
                    ]
                ],
                'label'   => __('SMS Notification', 'fluent-booking'),
                'elIcon'  => 'Notification'
            ],
            'advanced_settings'     => [
                'type'    => 'route',
                'visible' => true,
                'disable' => true,
                'route'   => [
                    'name'   => 'advanced_settings',
                    'params' => [
                        'calendar_id' => $event->calendar_id,
                        'event_id'    => $event->id
                    ]
                ],
                'label'   => __('Advanced Settings', 'fluent-booking'),
                'elIcon'  => 'Operation'
            ],
            'payment_settings'      => [
                'type'    => 'route',
                'visible' => true,
                'disable' => true,
                'route'   => [
                    'name'   => 'payment_settings',
                    'params' => [
                        'calendar_id' => $event->calendar_id,
                        'event_id'    => $event->id
                    ]
                ],
                'label'   => __('Payment Settings', 'fluent-booking'),
                'elIcon'  => 'Money'
            ],
            'webhook_settings'      => [
                'type'    => 'route',
                'visible' => true,
                'disable' => true,
                'route'   => [
                    'name'   => 'webhook_settings',
                    'params' => [
                        'calendar_id' => $event->calendar_id,
                        'event_id'    => $event->id
                    ]
                ],
                'label'   => __('Webhooks Feeds', 'fluent-booking'),
                'elIcon'  => 'Link'
            ],
            'integrations'          => [
                'type'    => 'route',
                'visible' => true,
                'disable' => false,
                'route'   => [
                    'name'   => 'integrations',
                    'params' => [
                        'calendar_id' => $event->calendar_id,
                        'event_id'    => $event->id
                    ]
                ],
                'label'   => __('Integrations', 'fluent-booking'),
                'elIcon'  => 'Connection'
            ]
        ], $event);
    }

    public static function getCalendarSettingsMenuItems($calendar)
    {
        return apply_filters('fluent_booking/calendar_setting_menu_items', [
            'calendar_settings' => [
                'type'    => 'route',
                'visible' => true,
                'disable' => false,
                'route'   => [
                    'name'   => 'calendar_settings',
                    'params' => [
                        'calendar_id' => $calendar->id
                    ]
                ],
                'label'   => __('Calendar Settings', 'fluent-booking'),
                '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>'
            ],
            'remote_calendars'  => [
                'type'    => 'route',
                'visible' => true,
                'disable' => true,
                'route'   => [
                    'name'   => 'remote_calendars',
                    'params' => [
                        'calendar_id' => $calendar->id
                    ]
                ],
                'label'   => __('Remote Calendars', 'fluent-booking'),
                'svgIcon' => '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="mr-2 h-[16px] w-[16px] stroke-[2px] ltr:mr-2 rtl:ml-2 md:mt-0" data-testid="icon-component"><rect width="18" height="18" x="3" y="4" rx="2" ry="2"></rect><line x1="16" x2="16" y1="2" y2="6"></line><line x1="8" x2="8" y1="2" y2="6"></line><line x1="3" x2="21" y1="10" y2="10"></line></svg>'
            ],
            'zoom_meeting'      => [
                'type'    => 'route',
                'visible' => true,
                'disable' => true,
                'route'   => [
                    'name'   => 'user_zoom_integration',
                    'params' => [
                        'calendar_id' => $calendar->id
                    ]
                ],
                'label'   => __('Zoom Integration', 'fluent-booking'),
                'svgIcon' => '<svg xmlns="http://www.w3.org/2000/svg"  viewBox="0 0 48 48" width="48px" height="48px"><circle cx="24" cy="24" r="20" fill="#2196f3"/><path fill="#fff" d="M29,31H14c-1.657,0-3-1.343-3-3V17h15c1.657,0,3,1.343,3,3V31z"/><polygon fill="#fff" points="37,31 31,27 31,21 37,17"/></svg>'
            ]
        ], $calendar);
    }
}

© 2026 GrazzMean-Shell