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,
];
}
}