From 15c819944687b0995b05545719894a9a27fd5127 Mon Sep 17 00:00:00 2001 From: Christian Cueni Date: Wed, 25 Sep 2024 07:43:09 +0200 Subject: [PATCH 1/6] Fix set update --- server/vbv_lernwelt/sso/admin.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/vbv_lernwelt/sso/admin.py b/server/vbv_lernwelt/sso/admin.py index 01d57e66..1db24124 100644 --- a/server/vbv_lernwelt/sso/admin.py +++ b/server/vbv_lernwelt/sso/admin.py @@ -40,12 +40,12 @@ def sync_sso_roles_from_admin(user: User, request): for csu in CourseSessionUser.objects.filter(user=user) } - course_roles += { + course_roles.update( (relation.participant.course_session.course.slug, "LEARNING_MENTOR") for relation in AgentParticipantRelation.objects.filter( agent=user, role=AgentParticipantRoleType.LEARNING_MENTOR.value ) - } + ) for csg in CourseSessionGroup.objects.filter(supervisor=user): for course_session in csg.course_session.all(): From b682c5561f710927dc7efa8d8e48a7861253352d Mon Sep 17 00:00:00 2001 From: Elia Bieri Date: Wed, 25 Sep 2024 10:37:15 +0200 Subject: [PATCH 2/6] Only show cockpit and preview link when in CS --- client/src/components/header/MainNavigationBar.vue | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/client/src/components/header/MainNavigationBar.vue b/client/src/components/header/MainNavigationBar.vue index 1f478161..8b2f7ca8 100644 --- a/client/src/components/header/MainNavigationBar.vue +++ b/client/src/components/header/MainNavigationBar.vue @@ -90,12 +90,17 @@ const hasMediaLibraryMenu = computed(() => ) ); -const hasCockpitMenu = computed(() => - Boolean(courseSessionsStore.currentCourseSession?.actions.includes("expert-cockpit")) +const hasCockpitMenu = computed( + () => + Boolean( + courseSessionsStore.currentCourseSession?.actions.includes("expert-cockpit") + ) && inCourse() ); -const hasPreviewMenu = computed(() => - Boolean(courseSessionsStore.currentCourseSession?.actions.includes("preview")) +const hasPreviewMenu = computed( + () => + Boolean(courseSessionsStore.currentCourseSession?.actions.includes("preview")) && + inCourse() ); const hasAppointmentsMenu = computed(() => From fd9f2162c52acad034b24299449b2a9a866a74c5 Mon Sep 17 00:00:00 2001 From: Elia Bieri Date: Wed, 25 Sep 2024 11:03:50 +0200 Subject: [PATCH 3/6] Remove CS switcher when not in course --- client/src/components/header/AccountMenuContent.vue | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/client/src/components/header/AccountMenuContent.vue b/client/src/components/header/AccountMenuContent.vue index a8cda83f..c70f966b 100644 --- a/client/src/components/header/AccountMenuContent.vue +++ b/client/src/components/header/AccountMenuContent.vue @@ -2,6 +2,7 @@ import CourseSessionsMenu from "@/components/header/CourseSessionsMenu.vue"; import type { User } from "@/stores/user"; import type { CourseSession } from "@/types"; +import { useRouteLookups } from "@/utils/route"; import { useRouter } from "vue-router"; const props = defineProps<{ @@ -13,6 +14,7 @@ const props = defineProps<{ const emit = defineEmits(["selectCourseSession", "logout", "close"]); const router = useRouter(); +const { inCourse } = useRouteLookups(); async function navigate(routeName: string) { await router.push({ name: routeName }); @@ -41,7 +43,7 @@ async function navigate(routeName: string) { -
+
Date: Wed, 25 Sep 2024 13:27:32 +0200 Subject: [PATCH 4/6] Minor refactor --- client/src/components/header/AccountMenuContent.vue | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/client/src/components/header/AccountMenuContent.vue b/client/src/components/header/AccountMenuContent.vue index c70f966b..7f38ea98 100644 --- a/client/src/components/header/AccountMenuContent.vue +++ b/client/src/components/header/AccountMenuContent.vue @@ -3,6 +3,7 @@ import CourseSessionsMenu from "@/components/header/CourseSessionsMenu.vue"; import type { User } from "@/stores/user"; import type { CourseSession } from "@/types"; import { useRouteLookups } from "@/utils/route"; +import { computed } from "vue"; import { useRouter } from "vue-router"; const props = defineProps<{ @@ -16,6 +17,8 @@ const emit = defineEmits(["selectCourseSession", "logout", "close"]); const router = useRouter(); const { inCourse } = useRouteLookups(); +const showCourseSessionMenu = computed(() => inCourse() && props.courseSessions.length); + async function navigate(routeName: string) { await router.push({ name: routeName }); emit("close"); @@ -43,7 +46,7 @@ async function navigate(routeName: string) {
-
+
Date: Thu, 26 Sep 2024 11:47:16 +0200 Subject: [PATCH 5/6] Use client_id to avoid error message in new Keycloak version --- client/src/stores/user.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/stores/user.ts b/client/src/stores/user.ts index 5280d4c5..1f41d130 100644 --- a/client/src/stores/user.ts +++ b/client/src/stores/user.ts @@ -10,7 +10,7 @@ let logoutRedirectUrl = import.meta.env.VITE_LOGOUT_REDIRECT || "/"; if (import.meta.env.VITE_OAUTH_API_BASE_URL) { logoutRedirectUrl = `${ import.meta.env.VITE_OAUTH_API_BASE_URL - }logout/?post_logout_redirect_uri=${window.location.origin}`; + }logout/?post_logout_redirect_uri=${window.location.origin}&client_id=iterativ`; } const AVAILABLE_LANGUAGES = ["de", "fr", "it"]; From d9a89dd0be33f7c566aa6955d1f339a87bc2f3ae Mon Sep 17 00:00:00 2001 From: Elia Bieri Date: Fri, 27 Sep 2024 16:17:57 +0000 Subject: [PATCH 6/6] Merged in feature/VBV-739-berufsbildner-und-ausbildungsverantwortliche-vorschau-teilnehmer (pull request #388) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit VBV-739: Berufsbildner und Ausbildungsverantwortlicher: Vorschau Teilnehmer * Improve “preview link” handling * Deploy preview to ARM64 caprover * Revert "Deploy preview to ARM64 caprover" This reverts commit 822312137e043708d543bb825184ea8a39bd4d3b. * Merged develop into feature/VBV-739-berufsbildner-und-ausbildungsverantwortliche-vorschau-teilnehmer Approved-by: Dario Aebersold Approved-by: Daniel Egger --- .../src/components/dashboard/CoursePanel.vue | 20 +++++-------------- server/vbv_lernwelt/dashboard/views.py | 9 ++++++++- server/vbv_lernwelt/iam/permissions.py | 8 +++++--- 3 files changed, 18 insertions(+), 19 deletions(-) diff --git a/client/src/components/dashboard/CoursePanel.vue b/client/src/components/dashboard/CoursePanel.vue index 89a3a335..a02fca17 100644 --- a/client/src/components/dashboard/CoursePanel.vue +++ b/client/src/components/dashboard/CoursePanel.vue @@ -65,20 +65,6 @@ const actionButtonProps = computed<{ href: string; text: string; cyKey: string } cyKey: "lm-dashboard-link", }; } - if (props.courseConfig?.role_key === "Berufsbildner") { - return { - href: getLearningPathUrl(props.courseConfig?.course_slug), - text: "a.Vorschau Teilnehmer", - cyKey: "progress-dashboard-continue-course-link", - }; - } - if (props.courseConfig?.role_key === "Ausbildungsverantwortlicher") { - return { - href: getLearningPathUrl(props.courseConfig?.course_slug), - text: "a.Vorschau Teilnehmer", - cyKey: "tr-dashboard-link", - }; - } return { href: getLearningPathUrl(props.courseConfig?.course_slug), text: "Weiter lernen", @@ -88,7 +74,11 @@ const actionButtonProps = computed<{ href: string; text: string; cyKey: string } ); function hasActionButton(): boolean { - return props.courseConfig?.role_key !== "MentorUK"; + return ( + props.courseConfig?.role_key !== "MentorUK" && + props.courseConfig?.role_key !== "Ausbildungsverantwortlicher" && + props.courseConfig?.role_key !== "Berufsbildner" + ); } diff --git a/server/vbv_lernwelt/dashboard/views.py b/server/vbv_lernwelt/dashboard/views.py index db5d5b80..5f769722 100644 --- a/server/vbv_lernwelt/dashboard/views.py +++ b/server/vbv_lernwelt/dashboard/views.py @@ -259,8 +259,15 @@ def collect_course_sessions_by_course( def has_preview(role_key: RoleKeyType) -> bool: + print("has_preview", role_key) return ( - role_key in [RoleKeyType.MENTOR_VV, RoleKeyType.MENTOR_UK] + role_key + in [ + RoleKeyType.MENTOR_VV, + RoleKeyType.MENTOR_UK, + RoleKeyType.BERUFSBILDNER, + RoleKeyType.TRAINING_RESPONSIBLE, + ] and not role_key == RoleKeyType.MEMBER ) diff --git a/server/vbv_lernwelt/iam/permissions.py b/server/vbv_lernwelt/iam/permissions.py index f52c60d9..23a7cc2a 100644 --- a/server/vbv_lernwelt/iam/permissions.py +++ b/server/vbv_lernwelt/iam/permissions.py @@ -51,9 +51,11 @@ def has_course_session_preview(user, course_session_id: int): if is_course_session_member(user, course_session_id): return False - return is_course_session_learning_mentor( - user, course_session_id - ) or is_course_session_expert(user, course_session_id) + return ( + is_course_session_learning_mentor(user, course_session_id) + or is_course_session_berufsbildner(user, course_session_id) + or is_course_session_expert(user, course_session_id) + ) def has_media_library(user, course_session_id: int):