Course: Implement document auto-launch and notification for students in course home - refs BT#22103

pull/5859/head
christianbeeznst 11 months ago
parent 66da134d8b
commit c15ec66a76
  1. 52
      assets/vue/router/index.js
  2. 16
      assets/vue/services/courseService.js
  3. 10
      assets/vue/views/course/CourseHome.vue
  4. 1
      src/CoreBundle/Controller/PlatformConfigurationController.php

@ -1,4 +1,4 @@
import { createRouter, createWebHistory } from "vue-router"
import {createRouter, createWebHistory} from "vue-router"
import adminRoutes from "./admin"
import courseRoutes from "./course"
import accountRoutes from "./account"
@ -20,8 +20,7 @@ import documents from "./documents"
import assignments from "./assignments"
import links from "./links"
import glossary from "./glossary"
import { useSecurityStore } from "../store/securityStore"
import securityService from "../services/securityService"
import {useSecurityStore} from "../store/securityStore"
import MyCourseList from "../views/user/courses/List.vue"
import MySessionList from "../views/user/sessions/SessionsCurrent.vue"
import MySessionListPast from "../views/user/sessions/SessionsPast.vue"
@ -38,12 +37,14 @@ import Login from "../pages/Login.vue"
import Faq from "../pages/Faq.vue"
import Demo from "../pages/Demo.vue"
import { useCidReqStore } from "../store/cidReq"
import {useCidReqStore} from "../store/cidReq"
import courseService from "../services/courseService"
import catalogueCourses from "./cataloguecourses"
import catalogueSessions from "./cataloguesessions"
import { customVueTemplateEnabled } from "../config/env"
import {customVueTemplateEnabled} from "../config/env"
import {useCourseSettings} from "../store/courseSettingStore";
import {checkIsAllowedToEdit} from "../composables/userPermissions";
const router = createRouter({
history: createWebHistory(),
@ -97,13 +98,42 @@ const router = createRouter({
name: "CourseHome",
component: CourseHome,
beforeEnter: async (to) => {
const check = await courseService.checkLegal(to.params.id, to.query?.sid)
if (check.redirect) {
window.location.href = check.url
return false
const courseId = to.params.id
const sessionId = to.query?.sid
try {
const check = await courseService.checkLegal(courseId, sessionId)
if (check.redirect) {
window.location.href = check.url
return false
}
const course = await courseService.getCourseDetails(courseId)
if (!course) {
return false
}
const isAllowedToEdit = await checkIsAllowedToEdit(true, true, true)
if (isAllowedToEdit) {
return true
}
const courseSettingsStore = useCourseSettings()
await courseSettingsStore.loadCourseSettings(courseId, sessionId)
const documentAutoLaunch = parseInt(courseSettingsStore.getSetting("enable_document_auto_launch"), 10) || 0
if (documentAutoLaunch === 1 && course.resourceNode?.id) {
window.location.href = `/resources/document/${course.resourceNode.id}/?cid=${courseId}`
+ (sessionId ? `&sid=${sessionId}` : '')
return false
} else {
console.log("Document auto launch is disabled or resourceNode ID is missing.")
}
} catch (error) {
console.error("Error during CourseHome route guard:", error)
}
return true
},
},
{

@ -112,4 +112,20 @@ export default {
value: item.id,
}))
},
/**
* Fetches course details by course ID.
*
* @param {number} courseId - The ID of the course.
* @returns {Promise<Object|null>} - The course details or null if an error occurs.
*/
getCourseDetails: async (courseId) => {
try {
const response = await api.get(`/api/courses/${courseId}`)
return response.data
} catch (error) {
console.error("Error fetching course details:", error)
return null
}
}
}

@ -81,6 +81,10 @@
<small v-if="session"> ({{ session.title }}) </small>
</h2>
<p v-if="isAllowedToEdit && documentAutoLaunch === 1" class="text-sm text-gray-600">
{{ t('Document auto-launch is enabled for students') }}
</p>
<div class="grow-0">
<StudentViewButton
v-if="course"
@ -221,6 +225,7 @@ import courseService from "../../services/courseService"
import CourseIntroduction from "../../components/course/CourseIntroduction.vue"
import { usePlatformConfig } from "../../store/platformConfig"
import { useSecurityStore } from "../../store/securityStore"
import {useCourseSettings} from "../../store/courseSettingStore"
const { t } = useI18n()
const cidReqStore = useCidReqStore()
@ -245,6 +250,8 @@ provide("isCustomizing", isCustomizing)
const courseItems = ref([])
const routerTools = ["document", "link", "glossary", "agenda", "student_publication", "course_homepage"]
const documentAutoLaunch = ref(0)
const courseSettingsStore = useCourseSettings()
courseService.loadCTools(course.value.id, session.value?.id).then((cTools) => {
tools.value = cTools.map((element) => {
@ -387,6 +394,9 @@ onMounted(async () => {
translateHtml()
}, 1000)
}
await courseSettingsStore.loadCourseSettings(course.value.id, session.value?.id)
documentAutoLaunch.value = parseInt(courseSettingsStore.getSetting("enable_document_auto_launch"), 10) || 0
})
const onStudentViewChanged = async () => {

@ -142,6 +142,7 @@ class PlatformConfigurationController extends AbstractController
$settings = [
'show_course_in_user_language' => $courseSettingsManager->getCourseSettingValue('show_course_in_user_language'),
'allow_user_edit_agenda' => $courseSettingsManager->getCourseSettingValue('allow_user_edit_agenda'),
'enable_document_auto_launch' => $courseSettingsManager->getCourseSettingValue('enable_document_auto_launch'),
];
return new JsonResponse(['settings' => $settings]);

Loading…
Cancel
Save