diff --git a/assets/vue/composables/sidebarMenu.js b/assets/vue/composables/sidebarMenu.js index 1d114456474..13fe15b61b7 100644 --- a/assets/vue/composables/sidebarMenu.js +++ b/assets/vue/composables/sidebarMenu.js @@ -257,6 +257,31 @@ export function useSidebarMenu() { } } + { + const roles = securityStore.user?.roles || [] + const isQuestionManager = + securityStore.isAdmin || + roles.includes("ROLE_QUESTION_MANAGER") + + if (isQuestionManager) { + const questionAdminItems = [ + { + label: t("Questions"), + url: "/main/admin/questions.php", + icon: "mdi mdi-comment-question-outline", + class: "pl-4", + }, + ] + + items.push({ + icon: "mdi mdi-comment-question-outline", + label: t("Question manager"), + items: questionAdminItems, + expanded: isActive({ items: questionAdminItems }), + }) + } + } + if (showTabs.value.includes("session_admin") && (securityStore.isAdmin || securityStore.isSessionAdmin)) { const sessionAdminItems = [ { diff --git a/public/main/admin/questions.php b/public/main/admin/questions.php index db69552a91d..fb835fc7711 100644 --- a/public/main/admin/questions.php +++ b/public/main/admin/questions.php @@ -18,7 +18,14 @@ $this_section = SECTION_PLATFORM_ADMIN; -api_protect_admin_script(); +$user = api_get_current_user(); + +if (!api_is_platform_admin() && (!$user || !$user->hasRole('ROLE_QUESTION_MANAGER'))) { + api_not_allowed(true); + return false; +} + +api_block_inactive_user(); Session::erase('objExercise'); Session::erase('objQuestion'); @@ -355,9 +362,14 @@ exit; } +$backUrl = Container::getRouter()->generate('admin'); +if ($user->hasRole('ROLE_QUESTION_MANAGER')) { + $backUrl = Container::getRouter()->generate('index'); +} + $actionsLeft = Display::url( Display::return_icon('back.png', get_lang('Administration'), [], ICON_SIZE_MEDIUM), - Container::getRouter()->generate('admin'), + $backUrl, ); $exportUrl = '/main/admin/questions.php?'.http_build_query(['action' => 'export_pdf', ...$params]); diff --git a/src/CoreBundle/Enums/ObjectIcon.php b/src/CoreBundle/Enums/ObjectIcon.php index 9676510a19f..8dc470d1a07 100644 --- a/src/CoreBundle/Enums/ObjectIcon.php +++ b/src/CoreBundle/Enums/ObjectIcon.php @@ -156,4 +156,7 @@ enum ObjectIcon: string case CATALOGUE = 'bookmark-multiple-outline'; case EVENT_REMINDER = 'alarm'; + // Question icon + case QUESTION = 'comment-question-outline'; + }