From 57c69a7d6c9805a754660f25ac2da35cea435f2c Mon Sep 17 00:00:00 2001 From: Jannat Patel Date: Tue, 8 Feb 2022 16:13:38 +0530 Subject: [PATCH] fix: removing get_doc dependencies for lms course --- school/community/widgets/Avatar.html | 2 +- school/hooks.py | 6 +- school/lms/doctype/lms_course/lms_course.py | 71 +------------- .../lms_course_review/lms_course_review.py | 2 +- school/lms/md.py | 2 +- school/lms/widgets/CourseCard.html | 76 +++++---------- school/overrides/user.py | 42 ++++---- school/public/css/style.css | 57 ++++++----- school/www/batch/utils.py | 35 ------- school/www/courses/index.html | 4 +- school/www/courses/index.py | 12 +-- school/www/utils.py | 97 +++++++++++++++++++ 12 files changed, 193 insertions(+), 213 deletions(-) delete mode 100644 school/www/batch/utils.py create mode 100644 school/www/utils.py diff --git a/school/community/widgets/Avatar.html b/school/community/widgets/Avatar.html index 6450ac9f..47cf60c9 100644 --- a/school/community/widgets/Avatar.html +++ b/school/community/widgets/Avatar.html @@ -1,4 +1,4 @@ -{% set color = member.get_palette() %} +{% set color = get_palette(member.full_name) %} {% if member.user_image %} diff --git a/school/hooks.py b/school/hooks.py index 5f305c20..3af95593 100644 --- a/school/hooks.py +++ b/school/hooks.py @@ -161,7 +161,11 @@ update_website_context = [ jinja = { "methods": [ - "school.page_renderers.get_profile_url" + "school.page_renderers.get_profile_url", + "school.overrides.user.get_palette", + "school.www.utils.get_membership", + "school.www.utils.get_lessons", + "school.www.utils.get_tags" ], "filters": [] } diff --git a/school/lms/doctype/lms_course/lms_course.py b/school/lms/doctype/lms_course/lms_course.py index 31ed35e0..b0c4c4e2 100644 --- a/school/lms/doctype/lms_course/lms_course.py +++ b/school/lms/doctype/lms_course/lms_course.py @@ -1,5 +1,4 @@ -# -*- coding: utf-8 -*- -# Copyright (c) 2021, FOSS United and contributors +# Copyright (c) 2021, Frappe and contributors # For license information, please see license.txt from __future__ import unicode_literals @@ -143,46 +142,7 @@ class LMSCourse(Document): fieldname="batch") return batch_name and frappe.get_doc("LMS Batch", batch_name) - def get_instructor(self): - if self.instructor: - return frappe.get_doc("User", self.instructor) - return frappe.get_doc("User", self.owner) - - def get_chapters(self): - """Returns all chapters of this course. - """ - chapters = [] - for row in self.chapters: - chapter_details = frappe.db.get_value("Course Chapter", row.chapter, - ["name", "title", "description"], - as_dict=True) - chapter_details.idx = row.idx - chapters.append(chapter_details) - return chapters - - def get_lessons(self, chapter=None): - """ If chapter is passed, returns lessons of only that chapter. - Else returns lessons of all chapters of the course """ - lessons = [] - - if chapter: - return self.get_lesson_details(chapter) - - for chapter in self.get_chapters(): - lesson = self.get_lesson_details(chapter) - lessons += lesson - - return lessons - - def get_lesson_details(self, chapter): - lessons = [] - lesson_list = frappe.get_all("Lesson Reference", {"parent": chapter.name}, - ["lesson", "idx"], order_by="idx") - for row in lesson_list: - lesson_details = frappe.get_doc("Course Lesson", row.lesson) - lesson_details.number = flt("{}.{}".format(chapter.idx, row.idx)) - lessons.append(lesson_details) - return lessons + def get_slugified_chapter_title(self, chapter): return slugify(chapter) @@ -201,15 +161,6 @@ class LMSCourse(Document): batch_names = {m.batch for m in memberships} return [b for b in batches if b.name in batch_names] - def get_upcoming_batches(self): - now = frappe.utils.nowdate() - batches = find_all("LMS Batch", - course=self.name, - start_date=[">", now], - status="Active", - visibility="Public") - return batches - def get_cohorts(self): return find_all("Cohort", course=self.name, order_by="creation") @@ -263,22 +214,7 @@ class LMSCourse(Document): return return f"/courses/{self.name}/learn/{lesson_number}" - def get_membership(self, member, batch=None): - filters = { - "member": member, - "course": self.name - } - if batch: - filters["batch"] = batch - membership = frappe.db.get_value("LMS Batch Membership", - filters, - ["name", "batch", "current_lesson", "member_type", "progress"], - as_dict=True) - - if membership and membership.batch: - membership.batch_title = frappe.db.get_value("LMS Batch", membership.batch, "title") - return membership def get_all_memberships(self, member): all_memberships = frappe.get_all("LMS Batch Membership", {"member": member, "course": self.name}, ["batch"]) @@ -302,8 +238,7 @@ class LMSCourse(Document): member_names = [m['member'] for m in memberships] return find_all("User", name=["IN", member_names]) - def get_tags(self): - return self.tags.split(",") if self.tags else [] + def get_reviews(self): reviews = frappe.get_all("LMS Course Review", diff --git a/school/lms/doctype/lms_course_review/lms_course_review.py b/school/lms/doctype/lms_course_review/lms_course_review.py index ffe100b9..8e274450 100644 --- a/school/lms/doctype/lms_course_review/lms_course_review.py +++ b/school/lms/doctype/lms_course_review/lms_course_review.py @@ -1,4 +1,4 @@ -# Copyright (c) 2021, FOSS United and contributors +# Copyright (c) 2021, Frappe and contributors # For license information, please see license.txt import frappe diff --git a/school/lms/md.py b/school/lms/md.py index 5acb6322..b072af2a 100644 --- a/school/lms/md.py +++ b/school/lms/md.py @@ -105,7 +105,7 @@ def sanitize_html(html, macro): any broken tags. This makes sures that all those things are fixed before passing to the etree parser. """ - soup = BeautifulSoup(html, features="lxml") + soup = BeautifulSoup(html, features="html5lib") nodes = soup.body.children classname = "" if macro == "YouTubeVideo": diff --git a/school/lms/widgets/CourseCard.html b/school/lms/widgets/CourseCard.html index b639f11d..443a6d54 100644 --- a/school/lms/widgets/CourseCard.html +++ b/school/lms/widgets/CourseCard.html @@ -1,47 +1,41 @@ -{% set membership = course.get_membership(frappe.session.user) %} +{% set membership = get_membership(course.name, frappe.session.user) %} {% set progress = frappe.utils.cint(membership.progress) %}
- {% for tag in course.get_tags() %} + {% for tag in get_tags(course.name) %}
{{ tag }}
{% endfor %} - {% if membership and not read_only %} - {% if progress < 100 %}
{{ frappe.utils.rounded(progress) }}% - {{ _("Completed") }}
- {% else %} -
{{ _("Completed") - }}
+ {% if not course.image %} +
{{ course.title[0] }}
{% endif %} - {% endif %} -
- {% if not course.image %} -
{{ course.title[0] }}
- {% endif %}
-
- {% if course.get_chapters() | length %} +
+ {% if get_lessons(course.name) | length %} - {{ course.get_chapters() | length }} {{ _("Chapters") }} - - {% endif %} - {% if course.get_chapters() | length and course.get_upcoming_batches() | length %} - . - {% endif %} - {% if course.get_upcoming_batches() | length %} - - {{ course.get_upcoming_batches() | length }} {{ _("Open Batches") }} + {{ get_lessons(course.name) | length }} {{ _("Lessons") }} {% endif %}
{{ course.title }}
-
- + + {% if membership and not read_only %} +
+
+ {{ progress }} Complete +
+
+
{{ progress }}% Completed
+ {% endif %} + +