Merge pull request #1374 from pateljannat/issues-82

fix: check enrollment on course certification page
This commit is contained in:
Jannat Patel
2025-03-12 11:03:20 +05:30
committed by GitHub
3 changed files with 22 additions and 33 deletions

View File

@@ -37,6 +37,7 @@
<script setup> <script setup>
import { computed, inject, onMounted, ref } from 'vue' import { computed, inject, onMounted, ref } from 'vue'
import { Breadcrumbs, call, createResource } from 'frappe-ui' import { Breadcrumbs, call, createResource } from 'frappe-ui'
import { useRouter } from 'vue-router'
import UpcomingEvaluations from '@/components/UpcomingEvaluations.vue' import UpcomingEvaluations from '@/components/UpcomingEvaluations.vue'
const courseTitle = ref(null) const courseTitle = ref(null)
@@ -44,6 +45,7 @@ const evaluator = ref(null)
const courses = ref([]) const courses = ref([])
const user = inject('$user') const user = inject('$user')
const dayjs = inject('$dayjs') const dayjs = inject('$dayjs')
const router = useRouter()
const props = defineProps({ const props = defineProps({
courseName: { courseName: {
@@ -53,6 +55,7 @@ const props = defineProps({
}) })
onMounted(() => { onMounted(() => {
fetchEnrollmentDetails()
fetchCourseDetails() fetchCourseDetails()
}) })
@@ -66,10 +69,26 @@ const certificate = createResource({
}, },
fieldname: ['name', 'template', 'issue_date'], fieldname: ['name', 'template', 'issue_date'],
}, },
auto: true,
cache: [user.data?.name, props.courseName], cache: [user.data?.name, props.courseName],
}) })
const fetchEnrollmentDetails = () => {
call('frappe.client.get_value', {
doctype: 'LMS Enrollment',
filters: { member: user.data?.name, course: props.courseName },
fieldname: ['purchased_certificate'],
}).then((data) => {
if (data.purchased_certificate) {
certificate.reload()
} else {
router.push({
name: 'CourseDetail',
params: { courseName: props.courseName },
})
}
})
}
const fetchCourseDetails = () => { const fetchCourseDetails = () => {
call('frappe.client.get_value', { call('frappe.client.get_value', {
doctype: 'LMS Course', doctype: 'LMS Course',

View File

@@ -283,7 +283,8 @@ const courseType = computed(() => {
] ]
if (user.data?.is_student) { if (user.data?.is_student) {
types.push({ label: __('Enrolled'), value: 'Enrolled' }) types.push({ label: __('Enrolled'), value: 'Enrolled' })
} else { }
if (user.data?.is_moderator || user.data?.is_instructor) {
types.push({ label: __('Created'), value: 'Created' }) types.push({ label: __('Created'), value: 'Created' })
} }
return types return types

View File

@@ -113,37 +113,6 @@ def render_portal_page(path, **kwargs):
return page.render() return page.render()
class CoursePage(BaseRenderer):
def __init__(self, path, http_status_code):
super().__init__(path, http_status_code)
self.renderer = None
def can_render(self):
return self.path.startswith("course")
def render(self):
if "learn" in self.path:
prefix = self.path.split("/learn")[0]
course_name = prefix.split("/")[1]
lesson_index = self.path.split("/learn/")[1]
chapter_number = lesson_index.split(".")[0]
lesson_number = lesson_index.split(".")[1]
frappe.flags.redirect_location = (
f"/lms/courses/{course_name}/learn/{chapter_number}-{lesson_number}"
)
return RedirectPage(self.path).render()
elif len(self.path.split("/")) > 1:
course_name = self.path.split("/")[1]
frappe.flags.redirect_location = f"/lms/courses/{course_name}"
return RedirectPage(self.path).render()
else:
frappe.flags.redirect_location = "/lms/courses"
return RedirectPage(self.path).render()
class SCORMRenderer(BaseRenderer): class SCORMRenderer(BaseRenderer):
def can_render(self): def can_render(self):
return "scorm/" in self.path return "scorm/" in self.path