fix: edit permission and other issues

This commit is contained in:
Jannat Patel
2024-05-17 18:03:04 +05:30
parent 36c7c10d94
commit 76ea4fc1ae
8 changed files with 58 additions and 12 deletions

View File

@@ -166,5 +166,13 @@ function enrollStudent() {
} }
} }
const is_instructor = () => {} const is_instructor = () => {
let user_is_instructor = false
props.course.data.instructors.forEach((instructor) => {
if (!user_is_instructor && instructor.name == user.data?.name) {
user_is_instructor = true
}
})
return user_is_instructor
}
</script> </script>

View File

@@ -323,7 +323,6 @@ watch(activeQuestion, (value) => {
watch( watch(
() => props.quizName, () => props.quizName,
(newName) => { (newName) => {
console.log(newName)
if (newName) { if (newName) {
quiz.reload() quiz.reload()
} }
@@ -392,7 +391,7 @@ const addToLocalStorage = () => {
let quizData = JSON.parse(localStorage.getItem(quiz.data.title)) let quizData = JSON.parse(localStorage.getItem(quiz.data.title))
let questionData = { let questionData = {
question_index: activeQuestion.value, question_index: activeQuestion.value,
answers: getAnswers().join(), answer: getAnswers().join(),
is_correct: showAnswers.filter((answer) => { is_correct: showAnswers.filter((answer) => {
return answer != undefined return answer != undefined
}), }),

View File

@@ -26,7 +26,12 @@
" "
> >
<div class="text-base font-medium text-gray-900 leading-none"> <div class="text-base font-medium text-gray-900 leading-none">
<span v-if="branding.data?.brand_name"> <span
v-if="
branding.data?.brand_name &&
branding.data?.brand_name != 'Frappe'
"
>
{{ branding.data?.brand_name }} {{ branding.data?.brand_name }}
</span> </span>
<span v-else> Learning </span> <span v-else> Learning </span>

View File

@@ -126,7 +126,10 @@
<div class="text-lg font-semibold mt-5 mb-4"> <div class="text-lg font-semibold mt-5 mb-4">
{{ __('Settings') }} {{ __('Settings') }}
</div> </div>
<div class="flex items-center justify-between mb-4"> <div
v-if="user.data?.is_moderator"
class="flex items-center justify-between mb-4"
>
<FormControl <FormControl
type="checkbox" type="checkbox"
v-model="course.published" v-model="course.published"
@@ -207,6 +210,7 @@ import CourseOutline from '@/components/CourseOutline.vue'
const user = inject('$user') const user = inject('$user')
const newTag = ref('') const newTag = ref('')
const router = useRouter() const router = useRouter()
const instructors = ref([])
const props = defineProps({ const props = defineProps({
courseName: { courseName: {
@@ -231,9 +235,14 @@ const course = reactive({
}) })
onMounted(() => { onMounted(() => {
if (!user.data?.is_moderator && !user.data?.is_instructor) { if (
props.courseName == 'new' &&
!user.data?.is_moderator &&
!user.data?.is_instructor
) {
router.push({ name: 'Courses' }) router.push({ name: 'Courses' })
} }
if (props.courseName !== 'new') { if (props.courseName !== 'new') {
courseResource.reload() courseResource.reload()
} }
@@ -245,7 +254,7 @@ const courseCreationResource = createResource({
return { return {
doc: { doc: {
doctype: 'LMS Course', doctype: 'LMS Course',
image: course.course_image.file_url, image: course.course_image?.file_url || '',
...values, ...values,
}, },
} }
@@ -260,7 +269,7 @@ const courseEditResource = createResource({
doctype: 'LMS Course', doctype: 'LMS Course',
name: values.course, name: values.course,
fieldname: { fieldname: {
image: course.course_image.file_url, image: course.course_image?.file_url || '',
...course, ...course,
}, },
} }
@@ -292,6 +301,8 @@ const courseResource = createResource({
} }
if (data.image) imageResource.reload({ image: data.image }) if (data.image) imageResource.reload({ image: data.image })
instructors.value = data.instructors
check_permission()
}, },
}) })
@@ -397,6 +408,21 @@ const removeImage = () => {
course.course_image = null course.course_image = null
} }
const check_permission = () => {
let user_is_instructor = false
if (user.data?.is_moderator) return
instructors.value.forEach((instructor) => {
if (!user_is_instructor && instructor.instructor == user.data?.name) {
user_is_instructor = true
}
})
if (!user_is_instructor) {
router.push({ name: 'Courses' })
}
}
const breadcrumbs = computed(() => { const breadcrumbs = computed(() => {
let crumbs = [ let crumbs = [
{ {

View File

@@ -18,12 +18,16 @@
}} }}
</p> </p>
<router-link <router-link
v-if="user.data"
:to="{ name: 'CourseDetail', params: { courseName: courseName } }" :to="{ name: 'CourseDetail', params: { courseName: courseName } }"
> >
<Button variant="solid"> <Button variant="solid">
{{ __('Start Learning') }} {{ __('Start Learning') }}
</Button> </Button>
</router-link> </router-link>
<Button v-else @click="redirectToLogin()">
{{ __('Login') }}
</Button>
</div> </div>
<div v-else class="border-r container pt-5 pb-10 px-5"> <div v-else class="border-r container pt-5 pb-10 px-5">
<div class="flex flex-col md:flex-row md:items-center justify-between"> <div class="flex flex-col md:flex-row md:items-center justify-between">
@@ -332,6 +336,10 @@ const allowInstructorContent = () => {
if (lesson.data?.instructors.includes(user.data?.name)) return true if (lesson.data?.instructors.includes(user.data?.name)) return true
return false return false
} }
const redirectToLogin = () => {
window.location.href = `/login?redirect-to=/lms/courses/${props.courseName}`
}
</script> </script>
<style> <style>
.avatar-group { .avatar-group {

View File

@@ -47,7 +47,7 @@
</div> </div>
<div <div
class="grid grid-cols-3 md:grod-cols-4 gap-4 mb-4" class="grid grid-cols-3 md:grid-cols-4 gap-4 mb-4"
v-show="showSlotsTemplate" v-show="showSlotsTemplate"
> >
<FormControl <FormControl

View File

@@ -23,7 +23,7 @@
}, },
{ {
"fieldname": "answer", "fieldname": "answer",
"fieldtype": "Data", "fieldtype": "Small Text",
"in_list_view": 1, "in_list_view": 1,
"label": "Users Response", "label": "Users Response",
"read_only": 1 "read_only": 1
@@ -61,7 +61,7 @@
"index_web_pages_for_search": 1, "index_web_pages_for_search": 1,
"istable": 1, "istable": 1,
"links": [], "links": [],
"modified": "2023-10-17 11:55:25.641214", "modified": "2024-05-17 17:38:51.760653",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "LMS", "module": "LMS",
"name": "LMS Quiz Result", "name": "LMS Quiz Result",

View File

@@ -1,5 +1,5 @@
{% set title = frappe.db.get_value("LMS Course", doc.course, "title") %} {% set title = frappe.db.get_value("LMS Course", doc.course, "title") %}
<p> {{ _('Your evaluation for the course ${0} has been scheduled on ${1} at ${2}.').format(title, frappe.utils.format_date(doc.date, "medium"), frappe.utils.format_time(doc.start_time, "short")) }}</p> <p> {{ _('Your evaluation for the course {0} has been scheduled on {1} at {2}.').format(title, frappe.utils.format_date(doc.date, "medium"), frappe.utils.format_time(doc.start_time, "short")) }}</p>
<p> {{ _("Please prepare well and be on time for the evaluations.") }} </p> <p> {{ _("Please prepare well and be on time for the evaluations.") }} </p>