From fc1c393f15e038eda5f68d70e9c44d9d25e91576 Mon Sep 17 00:00:00 2001 From: Anand Chitipothu Date: Tue, 22 Jun 2021 18:09:21 +0530 Subject: [PATCH 1/3] feat: allow a student to be mentor of another batch This is a requirement for mon.school. The students are of the first batch are now mentors of new batches. --- .../lms_batch_membership.py | 34 ++++++++++++------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/community/lms/doctype/lms_batch_membership/lms_batch_membership.py b/community/lms/doctype/lms_batch_membership/lms_batch_membership.py index 5dd33f09..5e975ce0 100644 --- a/community/lms/doctype/lms_batch_membership/lms_batch_membership.py +++ b/community/lms/doctype/lms_batch_membership/lms_batch_membership.py @@ -32,20 +32,28 @@ class LMSBatchMembership(Document): frappe.throw(_("{0} is already a {1} of the course {2}").format(member_name, previous_membership.member_type, course_title)) def validate_membership_in_different_batch_same_course(self): - course = frappe.db.get_value("LMS Batch", self.batch, "course") - previous_membership = frappe.get_all("LMS Batch Membership", - filters={ - "member": self.member, - "name": ["!=", self.name] - }, - fields=["batch", "member_type", "name"] - ) + """Ensures that a studnet is only part of one batch. + """ + # nothing to worry if the member is not a student + if self.member_type != "Student": + return - for membership in previous_membership: - batch_course = frappe.db.get_value("LMS Batch", membership.batch, "course") - if batch_course == course and (membership.member_type == "Student" or self.member_type == "Student"): - member_name = frappe.db.get_value("User", self.member, "full_name") - frappe.throw(_("{0} is already a {1} of {2} course through {3} batch").format(member_name, membership.member_type, course, membership.batch)) + course = frappe.db.get_value("LMS Batch", self.batch, "course") + memberships = frappe.get_all( + "LMS Batch Membership", + filters={ + "member": self.member, + "name": ["!=", self.name], + "member_type": "Student", + "course": self.course + }, + fields=["batch", "member_type", "name"] + ) + + if memberships: + membership = memberships[0] + member_name = frappe.db.get_value("User", self.member, "full_name") + frappe.throw(_("{0} is already a Student of {1} course through {2} batch").format(member_name, course, membership.batch)) @frappe.whitelist() def create_membership(course, batch=None, member=None, member_type="Student", role="Member"): From f303be4db5ff69c4975ae38ab6655ccf525eb103 Mon Sep 17 00:00:00 2001 From: Anand Chitipothu Date: Tue, 22 Jun 2021 18:12:31 +0530 Subject: [PATCH 2/3] fix: error in find_macros when the input is empty Added a special case to handle this issue. --- community/lms/md.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/community/lms/md.py b/community/lms/md.py index b256eb72..0658ca82 100644 --- a/community/lms/md.py +++ b/community/lms/md.py @@ -36,6 +36,8 @@ def find_macros(text): ('Exercise', 'four-circles') ] """ + if not text: + return [] macros = re.findall(MACRO_RE, text) # remove the quotes around the argument return [(name, _remove_quotes(arg)) for name, arg in macros] From 20b3ae7d768eeaa9ba2553fb3176ba66d68448d2 Mon Sep 17 00:00:00 2001 From: Anand Chitipothu Date: Wed, 23 Jun 2021 10:27:01 +0530 Subject: [PATCH 3/3] fix: error in linking lessons on course page The course was adding `{{ no such element: community.lms.doctype.lms_course.lms_course.LMSCourse object['query_parameter'] }}` to the lesson links. Fixed it by setting query_parameter to "". --- community/www/courses/course.py | 1 + 1 file changed, 1 insertion(+) diff --git a/community/www/courses/course.py b/community/www/courses/course.py index 3bc2f50f..eda11084 100644 --- a/community/www/courses/course.py +++ b/community/www/courses/course.py @@ -16,6 +16,7 @@ def get_context(context): raise frappe.Redirect context.course = course + context.course.query_parameter = "" if not course.is_mentor(frappe.session.user): batch = course.get_membership(frappe.session.user) if batch: