From af30b771f0fe32fc159c52f615344611d773eae8 Mon Sep 17 00:00:00 2001 From: scmmishra Date: Tue, 13 Nov 2018 16:33:11 +0530 Subject: [PATCH] Renamed academy to lms on server side --- erpnext/hooks.py | 2 +- erpnext/www/academy.html | 8 -- erpnext/www/academy.py | 282 --------------------------------------- 3 files changed, 1 insertion(+), 291 deletions(-) delete mode 100644 erpnext/www/academy.html delete mode 100644 erpnext/www/academy.py diff --git a/erpnext/hooks.py b/erpnext/hooks.py index 63b897a354..61b8ae3bbe 100644 --- a/erpnext/hooks.py +++ b/erpnext/hooks.py @@ -170,7 +170,7 @@ default_roles = [ ] role_home_page = { - "LMS User": "academy" + "LMS User": "lms" } has_website_permission = { diff --git a/erpnext/www/academy.html b/erpnext/www/academy.html deleted file mode 100644 index f078b3695c..0000000000 --- a/erpnext/www/academy.html +++ /dev/null @@ -1,8 +0,0 @@ -{% extends "frappe_theme/templates/web.html" %} - -{% block title %}{{ heading or "Academy"}}{% endblock %} - -{% block page_content %} -
- -{% endblock %} \ No newline at end of file diff --git a/erpnext/www/academy.py b/erpnext/www/academy.py deleted file mode 100644 index 294c41f1e7..0000000000 --- a/erpnext/www/academy.py +++ /dev/null @@ -1,282 +0,0 @@ -from __future__ import unicode_literals -import frappe - -# Academy Utils -@frappe.whitelist(allow_guest=True) -def get_portal_details(): - settings = frappe.get_doc("Education Settings") - title = settings.portal_title - description = settings.description - return dict(title=title, description=description) - -def check_program_enrollment(program_name): - if frappe.session.user in ("Guest", "Administrator"): - return False - student = get_student_id(frappe.session.user) - enrollment = frappe.get_list("Program Enrollment", filters={'student':student, 'program': program_name}) - if enrollment: - return True - else: - return False - -@frappe.whitelist(allow_guest=True) -def get_featured_programs(): - featured_program_names = frappe.get_all("Program", filters={"is_published": True, "is_featured": True}) - if featured_program_names: - featured_list = [get_program(program['name']) for program in featured_program_names] - return featured_list - else: - return None - -def get_program(program_name): - program = frappe.get_doc('Program', program_name) - is_enrolled = check_program_enrollment(program_name) - 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): - student = get_student_id(frappe.session.user) - enrollment_name = frappe.get_all("Course Enrollment", filters={'student': student, 'course':course_name}) - try: - name = enrollment_name[0].name - enrollment = frappe.get_doc("Course Enrollment", name) - return enrollment - except: - return None - -@frappe.whitelist() -def get_student_id(email=None): - """Returns student user name, example EDU-STU-2018-00001 (Based on the naming series). - - :param user: a user email address - """ - try: - student_id = frappe.db.get_all("Student", {"student_email_id": email}, ["name"])[0].name - return student_id - except IndexError: - return None - -def create_student(student_name=frappe.session.user): - student = frappe.get_doc({ - "doctype": "Student", - "first_name": student_name, - "student_email_id": student_name, - }) - student.save(ignore_permissions=True) - frappe.db.commit() - return student_name - -# Functions to get program & course details -@frappe.whitelist(allow_guest=True) -def get_courses(program_name): - program = frappe.get_doc('Program', program_name) - courses = program.get_course_list() - course_data = [{'meta':get_continue_content(item.name), 'course':item} for item in courses] - return course_data - -@frappe.whitelist() -def get_continue_content(course_name): - if frappe.session.user == "Guest": - return dict(content=None, content_type=None, flag=None) - enrollment = get_enrollment(course_name) - course = frappe.get_doc("Course", enrollment.course) - last_activity = enrollment.get_last_activity() - - if last_activity == None: - next_content = course.get_first_content() - return dict(content=next_content.name, content_type=next_content.doctype, flag="Start") - - if last_activity.doctype == "Quiz Activity": - next_content = get_next_content(last_activity.quiz, "Quiz", course.name) - else: - next_content = get_next_content(last_activity.content, last_activity.content_type, course.name) - - if next_content == None: - next_content = course.get_first_content() - return dict(content=next_content.name, content_type=next_content.doctype, flag="Complete") - else: - next_content['flag'] = "Continue" - return next_content - - -@frappe.whitelist() -def get_starting_content(course_name): - course = frappe.get_doc('Course', course_name) - content = course.course_content[0].content - content_type = course.course_content[0].content_type - return dict(content=content, content_type=content_type) - -# Functions to get content details -@frappe.whitelist() -def get_content(content_name, content_type): - try: - content = frappe.get_doc(content_type, content_name) - return content - except: - frappe.throw("{0} with name {1} does not exist".format(content_type, content_name)) - return None - -@frappe.whitelist() -def get_next_content(content, content_type, course): - if frappe.session.user == "Guest": - return None - course_doc = frappe.get_doc("Course", course) - content_list = [{'content_type':item.content_type, 'content':item.content} for item in course_doc.get_all_children()] - current_index = content_list.index({'content': content, 'content_type': content_type}) - try: - return content_list[current_index + 1] - except IndexError: - return None - -def get_quiz_with_answers(quiz_name): - try: - quiz = frappe.get_doc("Quiz", quiz_name).get_questions() - quiz_output = [{'name':question.name, 'question':question.question, 'options':[{'name': option.name, 'option':option.option, 'is_correct':option.is_correct} for option in question.options]} for question in quiz] - return quiz_output - except: - frappe.throw("Quiz {0} does not exist".format(quiz_name)) - return None - -@frappe.whitelist() -def get_quiz_without_answers(quiz_name): - try: - quiz = frappe.get_doc("Quiz", quiz_name).get_questions() - quiz_output = [{'name':question.name, 'question':question.question, 'options':[{'name': option.name, 'option':option.option} for option in question.options]} for question in quiz] - return quiz_output - except: - frappe.throw("Quiz {0} does not exist".format(quiz_name)) - return None - -@frappe.whitelist() -def evaluate_quiz(enrollment, quiz_response, quiz_name): - """LMS Function: Evaluates a simple multiple choice quiz. - - - :param quiz_response: contains user selected choices for a quiz in the form of a string formatted as a dictionary. The function uses `json.loads()` to convert it to a python dictionary. - """ - import json - quiz_response = json.loads(quiz_response) - quiz = frappe.get_doc("Quiz", quiz_name) - answers, score, status = quiz.evaluate(quiz_response, quiz_name) - - result = {k: ('Correct' if v else 'Wrong') for k,v in answers.items()} - result_data = [] - for key in answers: - item = {} - item['question'] = key - item['quiz_result'] = result[key] - try: - item['selected_option'] = frappe.get_value('Options', quiz_response[key], 'option') - except: - item['selected_option'] = "Unattempted" - result_data.append(item) - # result_data = [{'question': key, 'selected_option': frappe.get_value('Options', quiz_response[key], 'option'), 'quiz_result': result[key]} for key in answers] - - add_quiz_activity(enrollment, quiz_name, result_data, score, status) - return(score) - -@frappe.whitelist() -def get_completed_courses(): - student = get_student_id(frappe.session.user) - if student == None: - return None - try: - student = frappe.get_doc("Student", student) - return student.get_completed_courses() - except: - return None - -@frappe.whitelist() -def get_continue_data(program_name): - program = frappe.get_doc("Program", program_name) - courses = program.get_all_children() - try: - continue_data = get_starting_content(courses[0].course) - continue_data['course'] = courses[0].course - return continue_data - except: - return None - -@frappe.whitelist() -def enroll_all_courses_in_program(program_enrollment, student): - 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: - student.enroll_in_course(course_name=course_name, program_enrollment=program_enrollment.name) - -@frappe.whitelist() -def enroll_in_program(program_name): - if(not get_student_id(frappe.session.user)): - create_student(frappe.session.user) - student = frappe.get_doc("Student", get_student_id(frappe.session.user)) - program_enrollment = student.enroll_in_program(program_name) - enroll_all_courses_in_program(program_enrollment, student) - -@frappe.whitelist() -def get_program_enrollments(email=frappe.session.user): - if get_student_id(email) == None: - return None - try: - student = frappe.get_doc("Student", get_student_id(email)) - return student.get_program_enrollments() - except: - return None - -@frappe.whitelist() -def get_course_enrollments(): - student = get_student_id(frappe.session.user) - if student == None: - return None - try: - student = frappe.get_doc("Student", student) - return student.get_course_enrollments() - except: - return None - - -# Academty Activity -@frappe.whitelist() -def add_activity(enrollment, content_type, content): - if(check_activity_exists(enrollment, content_type, content)): - pass - else: - activity = frappe.get_doc({ - "doctype": "Course Activity", - "enrollment": enrollment, - "content_type": content_type, - "content": content, - "activity_date": frappe.utils.datetime.datetime.now() - }) - activity.save() - frappe.db.commit() - -def check_activity_exists(enrollment, content_type, content): - activity = frappe.get_all("Course Activity", filters={'enrollment': enrollment, 'content_type': content_type, 'content': content}) - return bool(activity) - -def add_quiz_activity(enrollment, quiz_name, result_data, score, status): - quiz_activity = frappe.get_doc({ - "doctype": "Quiz Activity", - "enrollment": enrollment, - "quiz": quiz_name, - "result": result_data, - "score": score, - "status": status - }) - quiz_activity.save() - frappe.db.commit() - -@frappe.whitelist() -def mark_course_complete(enrollment): - course_enrollment = frappe.get_doc("Course Enrollment", enrollment) - course_enrollment.completed = True - course_enrollment.save() - frappe.db.commit()