Fixed course and content page
This commit is contained in:
parent
db9c8b795a
commit
f9b2fb6717
@ -62,7 +62,7 @@
|
|||||||
"in_filter": 0,
|
"in_filter": 0,
|
||||||
"in_global_search": 0,
|
"in_global_search": 0,
|
||||||
"in_list_view": 0,
|
"in_list_view": 0,
|
||||||
"in_standard_filter": 0,
|
"in_standard_filter": 1,
|
||||||
"label": "Student",
|
"label": "Student",
|
||||||
"length": 0,
|
"length": 0,
|
||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
@ -190,7 +190,7 @@
|
|||||||
"issingle": 0,
|
"issingle": 0,
|
||||||
"istable": 0,
|
"istable": 0,
|
||||||
"max_attachments": 0,
|
"max_attachments": 0,
|
||||||
"modified": "2018-11-07 21:16:34.764628",
|
"modified": "2018-11-09 19:23:07.967967",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Education",
|
"module": "Education",
|
||||||
"name": "Course Enrollment",
|
"name": "Course Enrollment",
|
||||||
|
@ -11,29 +11,13 @@
|
|||||||
</ul>
|
</ul>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="$root.$data.isLogin" class='course-buttons text-center col-xs-4 col-sm-3 col-md-2'>
|
<div class='course-buttons text-center col-xs-4 col-sm-3 col-md-2'>
|
||||||
<!-- <AcademyCourseCardButton
|
|
||||||
v-if="this.$root.$data.checkProgramEnrollment(this.$route.params.code)"
|
|
||||||
:course="course.name"
|
|
||||||
:nextContent="nextContent"
|
|
||||||
:nextContentType="nextContentType"
|
|
||||||
/> -->
|
|
||||||
|
|
||||||
<a-button
|
<a-button
|
||||||
v-if="showCompleted"
|
:type="buttonType"
|
||||||
type="success"
|
size="sm btn-block"
|
||||||
size="sm"
|
|
||||||
:route="firstContentRoute"
|
:route="firstContentRoute"
|
||||||
>
|
>
|
||||||
Completed
|
{{ courseMeta.flag }}
|
||||||
</a-button>
|
|
||||||
<a-button
|
|
||||||
v-if="showStart"
|
|
||||||
type="primary"
|
|
||||||
size="sm"
|
|
||||||
:route="firstContentRoute"
|
|
||||||
>
|
|
||||||
Start
|
|
||||||
</a-button>
|
</a-button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -42,44 +26,36 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import AButton from './Button';
|
import AButton from './Button.vue';
|
||||||
import AcademyCourseCardButton from './AcademyCourseCardButton.vue'
|
import AcademyCourseCardButton from './AcademyCourseCardButton.vue'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
props: ['course'],
|
props: ['course', 'courseMeta', 'program_name'],
|
||||||
name: "AcademyCourseCard",
|
name: "AcademyCourseCard",
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
nextContent: '',
|
|
||||||
nextContentType: ''
|
|
||||||
}
|
|
||||||
},
|
|
||||||
mounted() {
|
|
||||||
if(this.$root.$data.checkLogin()) {
|
|
||||||
frappe.call({
|
|
||||||
method: "erpnext.www.academy.get_starting_content",
|
|
||||||
args: {
|
|
||||||
course_name: this.course.name
|
|
||||||
}
|
|
||||||
}).then(r => {
|
|
||||||
this.nextContent = r.message.content,
|
|
||||||
this.nextContentType = r.message.content_type
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
components: {
|
components: {
|
||||||
AcademyCourseCardButton,
|
AcademyCourseCardButton,
|
||||||
AButton
|
AButton
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
showStart() {
|
showStart() {
|
||||||
return academy.loggedIn && !this.course.completed;
|
return academy.loggedIn && !this.courseMeta.flag == "Completed";
|
||||||
},
|
},
|
||||||
showCompleted() {
|
showCompleted() {
|
||||||
return academy.loggedIn && this.course.completed;
|
return academy.loggedIn && this.courseMeta.flag == "Completed";
|
||||||
},
|
},
|
||||||
firstContentRoute() {
|
firstContentRoute() {
|
||||||
return `${course.name}/${course.content_type}/${data.content}`
|
return `${this.program_name}/${this.course.name}/${this.courseMeta.content_type}/${this.courseMeta.content}`
|
||||||
|
},
|
||||||
|
buttonType() {
|
||||||
|
if (this.courseMeta.flag == "Start" ){
|
||||||
|
return "primary"
|
||||||
|
}
|
||||||
|
else if (this.courseMeta.flag == "Complete" ) {
|
||||||
|
return "success"
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return "info"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -13,7 +13,7 @@ export default {
|
|||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
getButtonName: function() {
|
getButtonName: function() {
|
||||||
if(this.$root.$data.checkCourseCompletion(this.course)){
|
if(academy.store.checkCourseCompletion(this.course)){
|
||||||
return 'Completed'
|
return 'Completed'
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
@ -21,7 +21,7 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
getClassName: function() {
|
getClassName: function() {
|
||||||
if(this.$root.$data.checkCourseCompletion(this.course)){
|
if(academy.store.checkCourseCompletion(this.course)){
|
||||||
return 'btn-success'
|
return 'btn-success'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@ export default {
|
|||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
buttonName: '',
|
buttonName: '',
|
||||||
isLoggedIn: this.$root.$data.checkLogin(),
|
isLoggedIn: academy.store.checkLogin(),
|
||||||
nextContent: '',
|
nextContent: '',
|
||||||
nextContentType: '',
|
nextContentType: '',
|
||||||
nextCourse: '',
|
nextCourse: '',
|
||||||
@ -20,7 +20,7 @@ export default {
|
|||||||
frappe.call({
|
frappe.call({
|
||||||
method: "erpnext.www.academy.get_continue_data",
|
method: "erpnext.www.academy.get_continue_data",
|
||||||
args: {
|
args: {
|
||||||
program_name: this.$route.params.code
|
program_name: this.$route.params.program_name
|
||||||
}
|
}
|
||||||
}).then( r => {
|
}).then( r => {
|
||||||
this.nextContent = r.message.content,
|
this.nextContent = r.message.content,
|
||||||
@ -30,7 +30,7 @@ export default {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(this.isLoggedIn){
|
if(this.isLoggedIn){
|
||||||
if(this.$root.$data.checkProgramEnrollment(this.$route.params.code)){
|
if(academy.store.checkProgramEnrollment(this.$route.params.program_name)){
|
||||||
if(this.$route.name == 'home'){
|
if(this.$route.name == 'home'){
|
||||||
this.buttonName = 'Explore Courses'
|
this.buttonName = 'Explore Courses'
|
||||||
}
|
}
|
||||||
@ -51,18 +51,18 @@ export default {
|
|||||||
if(this.$route.name == 'home'){
|
if(this.$route.name == 'home'){
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
else if(this.$route.name == 'program' && this.$root.$data.checkProgramEnrollment(this.$route.params.code)){
|
else if(this.$route.name == 'program' && academy.store.checkProgramEnrollment(this.$route.params.program_name)){
|
||||||
this.$router.push({ name: 'content', params: { code: this.$route.params.code, course: this.nextCourse, type: this.nextContentType, content: this.nextContent}})
|
this.$router.push({ name: 'content', params: { program_name: this.$route.params.program_name, course: this.nextCourse, type: this.nextContentType, content: this.nextContent}})
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
frappe.call({
|
frappe.call({
|
||||||
method: "erpnext.www.academy.enroll_in_program",
|
method: "erpnext.www.academy.enroll_in_program",
|
||||||
args:{
|
args:{
|
||||||
program_name: this.$route.params.code,
|
program_name: this.$route.params.program_name,
|
||||||
student_email_id: frappe.session.user
|
student_email_id: frappe.session.user
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
this.$root.$data.updateEnrolledPrograms()
|
academy.store.updateEnrolledPrograms()
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,7 @@ export default {
|
|||||||
frappe.call({
|
frappe.call({
|
||||||
method: "erpnext.www.academy.add_activity",
|
method: "erpnext.www.academy.add_activity",
|
||||||
args: {
|
args: {
|
||||||
enrollment: this.$root.$data.enrolledCourses[this.$route.params.course],
|
enrollment: academy.store.enrolledCourses[this.$route.params.course],
|
||||||
content_type: this.$route.params.type,
|
content_type: this.$route.params.type,
|
||||||
content: this.$route.params.content
|
content: this.$route.params.content
|
||||||
}
|
}
|
||||||
@ -29,7 +29,7 @@ export default {
|
|||||||
frappe.call({
|
frappe.call({
|
||||||
method: "erpnext.www.academy.add_activity",
|
method: "erpnext.www.academy.add_activity",
|
||||||
args: {
|
args: {
|
||||||
enrollment: this.$root.$data.enrolledCourses[this.$route.params.course],
|
enrollment: academy.store.enrolledCourses[this.$route.params.course],
|
||||||
content_type: this.$route.params.type,
|
content_type: this.$route.params.type,
|
||||||
content: this.$route.params.content
|
content: this.$route.params.content
|
||||||
}
|
}
|
||||||
@ -38,12 +38,12 @@ export default {
|
|||||||
frappe.call({
|
frappe.call({
|
||||||
method: "erpnext.www.academy.mark_course_complete",
|
method: "erpnext.www.academy.mark_course_complete",
|
||||||
args: {
|
args: {
|
||||||
enrollment: this.$root.$data.enrolledCourses[this.$route.params.course]
|
enrollment: academy.store.enrolledCourses[this.$route.params.course]
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
// this.$root.$data.addCompletedCourses(this.$route.params.course)
|
// academy.store.addCompletedCourses(this.$route.params.course)
|
||||||
this.$root.$data.updateCompletedCourses()
|
academy.store.updateCompletedCourses()
|
||||||
this.$router.push({ name: 'program', params: { code: this.$route.params.code}})
|
this.$router.push({ name: 'program', params: { program_name: this.$route.params.program_name}})
|
||||||
|
|
||||||
//
|
//
|
||||||
academy.trigger('course-completed', course_name);
|
academy.trigger('course-completed', course_name);
|
||||||
|
@ -72,7 +72,7 @@ export default {
|
|||||||
frappe.call({
|
frappe.call({
|
||||||
method: "erpnext.www.academy.evaluate_quiz",
|
method: "erpnext.www.academy.evaluate_quiz",
|
||||||
args: {
|
args: {
|
||||||
enrollment: this.$root.$data.enrolledCourses[this.$route.params.course],
|
enrollment: academy.store.enrolledCourses[this.$route.params.course],
|
||||||
quiz_response: this.quizResponse,
|
quiz_response: this.quizResponse,
|
||||||
quiz_name: this.content
|
quiz_name: this.content
|
||||||
}
|
}
|
||||||
|
@ -12,7 +12,7 @@ import ContentVideo from "../components/ContentVideo.vue"
|
|||||||
import ContentNavigation from "../components/ContentNavigation.vue"
|
import ContentNavigation from "../components/ContentNavigation.vue"
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
props:['code', 'course', 'type', 'content'],
|
props:['program_name', 'course', 'type', 'content'],
|
||||||
name: "AcademyCoursePage",
|
name: "AcademyCoursePage",
|
||||||
data() {
|
data() {
|
||||||
return{
|
return{
|
||||||
|
@ -1,12 +1,11 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<AcademyTopSection v-bind:title="program.program_name" v-bind:description="program.description">
|
<AcademyTopSection v-bind:title="program.program_name" v-bind:description="program.description">
|
||||||
<!-- <AcademyTopSectionButton/> -->
|
<!-- <a-button @click="startCourse">Start Course</a-button>
|
||||||
<a-button @click="startCourse">Start Course</a-button>
|
<a-button @click="continueCourse">Continue Course</a-button> -->
|
||||||
<a-button @click="continueCourse">Continue Course</a-button>
|
|
||||||
</AcademyTopSection>
|
</AcademyTopSection>
|
||||||
<AcademyList :title="'Courses'" :description="''">
|
<AcademyList :title="'Courses'" :description="''">
|
||||||
<AcademyCourseCard v-for="course in course_list" :course="course" :key="course.name"/>
|
<AcademyCourseCard v-for="course in course_data" :course="course.course" :program_name="program_name" :courseMeta="course.meta" :key="course.meta.flag"/>
|
||||||
</AcademyList>
|
</AcademyList>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@ -15,7 +14,6 @@ import Button from '../components/Button.vue';
|
|||||||
import AcademyTopSection from "../components/AcademyTopSection.vue"
|
import AcademyTopSection from "../components/AcademyTopSection.vue"
|
||||||
import AcademyList from "../components/AcademyList.vue"
|
import AcademyList from "../components/AcademyList.vue"
|
||||||
import AcademyCourseCard from "../components/AcademyCourseCard.vue"
|
import AcademyCourseCard from "../components/AcademyCourseCard.vue"
|
||||||
import AcademyTopSectionButton from "../components/AcademyTopSectionButton.vue";
|
|
||||||
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
@ -25,26 +23,25 @@ export default {
|
|||||||
AButton: Button,
|
AButton: Button,
|
||||||
AcademyTopSection,
|
AcademyTopSection,
|
||||||
AcademyList,
|
AcademyList,
|
||||||
AcademyCourseCard,
|
AcademyCourseCard
|
||||||
AcademyTopSectionButton
|
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
program: {},
|
program: {},
|
||||||
course_list: []
|
course_data: []
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
beforeMount() {
|
beforeMount() {
|
||||||
if(this.$root.$data.isLogin) this.$root.$data.updateCompletedCourses()
|
if(academy.store.isLogin) academy.store.updateCompletedCourses()
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
this.getProgramDetails().then(data => this.program = data);
|
this.getProgramDetails().then(data => this.program = data);
|
||||||
this.getCourses().then(data => this.course_list = data);
|
this.getCourses().then(data => this.course_data = data);
|
||||||
|
|
||||||
academy.on(`course-completed`, (course_name) => {
|
// academy.on(`course-completed`, (course_name) => {
|
||||||
const course = this.course_list.findIndex(c => c.name === course_name);
|
// const course = this.course_data.findIndex(c => c.name === course_name);
|
||||||
this.course_list[course].completed = true;
|
// this.course_data[course].completed = true;
|
||||||
});
|
// });
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
startCourse() {
|
startCourse() {
|
||||||
|
@ -5,7 +5,7 @@ import AcademyCoursePage from "./pages/AcademyCoursePage.vue";
|
|||||||
const routes = [
|
const routes = [
|
||||||
{name: 'home', path: '', component: AcademyHome},
|
{name: 'home', path: '', component: AcademyHome},
|
||||||
{name: 'program', path: '/Program/:program_name', component: AcademyProgramPage, props: true},
|
{name: 'program', path: '/Program/:program_name', component: AcademyProgramPage, props: true},
|
||||||
{name: 'content', path: '/Program/:code/:course/:type/:content', component: AcademyCoursePage, props: true},
|
{name: 'content', path: '/Program/:program_name/:course/:type/:content', component: AcademyCoursePage, props: true},
|
||||||
];
|
];
|
||||||
|
|
||||||
export default routes;
|
export default routes;
|
@ -33,6 +33,14 @@ def get_program(program_name):
|
|||||||
is_enrolled = check_program_enrollment(program_name)
|
is_enrolled = check_program_enrollment(program_name)
|
||||||
return {'program': program, 'is_enrolled': is_enrolled}
|
return {'program': program, 'is_enrolled': is_enrolled}
|
||||||
|
|
||||||
|
@frappe.whitelist(allow_guest=True)
|
||||||
|
def get_program_details(program_name):
|
||||||
|
try:
|
||||||
|
program = frappe.get_doc('Program', program_name)
|
||||||
|
return program
|
||||||
|
except:
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
def get_enrollment(course_name):
|
def get_enrollment(course_name):
|
||||||
student = get_student_id(frappe.session.user)
|
student = get_student_id(frappe.session.user)
|
||||||
@ -67,14 +75,6 @@ def create_student(student_name=frappe.session.user):
|
|||||||
return student_name
|
return student_name
|
||||||
|
|
||||||
# Functions to get program & course details
|
# Functions to get program & course details
|
||||||
@frappe.whitelist(allow_guest=True)
|
|
||||||
def get_program_details(program_name):
|
|
||||||
try:
|
|
||||||
program = frappe.get_doc('Program', program_name)
|
|
||||||
return program
|
|
||||||
except:
|
|
||||||
return None
|
|
||||||
|
|
||||||
@frappe.whitelist(allow_guest=True)
|
@frappe.whitelist(allow_guest=True)
|
||||||
def get_courses(program_name):
|
def get_courses(program_name):
|
||||||
program = frappe.get_doc('Program', program_name)
|
program = frappe.get_doc('Program', program_name)
|
||||||
@ -84,6 +84,8 @@ def get_courses(program_name):
|
|||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def get_continue_content(course_name):
|
def get_continue_content(course_name):
|
||||||
|
if(frappe.session.user == "Guest"):
|
||||||
|
return None
|
||||||
enrollment = get_enrollment(course_name)
|
enrollment = get_enrollment(course_name)
|
||||||
course = frappe.get_doc("Course", enrollment.course)
|
course = frappe.get_doc("Course", enrollment.course)
|
||||||
last_activity = enrollment.get_last_activity()
|
last_activity = enrollment.get_last_activity()
|
||||||
@ -203,15 +205,16 @@ def get_continue_data(program_name):
|
|||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def enroll_all_courses_in_program(program_enrollment, student):
|
def enroll_all_courses_in_program(program_enrollment, student):
|
||||||
course_list = [course.name for course in get_courses(program_enrollment.program)]
|
program = frappe.get_doc("Program", program_enrollment.program)
|
||||||
|
course_list = [course.course for course in program.get_all_children()]
|
||||||
for course_name in course_list:
|
for course_name in course_list:
|
||||||
student.enroll_in_course(course_name=course_name, program_enrollment=program_enrollment.name)
|
student.enroll_in_course(course_name=course_name, program_enrollment=program_enrollment.name)
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def enroll_in_program(program_name, student_email_id):
|
def enroll_in_program(program_name):
|
||||||
if(not get_student_id(student_email_id)):
|
if(not get_student_id(frappe.session.user)):
|
||||||
create_student(student_email_id)
|
create_student(frappe.session.user)
|
||||||
student = frappe.get_doc("Student", get_student_id(student_email_id))
|
student = frappe.get_doc("Student", get_student_id(frappe.session.user))
|
||||||
program_enrollment = student.enroll_in_program(program_name)
|
program_enrollment = student.enroll_in_program(program_name)
|
||||||
enroll_all_courses_in_program(program_enrollment, student)
|
enroll_all_courses_in_program(program_enrollment, student)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user