getCommunityRoles(); $acceptedRoles = ['admin', 'moderator', 'course_admin', 'course_creator']; if (!$roles || !array_intersect($roles, $acceptedRoles)) { wp_safe_redirect(Helper::baseUrl()); exit(); } $isRtl = Helper::isRtl(); unset($vars['js_files']['fcom_app_admin']); if (!Utility::isDev()) { $vars['css_files']['fcom_admin_vendor'] = [ 'url' => Vite::getStaticSrcUrl('admin_app.css', $isRtl) ]; $vars['js_files']['fcom_app'] = [ 'url' => Vite::getStaticSrcUrl('admin_app.js'), 'deps' => [] ]; } else { $vars['css_files']['fcom_admin_vendor'] = [ 'url' => Vite::getDynamicSrcUrl('app_css.scss', $isRtl) ]; $vars['js_files']['fcom_app'] = [ 'url' => Vite::getDynamicSrcUrl('admin_app.js'), 'deps' => [] ]; } add_filter('fluent_community/header_vars', function ($vars) { $vars['menuItems'] = []; return $vars; }); add_filter('fluent_community/will_render_default_sidebar_items', '__return_false'); add_action('fluent_community/after_header_menu', function () { echo '

' . esc_html__('Portal Settings', 'fluent-community') . '

'; }); $settingsMenuItems = apply_filters('fluent_community/portal_settings_menu_items', $this->getPortalSettingsMenuItems()); $vars['js_vars']['fluentComAdmin']['portalSettingsMenus'] = $settingsMenuItems; $vars['js_vars']['fluentComAdmin']['portal_slug'] = ltrim(Helper::getPortalSlug(true), '/') . '/admin'; $vars['js_vars']['fluentComAdmin']['verified_email_senders'] = Utility::getVerifiedSenders(); return $vars; }); add_action('admin_enqueue_scripts', function () { if (isset($_GET['page']) && $_GET['page'] === 'fluent-community') { // phpcs:ignore WordPress.Security.NonceVerification.Recommended wp_enqueue_style('fluent_community_admin', Vite::getStaticSrcUrl('onboarding.css'), [], FLUENT_COMMUNITY_PLUGIN_VERSION); } }); // add a link to admin menu which will redirect to /portal add_action('admin_menu', function () { add_menu_page( 'FluentCommunity', 'FluentCommunity', 'edit_posts', 'fluent-community', [$this, 'showAdminPage'], $this->getMenuIcon(), 130 ); }); } public function getPortalSettingsMenuItems() { if (!Helper::isSiteAdmin()) { return []; } return [ 'settings' => [ 'label' => __('General', 'fluent-community'), 'route' => 'settings', 'icon_svg' => '' ], 'customization' => [ 'label' => __('Customizations', 'fluent-community'), 'route' => 'customization', 'icon_svg' => '' ], 'admin_moderators' => [ 'label' => __('Managers', 'fluent-community'), 'route' => 'admin_moderators', 'icon_svg' => '' ], 'email_notifications' => [ 'label' => __('Email Settings', 'fluent-community'), 'route' => 'email_notifications', 'icon_svg' => '' ], 'features' => [ 'label' => __('Features & Addons', 'fluent-community'), 'route' => 'features', 'icon_svg' => '' ], 'all_topics' => [ 'label' => __('Manage Topics', 'fluent-community'), 'route' => 'all_topics', 'icon_svg' => '' ], 'space_groups' => [ 'label' => __('Space Groups', 'fluent-community'), 'route' => 'space_groups', 'icon_svg' => '' ], 'menu_settings' => [ 'label' => __('Menu Settings', 'fluent-community'), 'route' => 'menu_settings', 'icon_svg' => '' ], 'content_moderation' => [ 'label' => __('Content Moderation', 'fluent-community'), 'route' => 'content_moderation', 'icon_svg' => '' ], 'privacy_settings' => [ 'label' => __('Privacy Settings', 'fluent-community'), 'route' => 'privacy_settings', 'icon_svg' => '' ], 'crm_access_config' => [ 'label' => __('Access Management', 'fluent-community'), 'route' => 'crm_access_config', 'icon_svg' => '' ], 'incoming_webhooks' => [ 'label' => __('Incoming Webhook', 'fluent-community'), 'route' => 'incoming_webhooks', 'icon_svg' => '' ], 'tools' => [ 'label' => __('Tools', 'fluent-community'), 'route' => 'tools', 'icon_svg' => '' ] ]; } public function showAdminPage() { $jsTags = ['fluent_community_onboarding']; add_filter('script_loader_tag', function ($tag, $handle) use ($jsTags) { if (!in_array($handle, $jsTags)) { return $tag; } $tag = str_replace(' src', ' type="module" src', $tag); return $tag; }, 10, 2); wp_enqueue_script('fluent_community_onboarding', Vite::getDynamicSrcUrl('Onboarding/onboarding.js'), ['jquery'], FLUENT_COMMUNITY_PLUGIN_VERSION, [ 'in_footer' => true, 'strategy' => 'defer', 'type' => 'module' ]); wp_localize_script('fluent_community_onboarding', 'fluentComAdmin', [ 'ajaxurl' => admin_url('admin-ajax.php'), 'rest' => $this->getRestInfo(), 'urls' => [ 'site_url' => home_url('/'), 'portal_base' => Helper::baseUrl('/'), 'permalink_url' => admin_url('options-permalink.php') ], 'i18n' => AdminTransStrings::getStrings(), 'logo' => Helper::assetUrl('images/logo.png'), 'is_admin' => Helper::isSiteAdmin(), 'is_onboarded' => !!Utility::getOption('onboarding_sub_settings'), 'permalink_structure' => get_option('permalink_structure'), 'is_slug_defined' => defined('FLUENT_COMMUNITY_PORTAL_SLUG'), 'has_pro' => defined('FLUENT_COMMUNITY_PRO_VERSION'), 'upgrade_url' => Utility::getProductUrl(false), 'settings_page_url' => admin_url('admin.php?page=fluent-community'), 'is_license_page' => isset($_GET['license']) && $_GET['license'] === 'yes', // phpcs:ignore WordPress.Security.NonceVerification.Recommended 'license_url_page' => defined('FLUENT_COMMUNITY_PRO_VERSION') ? admin_url('admin.php?page=fluent-community&license=yes') : '', ]); echo '
'; } private function getMenuIcon() { return 'data:image/svg+xml;base64,' . base64_encode(' '); } protected function getRestInfo() { $app = fluentCommunityApp(); $ns = $app->config->get('app.rest_namespace'); $v = $app->config->get('app.rest_version'); return [ 'base_url' => esc_url_raw(rest_url()), 'url' => rest_url($ns . '/' . $v), 'nonce' => wp_create_nonce('wp_rest'), 'namespace' => $ns, 'version' => $v, ]; } }